FROMLIST: usb: dwc2: resume root hub to handle disconnect of device
When handle disconnect of the hcd during bus_suspend, hcd needs to resume its root hub, otherwise the root hub will not disconnect the existing devices under its port. This issue always happens when connecting with usb devices which support auto-suspend function (e.g. usb hub). (am from https://patchwork.kernel.org/patch/9751469/) Change-Id: I663fdea73f36e89130d9a250612363968cbff941 Signed-off-by: William Wu <william.wu@rock-chips.com> Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
This commit is contained in:
@@ -1827,11 +1827,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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user