Skip to content

Instantly share code, notes, and snippets.

@mike-echo-oscar-whiskey
Last active April 30, 2026 04:20
Show Gist options
  • Select an option

  • Save mike-echo-oscar-whiskey/f24410d0fb81740ecf8def54c6f03949 to your computer and use it in GitHub Desktop.

Select an option

Save mike-echo-oscar-whiskey/f24410d0fb81740ecf8def54c6f03949 to your computer and use it in GitHub Desktop.
Lenovo Yoga Slim 7 14 AGP11 — fixing tinny Linux audio (ALC287 + broken BIOS SSID)

Lenovo Yoga Slim 7 14 AGP11 — fixing tinny Linux audio (ALC287 + broken BIOS SSID)

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.

Confirm your hardware matches

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:

  • dmesg reports PCI SSID 17aa:0000 (the bug).
  • The double space after picked fixup is 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.

The fix

Step 1 — find the card index of the ALC287

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.

Step 2 — create the modprobe config

sudo tee /etc/modprobe.d/alsa-model.conf <<'EOF'
options snd-hda-intel model=,alc287-yoga9-bass-spk-pin
EOF

The leading comma is load-bearing. snd-hda-intel's model= parameter is positional per card index: model=foo,bar means "card 0 → foo, card 1 → bar". Without the leading comma, the kernel applies alc287-yoga9-bass-spk-pin to 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.

Step 3 — apply without rebooting

sudo modprobe -r snd_hda_intel
sudo modprobe snd_hda_intel

If unload fails because something is holding the module open (PipeWire, an active stream, etc.), just reboot — same effect.

Step 4 — verify the quirk bound

dmesg | grep -i alc287

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

Step 5 — listen

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 this fix will and won't do

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.

Rollback

sudo rm /etc/modprobe.d/alsa-model.conf
sudo modprobe -r snd_hda_intel
sudo modprobe snd_hda_intel

Why this is necessary at all

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

Tested on

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

References

Author

Kris Katerhttps://github.com/mike-echo-oscar-whiskey

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