summaryrefslogtreecommitdiff
path: root/common/usb_pd_protocol.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r--common/usb_pd_protocol.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index b7d0abb2b8..9004246296 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -426,13 +426,20 @@ static void set_vconn(int port, int enable)
ppc_set_vconn(port, 0);
/*
- * We always need to tell the TCPC to enable Vconn first, otherwise some
- * TCPCs get confused when a PPC sets secondary CC line to 5V and TCPC
- * immediately disconnect. If there is a PPC, both devices will
- * potentially source Vconn, but that should be okay since Vconn has
- * "make before break" electrical requirements when swapping anyway.
+ * Some TCPCs/PPC combinations can trigger OVP if the TCPC doesn't
+ * source VCONN. This happens if the TCPC will trip OVP with 5V, and the
+ * PPC doesn't isolate the TCPC from VCONN when sourcing. But, some PPCs
+ * which do isolate the TCPC can't handle 5V on its host-side CC pins,
+ * so the TCPC shouldn't source VCONN in those cases.
+ *
+ * In the first case, both TCPC and PPC will potentially source Vconn,
+ * but that should be okay since Vconn has "make before break"
+ * electrical requirements when swapping anyway.
+ *
+ * See b/72961003 and b/180973460
*/
- tcpm_set_vconn(port, enable);
+ if (IS_ENABLED(CONFIG_USB_PD_TCPC_VCONN))
+ tcpm_set_vconn(port, enable);
if (IS_ENABLED(CONFIG_USBC_PPC_VCONN) && enable)
ppc_set_vconn(port, 1);