diff options
author | Michal Suchanek <hramrach@gmail.com> | 2015-12-02 10:38:21 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-01-05 16:33:54 +0000 |
commit | 4acad4aae10d1fa79a075b38b5c73772c44f576c (patch) | |
tree | d0da2a97d6a1f6dec994c0c303feeab11154dac7 /include/linux/spi/spi.h | |
parent | 8005c49d9aea74d382f474ce11afbbc7d7130bec (diff) | |
download | op-kernel-dev-4acad4aae10d1fa79a075b38b5c73772c44f576c.zip op-kernel-dev-4acad4aae10d1fa79a075b38b5c73772c44f576c.tar.gz |
spi: expose master transfer size limitation.
On some SPI controllers it is not feasible to transfer arbitrary amount
of data at once.
When the limit on transfer size is a few kilobytes at least it makes
sense to use the SPI hardware rather than reverting to gpio driver.
The protocol drivers need a way to check that they do not sent overly
long messages, though.
Signed-off-by: Michal Suchanek <hramrach@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'include/linux/spi/spi.h')
-rw-r--r-- | include/linux/spi/spi.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index cce80e6..3eebc6c 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -425,6 +425,12 @@ struct spi_master { #define SPI_MASTER_MUST_RX BIT(3) /* requires rx */ #define SPI_MASTER_MUST_TX BIT(4) /* requires tx */ + /* + * on some hardware transfer size may be constrained + * the limit may depend on device transfer settings + */ + size_t (*max_transfer_size)(struct spi_device *spi); + /* lock and mutex for SPI bus locking */ spinlock_t bus_lock_spinlock; struct mutex bus_lock_mutex; @@ -832,6 +838,15 @@ extern int spi_async(struct spi_device *spi, struct spi_message *message); extern int spi_async_locked(struct spi_device *spi, struct spi_message *message); +static inline size_t +spi_max_transfer_size(struct spi_device *spi) +{ + struct spi_master *master = spi->master; + if (!master->max_transfer_size) + return SIZE_MAX; + return master->max_transfer_size(spi); +} + /*---------------------------------------------------------------------------*/ /* All these synchronous SPI transfer routines are utilities layered |