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>
842 lines
22 KiB
C
842 lines
22 KiB
C
/*
|
||
* 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_ */
|