diff options
-rw-r--r-- | drivers/usb/host/ehci-omap.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c index 992d963b91fc..8905ba4e482a 100644 --- a/drivers/usb/host/ehci-omap.c +++ b/drivers/usb/host/ehci-omap.c | |||
@@ -116,6 +116,8 @@ | |||
116 | #define OMAP_UHH_DEBUG_CSR (0x44) | 116 | #define OMAP_UHH_DEBUG_CSR (0x44) |
117 | 117 | ||
118 | /* EHCI Register Set */ | 118 | /* EHCI Register Set */ |
119 | #define EHCI_INSNREG04 (0xA0) | ||
120 | #define EHCI_INSNREG04_DISABLE_UNSUSPEND (1 << 5) | ||
119 | #define EHCI_INSNREG05_ULPI (0xA4) | 121 | #define EHCI_INSNREG05_ULPI (0xA4) |
120 | #define EHCI_INSNREG05_ULPI_CONTROL_SHIFT 31 | 122 | #define EHCI_INSNREG05_ULPI_CONTROL_SHIFT 31 |
121 | #define EHCI_INSNREG05_ULPI_PORTSEL_SHIFT 24 | 123 | #define EHCI_INSNREG05_ULPI_PORTSEL_SHIFT 24 |
@@ -382,6 +384,18 @@ static int omap_start_ehc(struct ehci_hcd_omap *omap, struct usb_hcd *hcd) | |||
382 | dev_dbg(omap->dev, "UHH setup done, uhh_hostconfig=%x\n", reg); | 384 | dev_dbg(omap->dev, "UHH setup done, uhh_hostconfig=%x\n", reg); |
383 | 385 | ||
384 | 386 | ||
387 | /* | ||
388 | * An undocumented "feature" in the OMAP3 EHCI controller, | ||
389 | * causes suspended ports to be taken out of suspend when | ||
390 | * the USBCMD.Run/Stop bit is cleared (for example when | ||
391 | * we do ehci_bus_suspend). | ||
392 | * This breaks suspend-resume if the root-hub is allowed | ||
393 | * to suspend. Writing 1 to this undocumented register bit | ||
394 | * disables this feature and restores normal behavior. | ||
395 | */ | ||
396 | ehci_omap_writel(omap->ehci_base, EHCI_INSNREG04, | ||
397 | EHCI_INSNREG04_DISABLE_UNSUSPEND); | ||
398 | |||
385 | if ((omap->port_mode[0] == EHCI_HCD_OMAP_MODE_TLL) || | 399 | if ((omap->port_mode[0] == EHCI_HCD_OMAP_MODE_TLL) || |
386 | (omap->port_mode[1] == EHCI_HCD_OMAP_MODE_TLL) || | 400 | (omap->port_mode[1] == EHCI_HCD_OMAP_MODE_TLL) || |
387 | (omap->port_mode[2] == EHCI_HCD_OMAP_MODE_TLL)) { | 401 | (omap->port_mode[2] == EHCI_HCD_OMAP_MODE_TLL)) { |