Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 /*
0003  * Copyright 2015-2017 Google, Inc
0004  *
0005  * USB Type-C Port Controller Interface.
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 /* through 0x4f */
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 /* through 0x6f */
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 /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */
0168 #define TCPC_TRANSMIT_BUFFER_MAX_LEN        31
0169 
0170 struct tcpci;
0171 
0172 /*
0173  * @TX_BUF_BYTE_x_hidden:
0174  *      optional; Set when TX_BUF_BYTE_x can only be accessed through I2C_WRITE_BYTE_COUNT.
0175  * @frs_sourcing_vbus:
0176  *      Optional; Callback to perform chip specific operations when FRS
0177  *      is sourcing vbus.
0178  * @auto_discharge_disconnect:
0179  *      Optional; Enables TCPC to autonously discharge vbus on disconnect.
0180  * @vbus_vsafe0v:
0181  *      optional; Set when TCPC can detect whether vbus is at VSAFE0V.
0182  * @set_partner_usb_comm_capable:
0183  *      Optional; The USB Communications Capable bit indicates if port
0184  *      partner is capable of communication over the USB data lines
0185  *      (e.g. D+/- or SS Tx/Rx). Called to notify the status of the bit.
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 /* __LINUX_USB_TCPCI_H */