This commit adds the API for USB Type-C Port Controllers (TCPC) and support Power Delivery (PD) structures Signed-off-by: Sam Hurst <sbh1187@gmail.com>
432 lines
11 KiB
C
432 lines
11 KiB
C
/*
|
||
* Copyright 2022 The Chromium OS Authors
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
/**
|
||
* @file
|
||
* @brief USBC Type-C Cable and Connector API used for USBC drivers
|
||
*
|
||
* The information in this file was taken from the USB Type-C
|
||
* Cable and Connector Specification Release 2.1
|
||
*/
|
||
|
||
#ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
|
||
#define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
|
||
|
||
/**
|
||
* @brief USB Type-C
|
||
* @defgroup usb_type_c USB Type-C
|
||
* @ingroup io_interfaces
|
||
* @{
|
||
*/
|
||
|
||
#include <zephyr/types.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/**
|
||
* @brief VBUS minimum for a sink disconnect detection.
|
||
* See Table 4-3 VBUS Sink Characteristics
|
||
*/
|
||
#define TC_V_SINK_DISCONNECT_MIN_MV 800
|
||
|
||
/**
|
||
* @brief VBUS maximum for a sink disconnect detection.
|
||
* See Table 4-3 VBUS Sink Characteristics
|
||
*/
|
||
#define TC_V_SINK_DISCONNECT_MAX_MV 3670
|
||
|
||
/**
|
||
* @brief From entry to Attached.SRC until VBUS reaches the minimum vSafe5V threshold as
|
||
* measured at the source’s receptacle
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_VBUS_ON_MAX_MS 275
|
||
|
||
/**
|
||
* @brief From the time the Sink is detached until the Source removes VBUS and reaches
|
||
* vSafe0V (See USB PD).
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_VBUS_OFF_MAX_MS 650
|
||
|
||
/**
|
||
* @brief From the time the Source supplied VBUS in the Attached.SRC state.
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_VCONN_ON_MAX_MS 2
|
||
|
||
/**
|
||
* @brief From the time a Sink with accessory support enters the PoweredAccessory state
|
||
* until the Sink sources minimum VCONN voltage (see Table 4-5)
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_VCONN_ON_PA_MAX_MS 100
|
||
|
||
/**
|
||
* @brief From the time that a Sink is detached or as directed until the VCONN supply is
|
||
* disconnected.
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_VCONN_OFF_MAX_MS 35
|
||
|
||
/**
|
||
* @brief Response time for a Sink to adjust its current consumption to be in the specified
|
||
* range due to a change in USB Type-C Current advertisement
|
||
* See Table 4-29 VBUS and VCONN Timing Parameters
|
||
*/
|
||
#define TC_T_SINK_ADJ_MAX_MS 60
|
||
|
||
/**
|
||
* @brief The minimum period a DRP shall complete a Source to Sink and back advertisement
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_MIN_MS 50
|
||
|
||
/**
|
||
* @brief The maximum period a DRP shall complete a Source to Sink and back advertisement
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_MAX_MS 100
|
||
|
||
/**
|
||
* @brief The minimum time a DRP shall complete transitions between Source and Sink roles
|
||
* during role resolution
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRANSITION_MIN_MS 0
|
||
|
||
/**
|
||
* @brief The maximum time a DRP shall complete transitions between Source and Sink roles
|
||
* during role resolution
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRANSITION_MAX_MS 1
|
||
|
||
/**
|
||
* @brief Minimum wait time associated with the Try.SRC state.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRY_MIN_MS 75
|
||
|
||
/**
|
||
* @brief Maximum wait time associated with the Try.SRC state.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRY_MAX_MS 150
|
||
|
||
/**
|
||
* @brief Minimum wait time associated with the Try.SNK state.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRY_WAIT_MIN_MS 400
|
||
|
||
/**
|
||
* @brief Maximum wait time associated with the Try.SNK state.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_DRP_TRY_WAIT_MAX_MS 800
|
||
|
||
/**
|
||
* @brief Minimum timeout for transition from Try.SRC to TryWait.SNK.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_TRY_TIMEOUT_MIN_MS 550
|
||
|
||
/**
|
||
* @brief Maximum timeout for transition from Try.SRC to TryWait.SNK.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_TRY_TIMEOUT_MAX_MS 1100
|
||
|
||
/**
|
||
* @brief Minimum Time for a DRP to detect that the connected Charge-Through VCONNPowered
|
||
* USB Device has been detached, after VBUS has been removed.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_VPD_DETACH_MIN_MS 10
|
||
|
||
/**
|
||
* @brief Maximum Time for a DRP to detect that the connected Charge-Through VCONNPowered
|
||
* USB Device has been detached, after VBUS has been removed.
|
||
* See Table 4-30 DRP Timing Parameters
|
||
*/
|
||
#define TC_T_VPD_DETACH_MAX_MS 20
|
||
|
||
/**
|
||
* @brief Minimum time a port shall wait before it can determine it is attached
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_CC_DEBOUNCE_MIN_MS 100
|
||
|
||
/**
|
||
* @brief Maximum time a port shall wait before it can determine it is attached
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_CC_DEBOUNCE_MAX_MS 200
|
||
|
||
/**
|
||
* @brief Minimum time a Sink port shall wait before it can determine it is detached due to
|
||
* the potential for USB PD signaling on CC as described in the state definitions.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_PD_DEBOUNCE_MIN_MS 10
|
||
|
||
/**
|
||
* @brief Maximum time a Sink port shall wait before it can determine it is detached due to
|
||
* the potential for USB PD signaling on CC as described in the state definitions.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_PD_DEBOUNCE_MAX_MS 20
|
||
|
||
/**
|
||
* @brief Minimum Time a port shall wait before it can determine it is re-attached during
|
||
* the try-wait process.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_TRY_CC_DEBOUNCE_MIN_MS 10
|
||
|
||
/**
|
||
* @brief Maximum Time a port shall wait before it can determine it is re-attached during
|
||
* the try-wait process.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_TRY_CC_DEBOUNCE_MAX_MS 10
|
||
|
||
/**
|
||
* @brief Minimum time a self-powered port shall remain in the ErrorRecovery state.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_ERROR_RECOVERY_SELF_POWERED_MIN_MS 25
|
||
|
||
/**
|
||
* @brief Minimum time a source shall remain in the ErrorRecovery state if it was sourcing
|
||
* VCONN in the previous state.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_ERROR_RECOVERY_SOURCE_MIN_MS 240
|
||
|
||
/**
|
||
* @brief Minimum time a Sink port shall wait before it can determine there has been a change
|
||
* in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_RP_VALUE_CHANGE_MIN_MS 10
|
||
|
||
/**
|
||
* @brief Maximum time a Sink port shall wait before it can determine there has been a change
|
||
* in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_RP_VALUE_CHANGE_MAX_MS 20
|
||
|
||
/**
|
||
* @brief Minimum time a Source shall detect the SRC.Open state. The Source should detect the
|
||
* SRC.Open state as quickly as practical.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_SRC_DISCONNECT_MIN_MS 0
|
||
|
||
/**
|
||
* @brief Maximum time a Source shall detect the SRC.Open state. The Source should detect the
|
||
* SRC.Open state as quickly as practical.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_SRC_DISCONNECT_MAX_MS 20
|
||
|
||
/**
|
||
* @brief Minimum time to detect connection when neither Port Partner is toggling.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_NO_TOGGLE_CONNECT_MIN_MS 0
|
||
|
||
/**
|
||
* @brief Maximum time to detect connection when neither Port Partner is toggling.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_NO_TOGGLE_CONNECT_MAX_MS 5
|
||
|
||
/**
|
||
* @brief Minimum time to detect connection when one Port Partner is toggling
|
||
* 0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_ONE_PORT_TOGGLE_CONNECT_MIN_MS 0
|
||
|
||
/**
|
||
* @brief Maximum time to detect connection when one Port Partner is toggling
|
||
* 0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_ONE_PORT_TOGGLE_CONNECT_MAX_MS 80
|
||
|
||
/**
|
||
* @brief Minimum time to detect connection when both Port Partners are toggling
|
||
* (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_TWO_PORT_TOGGLE_CONNECT_MIN_MS 0
|
||
|
||
/**
|
||
* @brief Maximum time to detect connection when both Port Partners are toggling
|
||
* (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_TWO_PORT_TOGGLE_CONNECT_MAX_MS 510
|
||
|
||
/**
|
||
* @brief Minimum time for a Charge-Through VCONN-Powered USB Device to detect that the
|
||
* Charge-Through source has disconnected from CC after VBUS has been removed,
|
||
* transition to CTUnattached.VPD, and re-apply its Rp termination advertising
|
||
* 3.0 A on the host port CC.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_VPDCTDD_MIN_US 30
|
||
|
||
/**
|
||
* @brief Maximum time for a Charge-Through VCONN-Powered USB Device to detect that the
|
||
* Charge-Through source has disconnected from CC after VBUS has been removed,
|
||
* transition to CTUnattached.VPD, and re-apply its Rp termination advertising
|
||
* 3.0 A on the host port CC.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_VPDCTDD_MAX_MS 5
|
||
|
||
/**
|
||
* @brief Minimum time for a Charge-Through VCONN-Powered USB Device shall remain
|
||
* in CTDisabled.VPD state.
|
||
* See Table 4-31 CC Timing
|
||
*/
|
||
#define TC_T_VPDDISABLE_MIN_MS 25
|
||
|
||
/**
|
||
* @brief CC Voltage status
|
||
*/
|
||
enum tc_cc_voltage_state {
|
||
/** No port partner connection */
|
||
TC_CC_VOLT_OPEN = 0,
|
||
/** Port partner is applying Ra */
|
||
TC_CC_VOLT_RA = 1,
|
||
/** Port partner is applying Rd */
|
||
TC_CC_VOLT_RD = 2,
|
||
/** Port partner is applying Rp (0.5A) */
|
||
TC_CC_VOLT_RP_DEF = 5,
|
||
/*8 Port partner is applying Rp (1.5A) */
|
||
TC_CC_VOLT_RP_1A5 = 6,
|
||
/** Port partner is applying Rp (3.0A) */
|
||
TC_CC_VOLT_RP_3A0 = 7,
|
||
};
|
||
|
||
/**
|
||
* @brief VBUS level voltages
|
||
*/
|
||
enum tc_vbus_level {
|
||
/** VBUS is less than vSafe0V max */
|
||
TC_VBUS_SAFE0V = 0,
|
||
/** VBUS is at least vSafe5V min */
|
||
TC_VBUS_PRESENT = 1,
|
||
/** VBUS is less than vSinkDisconnect max */
|
||
TC_VBUS_REMOVED = 2
|
||
};
|
||
|
||
/**
|
||
* @brief Pull-Up resistor values
|
||
*/
|
||
enum tc_rp_value {
|
||
/** Pull-Up resistor for a current of 900mA */
|
||
TC_RP_USB = 0,
|
||
/** Pull-Up resistor for a current of 1.5A */
|
||
TC_RP_1A5 = 1,
|
||
/** Pull-Up resistor for a current of 3.0A */
|
||
TC_RP_3A0 = 2,
|
||
/** No Pull-Up resistor is applied */
|
||
TC_RP_RESERVED = 3
|
||
};
|
||
|
||
/**
|
||
* @brief CC pull resistors
|
||
*/
|
||
enum tc_cc_pull {
|
||
/** Ra Pull-Down resistor */
|
||
TC_CC_RA = 0,
|
||
/** Rp Pull-Up resistor */
|
||
TC_CC_RP = 1,
|
||
/** Rd Pull-Down resistor */
|
||
TC_CC_RD = 2,
|
||
/** No CC resistor */
|
||
TC_CC_OPEN = 3,
|
||
/** Ra and Rd Pull-Down resistor */
|
||
TC_RA_RD = 4
|
||
};
|
||
|
||
/**
|
||
* @brief Power Delivery Power Role
|
||
*/
|
||
enum tc_power_role {
|
||
/** Power role is a sink */
|
||
TC_ROLE_SINK = 0,
|
||
/** Power role is a source */
|
||
TC_ROLE_SOURCE = 1
|
||
};
|
||
|
||
/**
|
||
* @brief Power Delivery Data Role
|
||
*/
|
||
enum tc_data_role {
|
||
/** Data role is an Upstream Facing Port */
|
||
TC_ROLE_UFP = 0,
|
||
/** Data role is a Downstream Facing Port */
|
||
TC_ROLE_DFP = 1,
|
||
/** Port is disconnected */
|
||
TC_ROLE_DISCONNECTED = 2
|
||
};
|
||
|
||
/**
|
||
* @brief Polarity of the CC lines
|
||
*/
|
||
enum tc_cc_polarity {
|
||
/** Use CC1 IO for Power Delivery communication */
|
||
TC_POLARITY_CC1 = 0,
|
||
/** Use CC2 IO for Power Delivery communication */
|
||
TC_POLARITY_CC2 = 1
|
||
};
|
||
|
||
/**
|
||
* @brief Possible port partner connections based on CC line states
|
||
*/
|
||
enum tc_cc_states {
|
||
/** No port partner attached */
|
||
TC_CC_NONE = 0,
|
||
|
||
/** From DFP perspective */
|
||
|
||
/** No UFP accessory connected */
|
||
TC_CC_UFP_NONE = 1,
|
||
/** UFP Audio accessory connected */
|
||
TC_CC_UFP_AUDIO_ACC = 2,
|
||
/** UFP Debug accessory connected */
|
||
TC_CC_UFP_DEBUG_ACC = 3,
|
||
/** Plain UFP attached */
|
||
TC_CC_UFP_ATTACHED = 4,
|
||
|
||
/** From UFP perspective */
|
||
|
||
/** Plain DFP attached */
|
||
TC_CC_DFP_ATTACHED = 5,
|
||
/** DFP debug accessory connected */
|
||
TC_CC_DFP_DEBUG_ACC = 6
|
||
};
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_ */
|