diff options
| author | Russ Dill <Russ.Dill@ti.com> | 2012-05-04 07:24:47 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-05-04 20:05:45 -0400 |
| commit | 3aa2ae74ba630ec9b98736d64aea8e4cb490861d (patch) | |
| tree | 6c7555c75054c67fb8c9741898d012fc6dbab0fa | |
| parent | 3cccc292524dfd5d77f38f52116b1da4864e3789 (diff) | |
USB: EHCI: OMAP: Finish ehci omap phy reset cycle before adding hcd.
'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0f) created a regression
with Beagleboard xM if booting the kernel after running 'usb start' under u-boot.
Finishing the reset before calling 'usb_add_hcd' fixes the regression. This is most likely due to
usb_add_hcd calling the driver's reset and init functions which expect the hardware to be
up and running.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Cc: stable <stable@vger.kernel.org> [3.4]
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | drivers/usb/host/ehci-omap.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c index 5c78f9e71466..e669c6a7e91e 100644 --- a/drivers/usb/host/ehci-omap.c +++ b/drivers/usb/host/ehci-omap.c | |||
| @@ -242,15 +242,6 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev) | |||
| 242 | 242 | ||
| 243 | ehci_reset(omap_ehci); | 243 | ehci_reset(omap_ehci); |
| 244 | 244 | ||
| 245 | ret = usb_add_hcd(hcd, irq, IRQF_SHARED); | ||
| 246 | if (ret) { | ||
| 247 | dev_err(dev, "failed to add hcd with err %d\n", ret); | ||
| 248 | goto err_add_hcd; | ||
| 249 | } | ||
| 250 | |||
| 251 | /* root ports should always stay powered */ | ||
| 252 | ehci_port_power(omap_ehci, 1); | ||
| 253 | |||
| 254 | if (pdata->phy_reset) { | 245 | if (pdata->phy_reset) { |
| 255 | /* Hold the PHY in RESET for enough time till | 246 | /* Hold the PHY in RESET for enough time till |
| 256 | * PHY is settled and ready | 247 | * PHY is settled and ready |
| @@ -264,6 +255,15 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev) | |||
| 264 | gpio_set_value(pdata->reset_gpio_port[1], 1); | 255 | gpio_set_value(pdata->reset_gpio_port[1], 1); |
| 265 | } | 256 | } |
| 266 | 257 | ||
| 258 | ret = usb_add_hcd(hcd, irq, IRQF_SHARED); | ||
| 259 | if (ret) { | ||
| 260 | dev_err(dev, "failed to add hcd with err %d\n", ret); | ||
| 261 | goto err_add_hcd; | ||
| 262 | } | ||
| 263 | |||
| 264 | /* root ports should always stay powered */ | ||
| 265 | ehci_port_power(omap_ehci, 1); | ||
| 266 | |||
| 267 | return 0; | 267 | return 0; |
| 268 | 268 | ||
| 269 | err_add_hcd: | 269 | err_add_hcd: |
