diff options
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 20 |
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 | ||