summaryrefslogtreecommitdiff
path: root/common/usb_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/usb_common.c')
-rw-r--r--common/usb_common.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/common/usb_common.c b/common/usb_common.c
index dc7a40a08e..760ffc2063 100644
--- a/common/usb_common.c
+++ b/common/usb_common.c
@@ -936,6 +936,40 @@ __overridable int svdm_gfu_attention(int port, uint32_t *payload)
return 0;
}
+#ifdef CONFIG_USB_PD_TBT_COMPAT_MODE
+__overridable int svdm_tbt_compat_enter_mode(int port, uint32_t mode_caps)
+{
+ /*
+ * Before entering into alternate mode, state of the USB-C MUX needs to
+ * be in safe mode Ref: USB Type-C Cable and Connector Specification
+ * Section E.2.2 Alternate Mode Electrical Requirements
+ */
+ usb_mux_set(port, IS_ENABLED(CONFIG_USB_MUX_VIRTUAL) ?
+ TYPEC_MUX_SAFE : TYPEC_MUX_NONE, USB_SWITCH_CONNECT,
+ pd_get_polarity(port));
+ return 0;
+}
+
+__overridable void svdm_tbt_compat_exit_mode(int port)
+{
+}
+
+__overridable int svdm_tbt_compat_status(int port, uint32_t *payload)
+{
+ return 0;
+}
+
+__overridable int svdm_tbt_compat_config(int port, uint32_t *payload)
+{
+ return 0;
+}
+
+__overridable int svdm_tbt_compat_attention(int port, uint32_t *payload)
+{
+ return 0;
+}
+#endif /* CONFIG_USB_PD_TBT_COMPAT_MODE */
+
const struct svdm_amode_fx supported_modes[] = {
{
.svid = USB_SID_DISPLAYPORT,
@@ -954,7 +988,17 @@ const struct svdm_amode_fx supported_modes[] = {
.config = &svdm_gfu_config,
.attention = &svdm_gfu_attention,
.exit = &svdm_exit_gfu_mode,
- }
+ },
+#ifdef CONFIG_USB_PD_TBT_COMPAT_MODE
+ {
+ .svid = USB_VID_INTEL,
+ .enter = &svdm_tbt_compat_enter_mode,
+ .status = &svdm_tbt_compat_status,
+ .config = &svdm_tbt_compat_config,
+ .attention = &svdm_tbt_compat_attention,
+ .exit = &svdm_tbt_compat_exit_mode,
+ },
+#endif /* CONFIG_USB_PD_TBT_COMPAT_MODE */
};
const int supported_modes_cnt = ARRAY_SIZE(supported_modes);
#endif /* CONFIG_USB_PD_ALT_MODE_DFP */