我正在 IMX8MP 上开发一个定制板,使用 STM32 I2S 内部 DAC 作为声卡(外包,所以我无法对其工作原理做太多了解)。为此,我创建了基于 MAX98357a 驱动程序的简单音频卡配置。它可以工作,能够通过 I2S 将音频以 48000Hz 立体声发送到接收器。 这是我的设备树配置:
codec_ext: max98357a@0 {
compatible = "maxim,max98357a";
#sound-dai-cells = <0>;
};
sound {
compatible = "simple-audio-card";
status = "okay";
simple-audio-card,name = "Muminek";
simple-audio-card,format = "left_j";
simple-audio-card,bitclock-master = <&dailink_master_cpu>;
simple-audio-card,frame-master = <&dailink_master_cpu>;
simple-audio-card,convert-rate = <44100>;
simple-audio-card,convert-channels = <1>;
simple-audio-card,codec {
sound-dai = <&codec_ext>;
};
dailink_master_cpu: simple-audio-card,cpu {
sound-dai = <&sai3>;
};
};
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_RXFS__AUDIOMIX_SAI3_RX_SYNC 0xd6
MX8MP_IOMUXC_SAI3_RXC__AUDIOMIX_SAI3_RX_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
>;
};
&sai3 {
assigned-clocks = <&clk IMX8MP_CLK_SAI3>;
assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
assigned-clock-rates = <24576000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai3>;
fsl,sai-mclk-direction-output;
#sound-dai-cells = <0>;
status = "okay";
};
但是,他们希望在左声道中获得 44100Hz 和单声道。目前,如果我播放单声道,它只会进入右声道(对于“left_j”,默认单声道是反转的)。
我一直在尝试使用:
simple-audio-card,convert-rate = <44100>;
simple-audio-card,convert-channels = <1>;
但运气不佳。 我有一种感觉它缺少
simple-audio-card,routing
或 simple-audio-card,widgets
,但无法获得有关如何配置这些的任何详细信息。
任何帮助将不胜感激。
预先感谢!
请在内核源文档中找到更多详细信息: /Documentation/devicetree/bindings/sound/simple-card.txt。