summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPeter Chen <peter.chen@freescale.com>2014-01-24 14:59:30 +0800
committerPeter Chen <peter.chen@freescale.com>2014-01-24 17:23:58 +0800
commit830e4457155d7df2dce35bb7a91fa1f11a34ceca (patch)
tree1cafa6efd17f9b84b7bbd455493031a5c4286d8a /drivers
parent93e5d4ce0373789ace11c1e5c5e91cab73790d48 (diff)
ENGR00296519 USB: EHCI: wait more than 3ms until the device enters full-speed idle
If the high-speed device does not enter full-speed idle after wakeup on disconnect logic has effected, there will be an unexpected disconnect wakeup interrupt due to the bus is still SE0. Signed-off-by: Peter Chen <peter.chen@freescale.com>
Diffstat (limited to 'drivers')
-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 c17e60be0665..8cca8e15e76f 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -289,6 +289,15 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
ehci_vdbg (ehci, "port %d, %08x -> %08x\n",
port + 1, t1, t2);
ehci_writel(ehci, t2, reg);
+ if ((t2 & PORT_WKDISC_E)
+ && (ehci_port_speed(ehci, t2) ==
+ USB_PORT_STAT_HIGH_SPEED))
+ /*
+ * If the high-speed device has not switched
+ * to full-speed idle before WKDISC_E has
+ * effected, there will be a WKDISC event.
+ */
+ mdelay(4);
changed = 1;
}
}