summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMajor Lee <major_lee@wistron.com>2010-12-10 10:13:49 +0000
committerLinus Torvalds <torvalds@linux-foundation.org>2010-12-14 18:48:59 -0800
commit3d0b6087f3f2c88caef25e1455ff8db0816d4e11 (patch)
treeb04e2fdc51a8f761b432be83c379eedce17e3396 /drivers
parent54efdfeb49f03adfd0196935335890469ed314b9 (diff)
downloadlinux-3.10-3d0b6087f3f2c88caef25e1455ff8db0816d4e11.tar.gz
linux-3.10-3d0b6087f3f2c88caef25e1455ff8db0816d4e11.tar.bz2
linux-3.10-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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/spi/dw_spi.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/spi/dw_spi.c b/drivers/spi/dw_spi.c
index 90439314cf6..0838c79861e 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);
}