spi: Add can_dma like interface for spi_flash_read
authorVignesh R <vigneshr@ti.com>
Tue, 11 Apr 2017 11:52:24 +0000 (17:22 +0530)
committerMark Brown <broonie@kernel.org>
Fri, 21 Apr 2017 17:03:53 +0000 (18:03 +0100)
Add an interface analogous to ->can_dma() for spi_flash_read()
interface. This will enable SPI controller drivers to inform SPI core
when not to do DMA mappings.

Signed-off-by: Vignesh R <vigneshr@ti.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c
include/linux/spi/spi.h

index 656dd3e..5e1bb43 100644 (file)
@@ -2811,7 +2811,7 @@ int spi_flash_read(struct spi_device *spi,
 
        mutex_lock(&master->bus_lock_mutex);
        mutex_lock(&master->io_mutex);
-       if (master->dma_rx) {
+       if (master->dma_rx && master->spi_flash_can_dma(spi, msg)) {
                rx_dev = master->dma_rx->device->dev;
                ret = spi_map_buf(master, rx_dev, &msg->rx_sg,
                                  msg->buf, msg->len,
index 75c6bd0..cd8ae65 100644 (file)
@@ -375,6 +375,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
  * @unprepare_message: undo any work done by prepare_message().
  * @spi_flash_read: to support spi-controller hardwares that provide
  *                  accelerated interface to read from flash devices.
+ * @spi_flash_can_dma: analogous to can_dma() interface, but for
+ *                    controllers implementing spi_flash_read.
  * @flash_read_supported: spi device supports flash read
  * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS
  *     number. Any individual value may be -ENOENT for CS lines that
@@ -538,6 +540,8 @@ struct spi_master {
                                 struct spi_message *message);
        int (*spi_flash_read)(struct  spi_device *spi,
                              struct spi_flash_read_message *msg);
+       bool (*spi_flash_can_dma)(struct spi_device *spi,
+                                 struct spi_flash_read_message *msg);
        bool (*flash_read_supported)(struct spi_device *spi);
 
        /*