diff options
author | Angelo Dureghello <angelo@sysam.it> | 2018-08-17 19:51:58 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-08-28 15:55:23 -0400 |
commit | 5223c9c1cbfc0cd4d0a1b50758e0949af3290fa1 (patch) | |
tree | e58864624a36ce9d7817aa4bb8bf49dde5f72337 | |
parent | 04b2d03a75652bda989de1595048f0501dc0c0a0 (diff) |
spi: spi-fsl-dspi: fix broken DSPI_EOQ_MODE
This patch fixes the dspi_eoq_write function used by the
ColdFire mcf5441x family. The 16 bit cmd part must be re-set at
each data transfer.
Also, now that fifo_size variables are used for eoq_read/write,
a proper fifo size must be set (16 slots for the ColdFire dspi
module version).
Signed-off-by: Angelo Dureghello <angelo@sysam.it>
Acked-by: Esben Haabendal <esben@haabendal.dk>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 7cb3ab0a35a0..3082e72e4f6c 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c | |||
@@ -30,7 +30,11 @@ | |||
30 | 30 | ||
31 | #define DRIVER_NAME "fsl-dspi" | 31 | #define DRIVER_NAME "fsl-dspi" |
32 | 32 | ||
33 | #ifdef CONFIG_M5441x | ||
34 | #define DSPI_FIFO_SIZE 16 | ||
35 | #else | ||
33 | #define DSPI_FIFO_SIZE 4 | 36 | #define DSPI_FIFO_SIZE 4 |
37 | #endif | ||
34 | #define DSPI_DMA_BUFSIZE (DSPI_FIFO_SIZE * 1024) | 38 | #define DSPI_DMA_BUFSIZE (DSPI_FIFO_SIZE * 1024) |
35 | 39 | ||
36 | #define SPI_MCR 0x00 | 40 | #define SPI_MCR 0x00 |
@@ -623,9 +627,11 @@ static void dspi_tcfq_read(struct fsl_dspi *dspi) | |||
623 | static void dspi_eoq_write(struct fsl_dspi *dspi) | 627 | static void dspi_eoq_write(struct fsl_dspi *dspi) |
624 | { | 628 | { |
625 | int fifo_size = DSPI_FIFO_SIZE; | 629 | int fifo_size = DSPI_FIFO_SIZE; |
630 | u16 xfer_cmd = dspi->tx_cmd; | ||
626 | 631 | ||
627 | /* Fill TX FIFO with as many transfers as possible */ | 632 | /* Fill TX FIFO with as many transfers as possible */ |
628 | while (dspi->len && fifo_size--) { | 633 | while (dspi->len && fifo_size--) { |
634 | dspi->tx_cmd = xfer_cmd; | ||
629 | /* Request EOQF for last transfer in FIFO */ | 635 | /* Request EOQF for last transfer in FIFO */ |
630 | if (dspi->len == dspi->bytes_per_word || fifo_size == 0) | 636 | if (dspi->len == dspi->bytes_per_word || fifo_size == 0) |
631 | dspi->tx_cmd |= SPI_PUSHR_CMD_EOQ; | 637 | dspi->tx_cmd |= SPI_PUSHR_CMD_EOQ; |