diff options
author | Mark Brown <broonie@kernel.org> | 2016-12-12 15:54:03 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-12-12 15:54:03 +0000 |
commit | 05232669503f54babf9f899748baf02934fd1051 (patch) | |
tree | 39155671837d79313a7c25c1a1c98f1527123dfb | |
parent | b14a8a8028a0699d1aafa9a610b01a2ba5a749a6 (diff) | |
parent | 8eee6b9dd30d5b20a4c31886057a68bb6a2736c9 (diff) | |
download | linux-05232669503f54babf9f899748baf02934fd1051.tar.bz2 |
Merge remote-tracking branch 'spi/topic/core' into spi-next
-rw-r--r-- | drivers/spi/spi.c | 9 | ||||
-rw-r--r-- | include/linux/spi/spi.h | 1 |
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 838783c3fed0..91b25314ba03 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -697,10 +697,15 @@ static void spi_set_cs(struct spi_device *spi, bool enable) if (spi->mode & SPI_CS_HIGH) enable = !enable; - if (gpio_is_valid(spi->cs_gpio)) + if (gpio_is_valid(spi->cs_gpio)) { gpio_set_value(spi->cs_gpio, !enable); - else if (spi->master->set_cs) + /* Some SPI masters need both GPIO CS & slave_select */ + if ((spi->master->flags & SPI_MASTER_GPIO_SS) && + spi->master->set_cs) + spi->master->set_cs(spi, !enable); + } else if (spi->master->set_cs) { spi->master->set_cs(spi, !enable); + } } #ifdef CONFIG_HAS_DMA diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 4b743ac35396..75c6bd0ac605 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -442,6 +442,7 @@ struct spi_master { #define SPI_MASTER_NO_TX BIT(2) /* can't do buffer write */ #define SPI_MASTER_MUST_RX BIT(3) /* requires rx */ #define SPI_MASTER_MUST_TX BIT(4) /* requires tx */ +#define SPI_MASTER_GPIO_SS BIT(5) /* GPIO CS must select slave */ /* * on some hardware transfer / message size may be constrained |