u/ramonvanraaij

▲ 13 r/archlinux+1 crossposts

Hi everyone, I got a Lenovo Yoga Pro 9 16IMH9 and noticed the built-in speakers were extremely quiet (~10-15% volume). I fixed it for the 6.x zen kernel but upgrading to 7.x broke things. After some digging, I found a few issues in the audio stack and wanted to share a workaround for anyone else on this hardware.

The Situation:

  1. SSID Collision: This model shares a PCI SSID with the Legion S7, causing the kernel to pick the wrong quirk and fail to bind the TAS2781 amplifiers. I've submitted a patch to the ALSA maintainers using a unique Codec SSID quirk to disambiguate the two. It was accepted today and will be merged into the mainline kernel.
  2. Cold Boot Firmware Bug: Even with the quirk fixed, the DSP firmware silently fails to load during cold boots because of the BIOS state. I’ve filed a kernel bug report for this.
  3. WirePlumber Crash: Attempting to power-cycle the I2C controller to fix the firmware issue revealed a SIGSEGV in WirePlumber (reported upstream).

The Workaround: Since it will take a while for the patch to hit stable releases, I’ve put together a GitHub repo with a DKMS module and a systemd reset service. It handles the quirk override and the cold-boot reset automatically.

GitHub: https://github.com/ramonvanraaij/yoga9-tas2781-hda

Technical Details:

  • Kernel: Tested on 7.0.2-zen1
  • Fix: Adds HDA_CODEC_QUIRK for 17aa:38d6 to route to ALC287_FIXUP_TAS2781_I2C.
  • Reset: PCI remove/rescan of the I2C controller (0000:00:15.2) to force a firmware reload.

The repo includes a build.sh that sets up the DKMS module and the systemd services. Hopefully, this saves someone else a few days of troubleshooting!

u/ramonvanraaij — 13 days ago