diff options
Diffstat (limited to 'drivers/usb/host/ehci-hcd.c')
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 92c62911f574..185721dba42b 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
@@ -501,6 +501,9 @@ static int ehci_run (struct usb_hcd *hcd) | |||
501 | u32 temp; | 501 | u32 temp; |
502 | u32 hcc_params; | 502 | u32 hcc_params; |
503 | 503 | ||
504 | hcd->uses_new_polling = 1; | ||
505 | hcd->poll_rh = 0; | ||
506 | |||
504 | /* EHCI spec section 4.1 */ | 507 | /* EHCI spec section 4.1 */ |
505 | if ((retval = ehci_reset(ehci)) != 0) { | 508 | if ((retval = ehci_reset(ehci)) != 0) { |
506 | ehci_mem_cleanup(ehci); | 509 | ehci_mem_cleanup(ehci); |
@@ -574,7 +577,7 @@ static int ehci_run (struct usb_hcd *hcd) | |||
574 | static irqreturn_t ehci_irq (struct usb_hcd *hcd) | 577 | static irqreturn_t ehci_irq (struct usb_hcd *hcd) |
575 | { | 578 | { |
576 | struct ehci_hcd *ehci = hcd_to_ehci (hcd); | 579 | struct ehci_hcd *ehci = hcd_to_ehci (hcd); |
577 | u32 status; | 580 | u32 status, pcd_status = 0; |
578 | int bh; | 581 | int bh; |
579 | 582 | ||
580 | spin_lock (&ehci->lock); | 583 | spin_lock (&ehci->lock); |
@@ -624,6 +627,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) | |||
624 | /* remote wakeup [4.3.1] */ | 627 | /* remote wakeup [4.3.1] */ |
625 | if (status & STS_PCD) { | 628 | if (status & STS_PCD) { |
626 | unsigned i = HCS_N_PORTS (ehci->hcs_params); | 629 | unsigned i = HCS_N_PORTS (ehci->hcs_params); |
630 | pcd_status = status; | ||
627 | 631 | ||
628 | /* resume root hub? */ | 632 | /* resume root hub? */ |
629 | if (!(ehci_readl(ehci, &ehci->regs->command) & CMD_RUN)) | 633 | if (!(ehci_readl(ehci, &ehci->regs->command) & CMD_RUN)) |
@@ -670,6 +674,8 @@ dead: | |||
670 | if (bh) | 674 | if (bh) |
671 | ehci_work (ehci); | 675 | ehci_work (ehci); |
672 | spin_unlock (&ehci->lock); | 676 | spin_unlock (&ehci->lock); |
677 | if (pcd_status & STS_PCD) | ||
678 | usb_hcd_poll_rh_status(hcd); | ||
673 | return IRQ_HANDLED; | 679 | return IRQ_HANDLED; |
674 | } | 680 | } |
675 | 681 | ||