]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: hda/realtek: Add quirk for HP Pavilion All-in-One 27-ca1xxx
authorZhang Heng <zhangheng@kylinos.cn>
Tue, 21 Jul 2026 11:35:38 +0000 (19:35 +0800)
committerTakashi Iwai <tiwai@suse.de>
Wed, 22 Jul 2026 11:28:49 +0000 (13:28 +0200)
This HP All-in-One desktop (model 27-ca1xxx) uses an ALC274 codec
and has no sound from either the internal speakers or the headphone
jack. The audio output requires a combination of a specific verb
setup and GPIO configuration to become functional. Additionally,
the power_save feature must be disabled; otherwise, audible clicks
or pops occur during power state transitions.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=220694
Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
Link: https://patch.msgid.link/20260721113539.317561-1-zhangheng@kylinos.cn
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/codecs/realtek/alc269.c
sound/hda/controllers/intel.c

index 379e1458f4ac675d6c8f4f15ddf8186da5cfbd54..fcc60e64137d4a20c4f44d7748deae0c495a1b36 100644 (file)
@@ -3863,6 +3863,16 @@ static void alc288_fixup_surface_swap_dacs(struct hda_codec *codec,
        spec->gen.preferred_dacs = preferred_pairs;
 }
 
+static void alc274_fixup_hp_89e9_amp(struct hda_codec *codec,
+                                    const struct hda_fixup *fix, int action)
+{
+       if (action == HDA_FIXUP_ACT_INIT) {
+               /* need to toggle GPIO to enable the amp */
+               snd_hda_codec_set_gpio(codec, 0x03, 0x03, 0x03, 0);
+               msleep(100);
+               snd_hda_codec_set_gpio(codec, 0x03, 0x03, 0x00, 0);
+       }
+}
 enum {
        ALC269_FIXUP_GPIO2,
        ALC269_FIXUP_SONY_VAIO,
@@ -4213,6 +4223,8 @@ enum {
        ALC245_FIXUP_HP_ENVY_X360_15_FH0XXX,
        ALC287_FIXUP_ACER_MICMUTE_LED,
        ALC236_FIXUP_DELL_HP_POP_NOISE,
+       ALC274_FIXUP_HP_89E9_GPIO,
+       ALC274_FIXUP_HP_VERBS,
 };
 
 /* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -6855,6 +6867,28 @@ static const struct hda_fixup alc269_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc285_fixup_invalidate_dacs,
        },
+       [ALC274_FIXUP_HP_89E9_GPIO] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc274_fixup_hp_89e9_amp,
+       },
+       [ALC274_FIXUP_HP_VERBS] = {
+               .type = HDA_FIXUP_VERBS,
+               .v.verbs = (const struct hda_verb[]) {
+                       { 0x20, AC_VERB_SET_COEF_INDEX, 0x0b },
+                       { 0x20, AC_VERB_SET_PROC_COEF, 0x7778 },
+                       { 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
+                       { 0x20, AC_VERB_SET_PROC_COEF, 0xc580 },
+                       { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+                       { 0x20, AC_VERB_SET_PROC_COEF, 0x5757 },
+                       { 0x20, AC_VERB_SET_COEF_INDEX, 0x62 },
+                       { 0x20, AC_VERB_SET_PROC_COEF, 0xa007 },
+                       { 0x20, AC_VERB_SET_COEF_INDEX, 0x6b },
+                       { 0x20, AC_VERB_SET_PROC_COEF, 0x0060 },
+                       { }
+               },
+               .chained = true,
+               .chain_id = ALC274_FIXUP_HP_89E9_GPIO,
+       },
 };
 
 static const struct hda_quirk alc269_fixup_tbl[] = {
@@ -7231,6 +7265,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x103c, 0x8a3d, "HP Victus 15-fb0xxx (MB 8A3D)", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
        SND_PCI_QUIRK(0x103c, 0x8a4f, "HP Victus 15-fa0xxx (MB 8A4F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
        SND_PCI_QUIRK(0x103c, 0x8a50, "HP Victus 15-fa0xxx (MB 8A50)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
+       SND_PCI_QUIRK(0x103c, 0x8a6b, "HP Pavilion All-in-One Desktop 27-ca1xxx", ALC274_FIXUP_HP_VERBS),
        SND_PCI_QUIRK(0x103c, 0x8a6e, "HP EDNA 360", ALC287_FIXUP_CS35L41_I2C_4),
        SND_PCI_QUIRK(0x103c, 0x8a74, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
        SND_PCI_QUIRK(0x103c, 0x8a75, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
index 4b03c64e72ab48a53b8b9cdc3c3048e7b8f5fc84..28c55c5a2d2ef30e8a3602ecaa331da2436625dd 100644 (file)
@@ -2306,6 +2306,8 @@ static const struct snd_pci_quirk power_save_denylist[] = {
        SND_PCI_QUIRK(0x1028, 0x0962, "Dell ALC3271", 0),
        /* https://bugzilla.kernel.org/show_bug.cgi?id=220210 */
        SND_PCI_QUIRK(0x17aa, 0x5079, "Lenovo Thinkpad E15", 0),
+       /* https://bugzilla.kernel.org/show_bug.cgi?id=220694 */
+       SND_PCI_QUIRK(0x103c, 0x8a6b, "HP 89E9", 0),
        {}
 };