Commit 95c5c3ab7db0dcaeebeb771b90152cd47aa27243
Committed by
Grant Likely
1 parent
a7006c9747
Exists in
master
and in
20 other branches
spi/omap_mcspi: Fix broken last word xfer
Commit adef658 "spi/omap_mcspi: catch xfers of non-multiple SPI word size" broke the transmission of last word in cases where access is multiple of word size and word size is 16 or 32 bits. Fix this by replacing the test "c > (word_len>>3)" in do-while loops with "c >= 'pointer increment size'". This ensures that the last word is transmitted in above case and still allow to break the loop and prevent variable c underflow in cases where word size != 'pointer increment size'. Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> Tested-by: Sourav Poddar<sourav.poddar@ti.com> Acked-by: Michael Jones <michael.jones@matrix-vision.de> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Showing 1 changed file with 3 additions and 3 deletions Side-by-side Diff
drivers/spi/omap2_mcspi.c
... | ... | @@ -517,7 +517,7 @@ |
517 | 517 | dev_vdbg(&spi->dev, "read-%d %02x\n", |
518 | 518 | word_len, *(rx - 1)); |
519 | 519 | } |
520 | - } while (c > (word_len>>3)); | |
520 | + } while (c); | |
521 | 521 | } else if (word_len <= 16) { |
522 | 522 | u16 *rx; |
523 | 523 | const u16 *tx; |
... | ... | @@ -564,7 +564,7 @@ |
564 | 564 | dev_vdbg(&spi->dev, "read-%d %04x\n", |
565 | 565 | word_len, *(rx - 1)); |
566 | 566 | } |
567 | - } while (c > (word_len>>3)); | |
567 | + } while (c >= 2); | |
568 | 568 | } else if (word_len <= 32) { |
569 | 569 | u32 *rx; |
570 | 570 | const u32 *tx; |
... | ... | @@ -611,7 +611,7 @@ |
611 | 611 | dev_vdbg(&spi->dev, "read-%d %08x\n", |
612 | 612 | word_len, *(rx - 1)); |
613 | 613 | } |
614 | - } while (c > (word_len>>3)); | |
614 | + } while (c >= 4); | |
615 | 615 | } |
616 | 616 | |
617 | 617 | /* for TX_ONLY mode, be sure all words have shifted out */ |