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 /drivers/usb/host/ehci-omap.c | |
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>
Diffstat (limited to 'drivers/usb/host/ehci-omap.c')
-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: |