Commit 95c5c3ab7db0dcaeebeb771b90152cd47aa27243

Authored by Jarkko Nikula
Committed by Grant Likely
1 parent a7006c9747

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 */