mtk平台audio bringup 基于Android T
- 首先检查声卡注册是否ok 可以cat proc/asound节点或者 检查开机log;
- snd_soc_register_card pass 成功的log打印;
- mtk原生基线一般不会出现声卡注册失败的情况;
- 集成三方PA驱动,这里就正常集成就行。区别有一点就是Android T之后,平台的代码都ko化了。需要修改三方驱动的Makefile 以及 ko相应的打包分区表 ko_order_table.scv 以及驱动编译进内核需要以模块的形式编译而不是以boot的形式
5.驱动正常编译成功后,确认i2c的通信,
主要检查 i2c的两个gpio模式是否正确,可以 cat proc/mtk_gpio/soc.pinctrl 节点查看,我们项目所用的是gpio 127 128两个。这里看到 127 scl线他的模式不对,不是i2c模式,是普通gpio模式。
mtk的话gpio模式的配置是可以修改相应的dws文件来配置,但是修改验证发现 gpio127不生效,gpio128可以。就是我在dws文件里面配置 gpio127的模式为 1 ,实际手机节点下cat还是mode 0。
不生效的话可以dts使用pinctrl的形式,来配置 gpio的function
dts修改后验证是可以生效的
至于为什么dws不生效,这个原因还在查。
1222更新:
不生效的原因是 gpio127 是用来区分mtk内部项目的一个gpio,在lk阶段。我们的scm在克制化项目的时候 直接把这块儿copy过来了。
本地验证的话,把这块儿屏蔽掉,然后再去配置对应的dws文件,i2c是生效的。
6.PA正常通信成功后,下来就是耳机以及mic的功能。耳机一般follow平台原生设计就是ok的,
可以通过kernel log accdet相关log检查。
7 mic不通,单mic项目设计,主mic以及耳机mic都录音无声。使用tinycap录音无声,
主mic:
tinymix “UL1_CH1 ADDA_UL_CH1” “1”
tinymix “UL1_CH2 ADDA_UL_CH2” “1”
tinymix “MISO0_MUX” “UL1_CH1”
tinymix “MISO1_MUX” “UL1_CH1”
tinymix “ADC_L_Mux” “Left Preamplifier”
tinymix “PGA_L_Mux” “AIN0”
tinymix “DMIC0_MUX” “DMIC_DATA0”
tinymix “DMIC1_MUX” “DMIC_DATA0”
tinycap sdcard/mic.wav -D 0 -d 10 -c 1
kernel log的话没有什么异常,寄存器(afe以及codec)log以及gpio(data线 miso)的模式 也检查没有异常
抓寄存器的方法:
gpio: adb shell cat proc/mtk_gpio/soc.pinctrl > gpio.txt
afe: adb shell cat sys/kernel/debug/mtksocaudio > afe.txt
pmic: adb shell cat sys/kernel/debug/mtksocanaaudio > pmic.txt
写寄存器的方法:
adb shell “echo write_reg,0x23bc,0x2 > /sys/kernel/debug/mtksocanaaudio”
使用mtk的打tone debug,afe tone是ok的,pmic tone是无声的
录音的时候分别往afe和pmic上行打tone音,听一下是否有声音
afe上行打tone
Start tone:
adb shell “echo write_reg,0x01dc,0x2 > /sys/kernel/debug/mtksocaudio”
adb shell “echo write_reg,0x01f0,0x044E44E4 > /sys/kernel/debug/mtksocaudio”
等待5s
Stop tone:
adb shell “echo write_reg,0x01f0,0x0 > /sys/kernel/debug/mtksocaudio”
adb shell “echo write_reg,0x01dc,0x0> /sys/kernel/debug/mtksocaudio”
–>录音文件确认是否有声
pmic上行打tone
Start tone
adb shell “echo write_reg,0x238e,0x2 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x238f,0x0 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x23c8,0x80 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x23c9,0x1 > /sys/kernel/debug/mtksocanaaudio”
等待5s
stop tone
adb shell “echo write_reg,0x238e,0x0 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x238f,0x0 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x23c8,0x0 > /sys/kernel/debug/mtksocanaaudio”
adb shell “echo write_reg,0x23c9,0x0 > /sys/kernel/debug/mtksocanaaudio”
–>录音文件确认是否有声
然后就是测量测量测量了一整天,发现信号什么的都是有的,micbias电压之类的
直接说解决方法吧:
单mic项目 没有使用 miso_1 需要将gpio相关配置移除
AUD_DAT_MISO (主机输入 从机输出) 对应录音的data线,这里看到 AUD_DAT_MISO1 是接地没有使用,所以需要移除
但是这块儿修改不太好,应当尽量避免修改平台的dts,而是在自己项目私有的dts里面去remove
由于自己项目是 引用的节点,通过 delete-node删除是不生效的,
目前暂时提交的话,就是通过去删除平台的,如果有项目需要的话在自己项目的dts里面去引用加下。
leader说他说一个办法明天让我试试,坐等大佬方法。
1221更新:
leader说的方法:在aud_dat_miso1_on节点下 去配置他为普通gpio模式,就是让他on与off的时候都为 普通gpio模式,这种方法验证也不行。原因可能是既然这个miso1 硬件上没有使用,软件这边就不能对他进行任何配置吧。
1222更新:不修改平台dts,项目私有dts里这样修改是可以的
至于为什么需要删除 miso_1,这个mtk解释说是 pmic 打tone没声的话 就是代表他们的mic audiointerface 校准存在问题,而这块儿是和硬件强相关的,其实我没理解这个 mic校准是个啥操作???有大佬知道的话,可以教我下
对了mic这个问题是 mtk解的,不是我们解的。。
8.还有mic模式的话 之前是在hal层 设置的 audio_custom_exp.h 然后通过mixerset 给kernel
但是在Android T之后有所改变 ,这个配置是在kernel dts里面配置的,hal层的控件取消了,也就是说修改mic mode的话 ,是在dts里面修改 不是像之前一样在hal层,hal层修改是不生效的。
9.Google aosp 以及 mtk release的基线都是默认 不支持mp3格式播放的
使用者想要支持的话需要自己维护,这块儿有待学习
10 https://online.mediatek.com/apps/faq/detail?list=SW&faqid=FAQ26974 audiohal 添加 callstack方法