diff options
| -rw-r--r-- | drivers/spi/spi-armada-3700.c | 7 |
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 | ||
| 163 | static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi, | 163 | static 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 */ |
