On Fri, 2018-10-12 at 10:23 +0100, Phil Elwell wrote: > The SPI configuration state includes an SPI_NO_CS flag that disables > all CS line manipulation, for applications that want to manage their > own chip selects. However, this flag is ignored by the GPIO CS code > in the SPI framework. > @@ -729,7 +729,9 @@ static void spi_set_cs(struct spi_device *spi, bool enable) > enable = !enable; > > if (gpio_is_valid(spi->cs_gpio)) { > - gpio_set_value(spi->cs_gpio, !enable); > + /* Honour the SPI_NO_CS flag */ > + if (!(spi->mode & SPI_NO_CS)) > + gpio_set_value(spi->cs_gpio, !enable); > /* Some SPI masters need both GPIO CS & slave_select */ > if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && > spi->controller->set_cs) What about the calls to spi->controller->set_cs() after this? Should a driver provided set_cs method be responsible for checking SPI_NO_CS? Or should it not be called in the first place? I imagine it depends on what set_cs needs to do, which might not be solely related to changing the CS line.