diff options
author | Major Lee <major_lee@wistron.com> | 2010-12-10 10:13:49 +0000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-14 18:48:59 -0800 |
commit | 3d0b6087f3f2c88caef25e1455ff8db0816d4e11 (patch) | |
tree | b04e2fdc51a8f761b432be83c379eedce17e3396 | |
parent | 54efdfeb49f03adfd0196935335890469ed314b9 (diff) | |
download | blackbird-op-linux-3d0b6087f3f2c88caef25e1455ff8db0816d4e11.tar.gz blackbird-op-linux-3d0b6087f3f2c88caef25e1455ff8db0816d4e11.zip |
dw_spi: Fix missing final read in some polling situations
There is a possibility that the last word of a transaction will be lost
if data is not ready. Re-read in poll_transfer() to solve this issue
when poll_mode is enabled.
Verified on SPI touch screen device.
Signed-off-by: Major Lee <major_lee@wistron.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/spi/dw_spi.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/spi/dw_spi.c b/drivers/spi/dw_spi.c index 90439314cf67..0838c79861e4 100644 --- a/drivers/spi/dw_spi.c +++ b/drivers/spi/dw_spi.c @@ -413,6 +413,11 @@ static void poll_transfer(struct dw_spi *dws) { while (dws->write(dws)) dws->read(dws); + /* + * There is a possibility that the last word of a transaction + * will be lost if data is not ready. Re-read to solve this issue. + */ + dws->read(dws); transfer_complete(dws); } |