ARM: OMAP: omap_uwire: wait for tx complete before starting the next one
authorImre Deak <imre.deak@nokia.com>
Fri, 9 Jun 2006 15:17:50 +0000 (18:17 +0300)
committerJuha Yrjola <juha.yrjola@solidboot.com>
Mon, 12 Jun 2006 17:11:23 +0000 (20:11 +0300)
The TDR register shouldn't be written when the CSRB flag is set. The fix
solves the problem where one SPI transfer includes multiple 8 or 16 bit
tx elements and the current transfer can be corrupted by accessing the
TDR too early.

Signed-off-by: Imre Deak <imre.deak@nokia.com>
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
drivers/spi/omap_uwire.c

index 3aa3890..cc26c0d 100644 (file)
@@ -240,12 +240,13 @@ static int uwire_txrx(struct spi_device *spi, struct spi_transfer *t)
                        pr_debug("%s: write-%d =%04x\n",
                                        spi->dev.bus_id, bits, val);
 #endif
+                       if (wait_uwire_csr_flag(CSRB, 0, 0))
+                               goto eio;
+
                        uwire_write_reg(UWIRE_TDR, val);
 
                        /* start write */
                        val = START | w | (bits << 5);
-                       if (wait_uwire_csr_flag(CSRB, 0, 0))
-                               goto eio;
 
                        uwire_write_reg(UWIRE_CSR, val);
                        len -= bytes;