diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2006-11-16 16:39:46 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-11-16 16:39:46 -0800 |
commit | 0e12c5e85e6fe0a247d547a28a1884915cd3f5b9 (patch) | |
tree | 63747b26416733e37ed9079891ab9c31ceca7bc3 /drivers/usb/host | |
parent | ccf9ff524ccb195d648ecb0b168340560b42532c (diff) | |
parent | 5a3fcf5c7f035de8e2b28d144d67b7bebac8a723 (diff) | |
download | linux-0e12c5e85e6fe0a247d547a28a1884915cd3f5b9.tar.gz linux-0e12c5e85e6fe0a247d547a28a1884915cd3f5b9.tar.bz2 linux-0e12c5e85e6fe0a247d547a28a1884915cd3f5b9.zip |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: auerswald possible memleak fix
USB: ipaq: Add HTC Modem Support
USB: Fixed outdated usb_get_device_descriptor() documentation
usb-storage: Remove duplicated unusual_devs.h entries for Sony Ericsson P990i
USB: hid-core: Add quirk for new Apple keyboard/trackpad
USB Storage: unusual_devs.h entry for Sony Ericsson P990i
USB: correct keymapping on Powerbook built-in USB ISO keyboards
USB: OHCI: fix root-hub resume bug
USB: Fix UCR-61S2B unusual_dev entry
USB: ftdi driver pid for dmx-interfaces
USB: ftdi_sio: adds vendor/product id for a RFID construction kit
OHCI: disallow autostop when wakeup is not available
Diffstat (limited to 'drivers/usb/host')
-rw-r--r-- | drivers/usb/host/ohci-hcd.c | 25 | ||||
-rw-r--r-- | drivers/usb/host/ohci-hub.c | 6 |
2 files changed, 19 insertions, 12 deletions
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 9be6b303e784..ea4714e557e4 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -715,13 +715,6 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) return IRQ_NOTMINE; } - if (ints & OHCI_INTR_RHSC) { - ohci_vdbg (ohci, "rhsc\n"); - ohci->next_statechange = jiffies + STATECHANGE_DELAY; - ohci_writel (ohci, OHCI_INTR_RHSC, ®s->intrstatus); - usb_hcd_poll_rh_status(hcd); - } - if (ints & OHCI_INTR_UE) { disable (ohci); ohci_err (ohci, "OHCI Unrecoverable Error, disabled\n"); @@ -731,9 +724,21 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) ohci_usb_reset (ohci); } - if (ints & OHCI_INTR_RD) { - ohci_vdbg (ohci, "resume detect\n"); - ohci_writel (ohci, OHCI_INTR_RD, ®s->intrstatus); + if (ints & OHCI_INTR_RHSC) { + ohci_vdbg(ohci, "rhsc\n"); + ohci->next_statechange = jiffies + STATECHANGE_DELAY; + ohci_writel(ohci, OHCI_INTR_RD | OHCI_INTR_RHSC, + ®s->intrstatus); + usb_hcd_poll_rh_status(hcd); + } + + /* For connect and disconnect events, we expect the controller + * to turn on RHSC along with RD. But for remote wakeup events + * this might not happen. + */ + else if (ints & OHCI_INTR_RD) { + ohci_vdbg(ohci, "resume detect\n"); + ohci_writel(ohci, OHCI_INTR_RD, ®s->intrstatus); hcd->poll_rh = 1; if (ohci->autostop) { spin_lock (&ohci->lock); diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c index 6f113596af66..6995ea36f2e8 100644 --- a/drivers/usb/host/ohci-hub.c +++ b/drivers/usb/host/ohci-hub.c @@ -169,7 +169,8 @@ __acquires(ohci->lock) break; case OHCI_USB_RESUME: /* HCFS changes sometime after INTR_RD */ - ohci_info (ohci, "wakeup\n"); + ohci_info(ohci, "%swakeup\n", + autostopped ? "auto-" : ""); break; case OHCI_USB_OPER: /* this can happen after resuming a swsusp snapshot */ @@ -422,7 +423,8 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf) ohci->autostop = 0; ohci->next_statechange = jiffies + STATECHANGE_DELAY; - } else if (time_after_eq (jiffies, + } else if (device_may_wakeup(&hcd->self.root_hub->dev) + && time_after_eq(jiffies, ohci->next_statechange) && !ohci->ed_rm_list && !(ohci->hc_control & |