diff options
Diffstat (limited to 'include/usb_pd.h')
-rw-r--r-- | include/usb_pd.h | 1101 |
1 files changed, 534 insertions, 567 deletions
diff --git a/include/usb_pd.h b/include/usb_pd.h index d5b6412d69..6254feb963 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -26,58 +26,56 @@ */ #if defined(HAS_TASK_PD_C0) && defined(CONFIG_USB_PD_PORT_MAX_COUNT) #define PD_PORT_TO_TASK_ID(port) (TASK_ID_PD_C0 + (port)) -#define TASK_ID_TO_PD_PORT(id) ((id) - TASK_ID_PD_C0) +#define TASK_ID_TO_PD_PORT(id) ((id)-TASK_ID_PD_C0) #else #define PD_PORT_TO_TASK_ID(port) -1 /* stub task ID */ #define TASK_ID_TO_PD_PORT(id) 0 #endif /* CONFIG_USB_PD_PORT_MAX_COUNT && HAS_TASK_PD_C0 */ enum pd_rx_errors { - PD_RX_ERR_INVAL = -1, /* Invalid packet */ - PD_RX_ERR_HARD_RESET = -2, /* Got a Hard-Reset packet */ - PD_RX_ERR_CRC = -3, /* CRC mismatch */ - PD_RX_ERR_ID = -4, /* Invalid ID number */ + PD_RX_ERR_INVAL = -1, /* Invalid packet */ + PD_RX_ERR_HARD_RESET = -2, /* Got a Hard-Reset packet */ + PD_RX_ERR_CRC = -3, /* CRC mismatch */ + PD_RX_ERR_ID = -4, /* Invalid ID number */ PD_RX_ERR_UNSUPPORTED_SOP = -5, /* Unsupported SOP */ - PD_RX_ERR_CABLE_RESET = -6 /* Got a Cable-Reset packet */ + PD_RX_ERR_CABLE_RESET = -6 /* Got a Cable-Reset packet */ }; /* Events for USB PD task */ /* Outgoing packet event */ -#define PD_EVENT_TX TASK_EVENT_CUSTOM_BIT(3) +#define PD_EVENT_TX TASK_EVENT_CUSTOM_BIT(3) /* CC line change event */ -#define PD_EVENT_CC TASK_EVENT_CUSTOM_BIT(4) +#define PD_EVENT_CC TASK_EVENT_CUSTOM_BIT(4) /* TCPC has reset */ -#define PD_EVENT_TCPC_RESET TASK_EVENT_CUSTOM_BIT(5) +#define PD_EVENT_TCPC_RESET TASK_EVENT_CUSTOM_BIT(5) /* DRP state has changed */ -#define PD_EVENT_UPDATE_DUAL_ROLE TASK_EVENT_CUSTOM_BIT(6) +#define PD_EVENT_UPDATE_DUAL_ROLE TASK_EVENT_CUSTOM_BIT(6) /* * A task, other than the task owning the PD port, accessed the TCPC. The task * that owns the port does not send itself this event. */ -#define PD_EVENT_DEVICE_ACCESSED TASK_EVENT_CUSTOM_BIT(7) +#define PD_EVENT_DEVICE_ACCESSED TASK_EVENT_CUSTOM_BIT(7) /* Chipset power state changed */ -#define PD_EVENT_POWER_STATE_CHANGE TASK_EVENT_CUSTOM_BIT(8) +#define PD_EVENT_POWER_STATE_CHANGE TASK_EVENT_CUSTOM_BIT(8) /* Issue a Hard Reset. */ -#define PD_EVENT_SEND_HARD_RESET TASK_EVENT_CUSTOM_BIT(9) +#define PD_EVENT_SEND_HARD_RESET TASK_EVENT_CUSTOM_BIT(9) /* Prepare for sysjump */ -#define PD_EVENT_SYSJUMP TASK_EVENT_CUSTOM_BIT(10) +#define PD_EVENT_SYSJUMP TASK_EVENT_CUSTOM_BIT(10) /* Receive a Hard Reset. */ -#define PD_EVENT_RX_HARD_RESET TASK_EVENT_CUSTOM_BIT(11) +#define PD_EVENT_RX_HARD_RESET TASK_EVENT_CUSTOM_BIT(11) /* MUX configured notification event */ -#define PD_EVENT_AP_MUX_DONE TASK_EVENT_CUSTOM_BIT(12) +#define PD_EVENT_AP_MUX_DONE TASK_EVENT_CUSTOM_BIT(12) /* First free event on PD task */ -#define PD_EVENT_FIRST_FREE_BIT 13 +#define PD_EVENT_FIRST_FREE_BIT 13 /* Ensure TCPC is out of low power mode before handling these events. */ -#define PD_EXIT_LOW_POWER_EVENT_MASK \ - (PD_EVENT_CC | \ - PD_EVENT_UPDATE_DUAL_ROLE | \ - PD_EVENT_POWER_STATE_CHANGE | \ - PD_EVENT_TCPC_RESET) +#define PD_EXIT_LOW_POWER_EVENT_MASK \ + (PD_EVENT_CC | PD_EVENT_UPDATE_DUAL_ROLE | \ + PD_EVENT_POWER_STATE_CHANGE | PD_EVENT_TCPC_RESET) /* --- PD data message helpers --- */ -#define PDO_MAX_OBJECTS 7 +#define PDO_MAX_OBJECTS 7 #define PDO_MODES (PDO_MAX_OBJECTS - 1) /* PDO : Power Data Object */ @@ -94,108 +92,105 @@ enum pd_rx_errors { * * Note: Some bits and decode macros are defined in ec_commands.h */ -#define PDO_FIXED_SUSPEND BIT(28) /* USB Suspend supported */ +#define PDO_FIXED_SUSPEND BIT(28) /* USB Suspend supported */ /* Higher capability in vSafe5V sink PDO */ -#define PDO_FIXED_SNK_HIGHER_CAP BIT(28) -#define PDO_FIXED_FRS_CURR_NOT_SUPPORTED (0 << 23) +#define PDO_FIXED_SNK_HIGHER_CAP BIT(28) +#define PDO_FIXED_FRS_CURR_NOT_SUPPORTED (0 << 23) #define PDO_FIXED_FRS_CURR_DFLT_USB_POWER (1 << 23) -#define PDO_FIXED_FRS_CURR_1A5_AT_5V (2 << 23) -#define PDO_FIXED_FRS_CURR_3A0_AT_5V (3 << 23) +#define PDO_FIXED_FRS_CURR_1A5_AT_5V (2 << 23) +#define PDO_FIXED_FRS_CURR_3A0_AT_5V (3 << 23) #define PDO_FIXED_PEAK_CURR () /* [21..20] Peak current */ -#define PDO_FIXED_VOLT(mv) (((mv)/50) << 10) /* Voltage in 50mV units */ -#define PDO_FIXED_CURR(ma) (((ma)/10) << 0) /* Max current in 10mA units */ +#define PDO_FIXED_VOLT(mv) (((mv) / 50) << 10) /* Voltage in 50mV units */ +#define PDO_FIXED_CURR(ma) (((ma) / 10) << 0) /* Max current in 10mA units */ #define PDO_FIXED_GET_VOLT(pdo) (((pdo >> 10) & 0x3FF) * 50) #define PDO_FIXED_GET_CURR(pdo) ((pdo & 0x3FF) * 10) -#define PDO_FIXED(mv, ma, flags) (PDO_FIXED_VOLT(mv) |\ - PDO_FIXED_CURR(ma) | (flags)) +#define PDO_FIXED(mv, ma, flags) \ + (PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma) | (flags)) #define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & 0x3FF) << 20) #define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & 0x3FF) << 10) -#define PDO_VAR_OP_CURR(ma) ((((ma) / 10) & 0x3FF) << 0) +#define PDO_VAR_OP_CURR(ma) ((((ma) / 10) & 0x3FF) << 0) -#define PDO_VAR(min_mv, max_mv, op_ma) \ - (PDO_VAR_MIN_VOLT(min_mv) | \ - PDO_VAR_MAX_VOLT(max_mv) | \ - PDO_VAR_OP_CURR(op_ma) | \ - PDO_TYPE_VARIABLE) +#define PDO_VAR(min_mv, max_mv, op_ma) \ + (PDO_VAR_MIN_VOLT(min_mv) | PDO_VAR_MAX_VOLT(max_mv) | \ + PDO_VAR_OP_CURR(op_ma) | PDO_TYPE_VARIABLE) #define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & 0x3FF) << 20) #define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & 0x3FF) << 10) #define PDO_BATT_OP_POWER(mw) ((((mw) / 250) & 0x3FF) << 0) -#define PDO_BATT(min_mv, max_mv, op_mw) \ - (PDO_BATT_MIN_VOLT(min_mv) | \ - PDO_BATT_MAX_VOLT(max_mv) | \ - PDO_BATT_OP_POWER(op_mw) | \ - PDO_TYPE_BATTERY) +#define PDO_BATT(min_mv, max_mv, op_mw) \ + (PDO_BATT_MIN_VOLT(min_mv) | PDO_BATT_MAX_VOLT(max_mv) | \ + PDO_BATT_OP_POWER(op_mw) | PDO_TYPE_BATTERY) /* RDO : Request Data Object */ -#define RDO_OBJ_POS(n) (((n) & 0x7) << 28) -#define RDO_POS(rdo) (((rdo) >> 28) & 0x7) -#define RDO_GIVE_BACK BIT(27) -#define RDO_CAP_MISMATCH BIT(26) -#define RDO_COMM_CAP BIT(25) -#define RDO_NO_SUSPEND BIT(24) -#define RDO_FIXED_VAR_OP_CURR(ma) ((((ma) / 10) & 0x3FF) << 10) +#define RDO_OBJ_POS(n) (((n)&0x7) << 28) +#define RDO_POS(rdo) (((rdo) >> 28) & 0x7) +#define RDO_GIVE_BACK BIT(27) +#define RDO_CAP_MISMATCH BIT(26) +#define RDO_COMM_CAP BIT(25) +#define RDO_NO_SUSPEND BIT(24) +#define RDO_FIXED_VAR_OP_CURR(ma) ((((ma) / 10) & 0x3FF) << 10) #define RDO_FIXED_VAR_MAX_CURR(ma) ((((ma) / 10) & 0x3FF) << 0) -#define RDO_BATT_OP_POWER(mw) ((((mw) / 250) & 0x3FF) << 10) -#define RDO_BATT_MAX_POWER(mw) ((((mw) / 250) & 0x3FF) << 0) +#define RDO_BATT_OP_POWER(mw) ((((mw) / 250) & 0x3FF) << 10) +#define RDO_BATT_MAX_POWER(mw) ((((mw) / 250) & 0x3FF) << 0) -#define RDO_FIXED(n, op_ma, max_ma, flags) \ - (RDO_OBJ_POS(n) | (flags) | \ - RDO_FIXED_VAR_OP_CURR(op_ma) | \ - RDO_FIXED_VAR_MAX_CURR(max_ma)) +#define RDO_FIXED(n, op_ma, max_ma, flags) \ + (RDO_OBJ_POS(n) | (flags) | RDO_FIXED_VAR_OP_CURR(op_ma) | \ + RDO_FIXED_VAR_MAX_CURR(max_ma)) - -#define RDO_BATT(n, op_mw, max_mw, flags) \ - (RDO_OBJ_POS(n) | (flags) | \ - RDO_BATT_OP_POWER(op_mw) | \ - RDO_BATT_MAX_POWER(max_mw)) +#define RDO_BATT(n, op_mw, max_mw, flags) \ + (RDO_OBJ_POS(n) | (flags) | RDO_BATT_OP_POWER(op_mw) | \ + RDO_BATT_MAX_POWER(max_mw)) /* BDO : BIST Data Object * 31:28 BIST Mode * In PD 3.0, all but Carrier Mode 2 (as Carrier Mode) and Test Data are - * reserved. + * reserved, with a new BIST shared mode added * 27:16 Reserved * 15:0 Returned error counters (reserved in PD 3.0) */ -#define BDO_MODE_RECV (0 << 28) -#define BDO_MODE_TRANSMIT BIT(28) -#define BDO_MODE_COUNTERS (2 << 28) -#define BDO_MODE_CARRIER0 (3 << 28) -#define BDO_MODE_CARRIER1 (4 << 28) -#define BDO_MODE_CARRIER2 (5 << 28) -#define BDO_MODE_CARRIER3 (6 << 28) -#define BDO_MODE_EYE (7 << 28) -#define BDO_MODE_TEST_DATA (8 << 28) - -#define BDO(mode, cnt) ((mode) | ((cnt) & 0xFFFF)) - -#define BIST_MODE(n) ((n) >> 28) -#define BIST_ERROR_COUNTER(n) ((n) & 0xffff) -#define BIST_RECEIVER_MODE 0 -#define BIST_TRANSMIT_MODE 1 +#define BDO_MODE_RECV (BIST_RECEIVER_MODE << 28) +#define BDO_MODE_TRANSMIT (BIST_TRANSMIT_MODE << 28) +#define BDO_MODE_COUNTERS (BIST_RETURNED_COUNTER << 28) +#define BDO_MODE_CARRIER0 (BIST_CARRIER_MODE_0 << 28) +#define BDO_MODE_CARRIER1 (BIST_CARRIER_MODE_1 << 28) +#define BDO_MODE_CARRIER2 (BIST_CARRIER_MODE_2 << 28) +#define BDO_MODE_CARRIER3 (BIST_CARRIER_MODE_3 << 28) +#define BDO_MODE_EYE (BIST_EYE_PATTERN << 28) +#define BDO_MODE_TEST_DATA (BIST_TEST_DATA << 28) +#define BDO_MODE_SHARED_ENTER (BIST_SHARED_MODE_ENTER << 28) +#define BDO_MODE_SHARED_EXIT (BIST_SHARED_MODE_EXIT << 28) + +#define BDO(mode, cnt) ((mode) | ((cnt)&0xFFFF)) + +#define BIST_MODE(n) ((n) >> 28) +#define BIST_ERROR_COUNTER(n) ((n)&0xffff) +#define BIST_RECEIVER_MODE 0 +#define BIST_TRANSMIT_MODE 1 #define BIST_RETURNED_COUNTER 2 -#define BIST_CARRIER_MODE_0 3 -#define BIST_CARRIER_MODE_1 4 -#define BIST_CARRIER_MODE_2 5 -#define BIST_CARRIER_MODE_3 6 -#define BIST_EYE_PATTERN 7 -#define BIST_TEST_DATA 8 +#define BIST_CARRIER_MODE_0 3 +#define BIST_CARRIER_MODE_1 4 +#define BIST_CARRIER_MODE_2 5 +#define BIST_CARRIER_MODE_3 6 +#define BIST_EYE_PATTERN 7 +#define BIST_TEST_DATA 8 +#define BIST_SHARED_MODE_ENTER 9 +#define BIST_SHARED_MODE_EXIT 10 #define SVID_DISCOVERY_MAX 16 /* Timers */ -#define PD_T_SINK_TX (18*MSEC) /* between 16ms and 20 */ -#define PD_T_CHUNKING_NOT_SUPPORTED (45*MSEC) /* between 40ms and 50ms */ -#define PD_T_HARD_RESET_COMPLETE (5*MSEC) /* between 4ms and 5ms*/ -#define PD_T_HARD_RESET_RETRY (1*MSEC) /* 1ms */ -#define PD_T_SEND_SOURCE_CAP (100*MSEC) /* between 100ms and 200ms */ -#define PD_T_SINK_WAIT_CAP (575*MSEC) /* between 310ms and 620ms */ -#define PD_T_SINK_TRANSITION (35*MSEC) /* between 20ms and 35ms */ -#define PD_T_SOURCE_ACTIVITY (45*MSEC) /* between 40ms and 50ms */ +#define PD_T_SINK_TX (18 * MSEC) /* between 16ms and 20 */ +#define PD_T_CHUNKING_NOT_SUPPORTED (45 * MSEC) /* between 40ms and 50ms */ +#define PD_T_HARD_RESET_COMPLETE (5 * MSEC) /* between 4ms and 5ms*/ +#define PD_T_HARD_RESET_RETRY (1 * MSEC) /* 1ms */ +#define PD_T_SEND_SOURCE_CAP (100 * MSEC) /* between 100ms and 200ms */ +#define PD_T_SINK_WAIT_CAP (575 * MSEC) /* between 310ms and 620ms */ +#define PD_T_SINK_TRANSITION (35 * MSEC) /* between 20ms and 35ms */ +#define PD_T_SOURCE_ACTIVITY (45 * MSEC) /* between 40ms and 50ms */ /* * Adjusting for TCPMv2 PD2 Compliance. In tests like TD.PD.SRC.E5 this * value is the duration before the Hard Reset can be sent. Setting the @@ -207,92 +202,99 @@ enum pd_rx_errors { * usb_pd unit test. */ #ifndef CONFIG_USB_PD_TCPMV2 -#define PD_T_SENDER_RESPONSE (30*MSEC) /* between 24ms and 30ms */ +#define PD_T_SENDER_RESPONSE (30 * MSEC) /* between 24ms and 30ms */ #else -#define PD_T_SENDER_RESPONSE (24*MSEC) /* between 24ms and 30ms */ +/* + * In USB Power Delivery Specification Revision 3.1, Version 1.5, + * the tSenderResponse have changed to min 26/ max 32 ms. + */ +#define PD_T_SENDER_RESPONSE (26 * MSEC) /* between 26ms and 32ms */ #endif -#define PD_T_PS_TRANSITION (500*MSEC) /* between 450ms and 550ms */ -#define PD_T_PS_SOURCE_ON (480*MSEC) /* between 390ms and 480ms */ -#define PD_T_PS_SOURCE_OFF (835*MSEC) /* between 750ms and 920ms */ -#define PD_T_PS_HARD_RESET (25*MSEC) /* between 25ms and 35ms */ -#define PD_T_ERROR_RECOVERY (240*MSEC) /* min 240ms if sourcing VConn */ -#define PD_T_CC_DEBOUNCE (100*MSEC) /* between 100ms and 200ms */ +#define PD_T_PS_TRANSITION (500 * MSEC) /* between 450ms and 550ms */ +/* + * This is adjusted for PD3.1 Compliance test TEST.PD.PROT.SRC.10. + */ +#define PD_T_PS_SOURCE_ON (435 * MSEC) /* between 390ms and 480ms */ +#define PD_T_PS_SOURCE_OFF (835 * MSEC) /* between 750ms and 920ms */ +#define PD_T_PS_HARD_RESET (25 * MSEC) /* between 25ms and 35ms */ +#define PD_T_ERROR_RECOVERY (240 * MSEC) /* min 240ms if sourcing VConn */ +#define PD_T_CC_DEBOUNCE (100 * MSEC) /* between 100ms and 200ms */ /* DRP_SNK + DRP_SRC must be between 50ms and 100ms with 30%-70% duty cycle */ -#define PD_T_DRP_SNK (40*MSEC) /* toggle time for sink DRP */ -#define PD_T_DRP_SRC (30*MSEC) /* toggle time for source DRP */ -#define PD_T_DEBOUNCE (15*MSEC) /* between 10ms and 20ms */ -#define PD_T_TRY_CC_DEBOUNCE (15*MSEC) /* between 10ms and 20ms */ -#define PD_T_SINK_ADJ (55*MSEC) /* between tPDDebounce and 60ms */ -#define PD_T_SRC_RECOVER (760*MSEC) /* between 660ms and 1000ms */ -#define PD_T_SRC_RECOVER_MAX (1000*MSEC) /* 1000ms */ -#define PD_T_SRC_TURN_ON (275*MSEC) /* 275ms */ -#define PD_T_SAFE_0V (650*MSEC) /* 650ms */ -#define PD_T_NO_RESPONSE (5500*MSEC) /* between 4.5s and 5.5s */ -#define PD_T_BIST_TRANSMIT (50*MSEC) /* 50ms (for task_wait arg) */ -#define PD_T_BIST_RECEIVE (60*MSEC) /* 60ms (time to process bist) */ -#define PD_T_BIST_CONT_MODE (55*MSEC) /* 30ms to 60ms */ -#define PD_T_VCONN_SOURCE_ON (100*MSEC) /* 100ms */ -#define PD_T_DRP_TRY (125*MSEC) /* between 75ms and 150ms */ -#define PD_T_TRY_TIMEOUT (550*MSEC) /* between 550ms and 1100ms */ -#define PD_T_TRY_WAIT (600*MSEC) /* Wait time for TryWait.SNK */ -#define PD_T_SINK_REQUEST (100*MSEC) /* 100ms before next request */ -#define PD_T_PD_DEBOUNCE (15*MSEC) /* between 10ms and 20ms */ -#define PD_T_CHUNK_SENDER_RESPONSE (25*MSEC) /* 25ms */ -#define PD_T_CHUNK_SENDER_REQUEST (25*MSEC) /* 25ms */ -#define PD_T_SWAP_SOURCE_START (25*MSEC) /* Min of 20ms */ -#define PD_T_RP_VALUE_CHANGE (20*MSEC) /* 20ms */ -#define PD_T_SRC_DISCONNECT (15*MSEC) /* 15ms */ -#define PD_T_SRC_TRANSITION (25*MSEC) /* 25ms to 35 ms */ -#define PD_T_VCONN_STABLE (50*MSEC) /* 50ms */ -#define PD_T_DISCOVER_IDENTITY (45*MSEC) /* between 40ms and 50ms */ -#define PD_T_SYSJUMP (1000*MSEC) /* 1s */ -#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 (10*MSEC) /* between 10ms and 20ms */ -#define PD_T_VCONN_DISCHARGE (240*MSEC) /* between 160ms and 240ms */ +#define PD_T_DRP_SNK (40 * MSEC) /* toggle time for sink DRP */ +#define PD_T_DRP_SRC (30 * MSEC) /* toggle time for source DRP */ +#define PD_T_DEBOUNCE (15 * MSEC) /* between 10ms and 20ms */ +#define PD_T_TRY_CC_DEBOUNCE (15 * MSEC) /* between 10ms and 20ms */ +#define PD_T_SINK_ADJ (55 * MSEC) /* between tPDDebounce and 60ms */ +#define PD_T_SRC_RECOVER (760 * MSEC) /* between 660ms and 1000ms */ +#define PD_T_SRC_RECOVER_MAX (1000 * MSEC) /* 1000ms */ +#define PD_T_SRC_TURN_ON (275 * MSEC) /* 275ms */ +#define PD_T_SAFE_0V (650 * MSEC) /* 650ms */ +#define PD_T_NO_RESPONSE (5500 * MSEC) /* between 4.5s and 5.5s */ +#define PD_T_BIST_TRANSMIT (50 * MSEC) /* 50ms (for task_wait arg) */ +#define PD_T_BIST_RECEIVE (60 * MSEC) /* 60ms (time to process bist) */ +#define PD_T_BIST_CONT_MODE (55 * MSEC) /* 30ms to 60ms */ +#define PD_T_VCONN_SOURCE_ON (100 * MSEC) /* 100ms */ +#define PD_T_DRP_TRY (125 * MSEC) /* between 75ms and 150ms */ +#define PD_T_TRY_TIMEOUT (550 * MSEC) /* between 550ms and 1100ms */ +#define PD_T_TRY_WAIT (600 * MSEC) /* Wait time for TryWait.SNK */ +#define PD_T_SINK_REQUEST (100 * MSEC) /* 100ms before next request */ +#define PD_T_PD_DEBOUNCE (15 * MSEC) /* between 10ms and 20ms */ +#define PD_T_CHUNK_SENDER_RESPONSE (25 * MSEC) /* 25ms */ +#define PD_T_CHUNK_SENDER_REQUEST (25 * MSEC) /* 25ms */ +#define PD_T_SWAP_SOURCE_START (25 * MSEC) /* Min of 20ms */ +#define PD_T_RP_VALUE_CHANGE (20 * MSEC) /* 20ms */ +#define PD_T_SRC_DISCONNECT (15 * MSEC) /* 15ms */ +#define PD_T_SRC_TRANSITION (25 * MSEC) /* 25ms to 35 ms */ +#define PD_T_VCONN_STABLE (50 * MSEC) /* 50ms */ +#define PD_T_DISCOVER_IDENTITY (45 * MSEC) /* between 40ms and 50ms */ +#define PD_T_SYSJUMP (1000 * MSEC) /* 1s */ +#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 (10 * MSEC) /* between 10ms and 20ms */ +#define PD_T_VCONN_DISCHARGE (240 * MSEC) /* between 160ms and 240ms */ /* * Non-spec timer to prevent going Unattached if Vbus drops before a partner FRS * signal comes through. This timer should be shorter than tSinkDisconnect * (40ms) to ensure we still transition out of Attached.SNK in time. */ -#define PD_T_FRS_VBUS_DEBOUNCE (5*MSEC) +#define PD_T_FRS_VBUS_DEBOUNCE (5 * MSEC) /* number of edges and time window to detect CC line is not idle */ -#define PD_RX_TRANSITION_COUNT 3 +#define PD_RX_TRANSITION_COUNT 3 #define PD_RX_TRANSITION_WINDOW 20 /* between 12us and 20us */ /* from USB Type-C Specification Table 5-1 */ -#define PD_T_AME (1*SECOND) /* timeout from UFP attach to Alt Mode Entry */ +#define PD_T_AME (1 * SECOND) /* timeout from UFP attach to Alt Mode Entry */ /* VDM Timers ( USB PD Spec Rev2.0 Table 6-30 )*/ -#define PD_T_VDM_BUSY (50*MSEC) /* at least 50ms */ -#define PD_T_VDM_E_MODE (25*MSEC) /* enter/exit the same max */ -#define PD_T_VDM_RCVR_RSP (15*MSEC) /* max of 15ms */ -#define PD_T_VDM_SNDR_RSP (30*MSEC) /* max of 30ms */ -#define PD_T_VDM_WAIT_MODE_E (100*MSEC) /* enter/exit the same max */ +#define PD_T_VDM_BUSY (50 * MSEC) /* at least 50ms */ +#define PD_T_VDM_E_MODE (25 * MSEC) /* enter/exit the same max */ +#define PD_T_VDM_RCVR_RSP (15 * MSEC) /* max of 15ms */ +#define PD_T_VDM_SNDR_RSP (30 * MSEC) /* max of 30ms */ +#define PD_T_VDM_WAIT_MODE_E (100 * MSEC) /* enter/exit the same max */ /* CTVPD Timers ( USB Type-C ECN Table 4-27 ) */ -#define PD_T_VPDDETACH (20*MSEC) /* max of 20*MSEC */ -#define PD_T_VPDCTDD (4*MSEC) /* max of 4ms */ -#define PD_T_VPDDISABLE (25*MSEC) /* min of 25ms */ +#define PD_T_VPDDETACH (20 * MSEC) /* max of 20*MSEC */ +#define PD_T_VPDCTDD (4 * MSEC) /* max of 4ms */ +#define PD_T_VPDDISABLE (25 * MSEC) /* min of 25ms */ /* Voltage thresholds in mV (Table 7-24, PD 3.0 Version 2.0 Spec) */ -#define PD_V_SAFE0V_MAX 800 -#define PD_V_SAFE5V_MIN 4750 -#define PD_V_SAFE5V_NOM 5000 -#define PD_V_SAFE5V_MAX 5500 +#define PD_V_SAFE0V_MAX 800 +#define PD_V_SAFE5V_MIN 4750 +#define PD_V_SAFE5V_NOM 5000 +#define PD_V_SAFE5V_MAX 5500 /* USB Type-C voltages in mV (Table 4-3, USB Type-C Release 2.0 Spec) */ #define PD_V_SINK_DISCONNECT_MAX 3670 /* TODO(b/149530538): Add equation for vSinkDisconnectPD */ /* Maximum voltage in mV offered by PD 3.0 Version 2.0 Spec */ -#define PD_REV3_MAX_VOLTAGE 20000 +#define PD_REV3_MAX_VOLTAGE 20000 /* Power in mW at which we will automatically charge from a DRP partner */ -#define PD_DRP_CHARGE_POWER_MIN 27000 +#define PD_DRP_CHARGE_POWER_MIN 27000 /* function table for entered mode */ struct amode_fx { @@ -325,9 +327,9 @@ struct svdm_response { * value after resetting connection information via memset. */ enum pd_discovery_state { - PD_DISC_NEEDED = 0, /* Cable or partner still needs to be probed */ - PD_DISC_COMPLETE, /* Successfully probed, valid to read VDO */ - PD_DISC_FAIL, /* Cable did not respond, or Discover* NAK */ + PD_DISC_NEEDED = 0, /* Cable or partner still needs to be probed */ + PD_DISC_COMPLETE, /* Successfully probed, valid to read VDO */ + PD_DISC_FAIL, /* Cable did not respond, or Discover* NAK */ }; /* Mode discovery state for a particular SVID with a particular transmit type */ @@ -391,8 +393,8 @@ enum hpd_event { }; /* DisplayPort flags */ -#define DP_FLAGS_DP_ON BIT(0) /* Display port mode is on */ -#define DP_FLAGS_HPD_HI_PENDING BIT(1) /* Pending HPD_HI */ +#define DP_FLAGS_DP_ON BIT(0) /* Display port mode is on */ +#define DP_FLAGS_HPD_HI_PENDING BIT(1) /* Pending HPD_HI */ /* Discover Identity ACK contents after headers */ union disc_ident_ack { @@ -408,7 +410,7 @@ union disc_ident_ack { uint32_t raw_value[PDO_MAX_OBJECTS - 1]; }; BUILD_ASSERT(sizeof(union disc_ident_ack) == - sizeof(uint32_t) * (PDO_MAX_OBJECTS - 1)); + sizeof(uint32_t) * (PDO_MAX_OBJECTS - 1)); /* Discover Identity data - ACK plus discovery state */ struct identity_data { @@ -428,10 +430,10 @@ enum pd_alternate_modes { /* Discover and possibly enter modes for all SOP* communications when enabled */ #ifdef CONFIG_USB_PD_DECODE_SOP #define DISCOVERY_TYPE_COUNT (TCPCI_MSG_SOP_PRIME + 1) -#define AMODE_TYPE_COUNT (TCPCI_MSG_SOP_PRIME_PRIME + 1) +#define AMODE_TYPE_COUNT (TCPCI_MSG_SOP_PRIME_PRIME + 1) #else #define DISCOVERY_TYPE_COUNT (TCPCI_MSG_SOP + 1) -#define AMODE_TYPE_COUNT (TCPCI_MSG_SOP + 1) +#define AMODE_TYPE_COUNT (TCPCI_MSG_SOP + 1) #endif /* Discovery results for a port partner (SOP) or cable plug (SOP') */ @@ -485,56 +487,53 @@ struct partner_active_modes { * <4:0> :: command */ #define VDO(vid, type, custom) \ - (((vid) << 16) | \ - ((type) << 15) | \ - ((custom) & 0x7FFF)) - -#define VDO_SVDM_TYPE BIT(15) -#define VDO_SVDM_VERS(x) (x << 13) -#define VDO_OPOS(x) (x << 8) -#define VDO_CMDT(x) (x << 6) -#define VDO_OPOS_MASK VDO_OPOS(0x7) -#define VDO_CMDT_MASK VDO_CMDT(0x3) - -#define CMDT_INIT 0 -#define CMDT_RSP_ACK 1 -#define CMDT_RSP_NAK 2 + (((vid) << 16) | ((type) << 15) | ((custom)&0x7FFF)) + +#define VDO_SVDM_TYPE BIT(15) +#define VDO_SVDM_VERS(x) (x << 13) +#define VDO_OPOS(x) (x << 8) +#define VDO_CMDT(x) (x << 6) +#define VDO_OPOS_MASK VDO_OPOS(0x7) +#define VDO_CMDT_MASK VDO_CMDT(0x3) + +#define CMDT_INIT 0 +#define CMDT_RSP_ACK 1 +#define CMDT_RSP_NAK 2 #define CMDT_RSP_BUSY 3 - /* reserved for SVDM ... for Google UVDM */ #define VDO_SRC_INITIATOR (0 << 5) #define VDO_SRC_RESPONDER BIT(5) -#define CMD_DISCOVER_IDENT 1 -#define CMD_DISCOVER_SVID 2 -#define CMD_DISCOVER_MODES 3 -#define CMD_ENTER_MODE 4 -#define CMD_EXIT_MODE 5 -#define CMD_ATTENTION 6 -#define CMD_DP_STATUS 16 -#define CMD_DP_CONFIG 17 +#define CMD_DISCOVER_IDENT 1 +#define CMD_DISCOVER_SVID 2 +#define CMD_DISCOVER_MODES 3 +#define CMD_ENTER_MODE 4 +#define CMD_EXIT_MODE 5 +#define CMD_ATTENTION 6 +#define CMD_DP_STATUS 16 +#define CMD_DP_CONFIG 17 -#define VDO_CMD_VENDOR(x) (((10 + (x)) & 0x1f)) +#define VDO_CMD_VENDOR(x) (((10 + (x)) & 0x1f)) /* ChromeOS specific commands */ -#define VDO_CMD_VERSION VDO_CMD_VENDOR(0) -#define VDO_CMD_SEND_INFO VDO_CMD_VENDOR(1) -#define VDO_CMD_READ_INFO VDO_CMD_VENDOR(2) -#define VDO_CMD_REBOOT VDO_CMD_VENDOR(5) -#define VDO_CMD_FLASH_ERASE VDO_CMD_VENDOR(6) -#define VDO_CMD_FLASH_WRITE VDO_CMD_VENDOR(7) -#define VDO_CMD_ERASE_SIG VDO_CMD_VENDOR(8) -#define VDO_CMD_PING_ENABLE VDO_CMD_VENDOR(10) -#define VDO_CMD_CURRENT VDO_CMD_VENDOR(11) -#define VDO_CMD_FLIP VDO_CMD_VENDOR(12) -#define VDO_CMD_GET_LOG VDO_CMD_VENDOR(13) -#define VDO_CMD_CCD_EN VDO_CMD_VENDOR(14) - -#define PD_VDO_VID(vdo) ((vdo) >> 16) +#define VDO_CMD_VERSION VDO_CMD_VENDOR(0) +#define VDO_CMD_SEND_INFO VDO_CMD_VENDOR(1) +#define VDO_CMD_READ_INFO VDO_CMD_VENDOR(2) +#define VDO_CMD_REBOOT VDO_CMD_VENDOR(5) +#define VDO_CMD_FLASH_ERASE VDO_CMD_VENDOR(6) +#define VDO_CMD_FLASH_WRITE VDO_CMD_VENDOR(7) +#define VDO_CMD_ERASE_SIG VDO_CMD_VENDOR(8) +#define VDO_CMD_PING_ENABLE VDO_CMD_VENDOR(10) +#define VDO_CMD_CURRENT VDO_CMD_VENDOR(11) +#define VDO_CMD_FLIP VDO_CMD_VENDOR(12) +#define VDO_CMD_GET_LOG VDO_CMD_VENDOR(13) +#define VDO_CMD_CCD_EN VDO_CMD_VENDOR(14) + +#define PD_VDO_VID(vdo) ((vdo) >> 16) #define PD_VDO_SVDM(vdo) (((vdo) >> 15) & 1) #define PD_VDO_OPOS(vdo) (((vdo) >> 8) & 0x7) -#define PD_VDO_CMD(vdo) ((vdo) & 0x1f) +#define PD_VDO_CMD(vdo) ((vdo)&0x1f) #define PD_VDO_CMDT(vdo) (((vdo) >> 6) & 0x3) /* @@ -556,51 +555,51 @@ struct partner_active_modes { * [6] :: Product type DFP VDO * */ -#define VDO_INDEX_HDR 0 -#define VDO_INDEX_IDH 1 -#define VDO_INDEX_CSTAT 2 -#define VDO_INDEX_CABLE 3 -#define VDO_INDEX_PRODUCT 3 -#define VDO_INDEX_AMA 4 +#define VDO_INDEX_HDR 0 +#define VDO_INDEX_IDH 1 +#define VDO_INDEX_CSTAT 2 +#define VDO_INDEX_CABLE 3 +#define VDO_INDEX_PRODUCT 3 +#define VDO_INDEX_AMA 4 #define VDO_INDEX_PTYPE_UFP1_VDO 4 -#define VDO_INDEX_PTYPE_CABLE1 4 +#define VDO_INDEX_PTYPE_CABLE1 4 #define VDO_INDEX_PTYPE_UFP2_VDO 5 -#define VDO_INDEX_PTYPE_CABLE2 5 -#define VDO_INDEX_PTYPE_DFP_VDO 6 +#define VDO_INDEX_PTYPE_CABLE2 5 +#define VDO_INDEX_PTYPE_DFP_VDO 6 #define VDO_I(name) VDO_INDEX_##name /* PD Rev 2.0 ID Header VDO */ -#define VDO_IDH(usbh, usbd, ptype, is_modal, vid) \ - ((usbh) << 31 | (usbd) << 30 | ((ptype) & 0x7) << 27 \ - | (is_modal) << 26 | ((vid) & 0xffff)) +#define VDO_IDH(usbh, usbd, ptype, is_modal, vid) \ + ((usbh) << 31 | (usbd) << 30 | ((ptype)&0x7) << 27 | \ + (is_modal) << 26 | ((vid)&0xffff)) /* PD Rev 3.0 ID Header VDO */ -#define VDO_IDH_REV30(usbh, usbd, ptype_u, is_modal, ptype_d, ctype, vid) \ - (VDO_IDH(usbh, usbd, ptype_u, is_modal, vid) \ - | ((ptype_d) & 0x7) << 23 | ((ctype) & 0x3) << 21) +#define VDO_IDH_REV30(usbh, usbd, ptype_u, is_modal, ptype_d, ctype, vid) \ + (VDO_IDH(usbh, usbd, ptype_u, is_modal, vid) | ((ptype_d)&0x7) << 23 | \ + ((ctype)&0x3) << 21) -#define PD_IDH_PTYPE(vdo) (((vdo) >> 27) & 0x7) +#define PD_IDH_PTYPE(vdo) (((vdo) >> 27) & 0x7) #define PD_IDH_IS_MODAL(vdo) (((vdo) >> 26) & 0x1) -#define PD_IDH_VID(vdo) ((vdo) & 0xffff) +#define PD_IDH_VID(vdo) ((vdo)&0xffff) -#define VDO_CSTAT(tid) ((tid) & 0xfffff) -#define PD_CSTAT_TID(vdo) ((vdo) & 0xfffff) +#define VDO_CSTAT(tid) ((tid)&0xfffff) +#define PD_CSTAT_TID(vdo) ((vdo)&0xfffff) -#define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff)) +#define VDO_PRODUCT(pid, bcd) (((pid)&0xffff) << 16 | ((bcd)&0xffff)) #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. - */ +/* PD Rev 3.1 Revision Message Data Object (RMDO) */ struct rmdo { - int reserved : 16; - int minor_ver : 4; - int major_ver : 4; - int minor_rev : 4; - int major_rev : 4; + uint32_t reserved : 16; + uint32_t minor_ver : 4; + uint32_t major_ver : 4; + uint32_t minor_rev : 4; + uint32_t major_rev : 4; }; +/* Confirm RMDO is 32 bits. */ +BUILD_ASSERT(sizeof(struct rmdo) == 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, @@ -622,9 +621,9 @@ enum pd_rev_type { }; #ifdef CONFIG_USB_PD_REV30 -#define PD_REVISION PD_REV30 +#define PD_REVISION PD_REV30 #else -#define PD_REVISION PD_REV20 +#define PD_REVISION PD_REV20 #endif #if defined(CONFIG_USB_PD_TCPMV1) @@ -649,18 +648,17 @@ struct pd_cable { /* Cable revision */ enum pd_rev_type rev; - }; /* Note: These flags are only used for TCPMv1 */ /* Check if Thunderbolt-compatible mode enabled */ -#define CABLE_FLAGS_TBT_COMPAT_ENABLE BIT(0) +#define CABLE_FLAGS_TBT_COMPAT_ENABLE BIT(0) /* Flag to limit speed to TBT Gen 2 passive cable */ #define CABLE_FLAGS_TBT_COMPAT_LIMIT_SPEED BIT(1) /* Flag for checking if device is USB4.0 capable */ -#define CABLE_FLAGS_USB4_CAPABLE BIT(2) +#define CABLE_FLAGS_USB4_CAPABLE BIT(2) /* Flag for entering ENTER_USB mode */ -#define CABLE_FLAGS_ENTER_USB_MODE BIT(3) +#define CABLE_FLAGS_ENTER_USB_MODE BIT(3) /* * SVDM Discover SVIDs request -> response @@ -670,9 +668,9 @@ struct pd_cable { * mark the end of SVIDs. If more than 12 SVIDs are supported command SHOULD be * repeated. */ -#define VDO_SVID(svid0, svid1) (((svid0) & 0xffff) << 16 | ((svid1) & 0xffff)) +#define VDO_SVID(svid0, svid1) (((svid0)&0xffff) << 16 | ((svid1)&0xffff)) #define PD_VDO_SVID_SVID0(vdo) ((vdo) >> 16) -#define PD_VDO_SVID_SVID1(vdo) ((vdo) & 0xffff) +#define PD_VDO_SVID_SVID1(vdo) ((vdo)&0xffff) /* * Google modes capabilities @@ -702,10 +700,9 @@ struct pd_cable { * Other bits are reserved. * <1:0> : signal direction ( 00b=rsv, 01b=sink, 10b=src 11b=both ) */ -#define VDO_MODE_DP(snkp, srcp, usb, gdr, sign, sdir) \ - (((snkp) & 0xff) << 16 | ((srcp) & 0xff) << 8 \ - | ((usb) & 1) << 7 | ((gdr) & 1) << 6 | ((sign) & 0xF) << 2 \ - | ((sdir) & 0x3)) +#define VDO_MODE_DP(snkp, srcp, usb, gdr, sign, sdir) \ + (((snkp)&0xff) << 16 | ((srcp)&0xff) << 8 | ((usb)&1) << 7 | \ + ((gdr)&1) << 6 | ((sign)&0xF) << 2 | ((sdir)&0x3)) #define MODE_DP_DFP_PIN_SHIFT 8 #define MODE_DP_UFP_PIN_SHIFT 16 @@ -719,11 +716,11 @@ struct pd_cable { /* Pin configs A/B/C/D/E/F */ #define MODE_DP_PIN_CAPS_MASK 0x3f -#define MODE_DP_V13 0x1 +#define MODE_DP_V13 0x1 #define MODE_DP_GEN2 0x2 -#define MODE_DP_SNK 0x1 -#define MODE_DP_SRC 0x2 +#define MODE_DP_SNK 0x1 +#define MODE_DP_SRC 0x2 #define MODE_DP_BOTH 0x3 #define MODE_DP_CABLE_SHIFT 6 @@ -740,9 +737,10 @@ struct pd_cable { * or UFP_D (if receptacle==1) * Also refer to DisplayPort Alt Mode Capabilities Clarification (4/30/2015) */ -#define PD_DP_PIN_CAPS(x) ((((x) >> MODE_DP_CABLE_SHIFT) & 0x1) \ - ? (((x) >> MODE_DP_UFP_PIN_SHIFT) & MODE_DP_PIN_CAPS_MASK) \ - : (((x) >> MODE_DP_DFP_PIN_SHIFT) & MODE_DP_PIN_CAPS_MASK)) +#define PD_DP_PIN_CAPS(x) \ + ((((x) >> MODE_DP_CABLE_SHIFT) & 0x1) ? \ + (((x) >> MODE_DP_UFP_PIN_SHIFT) & MODE_DP_PIN_CAPS_MASK) : \ + (((x) >> MODE_DP_DFP_PIN_SHIFT) & MODE_DP_PIN_CAPS_MASK)) /* * DisplayPort Status VDO @@ -758,10 +756,10 @@ struct pd_cable { * <1:0> : connect status : 00b == no (DFP|UFP)_D is connected or disabled. * 01b == DFP_D connected, 10b == UFP_D connected, 11b == both. */ -#define VDO_DP_STATUS(irq, lvl, amode, usbc, mf, en, lp, conn) \ - (((irq) & 1) << 8 | ((lvl) & 1) << 7 | ((amode) & 1) << 6 \ - | ((usbc) & 1) << 5 | ((mf) & 1) << 4 | ((en) & 1) << 3 \ - | ((lp) & 1) << 2 | ((conn & 0x3) << 0)) +#define VDO_DP_STATUS(irq, lvl, amode, usbc, mf, en, lp, conn) \ + (((irq)&1) << 8 | ((lvl)&1) << 7 | ((amode)&1) << 6 | \ + ((usbc)&1) << 5 | ((mf)&1) << 4 | ((en)&1) << 3 | ((lp)&1) << 2 | \ + ((conn & 0x3) << 0)) #define PD_VDO_DPSTS_MF_MASK BIT(4) @@ -770,9 +768,9 @@ struct pd_cable { #define PD_VDO_DPSTS_MF_PREF(x) (((x) >> 4) & 1) /* Per DisplayPort Spec v1.3 Section 3.3 */ -#define HPD_USTREAM_DEBOUNCE_LVL (2*MSEC) +#define HPD_USTREAM_DEBOUNCE_LVL (2 * MSEC) #define HPD_USTREAM_DEBOUNCE_IRQ (250) -#define HPD_DSTREAM_DEBOUNCE_IRQ (500) /* between 500-1000us */ +#define HPD_DSTREAM_DEBOUNCE_IRQ (500) /* between 500-1000us */ /* * DisplayPort Configure VDO @@ -786,7 +784,7 @@ struct pd_cable { * <1:0> : cfg : 00 == USB, 01 == DFP_D, 10 == UFP_D, 11 == reserved */ #define VDO_DP_CFG(pin, sig, cfg) \ - (((pin) & 0xff) << 8 | ((sig) & 0xf) << 2 | ((cfg) & 0x3)) + (((pin)&0xff) << 8 | ((sig)&0xf) << 2 | ((cfg)&0x3)) #define PD_DP_CFG_DPON(x) (((x & 0x3) == 1) || ((x & 0x3) == 2)) /* @@ -794,18 +792,18 @@ struct pd_cable { * for backward compatibility, if it is null, * get the former sink pin assignment we used to be in <23:16>. */ -#define PD_DP_CFG_PIN(x) ((((x) >> 8) & 0xff) ? (((x) >> 8) & 0xff) \ - : (((x) >> 16) & 0xff)) +#define PD_DP_CFG_PIN(x) \ + ((((x) >> 8) & 0xff) ? (((x) >> 8) & 0xff) : (((x) >> 16) & 0xff)) /* * ChromeOS specific PD device Hardware IDs. Used to identify unique * products and used in VDO_INFO. Note this field is 10 bits. */ -#define USB_PD_HW_DEV_ID_RESERVED 0 -#define USB_PD_HW_DEV_ID_ZINGER 1 -#define USB_PD_HW_DEV_ID_MINIMUFFIN 2 -#define USB_PD_HW_DEV_ID_DINGDONG 3 -#define USB_PD_HW_DEV_ID_HOHO 4 -#define USB_PD_HW_DEV_ID_HONEYBUNS 5 +#define USB_PD_HW_DEV_ID_RESERVED 0 +#define USB_PD_HW_DEV_ID_ZINGER 1 +#define USB_PD_HW_DEV_ID_MINIMUFFIN 2 +#define USB_PD_HW_DEV_ID_DINGDONG 3 +#define USB_PD_HW_DEV_ID_HOHO 4 +#define USB_PD_HW_DEV_ID_HONEYBUNS 5 /* * ChromeOS specific VDO_CMD_READ_INFO responds with device info including: @@ -815,86 +813,87 @@ struct pd_cable { * SW Debug Version: Software version useful for debugging (15 bits) * IS RW: True if currently in RW, False otherwise (1 bit) */ -#define VDO_INFO(id, id_minor, ver, is_rw) ((id_minor) << 26 \ - | ((id) & 0x3ff) << 16 \ - | ((ver) & 0x7fff) << 1 \ - | ((is_rw) & 1)) -#define VDO_INFO_HW_DEV_ID(x) ((x) >> 16) -#define VDO_INFO_SW_DBG_VER(x) (((x) >> 1) & 0x7fff) -#define VDO_INFO_IS_RW(x) ((x) & 1) +#define VDO_INFO(id, id_minor, ver, is_rw) \ + ((id_minor) << 26 | ((id)&0x3ff) << 16 | ((ver)&0x7fff) << 1 | \ + ((is_rw)&1)) +#define VDO_INFO_HW_DEV_ID(x) ((x) >> 16) +#define VDO_INFO_SW_DBG_VER(x) (((x) >> 1) & 0x7fff) +#define VDO_INFO_IS_RW(x) ((x)&1) #define HW_DEV_ID_MAJ(x) (x & 0x3ff) #define HW_DEV_ID_MIN(x) ((x) >> 10) /* USB-IF SIDs */ -#define USB_SID_PD 0xff00 /* power delivery */ +#define USB_SID_PD 0xff00 /* power delivery */ #define USB_SID_DISPLAYPORT 0xff01 #define USB_GOOGLE_TYPEC_URL "http://www.google.com/chrome/devices/typec" -/* USB Vendor ID assigned to Google Inc. */ +/* USB Vendor ID assigned to Google LLC */ #define USB_VID_GOOGLE 0x18d1 /* Other Vendor IDs */ -#define USB_VID_APPLE 0x05ac +#define USB_VID_APPLE 0x05ac #define USB_PID1_APPLE 0x1012 #define USB_PID2_APPLE 0x1013 -#define USB_VID_HP 0x03F0 -#define USB_PID_HP_USB_C_DOCK_G5 0x036B -#define USB_PID_HP_USB_C_A_UNIV_DOCK_G2 0x096B -#define USB_PID_HP_E24D_DOCK_MONITOR 0x0467 -#define USB_PID_HP_ELITE_E233_MONITOR 0x1747 -#define USB_PID_HP_E244D_DOCK_MONITOR 0x056D -#define USB_PID_HP_E274D_DOCK_MONITOR 0x016E +#define USB_VID_HP 0x03F0 +#define USB_PID_HP_USB_C_DOCK_G5 0x036B +#define USB_PID_HP_USB_C_A_UNIV_DOCK_G2 0x096B +#define USB_PID_HP_E24D_DOCK_MONITOR 0x0467 +#define USB_PID_HP_ELITE_E233_MONITOR 0x1747 +#define USB_PID_HP_E244D_DOCK_MONITOR 0x056D +#define USB_PID_HP_E274D_DOCK_MONITOR 0x016E -#define USB_VID_INTEL 0x8087 +#define USB_VID_INTEL 0x8087 /* Timeout for message receive in microseconds */ #define USB_PD_RX_TMOUT_US 1800 +/* Power button press length triggered by USB PD short button press */ +#define USB_PD_SHORT_BUTTON_PRESS_MS 500 + /* --- Protocol layer functions --- */ enum pd_states { - PD_STATE_DISABLED, /* C0 */ - PD_STATE_SUSPENDED, /* C1 */ - PD_STATE_SNK_DISCONNECTED, /* C2 */ - PD_STATE_SNK_DISCONNECTED_DEBOUNCE, /* C3 */ - PD_STATE_SNK_HARD_RESET_RECOVER, /* C4 */ - PD_STATE_SNK_DISCOVERY, /* C5 */ - PD_STATE_SNK_REQUESTED, /* C6 */ - PD_STATE_SNK_TRANSITION, /* C7 */ - PD_STATE_SNK_READY, /* C8 */ - PD_STATE_SNK_SWAP_INIT, /* C9 */ - PD_STATE_SNK_SWAP_SNK_DISABLE, /* C10 */ - PD_STATE_SNK_SWAP_SRC_DISABLE, /* C11 */ - PD_STATE_SNK_SWAP_STANDBY, /* C12 */ - PD_STATE_SNK_SWAP_COMPLETE, /* C13 */ - PD_STATE_SRC_DISCONNECTED, /* C14 */ - PD_STATE_SRC_DISCONNECTED_DEBOUNCE, /* C15 */ - PD_STATE_SRC_HARD_RESET_RECOVER, /* C16 */ - PD_STATE_SRC_STARTUP, /* C17 */ - PD_STATE_SRC_DISCOVERY, /* C18 */ - PD_STATE_SRC_NEGOCIATE, /* C19 */ - PD_STATE_SRC_ACCEPTED, /* C20 */ - PD_STATE_SRC_POWERED, /* C21 */ - PD_STATE_SRC_TRANSITION, /* C22 */ - PD_STATE_SRC_READY, /* C23 */ - PD_STATE_SRC_GET_SINK_CAP, /* C24 */ - PD_STATE_DR_SWAP, /* C25 */ - PD_STATE_SRC_SWAP_INIT, /* C26 */ - PD_STATE_SRC_SWAP_SNK_DISABLE, /* C27 */ - PD_STATE_SRC_SWAP_SRC_DISABLE, /* C28 */ - PD_STATE_SRC_SWAP_STANDBY, /* C29 */ - PD_STATE_VCONN_SWAP_SEND, /* C30 */ - PD_STATE_VCONN_SWAP_INIT, /* C31 */ - PD_STATE_VCONN_SWAP_READY, /* C32 */ - PD_STATE_SOFT_RESET, /* C33 */ - PD_STATE_HARD_RESET_SEND, /* C34 */ - PD_STATE_HARD_RESET_EXECUTE, /* C35 */ - PD_STATE_BIST_RX, /* C36 */ - PD_STATE_BIST_TX, /* C37 */ - PD_STATE_DRP_AUTO_TOGGLE, /* C38 */ - PD_STATE_ENTER_USB, /* C39 */ + PD_STATE_DISABLED, /* C0 */ + PD_STATE_SUSPENDED, /* C1 */ + PD_STATE_SNK_DISCONNECTED, /* C2 */ + PD_STATE_SNK_DISCONNECTED_DEBOUNCE, /* C3 */ + PD_STATE_SNK_HARD_RESET_RECOVER, /* C4 */ + PD_STATE_SNK_DISCOVERY, /* C5 */ + PD_STATE_SNK_REQUESTED, /* C6 */ + PD_STATE_SNK_TRANSITION, /* C7 */ + PD_STATE_SNK_READY, /* C8 */ + PD_STATE_SNK_SWAP_INIT, /* C9 */ + PD_STATE_SNK_SWAP_SNK_DISABLE, /* C10 */ + PD_STATE_SNK_SWAP_SRC_DISABLE, /* C11 */ + PD_STATE_SNK_SWAP_STANDBY, /* C12 */ + PD_STATE_SNK_SWAP_COMPLETE, /* C13 */ + PD_STATE_SRC_DISCONNECTED, /* C14 */ + PD_STATE_SRC_DISCONNECTED_DEBOUNCE, /* C15 */ + PD_STATE_SRC_HARD_RESET_RECOVER, /* C16 */ + PD_STATE_SRC_STARTUP, /* C17 */ + PD_STATE_SRC_DISCOVERY, /* C18 */ + PD_STATE_SRC_NEGOCIATE, /* C19 */ + PD_STATE_SRC_ACCEPTED, /* C20 */ + PD_STATE_SRC_POWERED, /* C21 */ + PD_STATE_SRC_TRANSITION, /* C22 */ + PD_STATE_SRC_READY, /* C23 */ + PD_STATE_SRC_GET_SINK_CAP, /* C24 */ + PD_STATE_DR_SWAP, /* C25 */ + PD_STATE_SRC_SWAP_INIT, /* C26 */ + PD_STATE_SRC_SWAP_SNK_DISABLE, /* C27 */ + PD_STATE_SRC_SWAP_SRC_DISABLE, /* C28 */ + PD_STATE_SRC_SWAP_STANDBY, /* C29 */ + PD_STATE_VCONN_SWAP_SEND, /* C30 */ + PD_STATE_VCONN_SWAP_INIT, /* C31 */ + PD_STATE_VCONN_SWAP_READY, /* C32 */ + PD_STATE_SOFT_RESET, /* C33 */ + PD_STATE_HARD_RESET_SEND, /* C34 */ + PD_STATE_HARD_RESET_EXECUTE, /* C35 */ + PD_STATE_BIST_RX, /* C36 */ + PD_STATE_BIST_TX, /* C37 */ + PD_STATE_DRP_AUTO_TOGGLE, /* C38 */ /* Number of states. Not an actual state. */ PD_STATE_COUNT, }; @@ -939,23 +938,23 @@ enum pd_states { #ifdef CONFIG_USB_PD_TCPMV1 /* Flags used for TCPMv1 */ -#define PD_FLAGS_PING_ENABLED BIT(0) /* SRC_READY pings enabled */ -#define PD_FLAGS_PARTNER_DR_POWER BIT(1) /* port partner is dualrole power */ -#define PD_FLAGS_PARTNER_DR_DATA BIT(2) /* port partner is dualrole data */ -#define PD_FLAGS_CHECK_IDENTITY BIT(3) /* discover identity in READY */ -#define PD_FLAGS_SNK_CAP_RECVD BIT(4) /* sink capabilities received */ -#define PD_FLAGS_TCPC_DRP_TOGGLE BIT(5) /* TCPC-controlled DRP toggling */ +#define PD_FLAGS_PING_ENABLED BIT(0) /* SRC_READY pings enabled */ +#define PD_FLAGS_PARTNER_DR_POWER BIT(1) /* port partner is dualrole power */ +#define PD_FLAGS_PARTNER_DR_DATA BIT(2) /* port partner is dualrole data */ +#define PD_FLAGS_CHECK_IDENTITY BIT(3) /* discover identity in READY */ +#define PD_FLAGS_SNK_CAP_RECVD BIT(4) /* sink capabilities received */ +#define PD_FLAGS_TCPC_DRP_TOGGLE BIT(5) /* TCPC-controlled DRP toggling */ #define PD_FLAGS_EXPLICIT_CONTRACT BIT(6) /* explicit pwr contract in place */ -#define PD_FLAGS_VBUS_NEVER_LOW BIT(7) /* VBUS input has never been low */ -#define PD_FLAGS_PREVIOUS_PD_CONN BIT(8) /* previously PD connected */ -#define PD_FLAGS_CHECK_PR_ROLE BIT(9) /* check power role in READY */ -#define PD_FLAGS_CHECK_DR_ROLE BIT(10)/* check data role in READY */ -#define PD_FLAGS_PARTNER_UNCONSTR BIT(11)/* port partner unconstrained pwr */ -#define PD_FLAGS_VCONN_ON BIT(12)/* vconn is being sourced */ -#define PD_FLAGS_TRY_SRC BIT(13)/* Try.SRC states are active */ -#define PD_FLAGS_PARTNER_USB_COMM BIT(14)/* port partner is USB comms */ -#define PD_FLAGS_UPDATE_SRC_CAPS BIT(15)/* send new source capabilities */ -#define PD_FLAGS_TS_DTS_PARTNER BIT(16)/* partner has rp/rp or rd/rd */ +#define PD_FLAGS_VBUS_NEVER_LOW BIT(7) /* VBUS input has never been low */ +#define PD_FLAGS_PREVIOUS_PD_CONN BIT(8) /* previously PD connected */ +#define PD_FLAGS_CHECK_PR_ROLE BIT(9) /* check power role in READY */ +#define PD_FLAGS_CHECK_DR_ROLE BIT(10) /* check data role in READY */ +#define PD_FLAGS_PARTNER_UNCONSTR BIT(11) /* port partner unconstrained pwr */ +#define PD_FLAGS_VCONN_ON BIT(12) /* vconn is being sourced */ +#define PD_FLAGS_TRY_SRC BIT(13) /* Try.SRC states are active */ +#define PD_FLAGS_PARTNER_USB_COMM BIT(14) /* port partner is USB comms */ +#define PD_FLAGS_UPDATE_SRC_CAPS BIT(15) /* send new source capabilities */ +#define PD_FLAGS_TS_DTS_PARTNER BIT(16) /* partner has rp/rp or rd/rd */ /* * These PD_FLAGS_LPM* flags track the software state (PD_LPM_FLAGS_REQUESTED) * and hardware state (PD_LPM_FLAGS_ENGAGED) of the TCPC low power mode. @@ -963,26 +962,26 @@ enum pd_states { * low power (when PD_LPM_FLAGS_ENGAGED is changing). */ #ifdef CONFIG_USB_PD_TCPC_LOW_POWER -#define PD_FLAGS_LPM_REQUESTED BIT(17)/* Tracks SW LPM state */ -#define PD_FLAGS_LPM_ENGAGED BIT(18)/* Tracks HW LPM state */ -#define PD_FLAGS_LPM_TRANSITION BIT(19)/* Tracks HW LPM transition */ -#define PD_FLAGS_LPM_EXIT BIT(19)/* Tracks HW LPM exit */ +#define PD_FLAGS_LPM_REQUESTED BIT(17) /* Tracks SW LPM state */ +#define PD_FLAGS_LPM_ENGAGED BIT(18) /* Tracks HW LPM state */ +#define PD_FLAGS_LPM_TRANSITION BIT(19) /* Tracks HW LPM transition */ +#define PD_FLAGS_LPM_EXIT BIT(19) /* Tracks HW LPM exit */ #endif /* * Tracks whether port negotiation may have stalled due to not starting reset * timers in SNK_DISCOVERY */ -#define PD_FLAGS_SNK_WAITING_BATT BIT(21) +#define PD_FLAGS_SNK_WAITING_BATT BIT(21) /* Check vconn state in READY */ #define PD_FLAGS_CHECK_VCONN_STATE BIT(22) #endif /* CONFIG_USB_PD_TCPMV1 */ /* Per-port battery backed RAM flags */ #define PD_BBRMFLG_EXPLICIT_CONTRACT BIT(0) -#define PD_BBRMFLG_POWER_ROLE BIT(1) -#define PD_BBRMFLG_DATA_ROLE BIT(2) -#define PD_BBRMFLG_VCONN_ROLE BIT(3) -#define PD_BBRMFLG_DBGACC_ROLE BIT(4) +#define PD_BBRMFLG_POWER_ROLE BIT(1) +#define PD_BBRMFLG_DATA_ROLE BIT(2) +#define PD_BBRMFLG_VCONN_ROLE BIT(3) +#define PD_BBRMFLG_DBGACC_ROLE BIT(4) /* Initial value for CC debounce variable */ #define PD_CC_UNSET -1 @@ -1005,31 +1004,31 @@ enum pd_dual_role_states { * NOTE: These are usually set by host commands from the AP. */ enum pd_dpm_request { - DPM_REQUEST_DR_SWAP = BIT(0), - DPM_REQUEST_PR_SWAP = BIT(1), - DPM_REQUEST_VCONN_SWAP = BIT(2), - DPM_REQUEST_GOTO_MIN = BIT(3), - DPM_REQUEST_SRC_CAP_CHANGE = BIT(4), - DPM_REQUEST_GET_SNK_CAPS = BIT(5), - DPM_REQUEST_SEND_PING = BIT(6), - DPM_REQUEST_SOURCE_CAP = BIT(7), - DPM_REQUEST_NEW_POWER_LEVEL = BIT(8), - DPM_REQUEST_VDM = BIT(9), - DPM_REQUEST_BIST_TX = BIT(10), - DPM_REQUEST_SNK_STARTUP = BIT(11), - DPM_REQUEST_SRC_STARTUP = BIT(12), - DPM_REQUEST_HARD_RESET_SEND = BIT(13), - DPM_REQUEST_SOFT_RESET_SEND = BIT(14), - DPM_REQUEST_PORT_DISCOVERY = BIT(15), - DPM_REQUEST_SEND_ALERT = BIT(16), - DPM_REQUEST_ENTER_USB = BIT(17), - DPM_REQUEST_GET_SRC_CAPS = BIT(18), - DPM_REQUEST_EXIT_MODES = BIT(19), - DPM_REQUEST_SOP_PRIME_SOFT_RESET_SEND = BIT(20), - 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), + DPM_REQUEST_DR_SWAP = BIT(0), + DPM_REQUEST_PR_SWAP = BIT(1), + DPM_REQUEST_VCONN_SWAP = BIT(2), + DPM_REQUEST_GOTO_MIN = BIT(3), + DPM_REQUEST_SRC_CAP_CHANGE = BIT(4), + DPM_REQUEST_GET_SNK_CAPS = BIT(5), + DPM_REQUEST_SEND_PING = BIT(6), + DPM_REQUEST_SOURCE_CAP = BIT(7), + DPM_REQUEST_NEW_POWER_LEVEL = BIT(8), + DPM_REQUEST_VDM = BIT(9), + DPM_REQUEST_BIST_TX = BIT(10), + DPM_REQUEST_SNK_STARTUP = BIT(11), + DPM_REQUEST_SRC_STARTUP = BIT(12), + DPM_REQUEST_HARD_RESET_SEND = BIT(13), + DPM_REQUEST_SOFT_RESET_SEND = BIT(14), + DPM_REQUEST_PORT_DISCOVERY = BIT(15), + DPM_REQUEST_SEND_ALERT = BIT(16), + DPM_REQUEST_ENTER_USB = BIT(17), + DPM_REQUEST_GET_SRC_CAPS = BIT(18), + DPM_REQUEST_EXIT_MODES = BIT(19), + DPM_REQUEST_SOP_PRIME_SOFT_RESET_SEND = BIT(20), + 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), }; /** @@ -1140,9 +1139,9 @@ bool pd_get_partner_unconstr_power(int port); */ void pd_resume_check_pr_swap_needed(int port); -/* Control Message type */ +/* Control Message type - USB-PD Spec Rev 3.0, Ver 1.1, Table 6-5 */ enum pd_ctrl_msg_type { - PD_CTRL_INVALID = 0, /* 0 Reserved - DO NOT PUT IN MESSAGES */ + PD_CTRL_INVALID = 0, /* 0 Reserved - DO NOT PUT IN MESSAGES */ PD_CTRL_GOOD_CRC = 1, PD_CTRL_GOTO_MIN = 2, PD_CTRL_ACCEPT = 3, @@ -1173,45 +1172,68 @@ enum pd_ctrl_msg_type { }; /* Control message types which always mark the start of an AMS */ -#define PD_CTRL_AMS_START_MASK ((1 << PD_CTRL_GOTO_MIN) | \ - (1 << PD_CTRL_GET_SOURCE_CAP) | \ - (1 << PD_CTRL_GET_SINK_CAP) | \ - (1 << PD_CTRL_DR_SWAP) | \ - (1 << PD_CTRL_PR_SWAP) | \ - (1 << PD_CTRL_VCONN_SWAP) | \ - (1 << PD_CTRL_GET_SOURCE_CAP_EXT) | \ - (1 << PD_CTRL_GET_STATUS) | \ - (1 << PD_CTRL_FR_SWAP) | \ - (1 << PD_CTRL_GET_PPS_STATUS) | \ - (1 << PD_CTRL_GET_COUNTRY_CODES)) - +#define PD_CTRL_AMS_START_MASK \ + ((1 << PD_CTRL_GOTO_MIN) | (1 << PD_CTRL_GET_SOURCE_CAP) | \ + (1 << PD_CTRL_GET_SINK_CAP) | (1 << PD_CTRL_DR_SWAP) | \ + (1 << PD_CTRL_PR_SWAP) | (1 << PD_CTRL_VCONN_SWAP) | \ + (1 << PD_CTRL_GET_SOURCE_CAP_EXT) | (1 << PD_CTRL_GET_STATUS) | \ + (1 << PD_CTRL_FR_SWAP) | (1 << PD_CTRL_GET_PPS_STATUS) | \ + (1 << PD_CTRL_GET_COUNTRY_CODES)) /* Battery Status Data Object fields for REV 3.0 */ #define BSDO_CAP_UNKNOWN 0xffff -#define BSDO_CAP(n) (((n) & 0xffff) << 16) -#define BSDO_INVALID BIT(8) -#define BSDO_PRESENT BIT(9) +#define BSDO_CAP(n) (((n)&0xffff) << 16) +#define BSDO_INVALID BIT(8) +#define BSDO_PRESENT BIT(9) #define BSDO_DISCHARGING BIT(10) -#define BSDO_IDLE BIT(11) +#define BSDO_IDLE BIT(11) /* Battery Capability offsets for 16-bit array indexes */ -#define BCDB_VID 0 -#define BCDB_PID 1 -#define BCDB_DESIGN_CAP 2 -#define BCDB_FULL_CAP 3 -#define BCDB_BATT_TYPE 4 +#define BCDB_VID 0 +#define BCDB_PID 1 +#define BCDB_DESIGN_CAP 2 +#define BCDB_FULL_CAP 3 +#define BCDB_BATT_TYPE 4 + +/* Battery Capability Data Block (BCDB) in struct format. + * See USB-PD spec Rev 3.1, V 1.3 section 6.5.5 + */ +struct pd_bcdb { + /* Vendor ID*/ + uint16_t vid; + /* Product ID */ + uint16_t pid; + /* Battery’s design capacity in 0.1 Wh (0 = no batt, 0xFFFF = unknown) + */ + uint16_t design_cap; + /* Battery’s last full charge capacity in 0.1 Wh (0 = no batt, + * 0xFFFF = unknown) + */ + uint16_t last_full_charge_cap; + /* Bit 0 indicates if the request was invalid. Other bits reserved. */ + uint8_t battery_type; +} __packed; + +/* Maximum number of different batteries that can be queried through Get Battery + * Status and Get Battery Capability requests. Indices 0 to 3 are fixed + * batteries and indices 4 to 7 are hot-swappable batteries. Not all are + * necessarily present. + * + * See USB-PD spec Rev 3.1, V 1.3 sections 6.5.4 - .5 + */ +#define PD_BATT_MAX (8) /* * Get Battery Cap Message fields for REV 3.0 (assumes extended header is * present in first two bytes) */ -#define BATT_CAP_REF(n) (((n) >> 16) & 0xff) +#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_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); @@ -1245,7 +1267,7 @@ enum pd_sdb_power_indicator { PD_SDB_POWER_INDICATOR_BREATHING = (3 << 3), }; -/* Extended message type for REV 3.0 */ +/* Extended message type for REV 3.0 - USB-PD Spec 3.0, Ver 1.1, Table 6-42 */ enum pd_ext_msg_type { /* 0 Reserved */ PD_EXT_SOURCE_CAP = 1, @@ -1273,16 +1295,17 @@ enum pd_ext_msg_type { }; /* Alert Data Object fields for REV 3.1 */ -#define ADO_EXTENDED_ALERT_EVENT (BIT(24) << 7) +#define ADO_EXTENDED_ALERT_EVENT (BIT(24) << 7) +#define ADO_EXTENDED_ALERT_EVENT_TYPE 0xf /* Alert Data Object fields for REV 3.0 */ -#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) +#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 { @@ -1292,7 +1315,7 @@ enum ado_extended_alert_event_type { ADO_CONTROLLER_INITIATED_WAKE = 0x4, }; -/* Data message type */ +/* Data message type - USB-PD Spec Rev 3.0, Ver 1.1, Table 6-6 */ enum pd_data_msg_type { /* 0 Reserved */ PD_DATA_SOURCE_CAP = 1, @@ -1314,15 +1337,11 @@ enum pd_data_msg_type { /* 16-31 Reserved */ }; - /* * Cable plug. See 6.2.1.1.7 Cable Plug. Only applies to SOP' and SOP". * Replaced by pd_power_role for SOP packets. */ -enum pd_cable_plug { - PD_PLUG_FROM_DFP_UFP = 0, - PD_PLUG_FROM_CABLE = 1 -}; +enum pd_cable_plug { PD_PLUG_FROM_DFP_UFP = 0, PD_PLUG_FROM_CABLE = 1 }; enum cable_outlet { CABLE_PLUG = 0, @@ -1331,11 +1350,11 @@ enum cable_outlet { /* Vconn role */ #define PD_ROLE_VCONN_OFF 0 -#define PD_ROLE_VCONN_ON 1 +#define PD_ROLE_VCONN_ON 1 /* chunk is a request or response in REV 3.0 */ #define CHUNK_RESPONSE 0 -#define CHUNK_REQUEST 1 +#define CHUNK_REQUEST 1 /* collision avoidance Rp values in REV 3.0 */ #define SINK_TX_OK TYPEC_RP_3A0 @@ -1352,36 +1371,37 @@ enum cable_outlet { /* Port default state at startup */ #ifdef CONFIG_USB_PD_DUAL_ROLE -#define PD_DEFAULT_STATE(port) ((PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE) ? \ - PD_STATE_SRC_DISCONNECTED : \ - PD_STATE_SNK_DISCONNECTED) +#define PD_DEFAULT_STATE(port) \ + ((PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE) ? \ + PD_STATE_SRC_DISCONNECTED : \ + PD_STATE_SNK_DISCONNECTED) #else #define PD_DEFAULT_STATE(port) PD_STATE_SRC_DISCONNECTED #endif -/* build extended message header */ -/* All extended messages are chunked, so set bit 15 */ +/* Build extended message header with chunking */ #define PD_EXT_HEADER(cnum, rchk, dsize) \ - (BIT(15) | ((cnum) << 11) | \ - ((rchk) << 10) | (dsize)) + (BIT(15) | ((cnum) << 11) | ((rchk) << 10) | (dsize)) + +/* Build extended message header without chunking */ +#define PD_EXT_HEADER_UNCHUNKED(dsize) (dsize) /* build message header */ -#define PD_HEADER(type, prole, drole, id, cnt, rev, ext) \ - ((type) | ((rev) << 6) | \ - ((drole) << 5) | ((prole) << 8) | \ - ((id) << 9) | ((cnt) << 12) | ((ext) << 15)) +#define PD_HEADER(type, prole, drole, id, cnt, rev, ext) \ + ((type) | ((rev) << 6) | ((drole) << 5) | ((prole) << 8) | \ + ((id) << 9) | ((cnt) << 12) | ((ext) << 15)) /* Used for processing pd header */ -#define PD_HEADER_EXT(header) (((header) >> 15) & 1) -#define PD_HEADER_CNT(header) (((header) >> 12) & 7) +#define PD_HEADER_EXT(header) (((header) >> 15) & 1) +#define PD_HEADER_CNT(header) (((header) >> 12) & 7) /* * NOTE: bit 4 was added in PD 3.0, and should be reserved and set to 0 in PD * 2.0 messages */ -#define PD_HEADER_TYPE(header) ((header) & 0x1F) -#define PD_HEADER_ID(header) (((header) >> 9) & 7) +#define PD_HEADER_TYPE(header) ((header)&0x1F) +#define PD_HEADER_ID(header) (((header) >> 9) & 7) #define PD_HEADER_PROLE(header) (((header) >> 8) & 1) -#define PD_HEADER_REV(header) (((header) >> 6) & 3) +#define PD_HEADER_REV(header) (((header) >> 6) & 3) #define PD_HEADER_DROLE(header) (((header) >> 5) & 1) /* @@ -1390,47 +1410,47 @@ enum cable_outlet { * NOTE: This is not part of the PD spec. */ #define PD_HEADER_GET_SOP(header) (((header) >> 28) & 0xf) -#define PD_HEADER_SOP(sop) (((sop) & 0xf) << 28) +#define PD_HEADER_SOP(sop) (((sop)&0xf) << 28) /* Used for processing pd extended header */ -#define PD_EXT_HEADER_CHUNKED(header) (((header) >> 15) & 1) +#define PD_EXT_HEADER_CHUNKED(header) (((header) >> 15) & 1) #define PD_EXT_HEADER_CHUNK_NUM(header) (((header) >> 11) & 0xf) #define PD_EXT_HEADER_REQ_CHUNK(header) (((header) >> 10) & 1) -#define PD_EXT_HEADER_DATA_SIZE(header) ((header) & 0x1ff) +#define PD_EXT_HEADER_DATA_SIZE(header) ((header)&0x1ff) /* Used to get extended header from the first 32-bit word of the message */ #define GET_EXT_HEADER(msg) (msg & 0xffff) /* Extended message constants (PD 3.0, Rev. 2.0, section 6.13) */ -#define PD_MAX_EXTENDED_MSG_LEN 260 -#define PD_MAX_EXTENDED_MSG_CHUNK_LEN 26 +#define PD_MAX_EXTENDED_MSG_LEN 260 +#define PD_MAX_EXTENDED_MSG_CHUNK_LEN 26 /* K-codes for special symbols */ #define PD_SYNC1 0x18 #define PD_SYNC2 0x11 #define PD_SYNC3 0x06 -#define PD_RST1 0x07 -#define PD_RST2 0x19 -#define PD_EOP 0x0D +#define PD_RST1 0x07 +#define PD_RST2 0x19 +#define PD_EOP 0x0D /* Minimum PD supply current (mA) */ -#define PD_MIN_MA 500 +#define PD_MIN_MA 500 /* Minimum PD voltage (mV) */ -#define PD_MIN_MV 5000 +#define PD_MIN_MV 5000 /* No connect voltage threshold for sources based on Rp */ -#define PD_SRC_DEF_VNC_MV 1600 -#define PD_SRC_1_5_VNC_MV 1600 -#define PD_SRC_3_0_VNC_MV 2600 +#define PD_SRC_DEF_VNC_MV 1600 +#define PD_SRC_1_5_VNC_MV 1600 +#define PD_SRC_3_0_VNC_MV 2600 /* Rd voltage threshold for sources based on Rp */ -#define PD_SRC_DEF_RD_THRESH_MV 200 -#define PD_SRC_1_5_RD_THRESH_MV 400 -#define PD_SRC_3_0_RD_THRESH_MV 800 +#define PD_SRC_DEF_RD_THRESH_MV 200 +#define PD_SRC_1_5_RD_THRESH_MV 400 +#define PD_SRC_3_0_RD_THRESH_MV 800 /* Voltage threshold to detect connection when presenting Rd */ -#define PD_SNK_VA_MV 250 +#define PD_SNK_VA_MV 250 /* --- Policy layer functions --- */ @@ -1523,7 +1543,7 @@ void pd_process_source_cap(int port, int cnt, uint32_t *src_caps); * @param ma reduce current to minimum value. * @param mv reduce voltage to minimum value. */ -void pd_snk_give_back(int port, uint32_t * const ma, uint32_t * const mv); +void pd_snk_give_back(int port, uint32_t *const ma, uint32_t *const mv); /** * Put a cap on the max voltage requested as a sink. @@ -1631,7 +1651,6 @@ void pd_set_external_voltage_limit(int port, int mv); void pd_set_input_current_limit(int port, uint32_t max_ma, uint32_t supply_voltage); - /** * Update the power contract if it exists. * @@ -1703,8 +1722,7 @@ __override_proto bool pd_can_charge_from_device(int port, const int pdo_cnt, * @param data_role current data role * @return True if data swap is allowed, False otherwise */ -__override_proto int pd_check_data_swap(int port, - enum pd_data_role data_role); +__override_proto int pd_check_data_swap(int port, enum pd_data_role data_role); /** * Check if vconn swap is allowed. @@ -1722,9 +1740,8 @@ int pd_check_vconn_swap(int port); * @param pr_role Our power role * @param flags PD flags */ -__override_proto void pd_check_pr_role(int port, - enum pd_power_role pr_role, - int flags); +__override_proto void pd_check_pr_role(int port, enum pd_power_role pr_role, + int flags); /** * Check current data role for potential data swap @@ -1733,9 +1750,8 @@ __override_proto void pd_check_pr_role(int port, * @param dr_role Our data role * @param flags PD flags */ -__override_proto void pd_check_dr_role(int port, - enum pd_data_role dr_role, - int flags); +__override_proto void pd_check_dr_role(int port, enum pd_data_role dr_role, + int flags); /** * Check for a potential Vconn swap if the port isn't @@ -1753,7 +1769,7 @@ __override_proto void pd_try_execute_vconn_swap(int port, int flags); * @param data_role new data role */ __override_proto void pd_execute_data_swap(int port, - enum pd_data_role data_role); + enum pd_data_role data_role); /** * Get desired dual role state when chipset is suspended. @@ -1802,7 +1818,7 @@ __override_proto int pd_custom_vdm(int port, int cnt, uint32_t *payload, * @return if >0, number of VDOs to send back. */ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload, - uint32_t head, enum tcpci_msg_type *rtype); + uint32_t head, enum tcpci_msg_type *rtype); /** * Handle Custom VDMs for flashing. @@ -1823,8 +1839,8 @@ int pd_custom_flash_vdm(int port, int cnt, uint32_t *payload); * @param opos object position of mode to exit. * @return vdm for UFP to be sent to enter mode or zero if not. */ -uint32_t pd_dfp_enter_mode(int port, enum tcpci_msg_type type, - uint16_t svid, int opos); +uint32_t pd_dfp_enter_mode(int port, enum tcpci_msg_type type, uint16_t svid, + int opos); /** * Save the Enter mode command data received from the port partner for setting @@ -1862,7 +1878,7 @@ int pd_dfp_dp_get_pin_mode(int port, uint32_t status); * @return 1 if UFP should be sent exit mode VDM. */ int pd_dfp_exit_mode(int port, enum tcpci_msg_type type, uint16_t svid, - int opos); + int opos); /** * Consume the SVDM attention data @@ -1881,7 +1897,7 @@ void dfp_consume_attention(int port, uint32_t *payload); * @param payload payload data. */ void dfp_consume_identity(int port, enum tcpci_msg_type type, int cnt, - uint32_t *payload); + uint32_t *payload); /** * Consume the SVIDs @@ -1892,7 +1908,7 @@ void dfp_consume_identity(int port, enum tcpci_msg_type type, int cnt, * @param payload payload data. */ void dfp_consume_svids(int port, enum tcpci_msg_type type, int cnt, - uint32_t *payload); + uint32_t *payload); /** * Consume the alternate modes @@ -1903,7 +1919,7 @@ void dfp_consume_svids(int port, enum tcpci_msg_type type, int cnt, * @param payload payload data. */ void dfp_consume_modes(int port, enum tcpci_msg_type type, int cnt, - uint32_t *payload); + uint32_t *payload); /** * Returns true if connected VPD supports Charge Through @@ -1914,68 +1930,6 @@ void dfp_consume_modes(int port, enum tcpci_msg_type type, int cnt, bool is_vpd_ct_supported(int port); /** - * Returns CTVPD ground impedance - * - * @param port USB-C port number - * @return Ground impedance through the VPD in 1 mOhm increments, else - * 0 if Charge Through isn't supported - */ -uint8_t get_vpd_ct_gnd_impedance(int port); - -/** - * Returns CTVPD VBUS impedance - * - * @param port USB-C port number - * @return VBUS impedance through the VPD in 2 mOhm increments, else - * 0 if Charge Through isn't supported - */ -uint8_t get_vpd_ct_vbus_impedance(int port); - -/** - * Returns CTVPD Current support - * - * @param port USB-C port number - * @return 0 - 3A capable or - * 1 - 5A capable - */ -uint8_t get_vpd_ct_current_support(int port); - -/** - * Returns CTVPD Maximum VBUS Voltage - * - * @param port USB-C port number - * @return 0 - 20V - * 1 - 30V - * 2 - 40V - * 3 - 50V - */ -uint8_t get_vpd_ct_max_vbus_voltage(int port); - -/** - * Returns VPD VDO Version - * - * @param port USB-C port number - * @return 0 for Version 1.0 - */ -uint8_t get_vpd_ct_vdo_version(int port); - -/** - * Returns VPD Firmware Version - * - * @param port USB-C port number - * @return Firmware version assigned by the VID owner - */ -uint8_t get_vpd_ct_firmware_verion(int port); - -/** - * Returns HW Firmware Version - * - * @param port USB-C port number - * @return HW version assigned by the VID owner - */ -uint8_t get_vpd_ct_hw_version(int port); - -/** * Initialize alternate mode discovery info for DFP * * @param port USB-C port number @@ -2007,7 +1961,7 @@ void pd_set_identity_discovery(int port, enum tcpci_msg_type type, * @return Current discovery state (failed or complete) */ enum pd_discovery_state pd_get_identity_discovery(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /** * Set SVID discovery state for this type and port. @@ -2017,7 +1971,7 @@ enum pd_discovery_state pd_get_identity_discovery(int port, * @param disc Discovery state to set (failed or complete) */ void pd_set_svids_discovery(int port, enum tcpci_msg_type type, - enum pd_discovery_state disc); + enum pd_discovery_state disc); /** * Get SVID discovery state for this type and port @@ -2027,7 +1981,7 @@ void pd_set_svids_discovery(int port, enum tcpci_msg_type type, * @return Current discovery state (failed or complete) */ enum pd_discovery_state pd_get_svids_discovery(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /** * Set Modes discovery state for this port, SOP* type, and SVID. @@ -2037,8 +1991,8 @@ enum pd_discovery_state pd_get_svids_discovery(int port, * @param svid SVID to set mode discovery state for * @param disc Discovery state to set (failed or complete) */ -void pd_set_modes_discovery(int port, enum tcpci_msg_type type, - uint16_t svid, enum pd_discovery_state disc); +void pd_set_modes_discovery(int port, enum tcpci_msg_type type, uint16_t svid, + enum pd_discovery_state disc); /** * Get Modes discovery state for this port and SOP* type. Modes discover is @@ -2054,7 +2008,7 @@ void pd_set_modes_discovery(int port, enum tcpci_msg_type type, * PD_DISC_FAIL) */ enum pd_discovery_state pd_get_modes_discovery(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /** * Returns the mode vdo count of the specified SVID and sets @@ -2068,8 +2022,8 @@ enum pd_discovery_state pd_get_modes_discovery(int port, * @return Mode VDO cnt of specified SVID if is discovered, * 0 otherwise */ -int pd_get_mode_vdo_for_svid(int port, enum tcpci_msg_type type, - uint16_t svid, uint32_t *vdo_out); +int pd_get_mode_vdo_for_svid(int port, enum tcpci_msg_type type, uint16_t svid, + uint32_t *vdo_out); /** * Get a pointer to mode data for the next SVID that needs to be discovered. @@ -2085,7 +2039,7 @@ int pd_get_mode_vdo_for_svid(int port, enum tcpci_msg_type type, * NULL, otherwise */ const struct svid_mode_data *pd_get_next_mode(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /** * Return a pointer to the discover identity response structure for this SOP* @@ -2096,7 +2050,7 @@ const struct svid_mode_data *pd_get_next_mode(int port, * @return pointer to response structure, which the caller may not alter */ const union disc_ident_ack *pd_get_identity_response(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /** * Return the VID of the USB PD accessory connected to a specified port @@ -2152,7 +2106,7 @@ uint16_t pd_get_svid(int port, uint16_t svid_idx, enum tcpci_msg_type type); * @return Pointer to modes of VDO */ const uint32_t *pd_get_mode_vdo(int port, uint16_t svid_idx, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /* * Looks for a discovered mode VDO for the specified SVID. @@ -2163,7 +2117,7 @@ const uint32_t *pd_get_mode_vdo(int port, uint16_t svid_idx, * @return Whether a mode was discovered for the SVID */ bool pd_is_mode_discovered_for_svid(int port, enum tcpci_msg_type type, - uint16_t svid); + uint16_t svid); /** * Return the alternate mode entry and exit data @@ -2173,8 +2127,8 @@ bool pd_is_mode_discovered_for_svid(int port, enum tcpci_msg_type type, * @param svid SVID * @return pointer to SVDM mode data */ -struct svdm_amode_data *pd_get_amode_data(int port, - enum tcpci_msg_type type, uint16_t svid); +struct svdm_amode_data *pd_get_amode_data(int port, enum tcpci_msg_type type, + uint16_t svid); /* * Returns cable revision @@ -2242,8 +2196,8 @@ bool pd_discovery_access_validate(int port, enum tcpci_msg_type type); * @param type Transmit type (SOP, SOP') for discovered information * @return pointer to PD alternate mode discovery results */ -struct pd_discovery *pd_get_am_discovery_and_notify_access(int port, - enum tcpci_msg_type type); +struct pd_discovery * +pd_get_am_discovery_and_notify_access(int port, enum tcpci_msg_type type); /* * Returns the constant pointer to PD alternate mode discovery results @@ -2254,7 +2208,7 @@ struct pd_discovery *pd_get_am_discovery_and_notify_access(int port, * @return pointer to PD alternate mode discovery results */ const struct pd_discovery *pd_get_am_discovery(int port, - enum tcpci_msg_type type); + enum tcpci_msg_type type); /* * Returns the pointer to PD active alternate modes. @@ -2264,8 +2218,8 @@ const struct pd_discovery *pd_get_am_discovery(int port, * @param type Transmit type (SOP, SOP', SOP'') for active modes * @return Pointer to PD active alternate modes. */ -struct partner_active_modes *pd_get_partner_active_modes(int port, - enum tcpci_msg_type type); +struct partner_active_modes * +pd_get_partner_active_modes(int port, enum tcpci_msg_type type); /* * Sets the current object position for DP alt-mode @@ -2440,8 +2394,7 @@ enum tbt_compat_cable_speed get_tbt_cable_speed(int port); * @param payload payload data * @return Number of object filled */ -int enter_tbt_compat_mode(int port, enum tcpci_msg_type sop, - uint32_t *payload); +int enter_tbt_compat_mode(int port, enum tcpci_msg_type sop, uint32_t *payload); /** * Return maximum speed supported by the port to enter into Thunderbolt mode @@ -2476,8 +2429,7 @@ __override_proto enum tbt_compat_cable_speed board_get_max_tbt_speed(int port); * EC_RES_UNAVAILABLE if board does not support this feature */ __override_proto enum ec_status - board_set_tbt_ufp_reply(int port, - enum typec_tbt_ufp_reply reply); +board_set_tbt_ufp_reply(int port, enum typec_tbt_ufp_reply reply); /** * Return true if the board's port supports TBT or USB4 @@ -2584,8 +2536,8 @@ void pd_dpm_request(int port, enum pd_dpm_request req); * must be 1 - 7 inclusive. * @return True if the setup was successful */ -bool pd_setup_vdm_request(int port, enum tcpci_msg_type tx_type, - uint32_t *vdm, uint32_t vdo_cnt); +bool pd_setup_vdm_request(int port, enum tcpci_msg_type tx_type, uint32_t *vdm, + uint32_t vdo_cnt); /* Power Data Objects for the source and the sink */ __override_proto extern const uint32_t pd_src_pdo[]; @@ -2596,6 +2548,15 @@ extern const uint32_t pd_snk_pdo[]; extern const int pd_snk_pdo_cnt; /** + * TEST ONLY: Set PD_CONTROL command to enabled on this port + * + * @param port USB-C port number + */ +#ifdef TEST_BUILD +void pd_control_port_enable(int port); +#endif + +/** * Request that a host event be sent to notify the AP of a PD power event. * * Note: per-port events should be retrieved through pd_get_events(), but this @@ -2607,7 +2568,9 @@ extern const int pd_snk_pdo_cnt; #if defined(HAS_TASK_HOSTCMD) && !defined(TEST_BUILD) void pd_send_host_event(int mask); #else -static inline void pd_send_host_event(int mask) { } +static inline void pd_send_host_event(int mask) +{ +} #endif /** @@ -2682,7 +2645,6 @@ int pd_write_preamble(int port); */ int pd_write_sym(int port, int bit_off, uint32_t val10); - /** * Ensure that we have an edge after EOP and we end up at level 0, * also fill the last byte. @@ -2943,7 +2905,7 @@ void pd_clear_events(int port, uint32_t clear_mask); * @return EC_RES_SUCCESS if a VDM message is scheduled. */ enum ec_status pd_request_vdm_attention(int port, const uint32_t *data, - int vdo_count); + int vdo_count); /* * Requests that the port enter the specified mode. A successful result just @@ -3058,7 +3020,7 @@ bool pd_waiting_on_partner_src_caps(int port); * * @param port USB-C port number */ -const uint32_t * const pd_get_src_caps(int port); +const uint32_t *const pd_get_src_caps(int port); /** * Returns the number of source caps @@ -3082,7 +3044,7 @@ void pd_set_src_caps(int port, int cnt, uint32_t *src_caps); * * @param port USB-C port number */ -const uint32_t * const pd_get_snk_caps(int port); +const uint32_t *const pd_get_snk_caps(int port); /** * Returns the number of sink caps @@ -3231,8 +3193,8 @@ __override_proto void pd_notify_dp_alt_mode_entry(int port); * Determines the PD state of the port partner according to Table 4-10 in USB PD * specification. */ -enum pd_cc_states pd_get_cc_state( - enum tcpc_cc_voltage_status cc1, enum tcpc_cc_voltage_status cc2); +enum pd_cc_states pd_get_cc_state(enum tcpc_cc_voltage_status cc1, + enum tcpc_cc_voltage_status cc2); /* * Optional, get the board-specific SRC DTS polarity. @@ -3255,8 +3217,8 @@ __override_proto uint8_t board_get_src_dts_polarity(int port); * @param data type-defined information * @param payload pointer to the optional payload (0..16 bytes) */ -void pd_log_event(uint8_t type, uint8_t size_port, - uint16_t data, void *payload); +void pd_log_event(uint8_t type, uint8_t size_port, uint16_t data, + void *payload); /** * Retrieve one logged event and prepare a VDM with it. @@ -3267,10 +3229,15 @@ void pd_log_event(uint8_t type, uint8_t size_port, * @return number of 32-bit words in the VDM payload. */ int pd_vdm_get_log_entry(uint32_t *payload); -#else /* CONFIG_USB_PD_LOGGING */ -static inline void pd_log_event(uint8_t type, uint8_t size_port, - uint16_t data, void *payload) {} -static inline int pd_vdm_get_log_entry(uint32_t *payload) { return 0; } +#else /* CONFIG_USB_PD_LOGGING */ +static inline void pd_log_event(uint8_t type, uint8_t size_port, uint16_t data, + void *payload) +{ +} +static inline int pd_vdm_get_log_entry(uint32_t *payload) +{ + return 0; +} #endif /* CONFIG_USB_PD_LOGGING */ /** @@ -3527,9 +3494,9 @@ int typec_update_cc(int port); * @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); +__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 */ +#endif /* __CROS_EC_USB_PD_H */ |