| From 79a7a72eed9898b243b8bbe3acc7f31211676ad2 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@linux-m68k.org> |
| Date: Fri, 21 Feb 2014 17:29:18 +0100 |
| Subject: spi: rspi: Fix loopback mode for Dual/Quad SPI Transfers |
| |
| While normal Dual and Quad SPI Transfers are unidirectional, we must do |
| a bidirectional transfer if loopback mode is enabled, else rx_buf is not |
| filled. |
| |
| With spidev it seemed to work, as spidev uses the same buffer for |
| tranmission and reception. |
| |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@linux-m68k.org> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit ba824d4971691a7f1f66429e378a08a95fbb5b79) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/spi/spi-rspi.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c |
| index 4a1f978c3381..92bec7e91046 100644 |
| --- a/drivers/spi/spi-rspi.c |
| +++ b/drivers/spi/spi-rspi.c |
| @@ -859,7 +859,9 @@ static int qspi_transfer_one(struct spi_master *master, struct spi_device *spi, |
| { |
| struct rspi_data *rspi = spi_master_get_devdata(master); |
| |
| - if (xfer->tx_buf && xfer->tx_nbits > SPI_NBITS_SINGLE) { |
| + if (spi->mode & SPI_LOOP) { |
| + return qspi_transfer_out_in(rspi, xfer); |
| + } else if (xfer->tx_buf && xfer->tx_nbits > SPI_NBITS_SINGLE) { |
| /* Quad or Dual SPI Write */ |
| return qspi_transfer_out(rspi, xfer); |
| } else if (xfer->rx_buf && xfer->rx_nbits > SPI_NBITS_SINGLE) { |
| -- |
| 2.1.2 |
| |