This guide explains how to get audio working correctly on the Lenovo Legion Pro 7i Gen 10 (16IAX10H).
Since this solution is still very new, it will take some time for all components to be properly integrated into the Linux kernel. Until that happens, you can follow the steps below, which have been rigorously tested and are confirmed to work.
This guide is currently for Linux kernel version 6.17.8. It will be updated for future kernel versions as they are released, until the fix is fully integrated into the kernel.
Copy the aw88399_acf.bin file provided in this repository to /lib/firmware/aw88399_acf.bin.
If you prefer to obtain your own copy of this firmware blob, follow these instructions.
Download the kernel sources by clicking here.
Copy the 16iax10h-audio-linux-6.17.8.patch file from this repository into the root of your Linux kernel source directory. Then run:
patch -p1 < 16iax10h-audio-linux-6.17.8.patchThe patch should apply successfully to 10 files without any errors.
For the fix to work, the following kernel configuration options must be enabled:
CONFIG_SND_HDA_SCODEC_AW88399=m
CONFIG_SND_HDA_SCODEC_AW88399_I2C=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
CONFIG_SND_SOC_SOF_INTEL_COMMON=m
CONFIG_SND_SOC_SOF_INTEL_MTL=m
CONFIG_SND_SOC_SOF_INTEL_LNL=m
Configure the rest of the kernel as appropriate for your machine.
make -j24
make -j24 modules
sudo make -j24 modules_install
sudo cp -f arch/x86/boot/bzImage /boot/vmlinuz-linux-16iax10h-audioTo ensure proper graphics integration, you'll need to install the NVidia DKMS drivers for your custom kernel.
Install the NVidia DKMS package and headers:
sudo pacman -S nvidia-open-dkmsThe DKMS system will automatically build the NVidia kernel modules for your custom kernel. After installation, reboot to load the new drivers.
In case you later need to recompile and reinstall the driver, use the dkms utility:
sudo dkms build nvidia/580.105.08 --force
sudo dkms install nvidia/580.105.08 --forceYou may need to replace 580.105.08 with the actual NVidia driver version.
The process differs between distributions, as some use dracut while others use mkinitcpio. Instructions for common distributions are provided below.
First, create a new preset file for your custom kernel:
sudo cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux-16iax10h-audio.presetEdit /etc/mkinitcpio.d/linux-16iax10h-audio.preset to look like this:
# mkinitcpio preset file for the 'linux-16iax10h-audio' package
ALL_kver="/boot/vmlinuz-linux-16iax10h-audio"
PRESETS=('default')
default_image="/boot/initramfs-linux-16iax10h-audio.img"Then generate the initramfs:
sudo mkinitcpio -p linux-16iax10h-audioFinally, update your bootloader configuration. For GRUB, run:
sudo grub-mkconfig -o /boot/grub/grub.cfgFor systemd-boot, create a new boot entry in /boot/loader/entries/arch-16iax10h-audio.conf:
title Arch Linux (16IAX10H Audio)
linux /vmlinuz-linux-16iax10h-audio
initrd /initramfs-linux-16iax10h-audio.img
options root=PARTUUID=your-root-partition-uuid rw snd_intel_dspcfg.dsp_driver=3
Replace your-root-partition-uuid with your actual root partition UUID (find it by running blkid).
Note: You must include snd_intel_dspcfg.dsp_driver=3 in your kernel boot parameters.
First, generate the initramfs for your custom kernel:
sudo dracut --force /boot/initramfs-linux-16iax10h-audio.img --kver $(cat include/config/kernel.release)Then update your bootloader configuration. For GRUB, run:
sudo grub2-mkconfig -o /boot/grub2/grub.cfgFor systemd-boot, create a new boot entry in /boot/loader/entries/fedora-16iax10h-audio.conf:
title Fedora Linux (16IAX10H Audio)
linux /vmlinuz-linux-16iax10h-audio
initrd /initramfs-linux-16iax10h-audio.img
options root=UUID=your-root-partition-uuid rw snd_intel_dspcfg.dsp_driver=3
Replace your-root-partition-uuid with your actual root partition UUID (find it by running blkid).
Note: You must include snd_intel_dspcfg.dsp_driver=3 in your kernel boot parameters.
Reboot into the patched kernel. After rebooting, run uname -a to verify that you're running the correct kernel.
This step is necessary for proper volume control.
Copy the HiFi-analog.conf file from this repository to /usr/share/alsa/ucm2/HDA/HiFi-analog.conf, overwriting the existing file:
sudo cp -f HiFi-analog.conf /usr/share/alsa/ucm2/HDA/HiFi-analog.confFirst, identify your sound card ID by running:
You should get something like this:
0: hw:0
LENOVO-83F5-LegionPro716IAX10H-LNVNB161216Then, run the commands below, If you got hw:1 above, change hw:0 to hw:1 and -c 0 to -c 1:
alsaucm -c hw:0 reset
alsaucm -c hw:0 reload
amixer sset -c 0 Master 100%
amixer sset -c 0 Headphone 100%
amixer sset -c 0 Speaker 100%Note: The last three commands are for speaker calibration, not for setting your volume to maximum. They must be run for the speakers to function properly, but they do not control your actual volume level.
That's it! Your audio should now work correctly and permanently. This fix will persist across reboots with no additional steps required.
I, Nadim Kobeissi, attest that all components of the fix provided here have been tested and work without any apparent harmful effects. The fix components are provided in good faith. However, I (as well as the main fix authors) disclaim all responsibility for any use of this fix and guide:
THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
Fixing this issue required weeks of intensive work from multiple people.
Approximately 95% of the engineering work was done by Lyapsus. Lyapsus improved an incomplete kernel driver, wrote new kernel codecs and side-codecs, and contributed much more. I want to emphasize his incredible kindness and dedication to solving this issue. He is the primary force behind this fix, and without him, it would never have been possible.
I (Nadim Kobeissi) conducted the initial investigation that identified the missing components needed for audio to work on the 16IAX10H on Linux. Building on what I learned from Lyapsus's work, I helped debug and clean up his kernel code, tested it, and made minor improvements. I also contributed the solution to the volume control issue documented in Step 8, and wrote this guide.
Gergo K. showed me how to extract the AW88399 firmware from the Windows driver package and install it on Linux, as documented in Step 1.
Sincere thanks to everyone who pledged a reward for solving this problem. The reward goes to Lyapsus.