From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp-relay-internal-1.canonical.com (smtp-relay-internal-1.canonical.com [185.125.188.123]) (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 F34082E3FE for ; Wed, 8 Jul 2026 02:48:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.123 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783478896; cv=none; b=DPNlK0wboqyOuu4I4kGIrfKeZGokixA4YEWSNsidPCOteTySZPTvOlw1dNUdgn0KNkNLT7t2p7rH4JAfOUiBUnlsVThm1k22+t47Y18Ido0pxWHDYDRgum2Wdf3pzaA2crAeOLeOpDWyona+qiF5xgkRN7VwaNVBzO1dgyCbob0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783478896; c=relaxed/simple; bh=kVWYMz8N8L500S4zpO7IKdP7R/XDAomw0TJw0GBIs2M=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fWoYeqEeybDWoh+WyZV1t0MlCckfGKKxQDO4o6Xjr8V0WfTu0bnjDf49AeVE51MfzZ1a3oAsUQpm7mZOd6oh+1ag1P1nIhPBhrqexgKtcSKW5vw3Vx+8qhWCxVk5xN8NcQoHqRht8+ZR1XoAXiaBpfvgSgeX5xCRJarp9jzHysU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (4096-bit key) header.d=canonical.com header.i=@canonical.com header.b=BN3WF/qV; arc=none smtp.client-ip=185.125.188.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (4096-bit key) header.d=canonical.com header.i=@canonical.com header.b="BN3WF/qV" Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id F0E5C3F60D for ; Wed, 8 Jul 2026 02:48:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20251003; t=1783478890; bh=q8C5A+OYF1Lfa8cDTHtioHEMlnWuGT751LMAJpYxr4A=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BN3WF/qV60F6FH2GROtU4gtwjSV4dNfDYFyfw17pe2yvdjSpwYOz5LGB993qVG5HD UyJChq0kKDlmzyiFPKd1OfJdPehh43LH7ekM8DtEM2xhuq5RT0/uP/A8hVpmWcfnXX /CakR0fFM61GHfZGIfx9IifCtIn+Ui7ZoAJeggzu3OanusxauX7o3Ter9NKUytTt5I lBkdshG1pKvaiEU2s76jobem5i8qHHTGUimyh2VttE8N++a8TZQsDJNO9EIcKeDMK4 GUNn5vUCgvh7h1a6MWDrz124reSOMaXFf/XdozOnRfNHWv8sSbFgUoLBkVM3jf/PyB GMbolyz7g+eAHSdRhUK0m/GvjZSWsKBqvb0emJJeiRFpTVpc1CEZhe7B/fUeCM3od3 5+ppeKCh97Sr/JbDaPL33AyDIkoMpWoZLq0UVGjRsRwOrQoINtZxeKRlNxggA1mjdL oYkFbSnbd/dhzDahS85vf0EDdfJYPXFJ6Y5dNhEAoIjidJ2zPJ1v64ZXYWOFkqf11l B5eGWlHELXkradPQ0K8G/xspf1/ifHNqK/ndPiBGQNtMPEm15R/yXp2GzbVy/UM25D Z4A4EFAT8O6ZJdoa8NkXA8A3pn4MbJfyc/nHUBmzY/2zHod6MooSdXSvtfeZTaWuEu pKQgmW5oj9HZ9WrTMy9Cv0h0= Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc640dfde3so3515065ad.1 for ; Tue, 07 Jul 2026 19:48:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783478889; x=1784083689; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=q8C5A+OYF1Lfa8cDTHtioHEMlnWuGT751LMAJpYxr4A=; b=XBVFSR+SpwLjPcecsuZQzPy3MvUvtOFVM+3aHKW1Y6Uqm+WijoU9V3E9k2VCpM+QQb LHISIdG2/OmjESwCU2tKr9BhLTOrV/kBzgaTMCmj+O1KZZqBimU66wsFBUREv4yh7nPH mkKT/Mwyde2sQLWfYWeFOu/au1Ofa21/gHIELLuokVSKNvJPh/ofuIFCRdzjD9yzc2GL yBtjTiA/fQimdMXESe+GqprnCloIQCN4vmsL8LxDcxlvwToynj+aCRZG/cCFwIxUua2C 2GSXiMMsMRPboXF2dGjlFJs7ZoZdM+WVSo1UwxHm4ZDMXTiISXL85RI8InWptsnQlFw8 xC+w== X-Forwarded-Encrypted: i=1; AHgh+RqrWvJucpWK8XF0Jo6c5uML/40fOd5IcwsI0YQo5lxfEW3/jKkAncnO3Q/Vr23nFeSWJTFb17bw5LMIBxs=@vger.kernel.org X-Gm-Message-State: AOJu0YzTTF4iAviwan1G3qqmE9+jCjlZTaobX9wyQp/9MJD4bmWy5Vi8 I4/sJE/MbVinqmZyM+h0EjDb8xzRSNrcIeKjh6xJH5fNy3QF9VPSbWoAUPc9HPyrYfihFw5jTQB G/7OfpKsrIwzkKllPuIynGaxtR3WjJwhFebEtacjQWMVpMWI2E2wAjXwaLPpCarIIuP0+ApOk/z 4qSB9pjg== X-Gm-Gg: AfdE7cluYn122av4q4j7aSUg+SXuwRwnDuMsJUsc1cZwFMbJ1sCGhWsCiRjByYHB+Zj 90g8qgClp4WgAJFTxGKKpzkldnqnlOw6eUzrX6QC126nlXsr2IWRFdqUC8vjxJirq/Ecs92vOyP rcUli2Xn5hRSL9T8IFbj5QrUb6WODnOeA59nCK0eSqeNxLDLbNj+P6j56b7I49kvFL8C1CkV9jp UcVUefl5mDn006lnC4sV4rkb+mKo17uYN6Y8Awk0fm2QCoGi3CdI1Kr9lgJD6TXof3f6zSjWncO H58En+YkSyR2+N70AeJagVXxHkGjuFA3KRTqXREVtZuUjsMUC+N+t7xm78AfU8hwwbxBb72YYZO vXIPG36ZAibxSJ4SKC/mUL/LsnNMerfp5l6uD5x24bb7bgCGd2w64OA== X-Received: by 2002:a17:902:ce0d:b0:2c9:b8b7:5d1c with SMTP id d9443c01a7336-2ccea3b5089mr6317605ad.16.1783478889358; Tue, 07 Jul 2026 19:48:09 -0700 (PDT) X-Received: by 2002:a17:902:ce0d:b0:2c9:b8b7:5d1c with SMTP id d9443c01a7336-2ccea3b5089mr6317325ad.16.1783478888849; Tue, 07 Jul 2026 19:48:08 -0700 (PDT) Received: from localhost.. (118-163-61-247.hinet-ip.hinet.net. [118.163.61.247]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9bdb9a3sm20282265ad.13.2026.07.07.19.48.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 19:48:08 -0700 (PDT) From: Chris Chiu To: tiwai@suse.com, kailang@realtek.com Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Chris Chiu Subject: [PATCH] ALSA: hda/realtek: Add inverted LED quirk for HP ZBook 8 G2a Date: Wed, 8 Jul 2026 02:47:57 +0000 Message-ID: <20260708024757.2400766-1-chris.chiu@canonical.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit HP ZBook 8 G2a 14 and 16 (SSIDs 0x103c:0x8f94 and 0x103c:0x8f95) require special handling for the speaker mute LED with inverted behavior compared to the existing ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED. Add a new dedicated quirk ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED_INVERTED to address the inverted speaker mute led issue. This ensures the LED behaves correctly on the new HP ZBook models. Signed-off-by: Chris Chiu --- sound/hda/codecs/realtek/alc269.c | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c index b26ed9c1f09f..07f5adce075a 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -3776,6 +3776,15 @@ static void alc245_hp_spk_mute_led_update(void *private_data, int enabled) alc_update_coef_idx(codec, 0x0b, 0x0c, val); } +static void alc245_hp_spk_mute_led_update_inverted(void *private_data, int enabled) +{ + struct hda_codec *codec = private_data; + unsigned int val; + + val = enabled ? 0x04 : 0x08; /* inverted: 0x04 led off, 0x08 led on */ + alc_update_coef_idx(codec, 0x0b, 0x0c, val); +} + /* JD2: mute led GPIO3: micmute led */ static void alc245_tas2781_i2c_hp_fixup_muteled(struct hda_codec *codec, const struct hda_fixup *fix, int action) @@ -3804,6 +3813,34 @@ static void alc245_tas2781_i2c_hp_fixup_muteled(struct hda_codec *codec, alc245_fixup_hp_mute_led_coefbit(codec, fix, action); alc285_fixup_hp_coef_micmute_led(codec, fix, action); } + +static void alc245_tas2781_i2c_hp_fixup_muteled_inverted(struct hda_codec *codec, +const struct hda_fixup *fix, int action) +{ + struct alc_spec *spec = codec->spec; + hda_nid_t hp_pin = alc_get_hp_pin(spec); + static const hda_nid_t conn[] = { 0x02 }; + + switch (action) { + case HDA_FIXUP_ACT_PRE_PROBE: + if (!hp_pin) { + spec->gen.vmaster_mute.hook = alc245_hp_spk_mute_led_update_inverted; + spec->gen.vmaster_mute_led = 1; + } + spec->gen.auto_mute_via_amp = 1; + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn); + break; + case HDA_FIXUP_ACT_INIT: + if (!hp_pin) + alc245_hp_spk_mute_led_update_inverted(codec, !spec->gen.master_mute); + break; + } + + tas2781_fixup_txnw_i2c(codec, fix, action); + if (hp_pin) + alc245_fixup_hp_mute_led_coefbit(codec, fix, action); + alc285_fixup_hp_coef_micmute_led(codec, fix, action); +} /* * Clear COEF 0x0d (PCBEEP passthrough) bit 0x40 where BIOS sets it wrongly * at PM resume @@ -4164,6 +4201,7 @@ enum { ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE, ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED, ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED, + ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED_INVERTED, ALC288_FIXUP_SURFACE_SWAP_DACS, ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO, ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY, @@ -6134,6 +6172,10 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK, }, + [ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED_INVERTED] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc245_tas2781_i2c_hp_fixup_muteled_inverted, + }, [ALC287_FIXUP_LENOVO_YOGA_PRO7] = { .type = HDA_FIXUP_FUNC, /* Reuse the DAC routing selected for ThinkPad X1 Gen7 */ @@ -7361,6 +7403,8 @@ static const struct hda_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x103c, 0x8f42, "HP ZBook 8 G2a 14W", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED), SND_PCI_QUIRK(0x103c, 0x8f57, "HP Trekker G7JC", ALC287_FIXUP_CS35L41_I2C_2), SND_PCI_QUIRK(0x103c, 0x8f62, "HP ZBook 8 G2a 16W", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED), + SND_PCI_QUIRK(0x103c, 0x8f94, "HP ZBook 8 G2a 14", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED_INVERTED), + SND_PCI_QUIRK(0x103c, 0x8f95, "HP ZBook 8 G2a 16", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED_INVERTED), SND_PCI_QUIRK(0x1043, 0x1024, "ASUS Zephyrus G14 2025", ALC285_FIXUP_ASUS_GA403U_HEADSET_MIC), SND_PCI_QUIRK(0x1043, 0x1032, "ASUS VivoBook X513EA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1043, 0x1034, "ASUS GU605C", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1), -- 2.43.0