简单介绍rk平台dp声卡的调试以及注意事项,希望对一些刚入门音频的同学有帮助。
首先了解下这个DP和EDP;DP接口属于外部视频接口,只能用作显示器与驱动板之间的传输,不可以用芯片与芯片之间的传输;EDP接口属于内部视频接口,可以用作芯片与芯片之间的传输,也可以用作显示器与驱动板之间的传输。EDP是基于DP架构和协议基础上的一种接口,是同宗关系,性能上是没有什么区别的,只是EDP的功能比较多。
DP声卡在SOC内走的是spdif,可以通过cat /proc/asound/cards查看下3588 evb上自带DP声卡,如下所示
插拔dp时可以看下extcon的状态是什么,如下命令,DP=0,表示未插入,DP=1,表示插入。dp插入检测代码位于frameworks\base\services\core\java\com\android\server\WiredAccessoryManager.java
cat /sys/class/extcon/extcon*/state
dp声卡,其hal层走hardware\rockchip\audio\spdif_hal\audio_hw.c;所以当tinyplay指定DP声卡有声音输出,而android无声音输出,需要在hal层的struct dev_proc_info SPDIF_OUT_NAME[]加上dp声卡的id即可;
kernel目录下的.config文件中设置CONFIG_SND_SOC_ROCKCHIP_CDNDP=y;dts配置可以参考如下;
/ {
dp_sound: dp-sound {
status = "okay";
compatible = "rockchip,cdndp-sound";
rockchip,cpu = <&spdif>;
rockchip,codec = <&cdn_dp 1>;
};
};
&spdif {
status = "okay";
};
&cdn_dp {
status = "okay";
extcon = <&fusb0>;
phys = <&tcphy0_dp>;
};
&dp_sound {
status = "okay";
};
这边需要注意的是,rockchip_cdndp.c这个是4.19及以前的kernel用的,5.10之后,alsa更新了;例如3399平台kernel 5.10,可让客户使用如下配置来注册dp声卡;
hdmi_dp_sound: hdmi-dp-sound {
status = "okay";
compatible = "rockchip,rk3399-hdmi-dp";
rockchip,cpu = <&i2s2>;
rockchip,codec = <&cdn_dp>;
};
如果客户编译dp驱动会报错,我们先不用dp驱动,建议直接使用simple-card去配置注册;
dp_codec: dp-codec {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,name = "dp-sound";
simple-audio-card,cpu {
sound-dai = <&spdif>; //修改这,才出声音
};
simple-audio-card,codec {
sound-dai = <&cdn_dp 1>;
};
};
&i2s2 {
#sound-dai-cells = <0>;
status = "okay";
};