]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: spi-axi-spi-engine: Add support for MOSI idle configuration
authorMarcelo Schmitt <marcelo.schmitt@analog.com>
Fri, 12 Jul 2024 19:21:47 +0000 (16:21 -0300)
committerMark Brown <broonie@kernel.org>
Mon, 29 Jul 2024 00:19:54 +0000 (01:19 +0100)
Implement MOSI idle low and MOSI idle high to better support peripherals
that request specific MOSI behavior.

Acked-by: Nuno Sa <nuno.sa@analog.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
Link: https://patch.msgid.link/f237166c7bbe0a1cdabce243b97484bf2f428143.1720810545.git.marcelo.schmitt@analog.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-axi-spi-engine.c

index 447e5a962dee86ce2ebb774e5412b41659ce1afa..8ad86f53ca504baa822fddb312471cedab362d22 100644 (file)
@@ -41,6 +41,7 @@
 #define SPI_ENGINE_CONFIG_CPHA                 BIT(0)
 #define SPI_ENGINE_CONFIG_CPOL                 BIT(1)
 #define SPI_ENGINE_CONFIG_3WIRE                        BIT(2)
+#define SPI_ENGINE_CONFIG_SDO_IDLE_HIGH                BIT(3)
 
 #define SPI_ENGINE_INST_TRANSFER               0x0
 #define SPI_ENGINE_INST_ASSERT                 0x1
@@ -137,6 +138,10 @@ static unsigned int spi_engine_get_config(struct spi_device *spi)
                config |= SPI_ENGINE_CONFIG_CPHA;
        if (spi->mode & SPI_3WIRE)
                config |= SPI_ENGINE_CONFIG_3WIRE;
+       if (spi->mode & SPI_MOSI_IDLE_HIGH)
+               config |= SPI_ENGINE_CONFIG_SDO_IDLE_HIGH;
+       if (spi->mode & SPI_MOSI_IDLE_LOW)
+               config &= ~SPI_ENGINE_CONFIG_SDO_IDLE_HIGH;
 
        return config;
 }
@@ -692,9 +697,13 @@ static int spi_engine_probe(struct platform_device *pdev)
        host->num_chipselect = 8;
 
        /* Some features depend of the IP core version. */
-       if (ADI_AXI_PCORE_VER_MINOR(version) >= 2) {
-               host->mode_bits |= SPI_CS_HIGH;
-               host->setup = spi_engine_setup;
+       if (ADI_AXI_PCORE_VER_MAJOR(version) >= 1) {
+               if (ADI_AXI_PCORE_VER_MINOR(version) >= 2) {
+                       host->mode_bits |= SPI_CS_HIGH;
+                       host->setup = spi_engine_setup;
+               }
+               if (ADI_AXI_PCORE_VER_MINOR(version) >= 3)
+                       host->mode_bits |= SPI_MOSI_IDLE_LOW | SPI_MOSI_IDLE_HIGH;
        }
 
        if (host->max_speed_hz == 0)