I don't know how to run WM8940 on i.MX8MP.
I changed the wiring so that the I2C3 and SAI3 that were connected to the WM8960 on the i.MX8MP-EVK are connected to the WM8940,
and I'm using simple-audio-card and wm8940 as the drivers.
The following settings have been made.
・Device Tree
sound-wm8940 {
compatible = "simple-audio-card";
simple-audio-card,name = "wm8940-audio";
simple-audio-card,format = "i2s";
simple-audio-card,frame-master = <&cpudai>;
simple-audio-card,bitclock-master = <&cpudai>;
simple-audio-card,widgets =
"Speaker", "Ext Spk",
"Microphone", "Mic Jack";
simple-audio-card,routing =
"Ext Spk", "MONOOUT",
"Ext Spk", "SPKOUTN",
"Ext Spk", "SPKOUTP",
"MICN", "Mic Jack",
"MICP", "Mic Jack";
status = "okay";
cpudai: simple-audio-card,cpu {
sound-dai = <&sai3>;
};
link_codec: simple-audio-card,codec {
sound-dai = <&wm8940>;
clocks = <&clk IMX8MP_CLK_SAI3_ROOT>;
};
};
&i2c3 {
clock-frequency = <400000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c3>;
status = "okay";
wm8940: wm8940@1a {
#sound-dai-cells = <0>;
compatible = "wlf,wm8940";
reg = <0x1a>;
status = "okay";
};
}
&sai3 {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai3>;
assigned-clocks = <&clk IMX8MP_CLK_SAI3>;
assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
assigned-clock-rates = <12288000>;
clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI3_IPG>, <&clk IMX8MP_CLK_DUMMY>,
<&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI3_MCLK1>, <&clk IMX8MP_CLK_DUMMY>,
<&clk IMX8MP_CLK_DUMMY>;
clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
fsl,sai-mclk-direction-output;
status = "okay";
};
・Kernel Config
CONFIG_SND_SOC_WM8940=m