0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __LINUX_USB_TCPCI_H
0009 #define __LINUX_USB_TCPCI_H
0010
0011 #include <linux/usb/typec.h>
0012 #include <linux/usb/tcpm.h>
0013
0014 #define TCPC_VENDOR_ID 0x0
0015 #define TCPC_PRODUCT_ID 0x2
0016 #define TCPC_BCD_DEV 0x4
0017 #define TCPC_TC_REV 0x6
0018 #define TCPC_PD_REV 0x8
0019 #define TCPC_PD_INT_REV 0xa
0020
0021 #define TCPC_ALERT 0x10
0022 #define TCPC_ALERT_EXTND BIT(14)
0023 #define TCPC_ALERT_EXTENDED_STATUS BIT(13)
0024 #define TCPC_ALERT_VBUS_DISCNCT BIT(11)
0025 #define TCPC_ALERT_RX_BUF_OVF BIT(10)
0026 #define TCPC_ALERT_FAULT BIT(9)
0027 #define TCPC_ALERT_V_ALARM_LO BIT(8)
0028 #define TCPC_ALERT_V_ALARM_HI BIT(7)
0029 #define TCPC_ALERT_TX_SUCCESS BIT(6)
0030 #define TCPC_ALERT_TX_DISCARDED BIT(5)
0031 #define TCPC_ALERT_TX_FAILED BIT(4)
0032 #define TCPC_ALERT_RX_HARD_RST BIT(3)
0033 #define TCPC_ALERT_RX_STATUS BIT(2)
0034 #define TCPC_ALERT_POWER_STATUS BIT(1)
0035 #define TCPC_ALERT_CC_STATUS BIT(0)
0036
0037 #define TCPC_ALERT_MASK 0x12
0038 #define TCPC_POWER_STATUS_MASK 0x14
0039 #define TCPC_FAULT_STATUS_MASK 0x15
0040
0041 #define TCPC_EXTENDED_STATUS_MASK 0x16
0042 #define TCPC_EXTENDED_STATUS_MASK_VSAFE0V BIT(0)
0043
0044 #define TCPC_ALERT_EXTENDED_MASK 0x17
0045 #define TCPC_SINK_FAST_ROLE_SWAP BIT(0)
0046
0047 #define TCPC_CONFIG_STD_OUTPUT 0x18
0048
0049 #define TCPC_TCPC_CTRL 0x19
0050 #define TCPC_TCPC_CTRL_ORIENTATION BIT(0)
0051 #define PLUG_ORNT_CC1 0
0052 #define PLUG_ORNT_CC2 1
0053 #define TCPC_TCPC_CTRL_BIST_TM BIT(1)
0054 #define TCPC_TCPC_CTRL_EN_LK4CONN_ALRT BIT(6)
0055
0056 #define TCPC_EXTENDED_STATUS 0x20
0057 #define TCPC_EXTENDED_STATUS_VSAFE0V BIT(0)
0058
0059 #define TCPC_ROLE_CTRL 0x1a
0060 #define TCPC_ROLE_CTRL_DRP BIT(6)
0061 #define TCPC_ROLE_CTRL_RP_VAL_SHIFT 4
0062 #define TCPC_ROLE_CTRL_RP_VAL_MASK 0x3
0063 #define TCPC_ROLE_CTRL_RP_VAL_DEF 0x0
0064 #define TCPC_ROLE_CTRL_RP_VAL_1_5 0x1
0065 #define TCPC_ROLE_CTRL_RP_VAL_3_0 0x2
0066 #define TCPC_ROLE_CTRL_CC2_SHIFT 2
0067 #define TCPC_ROLE_CTRL_CC2_MASK 0x3
0068 #define TCPC_ROLE_CTRL_CC1_SHIFT 0
0069 #define TCPC_ROLE_CTRL_CC1_MASK 0x3
0070 #define TCPC_ROLE_CTRL_CC_RA 0x0
0071 #define TCPC_ROLE_CTRL_CC_RP 0x1
0072 #define TCPC_ROLE_CTRL_CC_RD 0x2
0073 #define TCPC_ROLE_CTRL_CC_OPEN 0x3
0074
0075 #define TCPC_FAULT_CTRL 0x1b
0076
0077 #define TCPC_POWER_CTRL 0x1c
0078 #define TCPC_POWER_CTRL_VCONN_ENABLE BIT(0)
0079 #define TCPC_POWER_CTRL_BLEED_DISCHARGE BIT(3)
0080 #define TCPC_POWER_CTRL_AUTO_DISCHARGE BIT(4)
0081 #define TCPC_DIS_VOLT_ALRM BIT(5)
0082 #define TCPC_POWER_CTRL_VBUS_VOLT_MON BIT(6)
0083 #define TCPC_FAST_ROLE_SWAP_EN BIT(7)
0084
0085 #define TCPC_CC_STATUS 0x1d
0086 #define TCPC_CC_STATUS_TOGGLING BIT(5)
0087 #define TCPC_CC_STATUS_TERM BIT(4)
0088 #define TCPC_CC_STATUS_TERM_RP 0
0089 #define TCPC_CC_STATUS_TERM_RD 1
0090 #define TCPC_CC_STATE_SRC_OPEN 0
0091 #define TCPC_CC_STATUS_CC2_SHIFT 2
0092 #define TCPC_CC_STATUS_CC2_MASK 0x3
0093 #define TCPC_CC_STATUS_CC1_SHIFT 0
0094 #define TCPC_CC_STATUS_CC1_MASK 0x3
0095
0096 #define TCPC_POWER_STATUS 0x1e
0097 #define TCPC_POWER_STATUS_DBG_ACC_CON BIT(7)
0098 #define TCPC_POWER_STATUS_UNINIT BIT(6)
0099 #define TCPC_POWER_STATUS_SOURCING_VBUS BIT(4)
0100 #define TCPC_POWER_STATUS_VBUS_DET BIT(3)
0101 #define TCPC_POWER_STATUS_VBUS_PRES BIT(2)
0102 #define TCPC_POWER_STATUS_VCONN_PRES BIT(1)
0103 #define TCPC_POWER_STATUS_SINKING_VBUS BIT(0)
0104
0105 #define TCPC_FAULT_STATUS 0x1f
0106
0107 #define TCPC_ALERT_EXTENDED 0x21
0108
0109 #define TCPC_COMMAND 0x23
0110 #define TCPC_CMD_WAKE_I2C 0x11
0111 #define TCPC_CMD_DISABLE_VBUS_DETECT 0x22
0112 #define TCPC_CMD_ENABLE_VBUS_DETECT 0x33
0113 #define TCPC_CMD_DISABLE_SINK_VBUS 0x44
0114 #define TCPC_CMD_SINK_VBUS 0x55
0115 #define TCPC_CMD_DISABLE_SRC_VBUS 0x66
0116 #define TCPC_CMD_SRC_VBUS_DEFAULT 0x77
0117 #define TCPC_CMD_SRC_VBUS_HIGH 0x88
0118 #define TCPC_CMD_LOOK4CONNECTION 0x99
0119 #define TCPC_CMD_RXONEMORE 0xAA
0120 #define TCPC_CMD_I2C_IDLE 0xFF
0121
0122 #define TCPC_DEV_CAP_1 0x24
0123 #define TCPC_DEV_CAP_2 0x26
0124 #define TCPC_STD_INPUT_CAP 0x28
0125 #define TCPC_STD_OUTPUT_CAP 0x29
0126
0127 #define TCPC_MSG_HDR_INFO 0x2e
0128 #define TCPC_MSG_HDR_INFO_DATA_ROLE BIT(3)
0129 #define TCPC_MSG_HDR_INFO_PWR_ROLE BIT(0)
0130 #define TCPC_MSG_HDR_INFO_REV_SHIFT 1
0131 #define TCPC_MSG_HDR_INFO_REV_MASK 0x3
0132
0133 #define TCPC_RX_DETECT 0x2f
0134 #define TCPC_RX_DETECT_HARD_RESET BIT(5)
0135 #define TCPC_RX_DETECT_SOP BIT(0)
0136 #define TCPC_RX_DETECT_SOP1 BIT(1)
0137 #define TCPC_RX_DETECT_SOP2 BIT(2)
0138 #define TCPC_RX_DETECT_DBG1 BIT(3)
0139 #define TCPC_RX_DETECT_DBG2 BIT(4)
0140
0141 #define TCPC_RX_BYTE_CNT 0x30
0142 #define TCPC_RX_BUF_FRAME_TYPE 0x31
0143 #define TCPC_RX_BUF_FRAME_TYPE_SOP 0
0144 #define TCPC_RX_HDR 0x32
0145 #define TCPC_RX_DATA 0x34
0146
0147 #define TCPC_TRANSMIT 0x50
0148 #define TCPC_TRANSMIT_RETRY_SHIFT 4
0149 #define TCPC_TRANSMIT_RETRY_MASK 0x3
0150 #define TCPC_TRANSMIT_TYPE_SHIFT 0
0151 #define TCPC_TRANSMIT_TYPE_MASK 0x7
0152
0153 #define TCPC_TX_BYTE_CNT 0x51
0154 #define TCPC_TX_HDR 0x52
0155 #define TCPC_TX_DATA 0x54
0156
0157 #define TCPC_VBUS_VOLTAGE 0x70
0158 #define TCPC_VBUS_VOLTAGE_MASK 0x3ff
0159 #define TCPC_VBUS_VOLTAGE_LSB_MV 25
0160 #define TCPC_VBUS_SINK_DISCONNECT_THRESH 0x72
0161 #define TCPC_VBUS_SINK_DISCONNECT_THRESH_LSB_MV 25
0162 #define TCPC_VBUS_SINK_DISCONNECT_THRESH_MAX 0x3ff
0163 #define TCPC_VBUS_STOP_DISCHARGE_THRESH 0x74
0164 #define TCPC_VBUS_VOLTAGE_ALARM_HI_CFG 0x76
0165 #define TCPC_VBUS_VOLTAGE_ALARM_LO_CFG 0x78
0166
0167
0168 #define TCPC_TRANSMIT_BUFFER_MAX_LEN 31
0169
0170 struct tcpci;
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187 struct tcpci_data {
0188 struct regmap *regmap;
0189 unsigned char TX_BUF_BYTE_x_hidden:1;
0190 unsigned char auto_discharge_disconnect:1;
0191 unsigned char vbus_vsafe0v:1;
0192
0193 int (*init)(struct tcpci *tcpci, struct tcpci_data *data);
0194 int (*set_vconn)(struct tcpci *tcpci, struct tcpci_data *data,
0195 bool enable);
0196 int (*start_drp_toggling)(struct tcpci *tcpci, struct tcpci_data *data,
0197 enum typec_cc_status cc);
0198 int (*set_vbus)(struct tcpci *tcpci, struct tcpci_data *data, bool source, bool sink);
0199 void (*frs_sourcing_vbus)(struct tcpci *tcpci, struct tcpci_data *data);
0200 void (*set_partner_usb_comm_capable)(struct tcpci *tcpci, struct tcpci_data *data,
0201 bool capable);
0202 };
0203
0204 struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data);
0205 void tcpci_unregister_port(struct tcpci *tcpci);
0206 irqreturn_t tcpci_irq(struct tcpci *tcpci);
0207
0208 struct tcpm_port;
0209 struct tcpm_port *tcpci_get_tcpm_port(struct tcpci *tcpci);
0210 #endif