]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
spi: a3700: Allow to enable or disable FIFO mode
authorMaxime Chevallier <maxime.chevallier@smile.fr>
Wed, 17 Jan 2018 16:15:27 +0000 (17:15 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 18 Jan 2018 10:59:26 +0000 (10:59 +0000)
The armada 3700 SPI controller allows to make transfers without using
the 32 bytes RFIFO and WFIFO.

This commit enable switching between FIFO and non-FIFO mode, which is
necessary to implement full-duplex transfers.

Signed-off-by: Maxime Chevallier <maxime.chevallier@smile.fr>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-armada-3700.c

index 07f227e3c834d617666d2fc7589dab0bca8a9e00..97938c6d6267c4b2717e834dc15892f4dc832501 100644 (file)
@@ -185,12 +185,15 @@ static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi,
        return 0;
 }
 
-static void a3700_spi_fifo_mode_set(struct a3700_spi *a3700_spi)
+static void a3700_spi_fifo_mode_set(struct a3700_spi *a3700_spi, bool enable)
 {
        u32 val;
 
        val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
-       val |= A3700_SPI_FIFO_MODE;
+       if (enable)
+               val |= A3700_SPI_FIFO_MODE;
+       else
+               val &= ~A3700_SPI_FIFO_MODE;
        spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
 }
 
@@ -291,7 +294,7 @@ static int a3700_spi_init(struct a3700_spi *a3700_spi)
                a3700_spi_deactivate_cs(a3700_spi, i);
 
        /* Enable FIFO mode */
-       a3700_spi_fifo_mode_set(a3700_spi);
+       a3700_spi_fifo_mode_set(a3700_spi, true);
 
        /* Set SPI mode */
        a3700_spi_mode_set(a3700_spi, master->mode_bits);