diff options
| author | Major Lee <major_lee@wistron.com> | 2010-12-10 05:13:49 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-14 21:48:59 -0500 |
| commit | 3d0b6087f3f2c88caef25e1455ff8db0816d4e11 (patch) | |
| tree | b04e2fdc51a8f761b432be83c379eedce17e3396 | |
| parent | 54efdfeb49f03adfd0196935335890469ed314b9 (diff) | |
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) | |||
| 413 | { | 413 | { |
| 414 | while (dws->write(dws)) | 414 | while (dws->write(dws)) |
| 415 | dws->read(dws); | 415 | dws->read(dws); |
| 416 | /* | ||
| 417 | * There is a possibility that the last word of a transaction | ||
| 418 | * will be lost if data is not ready. Re-read to solve this issue. | ||
| 419 | */ | ||
| 420 | dws->read(dws); | ||
| 416 | 421 | ||
| 417 | transfer_complete(dws); | 422 | transfer_complete(dws); |
| 418 | } | 423 | } |
