USB: fix occasional ULPI timeouts with ehci-mxc
On various mxc boards, the intial ULPI reads resulted in a timeout which prevented the transceiver to be identified and thus the ehci device to be probed. Initializing the hardware lines connected to the transceiver (through pdata->init call) before actually enabling clocks and configuring registers in the devices fixes this problem. Signed-off-by: Valentin Longchamp <valentin.longchamp@epfl.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
cabe6cc2be
Коммит
2f0e40aba1
|
@ -162,6 +162,17 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
|
|||
goto err_ioremap;
|
||||
}
|
||||
|
||||
/* call platform specific init function */
|
||||
if (pdata->init) {
|
||||
ret = pdata->init(pdev);
|
||||
if (ret) {
|
||||
dev_err(dev, "platform init failed\n");
|
||||
goto err_init;
|
||||
}
|
||||
/* platforms need some time to settle changed IO settings */
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
/* enable clocks */
|
||||
priv->usbclk = clk_get(dev, "usb");
|
||||
if (IS_ERR(priv->usbclk)) {
|
||||
|
@ -192,18 +203,6 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
|
|||
if (ret < 0)
|
||||
goto err_init;
|
||||
|
||||
/* call platform specific init function */
|
||||
if (pdata->init) {
|
||||
ret = pdata->init(pdev);
|
||||
if (ret) {
|
||||
dev_err(dev, "platform init failed\n");
|
||||
goto err_init;
|
||||
}
|
||||
}
|
||||
|
||||
/* most platforms need some time to settle changed IO settings */
|
||||
mdelay(10);
|
||||
|
||||
/* Initialize the transceiver */
|
||||
if (pdata->otg) {
|
||||
pdata->otg->io_priv = hcd->regs + ULPI_VIEWPORT_OFFSET;
|
||||
|
|
Загрузка…
Ссылка в новой задаче