ALSA: hda/realtek - Fixup mute led on HP Spectre x360
authorTom Briden <tom@decompile.me.uk>
Sat, 25 Mar 2017 10:12:01 +0000 (10:12 +0000)
committerTakashi Iwai <tiwai@suse.de>
Tue, 29 May 2018 09:47:55 +0000 (11:47 +0200)
This patch adds the mute LED control for HP Spectre x360 Kabylake
model.  The mute LED is controlled via VREF bits on NID 0x1b, so we
need a new fixup function.

Note that this doesn't fix the other issues like the missing speaker
output on the machine.  They will be addressed by later patches.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=189331
Signed-off-by: Tom Briden <tom@decompile.me.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index 3af9384..6369964 100644 (file)
@@ -3679,6 +3679,19 @@ static void alc269_fixup_hp_mute_led_mic2(struct hda_codec *codec,
        }
 }
 
+static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
+                               const struct hda_fixup *fix, int action)
+{
+       struct alc_spec *spec = codec->spec;
+       if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+               spec->mute_led_polarity = 0;
+               spec->mute_led_nid = 0x1b;
+               spec->gen.vmaster_mute.hook = alc269_fixup_mic_mute_hook;
+               spec->gen.vmaster_mute_enum = 1;
+               codec->power_filter = led_power_filter;
+       }
+}
+
 /* update LED status via GPIO */
 static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask,
                                bool enabled)
@@ -5413,6 +5426,7 @@ enum {
        ALC269_FIXUP_HP_MUTE_LED,
        ALC269_FIXUP_HP_MUTE_LED_MIC1,
        ALC269_FIXUP_HP_MUTE_LED_MIC2,
+       ALC269_FIXUP_HP_MUTE_LED_MIC3,
        ALC269_FIXUP_HP_GPIO_LED,
        ALC269_FIXUP_HP_GPIO_MIC1_LED,
        ALC269_FIXUP_HP_LINE1_MIC1_LED,
@@ -5672,6 +5686,10 @@ static const struct hda_fixup alc269_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc269_fixup_hp_mute_led_mic2,
        },
+       [ALC269_FIXUP_HP_MUTE_LED_MIC3] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc269_fixup_hp_mute_led_mic3,
+       },
        [ALC269_FIXUP_HP_GPIO_LED] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc269_fixup_hp_gpio_led,
@@ -6494,6 +6512,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
        SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
        SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
+       SND_PCI_QUIRK(0x103c, 0x827e, "HP x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
        SND_PCI_QUIRK(0x103c, 0x82bf, "HP", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x103c, 0x82c0, "HP", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),