zephyr/include/drivers/usbc/usbc_tc.h
Sam Hurst 9df89802ee usbc: Add USB TCPC Driver API and support PD structures
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>
2022-03-08 11:08:43 +01:00

432 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 sources 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_ */