blob: de56da61b44943f0c2de5c743850e588c957d1c8 [file] [log] [blame]
/*
* 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_ */