aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2017-04-10 11:37:34 -0400
committerTakashi Iwai <tiwai@suse.de>2017-04-10 11:45:27 -0400
commit7480316c265c9fcdbf73b1b8dec061b893b7e987 (patch)
tree69b0bdc29afba6b441eaa9fa1656e6ceead36a35
parent9f3dadb156692e15933a4a97ef659f65151be4a1 (diff)
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: Takashi Iwai <tiwai@suse.de>
-rw-r--r--Documentation/sound/hd-audio/notes.rst2
-rw-r--r--sound/pci/hda/hda_generic.c7
-rw-r--r--sound/pci/hda/hda_generic.h1
3 files changed, 8 insertions, 2 deletions
diff --git a/Documentation/sound/hd-audio/notes.rst b/Documentation/sound/hd-audio/notes.rst
index 9eeb9b468706..f59c3cdbfaf4 100644
--- a/Documentation/sound/hd-audio/notes.rst
+++ b/Documentation/sound/hd-audio/notes.rst
@@ -494,6 +494,8 @@ add_hp_mic (bool)
494hp_mic_detect (bool) 494hp_mic_detect (bool)
495 enable/disable the hp/mic shared input for a single built-in mic 495 enable/disable the hp/mic shared input for a single built-in mic
496 case; default true 496 case; default true
497vmaster (bool)
498 enable/disable the virtual Master control; default true
497mixer_nid (int) 499mixer_nid (int)
498 specifies the widget NID of the analog-loopback mixer 500 specifies the widget NID of the analog-loopback mixer
499 501
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 443832870a44..2842c82363c0 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -196,6 +196,9 @@ static void parse_user_hints(struct hda_codec *codec)
196 val = snd_hda_get_bool_hint(codec, "hp_mic_detect"); 196 val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
197 if (val >= 0) 197 if (val >= 0)
198 spec->suppress_hp_mic_detect = !val; 198 spec->suppress_hp_mic_detect = !val;
199 val = snd_hda_get_bool_hint(codec, "vmaster");
200 if (val >= 0)
201 spec->suppress_vmaster = !val;
199 202
200 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val)) 203 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
201 spec->mixer_nid = val; 204 spec->mixer_nid = val;
@@ -5033,7 +5036,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
5033 } 5036 }
5034 5037
5035 /* if we have no master control, let's create it */ 5038 /* if we have no master control, let's create it */
5036 if (!spec->no_analog && 5039 if (!spec->no_analog && !spec->suppress_vmaster &&
5037 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) { 5040 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
5038 err = snd_hda_add_vmaster(codec, "Master Playback Volume", 5041 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
5039 spec->vmaster_tlv, slave_pfxs, 5042 spec->vmaster_tlv, slave_pfxs,
@@ -5041,7 +5044,7 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
5041 if (err < 0) 5044 if (err < 0)
5042 return err; 5045 return err;
5043 } 5046 }
5044 if (!spec->no_analog && 5047 if (!spec->no_analog && !spec->suppress_vmaster &&
5045 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) { 5048 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
5046 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", 5049 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
5047 NULL, slave_pfxs, 5050 NULL, slave_pfxs,
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
index f66fc7e25e07..61772317de46 100644
--- a/sound/pci/hda/hda_generic.h
+++ b/sound/pci/hda/hda_generic.h
@@ -229,6 +229,7 @@ struct hda_gen_spec {
229 unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */ 229 unsigned int add_jack_modes:1; /* add i/o jack mode enum ctls */
230 unsigned int power_down_unused:1; /* power down unused widgets */ 230 unsigned int power_down_unused:1; /* power down unused widgets */
231 unsigned int dac_min_mute:1; /* minimal = mute for DACs */ 231 unsigned int dac_min_mute:1; /* minimal = mute for DACs */
232 unsigned int suppress_vmaster:1; /* don't create vmaster kctls */
232 233
233 /* other internal flags */ 234 /* other internal flags */
234 unsigned int no_analog:1; /* digital I/O only */ 235 unsigned int no_analog:1; /* digital I/O only */