diff options
author | Heiner Kallweit <hkallweit1@gmail.com> | 2016-10-02 14:22:35 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-10-21 13:09:37 +0200 |
commit | e4be7053b9d3aa0a97b311ad77528d8b32236590 (patch) | |
tree | c00fbe2b1ce027241d07c1d8d1d56f7c2773cecb | |
parent | spi: fsl-espi: replace of_get_property with of_property_read_u32 (diff) | |
download | linux-e4be7053b9d3aa0a97b311ad77528d8b32236590.tar.xz linux-e4be7053b9d3aa0a97b311ad77528d8b32236590.zip |
spi: fsl-espi: reject MSB-first transfers with word sizes other than 8 or 16
According to the ESPI spec MSB-first transfers are supported for
word size 8 and 16 only.
Check for this and reject MSB-first transfers with other word sizes.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-fsl-espi.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 1f97cce615d3..65bb70d3bfc4 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -153,6 +153,7 @@ static int fsl_espi_check_message(struct spi_message *m) first = list_first_entry(&m->transfers, struct spi_transfer, transfer_list); + list_for_each_entry(t, &m->transfers, transfer_list) { if (first->bits_per_word != t->bits_per_word || first->speed_hz != t->speed_hz) { @@ -161,6 +162,15 @@ static int fsl_espi_check_message(struct spi_message *m) } } + /* ESPI supports MSB-first transfers for word size 8 / 16 only */ + if (!(m->spi->mode & SPI_LSB_FIRST) && first->bits_per_word != 8 && + first->bits_per_word != 16) { + dev_err(mspi->dev, + "MSB-first transfer not supported for wordsize %u\n", + first->bits_per_word); + return -EINVAL; + } + return 0; } |