diff options
-rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index cb41c327bd77..7ada112bfd85 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c | |||
@@ -196,6 +196,8 @@ struct fsl_dspi { | |||
196 | struct fsl_dspi_dma *dma; | 196 | struct fsl_dspi_dma *dma; |
197 | }; | 197 | }; |
198 | 198 | ||
199 | static u32 dspi_data_to_pushr(struct fsl_dspi *dspi, int tx_word); | ||
200 | |||
199 | static inline int is_double_byte_mode(struct fsl_dspi *dspi) | 201 | static inline int is_double_byte_mode(struct fsl_dspi *dspi) |
200 | { | 202 | { |
201 | unsigned int val; | 203 | unsigned int val; |
@@ -242,24 +244,15 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) | |||
242 | int time_left; | 244 | int time_left; |
243 | int tx_word; | 245 | int tx_word; |
244 | int i; | 246 | int i; |
245 | u16 val; | ||
246 | 247 | ||
247 | tx_word = is_double_byte_mode(dspi); | 248 | tx_word = is_double_byte_mode(dspi); |
248 | 249 | ||
249 | for (i = 0; i < dma->curr_xfer_len - 1; i++) { | 250 | for (i = 0; i < dma->curr_xfer_len; i++) { |
250 | val = tx_word ? *(u16 *) dspi->tx : *(u8 *) dspi->tx; | 251 | dspi->dma->tx_dma_buf[i] = dspi_data_to_pushr(dspi, tx_word); |
251 | dspi->dma->tx_dma_buf[i] = | 252 | if ((dspi->cs_change) && (!dspi->len)) |
252 | SPI_PUSHR_TXDATA(val) | SPI_PUSHR_PCS(dspi->cs) | | 253 | dspi->dma->tx_dma_buf[i] &= ~SPI_PUSHR_CONT; |
253 | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT; | ||
254 | dspi->tx += tx_word + 1; | ||
255 | } | 254 | } |
256 | 255 | ||
257 | val = tx_word ? *(u16 *) dspi->tx : *(u8 *) dspi->tx; | ||
258 | dspi->dma->tx_dma_buf[i] = SPI_PUSHR_TXDATA(val) | | ||
259 | SPI_PUSHR_PCS(dspi->cs) | | ||
260 | SPI_PUSHR_CTAS(0); | ||
261 | dspi->tx += tx_word + 1; | ||
262 | |||
263 | dma->tx_desc = dmaengine_prep_slave_single(dma->chan_tx, | 256 | dma->tx_desc = dmaengine_prep_slave_single(dma->chan_tx, |
264 | dma->tx_dma_phys, | 257 | dma->tx_dma_phys, |
265 | dma->curr_xfer_len * | 258 | dma->curr_xfer_len * |
@@ -351,7 +344,6 @@ static int dspi_dma_xfer(struct fsl_dspi *dspi) | |||
351 | curr_remaining_bytes -= dma->curr_xfer_len * word; | 344 | curr_remaining_bytes -= dma->curr_xfer_len * word; |
352 | if (curr_remaining_bytes < 0) | 345 | if (curr_remaining_bytes < 0) |
353 | curr_remaining_bytes = 0; | 346 | curr_remaining_bytes = 0; |
354 | dspi->len = curr_remaining_bytes; | ||
355 | } | 347 | } |
356 | } | 348 | } |
357 | 349 | ||