diff options
author | Boris Todorov <boris.st.todorov@gmail.com> | 2011-07-11 05:03:33 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-08 15:34:47 -0400 |
commit | 77636c86a600b83de01719efad83567e46d7e8ce (patch) | |
tree | 22a1643e71dd0c2fc43fde65e9ee211635637002 /drivers/usb/host/ehci-hub.c | |
parent | 1862cdd542025218f7a390b7e6ddc83a1362d1e0 (diff) |
USB: EHCI: Fix test mode sequence
The sequence to put port in test mode is not complete.
According EHCI specification all enabled ports must be
put in suspend.
Signed-off-by: Boris Todorov <boris.st.todorov@gmail.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index bf2c8f65e1ae..e051b30c1847 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
@@ -1046,7 +1046,19 @@ static int ehci_hub_control ( | |||
1046 | if (!selector || selector > 5) | 1046 | if (!selector || selector > 5) |
1047 | goto error; | 1047 | goto error; |
1048 | ehci_quiesce(ehci); | 1048 | ehci_quiesce(ehci); |
1049 | |||
1050 | /* Put all enabled ports into suspend */ | ||
1051 | while (ports--) { | ||
1052 | u32 __iomem *sreg = | ||
1053 | &ehci->regs->port_status[ports]; | ||
1054 | |||
1055 | temp = ehci_readl(ehci, sreg) & ~PORT_RWC_BITS; | ||
1056 | if (temp & PORT_PE) | ||
1057 | ehci_writel(ehci, temp | PORT_SUSPEND, | ||
1058 | sreg); | ||
1059 | } | ||
1049 | ehci_halt(ehci); | 1060 | ehci_halt(ehci); |
1061 | temp = ehci_readl(ehci, status_reg); | ||
1050 | temp |= selector << 16; | 1062 | temp |= selector << 16; |
1051 | ehci_writel(ehci, temp, status_reg); | 1063 | ehci_writel(ehci, temp, status_reg); |
1052 | break; | 1064 | break; |