Skip to content

[SOLVED] MSI Thin GF63 12VE (Alder Lake) on Debian 13: no internal mic, "Dummy Output", broken speaker – SOF was the fix (and bad quirks were the problem) #6015

Open

Description

@bcodesphere

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-signed 2025.01, alsa-ucm-conf 1.2.14

Symptoms

  1. Audio often fell back to "Dummy Output". Logging out and back in sometimes fixed it.
  2. Internal mic recorded pure digital silence (peak = 0).
  3. Speakers went completely silent. Headphones worked.
  4. 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

⚠️ The kernel command line wins over modprobe.d. Changing only modprobe.d did nothing. Check what is actually applied:

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.bak

I 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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