From: Cristian Verde <verde.cristian2005@gmail.com>
To: perex@perex.cz, tiwai@suse.com
Cc: alsa-devel@alsa-project.org, linux-sound@vger.kernel.org
Subject: [PATCH] ALSA: hda/realtek: Add bass speaker quirk for Lenovo Yoga Pro 7 14IRH8
Date: Thu, 10 Sep 2026 19:42:51 +0200 [thread overview]
Message-ID: <20260910174251.22302-1-verde.cristian2005@gmail.com> (raw)
The Lenovo Yoga Pro 7 14IRH8 suffers from missing bass speaker output and
broken volume scaling (5% volume plays as loud as 100%). The system shares
the PCI SSID 0x17aa:0x3852 with the older Lenovo Yoga 7 14ITL5, causing the
ALSA driver to mistakenly match on the PCI subsystem ID and apply
ALC287_FIXUP_YOGA7_14ITL_SPEAKERS. That quirk only powers on the amplifier
without routing the 4-speaker DAC pins.
Add a fixup helper that disambiguates models by checking the HDA codec
subsystem ID (codec->core.subsystem_id). When the Yoga Pro 7 14IRH8's codec
SSID (0x17aa:0x38b1) is detected, apply ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN,
which properly configures pin 0x17 as a speaker output and hooks it to the DAC
volume controls. Fall back to ALC287_FIXUP_YOGA7_14ITL_SPEAKERS for older
hardware sharing 0x3852.
Signed-off-by: Cristian Verde <verde.cristian2005@gmail.com>
---
sound/hda/codecs/realtek/alc269.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 5b385a82e..e469b45ac 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -4077,6 +4077,7 @@ enum {
ALC298_FIXUP_LENOVO_C940_DUET7,
ALC287_FIXUP_LENOVO_YOGA_BOOK_9I,
ALC287_FIXUP_LENOVO_YOGA_PRO7,
+ ALC287_FIXUP_YOGA7_14ITL_PRO7,
ALC287_FIXUP_13S_GEN2_SPEAKERS,
ALC256_FIXUP_SET_COEF_DEFAULTS,
ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
@@ -4192,6 +4193,25 @@ static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
__snd_hda_apply_fixup(codec, id, action, 0);
}
+/* A special fixup for Lenovo Yoga Pro 7 14IRH8 and Yoga 7 14ITL5
+ * both have the very same PCI SSID and vendor ID, so we need to
+ * apply different fixups depending on the subsystem ID
+ */
+static void alc287_fixup_lenovo_yoga7_pro7(struct hda_codec *codec,
+ const struct hda_fixup *fix,
+ int action)
+{
+ int id;
+
+ if (codec->core.subsystem_id == 0x17aa38b1)
+ id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN;
+ else
+ id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS;
+
+ __snd_hda_apply_fixup(codec, id, action, 0);
+}
+
+
static const struct hda_fixup alc269_fixups[] = {
[ALC269_FIXUP_GPIO2] = {
.type = HDA_FIXUP_FUNC,
@@ -6439,6 +6459,10 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true,
.chain_id = ALC287_FIXUP_CS35L41_I2C_2,
},
+ [ALC287_FIXUP_YOGA7_14ITL_PRO7] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc287_fixup_lenovo_yoga7_pro7,
+ },
[ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc295_fixup_dell_inspiron_top_speakers,
@@ -7722,7 +7746,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
HDA_CODEC_QUIRK(0x17aa, 0x38cf, "Lenovo Yoga Pro 7 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
SND_PCI_QUIRK(0x17aa, 0x3847, "Legion 7 16ACHG6", ALC287_FIXUP_LEGION_16ACHG6),
SND_PCI_QUIRK(0x17aa, 0x384a, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
- SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
+ SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5 / Pro 7 14IRH8", ALC287_FIXUP_YOGA7_14ITL_PRO7),
SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
SND_PCI_QUIRK(0x17aa, 0x3855, "Legion 7 16ITHG6", ALC287_FIXUP_LEGION_16ITHG6),
SND_PCI_QUIRK(0x17aa, 0x3865, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
@@ -7750,6 +7774,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x17aa, 0x38a8, "Y780P AMD VECO dual", ALC287_FIXUP_TAS2781_I2C),
SND_PCI_QUIRK(0x17aa, 0x38a9, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
SND_PCI_QUIRK(0x17aa, 0x38ab, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
+ SND_PCI_QUIRK(0x17aa, 0x38b1, "Lenovo Yoga Pro 7 14IRH8", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
SND_PCI_QUIRK(0x17aa, 0x38b4, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
HDA_CODEC_QUIRK(0x17aa, 0x391c, "Lenovo Yoga 7 2-in-1 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
HDA_CODEC_QUIRK(0x17aa, 0x391d, "Lenovo Yoga 7 2-in-1 16AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
--
2.43.0
next reply other threads:[~2026-09-16 6:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-10 17:42 Cristian Verde [this message]
2026-09-10 18:09 ` [PATCH] ALSA: hda/realtek: Add bass speaker quirk for Lenovo Yoga Pro 7 14IRH8 Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260910174251.22302-1-verde.cristian2005@gmail.com \
--to=verde.cristian2005@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox