diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index aad7edc29bdd..5e127848fd3c 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -2025,11 +2025,13 @@ void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force) * Without the extra check here we will end calling disconnect * and won't get any future interrupts to handle the connect. */ - if (!force) { - hprt0 = dwc2_readl(hsotg, HPRT0); - if (!(hprt0 & HPRT0_CONNDET) && (hprt0 & HPRT0_CONNSTS)) - dwc2_hcd_connect(hsotg); - } + hprt0 = dwc2_readl(hsotg, HPRT0); + + if (!force && !(hprt0 & HPRT0_CONNDET) && + (hprt0 & HPRT0_CONNSTS)) + dwc2_hcd_connect(hsotg); + else if (hsotg->lx_state != DWC2_L0) + usb_hcd_resume_root_hub(hsotg->priv); } /**