David:
I found the reasons why root-hub remote wakeup for EHCI hasn't been
working on my systems. A patch that gets things going is below. Perhaps
you've already fixed this and I haven't seen it...
Alan Stern
Index: usb-2.6/drivers/usb/host/ehci-hub.c
===================================================================
--- usb-2.6.orig/drivers/usb/host/ehci-hub.c
+++ usb-2.6/drivers/usb/host/ehci-hub.c
@@ -76,6 +76,10 @@ static int ehci_bus_suspend (struct usb_
ehci_halt (ehci);
hcd->state = HC_STATE_SUSPENDED;
+ /* allow remote wakeup */
+ if (device_may_wakeup(&hcd->self.root_hub->dev))
+ writel (INTR_MASK, &ehci->regs->intr_enable);
+
ehci->next_statechange = jiffies + msecs_to_jiffies(10);
spin_unlock_irq (&ehci->lock);
return 0;
Index: usb-2.6/drivers/usb/host/ehci-hcd.c
===================================================================
--- usb-2.6.orig/drivers/usb/host/ehci-hcd.c
+++ usb-2.6/drivers/usb/host/ehci-hcd.c
@@ -625,7 +625,7 @@ static irqreturn_t ehci_irq (struct usb_
/* resume root hub? */
status = readl (&ehci->regs->command);
if (!(status & CMD_RUN))
- writel (status | CMD_RUN, &ehci->regs->command);
+ usb_hcd_resume_root_hub(hcd);
while (i--) {
status = readl (&ehci->regs->port_status [i]);
@@ -641,7 +641,6 @@ static irqreturn_t ehci_irq (struct usb_
*/
ehci->reset_done [i] = jiffies + msecs_to_jiffies (20);
ehci_dbg (ehci, "port %d remote wakeup\n", i + 1);
- usb_hcd_resume_root_hub(hcd);
}
}
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel