summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivya Sasidharan <divya.s.sasidharan@intel.com>2016-10-17 17:27:53 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-10-19 02:45:34 -0700
commitff9b1d158e486b8e38c26158794149a271b76b58 (patch)
tree48ad4d180dd90300f4029861f51ba61ba6169623
parent6e03484c018310539196ee3cfceeeae806592670 (diff)
downloadchrome-ec-ff9b1d158e486b8e38c26158794149a271b76b58.tar.gz
reef: usb_pd_policy: 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=chrome-os-partner:58670 BRANCH=master TEST=On Reef, with Dell dongle verified on both ports that USB 3.0 device and ethernet is working. Change-Id: I7a15a281306e29f589de2ef59da9c424f3f6710d Signed-off-by: Divya Sasidharan <divya.s.sasidharan@intel.com> Reviewed-on: https://chromium-review.googlesource.com/400080 Commit-Ready: Kevin K Wong <kevin.k.wong@intel.com> Tested-by: Divya S Sasidharan <divya.s.sasidharan@intel.com> Tested-by: Li1 Feng <li1.feng@intel.com> Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/reef/usb_pd_policy.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/board/reef/usb_pd_policy.c b/board/reef/usb_pd_policy.c
index 880a6bd06f..5a2bae6f96 100644
--- a/board/reef/usb_pd_policy.c
+++ b/board/reef/usb_pd_policy.c
@@ -287,13 +287,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,
- USB_SWITCH_CONNECT, pd_get_polarity(port));
+ 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;