aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/typec/tcpm/tcpci.h')
-rw-r--r--drivers/usb/typec/tcpm/tcpci.h25
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
152struct 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 */
147struct tcpci;
148struct tcpci_data { 165struct 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
159struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data); 180struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data);