spi: bcm2835: set up spi-mode before asserting cs-gpio
authorMartin Sperl <kernel@martin.sperl.org>
Tue, 28 Jul 2015 14:03:12 +0000 (14:03 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 29 Jul 2015 17:22:04 +0000 (18:22 +0100)
commitacace73df2c1913a526c1b41e4741a4a6704c863
tree7d104d1dda6ecc317fac583e5491b7360530caca
parentbc0195aad0daa2ad5b0d76cce22b167bc3435590
spi: bcm2835: set up spi-mode before asserting cs-gpio

When using reverse polarity for clock (spi-cpol) on a device
the clock line gets altered after chip-select has been asserted
resulting in an additional clock beat, which confuses hardware.

This did not show when using native-CS, as the same register
is used to control cs as well as polarity, so the changes came
into effect at the same time. Unfortunately this is not true
with gpio-cs.

To avoid this situation this patch moves the setup of polarity
(spi-cpol and spi-cpha) outside of the chip-select into
prepare_message, which is run prior to asserting chip-select.

Also fixes resetting 3-wire mode after use of rx-mode, so that
a 3-Wire sequence TX, RX, TX works as well (right now it runs
TX, RX, RX instead)

Reported-by: Noralf Tronnes <noralf@tronnes.org>
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
drivers/spi/spi-bcm2835.c