|
@@ -87,6 +87,16 @@ static void cs_activate(struct atmel_spi *as, struct spi_device *spi)
|
|
unsigned gpio = (unsigned) spi->controller_data;
|
|
unsigned gpio = (unsigned) spi->controller_data;
|
|
unsigned active = spi->mode & SPI_CS_HIGH;
|
|
unsigned active = spi->mode & SPI_CS_HIGH;
|
|
u32 mr;
|
|
u32 mr;
|
|
|
|
+ int i;
|
|
|
|
+ u32 csr;
|
|
|
|
+ u32 cpol = (spi->mode & SPI_CPOL) ? SPI_BIT(CPOL) : 0;
|
|
|
|
+
|
|
|
|
+ /* Make sure clock polarity is correct */
|
|
|
|
+ for (i = 0; i < spi->master->num_chipselect; i++) {
|
|
|
|
+ csr = spi_readl(as, CSR0 + 4 * i);
|
|
|
|
+ if ((csr ^ cpol) & SPI_BIT(CPOL))
|
|
|
|
+ spi_writel(as, CSR0 + 4 * i, csr ^ SPI_BIT(CPOL));
|
|
|
|
+ }
|
|
|
|
|
|
mr = spi_readl(as, MR);
|
|
mr = spi_readl(as, MR);
|
|
mr = SPI_BFINS(PCS, ~(1 << spi->chip_select), mr);
|
|
mr = SPI_BFINS(PCS, ~(1 << spi->chip_select), mr);
|