From f140370353d7ed8a540c6a84d8d6a5faab89adaa Mon Sep 17 00:00:00 2001 From: Bruce Date: Mon, 24 Oct 2016 10:43:12 +0800 Subject: [PATCH] Pyro: Fix multi-func mode for USB PD Without this change the Alternate mode adapter with multi-function capablity would only be configured as DP instead of (DP + USB). BUG=None BRANCH=master TEST=make buildall Change-Id: I85c8b52469dec6fc347c5cfe6a3b208bc765069e Signed-off-by: Bruce.Wan Reviewed-on: https://chromium-review.googlesource.com/401074 Commit-Ready: Keith Tzeng Tested-by: Keith Tzeng Reviewed-by: Aaron Durbin --- board/pyro/usb_pd_policy.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/board/pyro/usb_pd_policy.c b/board/pyro/usb_pd_policy.c index 22a1fd797d..cb7d9ff62b 100644 --- a/board/pyro/usb_pd_policy.c +++ b/board/pyro/usb_pd_policy.c @@ -273,13 +273,18 @@ 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 mf_pref = PD_VDO_DPSTS_MF_PREF(dp_status[port]); + int pin_mode = pd_dfp_dp_get_pin_mode(port, dp_status[port]); - usb_mux_set(port, TYPEC_MUX_DP, + if (!pin_mode) + return 0; + + usb_mux_set(port, mf_pref ? TYPEC_MUX_DOCK : TYPEC_MUX_DP, USB_SWITCH_CONNECT, pd_get_polarity(port)); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); - payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* pin mode */ + payload[1] = VDO_DP_CFG(pin_mode, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP connected */ return 2;