summaryrefslogtreecommitdiff
path: root/include/usb_pd.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/usb_pd.h')
-rw-r--r--include/usb_pd.h1101
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 */