LCOV - code coverage report
Current view: top level - zephyr/drivers/usb_c - usbc_tc.h Hit Total Coverage
Test: new.info Lines: 49 51 96.1 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright 2022 The Chromium OS Authors
       3             :  * SPDX-License-Identifier: Apache-2.0
       4             :  */
       5             : 
       6             : /**
       7             :  * @file
       8             :  * @brief USB Type-C Cable and Connector API used for USB-C drivers
       9             :  *
      10             :  * The information in this file was taken from the USB Type-C
      11             :  * Cable and Connector Specification Release 2.1
      12             :  */
      13             : 
      14             : #ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
      15             : #define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
      16             : 
      17             : /**
      18             :  * @brief USB Type-C
      19             :  * @defgroup usb_type_c USB Type-C
      20             :  * @ingroup io_interfaces
      21             :  * @{
      22             :  */
      23             : 
      24             : #include <zephyr/types.h>
      25             : 
      26             : #ifdef __cplusplus
      27             : extern "C" {
      28             : #endif
      29             : 
      30             : /**
      31             :  * @brief VBUS minimum for a sink disconnect detection.
      32             :  *        See Table 4-3 VBUS Sink Characteristics
      33             :  */
      34           1 : #define TC_V_SINK_DISCONNECT_MIN_MV 800
      35             : 
      36             : /**
      37             :  * @brief VBUS maximum for a sink disconnect detection.
      38             :  *        See Table 4-3 VBUS Sink Characteristics
      39             :  */
      40           1 : #define TC_V_SINK_DISCONNECT_MAX_MV 3670
      41             : 
      42             : /**
      43             :  * @brief From entry to Attached.SRC until VBUS reaches the minimum vSafe5V threshold as
      44             :  *        measured at the source’s receptacle
      45             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      46             :  */
      47           1 : #define TC_T_VBUS_ON_MAX_MS 275
      48             : 
      49             : /**
      50             :  * @brief From the time the Sink is detached until the Source removes VBUS and reaches
      51             :  *        vSafe0V (See USB PD).
      52             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      53             :  */
      54           1 : #define TC_T_VBUS_OFF_MAX_MS 650
      55             : 
      56             : /**
      57             :  * @brief From the time the Source supplied VBUS in the Attached.SRC state.
      58             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      59             :  */
      60           1 : #define TC_T_VCONN_ON_MAX_MS 2
      61             : 
      62             : /**
      63             :  * @brief From the time a Sink with accessory support enters the PoweredAccessory state
      64             :  *        until the Sink sources minimum VCONN voltage (see Table 4-5)
      65             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      66             :  */
      67           1 : #define TC_T_VCONN_ON_PA_MAX_MS 100
      68             : 
      69             : /**
      70             :  * @brief From the time that a Sink is detached or as directed until the VCONN supply is
      71             :  *        disconnected.
      72             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      73             :  */
      74           1 : #define TC_T_VCONN_OFF_MAX_MS 35
      75             : 
      76             : /**
      77             :  * @brief Response time for a Sink to adjust its current consumption to be in the specified
      78             :  *        range due to a change in USB Type-C Current advertisement
      79             :  *        See Table 4-29 VBUS and VCONN Timing Parameters
      80             :  */
      81           1 : #define TC_T_SINK_ADJ_MAX_MS 60
      82             : 
      83             : /**
      84             :  * @brief The minimum period a DRP shall complete a Source to Sink and back advertisement
      85             :  *        See Table 4-30 DRP Timing Parameters
      86             :  */
      87           1 : #define TC_T_DRP_MIN_MS 50
      88             : 
      89             : /**
      90             :  * @brief The maximum period a DRP shall complete a Source to Sink and back advertisement
      91             :  *        See Table 4-30 DRP Timing Parameters
      92             :  */
      93           1 : #define TC_T_DRP_MAX_MS 100
      94             : 
      95             : /**
      96             :  * @brief The minimum time a DRP shall complete transitions between Source and Sink roles
      97             :  *        during role resolution
      98             :  *        See Table 4-30 DRP Timing Parameters
      99             :  */
     100           1 : #define TC_T_DRP_TRANSITION_MIN_MS 0
     101             : 
     102             : /**
     103             :  * @brief The maximum time a DRP shall complete transitions between Source and Sink roles
     104             :  *        during role resolution
     105             :  *        See Table 4-30 DRP Timing Parameters
     106             :  */
     107           1 : #define TC_T_DRP_TRANSITION_MAX_MS 1
     108             : 
     109             : /**
     110             :  * @brief Minimum wait time associated with the Try.SRC state.
     111             :  *        See Table 4-30 DRP Timing Parameters
     112             :  */
     113           1 : #define TC_T_DRP_TRY_MIN_MS 75
     114             : 
     115             : /**
     116             :  * @brief Maximum wait time associated with the Try.SRC state.
     117             :  *        See Table 4-30 DRP Timing Parameters
     118             :  */
     119           1 : #define TC_T_DRP_TRY_MAX_MS 150
     120             : 
     121             : /**
     122             :  * @brief Minimum wait time associated with the Try.SNK state.
     123             :  *        See Table 4-30 DRP Timing Parameters
     124             :  */
     125           1 : #define TC_T_DRP_TRY_WAIT_MIN_MS 400
     126             : 
     127             : /**
     128             :  * @brief Maximum wait time associated with the Try.SNK state.
     129             :  *        See Table 4-30 DRP Timing Parameters
     130             :  */
     131           1 : #define TC_T_DRP_TRY_WAIT_MAX_MS 800
     132             : 
     133             : /**
     134             :  * @brief Minimum timeout for transition from Try.SRC to TryWait.SNK.
     135             :  *        See Table 4-30 DRP Timing Parameters
     136             :  */
     137           1 : #define TC_T_TRY_TIMEOUT_MIN_MS 550
     138             : 
     139             : /**
     140             :  * @brief Maximum timeout for transition from Try.SRC to TryWait.SNK.
     141             :  *        See Table 4-30 DRP Timing Parameters
     142             :  */
     143           1 : #define TC_T_TRY_TIMEOUT_MAX_MS 1100
     144             : 
     145             : /**
     146             :  * @brief Minimum Time for a DRP to detect that the connected Charge-Through VCONNPowered
     147             :  *        USB Device has been detached, after VBUS has been removed.
     148             :  *        See Table 4-30 DRP Timing Parameters
     149             :  */
     150           1 : #define TC_T_VPD_DETACH_MIN_MS 10
     151             : 
     152             : /**
     153             :  * @brief Maximum Time for a DRP to detect that the connected Charge-Through VCONNPowered
     154             :  *        USB Device has been detached, after VBUS has been removed.
     155             :  *        See Table 4-30 DRP Timing Parameters
     156             :  */
     157           1 : #define TC_T_VPD_DETACH_MAX_MS 20
     158             : 
     159             : /**
     160             :  * @brief Minimum time a port shall wait before it can determine it is attached
     161             :  *        See Table 4-31 CC Timing
     162             :  */
     163           1 : #define TC_T_CC_DEBOUNCE_MIN_MS 100
     164             : 
     165             : /**
     166             :  * @brief Maximum time a port shall wait before it can determine it is attached
     167             :  *        See Table 4-31 CC Timing
     168             :  */
     169           1 : #define TC_T_CC_DEBOUNCE_MAX_MS 200
     170             : 
     171             : /**
     172             :  * @brief Minimum time a Sink port shall wait before it can determine it is detached due to
     173             :  *        the potential for USB PD signaling on CC as described in the state definitions.
     174             :  *        See Table 4-31 CC Timing
     175             :  */
     176           1 : #define TC_T_PD_DEBOUNCE_MIN_MS 10
     177             : 
     178             : /**
     179             :  * @brief Maximum time a Sink port shall wait before it can determine it is detached due to
     180             :  *        the potential for USB PD signaling on CC as described in the state definitions.
     181             :  *        See Table 4-31 CC Timing
     182             :  */
     183           1 : #define TC_T_PD_DEBOUNCE_MAX_MS 20
     184             : 
     185             : /**
     186             :  * @brief Minimum Time a port shall wait before it can determine it is re-attached during
     187             :  *        the try-wait process.
     188             :  *        See Table 4-31 CC Timing
     189             :  */
     190           1 : #define TC_T_TRY_CC_DEBOUNCE_MIN_MS 10
     191             : 
     192             : /**
     193             :  * @brief Maximum Time a port shall wait before it can determine it is re-attached during
     194             :  *        the try-wait process.
     195             :  *        See Table 4-31 CC Timing
     196             :  */
     197           1 : #define TC_T_TRY_CC_DEBOUNCE_MAX_MS 10
     198             : 
     199             : /**
     200             :  * @brief Minimum time a self-powered port shall remain in the ErrorRecovery state.
     201             :  *        See Table 4-31 CC Timing
     202             :  */
     203           1 : #define TC_T_ERROR_RECOVERY_SELF_POWERED_MIN_MS 25
     204             : 
     205             : /**
     206             :  * @brief Minimum time a source shall remain in the ErrorRecovery state if it was sourcing
     207             :  *        VCONN in the previous state.
     208             :  *        See Table 4-31 CC Timing
     209             :  */
     210           1 : #define TC_T_ERROR_RECOVERY_SOURCE_MIN_MS 240
     211             : 
     212             : /**
     213             :  * @brief Minimum time a Sink port shall wait before it can determine there has been a change
     214             :  *        in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
     215             :  *        See Table 4-31 CC Timing
     216             :  */
     217           1 : #define TC_T_RP_VALUE_CHANGE_MIN_MS 10
     218             : 
     219             : /**
     220             :  * @brief Maximum time a Sink port shall wait before it can determine there has been a change
     221             :  *        in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
     222             :  *        See Table 4-31 CC Timing
     223             :  */
     224           1 : #define TC_T_RP_VALUE_CHANGE_MAX_MS 20
     225             : 
     226             : /**
     227             :  * @brief Minimum time a Source shall detect the SRC.Open state. The Source should detect the
     228             :  *        SRC.Open state as quickly as practical.
     229             :  *        See Table 4-31 CC Timing
     230             :  */
     231           1 : #define TC_T_SRC_DISCONNECT_MIN_MS 0
     232             : 
     233             : /**
     234             :  * @brief Maximum time a Source shall detect the SRC.Open state. The Source should detect the
     235             :  *        SRC.Open state as quickly as practical.
     236             :  *        See Table 4-31 CC Timing
     237             :  */
     238           1 : #define TC_T_SRC_DISCONNECT_MAX_MS 20
     239             : 
     240             : /**
     241             :  * @brief Minimum time to detect connection when neither Port Partner is toggling.
     242             :  *        See Table 4-31 CC Timing
     243             :  */
     244           1 : #define TC_T_NO_TOGGLE_CONNECT_MIN_MS 0
     245             : 
     246             : /**
     247             :  * @brief Maximum time to detect connection when neither Port Partner is toggling.
     248             :  *        See Table 4-31 CC Timing
     249             :  */
     250           1 : #define TC_T_NO_TOGGLE_CONNECT_MAX_MS 5
     251             : 
     252             : /**
     253             :  * @brief Minimum time to detect connection when one Port Partner is toggling
     254             :  *        0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
     255             :  *        See Table 4-31 CC Timing
     256             :  */
     257           1 : #define TC_T_ONE_PORT_TOGGLE_CONNECT_MIN_MS 0
     258             : 
     259             : /**
     260             :  * @brief Maximum time to detect connection when one Port Partner is toggling
     261             :  *        0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
     262             :  *        See Table 4-31 CC Timing
     263             :  */
     264           1 : #define TC_T_ONE_PORT_TOGGLE_CONNECT_MAX_MS 80
     265             : 
     266             : /**
     267             :  * @brief Minimum time to detect connection when both Port Partners are toggling
     268             :  *        (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
     269             :  *        See Table 4-31 CC Timing
     270             :  */
     271           1 : #define TC_T_TWO_PORT_TOGGLE_CONNECT_MIN_MS 0
     272             : 
     273             : /**
     274             :  * @brief Maximum time to detect connection when both Port Partners are toggling
     275             :  *        (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
     276             :  *        See Table 4-31 CC Timing
     277             :  */
     278           1 : #define TC_T_TWO_PORT_TOGGLE_CONNECT_MAX_MS 510
     279             : 
     280             : /**
     281             :  * @brief Minimum time for a Charge-Through VCONN-Powered USB Device to detect that the
     282             :  *        Charge-Through source has disconnected from CC after VBUS has been removed,
     283             :  *        transition to CTUnattached.VPD, and re-apply its Rp termination advertising
     284             :  *        3.0 A on the host port CC.
     285             :  *        See Table 4-31 CC Timing
     286             :  */
     287           1 : #define TC_T_VPDCTDD_MIN_US 30
     288             : 
     289             : /**
     290             :  * @brief Maximum time for a Charge-Through VCONN-Powered USB Device to detect that the
     291             :  *        Charge-Through source has disconnected from CC after VBUS has been removed,
     292             :  *        transition to CTUnattached.VPD, and re-apply its Rp termination advertising
     293             :  *        3.0 A on the host port CC.
     294             :  *        See Table 4-31 CC Timing
     295             :  */
     296           1 : #define TC_T_VPDCTDD_MAX_MS 5
     297             : 
     298             : /**
     299             :  * @brief Minimum time for a Charge-Through VCONN-Powered USB Device shall remain
     300             :  *        in CTDisabled.VPD state.
     301             :  *        See Table 4-31 CC Timing
     302             :  */
     303           1 : #define TC_T_VPDDISABLE_MIN_MS 25
     304             : 
     305             : /**
     306             :  * @brief CC Voltage status
     307             :  */
     308           0 : enum tc_cc_voltage_state {
     309             :         /** No port partner connection */
     310             :         TC_CC_VOLT_OPEN         = 0,
     311             :         /** Port partner is applying Ra */
     312             :         TC_CC_VOLT_RA           = 1,
     313             :         /** Port partner is applying Rd */
     314             :         TC_CC_VOLT_RD           = 2,
     315             :         /** Port partner is applying Rp (0.5A) */
     316             :         TC_CC_VOLT_RP_DEF       = 5,
     317             :         /*8 Port partner is applying Rp (1.5A) */
     318             :         TC_CC_VOLT_RP_1A5       = 6,
     319             :         /** Port partner is applying Rp (3.0A) */
     320             :         TC_CC_VOLT_RP_3A0       = 7,
     321             : };
     322             : 
     323             : /**
     324             :  * @brief VBUS level voltages
     325             :  */
     326           1 : enum tc_vbus_level {
     327             :         /** VBUS is less than vSafe0V max */
     328             :         TC_VBUS_SAFE0V  = 0,
     329             :         /** VBUS is at least vSafe5V min */
     330             :         TC_VBUS_PRESENT = 1,
     331             :         /** VBUS is less than vSinkDisconnect max */
     332             :         TC_VBUS_REMOVED = 2
     333             : };
     334             : 
     335             : /**
     336             :  * @brief Pull-Up resistor values
     337             :  */
     338           1 : enum tc_rp_value {
     339             :         /** Pull-Up resistor for a current of 900mA */
     340             :         TC_RP_USB       = 0,
     341             :         /** Pull-Up resistor for a current of 1.5A */
     342             :         TC_RP_1A5       = 1,
     343             :         /** Pull-Up resistor for a current of 3.0A */
     344             :         TC_RP_3A0       = 2,
     345             :         /** No Pull-Up resistor is applied */
     346             :         TC_RP_RESERVED  = 3
     347             : };
     348             : 
     349             : /**
     350             :  * @brief CC pull resistors
     351             :  */
     352           1 : enum tc_cc_pull {
     353             :         /** Ra Pull-Down resistor */
     354             :         TC_CC_RA        = 0,
     355             :         /** Rp Pull-Up resistor */
     356             :         TC_CC_RP        = 1,
     357             :         /** Rd Pull-Down resistor */
     358             :         TC_CC_RD        = 2,
     359             :         /** No CC resistor */
     360             :         TC_CC_OPEN      = 3,
     361             :         /** Ra and Rd Pull-Down resistor */
     362             :         TC_RA_RD        = 4
     363             : };
     364             : 
     365             : /**
     366             :  * @brief Cable plug. See 6.2.1.1.7 Cable Plug. Only applies to SOP' and SOP".
     367             :  *        Replaced by pd_power_role for SOP packets.
     368             :  */
     369           0 : enum tc_cable_plug {
     370             :         /* Message originated from a DFP or UFP */
     371             :         PD_PLUG_FROM_DFP_UFP = 0,
     372             :         /* Message originated from a Cable Plug or VPD */
     373             :         PD_PLUG_FROM_CABLE_VPD = 1
     374             : };
     375             : 
     376             : /**
     377             :  * @brief Power Delivery Power Role
     378             :  */
     379           1 : enum tc_power_role {
     380             :         /** Power role is a sink */
     381             :         TC_ROLE_SINK    = 0,
     382             :         /** Power role is a source */
     383             :         TC_ROLE_SOURCE  = 1
     384             : };
     385             : 
     386             : /**
     387             :  * @brief Power Delivery Data Role
     388             :  */
     389           1 : enum tc_data_role {
     390             :         /** Data role is an Upstream Facing Port */
     391             :         TC_ROLE_UFP             = 0,
     392             :         /** Data role is a Downstream Facing Port */
     393             :         TC_ROLE_DFP             = 1,
     394             :         /** Port is disconnected */
     395             :         TC_ROLE_DISCONNECTED    = 2
     396             : };
     397             : 
     398             : /**
     399             :  * @brief Polarity of the CC lines
     400             :  */
     401           1 : enum tc_cc_polarity {
     402             :         /** Use CC1 IO for Power Delivery communication */
     403             :         TC_POLARITY_CC1 = 0,
     404             :         /** Use CC2 IO for Power Delivery communication */
     405             :         TC_POLARITY_CC2 = 1
     406             : };
     407             : 
     408             : /**
     409             :  * @brief Possible port partner connections based on CC line states
     410             :  */
     411           1 : enum tc_cc_states {
     412             :         /** No port partner attached */
     413             :         TC_CC_NONE = 0,
     414             : 
     415             :         /** From DFP perspective */
     416             : 
     417             :         /** No UFP accessory connected */
     418             :         TC_CC_UFP_NONE          = 1,
     419             :         /** UFP Audio accessory connected */
     420             :         TC_CC_UFP_AUDIO_ACC     = 2,
     421             :         /** UFP Debug accessory connected */
     422             :         TC_CC_UFP_DEBUG_ACC     = 3,
     423             :         /** Plain UFP attached */
     424             :         TC_CC_UFP_ATTACHED      = 4,
     425             : 
     426             :         /** From UFP perspective */
     427             : 
     428             :         /** Plain DFP attached */
     429             :         TC_CC_DFP_ATTACHED      = 5,
     430             :         /** DFP debug accessory connected */
     431             :         TC_CC_DFP_DEBUG_ACC     = 6
     432             : };
     433             : 
     434             : /**
     435             :  * @}
     436             :  */
     437             : 
     438             : #ifdef __cplusplus
     439             : }
     440             : #endif
     441             : 
     442             : #endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_ */

Generated by: LCOV version 1.14