]> git.itanic.dy.fi Git - linux-stable/commitdiff
ALSA: hda/realtek - Add Headset Mic supported for HP cPC
authorKailang Yang <kailang@realtek.com>
Fri, 17 Jan 2020 06:04:01 +0000 (14:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 May 2023 11:42:12 +0000 (12:42 +0100)
[ Upstream commit 5af29028fd6db9438b5584ab7179710a0a22569d ]

HP ALC671 need to support Headset Mic.

Signed-off-by: Kailang Yang <kailang@realtek.com>
Link: https://lore.kernel.org/r/06a9d2b176e14706976d6584cbe2d92a@realtek.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Stable-dep-of: 90670ef774a8 ("ALSA: hda/realtek: Add a quirk for HP EliteDesk 805")
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/pci/hda/patch_realtek.c

index 3916f2eb5384a340200d1b42c44f2b9a650ac1b6..a47946b4b22e191c25331829cb62ad6883bfbe06 100644 (file)
@@ -8550,6 +8550,29 @@ static void alc662_fixup_aspire_ethos_hp(struct hda_codec *codec,
        }
 }
 
+static void alc671_fixup_hp_headset_mic2(struct hda_codec *codec,
+                                            const struct hda_fixup *fix, int action)
+{
+       struct alc_spec *spec = codec->spec;
+
+       static const struct hda_pintbl pincfgs[] = {
+               { 0x19, 0x02a11040 }, /* use as headset mic, with its own jack detect */
+               { 0x1b, 0x0181304f },
+               { }
+       };
+
+       switch (action) {
+       case HDA_FIXUP_ACT_PRE_PROBE:
+               spec->gen.mixer_nid = 0;
+               spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
+               snd_hda_apply_pincfgs(codec, pincfgs);
+               break;
+       case HDA_FIXUP_ACT_INIT:
+               alc_write_coef_idx(codec, 0x19, 0xa054);
+               break;
+       }
+}
+
 static const struct coef_fw alc668_coefs[] = {
        WRITE_COEF(0x01, 0xbebe), WRITE_COEF(0x02, 0xaaaa), WRITE_COEF(0x03,    0x0),
        WRITE_COEF(0x04, 0x0180), WRITE_COEF(0x06,    0x0), WRITE_COEF(0x07, 0x0f80),
@@ -8624,6 +8647,7 @@ enum {
        ALC669_FIXUP_ACER_ASPIRE_ETHOS,
        ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER,
        ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,
+       ALC671_FIXUP_HP_HEADSET_MIC2,
 };
 
 static const struct hda_fixup alc662_fixups[] = {
@@ -8977,6 +9001,10 @@ static const struct hda_fixup alc662_fixups[] = {
                .chained = true,
                .chain_id = ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER
        },
+       [ALC671_FIXUP_HP_HEADSET_MIC2] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc671_fixup_hp_headset_mic2,
+       },
 };
 
 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
@@ -9158,6 +9186,22 @@ static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
                {0x12, 0x90a60130},
                {0x14, 0x90170110},
                {0x15, 0x0321101f}),
+       SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
+               {0x14, 0x01014010},
+               {0x17, 0x90170150},
+               {0x1b, 0x01813030},
+               {0x21, 0x02211020}),
+       SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
+               {0x14, 0x01014010},
+               {0x18, 0x01a19040},
+               {0x1b, 0x01813030},
+               {0x21, 0x02211020}),
+       SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
+               {0x14, 0x01014020},
+               {0x17, 0x90170110},
+               {0x18, 0x01a19050},
+               {0x1b, 0x01813040},
+               {0x21, 0x02211030}),
        {}
 };