diff options
author | Diana Z <dzigterman@chromium.org> | 2021-09-23 16:31:33 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-27 17:38:42 +0000 |
commit | 9236754d16b7a54dcb1449e2b3efd5a0044d9ea8 (patch) | |
tree | 2ff61522548c5af23494a9aab25cf19286188f34 | |
parent | 4e2d1981915533a3f214b4075babd49c8ca6c0ef (diff) | |
download | chrome-ec-9236754d16b7a54dcb1449e2b3efd5a0044d9ea8.tar.gz |
TCPMv2: Set mux to None when detaching
When detaching from a port partner, we clear out all alternate mode
information, but currently we're not clearing out the mux state
reliably. There is a mux state clear in Unattached.SNK, but it should
be called any time we're forcibly detaching a port (due to unplug, error
recovery, or suspend).
BRANCH=None
BUG=b:198204468
TEST=on guybrush, suspend a port with a monitor plugged in and verify
the mux state goes to None while suspended
on voxel, pass tast typec.Mode*.manual
Signed-off-by: Diana Z <dzigterman@chromium.org>
Change-Id: I894d8b9358b357300848c063a0db6f5f22caf12a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3180267
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Commit-Queue: Denis Brockus <dbrockus@chromium.org>
-rw-r--r-- | common/usbc/usb_tc_drp_acc_trysrc_sm.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c index bf7d69bf13..182ea686ec 100644 --- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c +++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c @@ -724,6 +724,11 @@ static void tc_detached(int port) tc_set_modes_exit(port); if (IS_ENABLED(CONFIG_USB_PRL_SM)) prl_set_default_pd_revision(port); + + /* Clear any mux connection on detach */ + if (IS_ENABLED(CONFIG_USBC_SS_MUX)) + usb_mux_set(port, USB_PD_MUX_NONE, + USB_SWITCH_DISCONNECT, tc[port].polarity); } static inline void pd_set_dual_role_and_event(int port, @@ -2242,10 +2247,6 @@ static void tc_unattached_snk_entry(const int port) pd_execute_data_swap(port, PD_ROLE_DISCONNECTED); pd_timer_enable(port, TC_TIMER_NEXT_ROLE_SWAP, PD_T_DRP_SNK); - if (IS_ENABLED(CONFIG_USBC_SS_MUX)) - usb_mux_set(port, USB_PD_MUX_NONE, - USB_SWITCH_DISCONNECT, tc[port].polarity); - if (IS_ENABLED(CONFIG_USB_PE_SM)) { CLR_FLAGS_ON_DISCONNECT(port); tc_enable_pd(port, 0); |