]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
spi: atmel-quadspi: Use `devm_dma_request_chan()`
authorBence Csókás <csokas.bence@prolan.hu>
Tue, 10 Jun 2025 08:22:54 +0000 (10:22 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 26 Jun 2025 23:29:14 +0000 (00:29 +0100)
Leave releasing of DMA channels up to the devm facilities. This way we can
eliminate the rest of the "goto ladder".

Signed-off-by: Bence Csókás <csokas.bence@prolan.hu>
Link: https://patch.msgid.link/20250610082256.400492-3-csokas.bence@prolan.hu
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/atmel-quadspi.c

index 2f67973242279bb5433ddee0299a3786e0073f8a..fc555c0ce52e147371cadbcd500a05f16a510065 100644 (file)
@@ -1285,18 +1285,21 @@ static int atmel_qspi_dma_init(struct spi_controller *ctrl)
        struct atmel_qspi *aq = spi_controller_get_devdata(ctrl);
        int ret;
 
-       aq->rx_chan = dma_request_chan(&aq->pdev->dev, "rx");
+       aq->rx_chan = devm_dma_request_chan(&aq->pdev->dev, "rx");
        if (IS_ERR(aq->rx_chan)) {
                ret = dev_err_probe(&aq->pdev->dev, PTR_ERR(aq->rx_chan),
                                    "RX DMA channel is not available\n");
-               goto null_rx_chan;
+               aq->rx_chan = NULL;
+               return ret;
        }
 
-       aq->tx_chan = dma_request_chan(&aq->pdev->dev, "tx");
+       aq->tx_chan = devm_dma_request_chan(&aq->pdev->dev, "tx");
        if (IS_ERR(aq->tx_chan)) {
                ret = dev_err_probe(&aq->pdev->dev, PTR_ERR(aq->tx_chan),
                                    "TX DMA channel is not available\n");
-               goto release_rx_chan;
+               aq->rx_chan = NULL;
+               aq->tx_chan = NULL;
+               return ret;
        }
 
        ctrl->dma_rx = aq->rx_chan;
@@ -1307,21 +1310,6 @@ static int atmel_qspi_dma_init(struct spi_controller *ctrl)
                 dma_chan_name(aq->tx_chan), dma_chan_name(aq->rx_chan));
 
        return 0;
-
-release_rx_chan:
-       dma_release_channel(aq->rx_chan);
-       aq->tx_chan = NULL;
-null_rx_chan:
-       aq->rx_chan = NULL;
-       return ret;
-}
-
-static void atmel_qspi_dma_release(struct atmel_qspi *aq)
-{
-       if (aq->rx_chan)
-               dma_release_channel(aq->rx_chan);
-       if (aq->tx_chan)
-               dma_release_channel(aq->tx_chan);
 }
 
 static const struct atmel_qspi_ops atmel_qspi_ops = {
@@ -1426,14 +1414,13 @@ static int atmel_qspi_probe(struct platform_device *pdev)
 
        /* Request the IRQ */
        irq = platform_get_irq(pdev, 0);
-       if (irq < 0) {
-               err = irq;
-               goto dma_release;
-       }
+       if (irq < 0)
+               return irq;
+
        err = devm_request_irq(&pdev->dev, irq, atmel_qspi_interrupt,
                               0, dev_name(&pdev->dev), aq);
        if (err)
-               goto dma_release;
+               return err;
 
        pm_runtime_set_autosuspend_delay(&pdev->dev, 500);
        pm_runtime_use_autosuspend(&pdev->dev);
@@ -1442,22 +1429,16 @@ static int atmel_qspi_probe(struct platform_device *pdev)
 
        err = atmel_qspi_init(aq);
        if (err)
-               goto dma_release;
+               return err;
 
        err = spi_register_controller(ctrl);
        if (err)
-               goto dma_release;
+               return err;
 
        pm_runtime_mark_last_busy(&pdev->dev);
        pm_runtime_put_autosuspend(&pdev->dev);
 
        return 0;
-
-dma_release:
-       if (aq->caps->has_dma)
-               atmel_qspi_dma_release(aq);
-
-       return err;
 }
 
 static int atmel_qspi_sama7g5_suspend(struct atmel_qspi *aq)
@@ -1507,9 +1488,6 @@ static void atmel_qspi_remove(struct platform_device *pdev)
 
        ret = pm_runtime_get_sync(&pdev->dev);
        if (ret >= 0) {
-               if (aq->caps->has_dma)
-                       atmel_qspi_dma_release(aq);
-
                if (aq->caps->has_gclk) {
                        ret = atmel_qspi_sama7g5_suspend(aq);
                        if (ret)