Release 4.12 sound/pci/hda/dell_wmi_helper.c
/* Helper functions for Dell Mic Mute LED control;
* to be included from codec driver
*/
#if IS_ENABLED(CONFIG_DELL_LAPTOP)
#include <linux/dell-led.h>
static int dell_led_value;
static int (*dell_micmute_led_set_func)(int);
static void (*dell_old_cap_hook)(struct hda_codec *,
struct snd_kcontrol *,
struct snd_ctl_elem_value *);
static void update_dell_wmi_micmute_led(struct hda_codec *codec,
struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
if (dell_old_cap_hook)
dell_old_cap_hook(codec, kcontrol, ucontrol);
if (!ucontrol || !dell_micmute_led_set_func)
return;
if (strcmp("Capture Switch", ucontrol->id.name) == 0 && ucontrol->id.index == 0) {
/* TODO: How do I verify if it's a mono or stereo here? */
int val = (ucontrol->value.integer.value[0] || ucontrol->value.integer.value[1]) ? 0 : 1;
if (val == dell_led_value)
return;
dell_led_value = val;
if (dell_micmute_led_set_func)
dell_micmute_led_set_func(dell_led_value);
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Hui Wang | 117 | 97.50% | 1 | 50.00% |
Michał Kępień | 3 | 2.50% | 1 | 50.00% |
Total | 120 | 100.00% | 2 | 100.00% |
static void alc_fixup_dell_wmi(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
struct alc_spec *spec = codec->spec;
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 = true;
if (dell_micmute_led_set_func(false) >= 0) {
dell_led_value = 0;
if (spec->gen.num_adc_nids > 1 && !spec->gen.dyn_adc_switch)
codec_dbg(codec, "Skipping micmute LED control due to several ADCs");
else {
dell_old_cap_hook = spec->gen.cap_sync_hook;
spec->gen.cap_sync_hook = update_dell_wmi_micmute_led;
removefunc = false;
}
}
}
if (dell_micmute_led_set_func && (action == HDA_FIXUP_ACT_FREE || removefunc)) {
symbol_put(dell_micmute_led_set);
dell_micmute_led_set_func = NULL;
dell_old_cap_hook = NULL;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Hui Wang | 153 | 94.44% | 2 | 50.00% |
Michał Kępień | 9 | 5.56% | 2 | 50.00% |
Total | 162 | 100.00% | 4 | 100.00% |
#else /* CONFIG_DELL_LAPTOP */
static void alc_fixup_dell_wmi(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Hui Wang | 19 | 100.00% | 1 | 100.00% |
Total | 19 | 100.00% | 1 | 100.00% |
#endif /* CONFIG_DELL_LAPTOP */
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Hui Wang | 335 | 95.44% | 2 | 40.00% |
Michał Kępień | 16 | 4.56% | 3 | 60.00% |
Total | 351 | 100.00% | 5 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.