]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
spi: omap2-mcspi: drive SPI_CLK on transfer_setup()
authorBastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Fri, 12 Sep 2025 07:08:58 +0000 (09:08 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 22 Sep 2025 08:28:50 +0000 (09:28 +0100)
If the cached contents of the CHCONF register doesn't have the FORCE bit
set, the setup() function failed to set the relevant idle state of the
SPI_CLK pin. In such case, the SPI_CLK's idle state is reached later with
set_cs(), but it's too late for the first SPI transfer which fails since
the CS is asserted before the clock reaching its idle state.

Add a first write in setup() that always sets the FORCE bit.
Keep the current write afterwards to ensure the FORCE bit won't stay in
the cached contents of the CHCONF register unless it's intended.

Signed-off-by: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Link: https://patch.msgid.link/20250912-omap-spi-fix-v1-1-f925b0d27ede@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-omap2-mcspi.c

index 6dc58a30804a12d16295a7ffc2edb192e6cc4a54..69c2e9d9be3c380327e26f94e82e05e6357f5384 100644 (file)
@@ -988,6 +988,7 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi,
        else
                l &= ~OMAP2_MCSPI_CHCONF_PHA;
 
+       mcspi_write_chconf0(spi, l | OMAP2_MCSPI_CHCONF_FORCE);
        mcspi_write_chconf0(spi, l);
 
        cs->mode = spi->mode;