From nobody Fri Sep 25 06:47:20 2026 Received: from mail-24418.protonmail.ch (mail-24418.protonmail.ch [109.224.244.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E281A3D891F for ; Tue, 15 Sep 2026 17:41:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789494098; cv=none; b=sf2IYe5R7lYWweVrRKJNp7xGlAJBJd5C8sOwdZ6GLf4+JqQ+bKOf1lKMlEqJXpaYAM3Gu8HWByMoC7mVN9fCIevacSp2KyebFNsMr4m40yj3gBFAmHKO1BdU/D7O4Vwmr3yxhpplwF5a8YOqa04yNXtzzWBg+1Wc2U7/L2GnDLE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789494098; c=relaxed/simple; bh=KqrvaNzWNR8WvVI76kQ1FafPz3OW/UaLUaj6UxFIy8U=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AoAXgvtsiKDbwq9ktmFd99Slqyn2DMjo+KQuiM5fvgDyntcapaMzrWnY9W6OGzEK9CbGJHezrphREJsEVuP8k5LK68TADofds6dI3NqhbXaqelYa6V4DMX0qQ2wLOcgtDpBfphpERQrK0QaPrqDihySo3LLh368A8ZTXWUg9OJo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com; spf=pass smtp.mailfrom=protonmail.com; dkim=pass (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b=STEPWMQv; arc=none smtp.client-ip=109.224.244.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=protonmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="STEPWMQv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1789494094; x=1789753294; bh=uFvzRZC7YNb2HGF0G9uvjG4DqaPPiPsfLbWh3+PkvHQ=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=STEPWMQvy1TQ6avws+YRlAN070E55fuB+fmJA6tXvdbrcqbh+F7WwcaN0bFu5Get3 OMuPFVgydtJHHG7v+teUhFqgaXMHpqRYsIbxlWSvay3deKW8EDGnoiEoyHjZR/8mqS qhZMFE0d0xtgerlXErHgyubKimJ3JKUVjnj9rIRmplOuq93s7MEnLum3Qo1C/IOHnn YO9KubtaJdqNu1RcN8F1Zxnw8dIzho8gQ57DjOepMeGg/K/kk0vaDcWKdh045hOybS L+k/GfOKFp6PC6+hPbhITrSoxcGWkuDRBAoGNVpQY3nASMogvwOmO6Gv1/OkH+UvrB /uXefs2N+ZSMQ== Date: Tue, 15 Sep 2026 17:41:28 +0000 To: platform-driver-x86@vger.kernel.org From: patryk.dankow@protonmail.com Cc: =?utf-8?Q?Patryk_Da=C5=84k=C3=B3w?= , corentin.chary@gmail.com, luke@ljones.dev, denis.benato@linux.dev, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] platform/x86: asus-wmi: Add mute LED support Message-ID: <20260915174110.67871-2-patryk.dankow@protonmail.com> In-Reply-To: <20260915174110.67871-1-patryk.dankow@protonmail.com> References: <20260915174110.67871-1-patryk.dankow@protonmail.com> Feedback-ID: 221603438:user:proton X-Pm-Message-ID: 19d809f29e67ca9cbaf4c5d377e332c2e08e2215 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Patryk Da=C5=84k=C3=B3w Add support for WMI device 0x0004001c and register it as the platform::mute LED using the audio-mute trigger. The device ID is present in the PM3406CKA DSDT and is also used by GHelper for controlling the same LED. Tested on ASUS ExpertBook PM3406CKA. Signed-off-by: Patryk Da=C5=84k=C3=B3w Reviewed-by: Denis Benato --- drivers/platform/x86/asus-wmi.c | 26 +++++++++++++++++++++- include/linux/platform_data/x86/asus-wmi.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wm= i.c index a65090429ca7..d7c100dc2020 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -262,6 +262,7 @@ struct asus_wmi { struct led_classdev lightbar_led; int lightbar_led_wk; struct led_classdev micmute_led; + struct led_classdev mute_led; struct led_classdev camera_led; struct workqueue_struct *led_workqueue; struct work_struct tpd_led_work; @@ -2054,6 +2055,16 @@ static int micmute_led_set(struct led_classdev *led_= cdev, return err < 0 ? err : 0; } =20 +static int mute_led_set(struct led_classdev *led_cdev, + enum led_brightness brightness) +{ + int state =3D brightness !=3D LED_OFF; + int err; + + err =3D asus_wmi_set_devstate(ASUS_WMI_DEVID_MUTE_LED, state, NULL); + return err < 0 ? err : 0; +} + static enum led_brightness camera_led_get(struct led_classdev *led_cdev) { struct asus_wmi *asus; @@ -2084,6 +2095,7 @@ static void asus_wmi_led_exit(struct asus_wmi *asus) led_classdev_unregister(&asus->wlan_led); led_classdev_unregister(&asus->lightbar_led); led_classdev_unregister(&asus->micmute_led); + led_classdev_unregister(&asus->mute_led); led_classdev_unregister(&asus->camera_led); =20 if (asus->led_workqueue) @@ -2176,7 +2188,19 @@ static int asus_wmi_led_init(struct asus_wmi *asus) asus->micmute_led.default_trigger =3D "audio-micmute"; =20 rv =3D led_classdev_register(&asus->platform_device->dev, - &asus->micmute_led); + &asus->micmute_led); + if (rv) + goto error; + } + + if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MUTE_LED)) { + asus->mute_led.name =3D "platform::mute"; + asus->mute_led.max_brightness =3D 1; + asus->mute_led.brightness_set_blocking =3D mute_led_set; + asus->mute_led.default_trigger =3D "audio-mute"; + + rv =3D led_classdev_register(&asus->platform_device->dev, + &asus->mute_led); if (rv) goto error; } diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/pla= tform_data/x86/asus-wmi.h index b5ed8c83ace1..3810c4a0da23 100644 --- a/include/linux/platform_data/x86/asus-wmi.h +++ b/include/linux/platform_data/x86/asus-wmi.h @@ -54,6 +54,7 @@ #define ASUS_WMI_DEVID_LED5 0x00020015 #define ASUS_WMI_DEVID_LED6 0x00020016 #define ASUS_WMI_DEVID_MICMUTE_LED 0x00040017 +#define ASUS_WMI_DEVID_MUTE_LED 0x0004001C =20 /* Disable Camera LED */ #define ASUS_WMI_DEVID_CAMERA_LED_NEG 0x00060078 /* 0 =3D on (unused) */ --=20 2.55.0 From nobody Fri Sep 25 06:47:20 2026 Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A8414BA1D1; Tue, 15 Sep 2026 17:41:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789494116; cv=none; b=ovY6kuuJkrldaAN/rHXh5/0igl29qGlVqJy5np4C6s5NocSDMoKN3otTcpEPkrqAnWovoAuWCTcpeqXC2V7k7MLZBRG9tqrDYSTOcjcr0EUGbLKoL2uB7t3aiynGjmbTX86JJ310jzNhCDOGSuA911PMa3nCX434n7vsOzCRz3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789494116; c=relaxed/simple; bh=ckm5YErl8YuS5dn6xT8IvqcyZmcJHSVF6vVUUsLRAUc=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=G8xe4ElK0gVdR/BF72hoZi2oR4Qk+9LgK1lHPWCGB/1jgP1u+HsQmgN1oVDOWY7Zq1ekNa6A4jEeM7mkGlOg4/6mbnYxIPFHZMRA2KMdKlo9QGe8eUPLvM024OInaTv7YU4XMaVRpeXJJ4lSLUgtP1X1JRKNrd7bUgVjiI+Ug/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com; spf=pass smtp.mailfrom=protonmail.com; dkim=pass (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b=LPDkFeI2; arc=none smtp.client-ip=185.70.43.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=protonmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="LPDkFeI2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1789494105; x=1789753305; bh=2Z+GGqqxoNHhbn4tzCjicToeuuKyYpgbyqVA//Q9Hd8=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=LPDkFeI2PdKqRhs2rvoa1q23+sfpghIMI36dZ2KzQZMkp9kgoWRdPUId/Xp8zofA5 LgIAWXNsSEtOXM6NRGbyRf1/WA5em6BHpNQSndRCX9mJl/ldKrchZfSlULchQv68el i7yn1i5BYo2KNGk1+BN3FRnaM4sDQosXcv2iwnk9N0iki9v9kFiRf9+01M3MwFdmT1 6YhMn7AFkW2/iZp+iozYyWG4Uu50D33ajDX8i8OJb0zHuEOkD/9UVDdRU8fXt+a0jl Y7mlN8QW0aabbEp6kOoGx6ePApCfH9wmnqChesft/bNL5LJ9RYWlEV1E4xKIQ0IFSX C6BWfMMMxUyZQ== Date: Tue, 15 Sep 2026 17:41:36 +0000 To: linux-sound@vger.kernel.org From: patryk.dankow@protonmail.com Cc: =?utf-8?Q?Patryk_Da=C5=84k=C3=B3w?= , perex@perex.cz, tiwai@suse.com, zhangheng@kylinos.cn, dnaim@cachyos.org, damien.dagorn29@gmail.com, kailang@realtek.com, habilerenturker@hotmail.com, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] ALSA: hda/realtek: Add mute LED support for ASUS PM3406CKA Message-ID: <20260915174110.67871-3-patryk.dankow@protonmail.com> In-Reply-To: <20260915174110.67871-1-patryk.dankow@protonmail.com> References: <20260915174110.67871-1-patryk.dankow@protonmail.com> Feedback-ID: 221603438:user:proton X-Pm-Message-ID: dbf11fb6ef013e63489214ee355fda125ceae26b Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Patryk Da=C5=84k=C3=B3w Enable vmaster mute LED handling for the PM3406CKA while retaining the existing CS35L41 I2C fixup by chaining the new fixup to it. Tested on ASUS ExpertBook PM3406CKA. Signed-off-by: Patryk Da=C5=84k=C3=B3w Reviewed-by: Takashi Iwai --- sound/hda/codecs/realtek/alc269.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/a= lc269.c index 3abee617e86e..d1f0c2752624 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -180,6 +180,15 @@ static void alc_enable_headset_jack_key(struct hda_cod= ec *codec) } } =20 +static void alc_fixup_pm3406cka_vmaster_led(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ + struct alc_spec *spec =3D codec->spec; + + if (action =3D=3D HDA_FIXUP_ACT_PRE_PROBE) + spec->gen.vmaster_mute_led =3D 1; +} + static void alc_fixup_headset_jack(struct hda_codec *codec, const struct hda_fixup *fix, int action) { @@ -4383,6 +4392,7 @@ enum { ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN_HEADSET, ALC285_LENOVO_DAC_RENAME, ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1, + ALC_FIXUP_PM3406CKA_VMASTER_LED, }; =20 /* A special fixup for Lenovo C940 and Yoga Duet 7; @@ -7129,6 +7139,12 @@ static const struct hda_fixup alc269_fixups[] =3D { .chained =3D true, .chain_id =3D ALC287_FIXUP_TXNW2781_I2C, }, + [ALC_FIXUP_PM3406CKA_VMASTER_LED] =3D { + .type =3D HDA_FIXUP_FUNC, + .v.func =3D alc_fixup_pm3406cka_vmaster_led, + .chained =3D true, + .chain_id =3D ALC287_FIXUP_CS35L41_I2C_2, + }, }; =20 static const struct hda_quirk alc269_fixup_tbl[] =3D { @@ -7786,7 +7802,7 @@ static const struct hda_quirk alc269_fixup_tbl[] =3D { SND_PCI_QUIRK(0x1043, 0x13b0, "ASUS Z550SA", ALC256_FIXUP_ASUS_MIC_NO_PRE= SENCE), SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_Z= ENBOOK), SND_PCI_QUIRK(0x1043, 0x1433, "ASUS GX650PY/PZ/PV/PU/PYV/PZV/PIV/PVV", AL= C285_FIXUP_ASUS_I2C_HEADSET_MIC), - SND_PCI_QUIRK(0x1043, 0x1454, "ASUS PM3406CKA", ALC287_FIXUP_CS35L41_I2C_= 2), + SND_PCI_QUIRK(0x1043, 0x1454, "ASUS PM3406CKA", ALC_FIXUP_PM3406CKA_VMAST= ER_LED), SND_PCI_QUIRK(0x1043, 0x1460, "Asus VivoBook 15", ALC256_FIXUP_ASUS_MIC_N= O_PRESENCE), SND_PCI_QUIRK(0x1043, 0x1463, "Asus GA402X/GA402N", ALC285_FIXUP_ASUS_I2C= _HEADSET_MIC), SND_PCI_QUIRK(0x1043, 0x1473, "ASUS GU604VI/VC/VE/VG/VJ/VQ/VU/VV/VY/VZ", = ALC285_FIXUP_ASUS_HEADSET_MIC), --=20 2.55.0