summaryrefslogtreecommitdiff
path: root/driver/usb_mux
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-11-14 14:13:29 -0700
committerCommit Bot <commit-bot@chromium.org>2019-11-21 23:20:55 +0000
commit154f597b8656fbcc16f6652f6fe8713943440939 (patch)
tree3ce5425b230126405511741d1d01e609d9e8188c /driver/usb_mux
parent14e356b73ee9c40170c8c0042dd452ba83b5ead9 (diff)
downloadchrome-ec-154f597b8656fbcc16f6652f6fe8713943440939.tar.gz
usbc: add enter_low_power_mode for retimer mux
BUG=b:139428185 BRANCH=none TEST=verify mode is set correctly when switching devices Change-Id: I3e40e0321cb1026180b7edc0bfe99439c13acafb Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1922062
Diffstat (limited to 'driver/usb_mux')
-rw-r--r--driver/usb_mux/usb_mux.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/driver/usb_mux/usb_mux.c b/driver/usb_mux/usb_mux.c
index be150c8741..0a33aef948 100644
--- a/driver/usb_mux/usb_mux.c
+++ b/driver/usb_mux/usb_mux.c
@@ -41,10 +41,24 @@ static void enter_low_power_mode(int port)
/* Apply any low power customization if present */
if (mux->driver->enter_low_power_mode) {
res = mux->driver->enter_low_power_mode(port);
+ if (res) {
+ CPRINTS("Err: %s mux port(%d): %d",
+ __func__, port, res);
+ return;
+ }
+ }
- if (res)
- CPRINTS("Err: enter_low_power_mode mux port(%d): %d",
- port, res);
+ if (IS_ENABLED(CONFIG_USBC_MUX_RETIMER)) {
+ const struct usb_retimer *retimer = &usb_retimers[port];
+
+ if (retimer->driver && retimer->driver->enter_low_power_mode) {
+ res = retimer->driver->enter_low_power_mode(port);
+ if (res) {
+ CPRINTS("Err: %s retimer port(%d): %d",
+ __func__, port, res);
+ return;
+ }
+ }
}
}
@@ -121,7 +135,10 @@ void usb_mux_set(int port, enum typec_mux mux_mode,
exit_low_power_mode(port);
/* Configure superspeed lanes */
- mux_state = polarity ? mux_mode | MUX_POLARITY_INVERTED : mux_mode;
+ mux_state = ((mux_mode != TYPEC_MUX_NONE) && polarity)
+ ? mux_mode | MUX_POLARITY_INVERTED
+ : mux_mode;
+
res = mux->driver->set(port, mux_state);
if (res) {
CPRINTS("Err: set mux port(%d): %d", port, res);