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.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 7d06e77f6c4f..7b04ca96b585 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -464,7 +464,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
464 while (i--) { 464 while (i--) {
465 temp = ehci_readl(ehci, &ehci->regs->port_status [i]); 465 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
466 if (test_bit(i, &resume_needed)) { 466 if (test_bit(i, &resume_needed)) {
467 temp &= ~(PORT_RWC_BITS | PORT_RESUME); 467 temp &= ~(PORT_RWC_BITS | PORT_SUSPEND | PORT_RESUME);
468 ehci_writel(ehci, temp, &ehci->regs->port_status [i]); 468 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
469 ehci_vdbg (ehci, "resumed port %d\n", i + 1); 469 ehci_vdbg (ehci, "resumed port %d\n", i + 1);
470 } 470 }
@@ -590,7 +590,7 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
590 u32 mask; 590 u32 mask;
591 int ports, i, retval = 1; 591 int ports, i, retval = 1;
592 unsigned long flags; 592 unsigned long flags;
593 u32 ppcd = 0; 593 u32 ppcd = ~0;
594 594
595 /* init status to no-changes */ 595 /* init status to no-changes */
596 buf [0] = 0; 596 buf [0] = 0;
@@ -628,9 +628,10 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
628 628
629 for (i = 0; i < ports; i++) { 629 for (i = 0; i < ports; i++) {
630 /* leverage per-port change bits feature */ 630 /* leverage per-port change bits feature */
631 if (ehci->has_ppcd && !(ppcd & (1 << i))) 631 if (ppcd & (1 << i))
632 continue; 632 temp = ehci_readl(ehci, &ehci->regs->port_status[i]);
633 temp = ehci_readl(ehci, &ehci->regs->port_status [i]); 633 else
634 temp = 0;
634 635
635 /* 636 /*
636 * Return status information even for ports with OWNER set. 637 * Return status information even for ports with OWNER set.
@@ -870,10 +871,9 @@ static int ehci_hub_control (
870 usb_hcd_end_port_resume(&hcd->self, wIndex); 871 usb_hcd_end_port_resume(&hcd->self, wIndex);
871 872
872 /* stop resume signaling */ 873 /* stop resume signaling */
873 temp = ehci_readl(ehci, status_reg); 874 temp &= ~(PORT_RWC_BITS |
874 ehci_writel(ehci, 875 PORT_SUSPEND | PORT_RESUME);
875 temp & ~(PORT_RWC_BITS | PORT_RESUME), 876 ehci_writel(ehci, temp, status_reg);
876 status_reg);
877 clear_bit(wIndex, &ehci->resuming_ports); 877 clear_bit(wIndex, &ehci->resuming_ports);
878 retval = handshake(ehci, status_reg, 878 retval = handshake(ehci, status_reg,
879 PORT_RESUME, 0, 2000 /* 2msec */); 879 PORT_RESUME, 0, 2000 /* 2msec */);
@@ -883,7 +883,7 @@ static int ehci_hub_control (
883 wIndex + 1, retval); 883 wIndex + 1, retval);
884 goto error; 884 goto error;
885 } 885 }
886 temp &= ~(PORT_SUSPEND|PORT_RESUME|(3<<10)); 886 temp = ehci_readl(ehci, status_reg);
887 } 887 }
888 } 888 }
889 889