spi: atmel: Use dma_request_chan() instead dma_request_slave_channel()
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 12 Dec 2019 13:55:42 +0000 (15:55 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 16 Dec 2019 11:56:07 +0000 (11:56 +0000)
dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.

By using dma_request_chan() directly the driver can support deferred
probing against DMA.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Link: https://lore.kernel.org/r/20191212135550.4634-2-peter.ujfalusi@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-atmel.c

index 56f0ca3..013458c 100644 (file)
@@ -514,26 +514,19 @@ static int atmel_spi_configure_dma(struct spi_master *master,
        master->dma_tx = dma_request_chan(dev, "tx");
        if (IS_ERR(master->dma_tx)) {
                err = PTR_ERR(master->dma_tx);
-               if (err == -EPROBE_DEFER) {
-                       dev_warn(dev, "no DMA channel available at the moment\n");
-                       goto error_clear;
-               }
-               dev_err(dev,
-                       "DMA TX channel not available, SPI unable to use DMA\n");
-               err = -EBUSY;
+               if (err != -EPROBE_DEFER)
+                       dev_err(dev, "No TX DMA channel, DMA is disabled\n");
                goto error_clear;
        }
 
-       /*
-        * No reason to check EPROBE_DEFER here since we have already requested
-        * tx channel. If it fails here, it's for another reason.
-        */
-       master->dma_rx = dma_request_slave_channel(dev, "rx");
-
-       if (!master->dma_rx) {
-               dev_err(dev,
-                       "DMA RX channel not available, SPI unable to use DMA\n");
-               err = -EBUSY;
+       master->dma_rx = dma_request_chan(dev, "rx");
+       if (IS_ERR(master->dma_rx)) {
+               err = PTR_ERR(master->dma_rx);
+               /*
+                * No reason to check EPROBE_DEFER here since we have already
+                * requested tx channel.
+                */
+               dev_err(dev, "No RX DMA channel, DMA is disabled\n");
                goto error;
        }
 
@@ -548,7 +541,7 @@ static int atmel_spi_configure_dma(struct spi_master *master,
 
        return 0;
 error:
-       if (master->dma_rx)
+       if (!IS_ERR(master->dma_rx))
                dma_release_channel(master->dma_rx);
        if (!IS_ERR(master->dma_tx))
                dma_release_channel(master->dma_tx);