spi: orion: add LSB support
authorBastian Stender <bst@pengutronix.de>
Fri, 7 Apr 2017 13:52:33 +0000 (15:52 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 7 Apr 2017 17:15:20 +0000 (18:15 +0100)
The orion spi driver currently only supports the normal (i.e. MSB) mode.
This patch adds LSB first mode.

Also correct the comment about supported SPI modes that was left over by
b15d5d7004e2 ("spi/orion: Add SPI_CHPA and SPI_CPOL support to kirkwood
driver.").

Signed-off-by: Bastian Stender <bst@pengutronix.de>
Acked-by: Uwe Kleine-K├Ânig <u.kleine-koenig@pengutronix.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-orion.c

index 6b001c4a564086528e9db608f7250305656d5da7..be2e87ee8b31ac6c215c0ab41f17bd9ae3bdae3c 100644 (file)
@@ -39,6 +39,8 @@
 
 #define ORION_SPI_IF_CTRL_REG          0x00
 #define ORION_SPI_IF_CONFIG_REG                0x04
+#define ORION_SPI_IF_RXLSBF            BIT(14)
+#define ORION_SPI_IF_TXLSBF            BIT(13)
 #define ORION_SPI_DATA_OUT_REG         0x08
 #define ORION_SPI_DATA_IN_REG          0x0c
 #define ORION_SPI_INT_CAUSE_REG                0x10
@@ -234,6 +236,11 @@ orion_spi_mode_set(struct spi_device *spi)
                reg |= ORION_SPI_MODE_CPOL;
        if (spi->mode & SPI_CPHA)
                reg |= ORION_SPI_MODE_CPHA;
+       if (spi->mode & SPI_LSB_FIRST)
+               reg |= ORION_SPI_IF_RXLSBF | ORION_SPI_IF_TXLSBF;
+       else
+               reg &= ~(ORION_SPI_IF_RXLSBF | ORION_SPI_IF_TXLSBF);
+
        writel(reg, spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG));
 }
 
@@ -591,8 +598,8 @@ static int orion_spi_probe(struct platform_device *pdev)
                        master->bus_num = cell_index;
        }
 
-       /* we support only mode 0, and no options */
-       master->mode_bits = SPI_CPHA | SPI_CPOL;
+       /* we support all 4 SPI modes and LSB first option */
+       master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST;
        master->set_cs = orion_spi_set_cs;
        master->transfer_one = orion_spi_transfer_one;
        master->num_chipselect = ORION_NUM_CHIPSELECTS;