From 65f948ac0d14799f5ab279b8783e5834b19ceed0 Mon Sep 17 00:00:00 2001 From: Nicolas Ferre Date: Fri, 18 Sep 2009 16:14:21 +0100 Subject: [PATCH] --- yaml --- r: 166115 b: refs/heads/master c: 439a33074c7d0895dd1e13ac354b8b4505d3ea43 h: refs/heads/master i: 166113: 76bfcb7f0da23f47997505b041ec309142f0a6bc 166111: de65b4e03ffaccdb759d344d68d47309ec850f50 v: v3 --- [refs] | 2 +- trunk/arch/arm/mach-at91/at91sam9rl_devices.c | 55 +++++++++++++++++++ trunk/arch/arm/mach-at91/board-sam9rlek.c | 10 ++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index e7356b873481..bb7097483768 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 378ac65e6c6779c526c9016cafb61d84ff9cbecd +refs/heads/master: 439a33074c7d0895dd1e13ac354b8b4505d3ea43 diff --git a/trunk/arch/arm/mach-at91/at91sam9rl_devices.c b/trunk/arch/arm/mach-at91/at91sam9rl_devices.c index 1c2dced8748d..d345f5453dbe 100644 --- a/trunk/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/trunk/arch/arm/mach-at91/at91sam9rl_devices.c @@ -443,6 +443,61 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) #endif +/* -------------------------------------------------------------------- + * AC97 + * -------------------------------------------------------------------- */ + +#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE) +static u64 ac97_dmamask = DMA_BIT_MASK(32); +static struct ac97c_platform_data ac97_data; + +static struct resource ac97_resources[] = { + [0] = { + .start = AT91SAM9RL_BASE_AC97C, + .end = AT91SAM9RL_BASE_AC97C + SZ_16K - 1, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = AT91SAM9RL_ID_AC97C, + .end = AT91SAM9RL_ID_AC97C, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device at91sam9rl_ac97_device = { + .name = "atmel_ac97c", + .id = 0, + .dev = { + .dma_mask = &ac97_dmamask, + .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &ac97_data, + }, + .resource = ac97_resources, + .num_resources = ARRAY_SIZE(ac97_resources), +}; + +void __init at91_add_device_ac97(struct ac97c_platform_data *data) +{ + if (!data) + return; + + at91_set_A_periph(AT91_PIN_PD1, 0); /* AC97FS */ + at91_set_A_periph(AT91_PIN_PD2, 0); /* AC97CK */ + at91_set_A_periph(AT91_PIN_PD3, 0); /* AC97TX */ + at91_set_A_periph(AT91_PIN_PD4, 0); /* AC97RX */ + + /* reset */ + if (data->reset_pin) + at91_set_gpio_output(data->reset_pin, 0); + + ac97_data = *data; + platform_device_register(&at91sam9rl_ac97_device); +} +#else +void __init at91_add_device_ac97(struct ac97c_platform_data *data) {} +#endif + + /* -------------------------------------------------------------------- * LCD Controller * -------------------------------------------------------------------- */ diff --git a/trunk/arch/arm/mach-at91/board-sam9rlek.c b/trunk/arch/arm/mach-at91/board-sam9rlek.c index 9d07679efce7..cde056570a44 100644 --- a/trunk/arch/arm/mach-at91/board-sam9rlek.c +++ b/trunk/arch/arm/mach-at91/board-sam9rlek.c @@ -210,6 +210,14 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data; #endif +/* + * AC97 + * reset_pin is not connected: NRST + */ +static struct ac97c_platform_data ek_ac97_data = { +}; + + /* * LEDs */ @@ -299,6 +307,8 @@ static void __init ek_board_init(void) at91_add_device_mmc(0, &ek_mmc_data); /* LCD Controller */ at91_add_device_lcdc(&ek_lcdc_data); + /* AC97 */ + at91_add_device_ac97(&ek_ac97_data); /* Touch Screen Controller */ at91_add_device_tsadcc(); /* LEDs */