mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-01 09:13:37 +00:00
dmaengine: imx-sdma: Handle return value of clk_prepare_enable
clk_prepare_enable() can fail here and we must check its return value. Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
2ea659a9ef
commit
fb9caf370f
1 changed files with 18 additions and 5 deletions
|
|
@ -1755,19 +1755,26 @@ static int sdma_probe(struct platform_device *pdev)
|
||||||
if (IS_ERR(sdma->clk_ahb))
|
if (IS_ERR(sdma->clk_ahb))
|
||||||
return PTR_ERR(sdma->clk_ahb);
|
return PTR_ERR(sdma->clk_ahb);
|
||||||
|
|
||||||
clk_prepare(sdma->clk_ipg);
|
ret = clk_prepare(sdma->clk_ipg);
|
||||||
clk_prepare(sdma->clk_ahb);
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = clk_prepare(sdma->clk_ahb);
|
||||||
|
if (ret)
|
||||||
|
goto err_clk;
|
||||||
|
|
||||||
ret = devm_request_irq(&pdev->dev, irq, sdma_int_handler, 0, "sdma",
|
ret = devm_request_irq(&pdev->dev, irq, sdma_int_handler, 0, "sdma",
|
||||||
sdma);
|
sdma);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto err_irq;
|
||||||
|
|
||||||
sdma->irq = irq;
|
sdma->irq = irq;
|
||||||
|
|
||||||
sdma->script_addrs = kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL);
|
sdma->script_addrs = kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL);
|
||||||
if (!sdma->script_addrs)
|
if (!sdma->script_addrs) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto err_irq;
|
||||||
|
}
|
||||||
|
|
||||||
/* initially no scripts available */
|
/* initially no scripts available */
|
||||||
saddr_arr = (s32 *)sdma->script_addrs;
|
saddr_arr = (s32 *)sdma->script_addrs;
|
||||||
|
|
@ -1882,6 +1889,10 @@ err_register:
|
||||||
dma_async_device_unregister(&sdma->dma_device);
|
dma_async_device_unregister(&sdma->dma_device);
|
||||||
err_init:
|
err_init:
|
||||||
kfree(sdma->script_addrs);
|
kfree(sdma->script_addrs);
|
||||||
|
err_irq:
|
||||||
|
clk_unprepare(sdma->clk_ahb);
|
||||||
|
err_clk:
|
||||||
|
clk_unprepare(sdma->clk_ipg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1893,6 +1904,8 @@ static int sdma_remove(struct platform_device *pdev)
|
||||||
devm_free_irq(&pdev->dev, sdma->irq, sdma);
|
devm_free_irq(&pdev->dev, sdma->irq, sdma);
|
||||||
dma_async_device_unregister(&sdma->dma_device);
|
dma_async_device_unregister(&sdma->dma_device);
|
||||||
kfree(sdma->script_addrs);
|
kfree(sdma->script_addrs);
|
||||||
|
clk_unprepare(sdma->clk_ahb);
|
||||||
|
clk_unprepare(sdma->clk_ipg);
|
||||||
/* Kill the tasklet */
|
/* Kill the tasklet */
|
||||||
for (i = 0; i < MAX_DMA_CHANNELS; i++) {
|
for (i = 0; i < MAX_DMA_CHANNELS; i++) {
|
||||||
struct sdma_channel *sdmac = &sdma->channel[i];
|
struct sdma_channel *sdmac = &sdma->channel[i];
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue