RK3568 android12 声卡调试

一、问题背景

公版的声音输出接的是I2S1,录音走的也是I2S1,而我们的产品声音输出接的是SPDIF,录音用的还是I2S,所以使用公版的dts配置,会出现喇叭没有声音的问题,需要另外配置。

二、解决方案

        最开始想直接添加一个spdif声卡,然后如果是音乐播放的时候route就选择spdif声卡,录音的时候选择默认声卡,但是发现一直没有办法切换到spdif声卡,此方案放弃。

        后面改用在默认声卡添加两个dai-link节点的方式,然后把声音输出的设备节点设置为dai-link0,录音设置为dai-link1,这里0和1最终对应成默认声卡设备的device0和device1。

--- a/Android/kernel-4.19/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
+++ b/Android/kernel-4.19/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
@@ -197,17 +197,38 @@
                simple-audio-card,format = "i2s";
                simple-audio-card,name = "rockchip,rk809-codec";
                simple-audio-card,mclk-fs = <256>;
-

+#if 0
                simple-audio-card,cpu {

                        sound-dai = <&i2s1_8ch>;
                };
                simple-audio-card,codec {
                        sound-dai = <&rk809_codec>;
                };
+#else
+               simple-audio-card,dai-link@0 {
+                       format = "i2s";
+                       cpu {
+                               sound-dai = <&spdif_8ch>;
+                       };
+
+                       codec {
+                               sound-dai = <&rk809_codec>;
+                       };
+               };
+
+               simple-audio-card,dai-link@1 {
+                       format = "i2s";
+                       cpu {
+                               sound-dai = <&i2s1_8ch>;
+                       };
+
+                       codec {
+                               sound-dai = <&rk809_codec>;
+                       };
+               };
+#endif

        };
 
        spdif-sound {

按照上面添加节点后,可以识别到两个device了,但是录音的时候默认还是使用的是device 0,没有使用device 1,所以在start_input_stream加多一个强制切到device 1的动作

--- a/Android/hardware/rockchip/audio/tinyalsa_hal/audio_hw.c
+++ b/Android/hardware/rockchip/audio/tinyalsa_hal/audio_hw.c
@@ -1352,6 +1352,10 @@ static int start_input_stream(struct stream_in *in)
         card = adev->dev_in[SND_IN_SOUND_CARD_MIC].card;
         device =  adev->dev_in[SND_IN_SOUND_CARD_MIC].device;
 
+        if (device != 1)
+            device = 1;

         if (card != SND_IN_SOUND_CARD_UNKNOWN) {
             route_pcm_card_open(card, getRouteFromDevice(in->device | AUDIO_DEVICE_BIT_IN));
             in->pcm = pcm_open(card, device, PCM_IN, in->config);

修改完后,喇叭和录音都可以正常了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值