1 From 1d78f72cb5a387922870e2a54228be25f84f95f6 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.com>
3 Date: Tue, 16 Jun 2020 10:23:29 +0100
4 Subject: [PATCH] Revert "spi: spi-bcm2835: Disable forced software
7 This reverts commit 2697f0186db346176832b8eb79adaf5c874681e8.
9 See: https://github.com/raspberrypi/linux/pull/3687
11 drivers/spi/spi-bcm2835.c | 37 +++++++++++++++++++++++++++++++++++++
12 1 file changed, 37 insertions(+)
14 --- a/drivers/spi/spi-bcm2835.c
15 +++ b/drivers/spi/spi-bcm2835.c
16 @@ -1235,6 +1235,43 @@ static int bcm2835_spi_setup(struct spi_
21 + * Translate native CS to GPIO
23 + * FIXME: poking around in the gpiolib internals like this is
24 + * not very good practice. Find a way to locate the real problem
25 + * and fix it. Why is the GPIO descriptor in spi->cs_gpiod
26 + * sometimes not assigned correctly? Erroneous device trees?
29 + /* get the gpio chip for the base */
30 + chip = gpiochip_find("pinctrl-bcm2835", chip_match_name);
35 + * Retrieve the corresponding GPIO line used for CS.
36 + * The inversion semantics will be handled by the GPIO core
37 + * code, so we pass GPIOS_OUT_LOW for "unasserted" and
38 + * the correct flag for inversion semantics. The SPI_CS_HIGH
39 + * on spi->mode cannot be checked for polarity in this case
40 + * as the flag use_gpio_descriptors enforces SPI_CS_HIGH.
42 + if (of_property_read_bool(spi->dev.of_node, "spi-cs-high"))
43 + lflags = GPIO_ACTIVE_HIGH;
45 + lflags = GPIO_ACTIVE_LOW;
46 + spi->cs_gpiod = gpiochip_request_own_desc(chip, 8 - spi->chip_select,
50 + if (IS_ERR(spi->cs_gpiod))
51 + return PTR_ERR(spi->cs_gpiod);
53 + /* and set up the "mode" and level */
54 + dev_info(&spi->dev, "setting up native-CS%i to use GPIO\n",