amlogic s922 android 9.0音频 由rt5651更换es8316出现的奇怪bug

由于缺料,codec由rt5651 更换为es8316,本以为是青铜,却发现是王者,最后竟然是驱动一个简单的符号导致。写到此时好像以前有遇到过忘记了,特此记录一下,百度了下amlogic的东西非常少。

常规步骤:

1 驱动放进 common\sound\soc\codecs\amlogic

2 更改 common\sound\soc\codecs\amlogic 下Makefile  Kconfig

3 meson64_a32_defconfig写好

4 dts写好:

接下来就是编译烧录,但是发现没有声音,

查看card :

# cat proc/asound/pcm

似乎一切正常?

再来tinyplay一下 tingplay xxx.wav -D 0 -d 1 也就是调用 AMLAUGESOUND 下 的pcm1p 设备。因为AMLAUGESOUND 为0.

此时耳机有声音输出,说明用命令直接打开card 是可以正常播放,那硬件和tdm 都是正常的。现在怀疑的是上层没有open这个card。

logcat看起:

满屏的 pcm_handle is null 这个肯定是有问题的,

查找发现hardware\amlogic\audio\audio_hal\audio_port.c 下:

为啥port->pcm_handle = null ?

查找pcm_handle 发现 static ssize_t output_port_start(struct output_port *port) 中  port->pcm_handle = pcm;

再检查一下这个函数为啥没跑到赋值的地方,下面发现是device 值一直是-1 ,问题就出现device 没有获取到

查找有调用到 ->start 的地方发现

amlAudioMixer.c 中

再继续找mixer_output_startup 顺藤摸瓜发现在static int initSubMixngOutput 中:

再接着看alsa_device_update_pcm_index :

查看 alsa_device_parser_pcm_string  发现这里能看到对应到DTS 里面的字符配置了,例如

发现这里有相关打印

这里截取部分log 红线部分为可疑之处。

看到这里发现HiFi的字样,灵感一现,赶紧对比下2个dai_name 

这才发现是空格造成的dai_name识别错误。修改为 .name = "ES8316-HiFi", 工作正常。

以上纯手打,希望能帮助到你。

猜你喜欢

转载自blog.csdn.net/m0_56343264/article/details/118524838
今日推荐