Commit 7480316c authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Allow to enable/disable vmaster build explicitly

Another preliminary patch for the dual-codec support: since the
support of vmaster over multiple codecs is difficult, simply disable
it by a new flag to hda_codec struct.  A new user hint is added as
well for consistency.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 9f3dadb1
...@@ -494,6 +494,8 @@ add_hp_mic (bool) ...@@ -494,6 +494,8 @@ add_hp_mic (bool)
hp_mic_detect (bool) hp_mic_detect (bool)
enable/disable the hp/mic shared input for a single built-in mic enable/disable the hp/mic shared input for a single built-in mic
case; default true case; default true
vmaster (bool)
enable/disable the virtual Master control; default true
mixer_nid (int) mixer_nid (int)
specifies the widget NID of the analog-loopback mixer specifies the widget NID of the analog-loopback mixer
......
...@@ -196,6 +196,9 @@ static void parse_user_hints(struct hda_codec *codec) ...@@ -196,6 +196,9 @@ static void parse_user_hints(struct hda_codec *codec)
val = snd_hda_get_bool_hint(codec, "hp_mic_detect"); val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
if (val >= 0) if (val >= 0)
spec->suppress_hp_mic_detect = !val; spec->suppress_hp_mic_detect = !val;
val = snd_hda_get_bool_hint(codec, "vmaster");
if (val >= 0)
spec->suppress_vmaster = !val;
if (!snd_hda_get_int_hint(codec, "mixer_nid", &val)) if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
spec->mixer_nid = val; spec->mixer_nid = val;
...@@ -5033,7 +5036,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec) ...@@ -5033,7 +5036,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
} }
/* if we have no master control, let's create it */ /* if we have no master control, let's create it */
if (!spec->no_analog && if (!spec->no_analog && !spec->suppress_vmaster &&
!snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) { !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
err = snd_hda_add_vmaster(codec, "Master Playback Volume", err = snd_hda_add_vmaster(codec, "Master Playback Volume",
spec->vmaster_tlv, slave_pfxs, spec->vmaster_tlv, slave_pfxs,
...@@ -5041,7 +5044,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec) ...@@ -5041,7 +5044,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
if (err < 0) if (err < 0)
return err; return err;
} }
if (!spec->no_analog && if (!spec->no_analog && !spec->suppress_vmaster &&
!snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) { !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
err = __snd_hda_add_vmaster(codec, "Master Playback Switch", err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
NULL, slave_pfxs, NULL, slave_pfxs,
......
...@@ -229,6 +229,7 @@ struct hda_gen_spec { ...@@ -229,6 +229,7 @@ struct hda_gen_spec {
unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */ unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */
unsigned int power_down_unused:1; /* power down unused widgets */ unsigned int power_down_unused:1; /* power down unused widgets */
unsigned int dac_min_mute:1; /* minimal = mute for DACs */ unsigned int dac_min_mute:1; /* minimal = mute for DACs */
unsigned int suppress_vmaster:1; /* don't create vmaster kctls */
/* other internal flags */ /* other internal flags */
unsigned int no_analog:1; /* digital I/O only */ unsigned int no_analog:1; /* digital I/O only */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment