[PATCH] spi: stm32_spi: Fix GPIO chipselect polarity handling
Patrice CHOTARD
patrice.chotard at foss.st.com
Wed Aug 24 16:04:38 CEST 2022
Hi Marek
On 8/23/22 19:07, Marek Vasut wrote:
> The GPIO chipselect signal polarity is handled by the GPIO core code,
> the driver code is only responsible for asserting and deasserting the
> GPIO. Do not invert the GPIO polarity in the driver code.
>
> For example, In case CS GPIO is active low, then the DT must contain
> GPIO_ACTIVE_LOW flag and the GPIO core code would set the GPIO accordingly.
>
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
> drivers/spi/stm32_spi.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/spi/stm32_spi.c b/drivers/spi/stm32_spi.c
> index fe5419e8518..0cb24546ca9 100644
> --- a/drivers/spi/stm32_spi.c
> +++ b/drivers/spi/stm32_spi.c
> @@ -434,7 +434,7 @@ static int stm32_spi_xfer(struct udevice *slave, unsigned int bitlen,
>
> slave_plat = dev_get_parent_plat(slave);
> if (flags & SPI_XFER_BEGIN)
> - stm32_spi_set_cs(bus, slave_plat->cs, false);
> + stm32_spi_set_cs(bus, slave_plat->cs, true);
>
> /* Be sure to have data in fifo before starting data transfer */
> if (priv->tx_buf)
> @@ -485,7 +485,7 @@ static int stm32_spi_xfer(struct udevice *slave, unsigned int bitlen,
> stm32_spi_stopxfer(bus);
>
> if (flags & SPI_XFER_END)
> - stm32_spi_set_cs(bus, slave_plat->cs, true);
> + stm32_spi_set_cs(bus, slave_plat->cs, false);
>
> return xfer_status;
> }
It's a bit confusing as there is also the spi property "spi-cs-high" which also invert the polarity
in stm32_spi_set_cs() :
if (priv->cs_high)
enable = !enable;
return dm_gpio_set_value(&plat->cs_gpios[cs], enable ? 1 : 0);
It's seems that chip select polarity can be managed at two different places.
Patrice
More information about the U-Boot
mailing list