diff options
Diffstat (limited to 'drivers/usb/host/xhci.c')
| -rw-r--r-- | drivers/usb/host/xhci.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 5c72c431bab..f1f01a834ba 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -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 */  |