Describe the bug
On cold boot, the i2s-dac Device Tree Overlay fails to load automatically. The I2S sound card does not appear in aplay -l. Manual loading via sudo dtoverlay i2s-dac works correctly. Adding poll_ms=1000 to the overlay parameters fixes the issue.
Expected behavior:
The i2s-dac overlay should load at boot without requiring extra delay parameters.
Actual behavior:
After boot, aplay -l shows only HDMI:
**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
The I2S card is missing. dmesg | grep -i i2s returns nothing.
Steps to reproduce the behaviour
- Connect an I2S DAC (e.g., ES9039q2m in slave mode with its own MCLK) to Raspberry Pi Zero 2W GPIO.
- Add the following line to
/boot/firmware/config.txt:
dtoverlay=i2s-dac
- Perform a cold boot (remove power completely, then reapply).
- Once the system boots, run
aplay -l.
- Observe that the I2S sound card (
snd_rpi_rpi_dac) is missing from the list.
Device (s)
Raspberry Pi Zero 2 W
System
Raspberry Pi reference 2026-03-02
Generated using pi-gen, https://github.com/RPi-Distro/pi-gen, 92d15443192abdc1a2dd7921df09e3fb6f804f59, stage3
version cd866525580337c0aee4b25880e1f5f9f674fb24 (clean) (release) (start)
Linux Moode 6.12.62+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.62-1+rpt1 (2025-12-18) aarch64 GNU/Linux
Logs
[ 400.250694] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/i2s@7e203000/status
[ 400.250748] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/compatible
[ 400.250763] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/i2s-controller
[ 400.250778] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/status
[ 400.349361] snd_soc_pcm1794a: loading out-of-tree module taints kernel.
Additional context
- The I2S DAC (ES9039q2m) operates in slave mode with its own MCLK; Raspberry Pi is the I2S master.
- The issue occurs intermittently (race condition) — the kernel sometimes initializes the I2S controller before the DAC hardware is ready.
- Adding
poll_ms=1000 to the overlay (dtoverlay=i2s-dac,poll_ms=1000) works as a reliable workaround.
- Tim Curtis from moOde Audio confirmed that device detection is handled entirely by the Linux kernel and ALSA, not by moOde itself, and recommended reporting this issue here.
Describe the bug
On cold boot, the
i2s-dacDevice Tree Overlay fails to load automatically. The I2S sound card does not appear inaplay -l. Manual loading viasudo dtoverlay i2s-dacworks correctly. Addingpoll_ms=1000to the overlay parameters fixes the issue.Expected behavior:
The
i2s-dacoverlay should load at boot without requiring extra delay parameters.Actual behavior:
After boot,
aplay -lshows only HDMI:**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
The I2S card is missing.
dmesg | grep -i i2sreturns nothing.Steps to reproduce the behaviour
/boot/firmware/config.txt:dtoverlay=i2s-dacaplay -l.snd_rpi_rpi_dac) is missing from the list.Device (s)
Raspberry Pi Zero 2 W
System
Raspberry Pi reference 2026-03-02
Generated using pi-gen, https://github.com/RPi-Distro/pi-gen, 92d15443192abdc1a2dd7921df09e3fb6f804f59, stage3
version cd866525580337c0aee4b25880e1f5f9f674fb24 (clean) (release) (start)
Linux Moode 6.12.62+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.62-1+rpt1 (2025-12-18) aarch64 GNU/Linux
Logs
[ 400.250694] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/i2s@7e203000/status
[ 400.250748] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/compatible
[ 400.250763] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/i2s-controller
[ 400.250778] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/status
[ 400.349361] snd_soc_pcm1794a: loading out-of-tree module taints kernel.
Additional context
poll_ms=1000to the overlay (dtoverlay=i2s-dac,poll_ms=1000) works as a reliable workaround.