1 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2 /*
3  * STMicroelectronics STUSB Type-C controller driver
4  * based on Linux drivers/usb/typec/stusb160x.c
5  *
6  * Copyright (C) 2020, STMicroelectronics - All Rights Reserved
7  */
8 
9 #define LOG_CATEGORY UCLASS_I2C_GENERIC
10 
11 #include <common.h>
12 #include <dm.h>
13 #include <i2c.h>
14 
15 /* REGISTER */
16 #define STUSB160X_CC_CONNECTION_STATUS		0x0E
17 
18 /* STUSB160X_CC_CONNECTION_STATUS bitfields */
19 #define STUSB160X_CC_ATTACH			BIT(0)
20 
stusb160x_cable_connected(void)21 int stusb160x_cable_connected(void)
22 {
23 	struct udevice *dev;
24 	int ret;
25 
26 	ret = uclass_get_device_by_driver(UCLASS_I2C_GENERIC,
27 					  DM_DRIVER_GET(stusb160x),
28 					  &dev);
29 	if (ret < 0)
30 		return ret;
31 
32 	ret = dm_i2c_reg_read(dev, STUSB160X_CC_CONNECTION_STATUS);
33 	if (ret < 0)
34 		return 0;
35 
36 	return ret & STUSB160X_CC_ATTACH;
37 }
38 
39 static const struct udevice_id stusb160x_ids[] = {
40 	{ .compatible = "st,stusb1600" },
41 	{}
42 };
43 
44 U_BOOT_DRIVER(stusb160x) = {
45 	.name = "stusb160x",
46 	.id = UCLASS_I2C_GENERIC,
47 	.of_match = stusb160x_ids,
48 };
49