summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Short <keithshort@chromium.org>2020-06-19 14:29:56 -0600
committerCommit Bot <commit-bot@chromium.org>2020-06-20 03:12:07 +0000
commitdad10f78ae2d127ad3b5471fb580248ee3c87a39 (patch)
tree50c189c8f4a4d0bdf240218ccf867b604952a6cf
parent6218ae98872846970d52024b04f01874534889dd (diff)
downloadchrome-ec-dad10f78ae2d127ad3b5471fb580248ee3c87a39.tar.gz
tusb422: Ensure auto discharge disconnect disabled
The TUSB422 requires auto discharge disconnect to be enabled when in active mode (defined as not unattached). Make sure auto discharge disconnect is disabled prior to enable of DRP toggling as required by the USB Port Controller Specification. BUG=b:159160125 BRANCH=none TEST=make buildall TEST=On Volteer CC line toggling when unattached and verify connection of SNK devices. Signed-off-by: Keith Short <keithshort@chromium.org> Change-Id: I583085dae2547026e64c2b6162912b85805f0137 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2255329 Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org>
-rw-r--r--driver/tcpm/tusb422.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/driver/tcpm/tusb422.c b/driver/tcpm/tusb422.c
index b16b066160..a301a27651 100644
--- a/driver/tcpm/tusb422.c
+++ b/driver/tcpm/tusb422.c
@@ -89,8 +89,24 @@ static int tusb422_tcpm_set_cc(int port, int pull)
tusb422_tcpm_drv.tcpc_enable_auto_discharge_disconnect(port, 1);
return tcpci_tcpm_set_cc(port, pull);
+}
+#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
+static int tusb422_tcpc_drp_toggle(int port)
+{
+ /*
+ * The TUSB422 requires auto discharge disconnect to be enabled for
+ * active mode (not unattached) operation. Make sure it is disabled
+ * before enabling DRP toggling.
+ *
+ * USB Type-C Port Controller Interface Specification revision 2.0,
+ * Figure 4-21 Source Disconnect and Figure 4-22 Sink Disconnect
+ */
+ tusb422_tcpm_drv.tcpc_enable_auto_discharge_disconnect(port, 0);
+
+ return tcpci_tcpc_drp_toggle(port);
}
+#endif
const struct tcpm_drv tusb422_tcpm_drv = {
.init = &tusb422_tcpci_tcpm_init,
@@ -114,7 +130,7 @@ const struct tcpm_drv tusb422_tcpm_drv = {
.tcpc_enable_auto_discharge_disconnect =
&tcpci_tcpc_enable_auto_discharge_disconnect,
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
- .drp_toggle = &tcpci_tcpc_drp_toggle,
+ .drp_toggle = &tusb422_tcpc_drp_toggle,
#endif
#ifdef CONFIG_USBC_PPC
.set_snk_ctrl = &tcpci_tcpm_set_snk_ctrl,