Skip to content

Commit b3ebb00

Browse files
committed
ALSA: hda/conexant: Fix conflicting quirk for System76 Pangolin
We received a regression report for System76 Pangolin (pang14) due to the recent fix for Tuxedo Sirius devices to support the top speaker. The reason was the conflicting PCI SSID, as often seen. As a workaround, now the codec SSID is checked and the quirk is applied conditionally only to Sirius devices. Fixes: 4178d78 ("ALSA: hda/conexant: Add pincfg quirk to enable top speakers on Sirius devices") Reported-by: Christian Heusel <christian@heusel.eu> Reported-by: Jerry <jerryluo225@gmail.com> Closes: https://lore.kernel.org/c930b6a6-64e5-498f-b65a-1cd5e0a1d733@heusel.eu Link: https://patch.msgid.link/20241004082602.29016-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 703235a commit b3ebb00

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

sound/pci/hda/patch_conexant.c

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,23 @@ static const struct hda_pintbl cxt_pincfg_sws_js201d[] = {
816816
{}
817817
};
818818

819+
/* pincfg quirk for Tuxedo Sirius;
820+
* unfortunately the (PCI) SSID conflicts with System76 Pangolin pang14,
821+
* which has incompatible pin setup, so we check the codec SSID (luckily
822+
* different one!) and conditionally apply the quirk here
823+
*/
824+
static void cxt_fixup_sirius_top_speaker(struct hda_codec *codec,
825+
const struct hda_fixup *fix,
826+
int action)
827+
{
828+
/* ignore for incorrectly picked-up pang14 */
829+
if (codec->core.subsystem_id == 0x278212b3)
830+
return;
831+
/* set up the top speaker pin */
832+
if (action == HDA_FIXUP_ACT_PRE_PROBE)
833+
snd_hda_codec_set_pincfg(codec, 0x1d, 0x82170111);
834+
}
835+
819836
static const struct hda_fixup cxt_fixups[] = {
820837
[CXT_PINCFG_LENOVO_X200] = {
821838
.type = HDA_FIXUP_PINS,
@@ -976,11 +993,8 @@ static const struct hda_fixup cxt_fixups[] = {
976993
.v.pins = cxt_pincfg_sws_js201d,
977994
},
978995
[CXT_PINCFG_TOP_SPEAKER] = {
979-
.type = HDA_FIXUP_PINS,
980-
.v.pins = (const struct hda_pintbl[]) {
981-
{ 0x1d, 0x82170111 },
982-
{ }
983-
},
996+
.type = HDA_FIXUP_FUNC,
997+
.v.func = cxt_fixup_sirius_top_speaker,
984998
},
985999
};
9861000

0 commit comments

Comments
 (0)