diff mbox series

ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14ARP8

Message ID a9d59988-da7f-4a53-8df1-3b6a7e6d24b7@gmail.com (mailing list archive)
State Superseded
Headers show
Series ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14ARP8 | expand

Commit Message

Gergely Meszaros June 11, 2024, 6:36 p.m. UTC
Similarly to other Lenovo laptops these also have a dual speaker
setup with a shared amplifier.
The model also seems to have a conflicting PCI SSID with the codec SSID for
the Legion Y9000X 2022 IAH7. Only tested on the Yoga Pro 7, as I don't have
access to the other laptop.

Signed-off-by: Gergely Meszaros <meszaros.gergely97@gmail.com>
---
  sound/pci/hda/patch_realtek.c | 28 +++++++++++++++++++++++++++-
  1 file changed, 27 insertions(+), 1 deletion(-)

Comments

Gergo Koteles June 12, 2024, 2:08 p.m. UTC | #1
Hi Gergely,

On Tue, 2024-06-11 at 20:36 +0200, Gergely Mészáros wrote:
> +/* Similar to above the Lenovo Yoga Pro 7 14ARP8 PCI SSID matches the codec SSID of the
> +   Legion Y9000X 2022 IAH7.*/
> +static void alc287_fixup_yoga_pro_7_14arp8(struct hda_codec *codec,
> +					   const struct hda_fixup *fix,
> +					   int action)

Can this shared function and fixup be renamed to include Legion IAH7?

> +{
> +	int id;
> +
> +	if (codec->core.subsystem_id == 0x17aa386e)
> +		id = ALC287_FIXUP_CS35L41_I2C_2; /* Legion Y9000X 2022 IAH7 */
> +	else
> +		id = ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2; /* Yoga Pro 7 14ARP8 */


Does the amplifier work also with ALC285_FIXUP_THINKPAD_HEADSET_JACK?
If so, ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2 is unnecessary.

Best regards,
Gergo
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index aa76d1c88589..ddafe533ec11 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -7520,6 +7520,8 @@  enum {
  	ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1,
  	ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318,
  	ALC256_FIXUP_CHROME_BOOK,
+	ALC287_FIXUP_YOGA_PRO_7_14ARP8,
+	ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2,
  };
  
  /* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -7559,6 +7561,21 @@  static void alc287_fixup_lenovo_14irp8_duetitl(struct hda_codec *codec,
  	__snd_hda_apply_fixup(codec, id, action, 0);
  }
  
+/* Similar to above the Lenovo Yoga Pro 7 14ARP8 PCI SSID matches the codec SSID of the
+   Legion Y9000X 2022 IAH7.*/
+static void alc287_fixup_yoga_pro_7_14arp8(struct hda_codec *codec,
+					   const struct hda_fixup *fix,
+					   int action)
+{
+	int id;
+
+	if (codec->core.subsystem_id == 0x17aa386e)
+		id = ALC287_FIXUP_CS35L41_I2C_2; /* Legion Y9000X 2022 IAH7 */
+	else
+		id = ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2; /* Yoga Pro 7 14ARP8 */
+	__snd_hda_apply_fixup(codec, id, action, 0);
+}
+
  /* Another hilarious PCI SSID conflict with Lenovo Legion Pro 7 16ARX8H (with
   * TAS2781 codec) and Legion 7i 16IAX7 (with CS35L41 codec);
   * we apply a corresponding fixup depending on the codec SSID instead
@@ -9658,6 +9675,14 @@  static const struct hda_fixup alc269_fixups[] = {
  		.chained = true,
  		.chain_id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK,
  	},
+	[ALC287_FIXUP_YOGA_PRO_7_14ARP8] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc287_fixup_yoga_pro_7_14arp8,
+	},
+	[ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc289_fixup_asus_ga401,
+	},
  	[ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN] = {
  		.type = HDA_FIXUP_FUNC,
  		.v.func = alc287_fixup_yoga9_14iap7_bass_spk_pin,
@@ -10516,7 +10541,7 @@  static const struct snd_pci_quirk alc269_fixup_tbl[] = {
  	SND_PCI_QUIRK(0x17aa, 0x3865, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
  	SND_PCI_QUIRK(0x17aa, 0x3866, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
  	SND_PCI_QUIRK(0x17aa, 0x3869, "Lenovo Yoga7 14IAL7", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
-	SND_PCI_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7", ALC287_FIXUP_CS35L41_I2C_2),
+	SND_PCI_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7 / Yoga Pro 7 14ARP8",  ALC287_FIXUP_YOGA_PRO_7_14ARP8),
  	SND_PCI_QUIRK(0x17aa, 0x386f, "Legion Pro 7/7i", ALC287_FIXUP_LENOVO_LEGION_7),
  	SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
  	SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
@@ -10791,6 +10816,7 @@  static const struct hda_model_fixup alc269_fixup_models[] = {
  	{.id = ALC285_FIXUP_HP_ENVY_X360, .name = "alc285-hp-envy-x360"},
  	{.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"},
  	{.id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN, .name = "alc287-yoga9-bass-spk-pin"},
+	{.id = ALC287_FIXUP_YOGA_PRO_7_14ARP8_BOTH_SPK_TO_DAC2, .name = "alc287-yoga-pro-7-both-spk-to-dac2"},
  	{.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"},
  	{.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"},
  	{.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"},