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