Closed guoai2015 closed 1 year ago
能播放声音意味着驱动方面应该没什么问题,日志显示WM8960初始化不成功,这个是主控与WM8960之间的通信出了问题,可以检查下I2C总线是否有其他设备占用、I2C是否稳定上拉,WM8960的上电时序是否正确,WM8960工作状态是否正常。
首先感谢大佬回复,开始是怀疑声卡坏掉了,但是刷了厂家提供的旧系统(openwrt15.1)声卡没问题。我试着把内核模块卸载重新加载,到snd-soc-wm8960这个模块的时候声卡初始化成功了。测试了好多遍都是这样成功的,重新加载snd-soc-wm8960模块就好了。我看到日志里 mclk 40MHz,实际上应该是12MHz,不知道这里是不是有问题,而且这个频率应该在什么地方设置呢?设备插上音响后也一直有哒哒哒的电流音,播放音乐的时候没有。
这是MT7688板子的log,mclk确实不一样,这个频率是i2s驱动设置的,需要修改i2s驱动源码。MT7620板上没测试过,但能播放的话mclk应该是没问题的,不知道master分支的5.10内核有没有同样的问题
[ 36.799994] gdma-rt2880 10002800.gdma: revision: 3, channels: 16
[ 36.858921] i2c-mt7621 10000900.i2c: clock 100KHz, re-start not support
[ 36.878815] ralink-i2s 10000a00.i2s: mclk 480MHz
[ 36.947892] mt762x-wm8960 sound: wm8960-hifi <-> 10000a00.i2s mapping ok
这是MT7688板子的log,mclk确实不一样,这个频率是i2s驱动设置的,需要修改i2s驱动源码。MT7620板上没测试过,但能播放的话mclk应该是没问题的,不知道master分支的5.10内核有没有同样的问题
[ 36.799994] gdma-rt2880 10002800.gdma: revision: 3, channels: 16 [ 36.858921] i2c-mt7621 10000900.i2c: clock 100KHz, re-start not support [ 36.878815] ralink-i2s 10000a00.i2s: mclk 480MHz [ 36.947892] mt762x-wm8960 sound: wm8960-hifi <-> 10000a00.i2s mapping ok
经过好几天的研究,追踪了一下报错的位置,就是 wm8960.c 里面调用wm8960_reset的时候报错,网上搜了一下有人也遇到这个问题,大概就是i2c发送重置8960的时候没有响应就报错了,可能是i2c还没有初始化完成,我改了wm8960.c加了点延迟,现在每次都能挂载上声卡了。仅存的问题就是哒哒哒声了,查了资料原生的simple-audio-card的驱动貌似可以通过设备树设置时钟频率,不知道咱们这个驱动支不支持。
simple-audio-card驱动是跟mt762x-wm8960等价的关系,只需要用一个就好了
按照示例的配置,已经可以播放声音,但是有时候启动起来会找不到声卡,日志里会报:mt762x-wm8960 sound: ASoC: failed to init link wm8960-codec: -517
dts内容:
系统日志:
内核日志:
原理图: