NXP MCU 技术论坛
直播中

李英

7年用户 1372经验值
私信 关注
[问答]

如何在i.MX8M Plus上集成音频编解码器MAX98089?

在我们的项目中,我在带有自主开发载板的 SMARC 模块上有一个 i.MX8M Plus 系统。在载板上,我们使用 MAX98089 音频编解码器,目前我正在尝试将此编解码器集成到此系统中。
在第一步中,我遇到了与上面线程中描述的相同的“问题”。MAX98089 的 CODEC DAI 驱动程序在“sound/soc/codecs/max98088.c”的内核源代码中可用,但在“sound/soc/fsl/”中没有可用的 DAI LINK 驱动程序(机器驱动程序)。所以我继续使用 SGTL5000 机器驱动程序作为模板并修改它以用于 MAX98089。
您可以在附件中找到相应的补丁以及设备树覆盖图:
fragment@3002 {
     目标路径 = "/";
     __overlay__ {
          sound_max98089: sound-max98089 {
               compatible = "fsl,imx-audio-max98089";
               型号 = “imx-max98089”;
               fsl,无audmux;
               ssi 控制器 = <&sai2>;
               音频编解码器 = <&codec_max98089>;
               音频路由=
                            “MIC1”,“Mic1 MEMS”,
                            “MIC2”,“Mic2 Elekt”,
                            “外部扬声器”,“SPKR”,
                            “外部扬声器”,“SPKL”;
               状态=“好的”;
          };
     };
};

fragment@3003 {
     目标 = <&i2c1>;
     __overlay__ {
          // 时钟频率 = <100000>;
          #address-cells = <1>
          #size-cells = <0>;
          codec_max98089: codec-max98089@10 {
               compatible = "maxim,max98089";
               reg = <0x10>;
               时钟 = <&clkout1>;
               时钟名称=“mclk”;
               状态=“好的”;
          };
     };
};
fragment@3006 {
     目标 = <&sai2>;
     __overlay__ {
          pinctrl-names = "默认";
          pinctrl-0 = <&pinctrl_sai2>;
          分配时钟=<&clk IMX8MP_CLK_SAI2>;
          指定时钟父母=<&clk IMX8MP_AUDIO_PLL1_OUT>;
          分配的时钟速率 = <12288000>;
          时钟=<&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI2_IPG>,
          <&clk IMX8MP_CLK_DUMMY>,
          <&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI2_MCLK1>,
          <&clk IMX8MP_CLK_DUMMY>,
          <&clk IMX8MP_CLK_DUMMY>
          时钟名称=“总线”,“mclk0”,“

          状态=“好的”;
     };
};
之后内核构建得很好!不幸的是,系统启动后声卡不可用,我收到以下内核消息:
[ 7.638306] imx-max98088 sound-max98089: ASoC: CODEC DAI max98088 未注册
[ 7.839314] imx-max98088 sound-max98089: ASoC: CODEC DAI max98088 未注册 [ 8.134267] imx-max98088 sound-max98089: A8SoD8 not max:
COD已注册
[8.646973] imx-max98088 sound-max98089:ASoC:CODEC DAI max98088 未注册
[8.661756] imx-max98088 sound-max98089:ASoC:CODEC DAI max98088 未注册
因此,我向我的驱动程序补丁添加了一些进一步的调试消息,也向 CODEC DAI 驱动程序 (sound/soc/codecs/max98088.c) 添加了一些调试消息,您也可以从随附的补丁中观察到这些信息。最后我得到了以下内核消息:
[0.357904]imx-max98088 sound-max98089:找不到编解码器平台设备
[0.383237]max98088 0-0010:输入max98088探测功能
[0.383361]max98088 0-0010:尝试注册max98088
[0.383385]max98018:0结果-00 registering max98088: 0
[ 2.502021] max98088 0-0010: codec clk_frequency = 24000000
[ 2.876850] max98088 0-0010: codec clk_frequency = 24000000
[ 2.888556] max98088 0-0010: codec clk_frequency = 24000000
[ 2.983913] max98088 0-0010: codec clk_frequency = 24000000
[3.038974] max98088 0-0010:编解码器 clk_frequency = 24000000
[3.080631] max98088 0-0010:编解码器 clk_frequency = 24000000 [
3.095586] max98088 0-0010:编解码器 clk_frequency = 04
[3.420405] MAX98088 0-0010:CODEC CLK_FREQUENCY = 24000000
[4.487781] MAX98088 0-0010:CODEREC CLK_FREQUENCY = 24000000
[7.460927] MAX98088 0-001:CODEC CLK_FRK_FEREQUEQUEN = 240000 =
24000000000000000000000000000000000000000000000000000000
号] MAX98088 0-0010:CODEC CLK_FREQUENCY = 24000000 [7.632269]
MAX98088 0-0010:CODEREC CLK_FREQUENCY = 24000000 [ 7.638306] IMX-MAX98088 24000000 [ 7.839314] imx-max98088 sound-max98089: ASoC: CODEC DAI max98088 未注册[ 8.114279] max98088 0-0010: 编解码器 clk_frequency = 24000000 [ 8.134267] imx-max98088 sound-max98088 未注册 CODEC: ASo

[ 8.639081] max98088 0-0010: codec clk_frequency = 24000000
[ 8.646973] imx-max98088 sound-max98089: ASoC: CODEC DAI max98088 not registered
[ 8.655446] max98088 0-0010: codec clk_frequency = 24000000
[ 8.661756] imx-max98088 sound-max98089 : ASoC: CODEC DAI max98088 未注册
因此,关于 CODEC DAI 驱动程序 (sound/soc/codecs/max98088.c) 的内核消息探测函数以及 LINK DAI 驱动程序 (sound/soc/fsl/imx-max98088.c) 的探测函数被调用。但是,当设备应该注册时,有些事情失败了。我还在我的板上做了一些测量,根本没有任何 I2C 访问编解码器。关于补丁中添加的内核消息,还可以观察到,调用了 CODEC DAI 驱动程序的探测函数“max98089_i2c_probe”,但没有调用发生第一个 I2C 总线访问的函数“max98089_probe”。
我是这个主题的新手,我真的被困在这一点上,因为我不知道如何进一步调试这个问题。

更多回帖

发帖
×
20
完善资料,
赚取积分