| From f73cd43ac3b41c0f09a126387f302bbc0d9c726d Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Tue, 6 Dec 2016 11:55:17 +0100 |
| Subject: ALSA: hda - Gate the mic jack on HP Z1 Gen3 AiO |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit f73cd43ac3b41c0f09a126387f302bbc0d9c726d upstream. |
| |
| HP Z1 Gen3 AiO with Conexant codec doesn't give an unsolicited event |
| to the headset mic pin upon the jack plugging, it reports only to the |
| headphone pin. It results in the missing mic switching. Let's fix up |
| by simply gating the jack event. |
| |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/hda/patch_conexant.c | 17 +++++++++++++++++ |
| 1 file changed, 17 insertions(+) |
| |
| --- a/sound/pci/hda/patch_conexant.c |
| +++ b/sound/pci/hda/patch_conexant.c |
| @@ -262,6 +262,7 @@ enum { |
| CXT_FIXUP_CAP_MIX_AMP_5047, |
| CXT_FIXUP_MUTE_LED_EAPD, |
| CXT_FIXUP_HP_SPECTRE, |
| + CXT_FIXUP_HP_GATE_MIC, |
| }; |
| |
| /* for hda_fixup_thinkpad_acpi() */ |
| @@ -633,6 +634,17 @@ static void cxt_fixup_cap_mix_amp_5047(s |
| (1 << AC_AMPCAP_MUTE_SHIFT)); |
| } |
| |
| +static void cxt_fixup_hp_gate_mic_jack(struct hda_codec *codec, |
| + const struct hda_fixup *fix, |
| + int action) |
| +{ |
| + /* the mic pin (0x19) doesn't give an unsolicited event; |
| + * probe the mic pin together with the headphone pin (0x16) |
| + */ |
| + if (action == HDA_FIXUP_ACT_PROBE) |
| + snd_hda_jack_set_gating_jack(codec, 0x19, 0x16); |
| +} |
| + |
| /* ThinkPad X200 & co with cxt5051 */ |
| static const struct hda_pintbl cxt_pincfg_lenovo_x200[] = { |
| { 0x16, 0x042140ff }, /* HP (seq# overridden) */ |
| @@ -774,6 +786,10 @@ static const struct hda_fixup cxt_fixups |
| { } |
| } |
| }, |
| + [CXT_FIXUP_HP_GATE_MIC] = { |
| + .type = HDA_FIXUP_FUNC, |
| + .v.func = cxt_fixup_hp_gate_mic_jack, |
| + }, |
| }; |
| |
| static const struct snd_pci_quirk cxt5045_fixups[] = { |
| @@ -824,6 +840,7 @@ static const struct snd_pci_quirk cxt506 |
| SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC), |
| SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC), |
| SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE), |
| + SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC), |
| SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN), |
| SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO), |
| SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410), |