I need to get a sound from radio-device, which use I2S protocol. The radio-device connected to the imx8 processor through ESAI. I have to registrate the radio-device and ESAI in the linux-kernel.
sound-x28 { compatible = "simple-audio-card"; simple-audio-card,name = "x28-audio"; simple-audio-card,format="i2s"; simple-audio-card,mclk-fs = <64>; simple-audio-card,frame-master = <&sound2_esai>; simple-audio-card,bitclock-master = <&sound2_esai>; simple-audio-card,widgets = "Microphone", "Mic Jack", "Line", "Line In", "Line", "Line Out", "Headphone", "Headphone Jack"; simple-audio-card,routing = "DMIC AIF", "DMic"; mux-int-port = <1>; mux-ext-port = <4>; sound2_esai: simple-audio-card,cpu { sound-dai = <&esai1 0>; system-clock-frequency = <3072000>; dai-tdm-slot-num = <2>; dai-tdm-slot-width = <32>; }; sound2codec: simple-audio-card,codec { sound-dai = <&sound>; }; }; codec_x28: codec_x28 { #sound-dai-cells = <0>; compatible = "dmic,dmic-codec"; }; &esai1{ #sound-dai-cells=<1>; status="okay"; };
I don't fully understand how phandle #sound-dai-cells works. The sound-device "sound-x28" has passed a registration in the sysfs. But alsa don't see this device through aplay -l. I can't understand where I made a error in dts file. Or should I use another driver? Please, could you show me your dts with ESAI?
imx8qm has esai interface with multiple (4RX and 6 TX) pins, but NXP doesn't provide even single example how to use it existing drivers look useless for example how to use esai bus with 2-3 independent codecs, which can be used in simple-audio-card driver, but this driver can't work with esai because can't setup clocking.
Also, https://source.codeaurora.org is not available.
The problem hasn't been solved yet. I use a driver imx-cs42888.c as you had said. But I get faults:
[ 7.824936] fsl-asoc-card custom-sound: CPU phandle missing or invalid
[ 7.824943] fsl-asoc-card: probe of custom-sound failed with error -22
[ 7.825762] imx-cs42888 custom-sound: failed to find codec platform device
custom-sound {
compatible = "fsl,imx-audio-cs42888";
model = "custom-sound";
esai-controller = <&esai1>;
audio-codec = <&codec>;
asrc-controller = <&asrc0>;
};
codec: codec {
#sound-dai-cells = <0>;
compatible = "dmic,dmic-codec";
};
&esai1{
#sound-dai-cells=<0>;
status="okay";
};
What could I do wrong?
Hi Riyan
one can look at sound-cs42888 with esai example on
and description of audio in i.MX Linux Reference Manual
nxp does not support "simple-audio-card" for esai.
Best regards
igor
Hi Igor,
thank you for the answer. But My custom board have not a chip cs42888. Or are the chip and a codec not the same?
sound-cs42888 {
compatible = "fsl,imx8qm-sabreauto-cs42888",
"fsl,imx-audio-cs42888";
model = "imx-cs42888";
esai-controller = <&esai1>;
audio-codec = <&cs42888>;
asrc-controller = <&asrc0>;
status = "okay";
};
Hi Riyan
one can use cs42888 as example and create support for other chip, follow
Figure 27. ALSA SoC Software Architecture, sect.7.1.4.1 ASoC Driver Source Architecture
Best regards
igor