[PATCH] ALSA: hda: generic: Always add LED controls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



LEDs for mute and microphone mute can be added to any system via the
audio-mute and audio-micmute triggers, e.g. via USB HID devices.
Therefore, add the LED controls unconditionally.

Signed-off-by: Bernhard Seibold <mail@xxxxxxxxxxxxxxxxxxx>
---
 sound/pci/hda/hda_generic.c | 46 ++++++++++++++++++-------------------
 sound/pci/hda/hda_generic.h |  2 --
 2 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index bf685d01259d..e78c0dd17c42 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -3644,8 +3644,7 @@ static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
 		return -ENOMEM;
 	if (is_switch) {
 		knew->put = cap_single_sw_put;
-		if (spec->mic_mute_led)
-			knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
+		knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
 	}
 	if (!inv_dmic)
 		return 0;
@@ -3663,8 +3662,7 @@ static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
 		return -ENOMEM;
 	if (is_switch) {
 		knew->put = cap_single_sw_put;
-		if (spec->mic_mute_led)
-			knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
+		knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
 	}
 	return 0;
 }
@@ -3706,8 +3704,7 @@ static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
 		knew->index = idx;
 		knew->private_value = sw_ctl;
 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
-		if (spec->mic_mute_led)
-			knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
+		knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
 	}
 	return 0;
 }
@@ -3979,7 +3976,6 @@ int snd_hda_gen_add_mute_led_cdev(struct hda_codec *codec,
 	if (spec->vmaster_mute.hook)
 		codec_err(codec, "vmaster hook already present before cdev!\n");
 
-	spec->vmaster_mute_led = 1;
 	return 0;
 }
 EXPORT_SYMBOL_GPL(snd_hda_gen_add_mute_led_cdev);
@@ -4002,7 +3998,6 @@ int snd_hda_gen_add_micmute_led_cdev(struct hda_codec *codec,
 				     int (*callback)(struct led_classdev *,
 						     enum led_brightness))
 {
-	struct hda_gen_spec *spec = codec->spec;
 	int err;
 
 	if (callback) {
@@ -4013,7 +4008,6 @@ int snd_hda_gen_add_micmute_led_cdev(struct hda_codec *codec,
 		}
 	}
 
-	spec->mic_mute_led = 1;
 	return 0;
 }
 EXPORT_SYMBOL_GPL(snd_hda_gen_add_micmute_led_cdev);
@@ -4973,8 +4967,7 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
 
 	parse_user_hints(codec);
 
-	if (spec->vmaster_mute_led || spec->mic_mute_led)
-		snd_ctl_led_request();
+	snd_ctl_led_request();
 
 	if (spec->mixer_nid && !spec->mixer_merge_nid)
 		spec->mixer_merge_nid = spec->mixer_nid;
@@ -5173,6 +5166,7 @@ static const char * const follower_pfxs[] = {
 int snd_hda_gen_build_controls(struct hda_codec *codec)
 {
 	struct hda_gen_spec *spec = codec->spec;
+	struct snd_kcontrol *kctl;
 	int err;
 
 	if (spec->kctls.used) {
@@ -5211,19 +5205,23 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
 		if (err < 0)
 			return err;
 	}
-	if (!spec->no_analog && !spec->suppress_vmaster &&
-	    !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
-		err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
-					    NULL, follower_pfxs,
-					    "Playback Switch", true,
-					    spec->vmaster_mute_led ?
-						SNDRV_CTL_ELEM_ACCESS_SPK_LED : 0,
-					    &spec->vmaster_mute.sw_kctl);
-		if (err < 0)
-			return err;
-		if (spec->vmaster_mute.hook) {
-			snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute);
-			snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
+	if (!spec->no_analog && !spec->suppress_vmaster) {
+
+		kctl = snd_hda_find_mixer_ctl(codec, "Master Playback Switch");
+		if (!kctl) {
+			err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
+						    NULL, follower_pfxs,
+						    "Playback Switch", true,
+						    SNDRV_CTL_ELEM_ACCESS_SPK_LED,
+						    &spec->vmaster_mute.sw_kctl);
+			if (err < 0)
+				return err;
+			if (spec->vmaster_mute.hook) {
+				snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute);
+				snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
+			}
+		} else {
+			kctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_SPK_LED;
 		}
 	}
 
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
index a8eea8367629..13db36528041 100644
--- a/sound/pci/hda/hda_generic.h
+++ b/sound/pci/hda/hda_generic.h
@@ -223,8 +223,6 @@ struct hda_gen_spec {
 	unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
 	unsigned int own_eapd_ctl:1; /* set EAPD by own function */
 	unsigned int keep_eapd_on:1; /* don't turn off EAPD automatically */
-	unsigned int vmaster_mute_led:1; /* add SPK-LED flag to vmaster mute switch */
-	unsigned int mic_mute_led:1; /* add MIC-LED flag to capture mute switch */
 	unsigned int indep_hp:1; /* independent HP supported */
 	unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */
 	unsigned int add_stereo_mix_input:2; /* add aamix as a capture src */
-- 
2.43.0





[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux