Internal DMIC dead with default topology; works with PDM1 variant — Xiaomi Redmi Book 16 2025 (TM2415)
Hardware
| Item |
Value |
| Laptop |
Xiaomi Redmi Book 16 2025 (2.5K) |
| Board |
TM2415, subsystem 1d72:2415 |
| BIOS |
RMARP6B2P0101 |
| Audio controller |
Intel Raptor Lake-P/U/H cAVS 8086:51ca (rev 01), driver sof-audio-pci-intel-tgl |
| Codec |
Realtek ALC256 (snd_hda_codec_alc269) |
Software
- Manjaro Linux, kernel
7.1.8-1-MANJARO
- sof-firmware
2025.12.2 (firmware ABI 3:22:1, kernel ABI 3:23:1)
- PipeWire
1.6.8 / WirePlumber
Symptoms
NHLT advertises 2 DMICs:
sof-audio-pci-intel-tgl 0000:00:1f.3: DMICs detected in NHLT tables: 2
sof-audio-pci-intel-tgl 0000:00:1f.3: loading topology: intel/sof-tplg/sof-hda-generic-2ch.tplg
The internal digital microphones appear as a working capture device
(skl_hda_dsp_generic.HiFi__Mic1__source, PCM6), but capture yields no acoustic data:
a full-scale (32768) pop at stream open, then only a noise floor around ±52 LSB (~-56 dBFS).
Per-second analysis of a 6 s recording from the DMIC source:
sec0: peak=32768 <- stream-open pop
sec1..4: peak<=52 <- noise floor, zero acoustic content
The analog path is a red herring on this machine: the ALC256 autoconfig input
(Mic=0x19) is the external headset-jack mic only; the internal mics are not wired to
any codec pin. Booting legacy HDA (snd_intel_dspcfg.dsp_driver=1) exposes just the
headset jack and confirms there is no codec-side internal microphone.
Workaround (verified)
Selecting the PDM1 variant of the same topology makes the array work immediately:
cp /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-2ch-pdm1.tplg \
/usr/lib/firmware/intel/sof-tplg/sof-hda-generic-2ch.tplg
reboot
After this, the same DMIC source captures real audio (speech peaks up to full scale,
healthy RMS in every second of the recording).
Root cause hypothesis
The physical DMIC array on this board is wired to PDM1, while
sof-hda-generic-2ch (chosen by the dmic-count heuristic from NHLT) wires its DMIC
pipeline to PDM0. The NHLT blob apparently does not carry usable PDM-port
information for the topology chooser, so the wrong variant is picked.
Possible upstream directions:
- honor NHLT DMIC link/PDM details when selecting the generic topology
(e.g., extend the sof_use_tplg_nhlt path), or
- add a platform quirk for TM2415 / subsystem
1d72:2415.
Happy to test patches or collect additional debug info (NHLT dump, sof-logger trace,
alsa-info) on request.
Internal DMIC dead with default topology; works with PDM1 variant — Xiaomi Redmi Book 16 2025 (TM2415)
Hardware
1d72:24158086:51ca(rev 01), driversof-audio-pci-intel-tglsnd_hda_codec_alc269)Software
7.1.8-1-MANJARO2025.12.2(firmware ABI3:22:1, kernel ABI3:23:1)1.6.8/ WirePlumberSymptoms
NHLT advertises 2 DMICs:
The internal digital microphones appear as a working capture device
(
skl_hda_dsp_generic.HiFi__Mic1__source, PCM6), but capture yields no acoustic data:a full-scale (32768) pop at stream open, then only a noise floor around ±52 LSB (~-56 dBFS).
Per-second analysis of a 6 s recording from the DMIC source:
The analog path is a red herring on this machine: the ALC256 autoconfig input
(
Mic=0x19) is the external headset-jack mic only; the internal mics are not wired toany codec pin. Booting legacy HDA (
snd_intel_dspcfg.dsp_driver=1) exposes just theheadset jack and confirms there is no codec-side internal microphone.
Workaround (verified)
Selecting the PDM1 variant of the same topology makes the array work immediately:
After this, the same DMIC source captures real audio (speech peaks up to full scale,
healthy RMS in every second of the recording).
Root cause hypothesis
The physical DMIC array on this board is wired to PDM1, while
sof-hda-generic-2ch(chosen by the dmic-count heuristic from NHLT) wires its DMICpipeline to PDM0. The NHLT blob apparently does not carry usable PDM-port
information for the topology chooser, so the wrong variant is picked.
Possible upstream directions:
(e.g., extend the
sof_use_tplg_nhltpath), or1d72:2415.Happy to test patches or collect additional debug info (NHLT dump, sof-logger trace,
alsa-info) on request.