diff options
author | Denis Brockus <dbrockus@chromium.org> | 2019-11-05 14:51:56 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-14 00:12:44 +0000 |
commit | a4972e187c6ce582aa54dbfce6039fd2239e4bbd (patch) | |
tree | 2dfffcb6b3b457b8abdbc6f4a0acc267cb9209d2 /driver/usb_mux | |
parent | f5633029509350cf7254ab14c440d14e8e73f729 (diff) | |
download | chrome-ec-a4972e187c6ce582aa54dbfce6039fd2239e4bbd.tar.gz |
usbc: retimer pi3dpx1207
BUG=b:139428185
BRANCH=none
TEST=verify mode is set correctly when switching devices
Change-Id: Ic9d460a94bb8007f17168ac5237a4dcbc24cfb2b
Signed-off-by: Denis Brockus <dbrockus@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1900123
Reviewed-by: Edward Hill <ecgh@chromium.org>
Diffstat (limited to 'driver/usb_mux')
-rw-r--r-- | driver/usb_mux/usb_mux.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/driver/usb_mux/usb_mux.c b/driver/usb_mux/usb_mux.c index 122f71d773..be150c8741 100644 --- a/driver/usb_mux/usb_mux.c +++ b/driver/usb_mux/usb_mux.c @@ -68,6 +68,19 @@ void usb_mux_init(int port) return; } + if (IS_ENABLED(CONFIG_USBC_MUX_RETIMER)) { + const struct usb_retimer *retimer = &usb_retimers[port]; + + if (retimer->driver && retimer->driver->init) { + res = retimer->driver->init(port); + if (res) { + CPRINTS("Err: init retimer port(%d): %d", + port, res); + return; + } + } + } + /* Device is always out of LPM after initialization. */ flags[port] &= ~USB_MUX_FLAG_IN_LPM; @@ -93,10 +106,9 @@ void usb_mux_set(int port, enum typec_mux mux_mode, const int should_enter_low_power_mode = mux_mode == TYPEC_MUX_NONE && usb_mode == USB_SWITCH_DISCONNECT; -#ifdef CONFIG_USB_CHARGER /* Configure USB2.0 */ - usb_charger_set_switches(port, usb_mode); -#endif + if (IS_ENABLED(CONFIG_USB_CHARGER)) + usb_charger_set_switches(port, usb_mode); /* * Don't wake device up just to put it back to sleep. Low power mode @@ -116,6 +128,19 @@ void usb_mux_set(int port, enum typec_mux mux_mode, return; } + if (IS_ENABLED(CONFIG_USBC_MUX_RETIMER)) { + const struct usb_retimer *retimer = &usb_retimers[port]; + + if (retimer->driver && retimer->driver->set) { + res = retimer->driver->set(port, mux_state); + if (res) { + CPRINTS("Err: set retimer port(%d): %d", + port, res); + return; + } + } + } + if (enable_debug_prints) CPRINTS( "usb/dp mux: port(%d) typec_mux(%d) usb2(%d) polarity(%d)", @@ -241,12 +266,11 @@ static enum ec_status hc_usb_pd_mux_info(struct host_cmd_handler_args *args) if (mux->driver->get(port, &r->flags) != EC_SUCCESS) return EC_RES_ERROR; -#ifdef CONFIG_USB_MUX_VIRTUAL /* Clear HPD IRQ event since we're about to inform host of it. */ - if ((r->flags & USB_PD_MUX_HPD_IRQ) && - mux->hpd_update == &virtual_hpd_update) + if (IS_ENABLED(CONFIG_USB_MUX_VIRTUAL) && + (r->flags & USB_PD_MUX_HPD_IRQ) && + (mux->hpd_update == &virtual_hpd_update)) mux->hpd_update(port, r->flags & USB_PD_MUX_HPD_LVL, 0); -#endif args->response_size = sizeof(*r); return EC_RES_SUCCESS; |