2 * Universal Interface for Intel High Definition Audio Codec
4 * Generic widget tree parser
6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
8 * This driver is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This driver is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/export.h>
26 #include <linux/sort.h>
27 #include <linux/ctype.h>
28 #include <linux/string.h>
29 #include <sound/core.h>
30 #include <sound/jack.h>
31 #include "hda_codec.h"
32 #include "hda_local.h"
33 #include "hda_auto_parser.h"
35 #include "hda_generic.h"
38 /* initialize hda_gen_spec struct */
39 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
41 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
42 snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
43 mutex_init(&spec->pcm_mutex);
46 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init);
48 struct snd_kcontrol_new *
49 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
50 const struct snd_kcontrol_new *temp)
52 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
57 knew->name = kstrdup(name, GFP_KERNEL);
59 knew->name = kstrdup(knew->name, GFP_KERNEL);
64 EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl);
66 static void free_kctls(struct hda_gen_spec *spec)
68 if (spec->kctls.list) {
69 struct snd_kcontrol_new *kctl = spec->kctls.list;
71 for (i = 0; i < spec->kctls.used; i++)
74 snd_array_free(&spec->kctls);
77 void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
82 snd_array_free(&spec->paths);
84 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free);
89 static void parse_user_hints(struct hda_codec *codec)
91 struct hda_gen_spec *spec = codec->spec;
94 val = snd_hda_get_bool_hint(codec, "jack_detect");
96 codec->no_jack_detect = !val;
97 val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
99 codec->inv_jack_detect = !!val;
100 val = snd_hda_get_bool_hint(codec, "trigger_sense");
102 codec->no_trigger_sense = !val;
103 val = snd_hda_get_bool_hint(codec, "inv_eapd");
105 codec->inv_eapd = !!val;
106 val = snd_hda_get_bool_hint(codec, "pcm_format_first");
108 codec->pcm_format_first = !!val;
109 val = snd_hda_get_bool_hint(codec, "sticky_stream");
111 codec->no_sticky_stream = !val;
112 val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
114 codec->spdif_status_reset = !!val;
115 val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
117 codec->pin_amp_workaround = !!val;
118 val = snd_hda_get_bool_hint(codec, "single_adc_amp");
120 codec->single_adc_amp = !!val;
122 val = snd_hda_get_bool_hint(codec, "auto_mic");
124 spec->suppress_auto_mic = !val;
125 val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
127 spec->line_in_auto_switch = !!val;
128 val = snd_hda_get_bool_hint(codec, "need_dac_fix");
130 spec->need_dac_fix = !!val;
131 val = snd_hda_get_bool_hint(codec, "primary_hp");
133 spec->no_primary_hp = !val;
134 val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
136 spec->multi_cap_vol = !!val;
137 val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
139 spec->inv_dmic_split = !!val;
140 val = snd_hda_get_bool_hint(codec, "indep_hp");
142 spec->indep_hp = !!val;
143 val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
145 spec->add_stereo_mix_input = !!val;
146 val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
148 spec->add_out_jack_modes = !!val;
150 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
151 spec->mixer_nid = val;
155 * pin control value accesses
158 #define update_pin_ctl(codec, pin, val) \
159 snd_hda_codec_update_cache(codec, pin, 0, \
160 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
162 /* restore the pinctl based on the cached value */
163 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
165 update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
168 /* set the pinctl target value and write it if requested */
169 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
170 unsigned int val, bool do_write)
174 val = snd_hda_correct_pin_ctl(codec, pin, val);
175 snd_hda_codec_set_pin_target(codec, pin, val);
177 update_pin_ctl(codec, pin, val);
180 /* set pinctl target values for all given pins */
181 static void set_pin_targets(struct hda_codec *codec, int num_pins,
182 hda_nid_t *pins, unsigned int val)
185 for (i = 0; i < num_pins; i++)
186 set_pin_target(codec, pins[i], val, false);
193 /* return the position of NID in the list, or -1 if not found */
194 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
197 for (i = 0; i < nums; i++)
203 /* return true if the given NID is contained in the path */
204 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
206 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
209 static struct nid_path *get_nid_path(struct hda_codec *codec,
210 hda_nid_t from_nid, hda_nid_t to_nid,
213 struct hda_gen_spec *spec = codec->spec;
216 for (i = 0; i < spec->paths.used; i++) {
217 struct nid_path *path = snd_array_elem(&spec->paths, i);
218 if (path->depth <= 0)
220 if ((!from_nid || path->path[0] == from_nid) &&
221 (!to_nid || path->path[path->depth - 1] == to_nid)) {
223 (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
224 (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
231 /* get the path between the given NIDs;
232 * passing 0 to either @pin or @dac behaves as a wildcard
234 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
235 hda_nid_t from_nid, hda_nid_t to_nid)
237 return get_nid_path(codec, from_nid, to_nid, 0);
239 EXPORT_SYMBOL_HDA(snd_hda_get_nid_path);
241 /* get the index number corresponding to the path instance;
242 * the index starts from 1, for easier checking the invalid value
244 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
246 struct hda_gen_spec *spec = codec->spec;
247 struct nid_path *array = spec->paths.list;
250 if (!spec->paths.used)
253 if (idx < 0 || idx >= spec->paths.used)
258 /* get the path instance corresponding to the given index number */
259 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
261 struct hda_gen_spec *spec = codec->spec;
263 if (idx <= 0 || idx > spec->paths.used)
265 return snd_array_elem(&spec->paths, idx - 1);
268 /* check whether the given DAC is already found in any existing paths */
269 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
271 struct hda_gen_spec *spec = codec->spec;
274 for (i = 0; i < spec->paths.used; i++) {
275 struct nid_path *path = snd_array_elem(&spec->paths, i);
276 if (path->path[0] == nid)
282 /* check whether the given two widgets can be connected */
283 static bool is_reachable_path(struct hda_codec *codec,
284 hda_nid_t from_nid, hda_nid_t to_nid)
286 if (!from_nid || !to_nid)
288 return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
291 /* nid, dir and idx */
292 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
294 /* check whether the given ctl is already assigned in any path elements */
295 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
297 struct hda_gen_spec *spec = codec->spec;
300 val &= AMP_VAL_COMPARE_MASK;
301 for (i = 0; i < spec->paths.used; i++) {
302 struct nid_path *path = snd_array_elem(&spec->paths, i);
303 if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
309 /* check whether a control with the given (nid, dir, idx) was assigned */
310 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
313 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
314 return is_ctl_used(codec, val, NID_PATH_VOL_CTL) ||
315 is_ctl_used(codec, val, NID_PATH_MUTE_CTL);
318 static void print_nid_path(const char *pfx, struct nid_path *path)
325 for (i = 0; i < path->depth; i++) {
327 sprintf(tmp, ":%02x", path->path[i]);
328 strlcat(buf, tmp, sizeof(buf));
330 snd_printdd("%s path: depth=%d %s\n", pfx, path->depth, buf);
333 /* called recursively */
334 static bool __parse_nid_path(struct hda_codec *codec,
335 hda_nid_t from_nid, hda_nid_t to_nid,
336 int anchor_nid, struct nid_path *path,
339 const hda_nid_t *conn;
342 if (to_nid == anchor_nid)
343 anchor_nid = 0; /* anchor passed */
344 else if (to_nid == (hda_nid_t)(-anchor_nid))
345 return false; /* hit the exclusive nid */
347 nums = snd_hda_get_conn_list(codec, to_nid, &conn);
348 for (i = 0; i < nums; i++) {
349 if (conn[i] != from_nid) {
350 /* special case: when from_nid is 0,
351 * try to find an empty DAC
354 get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
355 is_dac_already_used(codec, conn[i]))
358 /* anchor is not requested or already passed? */
362 if (depth >= MAX_NID_PATH_DEPTH)
364 for (i = 0; i < nums; i++) {
366 type = get_wcaps_type(get_wcaps(codec, conn[i]));
367 if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
370 if (__parse_nid_path(codec, from_nid, conn[i],
371 anchor_nid, path, depth + 1))
377 path->path[path->depth] = conn[i];
378 path->idx[path->depth + 1] = i;
379 if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
380 path->multi[path->depth + 1] = 1;
385 /* parse the widget path from the given nid to the target nid;
386 * when @from_nid is 0, try to find an empty DAC;
387 * when @anchor_nid is set to a positive value, only paths through the widget
388 * with the given value are evaluated.
389 * when @anchor_nid is set to a negative value, paths through the widget
390 * with the negative of given value are excluded, only other paths are chosen.
391 * when @anchor_nid is zero, no special handling about path selection.
393 bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
394 hda_nid_t to_nid, int anchor_nid,
395 struct nid_path *path)
397 if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
398 path->path[path->depth] = to_nid;
404 EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path);
407 * parse the path between the given NIDs and add to the path list.
408 * if no valid path is found, return NULL
411 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
412 hda_nid_t to_nid, int anchor_nid)
414 struct hda_gen_spec *spec = codec->spec;
415 struct nid_path *path;
417 if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
420 /* check whether the path has been already added */
421 path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
425 path = snd_array_new(&spec->paths);
428 memset(path, 0, sizeof(*path));
429 if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
435 EXPORT_SYMBOL_HDA(snd_hda_add_new_path);
437 /* clear the given path as invalid so that it won't be picked up later */
438 static void invalidate_nid_path(struct hda_codec *codec, int idx)
440 struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
443 memset(path, 0, sizeof(*path));
446 /* look for an empty DAC slot */
447 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
450 struct hda_gen_spec *spec = codec->spec;
454 for (i = 0; i < spec->num_all_dacs; i++) {
455 hda_nid_t nid = spec->all_dacs[i];
456 if (!nid || is_dac_already_used(codec, nid))
458 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
459 if (is_digital != cap_digital)
461 if (is_reachable_path(codec, nid, pin))
467 /* replace the channels in the composed amp value with the given number */
468 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
470 val &= ~(0x3U << 16);
475 /* check whether the widget has the given amp capability for the direction */
476 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
477 int dir, unsigned int bits)
481 if (get_wcaps(codec, nid) & (1 << (dir + 1)))
482 if (query_amp_caps(codec, nid, dir) & bits)
487 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
488 hda_nid_t nid2, int dir)
490 if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
491 return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
492 return (query_amp_caps(codec, nid1, dir) ==
493 query_amp_caps(codec, nid2, dir));
496 #define nid_has_mute(codec, nid, dir) \
497 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE)
498 #define nid_has_volume(codec, nid, dir) \
499 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
501 /* look for a widget suitable for assigning a mute switch in the path */
502 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
503 struct nid_path *path)
507 for (i = path->depth - 1; i >= 0; i--) {
508 if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
509 return path->path[i];
510 if (i != path->depth - 1 && i != 0 &&
511 nid_has_mute(codec, path->path[i], HDA_INPUT))
512 return path->path[i];
517 /* look for a widget suitable for assigning a volume ctl in the path */
518 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
519 struct nid_path *path)
523 for (i = path->depth - 1; i >= 0; i--) {
524 if (nid_has_volume(codec, path->path[i], HDA_OUTPUT))
525 return path->path[i];
531 * path activation / deactivation
534 /* can have the amp-in capability? */
535 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
537 hda_nid_t nid = path->path[idx];
538 unsigned int caps = get_wcaps(codec, nid);
539 unsigned int type = get_wcaps_type(caps);
541 if (!(caps & AC_WCAP_IN_AMP))
543 if (type == AC_WID_PIN && idx > 0) /* only for input pins */
548 /* can have the amp-out capability? */
549 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
551 hda_nid_t nid = path->path[idx];
552 unsigned int caps = get_wcaps(codec, nid);
553 unsigned int type = get_wcaps_type(caps);
555 if (!(caps & AC_WCAP_OUT_AMP))
557 if (type == AC_WID_PIN && !idx) /* only for output pins */
562 /* check whether the given (nid,dir,idx) is active */
563 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
564 unsigned int idx, unsigned int dir)
566 struct hda_gen_spec *spec = codec->spec;
569 for (n = 0; n < spec->paths.used; n++) {
570 struct nid_path *path = snd_array_elem(&spec->paths, n);
573 for (i = 0; i < path->depth; i++) {
574 if (path->path[i] == nid) {
575 if (dir == HDA_OUTPUT || path->idx[i] == idx)
584 /* get the default amp value for the target state */
585 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
586 int dir, bool enable)
589 unsigned int val = 0;
591 caps = query_amp_caps(codec, nid, dir);
592 if (caps & AC_AMPCAP_NUM_STEPS) {
595 val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
597 if (caps & AC_AMPCAP_MUTE) {
604 /* initialize the amp value (only at the first time) */
605 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
607 int val = get_amp_val_to_activate(codec, nid, dir, false);
608 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
611 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
612 int idx, bool enable)
615 if (is_ctl_associated(codec, nid, dir, idx) ||
616 (!enable && is_active_nid(codec, nid, dir, idx)))
618 val = get_amp_val_to_activate(codec, nid, dir, enable);
619 snd_hda_codec_amp_stereo(codec, nid, dir, idx, 0xff, val);
622 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
625 hda_nid_t nid = path->path[i];
626 init_amp(codec, nid, HDA_OUTPUT, 0);
627 activate_amp(codec, nid, HDA_OUTPUT, 0, enable);
630 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
631 int i, bool enable, bool add_aamix)
633 struct hda_gen_spec *spec = codec->spec;
634 const hda_nid_t *conn;
637 hda_nid_t nid = path->path[i];
639 nums = snd_hda_get_conn_list(codec, nid, &conn);
640 type = get_wcaps_type(get_wcaps(codec, nid));
641 if (type == AC_WID_PIN ||
642 (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
648 for (n = 0; n < nums; n++)
649 init_amp(codec, nid, HDA_INPUT, n);
651 if (is_ctl_associated(codec, nid, HDA_INPUT, idx))
654 /* here is a little bit tricky in comparison with activate_amp_out();
655 * when aa-mixer is available, we need to enable the path as well
657 for (n = 0; n < nums; n++) {
658 if (n != idx && (!add_aamix || conn[n] != spec->mixer_nid))
660 activate_amp(codec, nid, HDA_INPUT, n, enable);
664 /* activate or deactivate the given path
665 * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
667 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
668 bool enable, bool add_aamix)
673 path->active = false;
675 for (i = path->depth - 1; i >= 0; i--) {
676 if (enable && path->multi[i])
677 snd_hda_codec_write_cache(codec, path->path[i], 0,
678 AC_VERB_SET_CONNECT_SEL,
680 if (has_amp_in(codec, path, i))
681 activate_amp_in(codec, path, i, enable, add_aamix);
682 if (has_amp_out(codec, path, i))
683 activate_amp_out(codec, path, i, enable);
689 EXPORT_SYMBOL_HDA(snd_hda_activate_path);
691 /* turn on/off EAPD on the given pin */
692 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
694 struct hda_gen_spec *spec = codec->spec;
695 if (spec->own_eapd_ctl ||
696 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
700 snd_hda_codec_update_cache(codec, pin, 0,
701 AC_VERB_SET_EAPD_BTLENABLE,
702 enable ? 0x02 : 0x00);
707 * Helper functions for creating mixer ctl elements
715 static const struct snd_kcontrol_new control_templates[] = {
716 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
717 HDA_CODEC_MUTE(NULL, 0, 0, 0),
718 HDA_BIND_MUTE(NULL, 0, 0, 0),
721 /* add dynamic controls from template */
722 static int add_control(struct hda_gen_spec *spec, int type, const char *name,
723 int cidx, unsigned long val)
725 struct snd_kcontrol_new *knew;
727 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
731 if (get_amp_nid_(val))
732 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
733 knew->private_value = val;
737 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
738 const char *pfx, const char *dir,
739 const char *sfx, int cidx, unsigned long val)
742 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
743 return add_control(spec, type, name, cidx, val);
746 #define add_pb_vol_ctrl(spec, type, pfx, val) \
747 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
748 #define add_pb_sw_ctrl(spec, type, pfx, val) \
749 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
750 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
751 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
752 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
753 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
755 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
756 unsigned int chs, struct nid_path *path)
761 val = path->ctls[NID_PATH_VOL_CTL];
764 val = amp_val_replace_channels(val, chs);
765 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
768 /* return the channel bits suitable for the given path->ctls[] */
769 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
772 int chs = 1; /* mono (left only) */
774 hda_nid_t nid = get_amp_nid_(path->ctls[type]);
775 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
776 chs = 3; /* stereo */
781 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
782 struct nid_path *path)
784 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
785 return add_vol_ctl(codec, pfx, cidx, chs, path);
788 /* create a mute-switch for the given mixer widget;
789 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
791 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
792 unsigned int chs, struct nid_path *path)
795 int type = HDA_CTL_WIDGET_MUTE;
799 val = path->ctls[NID_PATH_MUTE_CTL];
802 val = amp_val_replace_channels(val, chs);
803 if (get_amp_direction_(val) == HDA_INPUT) {
804 hda_nid_t nid = get_amp_nid_(val);
805 int nums = snd_hda_get_num_conns(codec, nid);
807 type = HDA_CTL_BIND_MUTE;
811 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
814 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
815 int cidx, struct nid_path *path)
817 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
818 return add_sw_ctl(codec, pfx, cidx, chs, path);
821 static const char * const channel_name[4] = {
822 "Front", "Surround", "CLFE", "Side"
825 /* give some appropriate ctl name prefix for the given line out channel */
826 static const char *get_line_out_pfx(struct hda_gen_spec *spec, int ch,
827 bool can_be_master, int *index)
829 struct auto_pin_cfg *cfg = &spec->autocfg;
832 if (cfg->line_outs == 1 && !spec->multi_ios &&
833 !cfg->hp_outs && !cfg->speaker_outs && can_be_master)
834 return spec->vmaster_mute.hook ? "PCM" : "Master";
836 /* if there is really a single DAC used in the whole output paths,
837 * use it master (or "PCM" if a vmaster hook is present)
839 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
840 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
841 return spec->vmaster_mute.hook ? "PCM" : "Master";
843 switch (cfg->line_out_type) {
844 case AUTO_PIN_SPEAKER_OUT:
845 if (cfg->line_outs == 1)
847 if (cfg->line_outs == 2)
848 return ch ? "Bass Speaker" : "Speaker";
850 case AUTO_PIN_HP_OUT:
851 /* for multi-io case, only the primary out */
852 if (ch && spec->multi_ios)
857 if (cfg->line_outs == 1 && !spec->multi_ios)
861 if (ch >= ARRAY_SIZE(channel_name)) {
866 return channel_name[ch];
873 /* badness definition */
875 /* No primary DAC is found for the main output */
876 BAD_NO_PRIMARY_DAC = 0x10000,
877 /* No DAC is found for the extra output */
879 /* No possible multi-ios */
880 BAD_MULTI_IO = 0x103,
881 /* No individual DAC for extra output */
882 BAD_NO_EXTRA_DAC = 0x102,
883 /* No individual DAC for extra surrounds */
884 BAD_NO_EXTRA_SURR_DAC = 0x101,
885 /* Primary DAC shared with main surrounds */
886 BAD_SHARED_SURROUND = 0x100,
887 /* Primary DAC shared with main CLFE */
888 BAD_SHARED_CLFE = 0x10,
889 /* Primary DAC shared with extra surrounds */
890 BAD_SHARED_EXTRA_SURROUND = 0x10,
891 /* Volume widget is shared */
892 BAD_SHARED_VOL = 0x10,
895 /* look for widgets in the given path which are appropriate for
896 * volume and mute controls, and assign the values to ctls[].
898 * When no appropriate widget is found in the path, the badness value
899 * is incremented depending on the situation. The function returns the
900 * total badness for both volume and mute controls.
902 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
909 return BAD_SHARED_VOL * 2;
911 if (path->ctls[NID_PATH_VOL_CTL] ||
912 path->ctls[NID_PATH_MUTE_CTL])
913 return 0; /* already evaluated */
915 nid = look_for_out_vol_nid(codec, path);
917 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
918 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
919 badness += BAD_SHARED_VOL;
921 path->ctls[NID_PATH_VOL_CTL] = val;
923 badness += BAD_SHARED_VOL;
924 nid = look_for_out_mute_nid(codec, path);
926 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
927 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
928 nid_has_mute(codec, nid, HDA_OUTPUT))
929 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
931 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
932 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
933 badness += BAD_SHARED_VOL;
935 path->ctls[NID_PATH_MUTE_CTL] = val;
937 badness += BAD_SHARED_VOL;
941 struct badness_table {
942 int no_primary_dac; /* no primary DAC */
943 int no_dac; /* no secondary DACs */
944 int shared_primary; /* primary DAC is shared with main output */
945 int shared_surr; /* secondary DAC shared with main or primary */
946 int shared_clfe; /* third DAC shared with main or primary */
947 int shared_surr_main; /* secondary DAC sahred with main/DAC0 */
950 static struct badness_table main_out_badness = {
951 .no_primary_dac = BAD_NO_PRIMARY_DAC,
952 .no_dac = BAD_NO_DAC,
953 .shared_primary = BAD_NO_PRIMARY_DAC,
954 .shared_surr = BAD_SHARED_SURROUND,
955 .shared_clfe = BAD_SHARED_CLFE,
956 .shared_surr_main = BAD_SHARED_SURROUND,
959 static struct badness_table extra_out_badness = {
960 .no_primary_dac = BAD_NO_DAC,
961 .no_dac = BAD_NO_DAC,
962 .shared_primary = BAD_NO_EXTRA_DAC,
963 .shared_surr = BAD_SHARED_EXTRA_SURROUND,
964 .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
965 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
968 /* get the DAC of the primary output corresponding to the given array index */
969 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
971 struct hda_gen_spec *spec = codec->spec;
972 struct auto_pin_cfg *cfg = &spec->autocfg;
974 if (cfg->line_outs > idx)
975 return spec->private_dac_nids[idx];
976 idx -= cfg->line_outs;
977 if (spec->multi_ios > idx)
978 return spec->multi_io[idx].dac;
982 /* return the DAC if it's reachable, otherwise zero */
983 static inline hda_nid_t try_dac(struct hda_codec *codec,
984 hda_nid_t dac, hda_nid_t pin)
986 return is_reachable_path(codec, dac, pin) ? dac : 0;
989 /* try to assign DACs to pins and return the resultant badness */
990 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
991 const hda_nid_t *pins, hda_nid_t *dacs,
993 const struct badness_table *bad)
995 struct hda_gen_spec *spec = codec->spec;
1003 for (i = 0; i < num_outs; i++) {
1004 struct nid_path *path;
1005 hda_nid_t pin = pins[i];
1007 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1009 badness += assign_out_path_ctls(codec, path);
1013 dacs[i] = look_for_dac(codec, pin, false);
1014 if (!dacs[i] && !i) {
1015 /* try to steal the DAC of surrounds for the front */
1016 for (j = 1; j < num_outs; j++) {
1017 if (is_reachable_path(codec, dacs[j], pin)) {
1020 invalidate_nid_path(codec, path_idx[j]);
1029 dac = try_dac(codec, get_primary_out(codec, i), pin);
1031 dac = try_dac(codec, dacs[0], pin);
1033 dac = try_dac(codec, get_primary_out(codec, i), pin);
1036 badness += bad->shared_primary;
1038 badness += bad->shared_surr;
1040 badness += bad->shared_clfe;
1041 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1042 dac = spec->private_dac_nids[0];
1043 badness += bad->shared_surr_main;
1045 badness += bad->no_primary_dac;
1047 badness += bad->no_dac;
1049 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1050 if (!path && !i && spec->mixer_nid) {
1051 /* try with aamix */
1052 path = snd_hda_add_new_path(codec, dac, pin, 0);
1057 print_nid_path("output", path);
1058 path->active = true;
1059 path_idx[i] = snd_hda_get_path_idx(codec, path);
1060 badness += assign_out_path_ctls(codec, path);
1067 /* return NID if the given pin has only a single connection to a certain DAC */
1068 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1070 struct hda_gen_spec *spec = codec->spec;
1072 hda_nid_t nid_found = 0;
1074 for (i = 0; i < spec->num_all_dacs; i++) {
1075 hda_nid_t nid = spec->all_dacs[i];
1076 if (!nid || is_dac_already_used(codec, nid))
1078 if (is_reachable_path(codec, nid, pin)) {
1087 /* check whether the given pin can be a multi-io pin */
1088 static bool can_be_multiio_pin(struct hda_codec *codec,
1089 unsigned int location, hda_nid_t nid)
1091 unsigned int defcfg, caps;
1093 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1094 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1096 if (location && get_defcfg_location(defcfg) != location)
1098 caps = snd_hda_query_pin_caps(codec, nid);
1099 if (!(caps & AC_PINCAP_OUT))
1104 /* count the number of input pins that are capable to be multi-io */
1105 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1107 struct hda_gen_spec *spec = codec->spec;
1108 struct auto_pin_cfg *cfg = &spec->autocfg;
1109 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1110 unsigned int location = get_defcfg_location(defcfg);
1114 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1115 for (i = 0; i < cfg->num_inputs; i++) {
1116 if (cfg->inputs[i].type != type)
1118 if (can_be_multiio_pin(codec, location,
1119 cfg->inputs[i].pin))
1129 * When hardwired is set, try to fill ony hardwired pins, and returns
1130 * zero if any pins are filled, non-zero if nothing found.
1131 * When hardwired is off, try to fill possible input pins, and returns
1132 * the badness value.
1134 static int fill_multi_ios(struct hda_codec *codec,
1135 hda_nid_t reference_pin,
1138 struct hda_gen_spec *spec = codec->spec;
1139 struct auto_pin_cfg *cfg = &spec->autocfg;
1140 int type, i, j, num_pins, old_pins;
1141 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1142 unsigned int location = get_defcfg_location(defcfg);
1144 struct nid_path *path;
1146 old_pins = spec->multi_ios;
1150 num_pins = count_multiio_pins(codec, reference_pin);
1154 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1155 for (i = 0; i < cfg->num_inputs; i++) {
1156 hda_nid_t nid = cfg->inputs[i].pin;
1159 if (cfg->inputs[i].type != type)
1161 if (!can_be_multiio_pin(codec, location, nid))
1163 for (j = 0; j < spec->multi_ios; j++) {
1164 if (nid == spec->multi_io[j].pin)
1167 if (j < spec->multi_ios)
1171 dac = get_dac_if_single(codec, nid);
1173 dac = look_for_dac(codec, nid, false);
1178 path = snd_hda_add_new_path(codec, dac, nid,
1184 print_nid_path("multiio", path);
1185 spec->multi_io[spec->multi_ios].pin = nid;
1186 spec->multi_io[spec->multi_ios].dac = dac;
1187 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1188 snd_hda_get_path_idx(codec, path);
1190 if (spec->multi_ios >= 2)
1196 badness = BAD_MULTI_IO;
1197 if (old_pins == spec->multi_ios) {
1199 return 1; /* nothing found */
1201 return badness; /* no badness if nothing found */
1203 if (!hardwired && spec->multi_ios < 2) {
1204 /* cancel newly assigned paths */
1205 spec->paths.used -= spec->multi_ios - old_pins;
1206 spec->multi_ios = old_pins;
1210 /* assign volume and mute controls */
1211 for (i = old_pins; i < spec->multi_ios; i++) {
1212 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1213 badness += assign_out_path_ctls(codec, path);
1219 /* map DACs for all pins in the list if they are single connections */
1220 static bool map_singles(struct hda_codec *codec, int outs,
1221 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1223 struct hda_gen_spec *spec = codec->spec;
1226 for (i = 0; i < outs; i++) {
1227 struct nid_path *path;
1231 dac = get_dac_if_single(codec, pins[i]);
1234 path = snd_hda_add_new_path(codec, dac, pins[i],
1236 if (!path && !i && spec->mixer_nid)
1237 path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1241 print_nid_path("output", path);
1242 path->active = true;
1243 path_idx[i] = snd_hda_get_path_idx(codec, path);
1249 /* create a new path including aamix if available, and return its index */
1250 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1252 struct hda_gen_spec *spec = codec->spec;
1253 struct nid_path *path;
1255 path = snd_hda_get_path_from_idx(codec, path_idx);
1256 if (!path || !path->depth ||
1257 is_nid_contained(path, spec->mixer_nid))
1259 path = snd_hda_add_new_path(codec, path->path[0],
1260 path->path[path->depth - 1],
1264 print_nid_path("output-aamix", path);
1265 path->active = false; /* unused as default */
1266 return snd_hda_get_path_idx(codec, path);
1269 /* fill the empty entries in the dac array for speaker/hp with the
1270 * shared dac pointed by the paths
1272 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1273 hda_nid_t *dacs, int *path_idx)
1275 struct nid_path *path;
1278 for (i = 0; i < num_outs; i++) {
1281 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1284 dacs[i] = path->path[0];
1288 /* fill in the dac_nids table from the parsed pin configuration */
1289 static int fill_and_eval_dacs(struct hda_codec *codec,
1290 bool fill_hardwired,
1291 bool fill_mio_first)
1293 struct hda_gen_spec *spec = codec->spec;
1294 struct auto_pin_cfg *cfg = &spec->autocfg;
1295 int i, err, badness;
1298 /* set num_dacs once to full for look_for_dac() */
1299 spec->multiout.num_dacs = cfg->line_outs;
1300 spec->multiout.dac_nids = spec->private_dac_nids;
1301 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1302 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1303 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1304 spec->multi_ios = 0;
1305 snd_array_free(&spec->paths);
1307 /* clear path indices */
1308 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1309 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1310 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1311 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1312 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1313 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1314 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1315 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1319 /* fill hard-wired DACs first */
1320 if (fill_hardwired) {
1323 mapped = map_singles(codec, cfg->line_outs,
1325 spec->private_dac_nids,
1327 mapped |= map_singles(codec, cfg->hp_outs,
1329 spec->multiout.hp_out_nid,
1331 mapped |= map_singles(codec, cfg->speaker_outs,
1333 spec->multiout.extra_out_nid,
1334 spec->speaker_paths);
1335 if (fill_mio_first && cfg->line_outs == 1 &&
1336 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1337 err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1344 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1345 spec->private_dac_nids, spec->out_paths,
1348 if (fill_mio_first &&
1349 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1350 /* try to fill multi-io first */
1351 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1354 /* we don't count badness at this stage yet */
1357 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1358 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1359 spec->multiout.hp_out_nid,
1361 &extra_out_badness);
1366 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1367 err = try_assign_dacs(codec, cfg->speaker_outs,
1369 spec->multiout.extra_out_nid,
1370 spec->speaker_paths,
1371 &extra_out_badness);
1376 if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1377 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1383 if (spec->mixer_nid) {
1384 spec->aamix_out_paths[0] =
1385 check_aamix_out_path(codec, spec->out_paths[0]);
1386 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1387 spec->aamix_out_paths[1] =
1388 check_aamix_out_path(codec, spec->hp_paths[0]);
1389 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1390 spec->aamix_out_paths[2] =
1391 check_aamix_out_path(codec, spec->speaker_paths[0]);
1394 if (cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1395 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1396 spec->multi_ios = 1; /* give badness */
1398 /* re-count num_dacs and squash invalid entries */
1399 spec->multiout.num_dacs = 0;
1400 for (i = 0; i < cfg->line_outs; i++) {
1401 if (spec->private_dac_nids[i])
1402 spec->multiout.num_dacs++;
1404 memmove(spec->private_dac_nids + i,
1405 spec->private_dac_nids + i + 1,
1406 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1407 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1411 spec->ext_channel_count = spec->min_channel_count =
1412 spec->multiout.num_dacs * 2;
1414 if (spec->multi_ios == 2) {
1415 for (i = 0; i < 2; i++)
1416 spec->private_dac_nids[spec->multiout.num_dacs++] =
1417 spec->multi_io[i].dac;
1418 } else if (spec->multi_ios) {
1419 spec->multi_ios = 0;
1420 badness += BAD_MULTI_IO;
1423 /* re-fill the shared DAC for speaker / headphone */
1424 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1425 refill_shared_dacs(codec, cfg->hp_outs,
1426 spec->multiout.hp_out_nid,
1428 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1429 refill_shared_dacs(codec, cfg->speaker_outs,
1430 spec->multiout.extra_out_nid,
1431 spec->speaker_paths);
1433 /* set initial pinctl targets */
1434 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
1438 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
1439 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1440 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
1441 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1442 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
1443 set_pin_targets(codec, cfg->speaker_outs,
1444 cfg->speaker_pins, val);
1450 #define DEBUG_BADNESS
1452 #ifdef DEBUG_BADNESS
1453 #define debug_badness snd_printdd
1455 #define debug_badness(...)
1458 static void debug_show_configs(struct hda_gen_spec *spec, struct auto_pin_cfg *cfg)
1460 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1461 cfg->line_out_pins[0], cfg->line_out_pins[1],
1462 cfg->line_out_pins[2], cfg->line_out_pins[3],
1463 spec->multiout.dac_nids[0],
1464 spec->multiout.dac_nids[1],
1465 spec->multiout.dac_nids[2],
1466 spec->multiout.dac_nids[3]);
1467 if (spec->multi_ios > 0)
1468 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1470 spec->multi_io[0].pin, spec->multi_io[1].pin,
1471 spec->multi_io[0].dac, spec->multi_io[1].dac);
1472 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1473 cfg->hp_pins[0], cfg->hp_pins[1],
1474 cfg->hp_pins[2], cfg->hp_pins[3],
1475 spec->multiout.hp_out_nid[0],
1476 spec->multiout.hp_out_nid[1],
1477 spec->multiout.hp_out_nid[2],
1478 spec->multiout.hp_out_nid[3]);
1479 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1480 cfg->speaker_pins[0], cfg->speaker_pins[1],
1481 cfg->speaker_pins[2], cfg->speaker_pins[3],
1482 spec->multiout.extra_out_nid[0],
1483 spec->multiout.extra_out_nid[1],
1484 spec->multiout.extra_out_nid[2],
1485 spec->multiout.extra_out_nid[3]);
1488 /* find all available DACs of the codec */
1489 static void fill_all_dac_nids(struct hda_codec *codec)
1491 struct hda_gen_spec *spec = codec->spec;
1493 hda_nid_t nid = codec->start_nid;
1495 spec->num_all_dacs = 0;
1496 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1497 for (i = 0; i < codec->num_nodes; i++, nid++) {
1498 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1500 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1501 snd_printk(KERN_ERR "hda: Too many DACs!\n");
1504 spec->all_dacs[spec->num_all_dacs++] = nid;
1508 static int parse_output_paths(struct hda_codec *codec)
1510 struct hda_gen_spec *spec = codec->spec;
1511 struct auto_pin_cfg *cfg = &spec->autocfg;
1512 struct auto_pin_cfg *best_cfg;
1513 int best_badness = INT_MAX;
1515 bool fill_hardwired = true, fill_mio_first = true;
1516 bool best_wired = true, best_mio = true;
1517 bool hp_spk_swapped = false;
1519 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1525 badness = fill_and_eval_dacs(codec, fill_hardwired,
1531 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1532 cfg->line_out_type, fill_hardwired, fill_mio_first,
1534 debug_show_configs(spec, cfg);
1535 if (badness < best_badness) {
1536 best_badness = badness;
1538 best_wired = fill_hardwired;
1539 best_mio = fill_mio_first;
1543 fill_mio_first = !fill_mio_first;
1544 if (!fill_mio_first)
1546 fill_hardwired = !fill_hardwired;
1547 if (!fill_hardwired)
1551 hp_spk_swapped = true;
1552 if (cfg->speaker_outs > 0 &&
1553 cfg->line_out_type == AUTO_PIN_HP_OUT) {
1554 cfg->hp_outs = cfg->line_outs;
1555 memcpy(cfg->hp_pins, cfg->line_out_pins,
1556 sizeof(cfg->hp_pins));
1557 cfg->line_outs = cfg->speaker_outs;
1558 memcpy(cfg->line_out_pins, cfg->speaker_pins,
1559 sizeof(cfg->speaker_pins));
1560 cfg->speaker_outs = 0;
1561 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1562 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1563 fill_hardwired = true;
1566 if (cfg->hp_outs > 0 &&
1567 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1568 cfg->speaker_outs = cfg->line_outs;
1569 memcpy(cfg->speaker_pins, cfg->line_out_pins,
1570 sizeof(cfg->speaker_pins));
1571 cfg->line_outs = cfg->hp_outs;
1572 memcpy(cfg->line_out_pins, cfg->hp_pins,
1573 sizeof(cfg->hp_pins));
1575 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1576 cfg->line_out_type = AUTO_PIN_HP_OUT;
1577 fill_hardwired = true;
1584 debug_badness("==> restoring best_cfg\n");
1586 fill_and_eval_dacs(codec, best_wired, best_mio);
1588 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1589 cfg->line_out_type, best_wired, best_mio);
1590 debug_show_configs(spec, cfg);
1592 if (cfg->line_out_pins[0]) {
1593 struct nid_path *path;
1594 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
1596 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
1603 /* add playback controls from the parsed DAC table */
1604 static int create_multi_out_ctls(struct hda_codec *codec,
1605 const struct auto_pin_cfg *cfg)
1607 struct hda_gen_spec *spec = codec->spec;
1608 int i, err, noutputs;
1610 noutputs = cfg->line_outs;
1611 if (spec->multi_ios > 0 && cfg->line_outs < 3)
1612 noutputs += spec->multi_ios;
1614 for (i = 0; i < noutputs; i++) {
1617 struct nid_path *path;
1619 if (i >= cfg->line_outs) {
1621 name = channel_name[i];
1623 name = get_line_out_pfx(spec, i, true, &index);
1626 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1629 if (!name || !strcmp(name, "CLFE")) {
1631 err = add_vol_ctl(codec, "Center", 0, 1, path);
1634 err = add_vol_ctl(codec, "LFE", 0, 2, path);
1637 err = add_sw_ctl(codec, "Center", 0, 1, path);
1640 err = add_sw_ctl(codec, "LFE", 0, 2, path);
1644 err = add_stereo_vol(codec, name, index, path);
1647 err = add_stereo_sw(codec, name, index, path);
1655 static int create_extra_out(struct hda_codec *codec, int path_idx,
1656 const char *pfx, int cidx)
1658 struct nid_path *path;
1661 path = snd_hda_get_path_from_idx(codec, path_idx);
1664 err = add_stereo_vol(codec, pfx, cidx, path);
1667 err = add_stereo_sw(codec, pfx, cidx, path);
1673 /* add playback controls for speaker and HP outputs */
1674 static int create_extra_outs(struct hda_codec *codec, int num_pins,
1675 const int *paths, const char *pfx)
1679 for (i = 0; i < num_pins; i++) {
1684 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
1685 name = "Bass Speaker";
1686 else if (num_pins >= 3) {
1687 snprintf(tmp, sizeof(tmp), "%s %s",
1688 pfx, channel_name[i]);
1694 err = create_extra_out(codec, paths[i], name, idx);
1701 static int create_hp_out_ctls(struct hda_codec *codec)
1703 struct hda_gen_spec *spec = codec->spec;
1704 return create_extra_outs(codec, spec->autocfg.hp_outs,
1709 static int create_speaker_out_ctls(struct hda_codec *codec)
1711 struct hda_gen_spec *spec = codec->spec;
1712 return create_extra_outs(codec, spec->autocfg.speaker_outs,
1713 spec->speaker_paths,
1718 * independent HP controls
1721 static int indep_hp_info(struct snd_kcontrol *kcontrol,
1722 struct snd_ctl_elem_info *uinfo)
1724 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
1727 static int indep_hp_get(struct snd_kcontrol *kcontrol,
1728 struct snd_ctl_elem_value *ucontrol)
1730 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1731 struct hda_gen_spec *spec = codec->spec;
1732 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
1736 static int indep_hp_put(struct snd_kcontrol *kcontrol,
1737 struct snd_ctl_elem_value *ucontrol)
1739 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1740 struct hda_gen_spec *spec = codec->spec;
1741 unsigned int select = ucontrol->value.enumerated.item[0];
1744 mutex_lock(&spec->pcm_mutex);
1745 if (spec->active_streams) {
1750 if (spec->indep_hp_enabled != select) {
1751 spec->indep_hp_enabled = select;
1752 if (spec->indep_hp_enabled)
1753 spec->multiout.hp_out_nid[0] = 0;
1755 spec->multiout.hp_out_nid[0] = spec->alt_dac_nid;
1759 mutex_unlock(&spec->pcm_mutex);
1763 static const struct snd_kcontrol_new indep_hp_ctl = {
1764 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1765 .name = "Independent HP",
1766 .info = indep_hp_info,
1767 .get = indep_hp_get,
1768 .put = indep_hp_put,
1772 static int create_indep_hp_ctls(struct hda_codec *codec)
1774 struct hda_gen_spec *spec = codec->spec;
1776 if (!spec->indep_hp)
1778 if (!spec->multiout.hp_out_nid[0]) {
1783 spec->indep_hp_enabled = false;
1784 spec->alt_dac_nid = spec->multiout.hp_out_nid[0];
1785 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
1791 * channel mode enum control
1794 static int ch_mode_info(struct snd_kcontrol *kcontrol,
1795 struct snd_ctl_elem_info *uinfo)
1797 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1798 struct hda_gen_spec *spec = codec->spec;
1801 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1803 uinfo->value.enumerated.items = spec->multi_ios + 1;
1804 if (uinfo->value.enumerated.item > spec->multi_ios)
1805 uinfo->value.enumerated.item = spec->multi_ios;
1806 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
1807 sprintf(uinfo->value.enumerated.name, "%dch", chs);
1811 static int ch_mode_get(struct snd_kcontrol *kcontrol,
1812 struct snd_ctl_elem_value *ucontrol)
1814 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1815 struct hda_gen_spec *spec = codec->spec;
1816 ucontrol->value.enumerated.item[0] =
1817 (spec->ext_channel_count - spec->min_channel_count) / 2;
1821 static inline struct nid_path *
1822 get_multiio_path(struct hda_codec *codec, int idx)
1824 struct hda_gen_spec *spec = codec->spec;
1825 return snd_hda_get_path_from_idx(codec,
1826 spec->out_paths[spec->autocfg.line_outs + idx]);
1829 static void update_automute_all(struct hda_codec *codec);
1831 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
1833 struct hda_gen_spec *spec = codec->spec;
1834 hda_nid_t nid = spec->multi_io[idx].pin;
1835 struct nid_path *path;
1837 path = get_multiio_path(codec, idx);
1841 if (path->active == output)
1845 set_pin_target(codec, nid, PIN_OUT, true);
1846 snd_hda_activate_path(codec, path, true, true);
1847 set_pin_eapd(codec, nid, true);
1849 set_pin_eapd(codec, nid, false);
1850 snd_hda_activate_path(codec, path, false, true);
1851 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
1854 /* update jack retasking in case it modifies any of them */
1855 update_automute_all(codec);
1860 static int ch_mode_put(struct snd_kcontrol *kcontrol,
1861 struct snd_ctl_elem_value *ucontrol)
1863 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1864 struct hda_gen_spec *spec = codec->spec;
1867 ch = ucontrol->value.enumerated.item[0];
1868 if (ch < 0 || ch > spec->multi_ios)
1870 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
1872 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
1873 for (i = 0; i < spec->multi_ios; i++)
1874 set_multi_io(codec, i, i < ch);
1875 spec->multiout.max_channels = max(spec->ext_channel_count,
1876 spec->const_channel_count);
1877 if (spec->need_dac_fix)
1878 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
1882 static const struct snd_kcontrol_new channel_mode_enum = {
1883 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1884 .name = "Channel Mode",
1885 .info = ch_mode_info,
1890 static int create_multi_channel_mode(struct hda_codec *codec)
1892 struct hda_gen_spec *spec = codec->spec;
1894 if (spec->multi_ios > 0) {
1895 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
1902 * aamix loopback enable/disable switch
1905 #define loopback_mixing_info indep_hp_info
1907 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
1908 struct snd_ctl_elem_value *ucontrol)
1910 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1911 struct hda_gen_spec *spec = codec->spec;
1912 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
1916 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
1917 int nomix_path_idx, int mix_path_idx)
1919 struct nid_path *nomix_path, *mix_path;
1921 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
1922 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
1923 if (!nomix_path || !mix_path)
1926 snd_hda_activate_path(codec, nomix_path, false, true);
1927 snd_hda_activate_path(codec, mix_path, true, true);
1929 snd_hda_activate_path(codec, mix_path, false, true);
1930 snd_hda_activate_path(codec, nomix_path, true, true);
1934 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
1935 struct snd_ctl_elem_value *ucontrol)
1937 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1938 struct hda_gen_spec *spec = codec->spec;
1939 unsigned int val = ucontrol->value.enumerated.item[0];
1941 if (val == spec->aamix_mode)
1943 spec->aamix_mode = val;
1944 update_aamix_paths(codec, val, spec->out_paths[0],
1945 spec->aamix_out_paths[0]);
1946 update_aamix_paths(codec, val, spec->hp_paths[0],
1947 spec->aamix_out_paths[1]);
1948 update_aamix_paths(codec, val, spec->speaker_paths[0],
1949 spec->aamix_out_paths[2]);
1953 static const struct snd_kcontrol_new loopback_mixing_enum = {
1954 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1955 .name = "Loopback Mixing",
1956 .info = loopback_mixing_info,
1957 .get = loopback_mixing_get,
1958 .put = loopback_mixing_put,
1961 static int create_loopback_mixing_ctl(struct hda_codec *codec)
1963 struct hda_gen_spec *spec = codec->spec;
1965 if (!spec->mixer_nid)
1967 if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
1968 spec->aamix_out_paths[2]))
1970 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
1976 * shared headphone/mic handling
1979 static void call_update_outputs(struct hda_codec *codec);
1981 /* for shared I/O, change the pin-control accordingly */
1982 static void update_shared_mic_hp(struct hda_codec *codec, bool set_as_mic)
1984 struct hda_gen_spec *spec = codec->spec;
1986 hda_nid_t pin = spec->autocfg.inputs[1].pin;
1987 /* NOTE: this assumes that there are only two inputs, the
1988 * first is the real internal mic and the second is HP/mic jack.
1991 val = snd_hda_get_default_vref(codec, pin);
1993 /* This pin does not have vref caps - let's enable vref on pin 0x18
1994 instead, as suggested by Realtek */
1995 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
1996 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
1997 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
1998 if (vref_val != AC_PINCTL_VREF_HIZ)
1999 snd_hda_set_pin_ctl_cache(codec, vref_pin,
2000 PIN_IN | (set_as_mic ? vref_val : 0));
2003 val = set_as_mic ? val | PIN_IN : PIN_HP;
2004 set_pin_target(codec, pin, val, true);
2006 spec->automute_speaker = !set_as_mic;
2007 call_update_outputs(codec);
2010 /* create a shared input with the headphone out */
2011 static int create_shared_input(struct hda_codec *codec)
2013 struct hda_gen_spec *spec = codec->spec;
2014 struct auto_pin_cfg *cfg = &spec->autocfg;
2015 unsigned int defcfg;
2018 /* only one internal input pin? */
2019 if (cfg->num_inputs != 1)
2021 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2022 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2025 if (cfg->hp_outs == 1 && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
2026 nid = cfg->hp_pins[0]; /* OK, we have a single HP-out */
2027 else if (cfg->line_outs == 1 && cfg->line_out_type == AUTO_PIN_HP_OUT)
2028 nid = cfg->line_out_pins[0]; /* OK, we have a single line-out */
2030 return 0; /* both not available */
2032 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2033 return 0; /* no input */
2035 cfg->inputs[1].pin = nid;
2036 cfg->inputs[1].type = AUTO_PIN_MIC;
2037 cfg->num_inputs = 2;
2038 spec->shared_mic_hp = 1;
2039 snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid);
2046 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2047 struct snd_ctl_elem_info *uinfo)
2049 static const char * const texts[] = {
2050 "Line Out", "Headphone Out",
2052 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, texts);
2055 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2056 struct snd_ctl_elem_value *ucontrol)
2058 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2059 hda_nid_t nid = kcontrol->private_value;
2060 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2061 ucontrol->value.enumerated.item[0] = 1;
2063 ucontrol->value.enumerated.item[0] = 0;
2067 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2068 struct snd_ctl_elem_value *ucontrol)
2070 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2071 hda_nid_t nid = kcontrol->private_value;
2074 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2075 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2077 snd_hda_set_pin_ctl_cache(codec, nid, val);
2081 static const struct snd_kcontrol_new out_jack_mode_enum = {
2082 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2083 .info = out_jack_mode_info,
2084 .get = out_jack_mode_get,
2085 .put = out_jack_mode_put,
2088 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2090 struct hda_gen_spec *spec = codec->spec;
2093 for (i = 0; i < spec->kctls.used; i++) {
2094 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2095 if (!strcmp(kctl->name, name) && kctl->index == idx)
2101 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2102 char *name, size_t name_len)
2104 struct hda_gen_spec *spec = codec->spec;
2107 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2108 strlcat(name, " Jack Mode", name_len);
2110 for (; find_kctl_name(codec, name, idx); idx++)
2114 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2117 struct hda_gen_spec *spec = codec->spec;
2120 for (i = 0; i < num_pins; i++) {
2121 hda_nid_t pin = pins[i];
2122 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2123 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV)) {
2124 struct snd_kcontrol_new *knew;
2126 get_jack_mode_name(codec, pin, name, sizeof(name));
2127 knew = snd_hda_gen_add_kctl(spec, name,
2128 &out_jack_mode_enum);
2131 knew->private_value = pin;
2144 /* add the powersave loopback-list entry */
2145 static void add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2147 struct hda_amp_list *list;
2149 if (spec->num_loopbacks >= ARRAY_SIZE(spec->loopback_list) - 1)
2151 list = spec->loopback_list + spec->num_loopbacks;
2153 list->dir = HDA_INPUT;
2155 spec->num_loopbacks++;
2156 spec->loopback.amplist = spec->loopback_list;
2159 #define add_loopback_list(spec, mix, idx) /* NOP */
2162 /* create input playback/capture controls for the given pin */
2163 static int new_analog_input(struct hda_codec *codec, int input_idx,
2164 hda_nid_t pin, const char *ctlname, int ctlidx,
2167 struct hda_gen_spec *spec = codec->spec;
2168 struct nid_path *path;
2172 if (!nid_has_volume(codec, mix_nid, HDA_INPUT) &&
2173 !nid_has_mute(codec, mix_nid, HDA_INPUT))
2174 return 0; /* no need for analog loopback */
2176 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2179 print_nid_path("loopback", path);
2180 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2182 idx = path->idx[path->depth - 1];
2183 if (nid_has_volume(codec, mix_nid, HDA_INPUT)) {
2184 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2185 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val);
2188 path->ctls[NID_PATH_VOL_CTL] = val;
2191 if (nid_has_mute(codec, mix_nid, HDA_INPUT)) {
2192 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2193 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val);
2196 path->ctls[NID_PATH_MUTE_CTL] = val;
2199 path->active = true;
2200 add_loopback_list(spec, mix_nid, idx);
2204 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2206 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2207 return (pincap & AC_PINCAP_IN) != 0;
2210 /* Parse the codec tree and retrieve ADCs */
2211 static int fill_adc_nids(struct hda_codec *codec)
2213 struct hda_gen_spec *spec = codec->spec;
2215 hda_nid_t *adc_nids = spec->adc_nids;
2216 int max_nums = ARRAY_SIZE(spec->adc_nids);
2219 nid = codec->start_nid;
2220 for (i = 0; i < codec->num_nodes; i++, nid++) {
2221 unsigned int caps = get_wcaps(codec, nid);
2222 int type = get_wcaps_type(caps);
2224 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2226 adc_nids[nums] = nid;
2227 if (++nums >= max_nums)
2230 spec->num_adc_nids = nums;
2234 /* filter out invalid adc_nids that don't give all active input pins;
2235 * if needed, check whether dynamic ADC-switching is available
2237 static int check_dyn_adc_switch(struct hda_codec *codec)
2239 struct hda_gen_spec *spec = codec->spec;
2240 struct hda_input_mux *imux = &spec->input_mux;
2241 unsigned int ok_bits;
2247 for (n = 0; n < spec->num_adc_nids; n++) {
2248 for (i = 0; i < imux->num_items; i++) {
2249 if (!spec->input_paths[i][n])
2252 if (i >= imux->num_items) {
2253 ok_bits |= (1 << n);
2259 if (spec->shared_mic_hp) {
2260 spec->shared_mic_hp = 0;
2261 imux->num_items = 1;
2265 /* check whether ADC-switch is possible */
2266 for (i = 0; i < imux->num_items; i++) {
2267 for (n = 0; n < spec->num_adc_nids; n++) {
2268 if (spec->input_paths[i][n]) {
2269 spec->dyn_adc_idx[i] = n;
2275 snd_printdd("hda-codec: enabling ADC switching\n");
2276 spec->dyn_adc_switch = 1;
2277 } else if (nums != spec->num_adc_nids) {
2278 /* shrink the invalid adcs and input paths */
2280 for (n = 0; n < spec->num_adc_nids; n++) {
2281 if (!(ok_bits & (1 << n)))
2284 spec->adc_nids[nums] = spec->adc_nids[n];
2285 for (i = 0; i < imux->num_items; i++) {
2286 invalidate_nid_path(codec,
2287 spec->input_paths[i][nums]);
2288 spec->input_paths[i][nums] =
2289 spec->input_paths[i][n];
2294 spec->num_adc_nids = nums;
2297 if (imux->num_items == 1 || spec->shared_mic_hp) {
2298 snd_printdd("hda-codec: reducing to a single ADC\n");
2299 spec->num_adc_nids = 1; /* reduce to a single ADC */
2302 /* single index for individual volumes ctls */
2303 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
2304 spec->num_adc_nids = 1;
2309 /* parse capture source paths from the given pin and create imux items */
2310 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
2311 int num_adcs, const char *label, int anchor)
2313 struct hda_gen_spec *spec = codec->spec;
2314 struct hda_input_mux *imux = &spec->input_mux;
2315 int imux_idx = imux->num_items;
2316 bool imux_added = false;
2319 for (c = 0; c < num_adcs; c++) {
2320 struct nid_path *path;
2321 hda_nid_t adc = spec->adc_nids[c];
2323 if (!is_reachable_path(codec, pin, adc))
2325 path = snd_hda_add_new_path(codec, pin, adc, anchor);
2328 print_nid_path("input", path);
2329 spec->input_paths[imux_idx][c] =
2330 snd_hda_get_path_idx(codec, path);
2333 spec->imux_pins[imux->num_items] = pin;
2334 snd_hda_add_imux_item(imux, label,
2335 imux->num_items, NULL);
2344 * create playback/capture controls for input pins
2346 static int create_input_ctls(struct hda_codec *codec)
2348 struct hda_gen_spec *spec = codec->spec;
2349 const struct auto_pin_cfg *cfg = &spec->autocfg;
2350 hda_nid_t mixer = spec->mixer_nid;
2352 int i, err, type_idx = 0;
2353 const char *prev_label = NULL;
2356 num_adcs = fill_adc_nids(codec);
2360 for (i = 0; i < cfg->num_inputs; i++) {
2364 pin = cfg->inputs[i].pin;
2365 if (!is_input_pin(codec, pin))
2368 label = hda_get_autocfg_input_label(codec, cfg, i);
2369 if (prev_label && !strcmp(label, prev_label))
2376 if (cfg->inputs[i].type == AUTO_PIN_MIC)
2377 val |= snd_hda_get_default_vref(codec, pin);
2378 set_pin_target(codec, pin, val, false);
2381 if (is_reachable_path(codec, pin, mixer)) {
2382 err = new_analog_input(codec, i, pin,
2383 label, type_idx, mixer);
2389 err = parse_capture_source(codec, pin, num_adcs, label, -mixer);
2394 if (mixer && spec->add_stereo_mix_input) {
2395 err = parse_capture_source(codec, mixer, num_adcs,
2409 /* get the input path specified by the given adc and imux indices */
2410 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
2412 struct hda_gen_spec *spec = codec->spec;
2413 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
2417 if (spec->dyn_adc_switch)
2418 adc_idx = spec->dyn_adc_idx[imux_idx];
2419 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_OUTS) {
2423 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
2426 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
2429 static int mux_enum_info(struct snd_kcontrol *kcontrol,
2430 struct snd_ctl_elem_info *uinfo)
2432 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2433 struct hda_gen_spec *spec = codec->spec;
2434 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
2437 static int mux_enum_get(struct snd_kcontrol *kcontrol,
2438 struct snd_ctl_elem_value *ucontrol)
2440 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2441 struct hda_gen_spec *spec = codec->spec;
2442 unsigned int adc_idx = kcontrol->id.index;
2444 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
2448 static int mux_enum_put(struct snd_kcontrol *kcontrol,
2449 struct snd_ctl_elem_value *ucontrol)
2451 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2452 unsigned int adc_idx = kcontrol->id.index;
2453 return mux_select(codec, adc_idx,
2454 ucontrol->value.enumerated.item[0]);
2457 static const struct snd_kcontrol_new cap_src_temp = {
2458 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2459 .name = "Input Source",
2460 .info = mux_enum_info,
2461 .get = mux_enum_get,
2462 .put = mux_enum_put,
2466 * capture volume and capture switch ctls
2469 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
2470 struct snd_ctl_elem_value *ucontrol);
2472 /* call the given amp update function for all amps in the imux list at once */
2473 static int cap_put_caller(struct snd_kcontrol *kcontrol,
2474 struct snd_ctl_elem_value *ucontrol,
2475 put_call_t func, int type)
2477 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2478 struct hda_gen_spec *spec = codec->spec;
2479 const struct hda_input_mux *imux;
2480 struct nid_path *path;
2481 int i, adc_idx, err = 0;
2483 imux = &spec->input_mux;
2484 adc_idx = kcontrol->id.index;
2485 mutex_lock(&codec->control_mutex);
2486 /* we use the cache-only update at first since multiple input paths
2487 * may shared the same amp; by updating only caches, the redundant
2488 * writes to hardware can be reduced.
2490 codec->cached_write = 1;
2491 for (i = 0; i < imux->num_items; i++) {
2492 path = get_input_path(codec, adc_idx, i);
2493 if (!path || !path->ctls[type])
2495 kcontrol->private_value = path->ctls[type];
2496 err = func(kcontrol, ucontrol);
2501 codec->cached_write = 0;
2502 mutex_unlock(&codec->control_mutex);
2503 snd_hda_codec_flush_amp_cache(codec); /* flush the updates */
2504 if (err >= 0 && spec->cap_sync_hook)
2505 spec->cap_sync_hook(codec);
2509 /* capture volume ctl callbacks */
2510 #define cap_vol_info snd_hda_mixer_amp_volume_info
2511 #define cap_vol_get snd_hda_mixer_amp_volume_get
2512 #define cap_vol_tlv snd_hda_mixer_amp_tlv
2514 static int cap_vol_put(struct snd_kcontrol *kcontrol,
2515 struct snd_ctl_elem_value *ucontrol)
2517 return cap_put_caller(kcontrol, ucontrol,
2518 snd_hda_mixer_amp_volume_put,
2522 static const struct snd_kcontrol_new cap_vol_temp = {
2523 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2524 .name = "Capture Volume",
2525 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
2526 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
2527 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
2528 .info = cap_vol_info,
2531 .tlv = { .c = cap_vol_tlv },
2534 /* capture switch ctl callbacks */
2535 #define cap_sw_info snd_ctl_boolean_stereo_info
2536 #define cap_sw_get snd_hda_mixer_amp_switch_get
2538 static int cap_sw_put(struct snd_kcontrol *kcontrol,
2539 struct snd_ctl_elem_value *ucontrol)
2541 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2542 struct hda_gen_spec *spec = codec->spec;
2545 ret = cap_put_caller(kcontrol, ucontrol,
2546 snd_hda_mixer_amp_switch_put,
2551 if (spec->capture_switch_hook) {
2552 bool enable = (ucontrol->value.integer.value[0] ||
2553 ucontrol->value.integer.value[1]);
2554 spec->capture_switch_hook(codec, enable);
2560 static const struct snd_kcontrol_new cap_sw_temp = {
2561 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2562 .name = "Capture Switch",
2563 .info = cap_sw_info,
2568 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
2573 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
2574 for (depth = 0; depth < 3; depth++) {
2575 if (depth >= path->depth)
2577 i = path->depth - depth - 1;
2578 nid = path->path[i];
2579 if (!path->ctls[NID_PATH_VOL_CTL]) {
2580 if (nid_has_volume(codec, nid, HDA_OUTPUT))
2581 path->ctls[NID_PATH_VOL_CTL] =
2582 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2583 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
2584 int idx = path->idx[i];
2585 if (!depth && codec->single_adc_amp)
2587 path->ctls[NID_PATH_VOL_CTL] =
2588 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
2591 if (!path->ctls[NID_PATH_MUTE_CTL]) {
2592 if (nid_has_mute(codec, nid, HDA_OUTPUT))
2593 path->ctls[NID_PATH_MUTE_CTL] =
2594 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2595 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
2596 int idx = path->idx[i];
2597 if (!depth && codec->single_adc_amp)
2599 path->ctls[NID_PATH_MUTE_CTL] =
2600 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
2607 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
2609 struct hda_gen_spec *spec = codec->spec;
2610 struct auto_pin_cfg *cfg = &spec->autocfg;
2614 if (!spec->inv_dmic_split)
2616 for (i = 0; i < cfg->num_inputs; i++) {
2617 if (cfg->inputs[i].pin != nid)
2619 if (cfg->inputs[i].type != AUTO_PIN_MIC)
2621 val = snd_hda_codec_get_pincfg(codec, nid);
2622 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
2627 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
2628 int idx, bool is_switch, unsigned int ctl,
2631 struct hda_gen_spec *spec = codec->spec;
2633 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
2634 const char *sfx = is_switch ? "Switch" : "Volume";
2635 unsigned int chs = inv_dmic ? 1 : 3;
2642 snprintf(tmpname, sizeof(tmpname),
2643 "%s Capture %s", label, sfx);
2645 snprintf(tmpname, sizeof(tmpname),
2647 err = add_control(spec, type, tmpname, idx,
2648 amp_val_replace_channels(ctl, chs));
2649 if (err < 0 || !inv_dmic)
2652 /* Make independent right kcontrol */
2654 snprintf(tmpname, sizeof(tmpname),
2655 "Inverted %s Capture %s", label, sfx);
2657 snprintf(tmpname, sizeof(tmpname),
2658 "Inverted Capture %s", sfx);
2659 return add_control(spec, type, tmpname, idx,
2660 amp_val_replace_channels(ctl, 2));
2663 /* create single (and simple) capture volume and switch controls */
2664 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
2665 unsigned int vol_ctl, unsigned int sw_ctl,
2669 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
2672 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
2678 /* create bound capture volume and switch controls */
2679 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
2680 unsigned int vol_ctl, unsigned int sw_ctl)
2682 struct hda_gen_spec *spec = codec->spec;
2683 struct snd_kcontrol_new *knew;
2686 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
2690 knew->private_value = vol_ctl;
2691 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
2694 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
2698 knew->private_value = sw_ctl;
2699 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
2704 /* return the vol ctl when used first in the imux list */
2705 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
2707 struct nid_path *path;
2711 path = get_input_path(codec, 0, idx);
2714 ctl = path->ctls[type];
2717 for (i = 0; i < idx - 1; i++) {
2718 path = get_input_path(codec, 0, i);
2719 if (path && path->ctls[type] == ctl)
2725 /* create individual capture volume and switch controls per input */
2726 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
2728 struct hda_gen_spec *spec = codec->spec;
2729 struct hda_input_mux *imux = &spec->input_mux;
2730 int i, err, type, type_idx = 0;
2731 const char *prev_label = NULL;
2733 for (i = 0; i < imux->num_items; i++) {
2736 label = hda_get_autocfg_input_label(codec, &spec->autocfg, i);
2737 if (prev_label && !strcmp(label, prev_label))
2742 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
2744 for (type = 0; type < 2; type++) {
2745 err = add_single_cap_ctl(codec, label, type_idx, type,
2746 get_first_cap_ctl(codec, i, type),
2755 static int create_capture_mixers(struct hda_codec *codec)
2757 struct hda_gen_spec *spec = codec->spec;
2758 struct hda_input_mux *imux = &spec->input_mux;
2759 int i, n, nums, err;
2761 if (spec->dyn_adc_switch)
2764 nums = spec->num_adc_nids;
2766 if (!spec->auto_mic && imux->num_items > 1) {
2767 struct snd_kcontrol_new *knew;
2769 name = nums > 1 ? "Input Source" : "Capture Source";
2770 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
2776 for (n = 0; n < nums; n++) {
2778 bool multi_cap_vol = spec->multi_cap_vol;
2779 bool inv_dmic = false;
2783 for (i = 0; i < imux->num_items; i++) {
2784 struct nid_path *path;
2785 path = get_input_path(codec, n, i);
2788 parse_capvol_in_path(codec, path);
2790 vol = path->ctls[NID_PATH_VOL_CTL];
2791 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
2793 if (!same_amp_caps(codec, vol,
2794 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
2795 multi_cap_vol = true;
2798 sw = path->ctls[NID_PATH_MUTE_CTL];
2799 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
2801 if (!same_amp_caps(codec, sw,
2802 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
2803 multi_cap_vol = true;
2805 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
2810 err = create_single_cap_vol_ctl(codec, n, vol, sw,
2812 else if (!multi_cap_vol)
2813 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
2815 err = create_multi_cap_vol_ctl(codec);
2824 * add mic boosts if needed
2826 static int parse_mic_boost(struct hda_codec *codec)
2828 struct hda_gen_spec *spec = codec->spec;
2829 struct auto_pin_cfg *cfg = &spec->autocfg;
2833 const char *prev_label = NULL;
2835 for (i = 0; i < cfg->num_inputs; i++) {
2836 if (cfg->inputs[i].type > AUTO_PIN_MIC)
2838 nid = cfg->inputs[i].pin;
2839 if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
2841 char boost_label[44];
2842 struct nid_path *path;
2845 if (!nid_has_volume(codec, nid, HDA_INPUT))
2848 label = hda_get_autocfg_input_label(codec, cfg, i);
2849 if (prev_label && !strcmp(label, prev_label))
2855 snprintf(boost_label, sizeof(boost_label),
2856 "%s Boost Volume", label);
2857 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
2858 err = add_control(spec, HDA_CTL_WIDGET_VOL,
2859 boost_label, type_idx, val);
2863 path = snd_hda_get_nid_path(codec, nid, 0);
2865 path->ctls[NID_PATH_BOOST_CTL] = val;
2872 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
2874 static void parse_digital(struct hda_codec *codec)
2876 struct hda_gen_spec *spec = codec->spec;
2877 struct nid_path *path;
2879 hda_nid_t dig_nid, pin;
2881 /* support multiple SPDIFs; the secondary is set up as a slave */
2883 for (i = 0; i < spec->autocfg.dig_outs; i++) {
2884 pin = spec->autocfg.dig_out_pins[i];
2885 dig_nid = look_for_dac(codec, pin, true);
2888 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
2891 print_nid_path("digout", path);
2892 path->active = true;
2893 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
2894 set_pin_target(codec, pin, PIN_OUT, false);
2896 spec->multiout.dig_out_nid = dig_nid;
2897 spec->dig_out_type = spec->autocfg.dig_out_type[0];
2899 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
2900 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
2902 spec->slave_dig_outs[nums - 1] = dig_nid;
2907 if (spec->autocfg.dig_in_pin) {
2908 pin = spec->autocfg.dig_in_pin;
2909 dig_nid = codec->start_nid;
2910 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
2911 unsigned int wcaps = get_wcaps(codec, dig_nid);
2912 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
2914 if (!(wcaps & AC_WCAP_DIGITAL))
2916 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
2918 print_nid_path("digin", path);
2919 path->active = true;
2920 spec->dig_in_nid = dig_nid;
2921 spec->digin_path = snd_hda_get_path_idx(codec, path);
2922 set_pin_target(codec, pin, PIN_IN, false);
2931 * input MUX handling
2934 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
2936 /* select the given imux item; either unmute exclusively or select the route */
2937 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
2940 struct hda_gen_spec *spec = codec->spec;
2941 const struct hda_input_mux *imux;
2942 struct nid_path *path;
2944 imux = &spec->input_mux;
2945 if (!imux->num_items)
2948 if (idx >= imux->num_items)
2949 idx = imux->num_items - 1;
2950 if (spec->cur_mux[adc_idx] == idx)
2953 path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
2957 snd_hda_activate_path(codec, path, false, false);
2959 spec->cur_mux[adc_idx] = idx;
2961 if (spec->shared_mic_hp)
2962 update_shared_mic_hp(codec, spec->cur_mux[adc_idx]);
2964 if (spec->dyn_adc_switch)
2965 dyn_adc_pcm_resetup(codec, idx);
2967 path = get_input_path(codec, adc_idx, idx);
2972 snd_hda_activate_path(codec, path, true, false);
2973 if (spec->cap_sync_hook)
2974 spec->cap_sync_hook(codec);
2980 * Jack detections for HP auto-mute and mic-switch
2983 /* check each pin in the given array; returns true if any of them is plugged */
2984 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
2988 for (i = 0; i < num_pins; i++) {
2989 hda_nid_t nid = pins[i];
2992 /* don't detect pins retasked as inputs */
2993 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
2995 present |= snd_hda_jack_detect(codec, nid);
3000 /* standard HP/line-out auto-mute helper */
3001 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3004 struct hda_gen_spec *spec = codec->spec;
3007 for (i = 0; i < num_pins; i++) {
3008 hda_nid_t nid = pins[i];
3012 /* don't reset VREF value in case it's controlling
3013 * the amp (see alc861_fixup_asus_amp_vref_0f())
3015 if (spec->keep_vref_in_automute)
3016 val = snd_hda_codec_get_pin_target(codec, nid) & ~PIN_HP;
3020 val |= snd_hda_codec_get_pin_target(codec, nid);
3021 /* here we call update_pin_ctl() so that the pinctl is changed
3022 * without changing the pinctl target value;
3023 * the original target value will be still referred at the
3024 * init / resume again
3026 update_pin_ctl(codec, nid, val);
3027 set_pin_eapd(codec, nid, !mute);
3031 /* Toggle outputs muting */
3032 void snd_hda_gen_update_outputs(struct hda_codec *codec)
3034 struct hda_gen_spec *spec = codec->spec;
3037 /* Control HP pins/amps depending on master_mute state;
3038 * in general, HP pins/amps control should be enabled in all cases,
3039 * but currently set only for master_mute, just to be safe
3041 if (!spec->shared_mic_hp) /* don't change HP-pin when shared with mic */
3042 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3043 spec->autocfg.hp_pins, spec->master_mute);
3045 if (!spec->automute_speaker)
3048 on = spec->hp_jack_present | spec->line_jack_present;
3049 on |= spec->master_mute;
3050 spec->speaker_muted = on;
3051 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3052 spec->autocfg.speaker_pins, on);
3054 /* toggle line-out mutes if needed, too */
3055 /* if LO is a copy of either HP or Speaker, don't need to handle it */
3056 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3057 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3059 if (!spec->automute_lo)
3062 on = spec->hp_jack_present;
3063 on |= spec->master_mute;
3064 spec->line_out_muted = on;
3065 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3066 spec->autocfg.line_out_pins, on);
3068 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs);
3070 static void call_update_outputs(struct hda_codec *codec)
3072 struct hda_gen_spec *spec = codec->spec;
3073 if (spec->automute_hook)
3074 spec->automute_hook(codec);
3076 snd_hda_gen_update_outputs(codec);
3079 /* standard HP-automute helper */
3080 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3082 struct hda_gen_spec *spec = codec->spec;
3084 spec->hp_jack_present =
3085 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3086 spec->autocfg.hp_pins);
3087 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3089 call_update_outputs(codec);
3091 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute);
3093 /* standard line-out-automute helper */
3094 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3096 struct hda_gen_spec *spec = codec->spec;
3098 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3100 /* check LO jack only when it's different from HP */
3101 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3104 spec->line_jack_present =
3105 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3106 spec->autocfg.line_out_pins);
3107 if (!spec->automute_speaker || !spec->detect_lo)
3109 call_update_outputs(codec);
3111 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute);
3113 /* standard mic auto-switch helper */
3114 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3116 struct hda_gen_spec *spec = codec->spec;
3119 if (!spec->auto_mic)
3122 for (i = spec->am_num_entries - 1; i > 0; i--) {
3123 hda_nid_t pin = spec->am_entry[i].pin;
3124 /* don't detect pins retasked as outputs */
3125 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3127 if (snd_hda_jack_detect(codec, pin)) {
3128 mux_select(codec, 0, spec->am_entry[i].idx);
3132 mux_select(codec, 0, spec->am_entry[0].idx);
3134 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch);
3136 /* update jack retasking */
3137 static void update_automute_all(struct hda_codec *codec)
3139 struct hda_gen_spec *spec = codec->spec;
3141 if (spec->hp_automute_hook)
3142 spec->hp_automute_hook(codec, NULL);
3144 snd_hda_gen_hp_automute(codec, NULL);
3145 if (spec->line_automute_hook)
3146 spec->line_automute_hook(codec, NULL);
3148 snd_hda_gen_line_automute(codec, NULL);
3149 if (spec->mic_autoswitch_hook)
3150 spec->mic_autoswitch_hook(codec, NULL);
3152 snd_hda_gen_mic_autoswitch(codec, NULL);
3156 * Auto-Mute mode mixer enum support
3158 static int automute_mode_info(struct snd_kcontrol *kcontrol,
3159 struct snd_ctl_elem_info *uinfo)
3161 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3162 struct hda_gen_spec *spec = codec->spec;
3163 static const char * const texts3[] = {
3164 "Disabled", "Speaker Only", "Line Out+Speaker"
3167 if (spec->automute_speaker_possible && spec->automute_lo_possible)
3168 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
3169 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
3172 static int automute_mode_get(struct snd_kcontrol *kcontrol,
3173 struct snd_ctl_elem_value *ucontrol)
3175 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3176 struct hda_gen_spec *spec = codec->spec;
3177 unsigned int val = 0;
3178 if (spec->automute_speaker)
3180 if (spec->automute_lo)
3183 ucontrol->value.enumerated.item[0] = val;
3187 static int automute_mode_put(struct snd_kcontrol *kcontrol,
3188 struct snd_ctl_elem_value *ucontrol)
3190 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3191 struct hda_gen_spec *spec = codec->spec;
3193 switch (ucontrol->value.enumerated.item[0]) {
3195 if (!spec->automute_speaker && !spec->automute_lo)
3197 spec->automute_speaker = 0;
3198 spec->automute_lo = 0;
3201 if (spec->automute_speaker_possible) {
3202 if (!spec->automute_lo && spec->automute_speaker)
3204 spec->automute_speaker = 1;
3205 spec->automute_lo = 0;
3206 } else if (spec->automute_lo_possible) {
3207 if (spec->automute_lo)
3209 spec->automute_lo = 1;
3214 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
3216 if (spec->automute_speaker && spec->automute_lo)
3218 spec->automute_speaker = 1;
3219 spec->automute_lo = 1;
3224 call_update_outputs(codec);
3228 static const struct snd_kcontrol_new automute_mode_enum = {
3229 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3230 .name = "Auto-Mute Mode",
3231 .info = automute_mode_info,
3232 .get = automute_mode_get,
3233 .put = automute_mode_put,
3236 static int add_automute_mode_enum(struct hda_codec *codec)
3238 struct hda_gen_spec *spec = codec->spec;
3240 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
3246 * Check the availability of HP/line-out auto-mute;
3247 * Set up appropriately if really supported
3249 static int check_auto_mute_availability(struct hda_codec *codec)
3251 struct hda_gen_spec *spec = codec->spec;
3252 struct auto_pin_cfg *cfg = &spec->autocfg;
3256 if (cfg->hp_pins[0])
3258 if (cfg->line_out_pins[0])
3260 if (cfg->speaker_pins[0])
3262 if (present < 2) /* need two different output types */
3265 if (!cfg->speaker_pins[0] &&
3266 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
3267 memcpy(cfg->speaker_pins, cfg->line_out_pins,
3268 sizeof(cfg->speaker_pins));
3269 cfg->speaker_outs = cfg->line_outs;
3272 if (!cfg->hp_pins[0] &&
3273 cfg->line_out_type == AUTO_PIN_HP_OUT) {
3274 memcpy(cfg->hp_pins, cfg->line_out_pins,
3275 sizeof(cfg->hp_pins));
3276 cfg->hp_outs = cfg->line_outs;
3279 for (i = 0; i < cfg->hp_outs; i++) {
3280 hda_nid_t nid = cfg->hp_pins[i];
3281 if (!is_jack_detectable(codec, nid))
3283 snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
3285 snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
3286 spec->hp_automute_hook ?
3287 spec->hp_automute_hook :
3288 snd_hda_gen_hp_automute);
3289 spec->detect_hp = 1;
3292 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
3293 if (cfg->speaker_outs)
3294 for (i = 0; i < cfg->line_outs; i++) {
3295 hda_nid_t nid = cfg->line_out_pins[i];
3296 if (!is_jack_detectable(codec, nid))
3298 snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
3299 snd_hda_jack_detect_enable_callback(codec, nid,
3300 HDA_GEN_FRONT_EVENT,
3301 spec->line_automute_hook ?
3302 spec->line_automute_hook :
3303 snd_hda_gen_line_automute);
3304 spec->detect_lo = 1;
3306 spec->automute_lo_possible = spec->detect_hp;
3309 spec->automute_speaker_possible = cfg->speaker_outs &&
3310 (spec->detect_hp || spec->detect_lo);
3312 spec->automute_lo = spec->automute_lo_possible;
3313 spec->automute_speaker = spec->automute_speaker_possible;
3315 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
3316 /* create a control for automute mode */
3317 err = add_automute_mode_enum(codec);
3324 /* check whether all auto-mic pins are valid; setup indices if OK */
3325 static bool auto_mic_check_imux(struct hda_codec *codec)
3327 struct hda_gen_spec *spec = codec->spec;
3328 const struct hda_input_mux *imux;
3331 imux = &spec->input_mux;
3332 for (i = 0; i < spec->am_num_entries; i++) {
3333 spec->am_entry[i].idx =
3334 find_idx_in_nid_list(spec->am_entry[i].pin,
3335 spec->imux_pins, imux->num_items);
3336 if (spec->am_entry[i].idx < 0)
3337 return false; /* no corresponding imux */
3340 /* we don't need the jack detection for the first pin */
3341 for (i = 1; i < spec->am_num_entries; i++)
3342 snd_hda_jack_detect_enable_callback(codec,
3343 spec->am_entry[i].pin,
3345 spec->mic_autoswitch_hook ?
3346 spec->mic_autoswitch_hook :
3347 snd_hda_gen_mic_autoswitch);
3351 static int compare_attr(const void *ap, const void *bp)
3353 const struct automic_entry *a = ap;
3354 const struct automic_entry *b = bp;
3355 return (int)(a->attr - b->attr);
3359 * Check the availability of auto-mic switch;
3360 * Set up if really supported
3362 static int check_auto_mic_availability(struct hda_codec *codec)
3364 struct hda_gen_spec *spec = codec->spec;
3365 struct auto_pin_cfg *cfg = &spec->autocfg;
3369 if (spec->suppress_auto_mic)
3374 for (i = 0; i < cfg->num_inputs; i++) {
3375 hda_nid_t nid = cfg->inputs[i].pin;
3377 attr = snd_hda_codec_get_pincfg(codec, nid);
3378 attr = snd_hda_get_input_pin_attr(attr);
3379 if (types & (1 << attr))
3380 return 0; /* already occupied */
3382 case INPUT_PIN_ATTR_INT:
3383 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3384 return 0; /* invalid type */
3386 case INPUT_PIN_ATTR_UNUSED:
3387 return 0; /* invalid entry */
3389 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
3390 return 0; /* invalid type */
3391 if (!spec->line_in_auto_switch &&
3392 cfg->inputs[i].type != AUTO_PIN_MIC)
3393 return 0; /* only mic is allowed */
3394 if (!is_jack_detectable(codec, nid))
3395 return 0; /* no unsol support */
3398 if (num_pins >= MAX_AUTO_MIC_PINS)
3400 types |= (1 << attr);
3401 spec->am_entry[num_pins].pin = nid;
3402 spec->am_entry[num_pins].attr = attr;
3409 spec->am_num_entries = num_pins;
3410 /* sort the am_entry in the order of attr so that the pin with a
3411 * higher attr will be selected when the jack is plugged.
3413 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
3414 compare_attr, NULL);
3416 if (!auto_mic_check_imux(codec))
3420 spec->num_adc_nids = 1;
3421 spec->cur_mux[0] = spec->am_entry[0].idx;
3422 snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
3423 spec->am_entry[0].pin,
3424 spec->am_entry[1].pin,
3425 spec->am_entry[2].pin);
3432 * Parse the given BIOS configuration and set up the hda_gen_spec
3434 * return 1 if successful, 0 if the proper config is not found,
3435 * or a negative error code
3437 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
3438 struct auto_pin_cfg *cfg)
3440 struct hda_gen_spec *spec = codec->spec;
3443 parse_user_hints(codec);
3445 if (cfg != &spec->autocfg) {
3446 spec->autocfg = *cfg;
3447 cfg = &spec->autocfg;
3450 fill_all_dac_nids(codec);
3452 if (!cfg->line_outs) {
3453 if (cfg->dig_outs || cfg->dig_in_pin) {
3454 spec->multiout.max_channels = 2;
3455 spec->no_analog = 1;
3458 return 0; /* can't find valid BIOS pin config */
3461 if (!spec->no_primary_hp &&
3462 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
3463 cfg->line_outs <= cfg->hp_outs) {
3464 /* use HP as primary out */
3465 cfg->speaker_outs = cfg->line_outs;
3466 memcpy(cfg->speaker_pins, cfg->line_out_pins,
3467 sizeof(cfg->speaker_pins));
3468 cfg->line_outs = cfg->hp_outs;
3469 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
3471 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3472 cfg->line_out_type = AUTO_PIN_HP_OUT;
3475 err = parse_output_paths(codec);
3478 err = create_multi_channel_mode(codec);
3481 err = create_multi_out_ctls(codec, cfg);
3484 err = create_hp_out_ctls(codec);
3487 err = create_speaker_out_ctls(codec);
3490 err = create_indep_hp_ctls(codec);
3493 err = create_loopback_mixing_ctl(codec);
3496 err = create_shared_input(codec);
3499 err = create_input_ctls(codec);
3503 spec->const_channel_count = spec->ext_channel_count;
3504 /* check the multiple speaker and headphone pins */
3505 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
3506 spec->const_channel_count = max(spec->const_channel_count,
3507 cfg->speaker_outs * 2);
3508 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
3509 spec->const_channel_count = max(spec->const_channel_count,
3511 spec->multiout.max_channels = max(spec->ext_channel_count,
3512 spec->const_channel_count);
3514 err = check_auto_mute_availability(codec);
3518 err = check_dyn_adc_switch(codec);
3522 if (!spec->shared_mic_hp) {
3523 err = check_auto_mic_availability(codec);
3528 err = create_capture_mixers(codec);
3532 err = parse_mic_boost(codec);
3536 if (spec->add_out_jack_modes) {
3537 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
3538 err = create_out_jack_modes(codec, cfg->line_outs,
3539 cfg->line_out_pins);
3543 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
3544 err = create_out_jack_modes(codec, cfg->hp_outs,
3552 parse_digital(codec);
3556 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config);
3560 * Build control elements
3563 /* slave controls for virtual master */
3564 static const char * const slave_pfxs[] = {
3565 "Front", "Surround", "Center", "LFE", "Side",
3566 "Headphone", "Speaker", "Mono", "Line Out",
3567 "CLFE", "Bass Speaker", "PCM",
3568 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
3569 "Headphone Front", "Headphone Surround", "Headphone CLFE",
3574 int snd_hda_gen_build_controls(struct hda_codec *codec)
3576 struct hda_gen_spec *spec = codec->spec;
3579 if (spec->kctls.used) {
3580 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
3585 if (spec->multiout.dig_out_nid) {
3586 err = snd_hda_create_dig_out_ctls(codec,
3587 spec->multiout.dig_out_nid,
3588 spec->multiout.dig_out_nid,
3589 spec->pcm_rec[1].pcm_type);
3592 if (!spec->no_analog) {
3593 err = snd_hda_create_spdif_share_sw(codec,
3597 spec->multiout.share_spdif = 1;
3600 if (spec->dig_in_nid) {
3601 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
3606 /* if we have no master control, let's create it */
3607 if (!spec->no_analog &&
3608 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
3609 unsigned int vmaster_tlv[4];
3610 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
3611 HDA_OUTPUT, vmaster_tlv);
3612 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
3613 vmaster_tlv, slave_pfxs,
3618 if (!spec->no_analog &&
3619 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
3620 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
3623 true, &spec->vmaster_mute.sw_kctl);
3626 if (spec->vmaster_mute.hook)
3627 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
3628 spec->vmaster_mute_enum);
3631 free_kctls(spec); /* no longer needed */
3633 if (spec->shared_mic_hp) {
3635 int nid = spec->autocfg.inputs[1].pin;
3636 err = snd_hda_jack_add_kctl(codec, nid, "Headphone Mic", 0);
3639 err = snd_hda_jack_detect_enable(codec, nid, 0);
3644 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
3650 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls);
3657 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
3658 struct hda_codec *codec,
3659 struct snd_pcm_substream *substream,
3662 struct hda_gen_spec *spec = codec->spec;
3663 if (spec->pcm_playback_hook)
3664 spec->pcm_playback_hook(hinfo, codec, substream, action);
3668 * Analog playback callbacks
3670 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
3671 struct hda_codec *codec,
3672 struct snd_pcm_substream *substream)
3674 struct hda_gen_spec *spec = codec->spec;
3677 mutex_lock(&spec->pcm_mutex);
3678 err = snd_hda_multi_out_analog_open(codec,
3679 &spec->multiout, substream,
3682 spec->active_streams |= 1 << STREAM_MULTI_OUT;
3683 call_pcm_playback_hook(hinfo, codec, substream,
3684 HDA_GEN_PCM_ACT_OPEN);
3686 mutex_unlock(&spec->pcm_mutex);
3690 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
3691 struct hda_codec *codec,
3692 unsigned int stream_tag,
3693 unsigned int format,
3694 struct snd_pcm_substream *substream)
3696 struct hda_gen_spec *spec = codec->spec;
3699 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
3700 stream_tag, format, substream);
3702 call_pcm_playback_hook(hinfo, codec, substream,
3703 HDA_GEN_PCM_ACT_PREPARE);
3707 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
3708 struct hda_codec *codec,
3709 struct snd_pcm_substream *substream)
3711 struct hda_gen_spec *spec = codec->spec;
3714 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
3716 call_pcm_playback_hook(hinfo, codec, substream,
3717 HDA_GEN_PCM_ACT_CLEANUP);
3721 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
3722 struct hda_codec *codec,
3723 struct snd_pcm_substream *substream)
3725 struct hda_gen_spec *spec = codec->spec;
3726 mutex_lock(&spec->pcm_mutex);
3727 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
3728 call_pcm_playback_hook(hinfo, codec, substream,
3729 HDA_GEN_PCM_ACT_CLOSE);
3730 mutex_unlock(&spec->pcm_mutex);
3734 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
3735 struct hda_codec *codec,
3736 struct snd_pcm_substream *substream)
3738 struct hda_gen_spec *spec = codec->spec;
3741 mutex_lock(&spec->pcm_mutex);
3742 if (!spec->indep_hp_enabled)
3745 spec->active_streams |= 1 << STREAM_INDEP_HP;
3746 call_pcm_playback_hook(hinfo, codec, substream,
3747 HDA_GEN_PCM_ACT_OPEN);
3748 mutex_unlock(&spec->pcm_mutex);
3752 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
3753 struct hda_codec *codec,
3754 struct snd_pcm_substream *substream)
3756 struct hda_gen_spec *spec = codec->spec;
3757 mutex_lock(&spec->pcm_mutex);
3758 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
3759 call_pcm_playback_hook(hinfo, codec, substream,
3760 HDA_GEN_PCM_ACT_CLOSE);
3761 mutex_unlock(&spec->pcm_mutex);
3765 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
3766 struct hda_codec *codec,
3767 unsigned int stream_tag,
3768 unsigned int format,
3769 struct snd_pcm_substream *substream)
3771 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
3772 call_pcm_playback_hook(hinfo, codec, substream,
3773 HDA_GEN_PCM_ACT_PREPARE);
3777 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
3778 struct hda_codec *codec,
3779 struct snd_pcm_substream *substream)
3781 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
3782 call_pcm_playback_hook(hinfo, codec, substream,
3783 HDA_GEN_PCM_ACT_CLEANUP);
3790 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
3791 struct hda_codec *codec,
3792 struct snd_pcm_substream *substream)
3794 struct hda_gen_spec *spec = codec->spec;
3795 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
3798 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
3799 struct hda_codec *codec,
3800 unsigned int stream_tag,
3801 unsigned int format,
3802 struct snd_pcm_substream *substream)
3804 struct hda_gen_spec *spec = codec->spec;
3805 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
3806 stream_tag, format, substream);
3809 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
3810 struct hda_codec *codec,
3811 struct snd_pcm_substream *substream)
3813 struct hda_gen_spec *spec = codec->spec;
3814 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
3817 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
3818 struct hda_codec *codec,
3819 struct snd_pcm_substream *substream)
3821 struct hda_gen_spec *spec = codec->spec;
3822 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
3828 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
3829 struct hda_codec *codec,
3830 unsigned int stream_tag,
3831 unsigned int format,
3832 struct snd_pcm_substream *substream)
3834 struct hda_gen_spec *spec = codec->spec;
3836 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
3837 stream_tag, 0, format);
3841 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
3842 struct hda_codec *codec,
3843 struct snd_pcm_substream *substream)
3845 struct hda_gen_spec *spec = codec->spec;
3847 snd_hda_codec_cleanup_stream(codec,
3848 spec->adc_nids[substream->number + 1]);
3854 static const struct hda_pcm_stream pcm_analog_playback = {
3858 /* NID is set in build_pcms */
3860 .open = playback_pcm_open,
3861 .close = playback_pcm_close,
3862 .prepare = playback_pcm_prepare,
3863 .cleanup = playback_pcm_cleanup
3867 static const struct hda_pcm_stream pcm_analog_capture = {
3871 /* NID is set in build_pcms */
3874 static const struct hda_pcm_stream pcm_analog_alt_playback = {
3878 /* NID is set in build_pcms */
3880 .open = alt_playback_pcm_open,
3881 .close = alt_playback_pcm_close,
3882 .prepare = alt_playback_pcm_prepare,
3883 .cleanup = alt_playback_pcm_cleanup
3887 static const struct hda_pcm_stream pcm_analog_alt_capture = {
3888 .substreams = 2, /* can be overridden */
3891 /* NID is set in build_pcms */
3893 .prepare = alt_capture_pcm_prepare,
3894 .cleanup = alt_capture_pcm_cleanup
3898 static const struct hda_pcm_stream pcm_digital_playback = {
3902 /* NID is set in build_pcms */
3904 .open = dig_playback_pcm_open,
3905 .close = dig_playback_pcm_close,
3906 .prepare = dig_playback_pcm_prepare,
3907 .cleanup = dig_playback_pcm_cleanup
3911 static const struct hda_pcm_stream pcm_digital_capture = {
3915 /* NID is set in build_pcms */
3918 /* Used by build_pcms to flag that a PCM has no playback stream */
3919 static const struct hda_pcm_stream pcm_null_stream = {
3926 * dynamic changing ADC PCM streams
3928 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
3930 struct hda_gen_spec *spec = codec->spec;
3931 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
3933 if (spec->cur_adc && spec->cur_adc != new_adc) {
3934 /* stream is running, let's swap the current ADC */
3935 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
3936 spec->cur_adc = new_adc;
3937 snd_hda_codec_setup_stream(codec, new_adc,
3938 spec->cur_adc_stream_tag, 0,
3939 spec->cur_adc_format);
3945 /* analog capture with dynamic dual-adc changes */
3946 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
3947 struct hda_codec *codec,
3948 unsigned int stream_tag,
3949 unsigned int format,
3950 struct snd_pcm_substream *substream)
3952 struct hda_gen_spec *spec = codec->spec;
3953 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
3954 spec->cur_adc_stream_tag = stream_tag;
3955 spec->cur_adc_format = format;
3956 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
3960 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
3961 struct hda_codec *codec,
3962 struct snd_pcm_substream *substream)
3964 struct hda_gen_spec *spec = codec->spec;
3965 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
3970 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
3974 .nid = 0, /* fill later */
3976 .prepare = dyn_adc_capture_pcm_prepare,
3977 .cleanup = dyn_adc_capture_pcm_cleanup
3981 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
3982 const char *chip_name)
3988 strlcpy(str, chip_name, len);
3990 /* drop non-alnum chars after a space */
3991 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
3992 if (!isalnum(p[1])) {
3997 strlcat(str, sfx, len);
4000 /* build PCM streams based on the parsed results */
4001 int snd_hda_gen_build_pcms(struct hda_codec *codec)
4003 struct hda_gen_spec *spec = codec->spec;
4004 struct hda_pcm *info = spec->pcm_rec;
4005 const struct hda_pcm_stream *p;
4006 bool have_multi_adcs;
4008 codec->num_pcms = 1;
4009 codec->pcm_info = info;
4011 if (spec->no_analog)
4014 fill_pcm_stream_name(spec->stream_name_analog,
4015 sizeof(spec->stream_name_analog),
4016 " Analog", codec->chip_name);
4017 info->name = spec->stream_name_analog;
4019 if (spec->multiout.num_dacs > 0) {
4020 p = spec->stream_analog_playback;
4022 p = &pcm_analog_playback;
4023 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4024 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
4025 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
4026 spec->multiout.max_channels;
4027 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
4028 spec->autocfg.line_outs == 2)
4029 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
4032 if (spec->num_adc_nids) {
4033 p = spec->stream_analog_capture;
4035 if (spec->dyn_adc_switch)
4036 p = &dyn_adc_pcm_analog_capture;
4038 p = &pcm_analog_capture;
4040 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4041 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
4045 /* SPDIF for stream index #1 */
4046 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
4047 fill_pcm_stream_name(spec->stream_name_digital,
4048 sizeof(spec->stream_name_digital),
4049 " Digital", codec->chip_name);
4050 codec->num_pcms = 2;
4051 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
4052 info = spec->pcm_rec + 1;
4053 info->name = spec->stream_name_digital;
4054 if (spec->dig_out_type)
4055 info->pcm_type = spec->dig_out_type;
4057 info->pcm_type = HDA_PCM_TYPE_SPDIF;
4058 if (spec->multiout.dig_out_nid) {
4059 p = spec->stream_digital_playback;
4061 p = &pcm_digital_playback;
4062 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4063 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
4065 if (spec->dig_in_nid) {
4066 p = spec->stream_digital_capture;
4068 p = &pcm_digital_capture;
4069 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4070 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
4074 if (spec->no_analog)
4077 /* If the use of more than one ADC is requested for the current
4078 * model, configure a second analog capture-only PCM.
4080 have_multi_adcs = (spec->num_adc_nids > 1) &&
4081 !spec->dyn_adc_switch && !spec->auto_mic;
4082 /* Additional Analaog capture for index #2 */
4083 if (spec->alt_dac_nid || have_multi_adcs) {
4084 codec->num_pcms = 3;
4085 info = spec->pcm_rec + 2;
4086 info->name = spec->stream_name_analog;
4087 if (spec->alt_dac_nid) {
4088 p = spec->stream_analog_alt_playback;
4090 p = &pcm_analog_alt_playback;
4091 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4092 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
4095 info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
4097 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
4099 if (have_multi_adcs) {
4100 p = spec->stream_analog_alt_capture;
4102 p = &pcm_analog_alt_capture;
4103 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4104 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
4106 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
4107 spec->num_adc_nids - 1;
4109 info->stream[SNDRV_PCM_STREAM_CAPTURE] =
4111 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
4117 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
4121 * Standard auto-parser initializations
4124 /* configure the given path as a proper output */
4125 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
4127 struct nid_path *path;
4130 path = snd_hda_get_path_from_idx(codec, path_idx);
4131 if (!path || !path->depth)
4133 pin = path->path[path->depth - 1];
4134 restore_pin_ctl(codec, pin);
4135 snd_hda_activate_path(codec, path, path->active, true);
4136 set_pin_eapd(codec, pin, path->active);
4139 /* initialize primary output paths */
4140 static void init_multi_out(struct hda_codec *codec)
4142 struct hda_gen_spec *spec = codec->spec;
4145 for (i = 0; i < spec->autocfg.line_outs; i++)
4146 set_output_and_unmute(codec, spec->out_paths[i]);
4150 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
4154 for (i = 0; i < num_outs; i++)
4155 set_output_and_unmute(codec, paths[i]);
4158 /* initialize hp and speaker paths */
4159 static void init_extra_out(struct hda_codec *codec)
4161 struct hda_gen_spec *spec = codec->spec;
4163 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
4164 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
4165 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
4166 __init_extra_out(codec, spec->autocfg.speaker_outs,
4167 spec->speaker_paths);
4170 /* initialize multi-io paths */
4171 static void init_multi_io(struct hda_codec *codec)
4173 struct hda_gen_spec *spec = codec->spec;
4176 for (i = 0; i < spec->multi_ios; i++) {
4177 hda_nid_t pin = spec->multi_io[i].pin;
4178 struct nid_path *path;
4179 path = get_multiio_path(codec, i);
4182 if (!spec->multi_io[i].ctl_in)
4183 spec->multi_io[i].ctl_in =
4184 snd_hda_codec_get_pin_target(codec, pin);
4185 snd_hda_activate_path(codec, path, path->active, true);
4189 /* set up input pins and loopback paths */
4190 static void init_analog_input(struct hda_codec *codec)
4192 struct hda_gen_spec *spec = codec->spec;
4193 struct auto_pin_cfg *cfg = &spec->autocfg;
4196 for (i = 0; i < cfg->num_inputs; i++) {
4197 hda_nid_t nid = cfg->inputs[i].pin;
4198 if (is_input_pin(codec, nid))
4199 restore_pin_ctl(codec, nid);
4201 /* init loopback inputs */
4202 if (spec->mixer_nid) {
4203 struct nid_path *path;
4204 path = snd_hda_get_path_from_idx(codec, spec->loopback_paths[i]);
4206 snd_hda_activate_path(codec, path,
4207 path->active, false);
4212 /* initialize ADC paths */
4213 static void init_input_src(struct hda_codec *codec)
4215 struct hda_gen_spec *spec = codec->spec;
4216 struct hda_input_mux *imux = &spec->input_mux;
4217 struct nid_path *path;
4220 if (spec->dyn_adc_switch)
4223 nums = spec->num_adc_nids;
4225 for (c = 0; c < nums; c++) {
4226 for (i = 0; i < imux->num_items; i++) {
4227 path = get_input_path(codec, c, i);
4229 bool active = path->active;
4230 if (i == spec->cur_mux[c])
4232 snd_hda_activate_path(codec, path, active, false);
4237 if (spec->shared_mic_hp)
4238 update_shared_mic_hp(codec, spec->cur_mux[0]);
4240 if (spec->cap_sync_hook)
4241 spec->cap_sync_hook(codec);
4244 /* set right pin controls for digital I/O */
4245 static void init_digital(struct hda_codec *codec)
4247 struct hda_gen_spec *spec = codec->spec;
4251 for (i = 0; i < spec->autocfg.dig_outs; i++)
4252 set_output_and_unmute(codec, spec->digout_paths[i]);
4253 pin = spec->autocfg.dig_in_pin;
4255 struct nid_path *path;
4256 restore_pin_ctl(codec, pin);
4257 path = snd_hda_get_path_from_idx(codec, spec->digin_path);
4259 snd_hda_activate_path(codec, path, path->active, false);
4263 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
4264 * invalid unsol tags by some reason
4266 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
4270 for (i = 0; i < codec->init_pins.used; i++) {
4271 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
4272 hda_nid_t nid = pin->nid;
4273 if (is_jack_detectable(codec, nid) &&
4274 !snd_hda_jack_tbl_get(codec, nid))
4275 snd_hda_codec_update_cache(codec, nid, 0,
4276 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
4281 * initialize the generic spec;
4282 * this can be put as patch_ops.init function
4284 int snd_hda_gen_init(struct hda_codec *codec)
4286 struct hda_gen_spec *spec = codec->spec;
4288 if (spec->init_hook)
4289 spec->init_hook(codec);
4291 snd_hda_apply_verbs(codec);
4293 codec->cached_write = 1;
4295 init_multi_out(codec);
4296 init_extra_out(codec);
4297 init_multi_io(codec);
4298 init_analog_input(codec);
4299 init_input_src(codec);
4300 init_digital(codec);
4302 clear_unsol_on_unused_pins(codec);
4304 /* call init functions of standard auto-mute helpers */
4305 update_automute_all(codec);
4307 snd_hda_codec_flush_amp_cache(codec);
4308 snd_hda_codec_flush_cmd_cache(codec);
4310 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
4311 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
4313 hda_call_check_power_status(codec, 0x01);
4316 EXPORT_SYMBOL_HDA(snd_hda_gen_init);
4319 * free the generic spec;
4320 * this can be put as patch_ops.free function
4322 void snd_hda_gen_free(struct hda_codec *codec)
4324 snd_hda_gen_spec_free(codec->spec);
4328 EXPORT_SYMBOL_HDA(snd_hda_gen_free);
4332 * check the loopback power save state;
4333 * this can be put as patch_ops.check_power_status function
4335 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
4337 struct hda_gen_spec *spec = codec->spec;
4338 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
4340 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status);
4345 * the generic codec support
4348 static const struct hda_codec_ops generic_patch_ops = {
4349 .build_controls = snd_hda_gen_build_controls,
4350 .build_pcms = snd_hda_gen_build_pcms,
4351 .init = snd_hda_gen_init,
4352 .free = snd_hda_gen_free,
4353 .unsol_event = snd_hda_jack_unsol_event,
4355 .check_power_status = snd_hda_gen_check_power_status,
4359 int snd_hda_parse_generic_codec(struct hda_codec *codec)
4361 struct hda_gen_spec *spec;
4364 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4367 snd_hda_gen_spec_init(spec);
4370 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
4374 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
4378 codec->patch_ops = generic_patch_ops;
4382 snd_hda_gen_free(codec);
4385 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec);