summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVignesh R <vigneshr@ti.com>2017-04-11 17:22:24 +0530
committerMark Brown <broonie@kernel.org>2017-04-21 18:03:53 +0100
commit2bca34455b257d75080d87e800ae14afe49001bf (patch)
tree240df51d9b322b51df8eb04e81b7580d8acb32fa
parentcb3c8e5ade3f01839ce0a9388ddc9729de4e2d6d (diff)
spi: Add can_dma like interface for spi_flash_read
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>
-rw-r--r--drivers/spi/spi.c2
-rw-r--r--include/linux/spi/spi.h4
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 656dd3e3220c..5e1bb43b8a8f 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -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,
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 75c6bd0ac605..cd8ae65568e3 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -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);
/*