diff options
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r-- | common/usb_pd_protocol.c | 19 |
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); |