rtc: ds1343: Do not hardcode SPI mode flags

The current use of mode flags to us SPI_MODE_3 and
SPI_CS_HIGH is fragile: it overwrites anything already
assigned by the SPI core. Change it thusly:

- Just |= the SPI_MODE_3 so we keep other flags
- Assign ^= SPI_CS_HIGH since we might be active high
  already, and that is usually the case with GPIOs used
  for chip select, even if they are in practice active low.

Add a comment clarifying why ^= SPI_CS_HIGH is the right
choice here.

Reported-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20191204225731.20306-1-linus.walleij@linaro.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
Linus Walleij 2019-12-04 23:57:31 +01:00 committed by Alexandre Belloni
parent 519d63702d
commit 3b52093dc9
1 changed files with 5 additions and 2 deletions

View File

@ -365,9 +365,12 @@ static int ds1343_probe(struct spi_device *spi)
priv->spi = spi; priv->spi = spi;
/* RTC DS1347 works in spi mode 3 and /* RTC DS1347 works in spi mode 3 and
* its chip select is active high * its chip select is active high. Active high should be defined as
* "inverse polarity" as GPIO-based chip selects can be logically
* active high but inverted by the GPIO library.
*/ */
spi->mode = SPI_MODE_3 | SPI_CS_HIGH; spi->mode |= SPI_MODE_3;
spi->mode ^= SPI_CS_HIGH;
spi->bits_per_word = 8; spi->bits_per_word = 8;
res = spi_setup(spi); res = spi_setup(spi);
if (res) if (res)