You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.1 KiB
71 lines
2.1 KiB
7 years ago
|
From dd7aa8d4b53b3484ba31ba56f3ff1be7deb38530 Mon Sep 17 00:00:00 2001
|
||
|
From: Maxime Chevallier <maxime.chevallier@smile.fr>
|
||
|
Date: Tue, 10 Oct 2017 10:43:18 +0200
|
||
|
Subject: spi: a3700: Change SPI mode before asserting chip-select
|
||
|
|
||
|
The spi device mode should be configured in the controller before the
|
||
|
chip-select is asserted, so that a clock polarity configuration change
|
||
|
is not interpreted as a clock tick by the device.
|
||
|
|
||
|
This patch moves the mode setting to the 'prepare_message' function
|
||
|
instead of the 'transfer_one' function.
|
||
|
|
||
|
By doing so, this patch also removes redundant code in
|
||
|
a3700_spi_clock_set.
|
||
|
|
||
|
This was tested on EspressoBin board, with spidev.
|
||
|
|
||
|
Signed-off-by: Maxime Chevallier <maxime.chevallier@smile.fr>
|
||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||
|
---
|
||
|
drivers/spi/spi-armada-3700.c | 17 ++++-------------
|
||
|
1 file changed, 4 insertions(+), 13 deletions(-)
|
||
|
|
||
|
--- a/drivers/spi/spi-armada-3700.c
|
||
|
+++ b/drivers/spi/spi-armada-3700.c
|
||
|
@@ -214,7 +214,7 @@ static void a3700_spi_mode_set(struct a3
|
||
|
}
|
||
|
|
||
|
static void a3700_spi_clock_set(struct a3700_spi *a3700_spi,
|
||
|
- unsigned int speed_hz, u16 mode)
|
||
|
+ unsigned int speed_hz)
|
||
|
{
|
||
|
u32 val;
|
||
|
u32 prescale;
|
||
|
@@ -239,17 +239,6 @@ static void a3700_spi_clock_set(struct a
|
||
|
val |= A3700_SPI_CLK_CAPT_EDGE;
|
||
|
spireg_write(a3700_spi, A3700_SPI_IF_TIME_REG, val);
|
||
|
}
|
||
|
-
|
||
|
- val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
|
||
|
- val &= ~(A3700_SPI_CLK_POL | A3700_SPI_CLK_PHA);
|
||
|
-
|
||
|
- if (mode & SPI_CPOL)
|
||
|
- val |= A3700_SPI_CLK_POL;
|
||
|
-
|
||
|
- if (mode & SPI_CPHA)
|
||
|
- val |= A3700_SPI_CLK_PHA;
|
||
|
-
|
||
|
- spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
|
||
|
}
|
||
|
|
||
|
static void a3700_spi_bytelen_set(struct a3700_spi *a3700_spi, unsigned int len)
|
||
|
@@ -431,7 +420,7 @@ static void a3700_spi_transfer_setup(str
|
||
|
|
||
|
a3700_spi = spi_master_get_devdata(spi->master);
|
||
|
|
||
|
- a3700_spi_clock_set(a3700_spi, xfer->speed_hz, spi->mode);
|
||
|
+ a3700_spi_clock_set(a3700_spi, xfer->speed_hz);
|
||
|
|
||
|
byte_len = xfer->bits_per_word >> 3;
|
||
|
|
||
|
@@ -592,6 +581,8 @@ static int a3700_spi_prepare_message(str
|
||
|
|
||
|
a3700_spi_bytelen_set(a3700_spi, 4);
|
||
|
|
||
|
+ a3700_spi_mode_set(a3700_spi, spi->mode);
|
||
|
+
|
||
|
return 0;
|
||
|
}
|
||
|
|