各位尊敬的FAE
我有一块非原装imx6dl sabresd开发板,带有wm8960和hdmi接口,最近根据community上的文章完成了wm8960的porting。但是产生了一个新的问题,不知道是不是因为hdmi和wm8960共用一组i2c导致,它们两者之间存在冲突,播放声音时会黑屏,且声音时有时无。
1,请问有没有办法避免这个问题?
2,若有办法解决冲突的话,可以选择声音从哪里输出吗?例如在bootargs里添加变量之类的。。。
Hello Jiangshao,
(1)I2C是否冲突
I2C总线上,HDMI用作获取EDID数据,地址为0X50;WM8960地址是0x1A,所以不会是I2C冲突问题。
(2)HDMI和codec谁输出的问题
HDMI接口有一个Hotplug的定义,如果板子检测到有HDMI线插入,那么Audio就会首先从HDMI输出;如果没有HDMI线,就会从WM8960输出音频,这时就会检测有没有耳机存在或者插入,如有耳机就从耳机输出,如没有耳机,就从WM8960的speaker输出。
(3)硬件的设计检查
当你按照文档porting WM8960时,要核对一下你的WM8960原理图与论坛上(WM8960文档链接上)WM8960原理图是否一致,特别是Headphone检测的GPIO是不同的。
Regards,
Weidong Sun
我这边HDMI音频输出,播放同样时长的视频,要比WM8960慢
比如4分钟的视频,WM8960 4分钟就播放完了,但是HDMI需要4分10s才能播放完成
关于硬件设计,我多次确认过连线,如果原理图没错的话,headphone_det和microphone_det和原装板是一致的。当然我也继续在和厂家确认原理图的正确性。
现在如果插上hdmi线,打开logcat,会有如下现象:
在安卓的设置-》音量里设置闹钟,产生如下信息。似乎会选择从wm8960出声
E/WVMExtractor( 2206): Failed to open libwvm.so
D/Ringtone( 2702): Successfully created local player
W/audio_hw_primary( 2206): out_set_parameters routing=2, ret 1, out 1074358776
W/audio_hw_primary( 2206): card 0, port 0 device 0x2
W/audio_hw_primary( 2206): rate 44100, channel 2 period_size 0xc0
W/AudioFlinger( 2206): write blocked for 445 msecs, 2 delayed writes, thread 0x40cf8008
选了音乐,视频,游戏和其他媒体,产生如下信息。似乎会选择从hdmi出声
E/WVMExtractor( 2206): Failed to open libwvm.so
D/Ringtone( 2702): Successfully created local player
W/audio_hw_primary( 2206): do_out_standby... 1074358776
W/audio_hw_primary( 2206): out_set_parameters routing=1024, ret 4, out 1074358776
W/audio_hw_primary( 2206): card 1, port 0 device 0x400
W/audio_hw_primary( 2206): rate 44100, channel 2 period_size 0x300
W/audio_hw_primary( 2206): do_out_standby... 1074358776
其中,card 0是wm8960,card 1是hdmi