* Kalle Valo <kalle.valo@xxxxxxxxx> [080111 09:33]: > Before transmission of the last word in PIO RX_ONLY mode rx+tx mode > is enabled: > > /* prevent last RX_ONLY read from triggering > * more word i/o: switch to rx+tx > */ > if (c == 0 && tx == NULL) > mcspi_write_cs_reg(spi, > OMAP2_MCSPI_CHCONF0, l); > > But because c is decremented after the test, c will never be zero and > rx+tx will not be enabled. This breaks RX_ONLY mode PIO transfers. > > Fix it by decrementing c already in the beginning of the loop. > > Signed-off-by: Kalle Valo <kalle.valo@xxxxxxxxx> > --- > drivers/spi/omap2_mcspi.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c > index 3cdab13..ea61724 100644 > --- a/drivers/spi/omap2_mcspi.c > +++ b/drivers/spi/omap2_mcspi.c > @@ -350,6 +350,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > tx = xfer->tx_buf; > > do { > + c -= 1; > if (tx != NULL) { > if (mcspi_wait_for_reg_bit(chstat_reg, > OMAP2_MCSPI_CHSTAT_TXS) < 0) { > @@ -380,7 +381,6 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > word_len, *(rx - 1)); > #endif > } > - c -= 1; > } while (c); > } else if (word_len <= 16) { > u16 *rx; > @@ -389,6 +389,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > rx = xfer->rx_buf; > tx = xfer->tx_buf; > do { > + c -= 2; > if (tx != NULL) { > if (mcspi_wait_for_reg_bit(chstat_reg, > OMAP2_MCSPI_CHSTAT_TXS) < 0) { > @@ -419,7 +420,6 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > word_len, *(rx - 1)); > #endif > } > - c -= 2; > } while (c); > } else if (word_len <= 32) { > u32 *rx; > @@ -428,6 +428,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > rx = xfer->rx_buf; > tx = xfer->tx_buf; > do { > + c -= 4; > if (tx != NULL) { > if (mcspi_wait_for_reg_bit(chstat_reg, > OMAP2_MCSPI_CHSTAT_TXS) < 0) { > @@ -458,7 +459,6 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) > word_len, *(rx - 1)); > #endif > } > - c -= 4; > } while (c); > } > Pushing today. Tony - To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html