spi: pxa2xx: use DMA by default if supported
authorDan O'Donovan <dan@emutex.com>
Fri, 27 May 2016 18:57:48 +0000 (19:57 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 30 May 2016 16:09:31 +0000 (17:09 +0100)
Currently, even if the PXA2xx SPI master supports DMA, it won't be
enabled unless (i) the slave device is enumerated through ACPI, or
(ii) the slave device is registered with board-specific
controller_data specified.  Even then, there isn't a field in the
controller_data that explicitly enables dma - it just gets enabled
if the master supports it and controller_data is non-NULL.

This means that drivers which register SPI devices on a bus without
awareness of this controller cannot avail of DMA performance gains.

This patch allows DMA transfers to be used if supported.

Signed-off-by: Dan O'Donovan <dan@emutex.com>
Reviewed-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-pxa2xx.c

index fe07c05..27e0307 100644 (file)
@@ -1240,7 +1240,7 @@ static int setup(struct spi_device *spi)
                        chip->frm = spi->chip_select;
                } else
                        chip->gpio_cs = -1;
-               chip->enable_dma = 0;
+               chip->enable_dma = drv_data->master_info->enable_dma;
                chip->timeout = TIMOUT_DFLT;
        }
 
@@ -1259,17 +1259,9 @@ static int setup(struct spi_device *spi)
                        tx_hi_thres = chip_info->tx_hi_threshold;
                if (chip_info->rx_threshold)
                        rx_thres = chip_info->rx_threshold;
-               chip->enable_dma = drv_data->master_info->enable_dma;
                chip->dma_threshold = 0;
                if (chip_info->enable_loopback)
                        chip->cr1 = SSCR1_LBM;
-       } else if (ACPI_HANDLE(&spi->dev)) {
-               /*
-                * Slave devices enumerated from ACPI namespace don't
-                * usually have chip_info but we still might want to use
-                * DMA with them.
-                */
-               chip->enable_dma = drv_data->master_info->enable_dma;
        }
 
        chip->lpss_rx_threshold = SSIRF_RxThresh(rx_thres);