summaryrefslogtreecommitdiff
path: root/common/usb_pd_policy.c
diff options
context:
space:
mode:
authorSam Hurst <shurst@google.com>2018-04-19 10:44:54 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-04-25 14:40:45 -0700
commit01a99552df8b2bb3ff43c2304c67542616bd3e64 (patch)
tree9f1158f0344cbe790410c01b9d5bba69cc31c6ed /common/usb_pd_policy.c
parente889631f56776391fdd099e52d4f3f3e4ae1e66a (diff)
downloadchrome-ec-01a99552df8b2bb3ff43c2304c67542616bd3e64.tar.gz
PD: Leave Vbus ON if Vconn and Vbus Requested is set to 0 in the AMA VDO
While troubleshooting why a generic $19.99 Multiport (USB, HDMI, Type-C) Type-C dongle didn't work on Scarlet, I noticed that Vconn Req and Vbus Req were both set to zero in the AMA VDO. For a better user experience, default to Vbus ON if both Vconn and Vbus Req are both zero. BUG=b:78286905 BRANCH=NONE TEST=manual Tested the generic dongle with USB-Keyboard, TypeC power adapter, and HP monitor. Change-Id: I170eef1372c3621334de2c457bd4533eea744cc0 Signed-off-by: Sam Hurst <shurst@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1019611 Commit-Ready: Sam Hurst <shurst@google.com> Tested-by: Sam Hurst <shurst@google.com> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'common/usb_pd_policy.c')
-rw-r--r--common/usb_pd_policy.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c
index 63e1b4811d..9f4b41b74d 100644
--- a/common/usb_pd_policy.c
+++ b/common/usb_pd_policy.c
@@ -294,16 +294,16 @@ static void dfp_consume_identity(int port, int cnt, uint32_t *payload)
memcpy(&pe[port].identity, payload + 1, identity_size);
switch (ptype) {
case IDH_PTYPE_AMA:
- /* TODO(tbroch) do I disable VBUS here if power contract
- * requested it
- */
- if (!PD_VDO_AMA_VBUS_REQ(payload[VDO_I(AMA)]))
- pd_power_supply_reset(port);
-
+/* Leave vbus ON if the following macro is false */
#if defined(CONFIG_USB_PD_DUAL_ROLE) && defined(CONFIG_USBC_VCONN_SWAP)
/* Adapter is requesting vconn, try to supply it */
if (PD_VDO_AMA_VCONN_REQ(payload[VDO_I(AMA)]))
pd_try_vconn_src(port);
+
+ /* Only disable vbus if vconn was requested */
+ if (PD_VDO_AMA_VCONN_REQ(payload[VDO_I(AMA)]) &&
+ !PD_VDO_AMA_VBUS_REQ(payload[VDO_I(AMA)]))
+ pd_power_supply_reset(port);
#endif
break;
default: