aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-armada-3700.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/spi/spi-armada-3700.c b/drivers/spi/spi-armada-3700.c
index 6c7d7a460689..a28702b1fa05 100644
--- a/drivers/spi/spi-armada-3700.c
+++ b/drivers/spi/spi-armada-3700.c
@@ -161,7 +161,7 @@ static void a3700_spi_deactivate_cs(struct a3700_spi *a3700_spi,
161} 161}
162 162
163static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi, 163static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi,
164 unsigned int pin_mode) 164 unsigned int pin_mode, bool receiving)
165{ 165{
166 u32 val; 166 u32 val;
167 167
@@ -177,6 +177,9 @@ static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi,
177 break; 177 break;
178 case SPI_NBITS_QUAD: 178 case SPI_NBITS_QUAD:
179 val |= A3700_SPI_DATA_PIN1; 179 val |= A3700_SPI_DATA_PIN1;
180 /* RX during address reception uses 4-pin */
181 if (receiving)
182 val |= A3700_SPI_ADDR_PIN;
180 break; 183 break;
181 default: 184 default:
182 dev_err(&a3700_spi->master->dev, "wrong pin mode %u", pin_mode); 185 dev_err(&a3700_spi->master->dev, "wrong pin mode %u", pin_mode);
@@ -653,7 +656,7 @@ static int a3700_spi_transfer_one(struct spi_master *master,
653 else if (xfer->rx_buf) 656 else if (xfer->rx_buf)
654 nbits = xfer->rx_nbits; 657 nbits = xfer->rx_nbits;
655 658
656 a3700_spi_pin_mode_set(a3700_spi, nbits); 659 a3700_spi_pin_mode_set(a3700_spi, nbits, xfer->rx_buf ? true : false);
657 660
658 if (xfer->rx_buf) { 661 if (xfer->rx_buf) {
659 /* Set read data length */ 662 /* Set read data length */