diff options
Diffstat (limited to 'arch/arm/mach-at91/at91sam9g45_devices.c')
-rw-r--r-- | arch/arm/mach-at91/at91sam9g45_devices.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 45720c84f0bf..d581cff80c4c 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -598,6 +598,61 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
598 | 598 | ||
599 | 599 | ||
600 | /* -------------------------------------------------------------------- | 600 | /* -------------------------------------------------------------------- |
601 | * AC97 | ||
602 | * -------------------------------------------------------------------- */ | ||
603 | |||
604 | #if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE) | ||
605 | static u64 ac97_dmamask = DMA_BIT_MASK(32); | ||
606 | static struct ac97c_platform_data ac97_data; | ||
607 | |||
608 | static struct resource ac97_resources[] = { | ||
609 | [0] = { | ||
610 | .start = AT91SAM9G45_BASE_AC97C, | ||
611 | .end = AT91SAM9G45_BASE_AC97C + SZ_16K - 1, | ||
612 | .flags = IORESOURCE_MEM, | ||
613 | }, | ||
614 | [1] = { | ||
615 | .start = AT91SAM9G45_ID_AC97C, | ||
616 | .end = AT91SAM9G45_ID_AC97C, | ||
617 | .flags = IORESOURCE_IRQ, | ||
618 | }, | ||
619 | }; | ||
620 | |||
621 | static struct platform_device at91sam9g45_ac97_device = { | ||
622 | .name = "atmel_ac97c", | ||
623 | .id = 0, | ||
624 | .dev = { | ||
625 | .dma_mask = &ac97_dmamask, | ||
626 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
627 | .platform_data = &ac97_data, | ||
628 | }, | ||
629 | .resource = ac97_resources, | ||
630 | .num_resources = ARRAY_SIZE(ac97_resources), | ||
631 | }; | ||
632 | |||
633 | void __init at91_add_device_ac97(struct ac97c_platform_data *data) | ||
634 | { | ||
635 | if (!data) | ||
636 | return; | ||
637 | |||
638 | at91_set_A_periph(AT91_PIN_PD8, 0); /* AC97FS */ | ||
639 | at91_set_A_periph(AT91_PIN_PD9, 0); /* AC97CK */ | ||
640 | at91_set_A_periph(AT91_PIN_PD7, 0); /* AC97TX */ | ||
641 | at91_set_A_periph(AT91_PIN_PD6, 0); /* AC97RX */ | ||
642 | |||
643 | /* reset */ | ||
644 | if (data->reset_pin) | ||
645 | at91_set_gpio_output(data->reset_pin, 0); | ||
646 | |||
647 | ac97_data = *data; | ||
648 | platform_device_register(&at91sam9g45_ac97_device); | ||
649 | } | ||
650 | #else | ||
651 | void __init at91_add_device_ac97(struct ac97c_platform_data *data) {} | ||
652 | #endif | ||
653 | |||
654 | |||
655 | /* -------------------------------------------------------------------- | ||
601 | * LCD Controller | 656 | * LCD Controller |
602 | * -------------------------------------------------------------------- */ | 657 | * -------------------------------------------------------------------- */ |
603 | 658 | ||