LCOV - code coverage report
Current view: top level - zephyr/usb_c - tcpci.h Coverage Total Hit
Test: new.info Lines: 99.3 % 295 293
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            1 : /*
       2              :  * Copyright 2024 Google LLC
       3              :  * SPDX-License-Identifier: Apache-2.0
       4              :  */
       5              : 
       6              : #ifndef ZEPHYR_INCLUDE_USB_C_TCPCI_H_
       7              : #define ZEPHYR_INCLUDE_USB_C_TCPCI_H_
       8              : 
       9              : /**
      10              :  * @file
      11              :  * @brief Registers and fields definitions for TypeC Port Controller Interface
      12              :  *
      13              :  * This file contains register addresses, fields and masks used to retrieve specific data from
      14              :  * registry values. They may be used by all TCPC drivers compliant to the TCPCI specification.
      15              :  * Registers and fields are compliant to the Type-C Port Controller Interface
      16              :  * Specification Revision 2.0, Version 1.3.
      17              :  */
      18              : 
      19              : /** Register address - vendor id */
      20            1 : #define TCPC_REG_VENDOR_ID 0x0
      21              : 
      22              : /** Register address - product id */
      23            1 : #define TCPC_REG_PRODUCT_ID 0x2
      24              : 
      25              : /** Register address - version of TCPC */
      26            1 : #define TCPC_REG_BCD_DEV 0x4
      27              : 
      28              : /** Register address - USB TypeC version */
      29            1 : #define TCPC_REG_TC_REV            0x6
      30              : /** Mask for major part of type-c release supported */
      31            1 : #define TCPC_REG_TC_REV_MAJOR_MASK GENMASK(7, 4)
      32              : /** Macro to extract the major part of type-c release supported */
      33            1 : #define TCPC_REG_TC_REV_MAJOR(reg) (((reg) & TCPC_REG_TC_REV_MAJOR_MASK) >> 4)
      34              : /** Mask for minor part of type-c release supported */
      35            1 : #define TCPC_REG_TC_REV_MINOR_MASK GENMASK(3, 0)
      36              : /** Macro to extract the minor part of type-c release supported */
      37            1 : #define TCPC_REG_TC_REV_MINOR(reg) ((reg) & TCPC_REG_TC_REV_MINOR_MASK)
      38              : 
      39              : /** Register address - Power delivery revision */
      40            1 : #define TCPC_REG_PD_REV                0x8
      41              : /** Mask for major part of USB PD revision supported */
      42            1 : #define TCPC_REG_PD_REV_REV_MAJOR_MASK GENMASK(15, 12)
      43              : /** Macro to extract the major part of USB PD revision supported */
      44            1 : #define TCPC_REG_PD_REV_REV_MAJOR(reg) (((reg) & TCPC_REG_PD_REV_REV_MAJOR_MASK) >> 12)
      45              : /** Mask for minor part of USB PD revision supported */
      46            1 : #define TCPC_REG_PD_REV_REV_MINOR_MASK GENMASK(11, 8)
      47              : /** Macro to extract the minor part of USB PD revision supported */
      48            1 : #define TCPC_REG_PD_REV_REV_MINOR(reg) (((reg) & TCPC_REG_PD_REV_REV_MINOR_MASK) >> 8)
      49              : /** Mask for major part of USB PD version supported */
      50            1 : #define TCPC_REG_PD_REV_VER_MAJOR_MASK GENMASK(7, 4)
      51              : /** Macro to extract the major part of USB PD version supported */
      52            1 : #define TCPC_REG_PD_REV_VER_MAJOR(reg) (((reg) & TCPC_REG_PD_REV_VER_MAJOR_MASK) >> 4)
      53              : /** Mask for minor part of USB PD version supported */
      54            1 : #define TCPC_REG_PD_REV_VER_MINOR_MASK GENMASK(3, 0)
      55              : /** Macro to extract the minor part of USB PD version supported */
      56            1 : #define TCPC_REG_PD_REV_VER_MINOR(reg) ((reg) & TCPC_REG_PD_REV_VER_MINOR_MASK)
      57              : 
      58              : /** Register address - interface revision and version */
      59            1 : #define TCPC_REG_PD_INT_REV                0xa
      60              : /** Mask for major part of USB Port Controller Interface revision supported */
      61            1 : #define TCPC_REG_PD_INT_REV_REV_MAJOR_MASK GENMASK(15, 12)
      62              : /** Macro to extract the major part of USB Port Controller Interface revision supported */
      63            1 : #define TCPC_REG_PD_INT_REV_REV_MAJOR(reg) (((reg) & TCPC_REG_PD_INT_REV_REV_MAJOR_MASK) >> 12)
      64              : /** Mask for minor part of USB Port Controller Interface revision supported */
      65            1 : #define TCPC_REG_PD_INT_REV_REV_MINOR_MASK GENMASK(11, 8)
      66              : /** Macro to extract the minor part of USB Port Controller Interface revision supported */
      67            1 : #define TCPC_REG_PD_INT_REV_REV_MINOR(reg) (((reg) & TCPC_REG_PD_INT_REV_REV_MINOR_MASK) >> 8)
      68              : /** Mask for major part of USB Port Controller Interface version supported */
      69            1 : #define TCPC_REG_PD_INT_REV_VER_MAJOR_MASK GENMASK(7, 4)
      70              : /** Macro to extract the major part of USB Port Controller Interface version supported */
      71            1 : #define TCPC_REG_PD_INT_REV_VER_MAJOR(reg) (((reg) & TCPC_REG_PD_INT_REV_VER_MAJOR_MASK) >> 4)
      72              : /** Mask for minor part of USB Port Controller Interface version supported */
      73            1 : #define TCPC_REG_PD_INT_REV_VER_MINOR_MASK GENMASK(3, 0)
      74              : /** Macro to extract the minor part of USB Port Controller Interface version supported */
      75            1 : #define TCPC_REG_PD_INT_REV_VER_MINOR(reg) ((reg) & TCPC_REG_PD_INT_REV_VER_MINOR_MASK)
      76              : 
      77              : /** Register address - alert */
      78            1 : #define TCPC_REG_ALERT              0x10
      79              : /** Value for clear alert */
      80            1 : #define TCPC_REG_ALERT_NONE         0x0000
      81              : /** Value mask for all alert bits */
      82            1 : #define TCPC_REG_ALERT_MASK_ALL     0xffff
      83              : /** Bit for vendor defined alert */
      84            1 : #define TCPC_REG_ALERT_VENDOR_DEF   BIT(15)
      85              : /** Bit for extended alert */
      86            1 : #define TCPC_REG_ALERT_ALERT_EXT    BIT(14)
      87              : /** Bit for extended status alert */
      88            1 : #define TCPC_REG_ALERT_EXT_STATUS   BIT(13)
      89              : /** Bit for beginning of data receive */
      90            1 : #define TCPC_REG_ALERT_RX_BEGINNING BIT(12)
      91              : /** Bit for vbus disconnection alert */
      92            1 : #define TCPC_REG_ALERT_VBUS_DISCNCT BIT(11)
      93              : /** Bit for receive buffer overflow alert */
      94            1 : #define TCPC_REG_ALERT_RX_BUF_OVF   BIT(10)
      95              : /** Bit for fault alert */
      96            1 : #define TCPC_REG_ALERT_FAULT        BIT(9)
      97              : /** Bit for low vbus alarm */
      98            1 : #define TCPC_REG_ALERT_V_ALARM_LO   BIT(8)
      99              : /** Bit for high vbus alarm */
     100            1 : #define TCPC_REG_ALERT_V_ALARM_HI   BIT(7)
     101              : /** Bit for transmission success */
     102            1 : #define TCPC_REG_ALERT_TX_SUCCESS   BIT(6)
     103              : /** Bit for transmission discard alert */
     104            1 : #define TCPC_REG_ALERT_TX_DISCARDED BIT(5)
     105              : /** Bit for transmission fail alert */
     106            1 : #define TCPC_REG_ALERT_TX_FAILED    BIT(4)
     107              : /** Bit for received hard reset alert */
     108            1 : #define TCPC_REG_ALERT_RX_HARD_RST  BIT(3)
     109              : /** Bit for data received alert */
     110            1 : #define TCPC_REG_ALERT_RX_STATUS    BIT(2)
     111              : /** Bit for power status alert */
     112            1 : #define TCPC_REG_ALERT_POWER_STATUS BIT(1)
     113              : /** Bit for CC lines status alert */
     114            1 : #define TCPC_REG_ALERT_CC_STATUS    BIT(0)
     115              : /** Bits for any of transmission status alert */
     116            1 : #define TCPC_REG_ALERT_TX_COMPLETE                                                                 \
     117              :         (TCPC_REG_ALERT_TX_SUCCESS | TCPC_REG_ALERT_TX_DISCARDED | TCPC_REG_ALERT_TX_FAILED)
     118              : 
     119              : /**
     120              :  * Register address - alert mask
     121              :  * The bits for specific masks are on the same positions as for the @see TCPC_REG_ALERT register.
     122              :  */
     123            1 : #define TCPC_REG_ALERT_MASK 0x12
     124              : 
     125              : /**
     126              :  * Register address - power status mask
     127              :  * The bits for specific masks are on the same positions as for the @see TCPC_REG_POWER_STATUS
     128              :  * register.
     129              :  */
     130            1 : #define TCPC_REG_POWER_STATUS_MASK 0x14
     131              : 
     132              : /**
     133              :  * Register address - fault status mask
     134              :  * The bits for specific masks are on the same positions as for the @see TCPC_REG_FAULT_STATUS
     135              :  * register.
     136              :  */
     137            1 : #define TCPC_REG_FAULT_STATUS_MASK 0x15
     138              : 
     139              : /**
     140              :  * Register address - extended status mask
     141              :  * The bits for specific masks are on the same positions as for the @see TCPC_REG_EXT_STATUS
     142              :  * register.
     143              :  */
     144            1 : #define TCPC_REG_EXT_STATUS_MASK 0x16
     145              : 
     146              : /**
     147              :  * Register address - extended alert mask
     148              :  * The bits for specific masks are on the same positions as for the @see TCPC_REG_ALERT_EXT
     149              :  * register.
     150              :  */
     151            1 : #define TCPC_REG_ALERT_EXT_MASK 0x17
     152              : 
     153              : /** Register address - configure standard output */
     154            1 : #define TCPC_REG_CONFIG_STD_OUTPUT                   0x18
     155              : /** Bit for high impedance outputs */
     156            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_HIGH_Z            BIT(7)
     157              : /** Bit for debug accessory connected# */
     158            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_DBG_ACC_CONN_N    BIT(6)
     159              : /** Bit for audio accessory connected# */
     160            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_AUDIO_CONN_N      BIT(5)
     161              : /** Bit for active cable */
     162            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_ACTIVE_CABLE      BIT(4)
     163              : /** Value mask for mux control */
     164            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_MUX_MASK          (3 << 2)
     165              : /** Value for mux - no connection */
     166            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_MUX_NONE          (0 << 2)
     167              : /** Value for mux - USB3.1 connected */
     168            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB           (1 << 2)
     169              : /** Value for mux - DP alternate mode with 4 lanes */
     170            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_MUX_DP            (2 << 2)
     171              : /** Value for mux - USB3.1 + DP 0&1 lines */
     172            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_MUX_USB_DP        (3 << 2)
     173              : /** Bit for connection present */
     174            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_CONN_PRESENT      BIT(1)
     175              : /** Bit for connector orientation */
     176            1 : #define TCPC_REG_CONFIG_STD_OUTPUT_CONNECTOR_FLIPPED BIT(0)
     177              : 
     178              : /** Register address - TCPC control */
     179            1 : #define TCPC_REG_TCPC_CTRL                           0x19
     180              : /** Bit for SMBus PEC enabled */
     181            1 : #define TCPC_REG_TCPC_CTRL_SMBUS_PEC                 BIT(7)
     182              : /** Bit for enabling the alert assertion when a connection is found */
     183            1 : #define TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT  BIT(6)
     184              : /** Bit for watchdog monitoring */
     185            1 : #define TCPC_REG_TCPC_CTRL_WATCHDOG_TIMER            BIT(5)
     186              : /** Bit for enable debug accessory control by TCPM */
     187            1 : #define TCPC_REG_TCPC_CTRL_DEBUG_ACC_CONTROL         BIT(4)
     188              : /** Mask*/
     189            1 : #define TCPC_REG_TCPC_CTRL_CLOCK_STRETCH_MASK        GENMASK(3, 2)
     190              : /** Value for clock stretching disabled */
     191            1 : #define TCPC_REG_TCPC_CTRL_CLOCK_STRETCH_DISABLED    0
     192              : /** Value for limited clock stretching enabled */
     193            1 : #define TCPC_REG_TCPC_CTRL_CLOCK_STRETCH_EN_ALWAYS   (2 << 2)
     194              : /** Value for clock stretching enabled only when alert is NOT asserted */
     195            1 : #define TCPC_REG_TCPC_CTRL_CLOCK_STRETCH_EN_NO_ALERT (3 << 2)
     196              : /** Bit for BIST test mode enabled */
     197            1 : #define TCPC_REG_TCPC_CTRL_BIST_TEST_MODE            BIT(1)
     198              : /** Bit for plug orientation and vconn destination */
     199            1 : #define TCPC_REG_TCPC_CTRL_PLUG_ORIENTATION          BIT(0)
     200              : 
     201              : /** Register address - role control */
     202            1 : #define TCPC_REG_ROLE_CTRL          0x1a
     203              : /** Bit for dual-role port */
     204            1 : #define TCPC_REG_ROLE_CTRL_DRP_MASK BIT(6)
     205              : /** Mask to extract the RP value from register value */
     206            1 : #define TCPC_REG_ROLE_CTRL_RP_MASK  GENMASK(5, 4)
     207              : /** Mask to extract the CC2 pull value from register value */
     208            1 : #define TCPC_REG_ROLE_CTRL_CC2_MASK GENMASK(3, 2)
     209              : /** Mask to extract the CC! pull value from register value */
     210            1 : #define TCPC_REG_ROLE_CTRL_CC1_MASK GENMASK(1, 0)
     211              : /** Macro to set the register value from drp, rp and CC lines values */
     212            1 : #define TCPC_REG_ROLE_CTRL_SET(drp, rp, cc1, cc2)                                                  \
     213              :         ((((drp) << 6) & TCPC_REG_ROLE_CTRL_DRP_MASK) |                                            \
     214              :          (((rp) << 4) & TCPC_REG_ROLE_CTRL_RP_MASK) |                                              \
     215              :          (((cc2) << 2) & TCPC_REG_ROLE_CTRL_CC2_MASK) | ((cc1) & TCPC_REG_ROLE_CTRL_CC1_MASK))
     216            0 : #define TCPC_REG_ROLE_CTRL_DRP(reg) (((reg) & TCPC_REG_ROLE_CTRL_DRP_MASK) >> 6)
     217              : /** Macro to extract the enum tc_rp_value from register value */
     218            1 : #define TCPC_REG_ROLE_CTRL_RP(reg)  (((reg) & TCPC_REG_ROLE_CTRL_RP_MASK) >> 4)
     219              : /** Macro to extract the enum tc_cc_pull for CC2 from register value */
     220            1 : #define TCPC_REG_ROLE_CTRL_CC2(reg) (((reg) & TCPC_REG_ROLE_CTRL_CC2_MASK) >> 2)
     221              : /** Macro to extract the enum tc_cc_pull for CC1 from register value */
     222            1 : #define TCPC_REG_ROLE_CTRL_CC1(reg) ((reg) & TCPC_REG_ROLE_CTRL_CC1_MASK)
     223              : 
     224              : /** Register address - fault control */
     225            1 : #define TCPC_REG_FAULT_CTRL                      0x1b
     226              : /** Bit for block the standard input signal force off vbus control */
     227            1 : #define TCPC_REG_FAULT_CTRL_VBUS_FORCE_OFF       BIT(4)
     228              : /** Bit for disabling the vbus discharge fault detection timer */
     229            1 : #define TCPC_REG_FAULT_CTRL_VBUS_DISCHARGE_FAULT BIT(3)
     230              : /** Bit for disabling the vbus over current detection */
     231            1 : #define TCPC_REG_FAULT_CTRL_VBUS_OCP_FAULT_DIS   BIT(2)
     232              : /** Bit for disabling the vbus over voltage detection */
     233            1 : #define TCPC_REG_FAULT_CTRL_VBUS_OVP_FAULT_DIS   BIT(1)
     234              : /** Bit for disabling the vconn over current detection */
     235            1 : #define TCPC_REG_FAULT_CTRL_VCONN_OCP_FAULT_DIS  BIT(0)
     236              : 
     237              : /** Register address - power control */
     238            1 : #define TCPC_REG_POWER_CTRL                           0x1c
     239              : /** Bit for fast role swap enable */
     240            1 : #define TCPC_REG_POWER_CTRL_FRS_ENABLE                BIT(7)
     241              : /** Bit for disabling the vbus voltage monitoring */
     242            1 : #define TCPC_REG_POWER_CTRL_VBUS_VOL_MONITOR_DIS      BIT(6)
     243              : /** Bit for disabling the voltage alarms */
     244            1 : #define TCPC_REG_POWER_CTRL_VOLT_ALARM_DIS            BIT(5)
     245              : /** Bit for enabling the automatic vbus discharge based on the vbus voltage */
     246            1 : #define TCPC_REG_POWER_CTRL_AUTO_DISCHARGE_DISCONNECT BIT(4)
     247              : /** Bit for enabling the bleed discharge of vbus */
     248            1 : #define TCPC_REG_POWER_CTRL_BLEED_DISCHARGE           BIT(3)
     249              : /** Bit for enabling the forced vbus discharge */
     250            1 : #define TCPC_REG_POWER_CTRL_FORCE_DISCHARGE           BIT(2)
     251              : /**
     252              :  * Bit for enabling the vconn power supported.
     253              :  * If set, the TCPC will deliver at least the power indicated in the vconn power supported in
     254              :  * device capabilities register to the vconn.
     255              :  * If unset, at least 1W of power will be delivered to vconn.
     256              :  */
     257            1 : #define TCPC_REG_POWER_CTRL_VCONN_SUPP                BIT(1)
     258              : /** Bit for enabling the vconn sourcing to CC line */
     259            1 : #define TCPC_REG_POWER_CTRL_VCONN_EN                  BIT(0)
     260              : 
     261              : /** Register address - CC lines status */
     262            1 : #define TCPC_REG_CC_STATUS                 0x1d
     263              : /** Bit for active looking for a connection by TCPC, both DRP and sink/source only */
     264            1 : #define TCPC_REG_CC_STATUS_LOOK4CONNECTION BIT(5)
     265              : /** Bit for connection result, set if presenting Rd, unset if presenting Rp*/
     266            1 : #define TCPC_REG_CC_STATUS_CONNECT_RESULT  BIT(4)
     267              : /** Mask for CC2 line state */
     268            1 : #define TCPC_REG_CC_STATUS_CC2_STATE_MASK  GENMASK(3, 2)
     269              : /**
     270              :  * Macro to extract the status value of CC2 line. Interpretation of this value depends on the
     271              :  * value of CC2 configuration in Role Control register and on the connect result in this register.
     272              :  * For value interpretation look at the CC_STATUS Register Definition in the TCPCI specification.
     273              :  */
     274            1 : #define TCPC_REG_CC_STATUS_CC2_STATE(reg)  (((reg) & TCPC_REG_CC_STATUS_CC2_STATE_MASK) >> 2)
     275              : /** Mask for CC1 line state */
     276            1 : #define TCPC_REG_CC_STATUS_CC1_STATE_MASK  GENMASK(1, 0)
     277              : /** Macto to extract the status value of CC1 line. Look at the information about the CC2 macro. */
     278            1 : #define TCPC_REG_CC_STATUS_CC1_STATE(reg)  ((reg) & TCPC_REG_CC_STATUS_CC1_STATE_MASK)
     279              : 
     280              : /** Register address - power status */
     281            1 : #define TCPC_REG_POWER_STATUS               0x1e
     282              : /** Bit for debug accessory connected */
     283            1 : #define TCPC_REG_POWER_STATUS_DEBUG_ACC_CON BIT(7)
     284              : /** Bit for internal initialization in-progress. If set, only registers 00-0F contain valid data. */
     285            1 : #define TCPC_REG_POWER_STATUS_UNINIT        BIT(6)
     286              : /** Bit for sourcing high voltage. If set, the voltage sourced is above the vSafe5V. */
     287            1 : #define TCPC_REG_POWER_STATUS_SOURCING_HV   BIT(5)
     288              : /** Bit for sourcing vbus. If set, sourcing vbus is enabled. */
     289            1 : #define TCPC_REG_POWER_STATUS_SOURCING_VBUS BIT(4)
     290              : /** Bit for vbus detection enabled. */
     291            1 : #define TCPC_REG_POWER_STATUS_VBUS_DET      BIT(3)
     292              : /**
     293              :  * Bit for vbus present.
     294              :  * If set, the vbus shall be  above 4V. If unset, the vbus shall be below 3.5V.
     295              :  */
     296            1 : #define TCPC_REG_POWER_STATUS_VBUS_PRES     BIT(2)
     297              : /** Bit for vconn present. Set if vconn is present on CC1 or CC2, threshold is fixed at 2.4V. */
     298            1 : #define TCPC_REG_POWER_STATUS_VCONN_PRES    BIT(1)
     299              : /** Bit for sinking vbus. If set, the TCPC is sinking vbus to the system load. */
     300            1 : #define TCPC_REG_POWER_STATUS_SINKING_VBUS  BIT(0)
     301              : 
     302              : /** Register address - fault status */
     303            1 : #define TCPC_REG_FAULT_STATUS                      0x1f
     304              : /** Bit for all registers reset to default */
     305            1 : #define TCPC_REG_FAULT_STATUS_ALL_REGS_RESET       BIT(7)
     306              : /** Bit for force vbus off due to external fault */
     307            1 : #define TCPC_REG_FAULT_STATUS_FORCE_OFF_VBUS       BIT(6)
     308              : /** Bit for auto discharge failed */
     309            1 : #define TCPC_REG_FAULT_STATUS_AUTO_DISCHARGE_FAIL  BIT(5)
     310              : /** Bit for force discharge failed */
     311            1 : #define TCPC_REG_FAULT_STATUS_FORCE_DISCHARGE_FAIL BIT(4)
     312              : /** Bit for internal or external vbus over current */
     313            1 : #define TCPC_REG_FAULT_STATUS_VBUS_OVER_CURRENT    BIT(3)
     314              : /** Bit for internal or external vbus over voltage */
     315            1 : #define TCPC_REG_FAULT_STATUS_VBUS_OVER_VOLTAGE    BIT(2)
     316              : /** Bit for vconn over current */
     317            1 : #define TCPC_REG_FAULT_STATUS_VCONN_OVER_CURRENT   BIT(1)
     318              : /** Bit for I2C interface error */
     319            1 : #define TCPC_REG_FAULT_STATUS_I2C_INTERFACE_ERR    BIT(0)
     320              : 
     321              : /** Register address - extended status */
     322            1 : #define TCPC_REG_EXT_STATUS        0x20
     323              : /** Bit for vbus at vSafe0V. Set when the TCPC detects that VBUS is below 0.8V. */
     324            1 : #define TCPC_REG_EXT_STATUS_SAFE0V BIT(0)
     325              : 
     326              : /** Register address - alert extended */
     327            1 : #define TCPC_REG_ALERT_EXT               0x21
     328              : /** Bit for timer expired */
     329            1 : #define TCPC_REG_ALERT_EXT_TIMER_EXPIRED BIT(2)
     330              : /** Bit for source fast role swap. Set when FRS signal sent due to standard input being low. */
     331            1 : #define TCPC_REG_ALERT_EXT_SRC_FRS       BIT(1)
     332              : /** Bit for sink fast role swap. If set, the fast role swap signal was received. */
     333            1 : #define TCPC_REG_ALERT_EXT_SNK_FRS       BIT(0)
     334              : 
     335              : /** Register address - command */
     336            1 : #define TCPC_REG_COMMAND                     0x23
     337              : /** Value for wake i2c command */
     338            1 : #define TCPC_REG_COMMAND_WAKE_I2C            0x11
     339              : /** Value for disable vbus detect command - disable vbus present and vSafe0V detection */
     340            1 : #define TCPC_REG_COMMAND_DISABLE_VBUS_DETECT 0x22
     341              : /** Value for enable vbus detect command - enable vbus present and vSafe0V detection */
     342            1 : #define TCPC_REG_COMMAND_ENABLE_VBUS_DETECT  0x33
     343              : /** Value for disable sink vbus - disable sinking power over vbus */
     344            1 : #define TCPC_REG_COMMAND_SNK_CTRL_LOW        0x44
     345              : /** Value for sink vbus - enable sinking power over vbus and vbus present detection */
     346            1 : #define TCPC_REG_COMMAND_SNK_CTRL_HIGH       0x55
     347              : /** Value for disable source vbus - disable sourcing power over vbus */
     348            1 : #define TCPC_REG_COMMAND_SRC_CTRL_LOW        0x66
     349              : /** Value for source vbus default voltage - enable sourcing vSafe5V over vbus */
     350            1 : #define TCPC_REG_COMMAND_SRC_CTRL_DEF        0x77
     351              : /** Value for source vbus high voltage - enable sourcing high voltage over vbus */
     352            1 : #define TCPC_REG_COMMAND_SRC_CTRL_HV         0x88
     353              : /** Value for look for connection - start DRP toggling if DRP role is set */
     354            1 : #define TCPC_REG_COMMAND_LOOK4CONNECTION     0x99
     355              : /**
     356              :  * Value for rx one more
     357              :  * Configure receiver to automatically clear the receive_detect register after sending next GoodCRC.
     358              :  */
     359            1 : #define TCPC_REG_COMMAND_RX_ONE_MORE         0xAA
     360              : /**
     361              :  * Value for send fast role swap signal
     362              :  * Send FRS if TCPC is source with FRS enabled in power control register
     363              :  */
     364            1 : #define TCPC_REG_COMMAND_SEND_FRS_SIGNAL     0xCC
     365              : /** Value for reset transmit buffer - TCPC resets the pointer of transmit buffer to offset 1 */
     366            1 : #define TCPC_REG_COMMAND_RESET_TRANSMIT_BUF  0xDD
     367              : /**
     368              :  * Value for reset receive buffer
     369              :  * If buffer pointer is at 132 or less, it is reset to 1, otherwise it is reset to 133.
     370              :  */
     371            1 : #define TCPC_REG_COMMAND_RESET_RECEIVE_BUF   0xEE
     372              : /** Value for i2c idle */
     373            1 : #define TCPC_REG_COMMAND_I2CIDLE             0xFF
     374              : 
     375              : /** Register address - device capabilities 1 */
     376            1 : #define TCPC_REG_DEV_CAP_1                                 0x24
     377              : /** Bit for vbus high voltage target - if set, VBUS_HV_TARGET register is implemented */
     378            1 : #define TCPC_REG_DEV_CAP_1_VBUS_NONDEFAULT_TARGET          BIT(15)
     379              : /** Bit for vbus over current reporting - if set, vbus over current is reported by TCPC */
     380            1 : #define TCPC_REG_DEV_CAP_1_VBUS_OCP_REPORTING              BIT(14)
     381              : /** Bit for vbus over voltage reporting - if set, vbus over voltage is reported by TCPC */
     382            1 : #define TCPC_REG_DEV_CAP_1_VBUS_OVP_REPORTING              BIT(13)
     383              : /** Bit for bleed discharge - if set, bleed discharge is implemented in TCPC */
     384            1 : #define TCPC_REG_DEV_CAP_1_BLEED_DISCHARGE                 BIT(12)
     385              : /** Bit for force discharge - if set, force discharge is implemented in TCPC */
     386            1 : #define TCPC_REG_DEV_CAP_1_FORCE_DISCHARGE                 BIT(11)
     387              : /**
     388              :  * Bit for vbus measurement and alarm capable
     389              :  * If set, TCPC supports vbus voltage measurement and vbus voltage alarms
     390              :  */
     391            1 : #define TCPC_REG_DEV_CAP_1_VBUS_MEASURE_ALARM_CAPABLE      BIT(10)
     392              : /** Mask for source resistor supported */
     393            1 : #define TCPC_REG_DEV_CAP_1_SRC_RESISTOR_MASK               GENMASK(9, 8)
     394              : /**
     395              :  * Macro to extract the supported source resistors from register value
     396              :  * The value can be cast to enum tc_rp_value and value can be treated as highest amperage supported
     397              :  * since the TCPC has also to support lower values than specified.
     398              :  */
     399            1 : #define TCPC_REG_DEV_CAP_1_SRC_RESISTOR(reg)               \
     400              :         (((reg) & TCPC_REG_DEV_CAP_1_SRC_RESISTOR_MASK) >> 8)
     401              : /** Value for Rp default only - only default amperage is supported */
     402            1 : #define TCPC_REG_DEV_CAP_1_SRC_RESISTOR_RP_DEF             0
     403              : /** Value for Rp 1.5A and default - support for 1.5A and for default amperage*/
     404            1 : #define TCPC_REG_DEV_CAP_1_SRC_RESISTOR_RP_1P5_DEF         1
     405              : /** Value for Rp 3.0A, 1.5A and default - support for 3.0A, 1.5A and default amperage */
     406            1 : #define TCPC_REG_DEV_CAP_1_SRC_RESISTOR_RP_3P0_1P5_DEF     2
     407              : /** Mask for power roles supported */
     408            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_MASK                 GENMASK(7, 5)
     409            0 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE(reg)                 \
     410              :         (((reg) & TCPC_REG_DEV_CAP_1_POWER_ROLE_MASK) >> 5)
     411              : /** Value for support both source and sink only (no DRP) */
     412            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SRC_OR_SNK           0
     413              : /** Value for support source role only */
     414            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SRC                  1
     415              : /** Value for support sink role only */
     416            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SNK                  2
     417              : /** Value for support sink role with accessory */
     418            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SNK_ACC              3
     419              : /** Value for support dual-role port only */
     420            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_DRP                  4
     421              : /** Value for support source, sink, dual-role port, adapter and cable */
     422            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SRC_SNK_DRP_ADPT_CBL 5
     423              : /** Value for support source, sink and dual-role port */
     424            1 : #define TCPC_REG_DEV_CAP_1_POWER_ROLE_SRC_SNK_DRP          6
     425              : /** Bit for debug SOP' and SOP'' support - if set, all SOP* messages are supported */
     426            1 : #define TCPC_REG_DEV_CAP_1_ALL_SOP_STAR_MSGS_SUPPORTED     BIT(4)
     427              : /** Bit for source vconn - if set, TCPC is capable of switching the vconn source */
     428            1 : #define TCPC_REG_DEV_CAP_1_SOURCE_VCONN                    BIT(3)
     429              : /** Bit for sink vbus - if set, TCPC is capable of controling the sink path to the system load */
     430            1 : #define TCPC_REG_DEV_CAP_1_SINK_VBUS                       BIT(2)
     431              : /**
     432              :  * Bit for source high voltage vbus.
     433              :  * If set, TCPC can control the source high voltage path to vbus
     434              :  */
     435            1 : #define TCPC_REG_DEV_CAP_1_SOURCE_HV_VBUS                  BIT(1)
     436              : /** Bit for source vbus - if set, TCPC is capable of controlling the source path to vbus */
     437            1 : #define TCPC_REG_DEV_CAP_1_SOURCE_VBUS                     BIT(0)
     438              : 
     439              : /** Register address - device capabilities 2 */
     440            1 : #define TCPC_REG_DEV_CAP_2                         0x26
     441              : /** Bit for device capabilities 3 support */
     442            1 : #define TCPC_REG_DEV_CAP_2_CAP_3_SUPPORTED         BIT(15)
     443              : /** Bit for message disable disconnect */
     444            1 : #define TCPC_REG_DEV_CAP_2_MSG_DISABLE_DISCONNECT  BIT(14)
     445              : /** Bit for generic timer support */
     446            1 : #define TCPC_REG_DEV_CAP_2_GENERIC_TIMER           BIT(13)
     447              : /**
     448              :  * Bit for long message support
     449              :  * If set, the TCPC supports up to 264 bytes content of the SOP*.
     450              :  * One I2C transaction can write up to 132 bytes.
     451              :  * If unset, the TCPC support only 30 bytes content of the SOP* message.
     452              :  */
     453            1 : #define TCPC_REG_DEV_CAP_2_LONG_MSG                BIT(12)
     454              : /** Bit for SMBus PEC support. If set, SMBus PEC can be enabled in the TCPC control register. */
     455            1 : #define TCPC_REG_DEV_CAP_2_SMBUS_PEC               BIT(11)
     456              : /** Bit for source fast-role swap support. If set, TCPC is capable of sending FRS as source. */
     457            1 : #define TCPC_REG_DEV_CAP_2_SRC_FRS                 BIT(10)
     458              : /** Bit for sink fast-role swap support. If set, TCPC is capable of sending FRS as sink. */
     459            1 : #define TCPC_REG_DEV_CAP_2_SNK_FRS                 BIT(9)
     460              : /** Bit for watchdog timer support. If set, watchdog can be enabled in the TCPC control register. */
     461            1 : #define TCPC_REG_DEV_CAP_2_WATCHDOG_TIMER          BIT(8)
     462              : /**
     463              :  * Bit for sink disconnect detection.
     464              :  * If set, the sink disconnect threshold can be set. Otherwise, the vbus present value from
     465              :  * status register will be used to indicate the sink disconnection.
     466              :  */
     467            1 : #define TCPC_REG_DEV_CAP_2_SNK_DISC_DET            BIT(7)
     468              : /**
     469              :  * Bit for stop discharge threshold. If set, the TCPM can set the voltage threshold at which
     470              :  * the forced vbus discharge will be disabled, into the vbus stop discharge threshold register.
     471              :  */
     472            1 : #define TCPC_REG_DEV_CAP_2_STOP_DISCHARGE_THRESH   BIT(6)
     473              : /** Mask for resolution of voltage alarm */
     474            1 : #define TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM_MASK GENMASK(5, 4)
     475              : /** Macro to extract the voltage alarm resolution from the register value */
     476            1 : #define TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM(reg)                                                 \
     477              :         (((reg) & TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM_MASK) >> 4)
     478              : /** Value for 25mV resolution of voltage alarm, all 10 bits of voltage alarm registers are used. */
     479            1 : #define TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM_25MV    0
     480              : /** Value for 50mV resolution of voltage alarm, only 9 bits of voltage alarm registers are used. */
     481            1 : #define TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM_50MV    1
     482              : /** Value for 100mV resolution of voltage alarm, only 8 bits of voltage alarm registers are used. */
     483            1 : #define TCPC_REG_DEV_CAP_2_VBUS_VOLTAGE_ALARM_100MV   2
     484              : /** Mask for vconn power supported */
     485            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_MASK GENMASK(3, 1)
     486              : /** Macro to extract the vconn power supported from the register value */
     487            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED(reg)                                              \
     488              :         (((reg) & TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_MASK) >> 1)
     489              : /** Value for vconn power supported of 1.0W */
     490            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_1_0W     0
     491              : /** Value for vconn power supported of 1.5W */
     492            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_1_5W     1
     493              : /** Value for vconn power supported of 2.0W */
     494            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_2_0W     2
     495              : /** Value for vconn power supported of 3.0W */
     496            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_3_0W     3
     497              : /** Value for vconn power supported of 4.0W */
     498            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_4_0W     4
     499              : /** Value for vconn power supported of 5.0W */
     500            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_5_0W     5
     501              : /** Value for vconn power supported of 6.0W */
     502            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_6_0W     6
     503              : /** Value for external vconn power supported */
     504            1 : #define TCPC_REG_DEV_CAP_2_VCONN_POWER_SUPPORTED_EXTERNAL 7
     505              : /** Bit for vconn overcurrent fault capable - if set, TCPC can detect the vconn over current */
     506            1 : #define TCPC_REG_DEV_CAP_2_VCONN_OVC_FAULT                BIT(0)
     507              : 
     508              : /** Register address - standard input capabilities */
     509            1 : #define TCPC_REG_STD_INPUT_CAP                0x28
     510              : /** Mask for source fast role swap */
     511            1 : #define TCPC_REG_STD_INPUT_CAP_SRC_FRS_MASK   GENMASK(4, 3)
     512              : /** Macro to extract the source fast role swap from register value */
     513            1 : #define TCPC_REG_STD_INPUT_CAP_SRC_FRS(reg)   (((reg) & TCPC_REG_STD_INPUT_CAP_SRC_FRS_MASK) >> 3)
     514              : /** Value for no source fast role swap pin present in TCPC */
     515            1 : #define TCPC_REG_STD_INTPU_CAP_SRC_FRS_NONE   0
     516              : /** Value for source fast role swap input only pin present in TCPC */
     517            1 : #define TCPC_REG_STD_INTPU_CAP_SRC_FRS_INPUT  1
     518              : /** Value for source fast role swap both input and output pin present in TCPC */
     519            1 : #define TCPC_REG_STD_INTPU_CAP_SRC_FRS_BOTH   2
     520              : /** Bit for vbus external over voltage fault. If set, input pin is present in TCPC. */
     521            1 : #define TCPC_REG_STD_INPUT_CAP_EXT_OVP        BIT(2)
     522              : /** Bit for vbus external over current fault. If set, input pin is present in TCPC. */
     523            1 : #define TCPC_REG_STD_INPUT_CAP_EXT_OCP        BIT(1)
     524              : /** Bit for force off vbus present. If set, input pin is present in TCPC. */
     525            1 : #define TCPC_REG_STD_INPUT_CAP_FORCE_OFF_VBUS BIT(0)
     526              : 
     527              : /** Register address - standard output capabilities */
     528            1 : #define TCPC_REG_STD_OUTPUT_CAP                  0x29
     529              : /** Bit for vbus sink disconnect detect indicator */
     530            1 : #define TCPC_REG_STD_OUTPUT_CAP_SNK_DISC_DET     BIT(7)
     531              : /** Bit for debug accessory indicator */
     532            1 : #define TCPC_REG_STD_OUTPUT_CAP_DBG_ACCESSORY    BIT(6)
     533              : /** Bit for vbus present monitor */
     534            1 : #define TCPC_REG_STD_OUTPUT_CAP_VBUS_PRESENT_MON BIT(5)
     535              : /** Bit for audio adapter accessory indicator */
     536            1 : #define TCPC_REG_STD_OUTPUT_CAP_AUDIO_ACCESSORY  BIT(4)
     537              : /** Bit for active cable indicator */
     538            1 : #define TCPC_REG_STD_OUTPUT_CAP_ACTIVE_CABLE     BIT(3)
     539              : /** Bit for mux configuration control */
     540            1 : #define TCPC_REG_STD_OUTPUT_CAP_MUX_CFG_CTRL     BIT(2)
     541              : /** Bit for connection present */
     542            1 : #define TCPC_REG_STD_OUTPUT_CAP_CONN_PRESENT     BIT(1)
     543              : /** Bit for connector orientation */
     544            1 : #define TCPC_REG_STD_OUTPUT_CAP_CONN_ORIENTATION BIT(0)
     545              : 
     546              : /** Register address - configure extended 1 */
     547            1 : #define TCPC_REG_CONFIG_EXT_1                0x2A
     548              : /**
     549              :  * Bit for fr swap bidirectional pin.
     550              :  * If set, the bidirectional FR swap pin is configured as standard output signal.
     551              :  * If unset, it's configured as standard input signal.
     552              :  */
     553            1 : #define TCPC_REG_CONFIG_EXT_1_FRS_SNK_DIR    BIT(1)
     554              : /**
     555              :  * Bit for standard input source FR swap.
     556              :  * If set, blocks the source fast role swap input signal from triggering the sending of
     557              :  * fast role swap signal.
     558              :  * If unset, allow the input signal to trigger sending the fast role swap signal.
     559              :  */
     560            1 : #define TCPC_REG_CONFIG_EXT_1_STD_IN_SRC_FRS BIT(0)
     561              : 
     562              : /**
     563              :  * Register address - generic timer
     564              :  * Available only if generic timer bit is set in device capabilities 2 register.
     565              :  * This register is 16-bit wide and has a resolution of 0.1ms.
     566              :  */
     567            1 : #define TCPC_REG_GENERIC_TIMER 0x2c
     568              : 
     569              : /** Register address - message header info */
     570            1 : #define TCPC_REG_MSG_HDR_INFO                 0x2e
     571              : /** Bit for cable plug. If set, the message originated from a cable plug. */
     572            1 : #define TCPC_REG_MSG_HDR_INFO_CABLE_PLUG      BIT(4)
     573              : /** Mask for data role */
     574            1 : #define TCPC_REG_MSG_HDR_INFO_DATA_ROLE_MASK  BIT(3)
     575              : /** Macro to extract the data role from register value */
     576            1 : #define TCPC_REG_MSG_HDR_INFO_DATA_ROLE(reg)  (((reg) & TCPC_REG_MSG_HDR_INFO_DATA_ROLE_MASK) >> 3)
     577              : /** Value for data role set as UFP */
     578            1 : #define TCPC_REG_MSG_HDR_INFO_DATA_ROLE_UFP   0
     579              : /** Value for data role set as DFP */
     580            1 : #define TCPC_REG_MSG_HDR_INFO_DATA_ROLE_DFP   1
     581              : /** Mask for Power Delivery Specification Revision */
     582            1 : #define TCPC_REG_MSG_HDR_INFO_PD_REV_MASK     GENMASK(2, 1)
     583              : /** Macro to extract the Power Delivery Specification Revision from register value */
     584            1 : #define TCPC_REG_MSG_HDR_INFO_PD_REV(reg)     (((reg) & TCPC_REG_MSG_HDR_INFO_PD_REV_MASK) >> 1)
     585              : /** Value for Power Delivery Specification Revision 1.0 */
     586            1 : #define TCPC_REG_MSG_HDR_INFO_PD_REV_1_0      0
     587              : /** Value for Power Delivery Specification Revision 2.0 */
     588            1 : #define TCPC_REG_MSG_HDR_INFO_PD_REV_2_0      1
     589              : /** Value for Power Delivery Specification Revision 3.0 */
     590            1 : #define TCPC_REG_MSG_HDR_INFO_PD_REV_3_0      2
     591              : /** Mask for power role */
     592            1 : #define TCPC_REG_MSG_HDR_INFO_POWER_ROLE_MASK BIT(0)
     593              : /** Macro to extract the power role from register value */
     594            1 : #define TCPC_REG_MSG_HDR_INFO_POWER_ROLE(reg) ((reg) & TCPC_REG_MSG_HDR_INFO_POWER_ROLE_MASK)
     595              : /** Value for power role set as sink */
     596            1 : #define TCPC_REG_MSG_HDR_INFO_POWER_ROLE_SNK  0
     597              : /** Value for power role set as source */
     598            1 : #define TCPC_REG_MSG_HDR_INFO_POWER_ROLE_SRC  1
     599              : /**
     600              :  * Macro to set the register value with pd revision, data and power role from parameter and as
     601              :  * non-cable plug
     602              :  */
     603            1 : #define TCPC_REG_MSG_HDR_INFO_SET(pd_rev_type, drole, prole)                                       \
     604              :         ((drole) << 3 | (pd_rev_type << 1) | (prole))
     605              : /** Mask for PD revision and power and data role */
     606            1 : #define TCPC_REG_MSG_HDR_INFO_ROLES_MASK (TCPC_REG_MSG_HDR_INFO_SET(3, 1, 1))
     607              : 
     608              : /** Register address - receive detect */
     609            1 : #define TCPC_REG_RX_DETECT                        0x2f
     610              : /**
     611              :  * Bit for message disable disconnect.
     612              :  * If set, the TCPC set as sink shall disable the PD message delivery when the SNK.Open state
     613              :  * is detected for debounce time specified in specification.
     614              :  * If unset, sink TCPC disables the PD message delivery when vbus sink disconnect detected in
     615              :  * alert register is asserted.
     616              :  */
     617            1 : #define TCPC_REG_RX_DETECT_MSG_DISABLE_DISCONNECT BIT(7)
     618              : /** Bit for enable cable reset. If set, TCPC will detect the cable reset signal. */
     619            1 : #define TCPC_REG_RX_DETECT_CABLE_RST              BIT(6)
     620              : /** Bit for enable hard reset. If set, TCPC will detect the hard reset signal. */
     621            1 : #define TCPC_REG_RX_DETECT_HRST                   BIT(5)
     622              : /** Bit for enable SOP_DBG'' message. If set, TCPC will detect the SOP_DBG'' messages. */
     623            1 : #define TCPC_REG_RX_DETECT_SOPPP_DBG              BIT(4)
     624              : /** Bit for enable SOP_DBG' message. If set, TCPC will detect the SOP_DBG' messages. */
     625            1 : #define TCPC_REG_RX_DETECT_SOPP_DBG               BIT(3)
     626              : /** Bit for enable SOP'' message. If set, TCPC will detect the SOP'' messages. */
     627            1 : #define TCPC_REG_RX_DETECT_SOPPP                  BIT(2)
     628              : /** Bit for enable SOP' message. If set, TCPC will detect the SOP' messages. */
     629            1 : #define TCPC_REG_RX_DETECT_SOPP                   BIT(1)
     630              : /** Bit for enable SOP message. If set, TCPC will detect the SOP messages. */
     631            1 : #define TCPC_REG_RX_DETECT_SOP                    BIT(0)
     632              : /** Mask for detecting the SOP messages and hard reset signals */
     633            1 : #define TCPC_REG_RX_DETECT_SOP_HRST_MASK          (TCPC_REG_RX_DETECT_SOP | TCPC_REG_RX_DETECT_HRST)
     634              : /** Mask for detecting the SOP, SOP' and SOP'' messages and hard reset signals */
     635            1 : #define TCPC_REG_RX_DETECT_SOP_SOPP_SOPPP_HRST_MASK                                                \
     636              :         (TCPC_REG_RX_DETECT_SOP | TCPC_REG_RX_DETECT_SOPP | TCPC_REG_RX_DETECT_SOPPP |             \
     637              :          TCPC_REG_RX_DETECT_HRST)
     638              : 
     639              : /**
     640              :  * Register address - receive buffer (readable byte count, rx buf frame type, rx buf byte x)
     641              :  * In TCPC Rev 2.0, the RECEIVE_BUFFER is comprised of three sets of registers:
     642              :  * READABLE_BYTE_COUNT, RX_BUF_FRAME_TYPE and RX_BUF_BYTE_x. These registers can
     643              :  * only be accessed by reading at a common register address 30h.
     644              :  */
     645            1 : #define TCPC_REG_RX_BUFFER 0x30
     646              : 
     647              : /** Register address - transmit */
     648            1 : #define TCPC_REG_TRANSMIT                               0x50
     649              : /** Macro to set the transmit register with message type and retries count */
     650            1 : #define TCPC_REG_TRANSMIT_SET_WITH_RETRY(retries, type) ((retries) << 4 | (type))
     651              : /** Macro to set the transmit register with message type and without retries */
     652            1 : #define TCPC_REG_TRANSMIT_SET_WITHOUT_RETRY(type)       (type)
     653              : /** Value for transmit SOP type message */
     654            1 : #define TCPC_REG_TRANSMIT_TYPE_SOP                      0
     655              : /** Value for transmit SOP' type message */
     656            1 : #define TCPC_REG_TRANSMIT_TYPE_SOPP                     1
     657              : /** Value for transmit SOP'' type message */
     658            1 : #define TCPC_REG_TRANSMIT_TYPE_SOPPP                    2
     659              : /** Value for transmit SOP_DBG' type message */
     660            1 : #define TCPC_REG_TRANSMIT_TYPE_SOP_DBG_P                3
     661              : /** Value for transmit SOP_DBG'' type message */
     662            1 : #define TCPC_REG_TRANSMIT_TYPE_SOP_DBG_PP               4
     663              : /** Value for transmit hard reset signal */
     664            1 : #define TCPC_REG_TRANSMIT_TYPE_HRST                     5
     665              : /** Value for transmit cable reset signal */
     666            1 : #define TCPC_REG_TRANSMIT_TYPE_CABLE_RST                6
     667              : /** Value for transmit BIST carrier mode 2 */
     668            1 : #define TCPC_REG_TRANSMIT_TYPE_BIST                     7
     669              : 
     670              : /**
     671              :  * Register address - transmit buffer
     672              :  * In TCPC Rev 2.0, the TRANSMIT_BUFFER holds the I2C_WRITE_BYTE_COUNT and the
     673              :  * portion of the SOP* USB PD message payload (including the header and/or the
     674              :  * data bytes) most recently written by the TCPM in TX_BUF_BYTE_x. TX_BUF_BYTE_x
     675              :  * is “hidden” and can only be accessed by writing to register address 51h
     676              :  */
     677            1 : #define TCPC_REG_TX_BUFFER 0x51
     678              : 
     679              : /** Register address - vbus voltage */
     680            1 : #define TCPC_REG_VBUS_VOLTAGE                   0x70
     681              : /** Mask for vbus voltage measurement */
     682            1 : #define TCPC_REG_VBUS_VOLTAGE_MEASUREMENT_MASK  GENMASK(9, 0)
     683              : /** Macro to extract the vbus measurement from the register value */
     684            1 : #define TCPC_REG_VBUS_VOLTAGE_MEASUREMENT(reg)  ((reg) & TCPC_REG_VBUS_VOLTAGE_MEASUREMENT_MASK)
     685              : /** Mask for scale factor */
     686            1 : #define TCPC_REG_VBUS_VOLTAGE_SCALE_FACTOR_MASK GENMASK(11, 10)
     687              : /** Macro to extract the vbus voltage scale from the register value */
     688            1 : #define TCPC_REG_VBUS_VOLTAGE_SCALE(reg)                                                           \
     689              :         (1 << (((reg) & TCPC_REG_VBUS_VOLTAGE_SCALE_FACTOR_MASK) >> 10))
     690              : /** Resolution of vbus voltage measurement. It's specified as 25mV. */
     691            1 : #define TCPC_REG_VBUS_VOLTAGE_LSB 25
     692              : /**
     693              :  * Macro to convert the register value into real voltage measurement taking scale
     694              :  * factor into account
     695              :  */
     696            1 : #define TCPC_REG_VBUS_VOLTAGE_VBUS(x)                                                              \
     697              :         (TCPC_REG_VBUS_VOLTAGE_SCALE(x) * TCPC_REG_VBUS_VOLTAGE_MEASUREMENT(x) *                   \
     698              :          TCPC_REG_VBUS_VOLTAGE_LSB)
     699              : 
     700              : /** Register address - vbus sink disconnect threshold */
     701            1 : #define TCPC_REG_VBUS_SINK_DISCONNECT_THRESH         0x72
     702              : /**
     703              :  * Resolution of the value stored in register.
     704              :  * Value read from register must be multiplied by this value to get a real voltage in mV.
     705              :  * Voltage in mV written to register must be divided by this constant.
     706              :  * Specification defines it as 25mV
     707              :  */
     708            1 : #define TCPC_REG_VBUS_SINK_DISCONNECT_THRESH_LSB     25
     709              : /** Mask for the valid bits of voltage trip point */
     710            1 : #define TCPC_REG_VBUS_SINK_DISCONNECT_THRESH_MASK    GENMASK(11, 0)
     711              : /** Default value for vbus sink disconnect threshold */
     712            1 : #define TCPC_REG_VBUS_SINK_DISCONNECT_THRESH_DEFAULT 0x008C /* 3.5 V */
     713              : 
     714              : /** Register address - vbus sink disconnect threshold */
     715            1 : #define TCPC_REG_VBUS_STOP_DISCHARGE_THRESH         0x74
     716              : /**
     717              :  * Resolution of the value stored in register.
     718              :  * Value read from register must be multiplied by this value to get a real voltage in mV.
     719              :  * Voltage in mV written to register must be divided by this constant.
     720              :  * Specification defines it as 25mV.
     721              :  */
     722            1 : #define TCPC_REG_VBUS_STOP_DISCHARGE_THRESH_LSB     25
     723              : /** Mask for the valid bits of voltage trip point */
     724            1 : #define TCPC_REG_VBUS_STOP_DISCHARGE_THRESH_MASK    GENMASK(11, 0)
     725              : /** Default value for vbus stop discharge threshold */
     726            1 : #define TCPC_REG_VBUS_STOP_DISCHARGE_THRESH_DEFAULT 0x0020 /* 0.8 V */
     727              : 
     728              : /** Register address - vbus voltage alarm - high */
     729            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_HI_CFG      0x76
     730              : /**
     731              :  * Resolution of the value stored in register.
     732              :  * Value read from register must be multiplied by this value to get a real voltage in mV.
     733              :  * Voltage in mV written to register must be divided by this constant.
     734              :  * Specification defines it as 25mV
     735              :  */
     736            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_HI_CFG_LSB  25
     737              : /** Mask for the valid bits of voltage trip point */
     738            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_HI_CFG_MASK GENMASK(11, 0)
     739              : 
     740              : /** Register address - vbus voltage alarm - low */
     741            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_LO_CFG      0x78
     742              : /**
     743              :  * Resolution of the value stored in register.
     744              :  * Value read from register must be multiplied by this value to get a real voltage in mV.
     745              :  * Voltage in mV written to register must be divided by this constant.
     746              :  * Specification defines it as 25mV
     747              :  */
     748            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_LO_CFG_LSB  25
     749              : /** Mask for the valid bits of voltage trip point */
     750            1 : #define TCPC_REG_VBUS_VOLTAGE_ALARM_LO_CFG_MASK GENMASK(11, 0)
     751              : 
     752              : /**
     753              :  * Register address - vbus nondefault target
     754              :  * Available only if vbus nondefault target is asserted in device capabilities 1 register.
     755              :  * Purpose of this register is to provide value for nondefault voltage over vbus when sending
     756              :  * the source vbus nondefault voltage command to command register.
     757              :  */
     758            1 : #define TCPC_REG_VBUS_NONDEFAULT_TARGET     0x7a
     759              : /**
     760              :  * Resolution of the value stored in register.
     761              :  * Value read from register must be multiplied by this value to get a real voltage in mV.
     762              :  * Voltage in mV written to register must be divided by this constant.
     763              :  * Specification defines it as 20mV
     764              :  */
     765            1 : #define TCPC_REG_VBUS_NONDEFAULT_TARGET_LSB 20
     766              : 
     767              : /** Register address - device capabilities 3 */
     768            1 : #define TCPC_REG_DEV_CAP_3               0x7c
     769              : /** Mask for vbus voltage support */
     770            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_MASK GENMASK(2, 0)
     771              : /** Macro to extract the vbus voltage support from register value */
     772            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX(reg) ((reg) & TCPC_REG_DEV_CAP_3_VBUS_MAX_MASK)
     773              : /** Value for nominal voltage supported of 5V */
     774            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_5V   0
     775              : /** Value for nominal voltage supported of 9V */
     776            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_9V   1
     777              : /** Value for nominal voltage supported of 15V */
     778            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_15V  2
     779              : /** Value for nominal voltage supported of 20V */
     780            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_20V  3
     781              : /** Value for nominal voltage supported of 28V */
     782            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_28V  4
     783              : /** Value for nominal voltage supported of 36V */
     784            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_36V  5
     785              : /** Value for nominal voltage supported of 48V */
     786            1 : #define TCPC_REG_DEV_CAP_3_VBUS_MAX_48V  6
     787              : 
     788              : #endif /* ZEPHYR_INCLUDE_USB_C_TCPCI_H_ */
        

Generated by: LCOV version 2.0-1