| From: Alan Stern <stern@rowland.harvard.edu> |
| Date: Tue, 17 Apr 2012 15:24:15 -0400 |
| Subject: [PATCH] EHCI: fix criterion for resuming the root hub |
| |
| commit dc75ce9d929aabeb0843a6b1a4ab320e58ba1597 upstream. |
| |
| This patch (as1542) changes the criterion ehci-hcd uses to tell when |
| it needs to resume the controller's root hub. A resume is needed when |
| a port status change is detected, obviously, but only if the root hub |
| is currently suspended. |
| |
| Right now the driver tests whether the root hub is running, and that |
| is not the correct test. In particular, if the controller has died |
| then the root hub should not be restarted. In addition, some buggy |
| hardware occasionally requires the root hub to be running and |
| sending out SOF packets even while it is nominally supposed to be |
| suspended. |
| |
| In the end, the test needs to be changed. Rather than checking whether |
| the root hub is currently running, the driver will now check whether |
| the root hub is currently suspended. This will yield the correct |
| behavior in all cases. |
| |
| Signed-off-by: Alan Stern <stern@rowland.harvard.edu> |
| CC: Peter Chen <B29397@freescale.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/usb/host/ehci-hcd.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c |
| index 806cc95..95ca07a 100644 |
| --- a/drivers/usb/host/ehci-hcd.c |
| +++ b/drivers/usb/host/ehci-hcd.c |
| @@ -910,7 +910,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) |
| pcd_status = status; |
| |
| /* resume root hub? */ |
| - if (!(cmd & CMD_RUN)) |
| + if (ehci->rh_state == EHCI_RH_SUSPENDED) |
| usb_hcd_resume_root_hub(hcd); |
| |
| /* get per-port change detect bits */ |
| -- |
| 1.7.10 |
| |