[PATCH] atmel_spi: Fix handling of chipselect after SPI transfer

From: Michael Heimpold
Date: Fri Jan 30 2009 - 18:14:39 EST


According to include/linux/spi/spi.h chipselect should stay active after a SPI
transfer or after a SPI message unless modified by
spi_transfer.cs_change != 0.

The current atmel driver passes this field to atmel_spi_msg_done as a
parameter with oppositional meaning: "cs_change" -> "stay" (see
atmel_spi_interrupt).

This patch fixes this behavoir by adapting the called function and its
callers. IMHO this solution is better than an one line fix of inverting the
function's argument as the meaning of the field remains throughout
the hole stack.

Signed-off-by: Michael Heimpold <mhei@xxxxxxxxxxx>

---
drivers/spi/atmel_spi.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c
index 8abae4a..6b8c020 100644
--- a/drivers/spi/atmel_spi.c
+++ b/drivers/spi/atmel_spi.c
@@ -351,9 +351,9 @@ static void atmel_spi_dma_unmap_xfer(struct spi_master *master,

static void
atmel_spi_msg_done(struct spi_master *master, struct atmel_spi *as,
- struct spi_message *msg, int status, int stay)
+ struct spi_message *msg, int status, int cs_change)
{
- if (!stay || status < 0)
+ if (cs_change || status < 0)
cs_deactivate(as, msg->spi);
else
as->stay = msg->spi;
@@ -448,7 +448,7 @@ atmel_spi_interrupt(int irq, void *dev_id)
/* Clear any overrun happening while cleaning up */
spi_readl(as, SR);

- atmel_spi_msg_done(master, as, msg, -EIO, 0);
+ atmel_spi_msg_done(master, as, msg, -EIO, 1);
} else if (pending & (SPI_BIT(RXBUFF) | SPI_BIT(ENDRX))) {
ret = IRQ_HANDLED;

--
1.5.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/