The Problem
The Lenovo Legion Pro 7 16IAX10H (product ID 83F5) has terrible speaker audio on Linux out of the box. The laptop uses Awinic AW88399 smart amplifiers connected via I2C to drive the main speakers, but the mainline Linux kernel (as of 6.19) has no HDA side-codec bridge driver for these amps. The result: only the tiny tweeter speakers work, the amplified woofers are completely silent, and the sound is thin and tinny.
Hardware Details
- Audio Controller: Intel 800 Series ACE (PCI
80:1f.3), PCI SSID 17aa:3d6c
- Codec: Realtek ALC287, codec SSID
17aa:3906
- Smart Amplifier: Awinic AW88399 on I2C (
AWDZ8399:00), two instances at addresses 0x34 and 0x35
- SOF Firmware:
intel/sof-ipc4/arl-s/sof-arl-s.ri v2.14.1.1
- Speaker Layout: Tweeters near the screen hinge (pin 0x14, direct codec output), Woofers near the palmrest (pin 0x17, driven through AW88399 amps)
Root Cause
- The SOF driver loads but uses a generic HDA topology with no smart amp integration
- The
snd_soc_aw88399 ASoC module loads but with 0 references — nothing bridges it to the HDA codec
- The kernel picks a wrong/generic codec fixup because the PCI subsystem ID (
17aa:3d6c) has no quirk entry
- There is no
CONFIG_SND_HDA_SCODEC_AW88399 driver in mainline Linux — this HDA bridge driver doesn't exist yet
The Fix
This requires a custom kernel build using the community patch from nadimkobeissi/16iax10h-linux-sound-saga. The fix also applies to the 16AFR10H variant.
Step 1: Build a Patched Kernel
I'm on CachyOS, so I used the CachyOS kernel PKGBUILD. Adapt for your distro.
# Clone the CachyOS kernel build files
git clone https://github.com/CachyOS/linux-cachyos.git
cd linux-cachyos
# Download the community patch
curl -L https://raw.githubusercontent.com/nadimkobeissi/16iax10h-linux-sound-saga/main/fix/patches/16iax10h-audio-linux-6.19.8.patch -o aw88399-hda-scodec.patch
# Edit PKGBUILD:
# 1. Add aw88399-hda-scodec.patch to the source array
# 2. Add these to the kernel config:
# CONFIG_SND_HDA_SCODEC_AW88399=m
# CONFIG_SND_HDA_SCODEC_AW88399_I2C=m
# Build (needs ~20GB disk space, NOT tmpfs)
BUILDDIR=/home/$USER/kernel-build makepkg -s
# Install
sudo pacman -U linux-cachyos-*.pkg.tar.zst
Step 2: Install AW88399 Firmware
The amplifier calibration firmware needs to be extracted from the Windows driver:
# Get the firmware file from the community repo
sudo cp aw88399_acf.bin /lib/firmware/aw88399_acf.bin
Step 3: Force SOF Driver
# Create /etc/modprobe.d/sof-force.conf
echo 'options snd_intel_dspcfg dsp_driver=3' | sudo tee /etc/modprobe.d/sof-force.conf
Step 4: Install UCM2 Config (with caveats — see below)
The community repo includes modified UCM2 configs. Install them to /usr/share/alsa/ucm2/HDA/ — but read the important note below first.
Step 5: Reboot
After reboot, verify:
# Should show both amps bound
sudo dmesg | grep aw88399
# Should show modules with references > 0
lsmod | grep aw88399
# Should show correct fixup for 17aa:3906
sudo dmesg | grep -i fixup
Post-Install Tuning: Two Issues We Hit
Issue 1: Volume Hotkeys Stop Working with Virtual Audio Sinks
If you use EasyEffects or any PipeWire filter chain that creates a virtual sink and set it as the default, KDE Plasma's volume keyboard shortcuts will break. Mute still works, but volume up/down do nothing.
Root cause: plasma-pa's audioshortcutsservice KDED module uses PreferredDevice::sink() which doesn't handle virtual/combined sinks properly. Related: KDE Bug 456310.
Solution: Don't use EasyEffects or PipeWire filter-chain virtual sinks as your default audio output. Keep the hardware speaker sink as default. The patched kernel with working smart amps makes heavy DSP processing unnecessary anyway — the amps handle speaker optimization.
Issue 2: UCM2 Post Mixer Override Kills Sound Clarity
The community UCM2 config adds a Legion-specific override that routes PipeWire's volume control through the SOF DSP's Post Mixer Analog Playback Volume. This control has coarse 2dB steps and a -90dB to 0dB range with mute-at-zero. At typical listening levels (50%), this applies -18dB of digital attenuation in the DSP, destroying dynamic range and making the sound feel thin and muffled.
Solution: Remove the Legion override from /usr/share/alsa/ucm2/HDA/HiFi-analog.conf. Delete this block:
If.legion {
Condition {
Type String
Haystack "$${sys:devices/virtual/dmi/id/product_name}"
Needle "83F5"
}
True.If.postmixer {
Condition {
Type ControlExists
Control "name='Post Mixer Analog Playback Volume'"
}
True.Value {
PlaybackMixerElem "Post Mixer Analog"
PlaybackMasterElem "Post Mixer Analog"
PlaybackVolume "Post Mixer Analog Playback Volume"
}
}
}
This lets PipeWire control the HDA codec's Speaker Playback Volume instead, which has fine 0.75dB steps — much better for audio quality.
After removing the override, set the SOF DSP volumes to 0dB (maximum) so they don't attenuate:
# Set Pre Mixer, Post Mixer, and Deepbuffer to max
amixer -c 1 cset numid=39 45,45
amixer -c 1 cset numid=40 45,45
amixer -c 1 cset numid=51 45,45
# Restart PipeWire to pick up the UCM change
systemctl --user restart pipewire pipewire-pulse wireplumber
Final Working Configuration
- Kernel: 6.19.9 with AW88399 HDA side-codec patch
- Default sink: Hardware speaker (
alsa_output.pci-...-HiFi__Speaker__sink)
- Volume control: PipeWire → Speaker Playback Volume (0.75dB steps)
- SOF DSP volumes: All at 0dB (max)
- EasyEffects: Not needed / not running
- UCM2: Community config minus the Post Mixer override
- Result: Both tweeters (hinge) and woofers (palmrest) working, volume hotkeys functional, clean sound
Beyond the Community Patch
The community kernel patch from nadimkobeissi/16iax10h-linux-sound-saga is essential — it creates the HDA side-codec bridge driver that gets the AW88399 amps working at all. However, Issues 2 and 3 above are not addressed by the community patch, the Kernel Bugzilla #218329 discussion, or any of the related CachyOS threads.
Specifically:
- The Post Mixer clarity problem (Issue 2) is introduced by the community's own UCM2 config, which routes volume through a coarse 2dB-step SOF DSP control. Nobody in the upstream discussion has flagged this.
- The tweeter/woofer volume imbalance (Issue 3) is an inherent consequence of the hardware design — the AW88399 amps have no ALSA volume control, so any ALSA-mapped volume slider only affects the tweeter DAC. The community patch doesn't mention this, and their UCM2 config inadvertently masks it (the Post Mixer digital attenuation happens before both DACs, so both paths scale together — but with terrible audio quality due to the coarse steps).
- The PipeWire software volume solution — removing the UCM2 Speaker volume mapping entirely and letting PipeWire attenuate the digital signal before the codec — gives you the best of both worlds: both speaker paths scale together AND you get full dynamic range. This approach is unique to this guide.
If you're applying the community kernel patch on its own without these UCM2 fixes, you'll get working speakers but with either muffled sound or an unbalanced mix depending on your volume level.
References
Kernel Update Warning
When your distro pushes a new kernel update, the AW88399 patch will be overwritten. You'll need to rebuild with the patch each time until it's upstreamed. A $2,000 community bounty was paid out for developing this fix, but it has not yet been upstreamed to mainline Linux — track progress on Kernel Bugzilla #218329.
Worth being honest about the maintenance cost: an out-of-tree patch has to be re-applied on every kernel bump until it lands upstream. That's fine on a personal machine and a real liability on a work one. If it's the latter and you'd rather not own that treadmill, that's the kind of thing we take off your plate.