diff options
Diffstat (limited to 'common/usb_common.c')
-rw-r--r-- | common/usb_common.c | 46 |
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 */ |