Wiki

This version is outdated by a newer approved version.DiffThis version (06 May 2011 23:04) is a draft.
Approvals: 0/1

This is an old revision of the document!


Adding Audio to the Kernel (ADAU1373)

Adding Kernel Support - As a module

Skip this section if you want to build the driver into the kernel directly. To add support for codec ADAU1373 to the kernel build system, a few things must be enabled properly for things to work.The configuration is as following:

Linux Kernel Configuration
  Device Drivers  ---> 
    Sound  ---> 
      <M> Sound card support
        Advanced Linux Sound Architecture  --->
          <M> Advanced Linux Sound Architecture
          < > Sequencer support
          <M> OSS Mixer API 
          <M> OSS PCM (digital audio) API
        System on Chip audio support  --->
            <M> ALSA for SoC audio support
            <M> SoC I2S Audio for the ADI BF5xx chip 
            <M> SoC ADAU1373 Audio support 
            < > SoC AC97 Audio support for BF5xx 
            (0) Set a SPORT for Sound chip
I2C bus is used to configure the codec. So, if the audio driver is built into kernel, the I2c driver is also built into kernel automatically. But if the audio driver is built as module, then make sure that the I2C driver is loaded before the audio module.
Linux Kernel Configuration
  Device Drivers  --->
    <*> I2C support  --->
      --- I2C support
          I2C Hardware Bus Support --->
            <*> Blackfin TWI I2C support  

Doing this will create modules (outside the kernel). The modules will be inserted automatically when it is needed. You can also build sound driver into kernel.

Testing the built in kernel driver

If audio is configured as modules, skip this section. If audio is built into kernel and you have booted the kernel, there are a few things to check to ensure audio is working:

  1. Check the boot messages to see if you have booted the correct kernel. During kernel boot, it should print out:
    Advanced Linux Sound Architecture Driver Version 1.0.12rc1 (Thu Jun 22 13:55:50 2006 UTC).
    ASoC version 0.13.1
    dma rx:3 tx:4, err irq:15, regs:ffc00800
    adau1371 Audio Codec 0.1<6>dma_alloc_init: dma_page @ 0x03011000 - 512 pages at 0x03e00000
    asoc: ADAU1373 <-> bf5xx-i2s-0 mapping ok
    ALSA device list:
      #0: bf5xx_adau1373 (ADAU1373)

Testing the audio module

root:~> modprobe snd-adau1373
root:~> modprobe snd-pcm-oss
root:~> lsmod
Module                  Size  Used by
snd_pcm_oss            31968  0 
snd_mixer_oss          11360  1 snd_pcm_oss
snd_adau1373             1412  0 
snd_soc_adau1373         8528  1 snd_adau1373
snd_soc_bf5xx           2784  1 snd_adau1373
snd_soc_bf5xx_i2s      10916  2 snd_adau1373,snd_soc_bf5xx
snd_soc_core           17120  3 snd_adau1373,snd_soc_adau1373,snd_soc_bf5xx
snd_pcm                48356  3 snd_pcm_oss,snd_soc_bf5xx,snd_soc_core
snd_page_alloc          4232  1 snd_pcm
snd_timer              13796  1 snd_pcm
snd                    31092  6 snd_pcm_oss,snd_mixer_oss,snd_soc_adau1373,snd_soc_core,snd_pcm,snd_timer
soundcore               3940  1 snd

root:~> tone
TONE: generating sine wave at 1000 Hz...

Testing Audio

  1. Check the output
    root:~> tone
    TONE: generating sine wave at 1000 Hz...
    
    You should hear something out of the headphone Jack on the top of J8.
  2. Select audio input to INPB (the default is INPA, assuming you have built ALSA utils):
    root:/> amixer sset 'Input Mux' 'INPB'
    Simple mixer control 'Input Mux',0
      Capabilities: enum
      Items: 'INPA' 'INPB' 'INPD' 'INPD'
      Item0: 'INPB'
    Also you can run “alsamixer” to get graphic configuration interface.
  3. Check to make sure mp3s work (assuming you have built mp3play),
    1. The first step is to download a mp3 file onto the platform. The wget command assumes that networking is properly configured (you have an IP number, the default gateway is set, and DNS servers can be accessed), and working. See the network setup page for more info.
      root:/> cd /var
      root:/var> wget http://www.radiocrazy.com/shows/A/AbbottCostello/ABCOWhosOnFirstclip.mp3
      
    2. Next, play it with mp3play:
      root:/var> mp3play ABCOWhosOnFirstclip.mp3
  4. You can play it in one step with:
    root:~> mp3play http://www.radiocrazy.com/shows/A/AbbottCostello/ABCOWhosOnFirstclip.mp3
    http://www.radiocrazy.com/shows/A/AbbottCostello/ABCOWhosOnFirstclip.mp3: MPEG2-III (0 ms)
    
  5. Optionally check to make sure the audio out is right:
    root:/> amixer sset 'Output Mixer' 'Line'
    Simple mixer control 'Output Mixer',0
      Capabilities: enum
      Items: 'Line' 'Class D' 'HeadPhone'
      Item0: 'Line'
    root:~> arecord -d 10 test.wav
    Recording WAVE "test.wav" : Unsigned 8 bit, Rate 8000 Hz, Mono
    root:~> aplay test.wav
    Adjust playback volume can be done through command:amixer sset Master 80%
    here 80 is the ratio.
    
    This should record 10 seconds of whatever is on the Line, and then play it back over the output.
  6. You should also be able to do a “talkthrough”, and hear on the speakers anything you put on the line.
    root:~> arecord | aplay
resources/tools-software/linux-drivers/sound/adau1373.1304715874.txt.gz · Last modified: 06 May 2011 23:04 by andyr