]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dmaengine: tegra: Use managed DMA controller registration
authorAkhil R <akhilrajeev@nvidia.com>
Tue, 31 Mar 2026 10:23:00 +0000 (15:53 +0530)
committerVinod Koul <vkoul@kernel.org>
Thu, 4 Jun 2026 06:51:19 +0000 (12:21 +0530)
Switch to managed registration in probe. This simplifies the error
paths in the probe and also removes the requirement of the driver
remove function.

Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
Suggested-by: Frank Li <frank.li@nxp.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://patch.msgid.link/20260331102303.33181-8-akhilrajeev@nvidia.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/tegra186-gpc-dma.c

index 3ac43ad19ed60f287497fe582ca45d3ebe23165c..9bea2ffb3b9e5bd3e01d8fa70db09c6301b05b2a 100644 (file)
@@ -1483,37 +1483,27 @@ static int tegra_dma_probe(struct platform_device *pdev)
        tdma->dma_dev.device_synchronize = tegra_dma_chan_synchronize;
        tdma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
 
-       ret = dma_async_device_register(&tdma->dma_dev);
+       ret = dmaenginem_async_device_register(&tdma->dma_dev);
        if (ret < 0) {
                dev_err_probe(&pdev->dev, ret,
                              "GPC DMA driver registration failed\n");
                return ret;
        }
 
-       ret = of_dma_controller_register(pdev->dev.of_node,
-                                        tegra_dma_of_xlate, tdma);
+       ret = devm_of_dma_controller_register(&pdev->dev, pdev->dev.of_node,
+                                             tegra_dma_of_xlate, tdma);
        if (ret < 0) {
                dev_err_probe(&pdev->dev, ret,
                              "GPC DMA OF registration failed\n");
-
-               dma_async_device_unregister(&tdma->dma_dev);
                return ret;
        }
 
-       dev_info(&pdev->dev, "GPC DMA driver register %lu channels\n",
+       dev_info(&pdev->dev, "GPC DMA driver registered %lu channels\n",
                 hweight_long(tdma->chan_mask));
 
        return 0;
 }
 
-static void tegra_dma_remove(struct platform_device *pdev)
-{
-       struct tegra_dma *tdma = platform_get_drvdata(pdev);
-
-       of_dma_controller_free(pdev->dev.of_node);
-       dma_async_device_unregister(&tdma->dma_dev);
-}
-
 static int __maybe_unused tegra_dma_pm_suspend(struct device *dev)
 {
        struct tegra_dma *tdma = dev_get_drvdata(dev);
@@ -1564,7 +1554,6 @@ static struct platform_driver tegra_dma_driver = {
                .of_match_table = tegra_dma_of_match,
        },
        .probe          = tegra_dma_probe,
-       .remove         = tegra_dma_remove,
 };
 
 module_platform_driver(tegra_dma_driver);