* [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt
@ 2026-08-25 8:40 Habil Eren Türker
2026-08-25 11:04 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: Habil Eren Türker @ 2026-08-25 8:40 UTC (permalink / raw)
To: perex, tiwai; +Cc: alsa-devel, linux-sound, Habil Eren Türker
HP Laptop 15-fd0039nt (SSID 103c:8bb6) needs a quirk to control the
speaker mute LED via VREF100 on NID 0x1a (active-high).
This patch replaces the previous ALC236_FIXUP_HP_MICMUTE_LED_ONLY
with ALC236_FIXUP_HP_15_FD0XXX, which covers both mic mute (GPIO0)
and speaker mute (NID 0x1a) LEDs.
Use spec->no_shutup_pins instead of a custom shutup hook, as suggested
by Takashi Iwai.
Fixes: e711ebfadc9a ("ALSA: hda/realtek: Add quirk for HP Laptop 15-fd0039nt")
Tested-by: Habil Eren Türker <habilerenturker@hotmail.com>
Signed-off-by: Habil Eren Türker <habilerenturker@hotmail.com>
---
sound/hda/codecs/realtek/alc269.c | 61 +++++++++++++++++++++++++++----
1 file changed, 53 insertions(+), 8 deletions(-)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 01b87267f..ec7b9ee67 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -1364,14 +1364,59 @@ static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
}
-static void alc236_fixup_hp_micmute_led_only(struct hda_codec *codec,
- const struct hda_fixup *fix, int action)
+/*
+ * HP Laptop 15-fd0xxx (SSID 103c:8bb6) Speaker Mute LED fix
+ *
+ * The speaker mute LED is controlled via VREF100 on NID 0x1a.
+ * This pin must remain powered (D0) even during suspend, otherwise
+ * the LED state is lost and the pin defaults to Hi-Z on resume,
+ * causing the LED to stop responding to mute toggles.
+ * Windows keeps this pin powered unconditionally, so matching that
+ * behavior ensures consistent LED operation across suspend/resume.
+ * The mic-mute LED is controlled via GPIO 0 with active-low polarity.
+ */
+static unsigned int hp_8bb6_power_filter(struct hda_codec *codec,
+ hda_nid_t nid,
+ unsigned int power_state)
+{
+ if (nid == 0x1a)
+ return AC_PWRST_D0;
+ return snd_hda_gen_path_power_filter(codec, nid, power_state);
+}
+
+static int hp_8bb6_speaker_mute_led_set(struct led_classdev *led_cdev,
+ enum led_brightness brightness)
+{
+ struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
+ unsigned int val = (brightness == LED_OFF) ? PIN_IN : PIN_VREF100;
+
+ snd_hda_set_pin_ctl_cache(codec, 0x1a, val);
+ return 0;
+}
+
+static void alc236_fixup_hp_15_fd0xxx(struct hda_codec *codec,
+ const struct hda_fixup *fix,
+ int action)
{
struct alc_spec *spec = codec->spec;
- if (action == HDA_FIXUP_ACT_PRE_PROBE)
+ switch (action) {
+ case HDA_FIXUP_ACT_PRE_PROBE:
spec->micmute_led_polarity = 1;
- alc_fixup_hp_gpio_led(codec, action, 0x00, 0x01);
+ alc_fixup_hp_gpio_led(codec, action, 0x00, 0x01);
+
+ spec->mute_led_polarity = 0;
+ snd_hda_gen_add_mute_led_cdev(codec, hp_8bb6_speaker_mute_led_set);
+
+ codec->power_filter = hp_8bb6_power_filter;
+ spec->no_shutup_pins = 1;
+ break;
+
+ case HDA_FIXUP_ACT_INIT:
+ if (spec->gen.vmaster_mute.hook)
+ snd_hda_sync_vmaster_hook(&spec->gen.vmaster_mute);
+ break;
+ }
}
static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
@@ -4096,7 +4141,7 @@ enum {
ALC236_FIXUP_HP_GPIO_LED,
ALC236_FIXUP_HP_MUTE_LED,
ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
- ALC236_FIXUP_HP_MICMUTE_LED_ONLY,
+ ALC236_FIXUP_HP_15_FD0XXX,
ALC236_FIXUP_LENOVO_INV_DMIC,
ALC298_FIXUP_SAMSUNG_AMP,
ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
@@ -5839,9 +5884,9 @@ static const struct hda_fixup alc269_fixups[] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc236_fixup_hp_mute_led_micmute_gpio,
},
- [ALC236_FIXUP_HP_MICMUTE_LED_ONLY] = {
+ [ALC236_FIXUP_HP_15_FD0XXX] = {
.type = HDA_FIXUP_FUNC,
- .v.func = alc236_fixup_hp_micmute_led_only,
+ .v.func = alc236_fixup_hp_15_fd0xxx,
},
[ALC236_FIXUP_LENOVO_INV_DMIC] = {
.type = HDA_FIXUP_FUNC,
@@ -7345,7 +7390,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
SND_PCI_QUIRK(0x103c, 0x8bb3, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8bb4, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
- SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_MICMUTE_LED_ONLY),
+ SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_15_FD0XXX),
SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
--
2.47.3
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt
2026-08-25 8:40 [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt Habil Eren Türker
@ 2026-08-25 11:04 ` Takashi Iwai
0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2026-08-25 11:04 UTC (permalink / raw)
To: "Habil Eren Türker"
Cc: perex, tiwai, alsa-devel, linux-sound, Habil Eren Türker
On Tue, 25 Aug 2026 10:40:14 +0200,
Habil Eren Türker wrote:
>
> HP Laptop 15-fd0039nt (SSID 103c:8bb6) needs a quirk to control the
> speaker mute LED via VREF100 on NID 0x1a (active-high).
>
> This patch replaces the previous ALC236_FIXUP_HP_MICMUTE_LED_ONLY
> with ALC236_FIXUP_HP_15_FD0XXX, which covers both mic mute (GPIO0)
> and speaker mute (NID 0x1a) LEDs.
>
> Use spec->no_shutup_pins instead of a custom shutup hook, as suggested
> by Takashi Iwai.
>
> Fixes: e711ebfadc9a ("ALSA: hda/realtek: Add quirk for HP Laptop 15-fd0039nt")
> Tested-by: Habil Eren Türker <habilerenturker@hotmail.com>
> Signed-off-by: Habil Eren Türker <habilerenturker@hotmail.com>
Applied now. Thanks.
Takashi
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt
@ 2026-08-24 9:42 Habil Eren Türker
2026-08-25 7:58 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: Habil Eren Türker @ 2026-08-24 9:42 UTC (permalink / raw)
To: perex, tiwai; +Cc: alsa-devel, linux-sound, Habil Eren Türker
HP Laptop 15-fd0039nt (SSID 103c:8bb6) needs a quirk to control the
speaker mute LED via VREF100 on NID 0x1a (active-high).
This patch replaces the previous ALC236_FIXUP_HP_MICMUTE_LED_ONLY
with ALC236_FIXUP_HP_15_FD0XXX, which covers both mic mute (GPIO0)
and speaker mute (NID 0x1a) LEDs.
Use spec->no_shutup_pins instead of a custom shutup hook, as suggested
by Takashi Iwai.
Fixes: e711ebfadc9a ("ALSA: hda/realtek: Add quirk for HP Laptop 15-fd0039nt")
Tested-by: Habil Eren Türker <habilerenturker@hotmail.com>
Signed-off-by: Habil Eren Türker <habilerenturker@hotmail.com>
---
sound/hda/codecs/realtek/alc269.c | 51 ++++++++++++++++++++++++++-----
1 file changed, 43 insertions(+), 8 deletions(-)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 01b87267f..a2a3341c3 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -1364,14 +1364,49 @@ static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
}
-static void alc236_fixup_hp_micmute_led_only(struct hda_codec *codec,
- const struct hda_fixup *fix, int action)
+/* Patch for HP 15-fd0xxx (8BB6) Speaker Mute LED & Mic-Mute LED */
+
+static unsigned int hp_8bb6_power_filter(struct hda_codec *codec,
+ hda_nid_t nid,
+ unsigned int power_state)
+{
+ if (nid == 0x1a)
+ return AC_PWRST_D0;
+ return snd_hda_gen_path_power_filter(codec, nid, power_state);
+}
+
+static int hp_8bb6_speaker_mute_led_set(struct led_classdev *led_cdev,
+ enum led_brightness brightness)
+{
+ struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
+ unsigned int val = (brightness == LED_OFF) ? PIN_IN : PIN_VREF100;
+ snd_hda_set_pin_ctl_cache(codec, 0x1a, val);
+ return 0;
+}
+
+static void alc236_fixup_hp_15_fd0xxx(struct hda_codec *codec,
+ const struct hda_fixup *fix,
+ int action)
{
struct alc_spec *spec = codec->spec;
- if (action == HDA_FIXUP_ACT_PRE_PROBE)
+ switch (action) {
+ case HDA_FIXUP_ACT_PRE_PROBE:
spec->micmute_led_polarity = 1;
- alc_fixup_hp_gpio_led(codec, action, 0x00, 0x01);
+ alc_fixup_hp_gpio_led(codec, action, 0x00, 0x01);
+
+ spec->mute_led_polarity = 0;
+ snd_hda_gen_add_mute_led_cdev(codec, hp_8bb6_speaker_mute_led_set);
+
+ codec->power_filter = hp_8bb6_power_filter;
+ spec->no_shutup_pins = 1;
+ break;
+
+ case HDA_FIXUP_ACT_INIT:
+ if (spec->gen.vmaster_mute.hook)
+ snd_hda_sync_vmaster_hook(&spec->gen.vmaster_mute);
+ break;
+ }
}
static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
@@ -4096,7 +4131,7 @@ enum {
ALC236_FIXUP_HP_GPIO_LED,
ALC236_FIXUP_HP_MUTE_LED,
ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
- ALC236_FIXUP_HP_MICMUTE_LED_ONLY,
+ ALC236_FIXUP_HP_15_FD0XXX,
ALC236_FIXUP_LENOVO_INV_DMIC,
ALC298_FIXUP_SAMSUNG_AMP,
ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
@@ -5839,9 +5874,9 @@ static const struct hda_fixup alc269_fixups[] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc236_fixup_hp_mute_led_micmute_gpio,
},
- [ALC236_FIXUP_HP_MICMUTE_LED_ONLY] = {
+ [ALC236_FIXUP_HP_15_FD0XXX] = {
.type = HDA_FIXUP_FUNC,
- .v.func = alc236_fixup_hp_micmute_led_only,
+ .v.func = alc236_fixup_hp_15_fd0xxx,
},
[ALC236_FIXUP_LENOVO_INV_DMIC] = {
.type = HDA_FIXUP_FUNC,
@@ -7345,7 +7380,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
SND_PCI_QUIRK(0x103c, 0x8bb3, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8bb4, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
- SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_MICMUTE_LED_ONLY),
+ SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_15_FD0XXX),
SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
--
2.47.3
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt
2026-08-24 9:42 Habil Eren Türker
@ 2026-08-25 7:58 ` Takashi Iwai
0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2026-08-25 7:58 UTC (permalink / raw)
To: "Habil Eren Türker"
Cc: perex, tiwai, alsa-devel, linux-sound, Habil Eren Türker
On Mon, 24 Aug 2026 11:42:28 +0200,
Habil Eren Türker wrote:
>
> HP Laptop 15-fd0039nt (SSID 103c:8bb6) needs a quirk to control the
> speaker mute LED via VREF100 on NID 0x1a (active-high).
>
> This patch replaces the previous ALC236_FIXUP_HP_MICMUTE_LED_ONLY
> with ALC236_FIXUP_HP_15_FD0XXX, which covers both mic mute (GPIO0)
> and speaker mute (NID 0x1a) LEDs.
>
> Use spec->no_shutup_pins instead of a custom shutup hook, as suggested
> by Takashi Iwai.
>
> Fixes: e711ebfadc9a ("ALSA: hda/realtek: Add quirk for HP Laptop 15-fd0039nt")
> Tested-by: Habil Eren Türker <habilerenturker@hotmail.com>
> Signed-off-by: Habil Eren Türker <habilerenturker@hotmail.com>
> ---
> sound/hda/codecs/realtek/alc269.c | 51 ++++++++++++++++++++++++++-----
> 1 file changed, 43 insertions(+), 8 deletions(-)
>
> diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
> index 01b87267f..a2a3341c3 100644
> --- a/sound/hda/codecs/realtek/alc269.c
> +++ b/sound/hda/codecs/realtek/alc269.c
> @@ -1364,14 +1364,49 @@ static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
> alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
> }
>
> -static void alc236_fixup_hp_micmute_led_only(struct hda_codec *codec,
> - const struct hda_fixup *fix, int action)
> +/* Patch for HP 15-fd0xxx (8BB6) Speaker Mute LED & Mic-Mute LED */
> +
> +static unsigned int hp_8bb6_power_filter(struct hda_codec *codec,
> + hda_nid_t nid,
> + unsigned int power_state)
> +{
> + if (nid == 0x1a)
> + return AC_PWRST_D0;
> + return snd_hda_gen_path_power_filter(codec, nid, power_state);
> +}
Better to give a bit more comment about this power filter, as it's not
clear why keeping the power of NID 0x1a.
Also, the patch contained trailing whitespaces.
Please run scripts/checkpatch.pl before resubmission.
thanks,
Takashi
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-25 11:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-25 8:40 [PATCH] ALSA: hda/realtek: Fix speaker mute LED for HP Laptop 15-fd0039nt Habil Eren Türker
2026-08-25 11:04 ` Takashi Iwai
-- strict thread matches above, loose matches on Subject: below --
2026-08-24 9:42 Habil Eren Türker
2026-08-25 7:58 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox