aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-hub.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
-rw-r--r--drivers/usb/host/ehci-hub.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 8a28dae8a375..84e792d71c22 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -603,6 +603,7 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
603 u32 mask; 603 u32 mask;
604 int ports, i, retval = 1; 604 int ports, i, retval = 1;
605 unsigned long flags; 605 unsigned long flags;
606 u32 ppcd = 0;
606 607
607 /* if !USB_SUSPEND, root hub timers won't get shut down ... */ 608 /* if !USB_SUSPEND, root hub timers won't get shut down ... */
608 if (!HC_IS_RUNNING(hcd->state)) 609 if (!HC_IS_RUNNING(hcd->state))
@@ -632,7 +633,15 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
632 633
633 /* port N changes (bit N)? */ 634 /* port N changes (bit N)? */
634 spin_lock_irqsave (&ehci->lock, flags); 635 spin_lock_irqsave (&ehci->lock, flags);
636
637 /* get per-port change detect bits */
638 if (ehci->has_ppcd)
639 ppcd = ehci_readl(ehci, &ehci->regs->status) >> 16;
640
635 for (i = 0; i < ports; i++) { 641 for (i = 0; i < ports; i++) {
642 /* leverage per-port change bits feature */
643 if (ehci->has_ppcd && !(ppcd & (1 << i)))
644 continue;
636 temp = ehci_readl(ehci, &ehci->regs->port_status [i]); 645 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
637 646
638 /* 647 /*