diff options
author | Stephen Warren <swarren@wwwdotorg.org> | 2013-03-26 20:37:57 -0600 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-04-01 14:14:32 +0100 |
commit | 543bb255a1987836e64f5b7a63664ead8b32b042 (patch) | |
tree | 818ee5b60f8d24ccfd495ebdb50ea0a175c340b1 /drivers/spi/spi.c | |
parent | 5c725b34d438fdd3c528673a5f53f4b07f879c68 (diff) | |
download | lwn-543bb255a1987836e64f5b7a63664ead8b32b042.tar.gz lwn-543bb255a1987836e64f5b7a63664ead8b32b042.zip |
spi: add ability to validate xfer->bits_per_word in SPI core
Allow SPI masters to define the set of bits_per_word values they support.
If they do this, then the SPI core will reject transfers that attempt to
use an unsupported bits_per_word value. This eliminates the need for each
SPI driver to implement this checking in most cases.
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r-- | drivers/spi/spi.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index f996c600eb8c..0cabf1560550 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1377,6 +1377,14 @@ static int __spi_async(struct spi_device *spi, struct spi_message *message) xfer->bits_per_word = spi->bits_per_word; if (!xfer->speed_hz) xfer->speed_hz = spi->max_speed_hz; + if (master->bits_per_word_mask) { + /* Only 32 bits fit in the mask */ + if (xfer->bits_per_word > 32) + return -EINVAL; + if (!(master->bits_per_word_mask & + BIT(xfer->bits_per_word - 1))) + return -EINVAL; + } } message->spi = spi; |