Skip to content

Internal DMIC dead with default topology; works with PDM1 variant (Xiaomi Redmi Book 16 2025, TM2415) #11115

Description

@mpa3b

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions