diff options
author | Hubert Feurstein <h.feurstein@gmail.com> | 2011-09-10 21:18:33 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-09-14 10:40:17 +0200 |
commit | 156d751b7e3387ee7bb8e3dbd306a61010737115 (patch) | |
tree | 2497c641150ebbd163c96fcce0c435e1c4883009 | |
parent | bea738f7baffe7fede835cff88d0247072d2f9d7 (diff) | |
download | barebox-156d751b7e3387ee7bb8e3dbd306a61010737115.tar.gz barebox-156d751b7e3387ee7bb8e3dbd306a61010737115.tar.xz |
at91sam9g45: add atmel-spi support
Signed-off-by: Hubert Feurstein <h.feurstein@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | arch/arm/mach-at91/at91sam9g45_devices.c | 41 | ||||
-rw-r--r-- | arch/arm/mach-at91/include/mach/board.h | 2 |
2 files changed, 43 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index f6e1eb419e..f311b6283e 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -261,3 +261,44 @@ void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) {} #endif +#if defined(CONFIG_DRIVER_SPI_ATMEL) +/* SPI */ +void at91_add_device_spi(int spi_id, struct at91_spi_platform_data *pdata) +{ + int i; + int cs_pin; + resource_size_t start; + + for (i = 0; i < pdata->num_chipselect; i++) { + cs_pin = pdata->chipselect[i]; + + /* enable chip-select pin */ + if (cs_pin > 0) + at91_set_gpio_output(cs_pin, 1); + } + + /* Configure SPI bus(es) */ + if (spi_id == 0) { + start = AT91SAM9G45_BASE_SPI0; + at91_set_A_periph(AT91_PIN_PB0, 0); /* SPI0_MISO */ + at91_set_A_periph(AT91_PIN_PB1, 0); /* SPI0_MOSI */ + at91_set_A_periph(AT91_PIN_PB2, 0); /* SPI0_SPCK */ + + add_generic_device("atmel_spi", spi_id, NULL, start, SZ_16K, + IORESOURCE_MEM, pdata); + } + + else if (spi_id == 1) { + start = AT91SAM9G45_BASE_SPI1; + at91_set_A_periph(AT91_PIN_PB14, 0); /* SPI1_MISO */ + at91_set_A_periph(AT91_PIN_PB15, 0); /* SPI1_MOSI */ + at91_set_A_periph(AT91_PIN_PB16, 0); /* SPI1_SPCK */ + + add_generic_device("atmel_spi", spi_id, NULL, start, SZ_16K, + IORESOURCE_MEM, pdata); + } +} + +#else +void at91_add_device_spi(int spi_id, struct at91_spi_platform_data *pdata) {} +#endif diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index e88834badc..2adc035f7d 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h @@ -82,4 +82,6 @@ struct at91_spi_platform_data { int *chipselect; /* array of gpio_pins */ int num_chipselect; /* chipselect array entry count */ }; + +void at91_add_device_spi(int spi_id, struct at91_spi_platform_data *pdata); #endif |