diff options
author | Sebastian Andrzej Siewior | 2013-10-16 12:50:08 +0200 |
---|---|---|
committer | Felipe Balbi | 2013-10-17 18:32:08 +0200 |
commit | 4805414705df77d946b41df4f8b315e2b089eec4 (patch) | |
tree | 6473991e3baed083623eea274af5472327347cea /drivers/usb/musb/musb_core.c | |
parent | usb: musb: core: Call dma_controller_destroy() in error path only once. (diff) | |
download | kernel-qcow2-linux-4805414705df77d946b41df4f8b315e2b089eec4.tar.gz kernel-qcow2-linux-4805414705df77d946b41df4f8b315e2b089eec4.tar.xz kernel-qcow2-linux-4805414705df77d946b41df4f8b315e2b089eec4.zip |
usb: musb: cppi41: allow to defer probing if DMA isn't yet available
If everything (musb, cppi41, phy) is built-in then musb will start
without the dma engine printing only
|musb-hdrc musb-hdrc.0.auto: Falied to request rx1.
The reason for this is that the musb device structs are created & probed
before those of the cppi41 device. So the cppi41 device is probed too
late.
As a workaround for this allow the musb_cppi41 part to defer the probe
if everything is fine except for the missing DMA controller. In case of
another error we continue.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 7fd213785d52..4db987f07f67 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1838,8 +1838,13 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) pm_runtime_get_sync(musb->controller); - if (use_dma && dev->dma_mask) + if (use_dma && dev->dma_mask) { musb->dma_controller = dma_controller_create(musb, musb->mregs); + if (IS_ERR(musb->dma_controller)) { + status = PTR_ERR(musb->dma_controller); + goto fail2_5; + } + } /* be sure interrupts are disabled before connecting ISR */ musb_platform_disable(musb); @@ -1932,6 +1937,7 @@ fail4: fail3: if (musb->dma_controller) dma_controller_destroy(musb->dma_controller); +fail2_5: pm_runtime_put_sync(musb->controller); fail2: |