diff options
author | Haikun Wang <haikun.wang@freescale.com> | 2015-05-13 12:12:15 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-05-21 22:54:24 +0200 |
commit | 9deef024a12ebae4965c89837f662905ac88944b (patch) | |
tree | 760d9c16deea663a87606ef5a1b7700580b33660 | |
parent | Linux 4.1-rc1 (diff) | |
download | linux-9deef024a12ebae4965c89837f662905ac88944b.tar.xz linux-9deef024a12ebae4965c89837f662905ac88944b.zip |
spi: spi-fsl-dspi: Bug fix incorrect CS de-assert
SPI chip select signal need to keep asserted between several
spi_transfer in the same spi_message usually.
But the driver will de-assert CS signal and the assert it between
serval spi_transfer in the same spi_message under some condiations.
This patch fix the bug.
Here is an example:
Assume you have two variables like the following,
struct spi_transfer a;
struct spi_transfer b;
if you send a spi_message only includes 'a' first,
and then you send a spi_message includes 'a' and 'b'
but without resetting 'a'.
Driver will de-assert CS and then assert CS between 'a' and 'b'.
Signed-off-by: Haikun Wang <haikun.wang@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 5fe54cda309f..8af20aa65abf 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -341,10 +341,10 @@ static int dspi_transfer_one_message(struct spi_master *master, dspi->cur_msg = message; dspi->cur_chip = spi_get_ctldata(spi); dspi->cs = spi->chip_select; + dspi->cs_change = 0; if (dspi->cur_transfer->transfer_list.next == &dspi->cur_msg->transfers) - transfer->cs_change = 1; - dspi->cs_change = transfer->cs_change; + dspi->cs_change = 1; dspi->void_write_data = dspi->cur_chip->void_write_data; dspi->dataflags = 0; |