mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 07:01:57 +00:00
dma: cppi41: Switch to using managed resource in probe
This change uses managed resource APIs to allocate resources such as, mem, irq in order to simplify the driver unload or failure cases Signed-off-by: Kiran Padwal <kiran.padwal@smartplayin.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
6e4a2a83f9
commit
f0f3b5fa75
@ -938,7 +938,7 @@ static int cppi41_dma_probe(struct platform_device *pdev)
|
|||||||
if (!glue_info)
|
if (!glue_info)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
cdd = kzalloc(sizeof(*cdd), GFP_KERNEL);
|
cdd = devm_kzalloc(&pdev->dev, sizeof(*cdd), GFP_KERNEL);
|
||||||
if (!cdd)
|
if (!cdd)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@ -959,10 +959,8 @@ static int cppi41_dma_probe(struct platform_device *pdev)
|
|||||||
cdd->qmgr_mem = of_iomap(dev->of_node, 3);
|
cdd->qmgr_mem = of_iomap(dev->of_node, 3);
|
||||||
|
|
||||||
if (!cdd->usbss_mem || !cdd->ctrl_mem || !cdd->sched_mem ||
|
if (!cdd->usbss_mem || !cdd->ctrl_mem || !cdd->sched_mem ||
|
||||||
!cdd->qmgr_mem) {
|
!cdd->qmgr_mem)
|
||||||
ret = -ENXIO;
|
return -ENXIO;
|
||||||
goto err_remap;
|
|
||||||
}
|
|
||||||
|
|
||||||
pm_runtime_enable(dev);
|
pm_runtime_enable(dev);
|
||||||
ret = pm_runtime_get_sync(dev);
|
ret = pm_runtime_get_sync(dev);
|
||||||
@ -989,7 +987,7 @@ static int cppi41_dma_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
cppi_writel(USBSS_IRQ_PD_COMP, cdd->usbss_mem + USBSS_IRQ_ENABLER);
|
cppi_writel(USBSS_IRQ_PD_COMP, cdd->usbss_mem + USBSS_IRQ_ENABLER);
|
||||||
|
|
||||||
ret = request_irq(irq, glue_info->isr, IRQF_SHARED,
|
ret = devm_request_irq(&pdev->dev, irq, glue_info->isr, IRQF_SHARED,
|
||||||
dev_name(dev), cdd);
|
dev_name(dev), cdd);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_irq;
|
goto err_irq;
|
||||||
@ -1009,7 +1007,6 @@ static int cppi41_dma_probe(struct platform_device *pdev)
|
|||||||
err_of:
|
err_of:
|
||||||
dma_async_device_unregister(&cdd->ddev);
|
dma_async_device_unregister(&cdd->ddev);
|
||||||
err_dma_reg:
|
err_dma_reg:
|
||||||
free_irq(irq, cdd);
|
|
||||||
err_irq:
|
err_irq:
|
||||||
cppi_writel(0, cdd->usbss_mem + USBSS_IRQ_CLEARR);
|
cppi_writel(0, cdd->usbss_mem + USBSS_IRQ_CLEARR);
|
||||||
cleanup_chans(cdd);
|
cleanup_chans(cdd);
|
||||||
@ -1023,8 +1020,6 @@ err_get_sync:
|
|||||||
iounmap(cdd->ctrl_mem);
|
iounmap(cdd->ctrl_mem);
|
||||||
iounmap(cdd->sched_mem);
|
iounmap(cdd->sched_mem);
|
||||||
iounmap(cdd->qmgr_mem);
|
iounmap(cdd->qmgr_mem);
|
||||||
err_remap:
|
|
||||||
kfree(cdd);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1036,7 +1031,7 @@ static int cppi41_dma_remove(struct platform_device *pdev)
|
|||||||
dma_async_device_unregister(&cdd->ddev);
|
dma_async_device_unregister(&cdd->ddev);
|
||||||
|
|
||||||
cppi_writel(0, cdd->usbss_mem + USBSS_IRQ_CLEARR);
|
cppi_writel(0, cdd->usbss_mem + USBSS_IRQ_CLEARR);
|
||||||
free_irq(cdd->irq, cdd);
|
devm_free_irq(&pdev->dev, cdd->irq, cdd);
|
||||||
cleanup_chans(cdd);
|
cleanup_chans(cdd);
|
||||||
deinit_cppi41(&pdev->dev, cdd);
|
deinit_cppi41(&pdev->dev, cdd);
|
||||||
iounmap(cdd->usbss_mem);
|
iounmap(cdd->usbss_mem);
|
||||||
@ -1045,7 +1040,6 @@ static int cppi41_dma_remove(struct platform_device *pdev)
|
|||||||
iounmap(cdd->qmgr_mem);
|
iounmap(cdd->qmgr_mem);
|
||||||
pm_runtime_put(&pdev->dev);
|
pm_runtime_put(&pdev->dev);
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
kfree(cdd);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user