[PATCH 4/7] spi: Support high CS when using descriptors

Ike Panhc ike.pan at canonical.com
Fri May 24 06:48:00 UTC 2019

From: Linus Walleij <linus.walleij at linaro.org>

BugLink: https://bugs.launchpad.net/bugs/1826142

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 at cadence.com>
Reported-by: Jan Kotas <jank at cadence.com>
Tested-by: Jan Kotas <jank at cadence.com>
Fixes: f3186dd87669 ("spi: Optionally use GPIO descriptors for CS GPIOs")
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
Signed-off-by: Mark Brown <broonie at kernel.org>
(cherry picked from commit 2df201e0067d84db5955d07cc0d7ccc3b7295aef)
Signed-off-by: Ike Panhc <ike.pan at canonical.com>
 drivers/spi/spi.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 13f447a67d67..0e0f2c62973c 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -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);

More information about the kernel-team mailing list