diff options
author | Lanqing Liu <lanqing.liu@spreadtrum.com> | 2019-01-15 21:46:50 +0800 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-01-15 14:16:35 +0000 |
commit | 63f5ffc46d4f53b309a93b83420b2e4bd0da5aba (patch) | |
tree | fe58b09195fdfa14ede1adde06dcd4e3af473ba2 /drivers/spi/spi-sprd.c | |
parent | baf8b9f8d260c55a86405f70a384c29cda888476 (diff) | |
download | linux-stable-63f5ffc46d4f53b309a93b83420b2e4bd0da5aba.tar.gz linux-stable-63f5ffc46d4f53b309a93b83420b2e4bd0da5aba.tar.bz2 linux-stable-63f5ffc46d4f53b309a93b83420b2e4bd0da5aba.zip |
spi: sprd: Fix the error data length in SPI read-only mode
In SPI read-only mode, we will always return the writing length,
which is always the power of "bits_per_word", but the length unit
using by users is byte.
Thus this patch fixes the returning length by getting from
read_bufs() function to get the correct length.
Signed-off-by: Lanqing Liu <lanqing.liu@spreadtrum.com>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi/spi-sprd.c')
-rw-r--r-- | drivers/spi/spi-sprd.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c index 8daa24eec624..fa324ce194b2 100644 --- a/drivers/spi/spi-sprd.c +++ b/drivers/spi/spi-sprd.c @@ -380,7 +380,7 @@ static int sprd_spi_txrx_bufs(struct spi_device *sdev, struct spi_transfer *t) { struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller); u32 trans_len = ss->trans_len, len; - int ret, write_size = 0; + int ret, write_size = 0, read_size = 0; while (trans_len) { len = trans_len > SPRD_SPI_FIFO_SIZE ? SPRD_SPI_FIFO_SIZE : @@ -416,13 +416,15 @@ static int sprd_spi_txrx_bufs(struct spi_device *sdev, struct spi_transfer *t) goto complete; if (ss->trans_mode & SPRD_SPI_RX_MODE) - ss->read_bufs(ss, len); + read_size += ss->read_bufs(ss, len); trans_len -= len; } - ret = write_size; - + if (ss->trans_mode & SPRD_SPI_TX_MODE) + ret = write_size; + else + ret = read_size; complete: sprd_spi_enter_idle(ss); |