I'm trying to integrate a MAX9867 audio codec in our custom imx8m mini board, but I'm stuck when trying to test the audio output with ALSA speaker-test:
root@evalboard:~# speaker-test
speaker-test 1.2.6
Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
[ 18.948357] max9867 1-0018: ASoC: error at snd_soc_dai_hw_params on max9867-aif1: -22
[ 18.960141] 30050000.sai-max9867-aif1: ASoC: error at __soc_pcm_hw_params on 30050000.sai-max9867-aif1: -22
ALSA lib ../../../alsa-lib-1.2.6.1/src/pcm/pcm_direct.c:1284:(snd1_pcm_direct_initialize_slave) unable to install hw params
ALSA lib ../../../alsa-lib-1.2.6.1/src/pcm/pcm_dmix.c:1044:(snd_pcm_dmix_open) unable to initialize slave
Playback open error: -22,Invalid argument
root@evalboard:~#
my device tree looks as follows, I'm not quite sure what to do with the fsl,dataline, so it's commented out:
sound_card: sound-card {
compatible = "simple-audio-card";
simple-audio-card,name = "max9867";
simple-audio-card,format = "i2s";
simple-audio-card,frame-master = <&dailink_master>;
simple-audio-card,bitclock-master = <&dailink_master>;
dailink_master: simple-audio-card,codec {
clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
sound-dai = <&audio_codec>;
};
simple-audio-card,cpu {
sound-dai = <&sai5>;
};
};
&i2c2 {
clock-frequency = <400000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
audio_codec: audio_codec@18 {
#sound-dai-cells = <0>;
compatible = "maxim,max9867";
clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
reg = <0x18>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai5_mclk>;
status = "okay";
};
};
&sai5 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai5>;
// fsl,dataline = <1 0xff 0xff 2 0xff 0x11>;
};
pinctrl_sai5: sai5grp {
fsl,pins = <
MX8MM_IOMUXC_SAI3_RXD_SAI5_RX_DATA0 0x1f
MX8MM_IOMUXC_SAI5_RXD3_SAI5_TX_DATA0 0x30
MX8MM_IOMUXC_SAI2_RXC_SAI5_TX_BCLK 0x1f
MX8MM_IOMUXC_SAI5_RXD1_SAI5_TX_SYNC 0x1f
>;
};
pinctrl_sai5_mclk: sai5mclkgrp {
fsl,pins = <
MX8MM_IOMUXC_SAI2_MCLK_SAI5_MCLK 0x1f
>;
};
Am I missing some dt configurations or are wrong ones set?