spi: spi-ath79: Set the initial state of CS0
authorAlban Bedel <albeu@free.fr>
Fri, 24 Apr 2015 14:19:24 +0000 (16:19 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 27 Apr 2015 14:44:57 +0000 (15:44 +0100)
The internal chip select CS0 wasn't initialized properly to work with
CS HIGH chips.

Signed-off-by: Alban Bedel <albeu@free.fr>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-ath79.c

index b37bedd059b3ff32af11e2ee86d3abc35fc4b258..bf1f9b32c597b502f0d1c51b7f33f64a4996fb25 100644 (file)
@@ -115,6 +115,7 @@ static void ath79_spi_disable(struct ath79_spi *sp)
 
 static int ath79_spi_setup_cs(struct spi_device *spi)
 {
+       struct ath79_spi *sp = ath79_spidev_to_sp(spi);
        int status;
 
        if (spi->chip_select && !gpio_is_valid(spi->cs_gpio))
@@ -132,6 +133,13 @@ static int ath79_spi_setup_cs(struct spi_device *spi)
 
                status = gpio_request_one(spi->cs_gpio, flags,
                                          dev_name(&spi->dev));
+       } else {
+               if (spi->mode & SPI_CS_HIGH)
+                       sp->ioc_base &= ~AR71XX_SPI_IOC_CS0;
+               else
+                       sp->ioc_base |= AR71XX_SPI_IOC_CS0;
+
+               ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
        }
 
        return status;