[PATCH v2 5/5] dmaengine: ti: omap-dma: use devm for dmaengine registration

From: Rosen Penev

Date: Sun May 31 2026 - 20:36:34 EST


Use dmaenginem_async_device_register() instead of
dma_async_device_register() so that unregistration is handled
automatically by devres on probe failure or driver detach. This
lets us drop:
- The explicit dma_async_device_unregister() in the
of_dma_controller_register error path (devres unwind runs it
after omap_dma_free() has emptied the channels list, making the
iteration a safe no-op).
- The explicit dma_async_device_unregister() and the redundant
devm_free_irq() call in the remove path (devres handles both in
the correct order after the remove callback returns).

Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
---
drivers/dma/ti/omap-dma.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
index 8c32b7ab50f6..4bf34569d82b 100644
--- a/drivers/dma/ti/omap-dma.c
+++ b/drivers/dma/ti/omap-dma.c
@@ -1813,7 +1813,7 @@ static int omap_dma_probe(struct platform_device *pdev)
}
}

- rc = dma_async_device_register(&od->ddev);
+ rc = dmaenginem_async_device_register(&od->ddev);
if (rc) {
pr_warn("OMAP-DMA: failed to register slave DMA engine device: %d\n",
rc);
@@ -1838,7 +1838,6 @@ static int omap_dma_probe(struct platform_device *pdev)
of_dma_simple_xlate, &omap_dma_info);
if (rc) {
pr_warn("OMAP-DMA: failed to register DMA controller\n");
- dma_async_device_unregister(&od->ddev);
spin_lock_irq(&od->irq_lock);
od->irq_enable_mask = 0;
omap_dma_glbl_write(od, IRQENABLE_L1, 0);
@@ -1870,7 +1869,6 @@ static int omap_dma_probe(struct platform_device *pdev)
static void omap_dma_remove(struct platform_device *pdev)
{
struct omap_dmadev *od = platform_get_drvdata(pdev);
- int irq;

if (od->cfg->needs_busy_check || od->cfg->may_lose_context)
cpu_pm_unregister_notifier(&od->nb);
@@ -1878,8 +1876,6 @@ static void omap_dma_remove(struct platform_device *pdev)
if (pdev->dev.of_node)
of_dma_controller_free(pdev->dev.of_node);

- dma_async_device_unregister(&od->ddev);
-
if (!omap_dma_legacy(od)) {
spin_lock_irq(&od->irq_lock);
od->irq_enable_mask = 0;
@@ -1888,10 +1884,6 @@ static void omap_dma_remove(struct platform_device *pdev)
omap_dma_glbl_read(od, IRQENABLE_L1);
}

- irq = platform_get_irq(pdev, 1);
- if (irq > 0)
- devm_free_irq(&pdev->dev, irq, od);
-
omap_dma_free(od);

if (od->ll123_supported)
--
2.54.0