F41 Broken audio because of `snd_hda_intel`

Hi.
I recently installed Fedora 41 Workstation on my Lenovo Legion Pro 7. My previous Fedora 40 install also had broken audio, however, I was able to fix it with the following command:

sudo tee /etc/modprobe.d/snd-hda-intel.conf <<< "options snd_hda_intel power_save=0"

However, now, this is no longer working. Not only that, but I also discovered a weird thing. Running cat /sys/module/snd_hda_intel/parameters/power_save gives me 10, instead of 0. Shouldn’t the power_save parameter be a boolean value? Where does 10 come from? I’d expect this value to be either 0 or 1.

I’m running kernel version 6.12.5-200.fc41.x86_64.

Output of journalctl -k | grep -Ei "ALSA|HDA|sof[-]|HDMI|snd[_-]|sound|hda.codec|hda.intel":

dec 22 23:20:48 fedora kernel: [drm] DP-HDMI FRL PCON supported
dec 22 22:20:49 fedora kernel: snd_hda_intel 0000:01:00.1: Disabling MSI
dec 22 22:20:49 fedora kernel: snd_hda_intel 0000:01:00.1: Handle vga_switcheroo audio client
dec 22 22:20:49 fedora kernel: input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input20
dec 22 22:20:49 fedora kernel: input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input21
dec 22 22:20:49 fedora kernel: input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input22
dec 22 22:20:49 fedora kernel: input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input23
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC287: line_outs=1 (0x17/0x0/0x0/0x0/0x0) type:speaker
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    inputs:
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:      Mic=0x19
dec 22 22:20:49 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:      Internal Mic=0x12
dec 22 22:20:49 fedora kernel: input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:08.1/0000:06:00.6/sound/card1/input24
dec 22 22:20:49 fedora kernel: input: HD-Audio Generic Headphone as /devices/pci0000:00/0000:00:08.1/0000:06:00.6/sound/card1/input25

Output of modprobe -D snd_hda_intel:

insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/soundcore.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/core/snd.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/core/snd-timer.ko.xz 
install /sbin/modprobe --ignore-install snd-pcm && /sbin/modprobe snd-seq 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/core/snd-hwdep.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/hda/snd-hda-core.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/pci/hda/snd-hda-codec.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/hda/snd-intel-sdw-acpi.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/hda/snd-intel-dspcfg.ko.xz 
insmod /lib/modules/6.12.5-200.fc41.x86_64/kernel/sound/pci/hda/snd-hda-intel.ko.xz power_save=0

I tried adding enable_msi=1 to /etc/modprobe.d/snd-hda-intel.conf, but the journalctl log still says Disabling MSI, so it looks like the config file is ignored. Also, power_save_controller=N doesn’t make it work either. Replacing _ with - does not work either.


Edit: I managed to fix this issue, albeit it would be still nice to what’s going wrong. I reverted back to the 6.11.4-301.fc41.x86_64 kernel and noticed that the sound was working fine, and the journalctl log was different:

dec 23 00:04:10 fedora kernel: [drm] DP-HDMI FRL PCON supported
dec 22 23:04:12 fedora kernel: snd_hda_intel 0000:01:00.1: Handle vga_switcheroo audio client
dec 22 23:04:12 fedora kernel: input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input19
dec 22 23:04:12 fedora kernel: input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input20
dec 22 23:04:12 fedora kernel: input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input21
dec 22 23:04:12 fedora kernel: input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input22
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0: bound i2c-TIAS2781:00 (ops tas2781_hda_comp_ops [snd_hda_scodec_tas2781_i2c])
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC287: line_outs=1 (0x17/0x0/0x0/0x0/0x0) type:speaker
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:    inputs:
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:      Mic=0x19
dec 22 23:04:12 fedora kernel: snd_hda_codec_realtek hdaudioC1D0:      Internal Mic=0x12
dec 22 23:04:12 fedora kernel: input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:08.1/0000:06:00.6/sound/card1/input23
dec 22 23:04:12 fedora kernel: input: HD-Audio Generic Headphone as /devices/pci0000:00/0000:00:08.1/0000:06:00.6/sound/card1/input24
dec 22 23:04:14 fedora kernel: pci 0000:01:00.0: optimus capabilities: enabled, status dynamic power, hda bios codec supported
dec 22 23:04:15 fedora kernel: snd_hda_intel 0000:01:00.1: bound 0000:01:00.0 (ops nv50_audio_component_bind_ops [nouveau])

Looks like with the newer kernel, the snd_hda_codec_realtek hdaudioC1D0: bound i2c-TIAS2781:00 (ops tas2781_hda_comp_ops [snd_hda_scodec_tas2781_i2c]) line is missing.

I ended up adding the model=,17aa:38a8 parameter to /etc/modprobe.d/snd-hda-intel.conf, which fixed the audio on the newer kernel. I got this idea from this comment.

Side notes:

  • I got the model ID by running cat /sys/class/sound/hwC1D0/subsystem_id.
  • The /sys/module/snd_hda_intel/parameters/power_save value is still 10. I don’t know what that means nor why.
  • /sys/module/snd_hda_intel/parameters/power_save_controller is still Y, even though power_save=0 is set

Might have to dracut -f or GRUB update with modprobe.d, but I usually set that fine from GRUB with snd_hda_intel.power_save='0'