spi: pic32: Retire dma_request_slave_channel_compat()
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 21 Nov 2019 09:27:03 +0000 (11:27 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 22 Nov 2019 19:53:41 +0000 (19:53 +0000)
There is no reason to use the dma_request_slave_channel_compat() as no
filter function and parameter is provided.

Switch the driver to use dma_request_chan() instead and add support for
deferred probing against DMA channel.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Reviewed-by: Vinod Koul <vkoul@kernel.org>
Link: https://lore.kernel.org/r/20191121092703.30465-1-peter.ujfalusi@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-pic32.c

index 69f517e..156961b 100644 (file)
@@ -606,25 +606,30 @@ static void pic32_spi_cleanup(struct spi_device *spi)
        gpio_direction_output(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
 }
 
-static void pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)
+static int pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)
 {
        struct spi_master *master = pic32s->master;
-       dma_cap_mask_t mask;
+       int ret = 0;
 
-       dma_cap_zero(mask);
-       dma_cap_set(DMA_SLAVE, mask);
+       master->dma_rx = dma_request_chan(dev, "spi-rx");
+       if (IS_ERR(master->dma_rx)) {
+               if (PTR_ERR(master->dma_rx) == -EPROBE_DEFER)
+                       ret = -EPROBE_DEFER;
+               else
+                       dev_warn(dev, "RX channel not found.\n");
 
-       master->dma_rx = dma_request_slave_channel_compat(mask, NULL, NULL,
-                                                         dev, "spi-rx");
-       if (!master->dma_rx) {
-               dev_warn(dev, "RX channel not found.\n");
+               master->dma_rx = NULL;
                goto out_err;
        }
 
-       master->dma_tx = dma_request_slave_channel_compat(mask, NULL, NULL,
-                                                         dev, "spi-tx");
-       if (!master->dma_tx) {
-               dev_warn(dev, "TX channel not found.\n");
+       master->dma_tx = dma_request_chan(dev, "spi-tx");
+       if (IS_ERR(master->dma_tx)) {
+               if (PTR_ERR(master->dma_tx) == -EPROBE_DEFER)
+                       ret = -EPROBE_DEFER;
+               else
+                       dev_warn(dev, "TX channel not found.\n");
+
+               master->dma_tx = NULL;
                goto out_err;
        }
 
@@ -634,14 +639,20 @@ static void pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)
        /* DMA chnls allocated and prepared */
        set_bit(PIC32F_DMA_PREP, &pic32s->flags);
 
-       return;
+       return 0;
 
 out_err:
-       if (master->dma_rx)
+       if (master->dma_rx) {
                dma_release_channel(master->dma_rx);
+               master->dma_rx = NULL;
+       }
 
-       if (master->dma_tx)
+       if (master->dma_tx) {
                dma_release_channel(master->dma_tx);
+               master->dma_tx = NULL;
+       }
+
+       return ret;
 }
 
 static void pic32_spi_dma_unprep(struct pic32_spi *pic32s)
@@ -776,7 +787,10 @@ static int pic32_spi_probe(struct platform_device *pdev)
        master->unprepare_transfer_hardware     = pic32_spi_unprepare_hardware;
 
        /* optional DMA support */
-       pic32_spi_dma_prep(pic32s, &pdev->dev);
+       ret = pic32_spi_dma_prep(pic32s, &pdev->dev);
+       if (ret)
+               goto err_bailout;
+
        if (test_bit(PIC32F_DMA_PREP, &pic32s->flags))
                master->can_dma = pic32_spi_can_dma;