首先说wm8962芯片就是Ultra-Low Power Stereo CODEC with Audio Enhancement
DSP, 1W Stereo Class D Speaker Drivers and Ground
Referenced Headphone Drivers
驱动力不大
但是看wm8962芯片手册里有说它自带一个D类功放在单声道模式下
关键字:BTL
搜索文档BTL
找到接法
然后找到
以及
找这个东西注意关键字 class D Speaker
然后我们来看音频芯片的代码,
芯片代码分两部分
一部分在
sound/soc/fsl/imx-wm8962.c
一部分在
sound/soc/codecs/wm8962.c
我们要看的为
codec下的wm8962.c
搜索R49
正好看到
{ 49, 0x0010 }, /* R49 - Class D Control 1 */
{ 51, 0x0003 }, /* R51 - Class D Control 2 */
参照我们之前的那两张图,将他们的值修改为一下
{ 49, 0x00D0 }, /* R49 - Class D Control 1 */
{ 51, 0x0007 }, /* R51 - Class D Control 2 */
这就配置好了D类功放,然后我们就要寻找如何打开单声道模式了
搜索mono
突然发现有个wm8962_set_pdata_from_of内有句
if (of_property_read_bool(np, "spk-mono"))
pdata->spk_mono = true;
很显然,这是从设备树节点中判断是否该打开单声道模式
我们在设备树wm8962节点中加入spk-mono属性
编译,烧写,speaker声音明显变大
测试录音常见步骤:
拔掉mic开始录音,看是否有杂音(如果有杂音,考虑mux和硬体)
单声道如果不纯净,看codec的配置和mic偏置(bias)
最后才去看filter