]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
67634d505b653ec9f555bbd4d46142f232244dc0
[thirdparty/kernel/stable-queue.git] /
1 From c1933008679586b20437280463110c967d66f865 Mon Sep 17 00:00:00 2001
2 From: Christian Lachner <gladiac@gmail.com>
3 Date: Mon, 3 Jan 2022 15:05:17 +0100
4 Subject: ALSA: hda/realtek - Fix silent output on Gigabyte X570 Aorus Master after reboot from Windows
5
6 From: Christian Lachner <gladiac@gmail.com>
7
8 commit c1933008679586b20437280463110c967d66f865 upstream.
9
10 This patch addresses an issue where after rebooting from Windows into Linux
11 there would be no audio output.
12
13 It turns out that the Realtek Audio driver on Windows changes some coeffs
14 which are not being reset/reinitialized when rebooting the machine. As a
15 result, there is no audio output until these coeffs are being reset to
16 their initial state. This patch takes care of that by setting known-good
17 (initial) values to the coeffs.
18
19 We initially relied upon alc1220_fixup_clevo_p950() to fix some pins in the
20 connection list. However, it also sets coef 0x7 which does not need to be
21 touched. Furthermore, to prevent mixing device-specific quirks I introduced
22 a new alc1220_fixup_gb_x570() which is heavily based on
23 alc1220_fixup_clevo_p950() but does not set coeff 0x7 and fixes the coeffs
24 that are actually needed instead.
25
26 This new alc1220_fixup_gb_x570() is believed to also work for other boards,
27 like the Gigabyte X570 Aorus Extreme and the newer Gigabyte Aorus X570S
28 Master. However, as there is no way for me to test these I initially only
29 enable this new behaviour for the mainboard I have which is the Gigabyte
30 X570(non-S) Aorus Master.
31
32 I tested this patch on the 5.15 branch as well as on master and it is
33 working well for me.
34
35 BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205275
36 Signed-off-by: Christian Lachner <gladiac@gmail.com>
37 Fixes: 0d45e86d2267d ("ALSA: hda/realtek - Fix silent output on Gigabyte X570 Aorus Master")
38 Cc: <stable@vger.kernel.org>
39 Link: https://lore.kernel.org/r/20220103140517.30273-2-gladiac@gmail.com
40 Signed-off-by: Takashi Iwai <tiwai@suse.de>
41 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
42 ---
43 sound/pci/hda/patch_realtek.c | 30 +++++++++++++++++++++++++++++-
44 1 file changed, 29 insertions(+), 1 deletion(-)
45
46 --- a/sound/pci/hda/patch_realtek.c
47 +++ b/sound/pci/hda/patch_realtek.c
48 @@ -1926,6 +1926,7 @@ enum {
49 ALC887_FIXUP_ASUS_BASS,
50 ALC887_FIXUP_BASS_CHMAP,
51 ALC1220_FIXUP_GB_DUAL_CODECS,
52 + ALC1220_FIXUP_GB_X570,
53 ALC1220_FIXUP_CLEVO_P950,
54 ALC1220_FIXUP_CLEVO_PB51ED,
55 ALC1220_FIXUP_CLEVO_PB51ED_PINS,
56 @@ -2115,6 +2116,29 @@ static void alc1220_fixup_gb_dual_codecs
57 }
58 }
59
60 +static void alc1220_fixup_gb_x570(struct hda_codec *codec,
61 + const struct hda_fixup *fix,
62 + int action)
63 +{
64 + static const hda_nid_t conn1[] = { 0x0c };
65 + static const struct coef_fw gb_x570_coefs[] = {
66 + WRITE_COEF(0x1a, 0x01c1),
67 + WRITE_COEF(0x1b, 0x0202),
68 + WRITE_COEF(0x43, 0x3005),
69 + {}
70 + };
71 +
72 + switch (action) {
73 + case HDA_FIXUP_ACT_PRE_PROBE:
74 + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
75 + snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1);
76 + break;
77 + case HDA_FIXUP_ACT_INIT:
78 + alc_process_coef_fw(codec, gb_x570_coefs);
79 + break;
80 + }
81 +}
82 +
83 static void alc1220_fixup_clevo_p950(struct hda_codec *codec,
84 const struct hda_fixup *fix,
85 int action)
86 @@ -2417,6 +2441,10 @@ static const struct hda_fixup alc882_fix
87 .type = HDA_FIXUP_FUNC,
88 .v.func = alc1220_fixup_gb_dual_codecs,
89 },
90 + [ALC1220_FIXUP_GB_X570] = {
91 + .type = HDA_FIXUP_FUNC,
92 + .v.func = alc1220_fixup_gb_x570,
93 + },
94 [ALC1220_FIXUP_CLEVO_P950] = {
95 .type = HDA_FIXUP_FUNC,
96 .v.func = alc1220_fixup_clevo_p950,
97 @@ -2519,7 +2547,7 @@ static const struct snd_pci_quirk alc882
98 SND_PCI_QUIRK(0x13fe, 0x1009, "Advantech MIT-W101", ALC886_FIXUP_EAPD),
99 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
100 SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
101 - SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_CLEVO_P950),
102 + SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_GB_X570),
103 SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
104 SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
105 SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),