Android 15 中 MCLK_SAI3 引脚未产生时钟信号 您好, 我正在尝试在运行 Android 15 的自定义 i.MX8MP 板上启用 SGTL5000 音频芯片。为使 SGTL5000 正常工作,MCLK 信号需要保持在"始终接通的" 状态。当我重启板时,我可以看到时钟信号生成了大约 5 秒钟,但之后它变低了。我将在下面分享设备树节点和调试结果。 编解码器:SGTl5000@A { 兼容 ="FSL,SGTL5000" ; reg =<0x0a> ; clocks =<& audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI3_MCLK1> ; 时钟名 ="mclk" ; pinctrl-names ="默认" ; }; &sai3 { pinctrl-names ="默认" ; pinctrl-0 =<& pinctrl_sai3> ; assigned-clocks =<& clk IMX8MP_CLK_SAI3> ; assigned-clock-parents =<& clk IMX8MP_AUDIO_PLL1_OUT> ; 分配的时钟频率 =<12288000> ; clocks =<& audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI3_IPG>,<& clk IMX8MP_CLK_DUMMY> 、 <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI3_MCLK1>,<& clk IMX8MP_CLK_DUMMY> 、 <&clk IMX8MP_CLK_DUMMY> ; clock-names = "总线", "mclk0", "mclk1", "mclk2", "mclk3"; FSL、SAI-MCLK 方向输出; fsl、sai-mclk-always-on; status ="okay" ; }; pinctrl_sai3: sai3grp { fsl,pins =< MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI3_TX_SYNC 0xd6 MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI3_TX_BCLK 0xd6 MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_SAI3_RX_DATA00 0xd6 MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI3_TX_DATA00 0xd6 MX8MP_IOMUXC_SAI3_MCLK__AUDIOMIX_SAI3_MCLK 0xd6 MX8MP_IOMUXC_SAI3_RXFS__GPIO4_IO28 0xd6 MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29 0xd6 >; }; Android i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux PMIC Re: Clock signal not generating in MCLK_SAI3 Pin in Android 15 你好
默认情况下,SAI MCLK 在调用 SAI 驱动程序后处于激活状态,并在回调结束后停止激活。
例如,当播放开始时,MCLK 处于激活状态;当播放停止时,MLCK 停止激活。
在这位客户的案例中,我们需要在系统启动时启用 MCLK。
解决方案: 我们可以在 sai 探针阶段启用 sai MCLK,在 fsl_sai.c 中添加以下内容-> fsl_sai_probe:
clk_prepare_enable(sai->bus_clk);
clk_prepare_enable(sai->mclk_clk[1]);
regmap_update_bits(sai->regmap, FSL_SAI_MCTL,
FSL_SAI_MCTL_MCLK_EN, FSL_SAI_MCTL_MCLK_EN);
regmap_update_bits(sai->regmap, FSL_SAI_TCSR(8),
FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE);
这样 SAI MCLK 就能在系统启动时处于激活状态。
但是,在 SAI 驱动程序回调结束(如 aplay 结束)后,MCLK 将再次停止激活。原因是在 sai 触发信号停止时,发射器被禁用。要保持 MCLK 始终处于开启状态,需要使发射器始终处于开启状态。更具体地说,不要在触发信号停止时清除 FSL_SAI_CSR_TERE。
顺祝商祺!
查看全文