| From a8b43c00ef06aec49b9fe0a5bad8a6a320e4d27b Mon Sep 17 00:00:00 2001 |
| From: Matthew Garrett <mjg@redhat.com> |
| Date: Thu, 6 Oct 2011 15:35:43 -0400 |
| Subject: USB: Fix runtime wakeup on OHCI |
| |
| From: Matthew Garrett <mjg@redhat.com> |
| |
| commit a8b43c00ef06aec49b9fe0a5bad8a6a320e4d27b upstream. |
| |
| At least some OHCI hardware (such as the MCP89) fails to flag any change |
| in the host status register or the port status registers when receiving |
| a remote wakeup while in D3 state. This results in the controller being |
| resumed but no device state change being noticed, at which point the |
| controller is put back to sleep again. Since there doesn't seem to be any |
| reliable way to identify the state change, just unconditionally resume the |
| hub. It'll be put back to sleep in the near future anyway if there are no |
| active devices attached to it. |
| |
| Signed-off-by: Matthew Garrett <mjg@redhat.com> |
| Cc: Alan Stern <stern@rowland.harvard.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/host/ohci-hub.c | 5 +---- |
| 1 file changed, 1 insertion(+), 4 deletions(-) |
| |
| --- a/drivers/usb/host/ohci-hub.c |
| +++ b/drivers/usb/host/ohci-hub.c |
| @@ -356,10 +356,7 @@ static void ohci_finish_controller_resum |
| msleep(20); |
| } |
| |
| - /* Does the root hub have a port wakeup pending? */ |
| - if (ohci_readl(ohci, &ohci->regs->intrstatus) & |
| - (OHCI_INTR_RD | OHCI_INTR_RHSC)) |
| - usb_hcd_resume_root_hub(hcd); |
| + usb_hcd_resume_root_hub(hcd); |
| } |
| |
| /* Carry out polling-, autostop-, and autoresume-related state changes */ |