LCOV - code coverage report
Current view: top level - zephyr/usb_c - tcpci.h Hit Total Coverage
Test: new.info Lines: 293 295 99.3 %
Date: 2024-12-22 00:14:23

          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_VER_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_VER_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_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_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_REV_VER_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_REV_VER_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_REV_VER_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_REV_VER_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 1.14