|
@@ -884,6 +884,11 @@ int xhci_suspend(struct xhci_hcd *xhci)
|
|
|
xhci->shared_hcd->state != HC_STATE_SUSPENDED)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ /* Don't poll the roothubs on bus suspend. */
|
|
|
+ xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
|
|
|
+ clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
|
|
|
+ del_timer_sync(&hcd->rh_timer);
|
|
|
+
|
|
|
spin_lock_irq(&xhci->lock);
|
|
|
clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
|
|
|
clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags);
|
|
@@ -1069,6 +1074,11 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
|
|
|
if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
|
|
|
compliance_mode_recovery_timer_init(xhci);
|
|
|
|
|
|
+ /* Re-enable port polling. */
|
|
|
+ xhci_dbg(xhci, "%s: starting port polling.\n", __func__);
|
|
|
+ set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
|
|
|
+ usb_hcd_poll_rh_status(hcd);
|
|
|
+
|
|
|
return retval;
|
|
|
}
|
|
|
#endif /* CONFIG_PM */
|