summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2019-05-31 15:27:51 -0600
committerCommit Bot <commit-bot@chromium.org>2019-06-05 16:38:54 +0000
commit46c63492e9f8de67bb6dcf27ce8798a4d18f141d (patch)
tree5d9f00d9f2367e4bacc5c8196451c757ab5f7630
parentea39720e4de9fe2042fc3ace4ae1e41aeea08308 (diff)
downloadchrome-ec-46c63492e9f8de67bb6dcf27ce8798a4d18f141d.tar.gz
USB PD: Disable Vconn as well as Vbus on init
Currently, the pd_task will call a power supply reset during init which cuts Vbus to the port partner. However, on a sysjump we may still be sourcing Vconn to a partner which will leave it in an inconsistent state of having Vconn but no Vbus. Depending on the port partner's power topology, they may even feedback some amount of voltage on Vbus, causing them to be detected as a charger. After disabling Vbus to the port partner, disable Vconn as well. BUG=b:132110509 BRANCH=octopus TEST=unlocked EC resets and sysjumps with a display port dongle and hoho, ensuring neither was detected as a low power charger after Change-Id: Ica9b72167bc981faeaebac18bac476ca9b7bfe7f Signed-off-by: Diana Z <dzigterman@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1639211 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> (cherry picked from commit 81255185ec4847ada2f09230f2c152809676a719) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1645380
-rw-r--r--common/usb_pd_protocol.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 8ca0bbb6fc..4bf8e600e0 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -2649,8 +2649,14 @@ void pd_task(void *u)
pd_init_tasks();
#endif
- /* Ensure the power supply is in the default state */
+ /*
+ * Ensure the power supply is in the default state and ensure we are not
+ * sourcing Vconn
+ */
pd_power_supply_reset(port);
+#ifdef CONFIG_USBC_VCONN
+ set_vconn(port, 0);
+#endif
/* Initialize TCPM driver and wait for TCPC to be ready */
res = reset_device_and_notify(port);