diff options
| -rw-r--r-- | drivers/spi/atmel_spi.c | 15 | ||||
| -rw-r--r-- | drivers/spi/atmel_spi.h | 2 | 
2 files changed, 13 insertions, 4 deletions
| diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c index f4b1bad22..52594e352 100644 --- a/drivers/spi/atmel_spi.c +++ b/drivers/spi/atmel_spi.c @@ -30,6 +30,15 @@  #include "atmel_spi.h" +static int spi_has_wdrbt(struct atmel_spi_slave *slave) +{ +	unsigned int ver; + +	ver = spi_readl(slave, VERSION); + +	return (ATMEL_SPI_VERSION_REV(ver) >= 0x210); +} +  void spi_init()  { @@ -90,10 +99,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,  	as->regs = regs;  	as->mr = ATMEL_SPI_MR_MSTR | ATMEL_SPI_MR_MODFDIS -#if defined(CONFIG_AT91SAM9X5) || defined(CONFIG_AT91SAM9M10G45) -			| ATMEL_SPI_MR_WDRBT -#endif  			| ATMEL_SPI_MR_PCS(~(1 << cs) & 0xf); +	if (spi_has_wdrbt(as)) +		as->mr |= ATMEL_SPI_MR_WDRBT; +  	spi_writel(as, CSR(cs), csrx);  	return &as->slave; diff --git a/drivers/spi/atmel_spi.h b/drivers/spi/atmel_spi.h index 057de9ade..d2409454f 100644 --- a/drivers/spi/atmel_spi.h +++ b/drivers/spi/atmel_spi.h @@ -64,7 +64,7 @@  #define ATMEL_SPI_CSRx_DLYBCT(x)	((x) << 24)  /* Bits in VERSION */ -#define ATMEL_SPI_VERSION_REV(x)	((x) << 0) +#define ATMEL_SPI_VERSION_REV(x)	((x) & 0xfff)  #define ATMEL_SPI_VERSION_MFN(x)	((x) << 16)  /* Constants for CSRx:BITS */ |