zephyr/include/drivers/usbc/usbc_pd.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

842 lines
22 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 Power Delivery API used for USBC drivers
*
* The information in this file was taken from the USB PD
* Specification Revision 3.0, Version 2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_
#define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_
/**
* @brief USB Power Delivery
* @defgroup usb_power_delivery USB Power Delivery
* @ingroup io_interfaces
* @{
*/
#include <zephyr/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Maximum length of a non-Extended Message in bytes.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgLegacyLen
*/
#define PD_MAX_EXTENDED_MSG_LEGACY_LEN 26
/**
* @brief Maximum length of an Extended Message in bytes.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgLen
*/
#define PD_MAX_EXTENDED_MSG_LEN 260
/**
* @brief Maximum length of a Chunked Message in bytes.
* When one of both Port Partners do not support Extended
* Messages of Data Size greater than PD_MAX_EXTENDED_MSG_LEGACY_LEN
* then the Protocol Layer supports a Chunking mechanism to
* break larger Messages into smaller Chunks of size
* PD_MAX_EXTENDED_MSG_CHUNK_LEN.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgChunkLen
*/
#define PD_MAX_EXTENDED_MSG_CHUNK_LEN 26
/**
* @brief Minimum time a sink shall wait for a Source_Capabilities message
* before sending a Hard Reset
* See Table 6-61 Time Values
* Parameter Name: tTypeCSinkWaitCap
*/
#define PD_T_TYPEC_SINK_WAIT_CAP_MIN_MS 310
/**
* @brief Minimum time a sink shall wait for a Source_Capabilities message
* before sending a Hard Reset
* See Table 6-61 Time Values
* Parameter Name: tTypeCSinkWaitCap
*/
#define PD_T_TYPEC_SINK_WAIT_CAP_MAX_MS 620
/**
* @brief VBUS maximum safe operating voltage at "zero volts".
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: vSafe0V
*/
#define PD_V_SAFE_0V_MAX_MV 800
/**
* @brief VBUS minimum safe operating voltage at 5V.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: vSafe5V
*/
#define PD_V_SAFE_5V_MIN_MV 4750
/**
* @brief Time to reach PD_V_SAFE_0V_MV max in milliseconds.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: tSafe0V
*/
#define PD_T_SAFE_0V_MAX_MS 650
/**
* @brief Time to reach PD_V_SAFE_5V_MV max in milliseconds.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: tSafe5V
*/
#define PD_T_SAFE_5V_MAX_MS 275
/**
* @brief Convert bytes to PD Header data object count, where a
* data object is 4-bytes.
*
* @param c number of bytes to convert
*/
#define PD_CONVERT_BYTES_TO_PD_HEADER_COUNT(c) ((c) >> 2)
/**
* @brief Convert PD Header data object count to bytes
*
* @param c number of PD Header data objects
*/
#define PD_CONVERT_PD_HEADER_COUNT_TO_BYTES(c) ((c) << 2)
/**
* @brief Build a PD message header
* See Table 6-1 Message Header
*/
union pd_header {
struct {
/** Type of message */
uint16_t message_type : 5;
/** Port Data role */
uint16_t port_data_role : 1;
/** Specification Revision */
uint16_t specification_revision : 2;
/** Port Power Role */
uint16_t port_power_role : 1;
/** Message ID */
uint16_t message_id : 3;
/** Number of Data Objects */
uint16_t number_of_data_objects : 3;
/** Extended Message */
uint16_t extended : 1;
};
uint16_t raw_value;
};
/**
* @brief Build an extended message header
* See Table 6-3 Extended Message Header
*/
union pd_ext_header {
struct {
/** Number of total bytes in data block */
uint16_t data_size : 9;
/** Reserved */
uint16_t reserved0 : 1;
/** 1 for a chunked message, else 0 */
uint16_t request_chunk : 1;
/** Chunk number when chkd = 1, else 0 */
uint16_t chunk_number : 4;
/** 1 for chunked messages */
uint16_t chunked : 1;
};
/** Raw PD Ext Header value */
uint16_t raw_value;
};
/**
* PDO - Power Data Object
* RDO - Request Data Object
*/
/**
* @brief Power Data Object Source Type
* Table 6-7 Power Data Object
*/
enum pdo_src_type {
/** Fixed supply (Vmin = Vmax) */
PDO_FIXED = 0,
/** Battery */
PDO_BATTERY = 1,
/** Variable Supply (non-Battery) */
PDO_VARIABLE = 2,
/** Augmented Power Data Object (APDO) */
PDO_AUGMENTED = 3
};
/**
* @brief Convert milliamps to Fixed PDO Current in 10mA units.
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_FIXED_PDO_CURRENT(c) ((c) / 10)
/**
* @brief Convert millivolts to Fixed PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_FIXED_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Fixed PDO Current from 10mA units to milliamps.
*
* @param c Fixed PDO current in 10mA units.
*/
#define PD_CONVERT_FIXED_PDO_CURRENT_TO_MA(c) ((c) * 10)
/**
* @brief Convert a Fixed PDO Voltage from 50mV units to millivolts.
* Used for converting pd_fixed_supply_pdo_source.voltage and
* pd_fixed_supply_pdo_sink.voltage
*
* @param v Fixed PDO voltage in 50mV units.
*/
#define PD_CONVERT_FIXED_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Fixed Supply PDO Source value
* See Table 6-9 Fixed Supply PDO - Source
*/
union pd_fixed_supply_pdo_source {
struct {
/** Maximum Current in 10mA units */
uint32_t max_current : 10;
/** Voltage in 50mV units */
uint32_t voltage : 10;
/** Peak Current */
uint32_t peak_current : 2;
/** Reserved Shall be set to zero. */
uint32_t reserved0 : 2;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** Dual-Role Data */
uint32_t dual_role_data : 1;
/** USB Communications Capable */
uint32_t usb_comms_capable : 1;
/** Unconstrained Power */
uint32_t unconstrained_power : 1;
/** USB Suspend Supported */
uint32_t usb_suspend_supported : 1;
/** Dual-Role Power */
uint32_t dual_role_power : 1;
/** Fixed supply. SET TO PDO_FIXED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Fast Role Swap Required for USB Type-C current
*/
enum pd_frs_type {
/** Fast Swap not supported */
FRS_NOT_SUPPORTED,
/** Default USB Power */
FRS_DEFAULT_USB_POWER,
/** 1.5A @ 5V */
FRS_1P5A_5V,
/** 3.0A @ 5V */
FRS_3P0A_5V
};
/**
* @brief Create a Fixed Supply PDO Sink value
* See Table 6-14 Fixed Supply PDO - Sink
*/
union pd_fixed_supply_pdo_sink {
struct {
/** Operational Current in 10mA units */
uint32_t operational_current : 10;
/** Voltage in 50mV units */
uint32_t voltage : 10;
/** Reserved Shall be set to zero. */
uint32_t reserved0 : 3;
/** Fast Role Swap required USB Type-C Current */
enum pd_frs_type frs_required : 2;
/** Dual-Role Data */
uint32_t dual_role_data : 1;
/** USB Communications Capable */
uint32_t usb_comms_capable : 1;
/** Unconstrained Power */
uint32_t unconstrained_power : 1;
/** Higher Capability */
uint32_t higher_capability : 1;
/** Dual-Role Power */
uint32_t dual_role_power : 1;
/** Fixed supply. SET TO PDO_FIXED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliamps to Variable PDO Current in 10ma units.
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_VARIABLE_PDO_CURRENT(c) ((c) / 10)
/**
* @brief Convert millivolts to Variable PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_VARIABLE_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Variable PDO Current from 10mA units to milliamps.
*
* @param c Variable PDO current in 10mA units.
*/
#define PD_CONVERT_VARIABLE_PDO_CURRENT_TO_MA(c) ((c) * 10)
/**
* @brief Convert a Variable PDO Voltage from 50mV units to millivolts.
*
* @param v Variable PDO voltage in 50mV units.
*/
#define PD_CONVERT_VARIABLE_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Variable Supply PDO Source value
* See Table 6-11 Variable Supply (non-Battery) PDO - Source
*/
union pd_variable_supply_pdo_source {
struct {
/** Maximum Current in 10mA units */
uint32_t max_current : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Variable supply. SET TO PDO_VARIABLE */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create a Variable Supply PDO Sink value
* See Table 6-15 Variable Supply (non-Battery) PDO - Sink
*/
union pd_variable_supply_pdo_sink {
struct {
/** operational Current in 10mA units */
uint32_t operational_current : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Variable supply. SET TO PDO_VARIABLE */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliwatts to Battery PDO Power in 250mW units
*
* @param c Power in milliwatts
*/
#define PD_CONVERT_MW_TO_BATTERY_PDO_POWER(c) ((c) / 250)
/**
* @brief Convert milliwatts to Battery PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_BATTERY_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Battery PDO Power from 250mW units to milliwatts
*
* @param c Power in 250mW units.
*/
#define PD_CONVERT_BATTERY_PDO_POWER_TO_MW(c) ((c) * 250)
/**
* @brief Convert a Battery PDO Voltage from 50mV units to millivolts
*
* @param v Voltage in 50mV units.
*/
#define PD_CONVERT_BATTERY_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Battery Supply PDO Source value
* See Table 6-12 Battery Supply PDO - Source
*/
union pd_battery_supply_pdo_source {
struct {
/** Maximum Allowable Power in 250mW units */
uint32_t max_power : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Battery supply. SET TO PDO_BATTERY */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create a Battery Supply PDO Sink value
* See Table 6-16 Battery Supply PDO - Sink
*/
union pd_battery_supply_pdo_sink {
struct {
/** Operational Power in 250mW units */
uint32_t operational_power : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Battery supply. SET TO PDO_BATTERY */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliamps to Augmented PDO Current in 50mA units
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_AUGMENTED_PDO_CURRENT(c) ((c) / 50)
/**
* @brief Convert millivolts to Augmented PDO Voltage in 100mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_AUGMENTED_PDO_VOLTAGE(v) ((v) / 100)
/**
* @brief Convert an Augmented PDO Current from 50mA units to milliamps
*
* @param c Augmented PDO current in 50mA units.
*/
#define PD_CONVERT_AUGMENTED_PDO_CURRENT_TO_MA(c) ((c) * 50)
/**
* @brief Convert an Augmented PDO Voltage from 100mV units to millivolts
*
* @param v Augmented PDO voltage in 100mV units.
*/
#define PD_CONVERT_AUGMENTED_PDO_VOLTAGE_TO_MV(v) ((v) * 100)
/**
* @brief Create Augmented Supply PDO Source value
* See Table 6-13 Programmable Power Supply APDO - Source
*/
union pd_augmented_supply_pdo_source {
struct {
/** Maximum Current in 50mA increments */
uint32_t max_current : 7;
/** Reserved Shall be set to zero */
uint32_t reserved0 : 1;
/** Minimum Voltage in 100mV increments */
uint32_t min_voltage : 8;
/** Reserved Shall be set to zero */
uint32_t reserved1 : 1;
/** Maximum Voltage in 100mV increments */
uint32_t max_voltage : 8;
/** Reserved Shall be set to zero */
uint32_t reserved2 : 2;
/** PPS Power Limited */
uint32_t pps_power_limited : 1;
/**
* 00b Programmable Power Supply
* 01b…11b - Reserved, Shall Not be used
* Setting as reserved because it defaults to 0 when not set.
*/
uint32_t reserved3 : 2;
/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create Augmented Supply PDO Sink value
* See Table 6-17 Programmable Power Supply APDO - Sink
*/
union pd_augmented_supply_pdo_sink {
struct {
/** Maximum Current in 50mA increments */
uint32_t max_current : 7;
/** Reserved Shall be set to zero */
uint32_t reserved0 : 1;
/** Minimum Voltage in 100mV increments */
uint32_t min_voltage : 8;
/** Reserved Shall be set to zero */
uint32_t reserved1 : 1;
/** Maximum Voltage in 100mV increments */
uint32_t max_voltage : 8;
/** Reserved Shall be set to zero */
uint32_t reserved2 : 3;
/**
* 00b Programmable Power Supply
* 01b…11b - Reserved, Shall Not be used
* Setting as reserved because it defaults to 0 when not set.
*/
uint32_t reserved3 : 2;
/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief The Request Data Object (RDO) Shall be returned by the Sink making
* a request for power.
* See Section 6.4.2 Request Message
*/
union pd_rdo {
/**
* @brief Create a Fixed RDO value
* See Table 6-19 Fixed and Variable Request Data Object
*/
struct {
/**
* Operating Current 10mA units
* NOTE: If Give Back Flag is zero, this field is
* the Maximum Operating Current.
* If Give Back Flag is one, this field is
* the Minimum Operating Current.
*/
uint32_t min_or_max_operating_current : 10;
/** Operating current in 10mA units */
uint32_t operating_current : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} fixed;
/**
* @brief Create a Variable RDO value
* See Table 6-19 Fixed and Variable Request Data Object
*/
struct {
/**
* Operating Current 10mA units
* NOTE: If Give Back Flag is zero, this field is
* the Maximum Operating Current.
* If Give Back Flag is one, this field is
* the Minimum Operating Current.
*/
uint32_t min_or_max_operating_current : 10;
/** Operating current in 10mA units */
uint32_t operating_current : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} variable;
/**
* @brief Create a Battery RDO value
* See Table 6-20 Battery Request Data Object
*/
struct {
/** Minimum Operating Power in 250mW units */
uint32_t min_operating_power : 10;
/** Operating power in 250mW units */
uint32_t operating_power : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} battery;
/**
* @brief Create an Augmented RDO value
* See Table 6-22 Programmable Request Data Object
*/
struct {
/** Operating Current 50mA units */
uint32_t operating_current : 7;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 2;
/** Output Voltage in 20mV units */
uint32_t output_voltage : 11;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Reserved - Shall be set to zero */
uint32_t reserved2 : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved3 : 1;
} augmented;
/** Raw RDO value */
uint32_t raw_value;
};
/**
* @brief Protocol revision
*/
enum pd_rev_type {
/** PD revision 1.0 */
PD_REV10 = 0,
/** PD revision 2.0 */
PD_REV20 = 1,
/** PD revision 3.0 */
PD_REV30 = 2,
};
/**
* @brief Power Delivery packet type
* See USB Type-C Port Controller Interface Specification,
* Revision 2.0, Version 1.2, Table 4-38 TRANSMIT Register Definition
*/
enum pd_packet_type {
/** Port Partner message */
PD_PACKET_SOP = 0,
/** Cable Plug message */
PD_PACKET_SOP_PRIME = 1,
/** Cable Plug message far end*/
PD_PACKET_PRIME_PRIME = 2,
/** Currently undefined in the PD specification */
PD_PACKET_DEBUG_PRIME = 3,
/** Currently undefined in the PD specification */
PD_PACKET_DEBUG_PRIME_PRIME = 4,
/** Hard Reset message to the Port Partner */
PD_PACKET_TX_HARD_RESET = 5,
/** Cable Reset message to the Cable */
PD_PACKET_CABLE_RESET = 6,
/** BIST_MODE_2 message to the Port Partner */
PD_PACKET_TX_BIST_MODE_2 = 7,
/** USED ONLY FOR RECEPTION OF UNKNOWN MSG TYPES */
PD_PACKET_MSG_INVALID = 0xf
};
/**
* @brief Control Message type
* See Table 6-5 Control Message Types
*/
enum pd_ctrl_msg_type {
/** 0 Reserved */
/** GoodCRC Message */
PD_CTRL_GOOD_CRC = 1,
/** GotoMin Message */
PD_CTRL_GOTO_MIN = 2,
/** Accept Message */
PD_CTRL_ACCEPT = 3,
/** Reject Message */
PD_CTRL_REJECT = 4,
/** Ping Message */
PD_CTRL_PING = 5,
/** PS_RDY Message */
PD_CTRL_PS_RDY = 6,
/** Get_Source_Cap Message */
PD_CTRL_GET_SOURCE_CAP = 7,
/** Get_Sink_Cap Message */
PD_CTRL_GET_SINK_CAP = 8,
/** DR_Swap Message */
PD_CTRL_DR_SWAP = 9,
/** PR_Swap Message */
PD_CTRL_PR_SWAP = 10,
/** VCONN_Swap Message */
PD_CTRL_VCONN_SWAP = 11,
/** Wait Message */
PD_CTRL_WAIT = 12,
/** Soft Reset Message */
PD_CTRL_SOFT_RESET = 13,
/** Used for REV 3.0 */
/** Data_Reset Message */
PD_CTRL_DATA_RESET = 14,
/** Data_Reset_Complete Message */
PD_CTRL_DATA_RESET_COMPLETE = 15,
/** Not_Supported Message */
PD_CTRL_NOT_SUPPORTED = 16,
/** Get_Source_Cap_Extended Message */
PD_CTRL_GET_SOURCE_CAP_EXT = 17,
/** Get_Status Message */
PD_CTRL_GET_STATUS = 18,
/** FR_Swap Message */
PD_CTRL_FR_SWAP = 19,
/** Get_PPS_Status Message */
PD_CTRL_GET_PPS_STATUS = 20,
/** Get_Country_Codes Message */
PD_CTRL_GET_COUNTRY_CODES = 21,
/** Get_Sink_Cap_Extended Message */
PD_CTRL_GET_SINK_CAP_EXT = 22
/** 23-31 Reserved */
};
/**
* @brief Data message type
* See Table 6-6 Data Message Types
*/
enum pd_data_msg_type {
/** 0 Reserved */
/** Source_Capabilities Message */
PD_DATA_SOURCE_CAP = 1,
/** Request Message */
PD_DATA_REQUEST = 2,
/** BIST Message */
PD_DATA_BIST = 3,
/** Sink Capabilities Message */
PD_DATA_SINK_CAP = 4,
/** 5-14 Reserved for REV 2.0 */
PD_DATA_BATTERY_STATUS = 5,
/** Alert Message */
PD_DATA_ALERT = 6,
/** Get Country Info Message */
PD_DATA_GET_COUNTRY_INFO = 7,
/** 8-14 Reserved for REV 3.0 */
/** Enter USB message */
PD_DATA_ENTER_USB = 8,
/** Vendor Defined Message */
PD_DATA_VENDOR_DEF = 15,
};
/**
* @brief Extended message type for REV 3.0
* See Table 6-48 Extended Message Types
*/
enum pd_ext_msg_type {
/** 0 Reserved */
/** Source_Capabilities_Extended Message */
PD_EXT_SOURCE_CAP = 1,
/** Status Message */
PD_EXT_STATUS = 2,
/** Get_Battery_Cap Message */
PD_EXT_GET_BATTERY_CAP = 3,
/** Get_Battery_Status Message */
PD_EXT_GET_BATTERY_STATUS = 4,
/** Battery_Capabilities Message */
PD_EXT_BATTERY_CAP = 5,
/** Get_Manufacturer_Info Message */
PD_EXT_GET_MANUFACTURER_INFO = 6,
/** Manufacturer_Info Message */
PD_EXT_MANUFACTURER_INFO = 7,
/** Security_Request Message */
PD_EXT_SECURITY_REQUEST = 8,
/** Security_Response Message */
PD_EXT_SECURITY_RESPONSE = 9,
/** Firmware_Update_Request Message */
PD_EXT_FIRMWARE_UPDATE_REQUEST = 10,
/** Firmware_Update_Response Message */
PD_EXT_FIRMWARE_UPDATE_RESPONSE = 11,
/** PPS_Status Message */
PD_EXT_PPS_STATUS = 12,
/** Country_Codes Message */
PD_EXT_COUNTRY_INFO = 13,
/** Country_Info Message */
PD_EXT_COUNTRY_CODES = 14,
/*8 15-31 Reserved */
};
/**
* @brief Active PD CC pin
*/
enum usbpd_cc_pin {
/** PD is active on CC1 */
USBPD_CC_PIN_1 = 0,
/** PD is active on CC2 */
USBPD_CC_PIN_2 = 1,
};
/**
* @brief Power Delivery message
*/
struct pd_msg {
/** Type of this packet */
enum pd_packet_type type;
/** Header of this message */
union pd_header header;
/** Length of bytes in data */
uint32_t len;
/** Message data */
uint8_t data[PD_MAX_EXTENDED_MSG_LEN];
};
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_ */