]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ALSA: hda/conexant - Fix audio routing for HP EliteOne 1000 G2
authorVasiliy Kovalev <kovalev@altlinux.org>
Wed, 9 Oct 2024 13:42:48 +0000 (16:42 +0300)
committerTakashi Iwai <tiwai@suse.de>
Wed, 9 Oct 2024 14:56:22 +0000 (16:56 +0200)
There is a problem with simultaneous audio output to headphones and
speakers, and when headphones are turned off, the speakers also turn
off and do not turn them on.

However, it was found that if you boot linux immediately after windows,
there are no such problems. When comparing alsa-info, the only difference
is the different configuration of Node 0x1d:

working conf. (windows): Pin-ctls: 0x80: HP
not working     (linux): Pin-ctls: 0xc0: OUT HP

This patch disable the AC_PINCTL_OUT_EN bit of Node 0x1d and fixes the
described problem.

Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
Cc: <stable@vger.kernel.org>
Link: https://patch.msgid.link/20241009134248.662175-1-kovalev@altlinux.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_conexant.c

index b61ce5e6f5ec56eb2653536d08f0dc9dc0c50ebf..956cb71c3bee118243620245e109f192b2771093 100644 (file)
@@ -303,6 +303,7 @@ enum {
        CXT_FIXUP_HP_SPECTRE,
        CXT_FIXUP_HP_GATE_MIC,
        CXT_FIXUP_MUTE_LED_GPIO,
+       CXT_FIXUP_HP_ELITEONE_OUT_DIS,
        CXT_FIXUP_HP_ZBOOK_MUTE_LED,
        CXT_FIXUP_HEADSET_MIC,
        CXT_FIXUP_HP_MIC_NO_PRESENCE,
@@ -320,6 +321,19 @@ static void cxt_fixup_stereo_dmic(struct hda_codec *codec,
        spec->gen.inv_dmic_split = 1;
 }
 
+/* fix widget control pin settings */
+static void cxt_fixup_update_pinctl(struct hda_codec *codec,
+                                  const struct hda_fixup *fix, int action)
+{
+       if (action == HDA_FIXUP_ACT_PROBE) {
+               /* Unset OUT_EN for this Node pin, leaving only HP_EN.
+                * This is the value stored in the codec register after
+                * the correct initialization of the previous windows boot.
+                */
+               snd_hda_set_pin_ctl(codec, 0x1d, AC_PINCTL_HP_EN);
+       }
+}
+
 static void cxt5066_increase_mic_boost(struct hda_codec *codec,
                                   const struct hda_fixup *fix, int action)
 {
@@ -971,6 +985,10 @@ static const struct hda_fixup cxt_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = cxt_fixup_mute_led_gpio,
        },
+       [CXT_FIXUP_HP_ELITEONE_OUT_DIS] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = cxt_fixup_update_pinctl,
+       },
        [CXT_FIXUP_HP_ZBOOK_MUTE_LED] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = cxt_fixup_hp_zbook_mute_led,
@@ -1061,6 +1079,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
        SND_PCI_QUIRK(0x103c, 0x83b2, "HP EliteBook 840 G5", CXT_FIXUP_HP_DOCK),
        SND_PCI_QUIRK(0x103c, 0x83b3, "HP EliteBook 830 G5", CXT_FIXUP_HP_DOCK),
        SND_PCI_QUIRK(0x103c, 0x83d3, "HP ProBook 640 G4", CXT_FIXUP_HP_DOCK),
+       SND_PCI_QUIRK(0x103c, 0x83e5, "HP EliteOne 1000 G2", CXT_FIXUP_HP_ELITEONE_OUT_DIS),
        SND_PCI_QUIRK(0x103c, 0x8402, "HP ProBook 645 G4", CXT_FIXUP_MUTE_LED_GPIO),
        SND_PCI_QUIRK(0x103c, 0x8427, "HP ZBook Studio G5", CXT_FIXUP_HP_ZBOOK_MUTE_LED),
        SND_PCI_QUIRK(0x103c, 0x844f, "HP ZBook Studio G5", CXT_FIXUP_HP_ZBOOK_MUTE_LED),