diff options
Diffstat (limited to 'include/usb_pd.h')
-rw-r--r-- | include/usb_pd.h | 127 |
1 files changed, 100 insertions, 27 deletions
diff --git a/include/usb_pd.h b/include/usb_pd.h index 8468de814a..d5b6412d69 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -249,7 +249,7 @@ enum pd_rx_errors { #define PD_T_PR_SWAP_WAIT (100*MSEC) /* tPRSwapWait 100ms */ #define PD_T_DATA_RESET (225*MSEC) /* between 200ms and 250ms */ #define PD_T_DATA_RESET_FAIL (300*MSEC) /* 300ms */ -#define PD_T_VCONN_REAPPLIED (15*MSEC) /* between 10ms and 20ms */ +#define PD_T_VCONN_REAPPLIED (10*MSEC) /* between 10ms and 20ms */ #define PD_T_VCONN_DISCHARGE (240*MSEC) /* between 160ms and 240ms */ /* @@ -590,6 +590,18 @@ struct partner_active_modes { #define PD_PRODUCT_PID(vdo) (((vdo) >> 16) & 0xffff) /* + * PD Rev 3.1 Revision Message Data Object (RMDO) + * Only bits 16-31 have data. A uint_16t is used to hold RMDOs upper 16 bits. + */ +struct rmdo { + int reserved : 16; + int minor_ver : 4; + int major_ver : 4; + int minor_rev : 4; + int major_rev : 4; +}; + +/* * Message id starts from 0 to 7. If last_msg_id is initialized to 0, * it will lead to repetitive message id with first received packet, * so initialize it with an invalid value 0xff. @@ -1017,6 +1029,7 @@ enum pd_dpm_request { DPM_REQUEST_FRS_DET_ENABLE = BIT(21), DPM_REQUEST_FRS_DET_DISABLE = BIT(22), DPM_REQUEST_DATA_RESET = BIT(23), + DPM_REQUEST_GET_REVISION = BIT(24), }; /** @@ -1152,7 +1165,11 @@ enum pd_ctrl_msg_type { PD_CTRL_FR_SWAP = 19, PD_CTRL_GET_PPS_STATUS = 20, PD_CTRL_GET_COUNTRY_CODES = 21, - /* 22-31 Reserved */ + PD_CTRL_GET_SINK_CAP_EXT = 22, + /* Used for REV 3.1 */ + PD_CTRL_GET_SOURCE_INFO = 23, + PD_CTRL_GET_REVISION = 24, + /* 25-31 Reserved */ }; /* Control message types which always mark the start of an AMS */ @@ -1190,6 +1207,44 @@ enum pd_ctrl_msg_type { */ #define BATT_CAP_REF(n) (((n) >> 16) & 0xff) +/* SOP SDB fields for PD Rev 3.0 Section 6.5.2.1 */ +enum pd_sdb_temperature_status { + PD_SDB_TEMPERATURE_STATUS_NOT_SUPPORTED = 0, + PD_SDB_TEMPERATURE_STATUS_NORMAL = 2, + PD_SDB_TEMPERATURE_STATUS_WARNING = 4, + PD_SDB_TEMPERATURE_STATUS_OVER_TEMPERATURE = 6, +} __packed; +BUILD_ASSERT(sizeof(enum pd_sdb_temperature_status) == 1); + +struct pd_sdb { + /* SDB Fields for PD REV 3.0 */ + uint8_t internal_temp; + uint8_t present_input; + uint8_t present_battery_input; + uint8_t event_flags; + enum pd_sdb_temperature_status temperature_status; + uint8_t power_status; + /* SDB Fields for PD REV 3.1 */ + uint8_t power_state_change; +}; + +enum pd_sdb_power_state { + PD_SDB_POWER_STATE_NOT_SUPPORTED = 0, + PD_SDB_POWER_STATE_S0 = 1, + PD_SDB_POWER_STATE_MODERN_STANDBY = 2, + PD_SDB_POWER_STATE_S3 = 3, + PD_SDB_POWER_STATE_S4 = 4, + PD_SDB_POWER_STATE_S5 = 5, + PD_SDB_POWER_STATE_G3 = 6, +}; + +enum pd_sdb_power_indicator { + PD_SDB_POWER_INDICATOR_OFF = (0 << 3), + PD_SDB_POWER_INDICATOR_ON = (1 << 3), + PD_SDB_POWER_INDICATOR_BLINKING = (2 << 3), + PD_SDB_POWER_INDICATOR_BREATHING = (3 << 3), +}; + /* Extended message type for REV 3.0 */ enum pd_ext_msg_type { /* 0 Reserved */ @@ -1207,19 +1262,36 @@ enum pd_ext_msg_type { PD_EXT_PPS_STATUS = 12, PD_EXT_COUNTRY_INFO = 13, PD_EXT_COUNTRY_CODES = 14, - /* 15-31 Reserved */ + /* Used for REV 3.1 */ + PD_EXT_SINK_CAP = 15, + PD_EXT_CONTROL = 16, + PD_EXT_EPR_SOURCE_CAP = 17, + PD_EXT_EPR_SINK_CAP = 18, + /* 19-29 Reserved */ + PD_EXT_VENDOR_DEF = 30, + /* 31 Reserved */ }; +/* Alert Data Object fields for REV 3.1 */ +#define ADO_EXTENDED_ALERT_EVENT (BIT(24) << 7) /* Alert Data Object fields for REV 3.0 */ -#define ADO_OVP_EVENT BIT(30) -#define ADO_SOURCE_INPUT_CHANGE BIT(29) -#define ADO_OPERATING_CONDITION_CHANGE BIT(28) -#define ADO_OTP_EVENT BIT(27) -#define ADO_OCP_EVENT BIT(26) -#define ADO_BATTERY_STATUS_CHANGE BIT(25) +#define ADO_OVP_EVENT (BIT(24) << 6) +#define ADO_SOURCE_INPUT_CHANGE (BIT(24) << 5) +#define ADO_OPERATING_CONDITION_CHANGE (BIT(24) << 4) +#define ADO_OTP_EVENT (BIT(24) << 3) +#define ADO_OCP_EVENT (BIT(24) << 2) +#define ADO_BATTERY_STATUS_CHANGE (BIT(24) << 1) #define ADO_FIXED_BATTERIES(n) ((n & 0xf) << 20) #define ADO_HOT_SWAPPABLE_BATTERIES(n) ((n & 0xf) << 16) +/* Extended alert event types for REV 3.1 */ +enum ado_extended_alert_event_type { + ADO_POWER_STATE_CHANGE = 0x1, + ADO_POWER_BUTTON_PRESS = 0x2, + ADO_POWER_BUTTON_RELEASE = 0x3, + ADO_CONTROLLER_INITIATED_WAKE = 0x4, +}; + /* Data message type */ enum pd_data_msg_type { /* 0 Reserved */ @@ -1227,13 +1299,19 @@ enum pd_data_msg_type { PD_DATA_REQUEST = 2, PD_DATA_BIST = 3, PD_DATA_SINK_CAP = 4, - /* 5-14 Reserved for REV 2.0 */ + /* Used for REV 3.0 */ PD_DATA_BATTERY_STATUS = 5, PD_DATA_ALERT = 6, PD_DATA_GET_COUNTRY_INFO = 7, - /* 8-14 Reserved for REV 3.0 */ PD_DATA_ENTER_USB = 8, + /* Used for REV 3.1 */ + PD_DATA_EPR_REQUEST = 9, + PD_DATA_EPR_MODE = 10, + PD_DATA_SOURCE_INFO = 11, + PD_DATA_REVISION = 12, + /* 13-14 Reserved */ PD_DATA_VENDOR_DEF = 15, + /* 16-31 Reserved */ }; @@ -1578,14 +1656,6 @@ __override_proto void typec_set_input_current_limit(int port, uint32_t supply_voltage); /** - * Set the type-C current limit when sourcing current.. - * - * @param port USB-C port number - * @param rp One of enum tcpc_rp_value (eg TYPEC_RP_3A0) defining the limit. - */ -void typec_set_source_current_limit(int port, enum tcpc_rp_value rp); - -/** * Verify board specific health status : current, voltages... * * @return EC_SUCCESS if the board is good, <0 else. @@ -3151,14 +3221,6 @@ void board_reset_pd_mcu(void); */ bool pd_is_debug_acc(int port); -/** - * Sets the polarity of the port - * - * @param port USB-C port number - * @param polarity 0 for CC1, else 1 for CC2 - */ -void pd_set_polarity(int port, enum tcpc_cc_polarity polarity); - /* * Notify the AP that we have entered into DisplayPort Alternate Mode. This * sets a DP_ALT_MODE_ENTERED MKBP event which may wake the AP. @@ -3457,6 +3519,17 @@ void typec_select_src_collision_rp(int port, enum tcpc_rp_value rp); * @return 0 on success else failure */ int typec_update_cc(int port); + +/** + * Defines the New power state indicator bits in the Power State Change + * field of the Status Data Block (SDB) in USB PD Revision 3.1 and above. + * + * @param pd_sdb_power_state enum defining the New Power State field of the SDB + * @return pd_sdb_power_indicator enum for the SDB + */ +__override_proto enum pd_sdb_power_indicator board_get_pd_sdb_power_indicator( +enum pd_sdb_power_state power_state); + /****************************************************************************/ #endif /* __CROS_EC_USB_PD_H */ |