summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/config.h17
-rw-r--r--include/usb_pd.h144
2 files changed, 149 insertions, 12 deletions
diff --git a/include/config.h b/include/config.h
index dd30f529d1..8d29a7c95a 100644
--- a/include/config.h
+++ b/include/config.h
@@ -3235,6 +3235,9 @@
/* Support for USB PD alternate mode of Downward Facing Port */
#undef CONFIG_USB_PD_ALT_MODE_DFP
+/* HPD is sent to the GPU from the EC via a GPIO */
+#undef CONFIG_USB_PD_DP_HPD_GPIO
+
/* Check if max voltage request is allowed before each request */
#undef CONFIG_USB_PD_CHECK_MAX_REQUEST_ALLOWED
@@ -3242,6 +3245,20 @@
#undef CONFIG_USB_PD_COMM_DISABLED
/*
+ * Define this if a board needs custom SNK and/or SRC PDOs.
+ *
+ * The default SRC PDO is a fixed 5V/1.5A with PDO_FIXED_FLAGS indicating
+ * Dual-Role power, USB Communication Capable, and Dual-Role data.
+ *
+ * The default SNK PDOs are:
+ * - Fixed 5V/500mA with the same PDO_FIXED_FLAGS
+ * - Variable (non-battery) min 4.75V, max PD_MAX_VOLTAGE_MV, operational
+ * current 3A
+ * - Battery min 4.75V, max PD_MAX_VOLTAGE_MV, operational power 15W
+ */
+#undef CONFIG_USB_PD_CUSTOM_PDO
+
+/*
* Do not enable PD communication in RO as a security measure.
* We don't want to allow communication to outside world until
* we jump to RW. This can by overridden with the removal of
diff --git a/include/usb_pd.h b/include/usb_pd.h
index ec8025f789..a419c30ceb 100644
--- a/include/usb_pd.h
+++ b/include/usb_pd.h
@@ -1135,7 +1135,7 @@ unsigned pd_get_max_voltage(void);
* @mv input voltage
* @return 1 if voltage supported, 0 if not
*/
-int pd_is_valid_input_voltage(int mv);
+__override_proto int pd_is_valid_input_voltage(int mv);
/**
* Request a new operating voltage.
@@ -1160,7 +1160,7 @@ int pd_board_check_request(uint32_t rdo, int pdo_cnt);
*
* param idx index of the new voltage in the source PDO table.
*/
-void pd_transition_voltage(int idx);
+__override_proto void pd_transition_voltage(int idx);
/**
* Go back to the default/safe state of the power supply
@@ -1233,8 +1233,9 @@ typedef uint32_t typec_current_t;
* @param max_ma Maximum current limit
* @param supply_voltage Voltage at which current limit is applied
*/
-void typec_set_input_current_limit(int port, typec_current_t max_ma,
- uint32_t supply_voltage);
+__override_proto void typec_set_input_current_limit(int port,
+ typec_current_t max_ma,
+ uint32_t supply_voltage);
/**
* Set the type-C current limit when sourcing current..
@@ -1249,7 +1250,7 @@ void typec_set_source_current_limit(int port, enum tcpc_rp_value rp);
*
* @return EC_SUCCESS if the board is good, <0 else.
*/
-int pd_board_checks(void);
+__override_proto int pd_board_checks(void);
/**
* Return if VBUS is detected on type-C port
@@ -1272,7 +1273,7 @@ void pd_vbus_low(int port);
* @param port USB-C port number
* @return True if power swap is allowed, False otherwise
*/
-int pd_check_power_swap(int port);
+__override_proto int pd_check_power_swap(int port);
/**
* Check if data swap is allowed.
@@ -1281,7 +1282,7 @@ int pd_check_power_swap(int port);
* @param data_role current data role
* @return True if data swap is allowed, False otherwise
*/
-int pd_check_data_swap(int port, int data_role);
+__override_proto int pd_check_data_swap(int port, int data_role);
/**
* Check if vconn swap is allowed.
@@ -1299,7 +1300,7 @@ int pd_check_vconn_swap(int port);
* @param pr_role Our power role
* @param flags PD flags
*/
-void pd_check_pr_role(int port, int pr_role, int flags);
+__override_proto void pd_check_pr_role(int port, int pr_role, int flags);
/**
* Check current data role for potential data swap
@@ -1308,7 +1309,7 @@ void pd_check_pr_role(int port, int pr_role, int flags);
* @param dr_role Our data role
* @param flags PD flags
*/
-void pd_check_dr_role(int port, int dr_role, int flags);
+__override_proto void pd_check_dr_role(int port, int dr_role, int flags);
/**
* Check if we should charge from this device. This is
@@ -1327,7 +1328,7 @@ int pd_charge_from_device(uint16_t vid, uint16_t pid);
* @param port USB-C port number
* @param data_role new data role
*/
-void pd_execute_data_swap(int port, int data_role);
+__override_proto void pd_execute_data_swap(int port, int data_role);
/**
* Get PD device info used for VDO_CMD_SEND_INFO / VDO_CMD_READ_INFO
@@ -1345,7 +1346,8 @@ void pd_get_info(uint32_t *info_data);
* @param rpayload pointer to the data to send back.
* @return if >0, number of VDOs to send back.
*/
-int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload);
+__override_proto int pd_custom_vdm(int port, int cnt, uint32_t *payload,
+ uint32_t **rpayload);
/**
* Handle Structured Vendor Defined Messages
@@ -1463,7 +1465,7 @@ void pd_send_vdm(int port, uint32_t vid, int cmd, const uint32_t *data,
int count);
/* Power Data Objects for the source and the sink */
-extern const uint32_t pd_src_pdo[];
+__override_proto extern const uint32_t pd_src_pdo[];
extern const int pd_src_pdo_cnt;
extern const uint32_t pd_src_pdo_max[];
extern const int pd_src_pdo_max_cnt;
@@ -1888,4 +1890,122 @@ static inline void pd_log_event(uint8_t type, uint8_t size_port,
static inline int pd_vdm_get_log_entry(uint32_t *payload) { return 0; }
#endif /* CONFIG_USB_PD_LOGGING */
+/* ----- SVDM handlers ----- */
+
+/* DisplayPort Alternate Mode */
+#ifdef CONFIG_USB_PD_ALT_MODE_DFP
+extern int dp_flags[CONFIG_USB_PD_PORT_COUNT];
+extern uint32_t dp_status[CONFIG_USB_PD_PORT_COUNT];
+#endif /* CONFIG_USB_PD_ALT_MODE_DFP */
+/**
+ * Configure the pins used for DisplayPort Alternate Mode into safe state.
+ *
+ * @param port The PD port number
+ */
+__override_proto void svdm_safe_dp_mode(int port);
+
+/**
+ * Enter DisplayPort Alternate Mode.
+ *
+ * The default implementation will only enter DP Alt Mode if the SoC is on.
+ * Also, it may notify the AP that the mode was entered.
+ *
+ * @param port The PD port number
+ * @param mode_caps Bitmask indicating DisplayPort mode capabilities
+ * @return 0 if mode is entered, -1 otherwise.
+ */
+__override_proto int svdm_enter_dp_mode(int port, uint32_t mode_caps);
+
+/**
+ * Construct a DP status response.
+ *
+ * @param port The PD port number
+ * @param payload Pointer to the PDO payload which is filled with the DPStatus
+ * information.
+ * @return number of VDOs
+ */
+__override_proto int svdm_dp_status(int port, uint32_t *payload);
+
+/**
+ * Configure the pins used for DisplayPort Alternate Mode.
+ *
+ * @param port The PD port number
+ * @payload payload Pointer to the PDO payload which is filled with the
+ * DPConfigure response message
+ * @return number of VDOs
+ */
+__override_proto int svdm_dp_config(int port, uint32_t *payload);
+
+/**
+ * Perform any other work required after configuring the pins for DP Alt Mode.
+ *
+ * Typically, this involves sending the HPD signal from either the EC or TCPC to
+ * the GPU.
+ * @param port The PD port number
+ */
+__override_proto void svdm_dp_post_config(int port);
+
+/**
+ * Called when a DisplayPort Attention command is received
+ *
+ * The default implementation will parse the Attention message and indicate the
+ * HPD level to the GPU.
+ *
+ * @param port The PD port number
+ * @param payload Pointer to the payload received from the attention command
+ * @return 0 for NAK, 1 for ACK
+ */
+__override_proto int svdm_dp_attention(int port, uint32_t *payload);
+
+/**
+ * Exit DisplayPort Alternate Mode.
+ *
+ * @param port The PD port number
+ */
+__override_proto void svdm_exit_dp_mode(int port);
+
+/* Google Firmware Update Alternate Mode */
+/**
+ * Enter Google Firmware Update (GFU) Mode.
+ *
+ * @param port The PD port number
+ * @param mode_caps Unused for GFU
+ * @return 0 to enter the mode, -1 otherwise
+ */
+__override_proto int svdm_enter_gfu_mode(int port, uint32_t mode_caps);
+
+/**
+ * Exit Google Firmware Update Mode.
+ *
+ * @param port The PD port number
+ */
+__override_proto void svdm_exit_gfu_mode(int port);
+
+/**
+ * Called after successful entry into GFU Mode
+ *
+ * The default implementation sends VDO_CMD_READ_INFO.
+ * @param port The PD port number
+ * @param payload Unused for GFU
+ * @return The number of VDOs
+ */
+__override_proto int svdm_gfu_status(int port, uint32_t *payload);
+
+/**
+ * Configure any pins needed for GFU Mode
+ *
+ * @param port The PD port number
+ * @param payload Unused for GFU
+ * @return The number of VDOs
+ */
+__override_proto int svdm_gfu_config(int port, uint32_t *payload);
+
+/**
+ * Called when an Attention Message is received
+ *
+ * @param port The PD port number
+ * @param payload Unusued for GFU
+ * @return The number of VDOs
+ */
+__override_proto int svdm_gfu_attention(int port, uint32_t *payload);
#endif /* __CROS_EC_USB_PD_H */