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