mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
spi: Force CS_HIGH if GPIO descriptors are used
Commitf3186dd876("spi: Optionally use GPIO descriptors for CS GPIOs") amended of_spi_parse_dt() to always set SPI_CS_HIGH for SPI slaves whose Chip Select is defined by a "cs-gpios" devicetree property. This change breaks drivers whose probe functions set the mode field of the spi_device because in doing so they clear the SPI_CS_HIGH flag. Fix by setting SPI_CS_HIGH in spi_setup (under the same conditions as in of_spi_parse_dt()). See also:83b2a8fe43("spi: spidev: Fix CS polarity if GPIO descriptors are used") Fixes:f3186dd876("spi: Optionally use GPIO descriptors for CS GPIOs") Signed-off-by: Phil Elwell <phil@raspberrypi.com> SQUASH: spi: Demote SPI_CS_HIGH warning to KERN_DEBUG This warning is unavoidable from a client's perspective and doesn't indicate anything wrong (just surprising). SQUASH with "spi: use_gpio_descriptor fixup moved to spi_setup" Signed-off-by: Phil Elwell <phil@raspberrypi.com>
This commit is contained in:
@@ -3882,6 +3882,7 @@ static int spi_set_cs_timing(struct spi_device *spi)
|
||||
*/
|
||||
int spi_setup(struct spi_device *spi)
|
||||
{
|
||||
struct spi_controller *ctlr = spi->controller;
|
||||
unsigned bad_bits, ugly_bits;
|
||||
int status;
|
||||
|
||||
@@ -3908,6 +3909,14 @@ int spi_setup(struct spi_device *spi)
|
||||
"setup: MOSI configured to idle low and high at the same time.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (ctlr->use_gpio_descriptors && ctlr->cs_gpiods &&
|
||||
ctlr->cs_gpiods[spi->chip_select[0]] && !(spi->mode & SPI_CS_HIGH)) {
|
||||
dev_dbg(&spi->dev,
|
||||
"setup: forcing CS_HIGH (use_gpio_descriptors)\n");
|
||||
spi->mode |= SPI_CS_HIGH;
|
||||
}
|
||||
|
||||
/*
|
||||
* Help drivers fail *cleanly* when they need options
|
||||
* that aren't supported with their current controller.
|
||||
|
||||
Reference in New Issue
Block a user