Commit 3b52093d authored by Linus Walleij's avatar Linus Walleij Committed by Alexandre Belloni

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: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20191204225731.20306-1-linus.walleij@linaro.orgSigned-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 519d6370
......@@ -365,9 +365,12 @@ static int ds1343_probe(struct spi_device *spi)
priv->spi = spi;
/* 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;
res = spi_setup(spi);
if (res)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment