summaryrefslogtreecommitdiffstats
path: root/drivers/usb/host
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.osdl.org>2006-11-16 16:39:46 -0800
committerLinus Torvalds <torvalds@woody.osdl.org>2006-11-16 16:39:46 -0800
commit0e12c5e85e6fe0a247d547a28a1884915cd3f5b9 (patch)
tree63747b26416733e37ed9079891ab9c31ceca7bc3 /drivers/usb/host
parentccf9ff524ccb195d648ecb0b168340560b42532c (diff)
parent5a3fcf5c7f035de8e2b28d144d67b7bebac8a723 (diff)
downloadlinux-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.c25
-rw-r--r--drivers/usb/host/ohci-hub.c6
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, &regs->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, &regs->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,
+ &regs->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, &regs->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 &