mtk平台audio bringup 基于Android T

  1. 首先检查声卡注册是否ok 可以cat proc/asound节点或者 检查开机log;
  2. snd_soc_register_card pass 成功的log打印;
  3. mtk原生基线一般不会出现声卡注册失败的情况;
  4. 集成三方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

Android数字耳机录音失真 耳机模式录音不生效_Android数字耳机录音失真


dts修改后验证是可以生效的

Android数字耳机录音失真 耳机模式录音不生效_Android_02


至于为什么dws不生效,这个原因还在查。

1222更新:

不生效的原因是 gpio127 是用来区分mtk内部项目的一个gpio,在lk阶段。我们的scm在克制化项目的时候 直接把这块儿copy过来了。

本地验证的话,把这块儿屏蔽掉,然后再去配置对应的dws文件,i2c是生效的。

Android数字耳机录音失真 耳机模式录音不生效_Android数字耳机录音失真_03

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相关配置移除

Android数字耳机录音失真 耳机模式录音不生效_3c_04


AUD_DAT_MISO (主机输入 从机输出) 对应录音的data线,这里看到 AUD_DAT_MISO1 是接地没有使用,所以需要移除

Android数字耳机录音失真 耳机模式录音不生效_android_05


但是这块儿修改不太好,应当尽量避免修改平台的dts,而是在自己项目私有的dts里面去remove

由于自己项目是 引用的节点,通过 delete-node删除是不生效的,

Android数字耳机录音失真 耳机模式录音不生效_Android数字耳机录音失真_06


目前暂时提交的话,就是通过去删除平台的,如果有项目需要的话在自己项目的dts里面去引用加下。

leader说他说一个办法明天让我试试,坐等大佬方法。

1221更新
leader说的方法:在aud_dat_miso1_on节点下 去配置他为普通gpio模式,就是让他on与off的时候都为 普通gpio模式,这种方法验证也不行。原因可能是既然这个miso1 硬件上没有使用,软件这边就不能对他进行任何配置吧。

1222更新:不修改平台dts,项目私有dts里这样修改是可以的

Android数字耳机录音失真 耳机模式录音不生效_Android_07


至于为什么需要删除 miso_1,这个mtk解释说是 pmic 打tone没声的话 就是代表他们的mic audiointerface 校准存在问题,而这块儿是和硬件强相关的,其实我没理解这个 mic校准是个啥操作???有大佬知道的话,可以教我下

对了mic这个问题是 mtk解的,不是我们解的。。

8.还有mic模式的话 之前是在hal层 设置的 audio_custom_exp.h 然后通过mixerset 给kernel

Android数字耳机录音失真 耳机模式录音不生效_驱动开发_08


但是在Android T之后有所改变 ,这个配置是在kernel dts里面配置的,hal层的控件取消了,也就是说修改mic mode的话 ,是在dts里面修改 不是像之前一样在hal层,hal层修改是不生效的。

Android数字耳机录音失真 耳机模式录音不生效_Android数字耳机录音失真_09


9.Google aosp 以及 mtk release的基线都是默认 不支持mp3格式播放的

使用者想要支持的话需要自己维护,这块儿有待学习

10 https://online.mediatek.com/apps/faq/detail?list=SW&faqid=FAQ26974 audiohal 添加 callstack方法