summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2021-09-23 16:31:33 -0600
committerCommit Bot <commit-bot@chromium.org>2021-09-27 17:38:42 +0000
commit9236754d16b7a54dcb1449e2b3efd5a0044d9ea8 (patch)
tree2ff61522548c5af23494a9aab25cf19286188f34
parent4e2d1981915533a3f214b4075babd49c8ca6c0ef (diff)
downloadchrome-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.c9
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);