[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 | org.kernel.vger.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