Real210 修改real 210的wm9713驱动支持喇叭外放

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: Real210 修改real 210的wm9713驱动支持喇叭外放

开发环境:

编译链: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 */
...

修改之后,重新编译内核,然后下载到开发板,这个时候,再去通过开发板播放音乐便可以听到两个外接的喇叭都发声了.

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: Real210 修改real 210的wm9713驱动支持喇叭外放

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: