]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
spi: atmel: convert to dma_request_slave_channel_compat()
authorRichard Genoud <richard.genoud@gmail.com>
Fri, 31 May 2013 15:01:59 +0000 (17:01 +0200)
committerMark Brown <broonie@linaro.org>
Mon, 3 Jun 2013 15:22:50 +0000 (16:22 +0100)
Use generic DMA DT helper.
Platforms booting with or without DT populated are both supported.

Based on Ludovic Desroches <ludovic.desroches@atmel.com> patchset
"ARM: at91: move to generic DMA device tree binding"

Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
Acked-by: Ludovic Desroches <ludovic.desroches@gmail.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/spi/spi-atmel.c

index 380387a47b1d86fe4e6a8a7ef22a537bfb85517a..ceda43c91142b54e01d1d68fcd76279a5e378464 100644 (file)
@@ -424,10 +424,15 @@ static int atmel_spi_dma_slave_config(struct atmel_spi *as,
        return err;
 }
 
-static bool filter(struct dma_chan *chan, void *slave)
+static bool filter(struct dma_chan *chan, void *pdata)
 {
-       struct  at_dma_slave *sl = slave;
+       struct atmel_spi_dma *sl_pdata = pdata;
+       struct at_dma_slave *sl;
 
+       if (!sl_pdata)
+               return false;
+
+       sl = &sl_pdata->dma_slave;
        if (sl->dma_dev == chan->device->dev) {
                chan->private = sl;
                return true;
@@ -438,24 +443,31 @@ static bool filter(struct dma_chan *chan, void *slave)
 
 static int atmel_spi_configure_dma(struct atmel_spi *as)
 {
-       struct at_dma_slave *sdata = &as->dma.dma_slave;
        struct dma_slave_config slave_config;
+       struct device *dev = &as->pdev->dev;
        int err;
 
-       if (sdata && sdata->dma_dev) {
-               dma_cap_mask_t mask;
+       dma_cap_mask_t mask;
+       dma_cap_zero(mask);
+       dma_cap_set(DMA_SLAVE, mask);
 
-               /* Try to grab two DMA channels */
-               dma_cap_zero(mask);
-               dma_cap_set(DMA_SLAVE, mask);
-               as->dma.chan_tx = dma_request_channel(mask, filter, sdata);
-               if (as->dma.chan_tx)
-                       as->dma.chan_rx =
-                               dma_request_channel(mask, filter, sdata);
+       as->dma.chan_tx = dma_request_slave_channel_compat(mask, filter,
+                                                          &as->dma,
+                                                          dev, "tx");
+       if (!as->dma.chan_tx) {
+               dev_err(dev,
+                       "DMA TX channel not available, SPI unable to use DMA\n");
+               err = -EBUSY;
+               goto error;
        }
-       if (!as->dma.chan_rx || !as->dma.chan_tx) {
-               dev_err(&as->pdev->dev,
-                       "DMA channel not available, SPI unable to use DMA\n");
+
+       as->dma.chan_rx = dma_request_slave_channel_compat(mask, filter,
+                                                          &as->dma,
+                                                          dev, "rx");
+
+       if (!as->dma.chan_rx) {
+               dev_err(dev,
+                       "DMA RX channel not available, SPI unable to use DMA\n");
                err = -EBUSY;
                goto error;
        }