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

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.org


Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 519d6370
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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)