I can confirm that the AC97 driver in the 2.6.18-at0 (BSP 2.0) kernel works. It was tested on the NGW100 using a Cirrus Logic CS4202 AC97 CODEC attached to the expansion headers. This chip can be acquired from Digikey for around $6 USD. It also requires a 24.576MHz crystal and a few passive components. See the reference design in the for details.
Your kernel .config should have the following:
# # Sound # CONFIG_SOUND=m # # Advanced Linux Sound Architecture # CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m # CONFIG_SND_SEQUENCER is not set CONFIG_SND_OSSEMUL=y CONFIG_SND_MIXER_OSS=m CONFIG_SND_PCM_OSS=m CONFIG_SND_PCM_OSS_PLUGINS=y # CONFIG_SND_DYNAMIC_MINORS is not set # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_DEBUG_DETECT=y # CONFIG_SND_PCM_XRUN_DEBUG is not set # # Generic devices # CONFIG_SND_AC97_CODEC=m CONFIG_SND_AC97_BUS=m CONFIG_SND_DUMMY=m # CONFIG_SND_MTPAV is not set # CONFIG_SND_SERIAL_U16550 is not set # CONFIG_SND_MPU401 is not set # # ALSA AVR32 devices # CONFIG_SND_ATMEL_AC97=m CONFIG_SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS=y CONFIG_SND_ATMEL_AC97C_USE_PDC=y CONFIG_SND_AT73C213=m CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS=y # # Open Sound System # CONFIG_SOUND_PRIME=m # CONFIG_OSS_OBSOLETE_DRIVER is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set CONFIG_SOUND_AT32_DAC=m
Edit your board setup file to add the AC97 peripheral initialization:
linux-2.6.xx/arch/avr32/boards/atngw/setup.c
for the NGW100 linux-2.6.xx/arch/avr32/boards/atstk1000/atstk1002.c
for the STK1000
add the following line to your board setup file (this call is located in linux-2.6.xx/arch/avr32/mach-at32ap/at32ap7000.c
):
for the NGW100, inside static int __init atngw_init(void)
add
at32_add_device_ac97c(0);
for the STK1000, inside static int __init atstk1002_init(void)
add
at32_add_device_ac97c(0);
Then recompile your kernel.
Add the following lines to /etc/modules
on your target to load the modules automatically at boot, or you can manually load them with modprobe.
snd-atmel-ac97 index=0 id="CS4202" enable=1 snd-pcm-oss snd-mixer-oss
Check to see if everything worked by typing:
cat /proc/asound/cards
You should see the following:
0 [CS4202 ]: ac97c - Atmel-AC97 Atmel AVR32 AC97 Controller at 0xfff02800, irq 29
Inside your /dev directory you should now have:
pcmC0D0c pcmC0D0p mixer controlC0 dsp audio