开发环境:
编译链:arm-linux-gcc version 4.4.1
busybox版本:busybox-1.15.1
tslib版本:tslib-1.4
QTE版本:qt-everywhere-opensource-src-4.7.3
Linux发行版:Fedora Core release 6 (Zod)
查看real 210的内核源码,可以发现声卡的驱动全部在内核根目录的sound目录下
wm9713的驱动代码是:sound/soc/codecs/wm9713.c
ac97控制器有关wm9713寄存器配置代码:/root/real210/include/sound/ac97_codec.h
为了配置功放,我们只需修改上面两个文件即可完成修改.
参考wm9713的datasheet以及原理图可以知道,外置喇叭接到SPKR和SPKL,和这两个输出有关系的寄存器是:0x3E,负责输入输出通道的开关;0x1C,负责选择输入信号;0x02,设置喇叭音量.以上这些都可以在
手册上查到.
我们要修改的地方就是wm9713.c中的wm9713_hifi_hw_params(...)这个函数,修改后的代码如下:
static int wm9713_hifi_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; printk("wm9713_hifi_hw_params set\n"); ac97_write(codec, AC97_POWERDOWN, 0x0000); ac97_write(codec, AC97_PHONE, 0x0808); ac97_write(codec, AC97_EXTENDED_MID, 0xf803); //ac97_write(codec, AC97_EXTENDED_MSTATUS, 0xb990);//old set声道使能 ac97_write(codec, AC97_EXTENDED_MSTATUS, 0xb810);//qqw change //ac97_write(codec, AC97_MASTER, 0x8080);//old set 音量 ac97_write(codec, AC97_MASTER, 0x0000); //调节音量调到最高 ac97_write(codec, AC97_HEADPHONE, 0x0606); //ac97_write(codec, AC97_REC_GAIN, 0x00aa);//old ac97_write(codec, AC97_REC_GAIN, 0x12aa);//qqw change #ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MIC ac97_write(codec, 0x5c, 0x0002); ac97_write(codec, AC97_LINE, 0x0068); ac97_write(codec, AC97_VIDEO, 0xfe00); #else ac97_write(codec, AC97_VIDEO, 0xd612); #endif return 0; }
上述代码里面的AC97_POWERDOWN, AC97_PHONE, AC97_MASTER均是wm9713的寄存器,可以在ac97_codec.h找到,比如下面一段宏定义:
... /* * AC'97 codec registers */ #define AC97_RESET 0x00 /* Reset */ #define AC97_MASTER 0x02 /* Master Volume */ #define AC97_HEADPHONE 0x04 /* Headphone Volume (optional) */ #define AC97_MASTER_MONO 0x06 /* Master Volume Mono (optional) */ #define AC97_MASTER_TONE 0x08 /* Master Tone (Bass & Treble) (optional) */ #define AC97_PC_BEEP 0x0a /* PC Beep Volume (optinal) */ #define AC97_PHONE 0x0c /* Phone Volume (optional) */ #define AC97_MIC 0x0e /* MIC Volume */ ...
修改之后,重新编译内核,然后下载到开发板,这个时候,再去通过开发板播放音乐便可以听到两个外接的喇叭都发声了.
文章的脚注信息由WordPress的wp-posturl插件自动生成