* Enable Mute LED for Lenovo platform
@ 2025-12-22 9:33 Kailang
2025-12-23 9:49 ` Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: Kailang @ 2025-12-22 9:33 UTC (permalink / raw)
To: Takashi Iwai (tiwai@suse.de)
Cc: (alsa-devel@alsa-project.org), linux-sound@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 117 bytes --]
Hi Takashi,
Attach patch was for enable mute led functions of the Lenovo platform.
Many Thanks.
BR,
Kailang
[-- Attachment #2: 0000-alc233-lenovo-M90-GEN5-mute-key-v4.patch --]
[-- Type: application/octet-stream, Size: 4090 bytes --]
From 1c6cf4a29bedbe2c44427abed0996b1c0a678009 Mon Sep 17 00:00:00 2001
From: Kailang Yang <kailang@realtek.com>
Date: Mon, 22 Dec 2025 17:20:06 +0800
Subject: [PATCH] ALSA: hda/realtek - Enable Mute LED for Lenovo platform
Enable SPK Mute Led and Mic Mute Led for Lenovo platform.
Priority: P1
Signed-off-by: Kailang Yang <kailang@realtek.com>
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 9510aa2f1bda..f488d952024a 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -1616,6 +1616,20 @@ static void alc295_fixup_hp_mute_led_coefbit11(struct hda_codec *codec,
}
}
+static void alc233_fixup_lenovo_coef_micmute_led(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ struct alc_spec *spec = codec->spec;
+
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ spec->mic_led_coef.idx = 0x10;
+ spec->mic_led_coef.mask = 1 << 13;
+ spec->mic_led_coef.on = 0;
+ spec->mic_led_coef.off = 1 << 13;
+ snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
+ }
+}
+
static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
@@ -1905,6 +1919,38 @@ static void alc280_fixup_hp_gpio2_mic_hotkey(struct hda_codec *codec,
spec->kb_dev = NULL;
}
}
+/* GPIO2 = mic mute hotkey
+ * GPIO3 = mic mute LED
+ */
+static void alc233_fixup_lenovo_gpio2_mic_hotkey(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ struct alc_spec *spec = codec->spec;
+
+ alc233_fixup_lenovo_coef_micmute_led(codec, fix, action);
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ alc_update_coef_idx(codec, 0x10, 1<<2, 1<<2);
+ if (alc_register_micmute_input_device(codec) != 0)
+ return;
+
+ spec->gpio_mask |= 0x04;
+ spec->gpio_dir |= 0x0;
+ snd_hda_codec_write_cache(codec, codec->core.afg, 0,
+ AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK, 0x04);
+ snd_hda_jack_detect_enable_callback(codec, codec->core.afg,
+ gpio2_mic_hotkey_event);
+ return;
+ }
+
+ if (!spec->kb_dev)
+ return;
+
+ switch (action) {
+ case HDA_FIXUP_ACT_FREE:
+ input_unregister_device(spec->kb_dev);
+ spec->kb_dev = NULL;
+ }
+}
/* Line2 = mic mute hotkey
* GPIO2 = mic mute LED
@@ -3791,6 +3837,7 @@ enum {
ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED,
ALC288_FIXUP_SURFACE_SWAP_DACS,
ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO,
+ ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY,
};
/* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -6256,6 +6303,10 @@ static const struct hda_fixup alc269_fixups[] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc288_fixup_surface_swap_dacs,
},
+ [ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc233_fixup_lenovo_gpio2_mic_hotkey,
+ },
};
static const struct hda_quirk alc269_fixup_tbl[] = {
@@ -7151,7 +7202,12 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x17aa, 0x3176, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
SND_PCI_QUIRK(0x17aa, 0x3178, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
SND_PCI_QUIRK(0x17aa, 0x31af, "ThinkCentre Station", ALC623_FIXUP_LENOVO_THINKSTATION_P340),
+ SND_PCI_QUIRK(0x17aa, 0x3341, "Lenovo ThinkCentre M90 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
+ SND_PCI_QUIRK(0x17aa, 0x3342, "Lenovo ThinkCentre M90 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
+ SND_PCI_QUIRK(0x17aa, 0x3343, "Lenovo ThinkCentre M70 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
+ SND_PCI_QUIRK(0x17aa, 0x3344, "Lenovo ThinkCentre M70 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
SND_PCI_QUIRK(0x17aa, 0x334b, "Lenovo ThinkCentre M70 Gen5", ALC283_FIXUP_HEADSET_MIC),
+ SND_PCI_QUIRK(0x17aa, 0x334f, "Lenovo ThinkCentre M90a Gen5", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
SND_PCI_QUIRK(0x17aa, 0x3384, "ThinkCentre M90a PRO", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
SND_PCI_QUIRK(0x17aa, 0x3386, "ThinkCentre M90a Gen6", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
SND_PCI_QUIRK(0x17aa, 0x3387, "ThinkCentre M70a Gen6", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: Enable Mute LED for Lenovo platform
2025-12-22 9:33 Enable Mute LED for Lenovo platform Kailang
@ 2025-12-23 9:49 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2025-12-23 9:49 UTC (permalink / raw)
To: Kailang; +Cc: (alsa-devel@alsa-project.org), linux-sound@vger.kernel.org
On Mon, 22 Dec 2025 10:33:44 +0100,
Kailang wrote:
>
> Hi Takashi,
>
> Attach patch was for enable mute led functions of the Lenovo platform.
> Many Thanks.
Applied now to for-next branch.
thanks,
Takashi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-23 9:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-22 9:33 Enable Mute LED for Lenovo platform Kailang
2025-12-23 9:49 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox