From 76cb841cb886eef6b3bee341a2266c76578724ad Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 6 May 2024 03:02:30 +0200 Subject: Adding upstream version 4.19.249. Signed-off-by: Daniel Baumann --- sound/pci/hda/dell_wmi_helper.c | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 sound/pci/hda/dell_wmi_helper.c (limited to 'sound/pci/hda/dell_wmi_helper.c') diff --git a/sound/pci/hda/dell_wmi_helper.c b/sound/pci/hda/dell_wmi_helper.c new file mode 100644 index 000000000..bbd6c87a4 --- /dev/null +++ b/sound/pci/hda/dell_wmi_helper.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Helper functions for Dell Mic Mute LED control; + * to be included from codec driver + */ + +#if IS_ENABLED(CONFIG_DELL_LAPTOP) +#include + +static int (*dell_micmute_led_set_func)(int); + +static void dell_micmute_update(struct hda_codec *codec) +{ + struct hda_gen_spec *spec = codec->spec; + + dell_micmute_led_set_func(spec->micmute_led.led_value); +} + +static void alc_fixup_dell_wmi(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ + bool removefunc = false; + + if (action == HDA_FIXUP_ACT_PROBE) { + if (!dell_micmute_led_set_func) + dell_micmute_led_set_func = symbol_request(dell_micmute_led_set); + if (!dell_micmute_led_set_func) { + codec_warn(codec, "Failed to find dell wmi symbol dell_micmute_led_set\n"); + return; + } + + removefunc = (dell_micmute_led_set_func(false) < 0) || + (snd_hda_gen_add_micmute_led(codec, + dell_micmute_update) < 0); + } + + if (dell_micmute_led_set_func && (action == HDA_FIXUP_ACT_FREE || removefunc)) { + symbol_put(dell_micmute_led_set); + dell_micmute_led_set_func = NULL; + } +} + +#else /* CONFIG_DELL_LAPTOP */ +static void alc_fixup_dell_wmi(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ +} + +#endif /* CONFIG_DELL_LAPTOP */ -- cgit v1.2.3