Skip to content

Commit 87246ae

Browse files
gladiacgregkh
authored andcommitted
ALSA: hda/realtek - Fix silent output on Gigabyte X570 Aorus Master after reboot from Windows
commit c193300 upstream. This patch addresses an issue where after rebooting from Windows into Linux there would be no audio output. It turns out that the Realtek Audio driver on Windows changes some coeffs which are not being reset/reinitialized when rebooting the machine. As a result, there is no audio output until these coeffs are being reset to their initial state. This patch takes care of that by setting known-good (initial) values to the coeffs. We initially relied upon alc1220_fixup_clevo_p950() to fix some pins in the connection list. However, it also sets coef 0x7 which does not need to be touched. Furthermore, to prevent mixing device-specific quirks I introduced a new alc1220_fixup_gb_x570() which is heavily based on alc1220_fixup_clevo_p950() but does not set coeff 0x7 and fixes the coeffs that are actually needed instead. This new alc1220_fixup_gb_x570() is believed to also work for other boards, like the Gigabyte X570 Aorus Extreme and the newer Gigabyte Aorus X570S Master. However, as there is no way for me to test these I initially only enable this new behaviour for the mainboard I have which is the Gigabyte X570(non-S) Aorus Master. I tested this patch on the 5.15 branch as well as on master and it is working well for me. BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205275 Signed-off-by: Christian Lachner <gladiac@gmail.com> Fixes: 0d45e86 ("ALSA: hda/realtek - Fix silent output on Gigabyte X570 Aorus Master") Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20220103140517.30273-2-gladiac@gmail.com Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 9c27e51 commit 87246ae

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

sound/pci/hda/patch_realtek.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,7 @@ enum {
19361936
ALC887_FIXUP_ASUS_BASS,
19371937
ALC887_FIXUP_BASS_CHMAP,
19381938
ALC1220_FIXUP_GB_DUAL_CODECS,
1939+
ALC1220_FIXUP_GB_X570,
19391940
ALC1220_FIXUP_CLEVO_P950,
19401941
ALC1220_FIXUP_CLEVO_PB51ED,
19411942
ALC1220_FIXUP_CLEVO_PB51ED_PINS,
@@ -2125,6 +2126,29 @@ static void alc1220_fixup_gb_dual_codecs(struct hda_codec *codec,
21252126
}
21262127
}
21272128

2129+
static void alc1220_fixup_gb_x570(struct hda_codec *codec,
2130+
const struct hda_fixup *fix,
2131+
int action)
2132+
{
2133+
static const hda_nid_t conn1[] = { 0x0c };
2134+
static const struct coef_fw gb_x570_coefs[] = {
2135+
WRITE_COEF(0x1a, 0x01c1),
2136+
WRITE_COEF(0x1b, 0x0202),
2137+
WRITE_COEF(0x43, 0x3005),
2138+
{}
2139+
};
2140+
2141+
switch (action) {
2142+
case HDA_FIXUP_ACT_PRE_PROBE:
2143+
snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
2144+
snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1);
2145+
break;
2146+
case HDA_FIXUP_ACT_INIT:
2147+
alc_process_coef_fw(codec, gb_x570_coefs);
2148+
break;
2149+
}
2150+
}
2151+
21282152
static void alc1220_fixup_clevo_p950(struct hda_codec *codec,
21292153
const struct hda_fixup *fix,
21302154
int action)
@@ -2427,6 +2451,10 @@ static const struct hda_fixup alc882_fixups[] = {
24272451
.type = HDA_FIXUP_FUNC,
24282452
.v.func = alc1220_fixup_gb_dual_codecs,
24292453
},
2454+
[ALC1220_FIXUP_GB_X570] = {
2455+
.type = HDA_FIXUP_FUNC,
2456+
.v.func = alc1220_fixup_gb_x570,
2457+
},
24302458
[ALC1220_FIXUP_CLEVO_P950] = {
24312459
.type = HDA_FIXUP_FUNC,
24322460
.v.func = alc1220_fixup_clevo_p950,
@@ -2529,7 +2557,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
25292557
SND_PCI_QUIRK(0x13fe, 0x1009, "Advantech MIT-W101", ALC886_FIXUP_EAPD),
25302558
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
25312559
SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
2532-
SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_CLEVO_P950),
2560+
SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_GB_X570),
25332561
SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
25342562
SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
25352563
SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),

0 commit comments

Comments
 (0)