외부 클럭 SAI2 BCLK/MCLK가 있는 iMx8M용 TLV320AIC3104 코덱 드라이버/간단한 사운드 카드를 활성화할 수 없습니다.

외부 클럭 SAI2 BCLK/MCLK가 있는 iMx8M용 TLV320AIC3104 코덱 드라이버/간단한 사운드 카드를 활성화할 수 없습니다.

I2C3 및 SAI2 라인을 통해 iMX8M에 연결된 코덱 드라이버(TLV320AIC3104)에 액세스하려고 합니다. 코덱 클럭 bclk는 FPGA에서 제공하는 4096000이며 해당 mclk는 접지되어 있습니다. iMx8M SOM SAI2 BCLk& MCLK는 4.096Mhz의 주파수로 FPGA에서 제공하는 클록 라인에 연결됩니다. 단순 사운드 카드 또는 드라이버 활성화를 등록할 수 없습니다. 16개 슬롯이 있는 TDM 모드로 코덱을 구성하고 16khz에서 오디오를 캡처해야 합니다.

이것은 내 dts 파일 변경 사항입니다.

sound {
  compatible = "simple-audio-card";
  simple-audio-card,name = "tdm-audio";
  simple-audio-card,format = "tdm";
  simple-audio-card,routing =
  "Headphone Jack", "HPOUTL",
  "Headphone Jack", "HPCOMR",
  "IN2L", "Line In Jack",
  "IN2R", "Line In Jack",
  "IN1L", "Mic Jack",
  "Playback", "CPU-Playback",
  "CPU-Capture", "Capture";
  status = "okay";
  simple-audio-card,cpu {
    sound-dai = <&sai2>;
    dai-tdm-slot-num = <16>;
    dai-tdm-slot-width = <16>;
  };
  simple-audio-card,codec {
    audio-codec = <&codec>;
    clocks = <&clk IMX8MM_CLK_SAI2_ROOT>;
    clock-names = "bclk";
  };
};
pinctrl_i2c3: i2c3grp {
  fsl,pins = <
    MX8MM_IOMUXC_I2C3_SCL_I2C3_SCL 0x400001c3
    MX8MM_IOMUXC_I2C3_SDA_I2C3_SDA 0x400001c3
  >;
};
pinctrl_sai2: sai2grp {
  fsl,pins = <
    MX8MM_IOMUXC_SAI2_RXFS_SAI2_RX_SYNC 0xd6
    MX8MM_IOMUXC_SAI2_RXC_SAI2_RX_BCLK 0xd6
    MX8MM_IOMUXC_SAI2_RXD0_SAI2_RX_DATA0 0xd6
    MX8MM_IOMUXC_SAI2_TXFS_SAI2_TX_SYNC 0xd6
    MX8MM_IOMUXC_SAI2_TXC_SAI2_TX_BCLK 0xd6
    MX8MM_IOMUXC_SAI2_TXD0_SAI2_TX_DATA0 0xd6
    MX8MM_IOMUXC_SAI2_MCLK_SAI2_MCLK 0xd6
  >;
};
&i2c3 {
  clock-frequency = <100000>;
  pinctrl-names = "default";
  pinctrl-0 = <&pinctrl_i2c3>;
  status = "okay";
  codec: tlv320aic3x@18 {
    /* ai3x-micbias-vg = <2>; */
    compatible = "ti,tlv320aic3104";
    reg = <0x18>;
    /* gpio-reset = <&gpio5 0 GPIO_ACTIVE_LOW>; */
    #sound-dai-cells = <0>;
    clocks = <&clk IMX8MM_CLK_SAI2_ROOT>;
    clock-names = "bclk";
    AVDD-supply = <&reg_audio>;
    IOVDD-supply = <&reg_audio>;
    DRVDD-supply = <&reg_audio>;
    DVDD-supply = <&ldo5_reg>;
    status = "okay";
  };
};

또한 업데이트 Makefile, 추가 imx-tlv320aic3x.csound/soc/fsl패치했습니다 clk-imx8mm.c.CLK_EXT3

+   pr_info("i.MX*MM clock driver before setting CLK_EXT3");
+   clk_set_parent(clks[IMX8MM_CLK_SAI2_ROOT], clks[IMX8MM_CLK_EXT3]);
+   pr_info("i.MX*MM clock driver after setting CLK_EXT3");

다음 오류가 발생합니다.

OF: /sound/simple-audio-card,cpu: could not get #sound-dai-cells for /sai@30020000
asoc-simple-card sound: parse error -22
asoc-simple-card: probe of sound failed with error -22
clk: failed to reparent sai2_root_clk to audio_pll1_out: -22

코덱이 제대로 작동하도록 dts를 적절하게 업데이트하는 데 도움이나 지침을 주시면 감사하겠습니다.

관련 정보