diff options
author | Marcus Weseloh <mweseloh42@gmail.com> | 2016-01-05 15:46:20 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-01-07 10:41:25 -0500 |
commit | 218e0b575ffe6de1c93249871b25bbf570fe1cb5 (patch) | |
tree | 11a31b1449cb713465b52bc2d565a2539ae6b315 | |
parent | 8005c49d9aea74d382f474ce11afbbc7d7130bec (diff) |
spi: sun4i: Prevent chip-select from being activated twice before a transfer
The SPI core calls set_cs before a transfer, but the SUN4I_CTL_CS_MANUAL
flag is only set in transfer_one. This leads to the following pattern on
the chip-select line (with runtime power-management on every transfer,
without it only on the first one):
activate, deactivate, activate, transfer, deactivate
Moving the configuration of the SUN4I_CTL_CS_MANUAL flag from transfer_one
to set_cs removes the double activation.
Signed-off-by: Marcus Weseloh <mweseloh42@gmail.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-sun4i.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c index fbb0a4d74e91..a6d936c68674 100644 --- a/drivers/spi/spi-sun4i.c +++ b/drivers/spi/spi-sun4i.c | |||
@@ -140,6 +140,9 @@ static void sun4i_spi_set_cs(struct spi_device *spi, bool enable) | |||
140 | reg &= ~SUN4I_CTL_CS_MASK; | 140 | reg &= ~SUN4I_CTL_CS_MASK; |
141 | reg |= SUN4I_CTL_CS(spi->chip_select); | 141 | reg |= SUN4I_CTL_CS(spi->chip_select); |
142 | 142 | ||
143 | /* We want to control the chip select manually */ | ||
144 | reg |= SUN4I_CTL_CS_MANUAL; | ||
145 | |||
143 | if (enable) | 146 | if (enable) |
144 | reg |= SUN4I_CTL_CS_LEVEL; | 147 | reg |= SUN4I_CTL_CS_LEVEL; |
145 | else | 148 | else |
@@ -222,9 +225,6 @@ static int sun4i_spi_transfer_one(struct spi_master *master, | |||
222 | else | 225 | else |
223 | reg |= SUN4I_CTL_DHB; | 226 | reg |= SUN4I_CTL_DHB; |
224 | 227 | ||
225 | /* We want to control the chip select manually */ | ||
226 | reg |= SUN4I_CTL_CS_MANUAL; | ||
227 | |||
228 | sun4i_spi_write(sspi, SUN4I_CTL_REG, reg); | 228 | sun4i_spi_write(sspi, SUN4I_CTL_REG, reg); |
229 | 229 | ||
230 | /* Ensure that we have a parent clock fast enough */ | 230 | /* Ensure that we have a parent clock fast enough */ |