All of lore.kernel.org
 help / color / mirror / Atom feed
* How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
@ 2022-06-13  7:54 Hans de Goede
  2022-06-13  8:28 ` Takashi Iwai
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2022-06-13  7:54 UTC (permalink / raw)
  To: alsa-devel; +Cc: nikitashvets

Hi All,

There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
for another Lenovo laptop using the same  PCI subsys vend + prod ids.

For more details see:
https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio

So I guess this means that we need to add a way to also include a DMI match
for SND_PCI_QUIRKs ?

Maybe add a:

const struct dmi_systemid *dmi_ids;

member to struct snd_pci_quirk and a new
SND_PCI_QUIRK_DMI macro to set this?

Regards,

Hans


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
  2022-06-13  7:54 How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids? Hans de Goede
@ 2022-06-13  8:28 ` Takashi Iwai
  2022-06-13  8:46   ` Hans de Goede
  0 siblings, 1 reply; 6+ messages in thread
From: Takashi Iwai @ 2022-06-13  8:28 UTC (permalink / raw)
  To: Hans de Goede; +Cc: nikitashvets, alsa-devel

On Mon, 13 Jun 2022 09:54:47 +0200,
Hans de Goede wrote:
> 
> Hi All,
> 
> There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
> requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
> for another Lenovo laptop using the same  PCI subsys vend + prod ids.
> 
> For more details see:
> https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio
> 
> So I guess this means that we need to add a way to also include a DMI match
> for SND_PCI_QUIRKs ?
> 
> Maybe add a:
> 
> const struct dmi_systemid *dmi_ids;
> 
> member to struct snd_pci_quirk and a new
> SND_PCI_QUIRK_DMI macro to set this?

Do both machines have the very same codec?  I couldn't find
alsa-info.sh output for Duet 7, but at least, C940 seems with ALC298
(0x10ec0298), judging from
  https://bugzilla.kernel.org/show_bug.cgi?id=205755
If Duet 7 has a different codec (e.g. ALC287 0x10ec0287), we can
distinguish from that.


Takashi

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
  2022-06-13  8:28 ` Takashi Iwai
@ 2022-06-13  8:46   ` Hans de Goede
  2022-06-13  9:13     ` Takashi Iwai
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2022-06-13  8:46 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: nikitashvets, alsa-devel

Hi,

On 6/13/22 10:28, Takashi Iwai wrote:
> On Mon, 13 Jun 2022 09:54:47 +0200,
> Hans de Goede wrote:
>>
>> Hi All,
>>
>> There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
>> requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
>> for another Lenovo laptop using the same  PCI subsys vend + prod ids.
>>
>> For more details see:
>> https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio
>>
>> So I guess this means that we need to add a way to also include a DMI match
>> for SND_PCI_QUIRKs ?
>>
>> Maybe add a:
>>
>> const struct dmi_systemid *dmi_ids;
>>
>> member to struct snd_pci_quirk and a new
>> SND_PCI_QUIRK_DMI macro to set this?
> 
> Do both machines have the very same codec?  I couldn't find
> alsa-info.sh output for Duet 7, but at least, C940 seems with ALC298
> (0x10ec0298), judging from
>   https://bugzilla.kernel.org/show_bug.cgi?id=205755
> If Duet 7 has a different codec (e.g. ALC287 0x10ec0287), we can
> distinguish from that.

I've just asked the reporter of this for alsa-info.sh output.

So assuming the codec is indeed different how would I go about
fixing this ?

Regards,

Hans


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
  2022-06-13  8:46   ` Hans de Goede
@ 2022-06-13  9:13     ` Takashi Iwai
  2022-06-13 20:53       ` Hans de Goede
  0 siblings, 1 reply; 6+ messages in thread
From: Takashi Iwai @ 2022-06-13  9:13 UTC (permalink / raw)
  To: Hans de Goede; +Cc: nikitashvets, alsa-devel

On Mon, 13 Jun 2022 10:46:28 +0200,
Hans de Goede wrote:
> 
> Hi,
> 
> On 6/13/22 10:28, Takashi Iwai wrote:
> > On Mon, 13 Jun 2022 09:54:47 +0200,
> > Hans de Goede wrote:
> >>
> >> Hi All,
> >>
> >> There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
> >> requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
> >> for another Lenovo laptop using the same  PCI subsys vend + prod ids.
> >>
> >> For more details see:
> >> https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio
> >>
> >> So I guess this means that we need to add a way to also include a DMI match
> >> for SND_PCI_QUIRKs ?
> >>
> >> Maybe add a:
> >>
> >> const struct dmi_systemid *dmi_ids;
> >>
> >> member to struct snd_pci_quirk and a new
> >> SND_PCI_QUIRK_DMI macro to set this?
> > 
> > Do both machines have the very same codec?  I couldn't find
> > alsa-info.sh output for Duet 7, but at least, C940 seems with ALC298
> > (0x10ec0298), judging from
> >   https://bugzilla.kernel.org/show_bug.cgi?id=205755
> > If Duet 7 has a different codec (e.g. ALC287 0x10ec0287), we can
> > distinguish from that.
> 
> I've just asked the reporter of this for alsa-info.sh output.
> 
> So assuming the codec is indeed different how would I go about
> fixing this ?

It'll be something like below.


Takashi

-- 8< --
diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
index cd1db943b7e0..7c6b1fe8dfcc 100644
--- a/sound/pci/hda/hda_auto_parser.c
+++ b/sound/pci/hda/hda_auto_parser.c
@@ -819,7 +819,7 @@ static void set_pin_targets(struct hda_codec *codec,
 		snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val);
 }
 
-static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
+void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth)
 {
 	const char *modelname = codec->fixup_name;
 
@@ -829,7 +829,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
 		if (++depth > 10)
 			break;
 		if (fix->chained_before)
-			apply_fixup(codec, fix->chain_id, action, depth + 1);
+			__snd_hda_apply_fixup(codec, fix->chain_id, action, depth + 1);
 
 		switch (fix->type) {
 		case HDA_FIXUP_PINS:
@@ -870,6 +870,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
 		id = fix->chain_id;
 	}
 }
+EXPORT_SYMBOL_GPL(__snd_hda_apply_fixup);
 
 /**
  * snd_hda_apply_fixup - Apply the fixup chain with the given action
@@ -879,7 +880,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
 void snd_hda_apply_fixup(struct hda_codec *codec, int action)
 {
 	if (codec->fixup_list)
-		apply_fixup(codec, codec->fixup_id, action, 0);
+		__snd_hda_apply_fixup(codec, codec->fixup_id, action, 0);
 }
 EXPORT_SYMBOL_GPL(snd_hda_apply_fixup);
 
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
index aca592651870..682dca2057db 100644
--- a/sound/pci/hda/hda_local.h
+++ b/sound/pci/hda/hda_local.h
@@ -348,6 +348,7 @@ void snd_hda_apply_verbs(struct hda_codec *codec);
 void snd_hda_apply_pincfgs(struct hda_codec *codec,
 			   const struct hda_pintbl *cfg);
 void snd_hda_apply_fixup(struct hda_codec *codec, int action);
+void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth);
 void snd_hda_pick_fixup(struct hda_codec *codec,
 			const struct hda_model_fixup *models,
 			const struct snd_pci_quirk *quirk,
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index a1a7842e7b5f..f2b0de3aa756 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -7004,6 +7004,7 @@ enum {
 	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
 	ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
 	ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
+	ALC298_FIXUP_LENOVO_C940_DUET7,
 	ALC287_FIXUP_13S_GEN2_SPEAKERS,
 	ALC256_FIXUP_SET_COEF_DEFAULTS,
 	ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
@@ -7022,6 +7023,23 @@ enum {
 	ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE,
 };
 
+/* A special fixup for Lenovo C940 and Yoga Duet 7;
+ * both have the very same PCI SSID, and we need to apply different fixups
+ * depending on the codec ID
+ */
+static void alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
+					   const struct hda_fixup *fix,
+					   int action)
+{
+	int id;
+
+	if (codec->core.vendor_id == 0x10ec0298)
+		id = ALC298_FIXUP_LENOVO_SPK_VOLUME; /* C940 */
+	else
+		id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS; /* Duet 7 */
+	__snd_hda_apply_fixup(codec, id, action, 0);
+}
+
 static const struct hda_fixup alc269_fixups[] = {
 	[ALC269_FIXUP_GPIO2] = {
 		.type = HDA_FIXUP_FUNC,
@@ -8721,6 +8739,10 @@ static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
 	},
+	[ALC298_FIXUP_LENOVO_C940_DUET7] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc298_fixup_lenovo_c940_duet7,
+	},
 	[ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
 		.type = HDA_FIXUP_VERBS,
 		.v.verbs = (const struct hda_verb[]) {
@@ -9274,7 +9296,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, 0x3802, "Lenovo Yoga DuetITL 2021", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
 	SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
-	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940", ALC298_FIXUP_LENOVO_SPK_VOLUME),
+	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),
 	SND_PCI_QUIRK(0x17aa, 0x3820, "Yoga Duet 7 13ITL6", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
 	SND_PCI_QUIRK(0x17aa, 0x3824, "Legion Y9000X 2020", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
  2022-06-13  9:13     ` Takashi Iwai
@ 2022-06-13 20:53       ` Hans de Goede
  2022-06-14  5:34         ` Takashi Iwai
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2022-06-13 20:53 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: nikitashvets, alsa-devel

Hi,

On 6/13/22 11:13, Takashi Iwai wrote:
> On Mon, 13 Jun 2022 10:46:28 +0200,
> Hans de Goede wrote:
>>
>> Hi,
>>
>> On 6/13/22 10:28, Takashi Iwai wrote:
>>> On Mon, 13 Jun 2022 09:54:47 +0200,
>>> Hans de Goede wrote:
>>>>
>>>> Hi All,
>>>>
>>>> There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
>>>> requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
>>>> for another Lenovo laptop using the same  PCI subsys vend + prod ids.
>>>>
>>>> For more details see:
>>>> https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio
>>>>
>>>> So I guess this means that we need to add a way to also include a DMI match
>>>> for SND_PCI_QUIRKs ?
>>>>
>>>> Maybe add a:
>>>>
>>>> const struct dmi_systemid *dmi_ids;
>>>>
>>>> member to struct snd_pci_quirk and a new
>>>> SND_PCI_QUIRK_DMI macro to set this?
>>>
>>> Do both machines have the very same codec?  I couldn't find
>>> alsa-info.sh output for Duet 7, but at least, C940 seems with ALC298
>>> (0x10ec0298), judging from
>>>   https://bugzilla.kernel.org/show_bug.cgi?id=205755
>>> If Duet 7 has a different codec (e.g. ALC287 0x10ec0287), we can
>>> distinguish from that.
>>
>> I've just asked the reporter of this for alsa-info.sh output.
>>
>> So assuming the codec is indeed different how would I go about
>> fixing this ?
> 
> It'll be something like below.

Thanks.

The alsa-info.sh output for the Yoga Duet 7 is here:

http://alsa-project.org/db/?f=5500aa1b489d2ef4ee6ac3ee613f11f3ed8ecfa8

This confirms that the codec is different, so I've asked
@nikitashvets to test the below patch you suggested and
he has confirmed that this fixes things (thank you @nikitashvets).

Takashi, if you can turn this into a proper patch (-series?)
and merge it that would be great!

Regards,

Hans





> 
> 
> Takashi
> 
> -- 8< --
> diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
> index cd1db943b7e0..7c6b1fe8dfcc 100644
> --- a/sound/pci/hda/hda_auto_parser.c
> +++ b/sound/pci/hda/hda_auto_parser.c
> @@ -819,7 +819,7 @@ static void set_pin_targets(struct hda_codec *codec,
>  		snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val);
>  }
>  
> -static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
> +void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth)
>  {
>  	const char *modelname = codec->fixup_name;
>  
> @@ -829,7 +829,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
>  		if (++depth > 10)
>  			break;
>  		if (fix->chained_before)
> -			apply_fixup(codec, fix->chain_id, action, depth + 1);
> +			__snd_hda_apply_fixup(codec, fix->chain_id, action, depth + 1);
>  
>  		switch (fix->type) {
>  		case HDA_FIXUP_PINS:
> @@ -870,6 +870,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
>  		id = fix->chain_id;
>  	}
>  }
> +EXPORT_SYMBOL_GPL(__snd_hda_apply_fixup);
>  
>  /**
>   * snd_hda_apply_fixup - Apply the fixup chain with the given action
> @@ -879,7 +880,7 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
>  void snd_hda_apply_fixup(struct hda_codec *codec, int action)
>  {
>  	if (codec->fixup_list)
> -		apply_fixup(codec, codec->fixup_id, action, 0);
> +		__snd_hda_apply_fixup(codec, codec->fixup_id, action, 0);
>  }
>  EXPORT_SYMBOL_GPL(snd_hda_apply_fixup);
>  
> diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
> index aca592651870..682dca2057db 100644
> --- a/sound/pci/hda/hda_local.h
> +++ b/sound/pci/hda/hda_local.h
> @@ -348,6 +348,7 @@ void snd_hda_apply_verbs(struct hda_codec *codec);
>  void snd_hda_apply_pincfgs(struct hda_codec *codec,
>  			   const struct hda_pintbl *cfg);
>  void snd_hda_apply_fixup(struct hda_codec *codec, int action);
> +void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth);
>  void snd_hda_pick_fixup(struct hda_codec *codec,
>  			const struct hda_model_fixup *models,
>  			const struct snd_pci_quirk *quirk,
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index a1a7842e7b5f..f2b0de3aa756 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -7004,6 +7004,7 @@ enum {
>  	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
>  	ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
>  	ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
> +	ALC298_FIXUP_LENOVO_C940_DUET7,
>  	ALC287_FIXUP_13S_GEN2_SPEAKERS,
>  	ALC256_FIXUP_SET_COEF_DEFAULTS,
>  	ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
> @@ -7022,6 +7023,23 @@ enum {
>  	ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE,
>  };
>  
> +/* A special fixup for Lenovo C940 and Yoga Duet 7;
> + * both have the very same PCI SSID, and we need to apply different fixups
> + * depending on the codec ID
> + */
> +static void alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
> +					   const struct hda_fixup *fix,
> +					   int action)
> +{
> +	int id;
> +
> +	if (codec->core.vendor_id == 0x10ec0298)
> +		id = ALC298_FIXUP_LENOVO_SPK_VOLUME; /* C940 */
> +	else
> +		id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS; /* Duet 7 */
> +	__snd_hda_apply_fixup(codec, id, action, 0);
> +}
> +
>  static const struct hda_fixup alc269_fixups[] = {
>  	[ALC269_FIXUP_GPIO2] = {
>  		.type = HDA_FIXUP_FUNC,
> @@ -8721,6 +8739,10 @@ static const struct hda_fixup alc269_fixups[] = {
>  		.chained = true,
>  		.chain_id = ALC269_FIXUP_HEADSET_MODE,
>  	},
> +	[ALC298_FIXUP_LENOVO_C940_DUET7] = {
> +		.type = HDA_FIXUP_FUNC,
> +		.v.func = alc298_fixup_lenovo_c940_duet7,
> +	},
>  	[ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
>  		.type = HDA_FIXUP_VERBS,
>  		.v.verbs = (const struct hda_verb[]) {
> @@ -9274,7 +9296,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, 0x3802, "Lenovo Yoga DuetITL 2021", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
>  	SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
> -	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940", ALC298_FIXUP_LENOVO_SPK_VOLUME),
> +	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),
>  	SND_PCI_QUIRK(0x17aa, 0x3820, "Yoga Duet 7 13ITL6", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
>  	SND_PCI_QUIRK(0x17aa, 0x3824, "Legion Y9000X 2020", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids?
  2022-06-13 20:53       ` Hans de Goede
@ 2022-06-14  5:34         ` Takashi Iwai
  0 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2022-06-14  5:34 UTC (permalink / raw)
  To: Hans de Goede; +Cc: nikitashvets, alsa-devel

On Mon, 13 Jun 2022 22:53:54 +0200,
Hans de Goede wrote:
> 
> Hi,
> 
> On 6/13/22 11:13, Takashi Iwai wrote:
> > On Mon, 13 Jun 2022 10:46:28 +0200,
> > Hans de Goede wrote:
> >>
> >> Hi,
> >>
> >> On 6/13/22 10:28, Takashi Iwai wrote:
> >>> On Mon, 13 Jun 2022 09:54:47 +0200,
> >>> Hans de Goede wrote:
> >>>>
> >>>> Hi All,
> >>>>
> >>>> There is a problem with the sound on the Lenovo Yoga Duet 7 13IML05, which
> >>>> requires a SND_PCI_QUIRK to fix. But there already is an existing quirk
> >>>> for another Lenovo laptop using the same  PCI subsys vend + prod ids.
> >>>>
> >>>> For more details see:
> >>>> https://wiki.archlinux.org/title/Lenovo_Yoga_Duet_7_13IML05#Audio
> >>>>
> >>>> So I guess this means that we need to add a way to also include a DMI match
> >>>> for SND_PCI_QUIRKs ?
> >>>>
> >>>> Maybe add a:
> >>>>
> >>>> const struct dmi_systemid *dmi_ids;
> >>>>
> >>>> member to struct snd_pci_quirk and a new
> >>>> SND_PCI_QUIRK_DMI macro to set this?
> >>>
> >>> Do both machines have the very same codec?  I couldn't find
> >>> alsa-info.sh output for Duet 7, but at least, C940 seems with ALC298
> >>> (0x10ec0298), judging from
> >>>   https://bugzilla.kernel.org/show_bug.cgi?id=205755
> >>> If Duet 7 has a different codec (e.g. ALC287 0x10ec0287), we can
> >>> distinguish from that.
> >>
> >> I've just asked the reporter of this for alsa-info.sh output.
> >>
> >> So assuming the codec is indeed different how would I go about
> >> fixing this ?
> > 
> > It'll be something like below.
> 
> Thanks.
> 
> The alsa-info.sh output for the Yoga Duet 7 is here:
> 
> http://alsa-project.org/db/?f=5500aa1b489d2ef4ee6ac3ee613f11f3ed8ecfa8
> 
> This confirms that the codec is different, so I've asked
> @nikitashvets to test the below patch you suggested and
> he has confirmed that this fixes things (thank you @nikitashvets).
> 
> Takashi, if you can turn this into a proper patch (-series?)
> and merge it that would be great!

Sure, thanks for quick testing!


Takashi

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-06-14  5:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-13  7:54 How to add 2 different SND_PCI_QUIRKs for 2 models with the same PCI subsys vend + prod ids? Hans de Goede
2022-06-13  8:28 ` Takashi Iwai
2022-06-13  8:46   ` Hans de Goede
2022-06-13  9:13     ` Takashi Iwai
2022-06-13 20:53       ` Hans de Goede
2022-06-14  5:34         ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.