8. 附加:wm8960 驱动最终版 ( 第3次更新)
上一次更新的时候,是反汇编完成了,但是板子没在身边,因此没有确认,在接下来的这一个星期里,一直在确认驱动的问题,直到刚才板子才出声,现在正一边放歌一边写呢:)
首先说一下代码的变化: 其实上次的代码基本就是最终版了,但着一个星期里面,一直在测试,添加了一些debug log 的内容;另外就是修改了几个宏。
ALSA框架我还没有理解完,这个星期一直卡在 DAC 没有enable这个问题上。也就是说,驱动已经是OK的,而是 DAPM 没有设置正确,导致 DAC 以及 route 经历的通路没有打开。
源代码在附件里面,如果想要在系统中听到声音,不限于android系统,我的系统不是android系统。大致进行下面几个步骤就可以:
1. 编译源代码成内核驱动模块.
2. 将驱动插入内核: insmod snd-soc-wm8960.ko && insmod snd-soc-mini210-wm8960.ko
3. 交叉编译 alsa-utils, 需要使用 alsamixer 和 alsactl 这两个工具
4. 利用 alsactl store 从内核中得到声卡的相关设置并存储在 /var/lib/alsa/asound.state 文件中。 默认情况下所有的设置项都是off的。
这就是我这一个星期都没听到声音。
5. 修改 asound.state ,将声音通路相关部分设置为 true,我用耳机听,因此主要打开DAC/headphone output等开关。 具体参考附件。
6. 利用 alsactl restore 将修改后的 asound.state 设置到内核中。
7. 默认驱动是 stanby状态,如果播放音乐,才会迁移到on状态,就可以听到歌声了。歌播放结束,又会回到 standby状态。
8. 如果觉得声音小,用 alsamixer 调节一下音量