diff options
Diffstat (limited to 'drivers/usb/typec/tcpm/tcpci.h')
-rw-r--r-- | drivers/usb/typec/tcpm/tcpci.h | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h index 5ef07a56d67a..c3c7d07d9b4e 100644 --- a/drivers/usb/typec/tcpm/tcpci.h +++ b/drivers/usb/typec/tcpm/tcpci.h | |||
@@ -8,6 +8,8 @@ | |||
8 | #ifndef __LINUX_USB_TCPCI_H | 8 | #ifndef __LINUX_USB_TCPCI_H |
9 | #define __LINUX_USB_TCPCI_H | 9 | #define __LINUX_USB_TCPCI_H |
10 | 10 | ||
11 | #include <linux/usb/typec.h> | ||
12 | |||
11 | #define TCPC_VENDOR_ID 0x0 | 13 | #define TCPC_VENDOR_ID 0x0 |
12 | #define TCPC_PRODUCT_ID 0x2 | 14 | #define TCPC_PRODUCT_ID 0x2 |
13 | #define TCPC_BCD_DEV 0x4 | 15 | #define TCPC_BCD_DEV 0x4 |
@@ -47,6 +49,9 @@ | |||
47 | #define TCPC_TCPC_CTRL_ORIENTATION BIT(0) | 49 | #define TCPC_TCPC_CTRL_ORIENTATION BIT(0) |
48 | #define TCPC_TCPC_CTRL_BIST_TM BIT(1) | 50 | #define TCPC_TCPC_CTRL_BIST_TM BIT(1) |
49 | 51 | ||
52 | #define TCPC_EXTENDED_STATUS 0x20 | ||
53 | #define TCPC_EXTENDED_STATUS_VSAFE0V BIT(0) | ||
54 | |||
50 | #define TCPC_ROLE_CTRL 0x1a | 55 | #define TCPC_ROLE_CTRL 0x1a |
51 | #define TCPC_ROLE_CTRL_DRP BIT(6) | 56 | #define TCPC_ROLE_CTRL_DRP BIT(6) |
52 | #define TCPC_ROLE_CTRL_RP_VAL_SHIFT 4 | 57 | #define TCPC_ROLE_CTRL_RP_VAL_SHIFT 4 |
@@ -67,6 +72,8 @@ | |||
67 | 72 | ||
68 | #define TCPC_POWER_CTRL 0x1c | 73 | #define TCPC_POWER_CTRL 0x1c |
69 | #define TCPC_POWER_CTRL_VCONN_ENABLE BIT(0) | 74 | #define TCPC_POWER_CTRL_VCONN_ENABLE BIT(0) |
75 | #define TCPC_POWER_CTRL_BLEED_DISCHARGE BIT(3) | ||
76 | #define TCPC_POWER_CTRL_AUTO_DISCHARGE BIT(4) | ||
70 | #define TCPC_FAST_ROLE_SWAP_EN BIT(7) | 77 | #define TCPC_FAST_ROLE_SWAP_EN BIT(7) |
71 | 78 | ||
72 | #define TCPC_CC_STATUS 0x1d | 79 | #define TCPC_CC_STATUS 0x1d |
@@ -133,6 +140,8 @@ | |||
133 | 140 | ||
134 | #define TCPC_VBUS_VOLTAGE 0x70 | 141 | #define TCPC_VBUS_VOLTAGE 0x70 |
135 | #define TCPC_VBUS_SINK_DISCONNECT_THRESH 0x72 | 142 | #define TCPC_VBUS_SINK_DISCONNECT_THRESH 0x72 |
143 | #define TCPC_VBUS_SINK_DISCONNECT_THRESH_LSB_MV 25 | ||
144 | #define TCPC_VBUS_SINK_DISCONNECT_THRESH_MAX 0x3ff | ||
136 | #define TCPC_VBUS_STOP_DISCHARGE_THRESH 0x74 | 145 | #define TCPC_VBUS_STOP_DISCHARGE_THRESH 0x74 |
137 | #define TCPC_VBUS_VOLTAGE_ALARM_HI_CFG 0x76 | 146 | #define TCPC_VBUS_VOLTAGE_ALARM_HI_CFG 0x76 |
138 | #define TCPC_VBUS_VOLTAGE_ALARM_LO_CFG 0x78 | 147 | #define TCPC_VBUS_VOLTAGE_ALARM_LO_CFG 0x78 |
@@ -140,20 +149,32 @@ | |||
140 | /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */ | 149 | /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */ |
141 | #define TCPC_TRANSMIT_BUFFER_MAX_LEN 31 | 150 | #define TCPC_TRANSMIT_BUFFER_MAX_LEN 31 |
142 | 151 | ||
152 | struct tcpci; | ||
153 | |||
143 | /* | 154 | /* |
144 | * @TX_BUF_BYTE_x_hidden | 155 | * @TX_BUF_BYTE_x_hidden: |
145 | * optional; Set when TX_BUF_BYTE_x can only be accessed through I2C_WRITE_BYTE_COUNT. | 156 | * optional; Set when TX_BUF_BYTE_x can only be accessed through I2C_WRITE_BYTE_COUNT. |
157 | * @frs_sourcing_vbus: | ||
158 | * Optional; Callback to perform chip specific operations when FRS | ||
159 | * is sourcing vbus. | ||
160 | * @auto_discharge_disconnect: | ||
161 | * Optional; Enables TCPC to autonously discharge vbus on disconnect. | ||
162 | * @vbus_vsafe0v: | ||
163 | * optional; Set when TCPC can detect whether vbus is at VSAFE0V. | ||
146 | */ | 164 | */ |
147 | struct tcpci; | ||
148 | struct tcpci_data { | 165 | struct tcpci_data { |
149 | struct regmap *regmap; | 166 | struct regmap *regmap; |
150 | unsigned char TX_BUF_BYTE_x_hidden:1; | 167 | unsigned char TX_BUF_BYTE_x_hidden:1; |
168 | unsigned char auto_discharge_disconnect:1; | ||
169 | unsigned char vbus_vsafe0v:1; | ||
170 | |||
151 | int (*init)(struct tcpci *tcpci, struct tcpci_data *data); | 171 | int (*init)(struct tcpci *tcpci, struct tcpci_data *data); |
152 | int (*set_vconn)(struct tcpci *tcpci, struct tcpci_data *data, | 172 | int (*set_vconn)(struct tcpci *tcpci, struct tcpci_data *data, |
153 | bool enable); | 173 | bool enable); |
154 | int (*start_drp_toggling)(struct tcpci *tcpci, struct tcpci_data *data, | 174 | int (*start_drp_toggling)(struct tcpci *tcpci, struct tcpci_data *data, |
155 | enum typec_cc_status cc); | 175 | enum typec_cc_status cc); |
156 | int (*set_vbus)(struct tcpci *tcpci, struct tcpci_data *data, bool source, bool sink); | 176 | int (*set_vbus)(struct tcpci *tcpci, struct tcpci_data *data, bool source, bool sink); |
177 | void (*frs_sourcing_vbus)(struct tcpci *tcpci, struct tcpci_data *data); | ||
157 | }; | 178 | }; |
158 | 179 | ||
159 | struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data); | 180 | struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data); |