From 264e8e38166280e38aab518f44ddbabc9016deb7 Mon Sep 17 00:00:00 2001 From: Marcelo Tosatti Date: Sun, 21 Jan 2007 19:45:59 -0200 Subject: [PATCH] --- yaml --- r: 46691 b: refs/heads/master c: 1d619f128ba911cd3e6d6ad3475f146eb92f5c27 h: refs/heads/master i: 46689: 421ef61e44216bda9d9d3da3695c290f8f0ce8a8 46687: d85c5948c0d7ec64ed656ff034e081966e32b628 v: v3 --- [refs] | 2 +- trunk/drivers/usb/host/ehci-hcd.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index dc2c3975965a..9dabb96486e7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d0532184086906889f4a0cd92eade1f7be49fbac +refs/heads/master: 1d619f128ba911cd3e6d6ad3475f146eb92f5c27 diff --git a/trunk/drivers/usb/host/ehci-hcd.c b/trunk/drivers/usb/host/ehci-hcd.c index 92c62911f574..185721dba42b 100644 --- a/trunk/drivers/usb/host/ehci-hcd.c +++ b/trunk/drivers/usb/host/ehci-hcd.c @@ -501,6 +501,9 @@ static int ehci_run (struct usb_hcd *hcd) u32 temp; u32 hcc_params; + hcd->uses_new_polling = 1; + hcd->poll_rh = 0; + /* EHCI spec section 4.1 */ if ((retval = ehci_reset(ehci)) != 0) { ehci_mem_cleanup(ehci); @@ -574,7 +577,7 @@ static int ehci_run (struct usb_hcd *hcd) static irqreturn_t ehci_irq (struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); - u32 status; + u32 status, pcd_status = 0; int bh; spin_lock (&ehci->lock); @@ -624,6 +627,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) /* remote wakeup [4.3.1] */ if (status & STS_PCD) { unsigned i = HCS_N_PORTS (ehci->hcs_params); + pcd_status = status; /* resume root hub? */ if (!(ehci_readl(ehci, &ehci->regs->command) & CMD_RUN)) @@ -670,6 +674,8 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) if (bh) ehci_work (ehci); spin_unlock (&ehci->lock); + if (pcd_status & STS_PCD) + usb_hcd_poll_rh_status(hcd); return IRQ_HANDLED; }