欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

【RK3399】【Android 7.1】I2S_MCLK频率需求为24.576MHz,实际仅为12.3MHz

最编程 2023-12-31 22:31:18
...
平台 内核版本 安卓版本
RK3399 Linux4.4 Android7.1

 

问题描述:

机器用于视频会议,回声消除用了XMOS的硬件IC,IC供应商说IIS的LRCLK要为48K,而且MCLK也必须要为24.576M,而且要一直给出来。
XMOS芯片只需烧录供应商对应的FW即可,驱动层面没有驱动代码,所以用了ES8316的codec驱动。
目前录音是可以的,但是播放出来是魔音。

实际去量MCLK只有12.3M的样子,只有一半,尝试在i2s0结点里加了如下代码:
assigned-clocks = <&cru SCLK_I2S0_8CH>;
assigned-clock-rates = <24576000>;
发现没有效果,还是12.3M。

 

解决方法:

修改dts文件里,声卡的这个属性。

simple-audio-card,mclk-fs = <512>;

以及:

--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -815,16 +815,6 @@ static int es8316_set_bias_level(struct snd_soc_codec *codec,
                break;

        case SND_SOC_BIAS_PREPARE:
-               if (IS_ERR(es8316->mclk))
-                       break;
-
-               if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_ON) {
-                       clk_disable_unprepare(es8316->mclk);
-               } else {
-                       ret = clk_prepare_enable(es8316->mclk);
-                       if (ret)
-                               return ret;
-               }
                break;

        case SND_SOC_BIAS_STANDBY: