If your Yoga Slim 7 14 AGP11 sounds noticeably thinner under Linux than it does under Windows, this is almost certainly because the BIOS reports a broken PCI subsystem ID for the Realtek ALC287 codec, so no Realtek pin-routing quirk binds and the speaker pin assignment falls back to a generic layout. This page documents a working fix.
Note on scope. This page covers exactly one machine: the Lenovo Yoga Slim 7 14 AGP11 (AMD Ryzen AI 7 / Kraken Point, ACP 7.0). It will probably also help close cousins (similar AMD Yoga Slim chassis using the ALC287 with a stripped SSID), but I haven't verified those. Confirm your hardware matches before applying.
Run these and check the output looks like the example:
sudo dmidecode -s system-product-name
# → 83QS (or whatever Lenovo SKU; the relevant part is "Yoga Slim 7 14 AGP11")
sudo dmidecode -s system-version
# → Yoga Slim 7 14 AGP11
cat /proc/asound/cards
# Should show:
# 0 [Generic ]: HDA-Intel - HD-Audio Generic (← AMD HDMI/DP audio)
# 1 [Generic_1 ]: HDA-Intel - HD-Audio Generic (← Realtek ALC287, the speakers)
# 2 [acppdmmach ]: acp-pdm-mach - acp-pdm-mach (← built-in mic array)
cat /proc/asound/card1/codec#0 | head -2
# → Codec: Realtek ALC287
# Address: 0
dmesg | grep -i alc287
# → ALC287: picked fixup for PCI SSID 17aa:0000 (← note the broken SSID and empty quirk name)Two things must be true to apply the fix below:
dmesgreportsPCI SSID 17aa:0000(the bug).- The double space after
picked fixupis empty, i.e. no quirk name in parentheses (no fixup is binding).
If your SSID is anything other than 17aa:0000, stop — your BIOS isn't broken in the same way and a different (or no) fix applies.
In the output of cat /proc/asound/cards above, note which card index is the Realtek codec. On the AGP11 it's card 1 (card 0 is the AMD HDMI codec). If your layout differs, count from zero and adjust the model line in step 2 accordingly — the position of the quirk name in the comma-separated list must match the ALC287's card index.
sudo tee /etc/modprobe.d/alsa-model.conf <<'EOF'
options snd-hda-intel model=,alc287-yoga9-bass-spk-pin
EOFThe leading comma is load-bearing.
snd-hda-intel'smodel=parameter is positional per card index:model=foo,barmeans "card 0 → foo, card 1 → bar". Without the leading comma, the kernel appliesalc287-yoga9-bass-spk-pinto card 0 (the HDMI codec), which doesn't recognize that quirk name and silently ignores it. The empty first slot tells the kernel to skip card 0 so the quirk lands on card 1 where the ALC287 actually lives.
If your ALC287 is on card 2 (e.g. an extra HDA controller present on a dock), the line becomes model=,,alc287-yoga9-bass-spk-pin — one empty slot per skipped card.
sudo modprobe -r snd_hda_intel
sudo modprobe snd_hda_intelIf unload fails because something is holding the module open (PipeWire, an active stream, etc.), just reboot — same effect.
dmesg | grep -i alc287You want to see:
ALC287: picked fixup for PCI SSID 17aa:0000 (alc287-yoga9-bass-spk-pin)
The quirk name in parentheses is the signal it actually bound. A double-space-then-nothing means it didn't bind — recheck the card index from step 1.
Audio should sound less thin in the low-mids — bass pin routing is now what the firmware intends. Adjust EasyEffects or your mixer to taste from there.
What it fixes. Pin-routing on the ALC287 stops being generic and starts using the layout the Yoga 9 / Slim 7 bass-spk pin assignment expects. That recovers a noticeable amount of low-mid body that was missing.
What it doesn't fix. The Slim 7 14 AGP11 has 2 active drivers + 2 passive radiators (despite the "4 speaker grille" marketing), no smart amps (no Cirrus / TI TAS / Nuvoton), and no SoundWire devices — so there is no DSP pipeline equivalent to Windows' Dolby Atmos / Realtek APO bass-boost+virtualization. This fix will not make Linux sound the same as Windows on this chassis. It will make it less thin.
sudo rm /etc/modprobe.d/alsa-model.conf
sudo modprobe -r snd_hda_intel
sudo modprobe snd_hda_intelRealtek codec quirks in the Linux kernel (sound/pci/hda/patch_realtek.c) are matched against the codec's PCI subsystem ID. The Yoga Slim 7 14 AGP11 ships a BIOS that programs the PCI subsystem ID for the audio function as 17aa:0000 instead of the correct 17aa:394c. With 0000 there is no entry in the SSID quirk table to match, so the fixup falls through to a generic auto-routing path that gets the bass-spk pin wrong. The codec's own internal subsystem-ID register reports 17aa:394c correctly, so /proc/asound/card1/codec#0 looks fine — but that register isn't what the quirk system reads.
Forcing the quirk via model= bypasses SSID matching entirely. The right long-term fix is an upstream DMI-based quirk in patch_realtek.c for this chassis. A kernel bug for this exact issue is already filed: https://bugzilla.kernel.org/show_bug.cgi?id=221438. If you can reproduce on the same chassis, please leave a "me too" comment there with your kernel version and BIOS revision — extra confirmations help the maintainers prioritise it. No need to file a duplicate.
- Hardware: Lenovo Yoga Slim 7 14 AGP11 (Lenovo SKU 83QS), AMD Ryzen AI 7 445 (Kraken Point), ACP 7.0
- Distro: EndeavourOS (Arch-based)
- Kernel: 7.0.2-zen1-1-zen
- Codec module:
snd-hda-codec-alc269(the ALC287 is handled by the alc269 driver — yes, really)
If it works on a different kernel or a sibling chassis, leave a comment so others can see.
- Upstream kernel bug for this chassis: https://bugzilla.kernel.org/show_bug.cgi?id=221438
model=parameter docs: https://www.kernel.org/doc/html/latest/sound/hd-audio/models.html- ALSA HD-Audio quirk source:
sound/pci/hda/patch_realtek.cin the Linux kernel tree - Related write-up for the Yoga Slim 7 14AKP10 (different SoC, same codec family, similar audio fix without the card-index gotcha): https://gist.github.com/framp/8e89d9e253642a43b9f5775c2277d204
Kris Kater — https://github.com/mike-echo-oscar-whiskey