[alsa-devel] [PATCH 2/5] ALSA: hda - Add Auto-Mic Mode enum to Realtek codecs

Takashi Iwai tiwai at suse.de
Fri Nov 30 09:16:00 CET 2012


Add another enum control to allow user explicitly enabling/disabling
the automatic capture source selection via jack detection.
This is a pretty similar like Auto-Mute Mode, but for inputs.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 sound/pci/hda/patch_realtek.c | 53 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 909a623..aa32dd9 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -924,6 +924,57 @@ static const struct snd_kcontrol_new alc_automute_mode_enum = {
 	.put = alc_automute_mode_put,
 };
 
+/*
+ * Auto-Mic mode mixer enum support
+ */
+static int alc_automic_mode_info(struct snd_kcontrol *kcontrol,
+				 struct snd_ctl_elem_info *uinfo)
+{
+	static const char * const texts[] = {
+		"Disabled", "Enabled"
+	};
+
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+	uinfo->count = 1;
+	uinfo->value.enumerated.items = 2;
+	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
+		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
+	strcpy(uinfo->value.enumerated.name,
+	       texts[uinfo->value.enumerated.item]);
+	return 0;
+}
+
+static int alc_automic_mode_get(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+	struct alc_spec *spec = codec->spec;
+	ucontrol->value.enumerated.item[0] = spec->auto_mic;
+	return 0;
+}
+
+static int alc_automic_mode_put(struct snd_kcontrol *kcontrol,
+				struct snd_ctl_elem_value *ucontrol)
+{
+	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+	struct alc_spec *spec = codec->spec;
+	unsigned int val = !!ucontrol->value.enumerated.item[0];
+
+	if (spec->auto_mic == val)
+		return 0;
+	spec->auto_mic = val;
+	alc_mic_automute(codec, NULL);
+	return 1;
+}
+
+static const struct snd_kcontrol_new alc_automic_mode_enum = {
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	.name = "Auto-Mic Mode",
+	.info = alc_automic_mode_info,
+	.get = alc_automic_mode_get,
+	.put = alc_automic_mode_put,
+};
+
 static struct snd_kcontrol_new *
 alc_kcontrol_new(struct alc_spec *spec, const char *name,
 		 const struct snd_kcontrol_new *temp)
@@ -1185,6 +1236,8 @@ static void alc_init_auto_mic(struct hda_codec *codec)
 		    spec->am_entry[0].pin,
 		    spec->am_entry[1].pin,
 		    spec->am_entry[2].pin);
+
+	alc_kcontrol_new(spec, "Auto-Mic Mode", &alc_automic_mode_enum);
 }
 
 /* check the availabilities of auto-mute and auto-mic switches */
-- 
1.8.0.1



More information about the Alsa-devel mailing list