Repository navigation
Description
On 12th-gen Intel laptops whose internal mic is a DMIC wired to the PCH, you must use the SOF driver. Forcing the legacy driver (snd-intel-dspcfg.dsp_driver=1) and adding random model=alc256-* quirks from forum posts breaks the mic and makes things worse. Remove them, let SOF load, and fix a WirePlumber boot race.
Hardware / software
- Laptop: MSI Thin GF63 12VE (subsystem
1462:13b6) - CPU: i7-12650H (Alder Lake-P, audio
8086:51c8) - Codec: Realtek ALC256
- GPU: RTX 4050 + Intel UHD (NVIDIA HDMI audio as a second card)
- OS: Debian 13 (Trixie), kernel 6.12, GNOME 48 (Wayland)
- PipeWire 1.4.2, WirePlumber 0.5.8,
firmware-sof-signed2025.01,alsa-ucm-conf1.2.14
Symptoms
- Audio often fell back to "Dummy Output". Logging out and back in sometimes fixed it.
- Internal mic recorded pure digital silence (peak = 0).
- Speakers went completely silent. Headphones worked.
- Jack, HDMI and USB hot-plug detection was unreliable.
Root causes
1. The internal mic is a DMIC on the PCH, which needs SOF.
Check whether your BIOS has an NHLT table:
ls /sys/firmware/acpi/tables/ | grep NHLT
If NHLT is present and arecord -l only shows ALC256 Analog, your DMIC is invisible because you are on the legacy snd_hda_intel path. With SOF loaded you get sof-hda-dsp with DMIC and DMIC16kHz devices.
2. I (following old guides) had forced the legacy driver in TWO places:
/etc/modprobe.d/audio-hda.conf→options snd-intel-dspcfg dsp_driver=1/etc/default/grub→snd-intel-dspcfg.dsp_driver=1
cat /sys/module/snd_intel_dspcfg/parameters/dsp_driver
cat /proc/cmdline
3. Wrong ASUS quirks on an MSI laptop.
I had three conflicting files: model=alc256-asus-rog (twice) and model=alc256-asus-mic. These remap the codec pins for ASUS boards. Don't copy model= lines blindly. Check the active one with:
cat /sys/module/snd_hda_intel/parameters/model
On this laptop the BIOS pin config is correct, so no quirk is needed.
4. WirePlumber boot race.
After switching to SOF, WirePlumber sometimes started before the SOF card had finished probing. The card showed no profiles and I got "Dummy Output". systemctl --user restart wireplumber fixed it every time, which confirms it's a timing issue.
The fix
# 1. Remove legacy-forcing and quirk files (back them up first!)
sudo mkdir -p /root/audio-backup
sudo mv /etc/modprobe.d/{audio-hda,blacklist-sof,alc256-quirk,alc256-model,alsa-msi-gf63}.conf /root/audio-backup/ 2>/dev/null
# 2. Explicitly select SOF
echo "options snd-intel-dspcfg dsp_driver=3" | sudo tee /etc/modprobe.d/audio-sof.conf
# 3. Remove dsp_driver=1 from the kernel cmdline, if present
sudo cp /etc/default/grub /etc/default/grub.bak
sudo sed -i 's/ snd-intel-dspcfg.dsp_driver=1//' /etc/default/grub
sudo update-grub
sudo update-initramfs -u
# 4. Make sure firmware + UCM are installed (non-free-firmware repo)
sudo apt install firmware-sof-signed alsa-ucm-conf
# 5. Reset stale WirePlumber state (it remembers devices from the old driver)
systemctl --user stop wireplumber
mv ~/.local/state/wireplumber ~/.local/state/wireplumber.bakI kept blacklist snd_soc_avs because it can conflict with SOF.
Fix for the boot race: a user-level systemd drop-in that makes WirePlumber wait for the SOF card's DMIC PCM:
mkdir -p ~/.config/systemd/user/wireplumber.service.d
cat > ~/.config/systemd/user/wireplumber.service.d/wait-sof.conf <<'EOF'
[Service]
ExecStartPre=/bin/sh -c 'for i in $(seq 1 30); do [ -e /proc/asound/sofhdadsp/pcm6c ] && break; sleep 0.5; done; sleep 2'
TimeoutStartSec=40
EOF
systemctl --user daemon-reload(Check that pcm6c is your DMIC with ls /proc/asound/sofhdadsp/. It may differ on other models.)
Reboot.
Result
wpctl status now shows:
- Sinks: Speaker and HDMI 1/2/3
- Sources: Digital Microphone (internal DMIC) and Stereo Microphone (headset)
- Card profile:
HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)
About the silent speaker
With both drivers the codec looked correct: pin 0x14 was OUT, unmuted, EAPD on, and the mixer was at 100%. Headphones worked. The speaker came back during the process, but I can't say which step fixed it. If your speaker is silent while /proc/asound/cardX/codec#0 shows pin 0x14 configured correctly, try a full power-off: unplug the charger, hold the power button for 30 s, and use the battery reset pinhole if your MSI has one. Also test from a live USB to rule out hardware.
Useful diagnostic commands
lspci -nnk | grep -A3 -i audio # which driver owns the controller
aplay -l; arecord -l # look for sof-hda-dsp + DMIC
pactl list cards | grep -A1 Profiles # empty profiles = UCM or boot-race issue
alsaucm -c hw:1 list _verbs # UCM working? should list HiFi
grep -A12 "^Node 0x14" /proc/asound/card*/codec#0 # speaker pin state
Hope this saves someone a few hours. Happy to answer questions.
Activity