Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: Fix runtime wakeup on OHCI

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: stable <stable@vger.kernel.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Matthew Garrett and committed by
Greg Kroah-Hartman
a8b43c00 48e82361

+1 -4
+1 -4
drivers/usb/host/ohci-hub.c
··· 356 356 msleep(20); 357 357 } 358 358 359 - /* Does the root hub have a port wakeup pending? */ 360 - if (ohci_readl(ohci, &ohci->regs->intrstatus) & 361 - (OHCI_INTR_RD | OHCI_INTR_RHSC)) 362 - usb_hcd_resume_root_hub(hcd); 359 + usb_hcd_resume_root_hub(hcd); 363 360 } 364 361 365 362 /* Carry out polling-, autostop-, and autoresume-related state changes */