MAX98357A overlay on Verdin IMX8MP

Hello,

I am posting this to hopefully get some insight on the “correct” overlay for MAX98357a.

I have a Verdin IMX8MP mounted on a custom board. On the custom board, I have an audio chip MAX98357A connected to the Verdin as follows:

Signal                              Pin				Function			Pin SoC Name
DIGITAL_AUDIO_1_I2S_MASTER_BCLK     SODIMM-30		SAI1_TX_BCLK		SAI5_MCLK		
DIGITAL_AUDIO_1_I2S_MASTER_D_OUT0	SODIMM-34		SAI1_TX_DATA0		SAI5_RXFS		
DIGITAL_AUDIO_1_I2S_MASTER_SYNC		SODIMM-32		SAI1_TX_SYNC		SAI5_RXD1

My device tree overlay:
verdin-imx8mp_max98357a_overlay.dts (731 Bytes)

/ {
	compatible = "toradex,verdin-imx8mp";

 	// Codec
	codec_ext: max98357a@0 {
		compatible = "maxim,max98357a";
		#sound-dai-cells = <0>;
	};
 
  	// Sound-card definition
	sound {
		compatible = "simple-audio-card";
		status = "okay";
		simple-audio-card,name = "max98357a";

		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&dailink_master_cpu>;
		simple-audio-card,frame-master = <&dailink_master_cpu>;

		simple-audio-card,codec {
			sound-dai = <&codec_ext>;
		};

		dailink_master_cpu: simple-audio-card,cpu {
			sound-dai = <&sai5>;
		};
	};
 };

//Disabling the sound_card previously defined for nau
&sound_card {
	status = "disabled";
};

&nau8822_1a {
	status = "disabled";
};

/* VERDIN I2S_1 */
&sai5 {
	status = "okay";
};

As for the kernel module, I’ve tried two approaches with the same results:

  1. Add a .conf file in /etc/modules-load.d/ to enable the already on-board snd-soc-max98357a on boot.
  2. Use the TorizonCore Builder to build and autoload a module for max98357a.

In both cases, if I do lsmod after reboot, I see the module is enabled but unusued. Example:

Module                  Size      Used by
snd_soc_max98357a       20480     0

The problem I’m facing is that there is no soundcard detected.

$ cat /proc/asound/cards
--- no soundcards ---

Some extra info:

  • I’m using TorizonCore Builder to customize a TorizonCore image.
  • My base device tree is imx8mp-verdin-nonwifi-dev.dts.

I’ve looked at other community posts.
The closest issue I found was: MAX98357a Verdin overlay. I tried almost everything in that discussion to no avail.
Can someone point out what I’m missing please?

Hello @berganas ,
Here you have a more recent thread about this topic, maybe it helps you.

Please let us know the outcome.

Best regards,
Josep

Hi,

Thanks for the prompt response.
I’ve already looked at the post you provided, and used this comment by benjamin as inspiration for my (latest) overlay, shown in the post.

Still no soundcard detected.
That post hasn’t reached a conclusion either, it seems.

Hi @berganas,

May I know which carrier board (with the exact version) you are using?

Hi rudhi,

As mentioned in the original post, we are using our own custom board, with the Verdin mounted on top of it. Not a Toradex carrier board.

The max98357a audio chip is located on the custom board.
Verdin to MAX98357A connection schematic:
Audio.pdf (135.7 KB)

Hello,

@josep.tx How should the driver(s) for the MAX98357A be included? There is no good explanation on this. What are the needed steps to make sure everything is in place for the audio chip to be at least recognized by the Verdin board? Thanks in advance!

Hi @Ahmed , which is the TorizonCore version installed on your iMX8MP module? Check it by cat /etc/os-release and uname -a.

Apparently my device tree changes on root were not being detected/applied. I had to use the following syntax to apply changes on the root:

{&/} {

}