summaryrefslogtreecommitdiff
path: root/driver/usb_mux/usb_mux.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/usb_mux/usb_mux.c')
-rw-r--r--driver/usb_mux/usb_mux.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/driver/usb_mux/usb_mux.c b/driver/usb_mux/usb_mux.c
index 911558905d..cfc91352bc 100644
--- a/driver/usb_mux/usb_mux.c
+++ b/driver/usb_mux/usb_mux.c
@@ -149,16 +149,24 @@ static inline void exit_low_power_mode(int port)
void usb_mux_init(int port)
{
+ int rv;
+
ASSERT(port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT);
if (port >= board_get_usb_pd_port_count()) {
return;
}
- configure_mux(port, USB_MUX_INIT, NULL);
+ rv = configure_mux(port, USB_MUX_INIT, NULL);
- /* Device is always out of LPM after initialization. */
- flags[port] &= ~USB_MUX_FLAG_IN_LPM;
+ /*
+ * Mux may fail initialization if it's not powered. Mark this port
+ * as in LPM mode to try initialization again.
+ */
+ if (rv == EC_ERROR_NOT_POWERED)
+ flags[port] |= USB_MUX_FLAG_IN_LPM;
+ else
+ flags[port] &= ~USB_MUX_FLAG_IN_LPM;
}
/*