diff options
author | Keith Short <keithshort@chromium.org> | 2020-06-19 14:29:56 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-20 03:12:07 +0000 |
commit | dad10f78ae2d127ad3b5471fb580248ee3c87a39 (patch) | |
tree | 50c189c8f4a4d0bdf240218ccf867b604952a6cf | |
parent | 6218ae98872846970d52024b04f01874534889dd (diff) | |
download | chrome-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.c | 18 |
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, |