spi: Support high CS when using descriptors
authorLinus Walleij <linus.walleij@linaro.org>
Wed, 16 Jan 2019 08:21:07 +0000 (09:21 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 24 Jan 2019 19:01:05 +0000 (19:01 +0000)
All controllers using GPIO descriptors can by definition
support high CS connections, so just enforce this when
registering an SPI controller.

This fixes a regression where controllers were missing
SPI_CS_HIGH, the drivers would fail like this:

spi spi0.0: setup: unsupported mode bits 4
cdns-spi fd0b0000.spi: can't setup spi0.0, status -22

This is because as using descriptors moves the CS inversion
logic over to gpiolib, all such controllers are registered
with CS active high.

Cc: Jan Kotas <jank@cadence.com>
Reported-by: Jan Kotas <jank@cadence.com>
Tested-by: Jan Kotas <jank@cadence.com>
Fixes: f3186dd87669 ("spi: Optionally use GPIO descriptors for CS GPIOs")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c

index 13f447a..0e0f2c6 100644 (file)
@@ -2279,6 +2279,11 @@ int spi_register_controller(struct spi_controller *ctlr)
                        status = spi_get_gpio_descs(ctlr);
                        if (status)
                                return status;
+                       /*
+                        * A controller using GPIO descriptors always
+                        * supports SPI_CS_HIGH if need be.
+                        */
+                       ctlr->mode_bits |= SPI_CS_HIGH;
                } else {
                        /* Legacy code path for GPIOs from DT */
                        status = of_spi_register_master(ctlr);