diff options
author | Denis Brockus <dbrockus@chromium.org> | 2019-11-14 14:13:29 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-21 23:20:55 +0000 |
commit | 154f597b8656fbcc16f6652f6fe8713943440939 (patch) | |
tree | 3ce5425b230126405511741d1d01e609d9e8188c /driver/usb_mux/usb_mux.c | |
parent | 14e356b73ee9c40170c8c0042dd452ba83b5ead9 (diff) | |
download | chrome-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/usb_mux.c')
-rw-r--r-- | driver/usb_mux/usb_mux.c | 25 |
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); |