[BUG] snd-ctl-led: computed LED state never propagated to audio-mute trigger (SOF + ALC245, HP Spectre x360 14-ef2xxx)

[email protected] Sun, 2 Aug 2026 10:05:00 -0700
Newsgroups gmane.linux.sound
Message-ID <CALch4NKfxs=GWpru1ncAXYbzD9Kh8-Bm2quif5vzb2nPo6Hnbw@mail.gmail.com>
Hi,

I'd like to report a bug in the mute-LED handling on an HP Spectre x360
2-in-1 14-ef2xxx (SSID 103c:8ba2, ALC245 over SOF / sof-hda-dsp).

Kernel: 6.18.41 (Arch linux-lts) and also reproduced on 7.1.5-arch1.
BIOS: HP F.09 (07/29/2025).

Symptom: the keyboard mute and micmute LEDs never react to mixer mute
changes. Investigating the chain end to end, every link works except the
final propagation from snd-ctl-led to the LED trigger:

1) The codec fixup is picked at boot:
     snd_hda_codec_alc269 ehdaudio0D0: ALC245: picked fixup  for PCI
SSID 103c:8ba2
   (note the fixup name prints empty — possibly a separate cosmetic issue).

2) The LED class devices exist and drive the correct hardware. Writing
   /sys/class/leds/hda::mute/brightness toggles COEF 0x0b bits 2-3
   (0x8 on / 0x4 off) on the codec, and hda::micmute/brightness toggles
   GPIO 0x04 with inverted polarity — verified by reading the codec back
   with hda-verb after each write. Driving those same registers from
   userspace lights the physical LEDs, so the register programming of the
   fixup matches the hardware (this is what
   ALC245_FIXUP_HP_X360_MUTE_LEDS programs).

3) snd-ctl-led has the right controls attached automatically:
     /sys/class/sound/ctl-led/speaker/card0/list -> 10  ('Master
Playback Switch')
     /sys/class/sound/ctl-led/mic/card0/list     -> 42 7 ('Dmic0
Capture Switch', 'Capture Switch')
   and both are in mode "follow-mute".

4) Muting works at the control level (both via amixer and via
   PipeWire, which does toggle the hardware switches), and snd-ctl-led
   computes the LED state correctly:
     /sys/class/sound/ctl-led/speaker/brightness reads 0 unmuted, 1 muted.

5) BUT the LED class devices never change:
     amixer -c0 sset Master mute
     cat /sys/class/sound/ctl-led/speaker/brightness  -> 1
     cat /sys/class/leds/hda::mute/brightness         -> 0   (stays 0 forever)
   The audio-mute trigger is active on the cdev ([audio-mute] in its
   trigger list), yet the computed state from snd-ctl-led is never pushed
   to it. Same behaviour for the mic LED.

So: fixup picked, cdevs functional, controls attached, control events
flowing, ctl-led computing the right value on sysfs read — but the
notification path that should fire ledtrig_audio never runs on this
SOF+ALC245 combination.

A userspace workaround (daemon following PulseAudio/PipeWire mute events
and writing the codec registers directly) works fine, which further
confirms the hardware side is healthy.

One more data point: with the previous BIOS (HP F.05) the fixup was not
picked at all (no hda::mute/hda::micmute cdevs were created), so the
codec SSID exposure seems to have changed between BIOS versions; on F.09
the quirk matching works and only the trigger propagation is broken.

Happy to test patches or provide any additional debugging output.

Thanks,
Ramiro Sanes