On Sat, Nov 10, 2018 at 1:46 AM Ayman Bagabas <ayman.bagabas@xxxxxxxxx> wrote: > > Some of Huawei laptops come with a LED in the micmute key. This patch > enables and disable this LED accordingly. > This enables micmute LED for: > 1. Matebook X (19e5:3200), (19e5:3201) > 2. Matebook X Pro (19e5:3204) > > Signed-off-by: Ayman Bagabas <ayman.bagabas@xxxxxxxxx> > --- > sound/pci/hda/huawei_wmi_helper.c | 47 +++++++++++++++++++++++++++++++ > sound/pci/hda/patch_realtek.c | 14 ++++++++- > 2 files changed, 60 insertions(+), 1 deletion(-) > create mode 100644 sound/pci/hda/huawei_wmi_helper.c > > diff --git a/sound/pci/hda/huawei_wmi_helper.c b/sound/pci/hda/huawei_wmi_helper.c > new file mode 100644 > index 000000000000..7c91f914ffba > --- /dev/null > +++ b/sound/pci/hda/huawei_wmi_helper.c > @@ -0,0 +1,47 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* Helper functions for Huawei WMI micmute LED; > + * to be included from codec driver > + */ > + > +#if IS_ENABLED(CONFIG_HUAWEI_LAPTOP) ENABLED or REACHABLE? > +#include <linux/platform_data/x86/huawei_wmi.h> > + > +static int (*huawei_wmi_micmute_led_set_func)(bool); > + > +static void update_huawei_wmi_micmute_led(struct hda_codec *codec) > +{ > + struct hda_gen_spec *spec = codec->spec; > + huawei_wmi_micmute_led_set_func(spec->micmute_led.led_value); > +} > + > +static void alc_fixup_huawei_wmi(struct hda_codec *codec, > + const struct hda_fixup *fix, int action) > +{ > + bool removefunc = false; > + > + if (action == HDA_FIXUP_ACT_PROBE) { > + if (!huawei_wmi_micmute_led_set_func) > + huawei_wmi_micmute_led_set_func = symbol_request(huawei_wmi_micmute_led_set); > + if (!huawei_wmi_micmute_led_set_func) { > + codec_warn(codec, "Failed to find huawei_wmi symbol huawei_wmi_micmute_led_set\n"); > + return; > + } > + > + removefunc = (huawei_wmi_micmute_led_set_func(false) < 0) > + || (snd_hda_gen_add_micmute_led(codec, update_huawei_wmi_micmute_led) < 0); > + } > + > + if (huawei_wmi_micmute_led_set_func && (action == HDA_FIXUP_ACT_FREE || removefunc)) { > + symbol_put(huawei_wmi_micmute_led_set); > + huawei_wmi_micmute_led_set_func = NULL; > + } > +} > + > +#else > + > +static void alc_fixup_huawei_wmi(struct hda_codec *codec, > + const struct hda_fixup *fix, int action) > +{ > +} > + > +#endif > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c > index 135c0826859b..5431dee40f4f 100644 > --- a/sound/pci/hda/patch_realtek.c > +++ b/sound/pci/hda/patch_realtek.c > @@ -5374,6 +5374,9 @@ static void alc_fixup_thinkpad_acpi(struct hda_codec *codec, > /* for alc295_fixup_hp_top_speakers */ > #include "hp_x360_helper.c" > > +/* for alc_fixup_huawei_micmute_led */ > +#include "huawei_wmi_helper.c" > + > enum { > ALC269_FIXUP_SONY_VAIO, > ALC275_FIXUP_SONY_VAIO_GPIO2, > @@ -5494,6 +5497,7 @@ enum { > ALC255_FIXUP_DUMMY_LINEOUT_VERB, > ALC255_FIXUP_DELL_HEADSET_MIC, > ALC256_FIXUP_HUAWEI_MBXP_PINS, > + ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED, > ALC295_FIXUP_HP_X360, > ALC221_FIXUP_HP_HEADSET_MIC, > }; > @@ -5765,6 +5769,10 @@ static const struct hda_fixup alc269_fixups[] = { > .chained = true, > .chain_id = ALC269_FIXUP_HEADSET_MIC > }, > + [ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED] = { > + .type = HDA_FIXUP_FUNC, > + .v.func = alc_fixup_huawei_wmi > + }, > [ALC256_FIXUP_HUAWEI_MBXP_PINS] = { > .type = HDA_FIXUP_PINS, > .v.pins = (const struct hda_pintbl[]) { > @@ -5779,7 +5787,9 @@ static const struct hda_fixup alc269_fixups[] = { > {0x1e, 0x411111f0}, > {0x21, 0x04211020}, > { } > - } > + }, > + .chained = true, > + .chain_id = ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED > }, > [ALC269_FIXUP_ASUS_X101_FUNC] = { > .type = HDA_FIXUP_FUNC, > @@ -6611,6 +6621,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { > SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), > SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), > SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), > + SND_PCI_QUIRK(0x19e5, 0x3200, "Huawei MBX", ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED), > + SND_PCI_QUIRK(0x19e5, 0x3201, "Huawei MBX", ALC256_FIXUP_HUAWEI_WMI_MICMUTE_LED), > SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MBXP", ALC256_FIXUP_HUAWEI_MBXP_PINS), > SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */ > > -- > 2.17.2 > -- With Best Regards, Andy Shevchenko _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel