diff options
author | Ting Shen <phoenixshen@google.com> | 2019-07-29 16:36:41 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-09 06:50:36 +0000 |
commit | 1524c164f52acc8cdab918b782c21e2120dcc5f6 (patch) | |
tree | ef702f80757cf97f6a1c12bc65d2f6a069b5739a /baseboard/kukui/usb_pd_policy.c | |
parent | 60c0372ba770590333f164c4066ee068c6a4f93d (diff) | |
download | chrome-ec-1524c164f52acc8cdab918b782c21e2120dcc5f6.tar.gz |
jacuzzi: enable DP
enable dp on jacuzzi, and add back the dp implementation before
CL:1660524 for all new devices including jacuzzi.
usb_pd_policy now supports two different configs:
- kukui/krane, rev <= 4: no mux (CONFIG_USB_MUX_VIRTUAL defined)
- all new devices: have a real mux
BUG=b:135895590,b:135079572
TEST=attach a usb hub and moniter to the dut,
verify that dp/dp+mux mode and both polarities can detected
correctly
BRANCH=master
Change-Id: I3e4757c97d555a4afb48076fc4785305c96b0a7f
Signed-off-by: Ting Shen <phoenixshen@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1723892
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Tested-by: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'baseboard/kukui/usb_pd_policy.c')
-rw-r--r-- | baseboard/kukui/usb_pd_policy.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c index d6b5ddf764..5d5ca68e2d 100644 --- a/baseboard/kukui/usb_pd_policy.c +++ b/baseboard/kukui/usb_pd_policy.c @@ -250,10 +250,14 @@ static void svdm_safe_dp_mode(int port) static int svdm_enter_dp_mode(int port, uint32_t mode_caps) { - /* Kukui doesn't support superspeed lanes. */ - const uint32_t support_pin_mode = MODE_DP_PIN_C | MODE_DP_PIN_E; + /* Kukui/Krane doesn't support superspeed lanes. */ + const uint32_t support_pin_mode = IS_ENABLED(CONFIG_USB_MUX_VIRTUAL) ? + (MODE_DP_PIN_C | MODE_DP_PIN_E) : MODE_DP_PIN_ALL; - /* Only enter mode if device is DFP_D and PIN_C, PIN_E capable */ + /** + * Only enter mode if device is DFP_D (and PIN_C/E for Kukui/Krane) + * capable + */ if ((mode_caps & MODE_DP_SNK) && (mode_caps & (support_pin_mode << MODE_DP_DFP_PIN_SHIFT))) { svdm_safe_dp_mode(port); @@ -284,15 +288,25 @@ static int svdm_dp_status(int port, uint32_t *payload) static int svdm_dp_config(int port, uint32_t *payload) { int opos = pd_alt_mode(port, USB_SID_DISPLAYPORT); + int status = dp_status[port]; + int mf_pref = PD_VDO_DPSTS_MF_PREF(dp_status[port]); + int pin_mode; + /* Kukui doesn't support multi-function mode, mask it out. */ - int status = dp_status[port] & ~PD_VDO_DPSTS_MF_MASK; - int pin_mode = pd_dfp_dp_get_pin_mode(port, status); + if (IS_ENABLED(CONFIG_USB_MUX_VIRTUAL)) + status &= ~PD_VDO_DPSTS_MF_MASK; + + pin_mode = pd_dfp_dp_get_pin_mode(port, status); if (!pin_mode) return 0; - usb_mux_set(port, TYPEC_MUX_DP, USB_SWITCH_CONNECT, - board_get_polarity(port)); + if (IS_ENABLED(CONFIG_USB_MUX_VIRTUAL)) + usb_mux_set(port, TYPEC_MUX_DP, USB_SWITCH_CONNECT, + board_get_polarity(port)); + else + usb_mux_set(port, mf_pref ? TYPEC_MUX_DOCK : TYPEC_MUX_DP, + USB_SWITCH_CONNECT, board_get_polarity(port)); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); |