summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorPeter Chen <peter.chen@freescale.com>2015-07-21 14:41:59 +0800
committerNitin Garg <nitin.garg@freescale.com>2015-09-17 09:24:04 -0500
commitff3181ea495367e587313e9ab15ae95b616a085a (patch)
tree75c1347dc4a8ffeee6083595776f423daa260da1 /drivers/usb
parent44b016f3d0fb1eca04bedb9f856b330282151d23 (diff)
MLK-11269-2 usb: chipidea: host: avoid check PORT_SUSPEND wrongly
At some situations, the ehci_bus_suspend may not set PORT_SUSPEND due to port is not enabled, so add flag ehci->bus_suspended to check if ehci_bus_suspend set PORT_SUSPEND or not. We see "ci_hdrc ci_hdrc.0: timeout waiting for SUSPEND" wrongly when plug in an unsupported usb device, in that case, the PORT_PE is cleared and bus_suspend is called. Signed-off-by: Peter Chen <peter.chen@freescale.com> (cherry picked from commit 82cfe6c31ee55e5aab1a057a5aaf853b7bb6cd07)
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/chipidea/host.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
index 80af4c22aaf9..279bc8b97242 100644
--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -508,7 +508,8 @@ static int ci_ehci_bus_suspend(struct usb_hcd *hcd)
* If a transaction is in progress, there may be a delay in
* suspending the port. Poll until the port is suspended.
*/
- if (ehci_handshake(ehci, reg, PORT_SUSPEND,
+ if (test_bit(port, &ehci->bus_suspended) &&
+ ehci_handshake(ehci, reg, PORT_SUSPEND,
PORT_SUSPEND, 5000))
ehci_err(ehci, "timeout waiting for SUSPEND\n");