spi/s3c64xx: Take runtime PM reference even if DMA is not supported
authorMark Brown <broonie@linaro.org>
Tue, 13 Aug 2013 18:03:01 +0000 (19:03 +0100)
committerMark Brown <broonie@linaro.org>
Wed, 14 Aug 2013 10:22:14 +0000 (11:22 +0100)
We always need the device to be runtime PM enabled to use it so just skip
the DMA initialisation not the entire prepare when polling.

Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/spi/spi-s3c64xx.c

index a7a739c..eee1a7b 100644 (file)
@@ -429,27 +429,26 @@ static int s3c64xx_spi_prepare_transfer(struct spi_master *spi)
        dma_cap_mask_t mask;
        int ret;
 
-       if (is_polling(sdd))
-               return 0;
-
-       dma_cap_zero(mask);
-       dma_cap_set(DMA_SLAVE, mask);
-
-       /* Acquire DMA channels */
-       sdd->rx_dma.ch = dma_request_slave_channel_compat(mask, filter,
-                               (void *)sdd->rx_dma.dmach, dev, "rx");
-       if (!sdd->rx_dma.ch) {
-               dev_err(dev, "Failed to get RX DMA channel\n");
-               ret = -EBUSY;
-               goto out;
-       }
+       if (!is_polling(sdd)) {
+               dma_cap_zero(mask);
+               dma_cap_set(DMA_SLAVE, mask);
+
+               /* Acquire DMA channels */
+               sdd->rx_dma.ch = dma_request_slave_channel_compat(mask, filter,
+                                  (void *)sdd->rx_dma.dmach, dev, "rx");
+               if (!sdd->rx_dma.ch) {
+                       dev_err(dev, "Failed to get RX DMA channel\n");
+                       ret = -EBUSY;
+                       goto out;
+               }
 
-       sdd->tx_dma.ch = dma_request_slave_channel_compat(mask, filter,
-                               (void *)sdd->tx_dma.dmach, dev, "tx");
-       if (!sdd->tx_dma.ch) {
-               dev_err(dev, "Failed to get TX DMA channel\n");
-               ret = -EBUSY;
-               goto out_rx;
+               sdd->tx_dma.ch = dma_request_slave_channel_compat(mask, filter,
+                                  (void *)sdd->tx_dma.dmach, dev, "tx");
+               if (!sdd->tx_dma.ch) {
+                       dev_err(dev, "Failed to get TX DMA channel\n");
+                       ret = -EBUSY;
+                       goto out_rx;
+               }
        }
 
        ret = pm_runtime_get_sync(&sdd->pdev->dev);