spi: omap2_mcspi PIO RX fix
PATCH 1/1 spi: omap2_mcspi PIO RX fix
From: Kalle Valo <[email protected]>
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 in the beginning of the various I/O loops.
--- drivers/spi/omap2_mcspi.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/spi/omap2_mcspi.c +3 -3
@@ -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); }
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
A message that is not in the archive (sent off-list or not yet received): 200801241340.25207.david-b-yBeKhBN/[email protected]
Quoted 8 lines
-----Original Message-----
From: David Brownell [mailto:david-b-yBeKhBN/[email protected]]
Sent: Friday, January 25, 2008 3:10 AM
To: Andrew Morton; spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: Kalle Valo; Girish
Subject: [patch 2.6.24-rc8] spi:omap2_mcspiPIO RX fix
Quoted 5 lines
From: Kalle Valo <[email protected]>
Before transmission of the last word in PIO
RX_ONLYmode rx+tx mode is enabled:
Yes, I had missed out this patch. Thanks dave.
Regards,
Girish
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/