diff mbox series

ALSA: hda/realtek: Add special fixup for Lenovo 14IRP8

Message ID 170876716408.8.3462298005055430048.273643142@willian.wang (mailing list archive)
State Superseded
Headers show
Series ALSA: hda/realtek: Add special fixup for Lenovo 14IRP8 | expand

Commit Message

Willian Wang Feb. 24, 2024, 9:32 a.m. UTC
Lenovo Slim/Yoga Pro 9 14IRP8 requires a special fixup because there is
a collision of its PCI SSID (17aa:3802) with Lenovo Yoga DuetITL 2021
codec SSID.

Cc: stable@vger.kernel.org
Link: https://bugzilla.kernel.org/show_bug.cgi?id=208555
Link: https://lore.kernel.org/all/d5b42e483566a3815d229270abd668131a0d9f3a.camel@irl.hu
Signed-off-by: Willian Wang <git@willian.wang>
---
 sound/pci/hda/patch_realtek.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

         .type = HDA_FIXUP_FUNC,
@@ -9379,6 +9398,10 @@ static const struct hda_fixup alc269_fixups[] = {
         .type = HDA_FIXUP_FUNC,
         .v.func = alc298_fixup_lenovo_c940_duet7,
     },
+    [ALC287_FIXUP_LENOVO_14IRP8_DUETITL] = {
+        .type = HDA_FIXUP_FUNC,
+        .v.func = alc287_fixup_lenovo_14Irp8_duetitl,
+    },
     [ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
         .type = HDA_FIXUP_VERBS,
         .v.verbs = (const struct hda_verb[]) {
@@ -10247,7 +10270,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
     SND_PCI_QUIRK(0x17aa, 0x31af, "ThinkCentre Station",
ALC623_FIXUP_LENOVO_THINKSTATION_P340),
     SND_PCI_QUIRK(0x17aa, 0x334b, "Lenovo ThinkCentre M70 Gen5",
ALC283_FIXUP_HEADSET_MIC),
     SND_PCI_QUIRK(0x17aa, 0x3801, "Lenovo Yoga9 14IAP7",
ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
-    SND_PCI_QUIRK(0x17aa, 0x3802, "Lenovo Yoga DuetITL 2021",
ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
+    SND_PCI_QUIRK(0x17aa, 0x3802, "Lenovo Yoga DuetITL 2021",
ALC287_FIXUP_LENOVO_14IRP8_DUETITL),
     SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05",
ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
     SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940 / Yoga Duet 7",
ALC298_FIXUP_LENOVO_C940_DUET7),
     SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL",
ALC287_FIXUP_13S_GEN2_SPEAKERS),

Comments

Gergo Koteles Feb. 24, 2024, 11:32 a.m. UTC | #1
Hi Willian,

Looks good! Only some little things need to be addressed.

On Sat, 2024-02-24 at 06:32 -0300, Willian Wang wrote:
> Lenovo Slim/Yoga Pro 9 14IRP8 requires a special fixup because there is
> a collision of its PCI SSID (17aa:3802) with Lenovo Yoga DuetITL 2021
> codec SSID.
> 

Fixes: 3babae915f4c ("ALSA: hda/tas2781: Add tas2781 HDA driver")

> Cc: stable@vger.kernel.org
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=208555
> Link: https://lore.kernel.org/all/d5b42e483566a3815d229270abd668131a0d9f3a.camel@irl.hu
> Signed-off-by: Willian Wang <git@willian.wang>

Something ate your tabs. Please try to send the patch using git send-
email, which is the "standard" way.

There is get_maintainer.pl script that lists who might be interested in
the patch
./scripts/get_maintainer.pl --nogit --nogit-fallback --norolestats 

Send the patch to them, and cc the lists.


> ---
>  sound/pci/hda/patch_realtek.c | 25 ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 0ec1312bffd5..aa16944d5c11 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -7444,6 +7444,7 @@ enum {
>      ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
>      ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
>      ALC298_FIXUP_LENOVO_C940_DUET7,
> +    ALC287_FIXUP_LENOVO_14IRP8_DUETITL,
>      ALC287_FIXUP_13S_GEN2_SPEAKERS,
>      ALC256_FIXUP_SET_COEF_DEFAULTS,
>      ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
> @@ -7495,6 +7496,24 @@ static void
> alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
>      __snd_hda_apply_fixup(codec, id, action, 0);
>  }
> 
> +/* A special fixup for Lenovo Slim/Yoga Pro 9 14IRP8 and Yoga DuetITL 2021;
> + * 14IRP8 PCI SSID will mistakenly be matched with the DuetITL codec SSID,
> + * so we need to apply different fixup on this case. If it weren't for the
> + * PCI SSID, 14IRP8 would be matched with the correct codec SSID
> + */

I think you can mention the two codec SSIDs (0x17aa38be, 0x17aa38bf) in
the comment.

> +static void alc287_fixup_lenovo_14Irp8_duetitl(struct hda_codec *codec,

14Irp8 -> 14irp8

> +                          const struct hda_fixup *fix,
> +                          int action)
> +{
> +    int id;
> +
> +    if (codec->core.subsystem_id == 0x17aa3802)
> +        id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS; /* DuetITL */
> +    else
> +        id = ALC287_FIXUP_TAS2781_I2C; /* 14IRP8 */
> +    __snd_hda_apply_fixup(codec, id, action, 0);
> +}
> +
>  static const struct hda_fixup alc269_fixups[] = {
>      [ALC269_FIXUP_GPIO2] = {
>          .type = HDA_FIXUP_FUNC,
> @@ -9379,6 +9398,10 @@ static const struct hda_fixup alc269_fixups[] = {
>          .type = HDA_FIXUP_FUNC,
>          .v.func = alc298_fixup_lenovo_c940_duet7,
>      },
> +    [ALC287_FIXUP_LENOVO_14IRP8_DUETITL] = {
> +        .type = HDA_FIXUP_FUNC,
> +        .v.func = alc287_fixup_lenovo_14Irp8_duetitl,

14Irp8 -> 14irp8

> +    },
>      [ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
>          .type = HDA_FIXUP_VERBS,
>          .v.verbs = (const struct hda_verb[]) {
> @@ -10247,7 +10270,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>      SND_PCI_QUIRK(0x17aa, 0x31af, "ThinkCentre Station",
> ALC623_FIXUP_LENOVO_THINKSTATION_P340),
>      SND_PCI_QUIRK(0x17aa, 0x334b, "Lenovo ThinkCentre M70 Gen5",
> ALC283_FIXUP_HEADSET_MIC),
>      SND_PCI_QUIRK(0x17aa, 0x3801, "Lenovo Yoga9 14IAP7",
> ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
> -    SND_PCI_QUIRK(0x17aa, 0x3802, "Lenovo Yoga DuetITL 2021",
> ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
> +    SND_PCI_QUIRK(0x17aa, 0x3802, "Lenovo Yoga DuetITL 2021",

"Lenovo Yoga DuetITL 2021" -> "Lenovo Yoga Pro 9 14IRP8 / DuetITL 2021"

> ALC287_FIXUP_LENOVO_14IRP8_DUETITL),
>      SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05",
> ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
>      SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940 / Yoga Duet 7",
> ALC298_FIXUP_LENOVO_C940_DUET7),
>      SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL",
> ALC287_FIXUP_13S_GEN2_SPEAKERS),

The git format-patch has a -v option to indicate the patch version.
You can mark your next patch as v2.

thanks,
Gergo
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0ec1312bffd5..aa16944d5c11 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -7444,6 +7444,7 @@  enum {
     ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
     ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
     ALC298_FIXUP_LENOVO_C940_DUET7,
+    ALC287_FIXUP_LENOVO_14IRP8_DUETITL,
     ALC287_FIXUP_13S_GEN2_SPEAKERS,
     ALC256_FIXUP_SET_COEF_DEFAULTS,
     ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
@@ -7495,6 +7496,24 @@  static void
alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
     __snd_hda_apply_fixup(codec, id, action, 0);
 }

+/* A special fixup for Lenovo Slim/Yoga Pro 9 14IRP8 and Yoga DuetITL 2021;
+ * 14IRP8 PCI SSID will mistakenly be matched with the DuetITL codec SSID,
+ * so we need to apply different fixup on this case. If it weren't for the
+ * PCI SSID, 14IRP8 would be matched with the correct codec SSID
+ */
+static void alc287_fixup_lenovo_14Irp8_duetitl(struct hda_codec *codec,
+                          const struct hda_fixup *fix,
+                          int action)
+{
+    int id;
+
+    if (codec->core.subsystem_id == 0x17aa3802)
+        id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS; /* DuetITL */
+    else
+        id = ALC287_FIXUP_TAS2781_I2C; /* 14IRP8 */
+    __snd_hda_apply_fixup(codec, id, action, 0);
+}
+
 static const struct hda_fixup alc269_fixups[] = {
     [ALC269_FIXUP_GPIO2] = {