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/delay.h>
28 #include <linux/ctype.h>
29 #include <linux/string.h>
30 #include <linux/bitops.h>
31 #include <linux/module.h>
32 #include <sound/core.h>
33 #include <sound/jack.h>
34 #include <sound/tlv.h>
35 #include "hda_codec.h"
36 #include "hda_local.h"
37 #include "hda_auto_parser.h"
40 #include "hda_generic.h"
44 * snd_hda_gen_spec_init - initialize hda_gen_spec struct
45 * @spec: hda_gen_spec object to initialize
47 * Initialize the given hda_gen_spec object.
49 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
51 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
52 snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
53 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8);
54 mutex_init(&spec->pcm_mutex);
57 EXPORT_SYMBOL_GPL(snd_hda_gen_spec_init);
60 * snd_hda_gen_add_kctl - Add a new kctl_new struct from the template
61 * @spec: hda_gen_spec object
62 * @name: name string to override the template, NULL if unchanged
63 * @temp: template for the new kctl
65 * Add a new kctl (actually snd_kcontrol_new to be instantiated later)
66 * element based on the given snd_kcontrol_new template @temp and the
67 * name string @name to the list in @spec.
68 * Returns the newly created object or NULL as error.
70 struct snd_kcontrol_new *
71 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
72 const struct snd_kcontrol_new *temp)
74 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
79 knew->name = kstrdup(name, GFP_KERNEL);
81 knew->name = kstrdup(knew->name, GFP_KERNEL);
86 EXPORT_SYMBOL_GPL(snd_hda_gen_add_kctl);
88 static void free_kctls(struct hda_gen_spec *spec)
90 if (spec->kctls.list) {
91 struct snd_kcontrol_new *kctl = spec->kctls.list;
93 for (i = 0; i < spec->kctls.used; i++)
96 snd_array_free(&spec->kctls);
99 static void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
104 snd_array_free(&spec->paths);
105 snd_array_free(&spec->loopback_list);
111 static void parse_user_hints(struct hda_codec *codec)
113 struct hda_gen_spec *spec = codec->spec;
116 val = snd_hda_get_bool_hint(codec, "jack_detect");
118 codec->no_jack_detect = !val;
119 val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
121 codec->inv_jack_detect = !!val;
122 val = snd_hda_get_bool_hint(codec, "trigger_sense");
124 codec->no_trigger_sense = !val;
125 val = snd_hda_get_bool_hint(codec, "inv_eapd");
127 codec->inv_eapd = !!val;
128 val = snd_hda_get_bool_hint(codec, "pcm_format_first");
130 codec->pcm_format_first = !!val;
131 val = snd_hda_get_bool_hint(codec, "sticky_stream");
133 codec->no_sticky_stream = !val;
134 val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
136 codec->spdif_status_reset = !!val;
137 val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
139 codec->pin_amp_workaround = !!val;
140 val = snd_hda_get_bool_hint(codec, "single_adc_amp");
142 codec->single_adc_amp = !!val;
143 val = snd_hda_get_bool_hint(codec, "power_save_node");
145 codec->power_save_node = !!val;
147 val = snd_hda_get_bool_hint(codec, "auto_mute");
149 spec->suppress_auto_mute = !val;
150 val = snd_hda_get_bool_hint(codec, "auto_mic");
152 spec->suppress_auto_mic = !val;
153 val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
155 spec->line_in_auto_switch = !!val;
156 val = snd_hda_get_bool_hint(codec, "auto_mute_via_amp");
158 spec->auto_mute_via_amp = !!val;
159 val = snd_hda_get_bool_hint(codec, "need_dac_fix");
161 spec->need_dac_fix = !!val;
162 val = snd_hda_get_bool_hint(codec, "primary_hp");
164 spec->no_primary_hp = !val;
165 val = snd_hda_get_bool_hint(codec, "multi_io");
167 spec->no_multi_io = !val;
168 val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
170 spec->multi_cap_vol = !!val;
171 val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
173 spec->inv_dmic_split = !!val;
174 val = snd_hda_get_bool_hint(codec, "indep_hp");
176 spec->indep_hp = !!val;
177 val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
179 spec->add_stereo_mix_input = !!val;
180 /* the following two are just for compatibility */
181 val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
183 spec->add_jack_modes = !!val;
184 val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
186 spec->add_jack_modes = !!val;
187 val = snd_hda_get_bool_hint(codec, "add_jack_modes");
189 spec->add_jack_modes = !!val;
190 val = snd_hda_get_bool_hint(codec, "power_down_unused");
192 spec->power_down_unused = !!val;
193 val = snd_hda_get_bool_hint(codec, "add_hp_mic");
195 spec->hp_mic = !!val;
196 val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
198 spec->suppress_hp_mic_detect = !val;
200 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
201 spec->mixer_nid = val;
205 * pin control value accesses
208 #define update_pin_ctl(codec, pin, val) \
209 snd_hda_codec_update_cache(codec, pin, 0, \
210 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
212 /* restore the pinctl based on the cached value */
213 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
215 update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
218 /* set the pinctl target value and write it if requested */
219 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
220 unsigned int val, bool do_write)
224 val = snd_hda_correct_pin_ctl(codec, pin, val);
225 snd_hda_codec_set_pin_target(codec, pin, val);
227 update_pin_ctl(codec, pin, val);
230 /* set pinctl target values for all given pins */
231 static void set_pin_targets(struct hda_codec *codec, int num_pins,
232 hda_nid_t *pins, unsigned int val)
235 for (i = 0; i < num_pins; i++)
236 set_pin_target(codec, pins[i], val, false);
243 /* return the position of NID in the list, or -1 if not found */
244 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
247 for (i = 0; i < nums; i++)
253 /* return true if the given NID is contained in the path */
254 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
256 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
259 static struct nid_path *get_nid_path(struct hda_codec *codec,
260 hda_nid_t from_nid, hda_nid_t to_nid,
263 struct hda_gen_spec *spec = codec->spec;
266 for (i = 0; i < spec->paths.used; i++) {
267 struct nid_path *path = snd_array_elem(&spec->paths, i);
268 if (path->depth <= 0)
270 if ((!from_nid || path->path[0] == from_nid) &&
271 (!to_nid || path->path[path->depth - 1] == to_nid)) {
273 (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
274 (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
282 * snd_hda_get_nid_path - get the path between the given NIDs
283 * @codec: the HDA codec
284 * @from_nid: the NID where the path start from
285 * @to_nid: the NID where the path ends at
287 * Return the found nid_path object or NULL for error.
288 * Passing 0 to either @from_nid or @to_nid behaves as a wildcard.
290 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
291 hda_nid_t from_nid, hda_nid_t to_nid)
293 return get_nid_path(codec, from_nid, to_nid, 0);
295 EXPORT_SYMBOL_GPL(snd_hda_get_nid_path);
298 * snd_hda_get_path_idx - get the index number corresponding to the path
300 * @codec: the HDA codec
301 * @path: nid_path object
303 * The returned index starts from 1, i.e. the actual array index with offset 1,
304 * and zero is handled as an invalid path
306 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
308 struct hda_gen_spec *spec = codec->spec;
309 struct nid_path *array = spec->paths.list;
312 if (!spec->paths.used)
315 if (idx < 0 || idx >= spec->paths.used)
319 EXPORT_SYMBOL_GPL(snd_hda_get_path_idx);
322 * snd_hda_get_path_from_idx - get the path instance corresponding to the
324 * @codec: the HDA codec
325 * @idx: the path index
327 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
329 struct hda_gen_spec *spec = codec->spec;
331 if (idx <= 0 || idx > spec->paths.used)
333 return snd_array_elem(&spec->paths, idx - 1);
335 EXPORT_SYMBOL_GPL(snd_hda_get_path_from_idx);
337 /* check whether the given DAC is already found in any existing paths */
338 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
340 struct hda_gen_spec *spec = codec->spec;
343 for (i = 0; i < spec->paths.used; i++) {
344 struct nid_path *path = snd_array_elem(&spec->paths, i);
345 if (path->path[0] == nid)
351 /* check whether the given two widgets can be connected */
352 static bool is_reachable_path(struct hda_codec *codec,
353 hda_nid_t from_nid, hda_nid_t to_nid)
355 if (!from_nid || !to_nid)
357 return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
360 /* nid, dir and idx */
361 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
363 /* check whether the given ctl is already assigned in any path elements */
364 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
366 struct hda_gen_spec *spec = codec->spec;
369 val &= AMP_VAL_COMPARE_MASK;
370 for (i = 0; i < spec->paths.used; i++) {
371 struct nid_path *path = snd_array_elem(&spec->paths, i);
372 if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
378 /* check whether a control with the given (nid, dir, idx) was assigned */
379 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
380 int dir, int idx, int type)
382 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
383 return is_ctl_used(codec, val, type);
386 static void print_nid_path(struct hda_codec *codec,
387 const char *pfx, struct nid_path *path)
394 for (i = 0; i < path->depth; i++)
395 pos += scnprintf(pos, sizeof(buf) - (pos - buf), "%s%02x",
396 pos != buf ? ":" : "",
399 codec_dbg(codec, "%s path: depth=%d '%s'\n", pfx, path->depth, buf);
402 /* called recursively */
403 static bool __parse_nid_path(struct hda_codec *codec,
404 hda_nid_t from_nid, hda_nid_t to_nid,
405 int anchor_nid, struct nid_path *path,
408 const hda_nid_t *conn;
411 if (to_nid == anchor_nid)
412 anchor_nid = 0; /* anchor passed */
413 else if (to_nid == (hda_nid_t)(-anchor_nid))
414 return false; /* hit the exclusive nid */
416 nums = snd_hda_get_conn_list(codec, to_nid, &conn);
417 for (i = 0; i < nums; i++) {
418 if (conn[i] != from_nid) {
419 /* special case: when from_nid is 0,
420 * try to find an empty DAC
423 get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
424 is_dac_already_used(codec, conn[i]))
427 /* anchor is not requested or already passed? */
431 if (depth >= MAX_NID_PATH_DEPTH)
433 for (i = 0; i < nums; i++) {
435 type = get_wcaps_type(get_wcaps(codec, conn[i]));
436 if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
439 if (__parse_nid_path(codec, from_nid, conn[i],
440 anchor_nid, path, depth + 1))
446 path->path[path->depth] = conn[i];
447 path->idx[path->depth + 1] = i;
448 if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
449 path->multi[path->depth + 1] = 1;
455 * snd_hda_parse_nid_path - parse the widget path from the given nid to
457 * @codec: the HDA codec
458 * @from_nid: the NID where the path start from
459 * @to_nid: the NID where the path ends at
460 * @anchor_nid: the anchor indication
461 * @path: the path object to store the result
463 * Returns true if a matching path is found.
465 * The parsing behavior depends on parameters:
466 * when @from_nid is 0, try to find an empty DAC;
467 * when @anchor_nid is set to a positive value, only paths through the widget
468 * with the given value are evaluated.
469 * when @anchor_nid is set to a negative value, paths through the widget
470 * with the negative of given value are excluded, only other paths are chosen.
471 * when @anchor_nid is zero, no special handling about path selection.
473 bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
474 hda_nid_t to_nid, int anchor_nid,
475 struct nid_path *path)
477 if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
478 path->path[path->depth] = to_nid;
484 EXPORT_SYMBOL_GPL(snd_hda_parse_nid_path);
487 * snd_hda_add_new_path - parse the path between the given NIDs and
488 * add to the path list
489 * @codec: the HDA codec
490 * @from_nid: the NID where the path start from
491 * @to_nid: the NID where the path ends at
492 * @anchor_nid: the anchor indication, see snd_hda_parse_nid_path()
494 * If no valid path is found, returns NULL.
497 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
498 hda_nid_t to_nid, int anchor_nid)
500 struct hda_gen_spec *spec = codec->spec;
501 struct nid_path *path;
503 if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
506 /* check whether the path has been already added */
507 path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
511 path = snd_array_new(&spec->paths);
514 memset(path, 0, sizeof(*path));
515 if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
521 EXPORT_SYMBOL_GPL(snd_hda_add_new_path);
523 /* clear the given path as invalid so that it won't be picked up later */
524 static void invalidate_nid_path(struct hda_codec *codec, int idx)
526 struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
529 memset(path, 0, sizeof(*path));
532 /* return a DAC if paired to the given pin by codec driver */
533 static hda_nid_t get_preferred_dac(struct hda_codec *codec, hda_nid_t pin)
535 struct hda_gen_spec *spec = codec->spec;
536 const hda_nid_t *list = spec->preferred_dacs;
540 for (; *list; list += 2)
546 /* look for an empty DAC slot */
547 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
550 struct hda_gen_spec *spec = codec->spec;
554 for (i = 0; i < spec->num_all_dacs; i++) {
555 hda_nid_t nid = spec->all_dacs[i];
556 if (!nid || is_dac_already_used(codec, nid))
558 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
559 if (is_digital != cap_digital)
561 if (is_reachable_path(codec, nid, pin))
567 /* replace the channels in the composed amp value with the given number */
568 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
570 val &= ~(0x3U << 16);
575 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
576 hda_nid_t nid2, int dir)
578 if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
579 return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
580 return (query_amp_caps(codec, nid1, dir) ==
581 query_amp_caps(codec, nid2, dir));
584 /* look for a widget suitable for assigning a mute switch in the path */
585 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
586 struct nid_path *path)
590 for (i = path->depth - 1; i >= 0; i--) {
591 if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
592 return path->path[i];
593 if (i != path->depth - 1 && i != 0 &&
594 nid_has_mute(codec, path->path[i], HDA_INPUT))
595 return path->path[i];
600 /* look for a widget suitable for assigning a volume ctl in the path */
601 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
602 struct nid_path *path)
604 struct hda_gen_spec *spec = codec->spec;
607 for (i = path->depth - 1; i >= 0; i--) {
608 hda_nid_t nid = path->path[i];
609 if ((spec->out_vol_mask >> nid) & 1)
611 if (nid_has_volume(codec, nid, HDA_OUTPUT))
618 * path activation / deactivation
621 /* can have the amp-in capability? */
622 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
624 hda_nid_t nid = path->path[idx];
625 unsigned int caps = get_wcaps(codec, nid);
626 unsigned int type = get_wcaps_type(caps);
628 if (!(caps & AC_WCAP_IN_AMP))
630 if (type == AC_WID_PIN && idx > 0) /* only for input pins */
635 /* can have the amp-out capability? */
636 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
638 hda_nid_t nid = path->path[idx];
639 unsigned int caps = get_wcaps(codec, nid);
640 unsigned int type = get_wcaps_type(caps);
642 if (!(caps & AC_WCAP_OUT_AMP))
644 if (type == AC_WID_PIN && !idx) /* only for output pins */
649 /* check whether the given (nid,dir,idx) is active */
650 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
651 unsigned int dir, unsigned int idx)
653 struct hda_gen_spec *spec = codec->spec;
654 int type = get_wcaps_type(get_wcaps(codec, nid));
657 if (nid == codec->afg)
660 for (n = 0; n < spec->paths.used; n++) {
661 struct nid_path *path = snd_array_elem(&spec->paths, n);
664 if (codec->power_save_node) {
665 if (!path->stream_enabled)
667 /* ignore unplugged paths except for DAC/ADC */
668 if (!(path->pin_enabled || path->pin_fixed) &&
669 type != AC_WID_AUD_OUT && type != AC_WID_AUD_IN)
672 for (i = 0; i < path->depth; i++) {
673 if (path->path[i] == nid) {
674 if (dir == HDA_OUTPUT || path->idx[i] == idx)
683 /* check whether the NID is referred by any active paths */
684 #define is_active_nid_for_any(codec, nid) \
685 is_active_nid(codec, nid, HDA_OUTPUT, 0)
687 /* get the default amp value for the target state */
688 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
689 int dir, unsigned int caps, bool enable)
691 unsigned int val = 0;
693 if (caps & AC_AMPCAP_NUM_STEPS) {
696 val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
698 if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
705 /* is this a stereo widget or a stereo-to-mono mix? */
706 static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir)
708 unsigned int wcaps = get_wcaps(codec, nid);
711 if (wcaps & AC_WCAP_STEREO)
713 if (dir != HDA_INPUT || get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
715 if (snd_hda_get_num_conns(codec, nid) != 1)
717 if (snd_hda_get_connections(codec, nid, &conn, 1) < 0)
719 return !!(get_wcaps(codec, conn) & AC_WCAP_STEREO);
722 /* initialize the amp value (only at the first time) */
723 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
725 unsigned int caps = query_amp_caps(codec, nid, dir);
726 int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
728 if (is_stereo_amps(codec, nid, dir))
729 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
731 snd_hda_codec_amp_init(codec, nid, 0, dir, idx, 0xff, val);
734 /* update the amp, doing in stereo or mono depending on NID */
735 static int update_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx,
736 unsigned int mask, unsigned int val)
738 if (is_stereo_amps(codec, nid, dir))
739 return snd_hda_codec_amp_stereo(codec, nid, dir, idx,
742 return snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
746 /* calculate amp value mask we can modify;
747 * if the given amp is controlled by mixers, don't touch it
749 static unsigned int get_amp_mask_to_modify(struct hda_codec *codec,
750 hda_nid_t nid, int dir, int idx,
753 unsigned int mask = 0xff;
755 if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
756 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL))
759 if (caps & AC_AMPCAP_NUM_STEPS) {
760 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
761 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
767 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
768 int idx, int idx_to_check, bool enable)
771 unsigned int mask, val;
773 if (!enable && is_active_nid(codec, nid, dir, idx_to_check))
776 caps = query_amp_caps(codec, nid, dir);
777 val = get_amp_val_to_activate(codec, nid, dir, caps, enable);
778 mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps);
783 update_amp(codec, nid, dir, idx, mask, val);
786 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
789 hda_nid_t nid = path->path[i];
790 init_amp(codec, nid, HDA_OUTPUT, 0);
791 activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable);
794 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
795 int i, bool enable, bool add_aamix)
797 struct hda_gen_spec *spec = codec->spec;
798 const hda_nid_t *conn;
801 hda_nid_t nid = path->path[i];
803 nums = snd_hda_get_conn_list(codec, nid, &conn);
804 type = get_wcaps_type(get_wcaps(codec, nid));
805 if (type == AC_WID_PIN ||
806 (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
812 for (n = 0; n < nums; n++)
813 init_amp(codec, nid, HDA_INPUT, n);
815 /* here is a little bit tricky in comparison with activate_amp_out();
816 * when aa-mixer is available, we need to enable the path as well
818 for (n = 0; n < nums; n++) {
819 if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid))
821 activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
825 /* sync power of each widget in the the given path */
826 static hda_nid_t path_power_update(struct hda_codec *codec,
827 struct nid_path *path,
828 bool allow_powerdown)
830 hda_nid_t nid, changed = 0;
833 for (i = 0; i < path->depth; i++) {
835 if (nid == codec->afg)
837 if (!allow_powerdown || is_active_nid_for_any(codec, nid))
841 if (!snd_hda_check_power_state(codec, nid, state)) {
842 snd_hda_codec_write(codec, nid, 0,
843 AC_VERB_SET_POWER_STATE, state);
845 /* here we assume that widget attributes (e.g. amp,
846 * pinctl connection) don't change with local power
847 * state change. If not, need to sync the cache.
854 /* do sync with the last power state change */
855 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid)
859 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0);
864 * snd_hda_activate_path - activate or deactivate the given path
865 * @codec: the HDA codec
866 * @path: the path to activate/deactivate
867 * @enable: flag to activate or not
868 * @add_aamix: enable the input from aamix NID
870 * If @add_aamix is set, enable the input from aa-mix NID as well (if any).
872 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
873 bool enable, bool add_aamix)
875 struct hda_gen_spec *spec = codec->spec;
879 path->active = false;
881 /* make sure the widget is powered up */
882 if (enable && (spec->power_down_unused || codec->power_save_node))
883 path_power_update(codec, path, codec->power_save_node);
885 for (i = path->depth - 1; i >= 0; i--) {
886 hda_nid_t nid = path->path[i];
888 if (enable && path->multi[i])
889 snd_hda_codec_update_cache(codec, nid, 0,
890 AC_VERB_SET_CONNECT_SEL,
892 if (has_amp_in(codec, path, i))
893 activate_amp_in(codec, path, i, enable, add_aamix);
894 if (has_amp_out(codec, path, i))
895 activate_amp_out(codec, path, i, enable);
901 EXPORT_SYMBOL_GPL(snd_hda_activate_path);
903 /* if the given path is inactive, put widgets into D3 (only if suitable) */
904 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
906 struct hda_gen_spec *spec = codec->spec;
908 if (!(spec->power_down_unused || codec->power_save_node) || path->active)
910 sync_power_state_change(codec, path_power_update(codec, path, true));
913 /* turn on/off EAPD on the given pin */
914 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
916 struct hda_gen_spec *spec = codec->spec;
917 if (spec->own_eapd_ctl ||
918 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
920 if (spec->keep_eapd_on && !enable)
924 snd_hda_codec_update_cache(codec, pin, 0,
925 AC_VERB_SET_EAPD_BTLENABLE,
926 enable ? 0x02 : 0x00);
929 /* re-initialize the path specified by the given path index */
930 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
932 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
934 snd_hda_activate_path(codec, path, path->active, false);
939 * Helper functions for creating mixer ctl elements
942 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
943 struct snd_ctl_elem_value *ucontrol);
944 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
945 struct snd_ctl_elem_value *ucontrol);
952 static const struct snd_kcontrol_new control_templates[] = {
953 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
954 /* only the put callback is replaced for handling the special mute */
956 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
957 .subdevice = HDA_SUBDEV_AMP_FLAG,
958 .info = snd_hda_mixer_amp_switch_info,
959 .get = snd_hda_mixer_amp_switch_get,
960 .put = hda_gen_mixer_mute_put, /* replaced */
961 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
964 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
965 .info = snd_hda_mixer_amp_switch_info,
966 .get = snd_hda_mixer_bind_switch_get,
967 .put = hda_gen_bind_mute_put, /* replaced */
968 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
972 /* add dynamic controls from template */
973 static struct snd_kcontrol_new *
974 add_control(struct hda_gen_spec *spec, int type, const char *name,
975 int cidx, unsigned long val)
977 struct snd_kcontrol_new *knew;
979 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
983 if (get_amp_nid_(val))
984 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
985 knew->private_value = val;
989 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
990 const char *pfx, const char *dir,
991 const char *sfx, int cidx, unsigned long val)
993 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
994 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
995 if (!add_control(spec, type, name, cidx, val))
1000 #define add_pb_vol_ctrl(spec, type, pfx, val) \
1001 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1002 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1003 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1004 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1005 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1006 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1007 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1009 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1010 unsigned int chs, struct nid_path *path)
1015 val = path->ctls[NID_PATH_VOL_CTL];
1018 val = amp_val_replace_channels(val, chs);
1019 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1022 /* return the channel bits suitable for the given path->ctls[] */
1023 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
1026 int chs = 1; /* mono (left only) */
1028 hda_nid_t nid = get_amp_nid_(path->ctls[type]);
1029 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
1030 chs = 3; /* stereo */
1035 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
1036 struct nid_path *path)
1038 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
1039 return add_vol_ctl(codec, pfx, cidx, chs, path);
1042 /* create a mute-switch for the given mixer widget;
1043 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
1045 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1046 unsigned int chs, struct nid_path *path)
1049 int type = HDA_CTL_WIDGET_MUTE;
1053 val = path->ctls[NID_PATH_MUTE_CTL];
1056 val = amp_val_replace_channels(val, chs);
1057 if (get_amp_direction_(val) == HDA_INPUT) {
1058 hda_nid_t nid = get_amp_nid_(val);
1059 int nums = snd_hda_get_num_conns(codec, nid);
1061 type = HDA_CTL_BIND_MUTE;
1065 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1068 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
1069 int cidx, struct nid_path *path)
1071 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
1072 return add_sw_ctl(codec, pfx, cidx, chs, path);
1075 /* playback mute control with the software mute bit check */
1076 static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
1077 struct snd_ctl_elem_value *ucontrol)
1079 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1080 struct hda_gen_spec *spec = codec->spec;
1082 if (spec->auto_mute_via_amp) {
1083 hda_nid_t nid = get_amp_nid(kcontrol);
1084 bool enabled = !((spec->mute_bits >> nid) & 1);
1085 ucontrol->value.integer.value[0] &= enabled;
1086 ucontrol->value.integer.value[1] &= enabled;
1090 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
1091 struct snd_ctl_elem_value *ucontrol)
1093 sync_auto_mute_bits(kcontrol, ucontrol);
1094 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1097 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
1098 struct snd_ctl_elem_value *ucontrol)
1100 sync_auto_mute_bits(kcontrol, ucontrol);
1101 return snd_hda_mixer_bind_switch_put(kcontrol, ucontrol);
1104 /* any ctl assigned to the path with the given index? */
1105 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
1107 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
1108 return path && path->ctls[ctl_type];
1111 static const char * const channel_name[4] = {
1112 "Front", "Surround", "CLFE", "Side"
1115 /* give some appropriate ctl name prefix for the given line out channel */
1116 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1117 int *index, int ctl_type)
1119 struct hda_gen_spec *spec = codec->spec;
1120 struct auto_pin_cfg *cfg = &spec->autocfg;
1123 if (cfg->line_outs == 1 && !spec->multi_ios &&
1124 !cfg->hp_outs && !cfg->speaker_outs)
1125 return spec->vmaster_mute.hook ? "PCM" : "Master";
1127 /* if there is really a single DAC used in the whole output paths,
1128 * use it master (or "PCM" if a vmaster hook is present)
1130 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1131 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1132 return spec->vmaster_mute.hook ? "PCM" : "Master";
1134 /* multi-io channels */
1135 if (ch >= cfg->line_outs)
1136 return channel_name[ch];
1138 switch (cfg->line_out_type) {
1139 case AUTO_PIN_SPEAKER_OUT:
1140 /* if the primary channel vol/mute is shared with HP volume,
1141 * don't name it as Speaker
1143 if (!ch && cfg->hp_outs &&
1144 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1146 if (cfg->line_outs == 1)
1148 if (cfg->line_outs == 2)
1149 return ch ? "Bass Speaker" : "Speaker";
1151 case AUTO_PIN_HP_OUT:
1152 /* if the primary channel vol/mute is shared with spk volume,
1153 * don't name it as Headphone
1155 if (!ch && cfg->speaker_outs &&
1156 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1158 /* for multi-io case, only the primary out */
1159 if (ch && spec->multi_ios)
1163 case AUTO_PIN_LINE_OUT:
1164 /* This deals with the case where we have two DACs and
1165 * one LO, one HP and one Speaker */
1166 if (!ch && cfg->speaker_outs && cfg->hp_outs) {
1167 bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1168 bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
1169 if (hp_lo_shared && spk_lo_shared)
1170 return spec->vmaster_mute.hook ? "PCM" : "Master";
1172 return "Headphone+LO";
1174 return "Speaker+LO";
1178 /* for a single channel output, we don't have to name the channel */
1179 if (cfg->line_outs == 1 && !spec->multi_ios)
1182 if (ch >= ARRAY_SIZE(channel_name)) {
1187 return channel_name[ch];
1191 * Parse output paths
1194 /* badness definition */
1196 /* No primary DAC is found for the main output */
1197 BAD_NO_PRIMARY_DAC = 0x10000,
1198 /* No DAC is found for the extra output */
1199 BAD_NO_DAC = 0x4000,
1200 /* No possible multi-ios */
1201 BAD_MULTI_IO = 0x120,
1202 /* No individual DAC for extra output */
1203 BAD_NO_EXTRA_DAC = 0x102,
1204 /* No individual DAC for extra surrounds */
1205 BAD_NO_EXTRA_SURR_DAC = 0x101,
1206 /* Primary DAC shared with main surrounds */
1207 BAD_SHARED_SURROUND = 0x100,
1208 /* No independent HP possible */
1209 BAD_NO_INDEP_HP = 0x10,
1210 /* Primary DAC shared with main CLFE */
1211 BAD_SHARED_CLFE = 0x10,
1212 /* Primary DAC shared with extra surrounds */
1213 BAD_SHARED_EXTRA_SURROUND = 0x10,
1214 /* Volume widget is shared */
1215 BAD_SHARED_VOL = 0x10,
1218 /* look for widgets in the given path which are appropriate for
1219 * volume and mute controls, and assign the values to ctls[].
1221 * When no appropriate widget is found in the path, the badness value
1222 * is incremented depending on the situation. The function returns the
1223 * total badness for both volume and mute controls.
1225 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1227 struct hda_gen_spec *spec = codec->spec;
1233 return BAD_SHARED_VOL * 2;
1235 if (path->ctls[NID_PATH_VOL_CTL] ||
1236 path->ctls[NID_PATH_MUTE_CTL])
1237 return 0; /* already evaluated */
1239 nid = look_for_out_vol_nid(codec, path);
1241 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1242 if (spec->dac_min_mute)
1243 val |= HDA_AMP_VAL_MIN_MUTE;
1244 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1245 badness += BAD_SHARED_VOL;
1247 path->ctls[NID_PATH_VOL_CTL] = val;
1249 badness += BAD_SHARED_VOL;
1250 nid = look_for_out_mute_nid(codec, path);
1252 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1253 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1254 nid_has_mute(codec, nid, HDA_OUTPUT))
1255 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1257 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1258 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1259 badness += BAD_SHARED_VOL;
1261 path->ctls[NID_PATH_MUTE_CTL] = val;
1263 badness += BAD_SHARED_VOL;
1267 const struct badness_table hda_main_out_badness = {
1268 .no_primary_dac = BAD_NO_PRIMARY_DAC,
1269 .no_dac = BAD_NO_DAC,
1270 .shared_primary = BAD_NO_PRIMARY_DAC,
1271 .shared_surr = BAD_SHARED_SURROUND,
1272 .shared_clfe = BAD_SHARED_CLFE,
1273 .shared_surr_main = BAD_SHARED_SURROUND,
1275 EXPORT_SYMBOL_GPL(hda_main_out_badness);
1277 const struct badness_table hda_extra_out_badness = {
1278 .no_primary_dac = BAD_NO_DAC,
1279 .no_dac = BAD_NO_DAC,
1280 .shared_primary = BAD_NO_EXTRA_DAC,
1281 .shared_surr = BAD_SHARED_EXTRA_SURROUND,
1282 .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1283 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1285 EXPORT_SYMBOL_GPL(hda_extra_out_badness);
1287 /* get the DAC of the primary output corresponding to the given array index */
1288 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1290 struct hda_gen_spec *spec = codec->spec;
1291 struct auto_pin_cfg *cfg = &spec->autocfg;
1293 if (cfg->line_outs > idx)
1294 return spec->private_dac_nids[idx];
1295 idx -= cfg->line_outs;
1296 if (spec->multi_ios > idx)
1297 return spec->multi_io[idx].dac;
1301 /* return the DAC if it's reachable, otherwise zero */
1302 static inline hda_nid_t try_dac(struct hda_codec *codec,
1303 hda_nid_t dac, hda_nid_t pin)
1305 return is_reachable_path(codec, dac, pin) ? dac : 0;
1308 /* try to assign DACs to pins and return the resultant badness */
1309 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1310 const hda_nid_t *pins, hda_nid_t *dacs,
1312 const struct badness_table *bad)
1314 struct hda_gen_spec *spec = codec->spec;
1322 for (i = 0; i < num_outs; i++) {
1323 struct nid_path *path;
1324 hda_nid_t pin = pins[i];
1326 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1328 badness += assign_out_path_ctls(codec, path);
1332 dacs[i] = get_preferred_dac(codec, pin);
1334 if (is_dac_already_used(codec, dacs[i]))
1335 badness += bad->shared_primary;
1339 dacs[i] = look_for_dac(codec, pin, false);
1340 if (!dacs[i] && !i) {
1341 /* try to steal the DAC of surrounds for the front */
1342 for (j = 1; j < num_outs; j++) {
1343 if (is_reachable_path(codec, dacs[j], pin)) {
1346 invalidate_nid_path(codec, path_idx[j]);
1355 dac = try_dac(codec, get_primary_out(codec, i), pin);
1357 dac = try_dac(codec, dacs[0], pin);
1359 dac = try_dac(codec, get_primary_out(codec, i), pin);
1362 badness += bad->shared_primary;
1364 badness += bad->shared_surr;
1366 badness += bad->shared_clfe;
1367 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1368 dac = spec->private_dac_nids[0];
1369 badness += bad->shared_surr_main;
1371 badness += bad->no_primary_dac;
1373 badness += bad->no_dac;
1377 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1378 if (!path && !i && spec->mixer_nid) {
1379 /* try with aamix */
1380 path = snd_hda_add_new_path(codec, dac, pin, 0);
1384 badness += bad->no_dac;
1386 /* print_nid_path(codec, "output", path); */
1387 path->active = true;
1388 path_idx[i] = snd_hda_get_path_idx(codec, path);
1389 badness += assign_out_path_ctls(codec, path);
1396 /* return NID if the given pin has only a single connection to a certain DAC */
1397 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1399 struct hda_gen_spec *spec = codec->spec;
1401 hda_nid_t nid_found = 0;
1403 for (i = 0; i < spec->num_all_dacs; i++) {
1404 hda_nid_t nid = spec->all_dacs[i];
1405 if (!nid || is_dac_already_used(codec, nid))
1407 if (is_reachable_path(codec, nid, pin)) {
1416 /* check whether the given pin can be a multi-io pin */
1417 static bool can_be_multiio_pin(struct hda_codec *codec,
1418 unsigned int location, hda_nid_t nid)
1420 unsigned int defcfg, caps;
1422 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1423 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1425 if (location && get_defcfg_location(defcfg) != location)
1427 caps = snd_hda_query_pin_caps(codec, nid);
1428 if (!(caps & AC_PINCAP_OUT))
1433 /* count the number of input pins that are capable to be multi-io */
1434 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1436 struct hda_gen_spec *spec = codec->spec;
1437 struct auto_pin_cfg *cfg = &spec->autocfg;
1438 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1439 unsigned int location = get_defcfg_location(defcfg);
1443 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1444 for (i = 0; i < cfg->num_inputs; i++) {
1445 if (cfg->inputs[i].type != type)
1447 if (can_be_multiio_pin(codec, location,
1448 cfg->inputs[i].pin))
1458 * When hardwired is set, try to fill ony hardwired pins, and returns
1459 * zero if any pins are filled, non-zero if nothing found.
1460 * When hardwired is off, try to fill possible input pins, and returns
1461 * the badness value.
1463 static int fill_multi_ios(struct hda_codec *codec,
1464 hda_nid_t reference_pin,
1467 struct hda_gen_spec *spec = codec->spec;
1468 struct auto_pin_cfg *cfg = &spec->autocfg;
1469 int type, i, j, num_pins, old_pins;
1470 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1471 unsigned int location = get_defcfg_location(defcfg);
1473 struct nid_path *path;
1475 old_pins = spec->multi_ios;
1479 num_pins = count_multiio_pins(codec, reference_pin);
1483 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1484 for (i = 0; i < cfg->num_inputs; i++) {
1485 hda_nid_t nid = cfg->inputs[i].pin;
1488 if (cfg->inputs[i].type != type)
1490 if (!can_be_multiio_pin(codec, location, nid))
1492 for (j = 0; j < spec->multi_ios; j++) {
1493 if (nid == spec->multi_io[j].pin)
1496 if (j < spec->multi_ios)
1500 dac = get_dac_if_single(codec, nid);
1502 dac = look_for_dac(codec, nid, false);
1507 path = snd_hda_add_new_path(codec, dac, nid,
1513 /* print_nid_path(codec, "multiio", path); */
1514 spec->multi_io[spec->multi_ios].pin = nid;
1515 spec->multi_io[spec->multi_ios].dac = dac;
1516 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1517 snd_hda_get_path_idx(codec, path);
1519 if (spec->multi_ios >= 2)
1525 badness = BAD_MULTI_IO;
1526 if (old_pins == spec->multi_ios) {
1528 return 1; /* nothing found */
1530 return badness; /* no badness if nothing found */
1532 if (!hardwired && spec->multi_ios < 2) {
1533 /* cancel newly assigned paths */
1534 spec->paths.used -= spec->multi_ios - old_pins;
1535 spec->multi_ios = old_pins;
1539 /* assign volume and mute controls */
1540 for (i = old_pins; i < spec->multi_ios; i++) {
1541 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1542 badness += assign_out_path_ctls(codec, path);
1548 /* map DACs for all pins in the list if they are single connections */
1549 static bool map_singles(struct hda_codec *codec, int outs,
1550 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1552 struct hda_gen_spec *spec = codec->spec;
1555 for (i = 0; i < outs; i++) {
1556 struct nid_path *path;
1560 dac = get_dac_if_single(codec, pins[i]);
1563 path = snd_hda_add_new_path(codec, dac, pins[i],
1565 if (!path && !i && spec->mixer_nid)
1566 path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1570 /* print_nid_path(codec, "output", path); */
1571 path->active = true;
1572 path_idx[i] = snd_hda_get_path_idx(codec, path);
1578 /* create a new path including aamix if available, and return its index */
1579 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1581 struct hda_gen_spec *spec = codec->spec;
1582 struct nid_path *path;
1583 hda_nid_t path_dac, dac, pin;
1585 path = snd_hda_get_path_from_idx(codec, path_idx);
1586 if (!path || !path->depth ||
1587 is_nid_contained(path, spec->mixer_nid))
1589 path_dac = path->path[0];
1590 dac = spec->private_dac_nids[0];
1591 pin = path->path[path->depth - 1];
1592 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1594 if (dac != path_dac)
1596 else if (spec->multiout.hp_out_nid[0])
1597 dac = spec->multiout.hp_out_nid[0];
1598 else if (spec->multiout.extra_out_nid[0])
1599 dac = spec->multiout.extra_out_nid[0];
1603 path = snd_hda_add_new_path(codec, dac, pin,
1608 /* print_nid_path(codec, "output-aamix", path); */
1609 path->active = false; /* unused as default */
1610 path->pin_fixed = true; /* static route */
1611 return snd_hda_get_path_idx(codec, path);
1614 /* check whether the independent HP is available with the current config */
1615 static bool indep_hp_possible(struct hda_codec *codec)
1617 struct hda_gen_spec *spec = codec->spec;
1618 struct auto_pin_cfg *cfg = &spec->autocfg;
1619 struct nid_path *path;
1622 if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1623 idx = spec->out_paths[0];
1625 idx = spec->hp_paths[0];
1626 path = snd_hda_get_path_from_idx(codec, idx);
1630 /* assume no path conflicts unless aamix is involved */
1631 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1634 /* check whether output paths contain aamix */
1635 for (i = 0; i < cfg->line_outs; i++) {
1636 if (spec->out_paths[i] == idx)
1638 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1639 if (path && is_nid_contained(path, spec->mixer_nid))
1642 for (i = 0; i < cfg->speaker_outs; i++) {
1643 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1644 if (path && is_nid_contained(path, spec->mixer_nid))
1651 /* fill the empty entries in the dac array for speaker/hp with the
1652 * shared dac pointed by the paths
1654 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1655 hda_nid_t *dacs, int *path_idx)
1657 struct nid_path *path;
1660 for (i = 0; i < num_outs; i++) {
1663 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1666 dacs[i] = path->path[0];
1670 /* fill in the dac_nids table from the parsed pin configuration */
1671 static int fill_and_eval_dacs(struct hda_codec *codec,
1672 bool fill_hardwired,
1673 bool fill_mio_first)
1675 struct hda_gen_spec *spec = codec->spec;
1676 struct auto_pin_cfg *cfg = &spec->autocfg;
1677 int i, err, badness;
1679 /* set num_dacs once to full for look_for_dac() */
1680 spec->multiout.num_dacs = cfg->line_outs;
1681 spec->multiout.dac_nids = spec->private_dac_nids;
1682 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1683 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1684 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1685 spec->multi_ios = 0;
1686 snd_array_free(&spec->paths);
1688 /* clear path indices */
1689 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1690 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1691 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1692 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1693 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1694 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1695 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1696 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1700 /* fill hard-wired DACs first */
1701 if (fill_hardwired) {
1704 mapped = map_singles(codec, cfg->line_outs,
1706 spec->private_dac_nids,
1708 mapped |= map_singles(codec, cfg->hp_outs,
1710 spec->multiout.hp_out_nid,
1712 mapped |= map_singles(codec, cfg->speaker_outs,
1714 spec->multiout.extra_out_nid,
1715 spec->speaker_paths);
1716 if (!spec->no_multi_io &&
1717 fill_mio_first && cfg->line_outs == 1 &&
1718 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1719 err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1726 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1727 spec->private_dac_nids, spec->out_paths,
1728 spec->main_out_badness);
1730 if (!spec->no_multi_io && fill_mio_first &&
1731 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1732 /* try to fill multi-io first */
1733 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1736 /* we don't count badness at this stage yet */
1739 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1740 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1741 spec->multiout.hp_out_nid,
1743 spec->extra_out_badness);
1748 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1749 err = try_assign_dacs(codec, cfg->speaker_outs,
1751 spec->multiout.extra_out_nid,
1752 spec->speaker_paths,
1753 spec->extra_out_badness);
1758 if (!spec->no_multi_io &&
1759 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1760 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1766 if (spec->mixer_nid) {
1767 spec->aamix_out_paths[0] =
1768 check_aamix_out_path(codec, spec->out_paths[0]);
1769 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1770 spec->aamix_out_paths[1] =
1771 check_aamix_out_path(codec, spec->hp_paths[0]);
1772 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1773 spec->aamix_out_paths[2] =
1774 check_aamix_out_path(codec, spec->speaker_paths[0]);
1777 if (!spec->no_multi_io &&
1778 cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1779 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1780 spec->multi_ios = 1; /* give badness */
1782 /* re-count num_dacs and squash invalid entries */
1783 spec->multiout.num_dacs = 0;
1784 for (i = 0; i < cfg->line_outs; i++) {
1785 if (spec->private_dac_nids[i])
1786 spec->multiout.num_dacs++;
1788 memmove(spec->private_dac_nids + i,
1789 spec->private_dac_nids + i + 1,
1790 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1791 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1795 spec->ext_channel_count = spec->min_channel_count =
1796 spec->multiout.num_dacs * 2;
1798 if (spec->multi_ios == 2) {
1799 for (i = 0; i < 2; i++)
1800 spec->private_dac_nids[spec->multiout.num_dacs++] =
1801 spec->multi_io[i].dac;
1802 } else if (spec->multi_ios) {
1803 spec->multi_ios = 0;
1804 badness += BAD_MULTI_IO;
1807 if (spec->indep_hp && !indep_hp_possible(codec))
1808 badness += BAD_NO_INDEP_HP;
1810 /* re-fill the shared DAC for speaker / headphone */
1811 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1812 refill_shared_dacs(codec, cfg->hp_outs,
1813 spec->multiout.hp_out_nid,
1815 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1816 refill_shared_dacs(codec, cfg->speaker_outs,
1817 spec->multiout.extra_out_nid,
1818 spec->speaker_paths);
1823 #define DEBUG_BADNESS
1825 #ifdef DEBUG_BADNESS
1826 #define debug_badness(fmt, ...) \
1827 codec_dbg(codec, fmt, ##__VA_ARGS__)
1829 #define debug_badness(fmt, ...) \
1830 do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1833 #ifdef DEBUG_BADNESS
1834 static inline void print_nid_path_idx(struct hda_codec *codec,
1835 const char *pfx, int idx)
1837 struct nid_path *path;
1839 path = snd_hda_get_path_from_idx(codec, idx);
1841 print_nid_path(codec, pfx, path);
1844 static void debug_show_configs(struct hda_codec *codec,
1845 struct auto_pin_cfg *cfg)
1847 struct hda_gen_spec *spec = codec->spec;
1848 static const char * const lo_type[3] = { "LO", "SP", "HP" };
1851 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1852 cfg->line_out_pins[0], cfg->line_out_pins[1],
1853 cfg->line_out_pins[2], cfg->line_out_pins[3],
1854 spec->multiout.dac_nids[0],
1855 spec->multiout.dac_nids[1],
1856 spec->multiout.dac_nids[2],
1857 spec->multiout.dac_nids[3],
1858 lo_type[cfg->line_out_type]);
1859 for (i = 0; i < cfg->line_outs; i++)
1860 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1861 if (spec->multi_ios > 0)
1862 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1864 spec->multi_io[0].pin, spec->multi_io[1].pin,
1865 spec->multi_io[0].dac, spec->multi_io[1].dac);
1866 for (i = 0; i < spec->multi_ios; i++)
1867 print_nid_path_idx(codec, " mio",
1868 spec->out_paths[cfg->line_outs + i]);
1870 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1871 cfg->hp_pins[0], cfg->hp_pins[1],
1872 cfg->hp_pins[2], cfg->hp_pins[3],
1873 spec->multiout.hp_out_nid[0],
1874 spec->multiout.hp_out_nid[1],
1875 spec->multiout.hp_out_nid[2],
1876 spec->multiout.hp_out_nid[3]);
1877 for (i = 0; i < cfg->hp_outs; i++)
1878 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1879 if (cfg->speaker_outs)
1880 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1881 cfg->speaker_pins[0], cfg->speaker_pins[1],
1882 cfg->speaker_pins[2], cfg->speaker_pins[3],
1883 spec->multiout.extra_out_nid[0],
1884 spec->multiout.extra_out_nid[1],
1885 spec->multiout.extra_out_nid[2],
1886 spec->multiout.extra_out_nid[3]);
1887 for (i = 0; i < cfg->speaker_outs; i++)
1888 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1889 for (i = 0; i < 3; i++)
1890 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1893 #define debug_show_configs(codec, cfg) /* NOP */
1896 /* find all available DACs of the codec */
1897 static void fill_all_dac_nids(struct hda_codec *codec)
1899 struct hda_gen_spec *spec = codec->spec;
1901 hda_nid_t nid = codec->start_nid;
1903 spec->num_all_dacs = 0;
1904 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1905 for (i = 0; i < codec->num_nodes; i++, nid++) {
1906 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1908 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1909 codec_err(codec, "Too many DACs!\n");
1912 spec->all_dacs[spec->num_all_dacs++] = nid;
1916 static int parse_output_paths(struct hda_codec *codec)
1918 struct hda_gen_spec *spec = codec->spec;
1919 struct auto_pin_cfg *cfg = &spec->autocfg;
1920 struct auto_pin_cfg *best_cfg;
1922 int best_badness = INT_MAX;
1924 bool fill_hardwired = true, fill_mio_first = true;
1925 bool best_wired = true, best_mio = true;
1926 bool hp_spk_swapped = false;
1928 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1934 badness = fill_and_eval_dacs(codec, fill_hardwired,
1940 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1941 cfg->line_out_type, fill_hardwired, fill_mio_first,
1943 debug_show_configs(codec, cfg);
1944 if (badness < best_badness) {
1945 best_badness = badness;
1947 best_wired = fill_hardwired;
1948 best_mio = fill_mio_first;
1952 fill_mio_first = !fill_mio_first;
1953 if (!fill_mio_first)
1955 fill_hardwired = !fill_hardwired;
1956 if (!fill_hardwired)
1960 hp_spk_swapped = true;
1961 if (cfg->speaker_outs > 0 &&
1962 cfg->line_out_type == AUTO_PIN_HP_OUT) {
1963 cfg->hp_outs = cfg->line_outs;
1964 memcpy(cfg->hp_pins, cfg->line_out_pins,
1965 sizeof(cfg->hp_pins));
1966 cfg->line_outs = cfg->speaker_outs;
1967 memcpy(cfg->line_out_pins, cfg->speaker_pins,
1968 sizeof(cfg->speaker_pins));
1969 cfg->speaker_outs = 0;
1970 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1971 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1972 fill_hardwired = true;
1975 if (cfg->hp_outs > 0 &&
1976 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1977 cfg->speaker_outs = cfg->line_outs;
1978 memcpy(cfg->speaker_pins, cfg->line_out_pins,
1979 sizeof(cfg->speaker_pins));
1980 cfg->line_outs = cfg->hp_outs;
1981 memcpy(cfg->line_out_pins, cfg->hp_pins,
1982 sizeof(cfg->hp_pins));
1984 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1985 cfg->line_out_type = AUTO_PIN_HP_OUT;
1986 fill_hardwired = true;
1993 debug_badness("==> restoring best_cfg\n");
1995 fill_and_eval_dacs(codec, best_wired, best_mio);
1997 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1998 cfg->line_out_type, best_wired, best_mio);
1999 debug_show_configs(codec, cfg);
2001 if (cfg->line_out_pins[0]) {
2002 struct nid_path *path;
2003 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2005 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2006 if (spec->vmaster_nid) {
2007 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2008 HDA_OUTPUT, spec->vmaster_tlv);
2009 if (spec->dac_min_mute)
2010 spec->vmaster_tlv[3] |= TLV_DB_SCALE_MUTE;
2014 /* set initial pinctl targets */
2015 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2019 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
2020 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2021 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
2022 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
2023 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2024 set_pin_targets(codec, cfg->speaker_outs,
2025 cfg->speaker_pins, val);
2028 /* clear indep_hp flag if not available */
2029 if (spec->indep_hp && !indep_hp_possible(codec))
2036 /* add playback controls from the parsed DAC table */
2037 static int create_multi_out_ctls(struct hda_codec *codec,
2038 const struct auto_pin_cfg *cfg)
2040 struct hda_gen_spec *spec = codec->spec;
2041 int i, err, noutputs;
2043 noutputs = cfg->line_outs;
2044 if (spec->multi_ios > 0 && cfg->line_outs < 3)
2045 noutputs += spec->multi_ios;
2047 for (i = 0; i < noutputs; i++) {
2050 struct nid_path *path;
2052 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2056 name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
2057 if (!name || !strcmp(name, "CLFE")) {
2059 err = add_vol_ctl(codec, "Center", 0, 1, path);
2062 err = add_vol_ctl(codec, "LFE", 0, 2, path);
2066 err = add_stereo_vol(codec, name, index, path);
2071 name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
2072 if (!name || !strcmp(name, "CLFE")) {
2073 err = add_sw_ctl(codec, "Center", 0, 1, path);
2076 err = add_sw_ctl(codec, "LFE", 0, 2, path);
2080 err = add_stereo_sw(codec, name, index, path);
2088 static int create_extra_out(struct hda_codec *codec, int path_idx,
2089 const char *pfx, int cidx)
2091 struct nid_path *path;
2094 path = snd_hda_get_path_from_idx(codec, path_idx);
2097 err = add_stereo_vol(codec, pfx, cidx, path);
2100 err = add_stereo_sw(codec, pfx, cidx, path);
2106 /* add playback controls for speaker and HP outputs */
2107 static int create_extra_outs(struct hda_codec *codec, int num_pins,
2108 const int *paths, const char *pfx)
2112 for (i = 0; i < num_pins; i++) {
2114 char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2117 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
2118 name = "Bass Speaker";
2119 else if (num_pins >= 3) {
2120 snprintf(tmp, sizeof(tmp), "%s %s",
2121 pfx, channel_name[i]);
2127 err = create_extra_out(codec, paths[i], name, idx);
2134 static int create_hp_out_ctls(struct hda_codec *codec)
2136 struct hda_gen_spec *spec = codec->spec;
2137 return create_extra_outs(codec, spec->autocfg.hp_outs,
2142 static int create_speaker_out_ctls(struct hda_codec *codec)
2144 struct hda_gen_spec *spec = codec->spec;
2145 return create_extra_outs(codec, spec->autocfg.speaker_outs,
2146 spec->speaker_paths,
2151 * independent HP controls
2154 static void call_hp_automute(struct hda_codec *codec,
2155 struct hda_jack_callback *jack);
2156 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2157 struct snd_ctl_elem_info *uinfo)
2159 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2162 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2163 struct snd_ctl_elem_value *ucontrol)
2165 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2166 struct hda_gen_spec *spec = codec->spec;
2167 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2171 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2172 int nomix_path_idx, int mix_path_idx,
2175 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2176 struct snd_ctl_elem_value *ucontrol)
2178 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2179 struct hda_gen_spec *spec = codec->spec;
2180 unsigned int select = ucontrol->value.enumerated.item[0];
2183 mutex_lock(&spec->pcm_mutex);
2184 if (spec->active_streams) {
2189 if (spec->indep_hp_enabled != select) {
2191 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2192 dacp = &spec->private_dac_nids[0];
2194 dacp = &spec->multiout.hp_out_nid[0];
2196 /* update HP aamix paths in case it conflicts with indep HP */
2197 if (spec->have_aamix_ctl) {
2198 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2199 update_aamix_paths(codec, spec->aamix_mode,
2201 spec->aamix_out_paths[0],
2202 spec->autocfg.line_out_type);
2204 update_aamix_paths(codec, spec->aamix_mode,
2206 spec->aamix_out_paths[1],
2210 spec->indep_hp_enabled = select;
2211 if (spec->indep_hp_enabled)
2214 *dacp = spec->alt_dac_nid;
2216 call_hp_automute(codec, NULL);
2220 mutex_unlock(&spec->pcm_mutex);
2224 static const struct snd_kcontrol_new indep_hp_ctl = {
2225 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2226 .name = "Independent HP",
2227 .info = indep_hp_info,
2228 .get = indep_hp_get,
2229 .put = indep_hp_put,
2233 static int create_indep_hp_ctls(struct hda_codec *codec)
2235 struct hda_gen_spec *spec = codec->spec;
2238 if (!spec->indep_hp)
2240 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2241 dac = spec->multiout.dac_nids[0];
2243 dac = spec->multiout.hp_out_nid[0];
2249 spec->indep_hp_enabled = false;
2250 spec->alt_dac_nid = dac;
2251 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2257 * channel mode enum control
2260 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2261 struct snd_ctl_elem_info *uinfo)
2263 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2264 struct hda_gen_spec *spec = codec->spec;
2267 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2269 uinfo->value.enumerated.items = spec->multi_ios + 1;
2270 if (uinfo->value.enumerated.item > spec->multi_ios)
2271 uinfo->value.enumerated.item = spec->multi_ios;
2272 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2273 sprintf(uinfo->value.enumerated.name, "%dch", chs);
2277 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2278 struct snd_ctl_elem_value *ucontrol)
2280 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2281 struct hda_gen_spec *spec = codec->spec;
2282 ucontrol->value.enumerated.item[0] =
2283 (spec->ext_channel_count - spec->min_channel_count) / 2;
2287 static inline struct nid_path *
2288 get_multiio_path(struct hda_codec *codec, int idx)
2290 struct hda_gen_spec *spec = codec->spec;
2291 return snd_hda_get_path_from_idx(codec,
2292 spec->out_paths[spec->autocfg.line_outs + idx]);
2295 static void update_automute_all(struct hda_codec *codec);
2297 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2298 * used for output paths
2300 static bool aamix_default(struct hda_gen_spec *spec)
2302 return !spec->have_aamix_ctl || spec->aamix_mode;
2305 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2307 struct hda_gen_spec *spec = codec->spec;
2308 hda_nid_t nid = spec->multi_io[idx].pin;
2309 struct nid_path *path;
2311 path = get_multiio_path(codec, idx);
2315 if (path->active == output)
2319 set_pin_target(codec, nid, PIN_OUT, true);
2320 snd_hda_activate_path(codec, path, true, aamix_default(spec));
2321 set_pin_eapd(codec, nid, true);
2323 set_pin_eapd(codec, nid, false);
2324 snd_hda_activate_path(codec, path, false, aamix_default(spec));
2325 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2326 path_power_down_sync(codec, path);
2329 /* update jack retasking in case it modifies any of them */
2330 update_automute_all(codec);
2335 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2336 struct snd_ctl_elem_value *ucontrol)
2338 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2339 struct hda_gen_spec *spec = codec->spec;
2342 ch = ucontrol->value.enumerated.item[0];
2343 if (ch < 0 || ch > spec->multi_ios)
2345 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2347 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2348 for (i = 0; i < spec->multi_ios; i++)
2349 set_multi_io(codec, i, i < ch);
2350 spec->multiout.max_channels = max(spec->ext_channel_count,
2351 spec->const_channel_count);
2352 if (spec->need_dac_fix)
2353 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2357 static const struct snd_kcontrol_new channel_mode_enum = {
2358 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2359 .name = "Channel Mode",
2360 .info = ch_mode_info,
2365 static int create_multi_channel_mode(struct hda_codec *codec)
2367 struct hda_gen_spec *spec = codec->spec;
2369 if (spec->multi_ios > 0) {
2370 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2377 * aamix loopback enable/disable switch
2380 #define loopback_mixing_info indep_hp_info
2382 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2383 struct snd_ctl_elem_value *ucontrol)
2385 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2386 struct hda_gen_spec *spec = codec->spec;
2387 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2391 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2392 int nomix_path_idx, int mix_path_idx,
2395 struct hda_gen_spec *spec = codec->spec;
2396 struct nid_path *nomix_path, *mix_path;
2398 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2399 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2400 if (!nomix_path || !mix_path)
2403 /* if HP aamix path is driven from a different DAC and the
2404 * independent HP mode is ON, can't turn on aamix path
2406 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2407 mix_path->path[0] != spec->alt_dac_nid)
2411 snd_hda_activate_path(codec, nomix_path, false, true);
2412 snd_hda_activate_path(codec, mix_path, true, true);
2413 path_power_down_sync(codec, nomix_path);
2415 snd_hda_activate_path(codec, mix_path, false, false);
2416 snd_hda_activate_path(codec, nomix_path, true, false);
2417 path_power_down_sync(codec, mix_path);
2421 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2422 struct snd_ctl_elem_value *ucontrol)
2424 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2425 struct hda_gen_spec *spec = codec->spec;
2426 unsigned int val = ucontrol->value.enumerated.item[0];
2428 if (val == spec->aamix_mode)
2430 spec->aamix_mode = val;
2431 update_aamix_paths(codec, val, spec->out_paths[0],
2432 spec->aamix_out_paths[0],
2433 spec->autocfg.line_out_type);
2434 update_aamix_paths(codec, val, spec->hp_paths[0],
2435 spec->aamix_out_paths[1],
2437 update_aamix_paths(codec, val, spec->speaker_paths[0],
2438 spec->aamix_out_paths[2],
2439 AUTO_PIN_SPEAKER_OUT);
2443 static const struct snd_kcontrol_new loopback_mixing_enum = {
2444 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2445 .name = "Loopback Mixing",
2446 .info = loopback_mixing_info,
2447 .get = loopback_mixing_get,
2448 .put = loopback_mixing_put,
2451 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2453 struct hda_gen_spec *spec = codec->spec;
2455 if (!spec->mixer_nid)
2457 if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2458 spec->aamix_out_paths[2]))
2460 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2462 spec->have_aamix_ctl = 1;
2467 * shared headphone/mic handling
2470 static void call_update_outputs(struct hda_codec *codec);
2472 /* for shared I/O, change the pin-control accordingly */
2473 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2475 struct hda_gen_spec *spec = codec->spec;
2480 pin = spec->hp_mic_pin;
2481 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2484 val = snd_hda_codec_get_pin_target(codec, pin);
2494 val = snd_hda_get_default_vref(codec, pin);
2495 /* if the HP pin doesn't support VREF and the codec driver gives an
2496 * alternative pin, set up the VREF on that pin instead
2498 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2499 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2500 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2501 if (vref_val != AC_PINCTL_VREF_HIZ)
2502 snd_hda_set_pin_ctl_cache(codec, vref_pin,
2503 PIN_IN | (as_mic ? vref_val : 0));
2506 if (!spec->hp_mic_jack_modes) {
2511 set_pin_target(codec, pin, val, true);
2512 call_hp_automute(codec, NULL);
2516 /* create a shared input with the headphone out */
2517 static int create_hp_mic(struct hda_codec *codec)
2519 struct hda_gen_spec *spec = codec->spec;
2520 struct auto_pin_cfg *cfg = &spec->autocfg;
2521 unsigned int defcfg;
2524 if (!spec->hp_mic) {
2525 if (spec->suppress_hp_mic_detect)
2527 /* automatic detection: only if no input or a single internal
2528 * input pin is found, try to detect the shared hp/mic
2530 if (cfg->num_inputs > 1)
2532 else if (cfg->num_inputs == 1) {
2533 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2534 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2539 spec->hp_mic = 0; /* clear once */
2540 if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2544 if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2545 nid = cfg->line_out_pins[0];
2546 else if (cfg->hp_outs > 0)
2547 nid = cfg->hp_pins[0];
2551 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2552 return 0; /* no input */
2554 cfg->inputs[cfg->num_inputs].pin = nid;
2555 cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2556 cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2559 spec->hp_mic_pin = nid;
2560 /* we can't handle auto-mic together with HP-mic */
2561 spec->suppress_auto_mic = 1;
2562 codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid);
2570 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2572 static const char * const out_jack_texts[] = {
2573 "Line Out", "Headphone Out",
2576 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2577 struct snd_ctl_elem_info *uinfo)
2579 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2582 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2583 struct snd_ctl_elem_value *ucontrol)
2585 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2586 hda_nid_t nid = kcontrol->private_value;
2587 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2588 ucontrol->value.enumerated.item[0] = 1;
2590 ucontrol->value.enumerated.item[0] = 0;
2594 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2595 struct snd_ctl_elem_value *ucontrol)
2597 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2598 hda_nid_t nid = kcontrol->private_value;
2601 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2602 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2604 snd_hda_set_pin_ctl_cache(codec, nid, val);
2608 static const struct snd_kcontrol_new out_jack_mode_enum = {
2609 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2610 .info = out_jack_mode_info,
2611 .get = out_jack_mode_get,
2612 .put = out_jack_mode_put,
2615 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2617 struct hda_gen_spec *spec = codec->spec;
2620 for (i = 0; i < spec->kctls.used; i++) {
2621 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2622 if (!strcmp(kctl->name, name) && kctl->index == idx)
2628 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2629 char *name, size_t name_len)
2631 struct hda_gen_spec *spec = codec->spec;
2634 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2635 strlcat(name, " Jack Mode", name_len);
2637 for (; find_kctl_name(codec, name, idx); idx++)
2641 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2643 struct hda_gen_spec *spec = codec->spec;
2644 if (spec->add_jack_modes) {
2645 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2646 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2652 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2655 struct hda_gen_spec *spec = codec->spec;
2658 for (i = 0; i < num_pins; i++) {
2659 hda_nid_t pin = pins[i];
2660 if (pin == spec->hp_mic_pin)
2662 if (get_out_jack_num_items(codec, pin) > 1) {
2663 struct snd_kcontrol_new *knew;
2664 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2665 get_jack_mode_name(codec, pin, name, sizeof(name));
2666 knew = snd_hda_gen_add_kctl(spec, name,
2667 &out_jack_mode_enum);
2670 knew->private_value = pin;
2681 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2684 static const char * const vref_texts[NUM_VREFS] = {
2685 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2686 "", "Mic 80pc Bias", "Mic 100pc Bias"
2689 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2691 unsigned int pincap;
2693 pincap = snd_hda_query_pin_caps(codec, pin);
2694 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2695 /* filter out unusual vrefs */
2696 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2700 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2701 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2703 unsigned int i, n = 0;
2705 for (i = 0; i < NUM_VREFS; i++) {
2706 if (vref_caps & (1 << i)) {
2715 /* convert back from the vref ctl index to the enum item index */
2716 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2718 unsigned int i, n = 0;
2720 for (i = 0; i < NUM_VREFS; i++) {
2723 if (vref_caps & (1 << i))
2729 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2730 struct snd_ctl_elem_info *uinfo)
2732 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2733 hda_nid_t nid = kcontrol->private_value;
2734 unsigned int vref_caps = get_vref_caps(codec, nid);
2736 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2738 /* set the right text */
2739 strcpy(uinfo->value.enumerated.name,
2740 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2744 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2745 struct snd_ctl_elem_value *ucontrol)
2747 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2748 hda_nid_t nid = kcontrol->private_value;
2749 unsigned int vref_caps = get_vref_caps(codec, nid);
2752 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2753 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2757 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2758 struct snd_ctl_elem_value *ucontrol)
2760 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2761 hda_nid_t nid = kcontrol->private_value;
2762 unsigned int vref_caps = get_vref_caps(codec, nid);
2763 unsigned int val, idx;
2765 val = snd_hda_codec_get_pin_target(codec, nid);
2766 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2767 if (idx == ucontrol->value.enumerated.item[0])
2770 val &= ~AC_PINCTL_VREFEN;
2771 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2772 snd_hda_set_pin_ctl_cache(codec, nid, val);
2776 static const struct snd_kcontrol_new in_jack_mode_enum = {
2777 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2778 .info = in_jack_mode_info,
2779 .get = in_jack_mode_get,
2780 .put = in_jack_mode_put,
2783 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2785 struct hda_gen_spec *spec = codec->spec;
2787 if (spec->add_jack_modes)
2788 nitems = hweight32(get_vref_caps(codec, pin));
2789 return nitems ? nitems : 1;
2792 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2794 struct hda_gen_spec *spec = codec->spec;
2795 struct snd_kcontrol_new *knew;
2796 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2797 unsigned int defcfg;
2799 if (pin == spec->hp_mic_pin)
2800 return 0; /* already done in create_out_jack_mode() */
2802 /* no jack mode for fixed pins */
2803 defcfg = snd_hda_codec_get_pincfg(codec, pin);
2804 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2807 /* no multiple vref caps? */
2808 if (get_in_jack_num_items(codec, pin) <= 1)
2811 get_jack_mode_name(codec, pin, name, sizeof(name));
2812 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2815 knew->private_value = pin;
2820 * HP/mic shared jack mode
2822 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2823 struct snd_ctl_elem_info *uinfo)
2825 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2826 hda_nid_t nid = kcontrol->private_value;
2827 int out_jacks = get_out_jack_num_items(codec, nid);
2828 int in_jacks = get_in_jack_num_items(codec, nid);
2829 const char *text = NULL;
2832 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2834 uinfo->value.enumerated.items = out_jacks + in_jacks;
2835 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2836 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2837 idx = uinfo->value.enumerated.item;
2838 if (idx < out_jacks) {
2840 text = out_jack_texts[idx];
2842 text = "Headphone Out";
2846 unsigned int vref_caps = get_vref_caps(codec, nid);
2847 text = vref_texts[get_vref_idx(vref_caps, idx)];
2852 strcpy(uinfo->value.enumerated.name, text);
2856 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2858 int out_jacks = get_out_jack_num_items(codec, nid);
2859 int in_jacks = get_in_jack_num_items(codec, nid);
2860 unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2863 if (val & PIN_OUT) {
2864 if (out_jacks > 1 && val == PIN_HP)
2866 } else if (val & PIN_IN) {
2869 unsigned int vref_caps = get_vref_caps(codec, nid);
2870 val &= AC_PINCTL_VREFEN;
2871 idx += cvt_from_vref_idx(vref_caps, val);
2877 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2878 struct snd_ctl_elem_value *ucontrol)
2880 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2881 hda_nid_t nid = kcontrol->private_value;
2882 ucontrol->value.enumerated.item[0] =
2883 get_cur_hp_mic_jack_mode(codec, nid);
2887 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2888 struct snd_ctl_elem_value *ucontrol)
2890 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2891 hda_nid_t nid = kcontrol->private_value;
2892 int out_jacks = get_out_jack_num_items(codec, nid);
2893 int in_jacks = get_in_jack_num_items(codec, nid);
2894 unsigned int val, oldval, idx;
2896 oldval = get_cur_hp_mic_jack_mode(codec, nid);
2897 idx = ucontrol->value.enumerated.item[0];
2901 if (idx < out_jacks) {
2903 val = idx ? PIN_HP : PIN_OUT;
2909 unsigned int vref_caps = get_vref_caps(codec, nid);
2910 val = snd_hda_codec_get_pin_target(codec, nid);
2911 val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2912 val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2914 val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2916 snd_hda_set_pin_ctl_cache(codec, nid, val);
2917 call_hp_automute(codec, NULL);
2922 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2923 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2924 .info = hp_mic_jack_mode_info,
2925 .get = hp_mic_jack_mode_get,
2926 .put = hp_mic_jack_mode_put,
2929 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2931 struct hda_gen_spec *spec = codec->spec;
2932 struct snd_kcontrol_new *knew;
2934 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2935 &hp_mic_jack_mode_enum);
2938 knew->private_value = pin;
2939 spec->hp_mic_jack_modes = 1;
2947 /* add the powersave loopback-list entry */
2948 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2950 struct hda_amp_list *list;
2952 list = snd_array_new(&spec->loopback_list);
2956 list->dir = HDA_INPUT;
2958 spec->loopback.amplist = spec->loopback_list.list;
2962 /* return true if either a volume or a mute amp is found for the given
2963 * aamix path; the amp has to be either in the mixer node or its direct leaf
2965 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
2966 hda_nid_t pin, unsigned int *mix_val,
2967 unsigned int *mute_val)
2970 const hda_nid_t *list;
2973 idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
2977 *mix_val = *mute_val = 0;
2978 if (nid_has_volume(codec, mix_nid, HDA_INPUT))
2979 *mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2980 if (nid_has_mute(codec, mix_nid, HDA_INPUT))
2981 *mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2982 if (*mix_val && *mute_val)
2985 /* check leaf node */
2986 num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
2987 if (num_conns < idx)
2990 if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
2991 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
2992 *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2993 if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
2994 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
2995 *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2997 return *mix_val || *mute_val;
3000 /* create input playback/capture controls for the given pin */
3001 static int new_analog_input(struct hda_codec *codec, int input_idx,
3002 hda_nid_t pin, const char *ctlname, int ctlidx,
3005 struct hda_gen_spec *spec = codec->spec;
3006 struct nid_path *path;
3007 unsigned int mix_val, mute_val;
3010 if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
3013 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
3016 print_nid_path(codec, "loopback", path);
3017 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3019 idx = path->idx[path->depth - 1];
3021 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3024 path->ctls[NID_PATH_VOL_CTL] = mix_val;
3028 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3031 path->ctls[NID_PATH_MUTE_CTL] = mute_val;
3034 path->active = true;
3035 path->stream_enabled = true; /* no DAC/ADC involved */
3036 err = add_loopback_list(spec, mix_nid, idx);
3040 if (spec->mixer_nid != spec->mixer_merge_nid &&
3041 !spec->loopback_merge_path) {
3042 path = snd_hda_add_new_path(codec, spec->mixer_nid,
3043 spec->mixer_merge_nid, 0);
3045 print_nid_path(codec, "loopback-merge", path);
3046 path->active = true;
3047 path->pin_fixed = true; /* static route */
3048 path->stream_enabled = true; /* no DAC/ADC involved */
3049 spec->loopback_merge_path =
3050 snd_hda_get_path_idx(codec, path);
3057 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
3059 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
3060 return (pincap & AC_PINCAP_IN) != 0;
3063 /* Parse the codec tree and retrieve ADCs */
3064 static int fill_adc_nids(struct hda_codec *codec)
3066 struct hda_gen_spec *spec = codec->spec;
3068 hda_nid_t *adc_nids = spec->adc_nids;
3069 int max_nums = ARRAY_SIZE(spec->adc_nids);
3072 nid = codec->start_nid;
3073 for (i = 0; i < codec->num_nodes; i++, nid++) {
3074 unsigned int caps = get_wcaps(codec, nid);
3075 int type = get_wcaps_type(caps);
3077 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
3079 adc_nids[nums] = nid;
3080 if (++nums >= max_nums)
3083 spec->num_adc_nids = nums;
3085 /* copy the detected ADCs to all_adcs[] */
3086 spec->num_all_adcs = nums;
3087 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3092 /* filter out invalid adc_nids that don't give all active input pins;
3093 * if needed, check whether dynamic ADC-switching is available
3095 static int check_dyn_adc_switch(struct hda_codec *codec)
3097 struct hda_gen_spec *spec = codec->spec;
3098 struct hda_input_mux *imux = &spec->input_mux;
3099 unsigned int ok_bits;
3104 for (n = 0; n < spec->num_adc_nids; n++) {
3105 for (i = 0; i < imux->num_items; i++) {
3106 if (!spec->input_paths[i][n])
3109 if (i >= imux->num_items) {
3110 ok_bits |= (1 << n);
3116 /* check whether ADC-switch is possible */
3117 for (i = 0; i < imux->num_items; i++) {
3118 for (n = 0; n < spec->num_adc_nids; n++) {
3119 if (spec->input_paths[i][n]) {
3120 spec->dyn_adc_idx[i] = n;
3126 codec_dbg(codec, "enabling ADC switching\n");
3127 spec->dyn_adc_switch = 1;
3128 } else if (nums != spec->num_adc_nids) {
3129 /* shrink the invalid adcs and input paths */
3131 for (n = 0; n < spec->num_adc_nids; n++) {
3132 if (!(ok_bits & (1 << n)))
3135 spec->adc_nids[nums] = spec->adc_nids[n];
3136 for (i = 0; i < imux->num_items; i++) {
3137 invalidate_nid_path(codec,
3138 spec->input_paths[i][nums]);
3139 spec->input_paths[i][nums] =
3140 spec->input_paths[i][n];
3145 spec->num_adc_nids = nums;
3148 if (imux->num_items == 1 ||
3149 (imux->num_items == 2 && spec->hp_mic)) {
3150 codec_dbg(codec, "reducing to a single ADC\n");
3151 spec->num_adc_nids = 1; /* reduce to a single ADC */
3154 /* single index for individual volumes ctls */
3155 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3156 spec->num_adc_nids = 1;
3161 /* parse capture source paths from the given pin and create imux items */
3162 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3163 int cfg_idx, int num_adcs,
3164 const char *label, int anchor)
3166 struct hda_gen_spec *spec = codec->spec;
3167 struct hda_input_mux *imux = &spec->input_mux;
3168 int imux_idx = imux->num_items;
3169 bool imux_added = false;
3172 for (c = 0; c < num_adcs; c++) {
3173 struct nid_path *path;
3174 hda_nid_t adc = spec->adc_nids[c];
3176 if (!is_reachable_path(codec, pin, adc))
3178 path = snd_hda_add_new_path(codec, pin, adc, anchor);
3181 print_nid_path(codec, "input", path);
3182 spec->input_paths[imux_idx][c] =
3183 snd_hda_get_path_idx(codec, path);
3186 if (spec->hp_mic_pin == pin)
3187 spec->hp_mic_mux_idx = imux->num_items;
3188 spec->imux_pins[imux->num_items] = pin;
3189 snd_hda_add_imux_item(codec, imux, label, cfg_idx, NULL);
3191 if (spec->dyn_adc_switch)
3192 spec->dyn_adc_idx[imux_idx] = c;
3200 * create playback/capture controls for input pins
3203 /* fill the label for each input at first */
3204 static int fill_input_pin_labels(struct hda_codec *codec)
3206 struct hda_gen_spec *spec = codec->spec;
3207 const struct auto_pin_cfg *cfg = &spec->autocfg;
3210 for (i = 0; i < cfg->num_inputs; i++) {
3211 hda_nid_t pin = cfg->inputs[i].pin;
3215 if (!is_input_pin(codec, pin))
3218 label = hda_get_autocfg_input_label(codec, cfg, i);
3220 for (j = i - 1; j >= 0; j--) {
3221 if (spec->input_labels[j] &&
3222 !strcmp(spec->input_labels[j], label)) {
3223 idx = spec->input_label_idxs[j] + 1;
3228 spec->input_labels[i] = label;
3229 spec->input_label_idxs[i] = idx;
3235 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
3237 static int create_input_ctls(struct hda_codec *codec)
3239 struct hda_gen_spec *spec = codec->spec;
3240 const struct auto_pin_cfg *cfg = &spec->autocfg;
3241 hda_nid_t mixer = spec->mixer_nid;
3246 num_adcs = fill_adc_nids(codec);
3250 err = fill_input_pin_labels(codec);
3254 for (i = 0; i < cfg->num_inputs; i++) {
3257 pin = cfg->inputs[i].pin;
3258 if (!is_input_pin(codec, pin))
3262 if (cfg->inputs[i].type == AUTO_PIN_MIC)
3263 val |= snd_hda_get_default_vref(codec, pin);
3264 if (pin != spec->hp_mic_pin)
3265 set_pin_target(codec, pin, val, false);
3268 if (is_reachable_path(codec, pin, mixer)) {
3269 err = new_analog_input(codec, i, pin,
3270 spec->input_labels[i],
3271 spec->input_label_idxs[i],
3278 err = parse_capture_source(codec, pin, i, num_adcs,
3279 spec->input_labels[i], -mixer);
3283 if (spec->add_jack_modes) {
3284 err = create_in_jack_mode(codec, pin);
3290 /* add stereo mix when explicitly enabled via hint */
3291 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3292 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3297 spec->suppress_auto_mic = 1;
3308 /* get the input path specified by the given adc and imux indices */
3309 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3311 struct hda_gen_spec *spec = codec->spec;
3312 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3316 if (spec->dyn_adc_switch)
3317 adc_idx = spec->dyn_adc_idx[imux_idx];
3318 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3322 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3325 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3328 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3329 struct snd_ctl_elem_info *uinfo)
3331 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3332 struct hda_gen_spec *spec = codec->spec;
3333 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3336 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3337 struct snd_ctl_elem_value *ucontrol)
3339 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3340 struct hda_gen_spec *spec = codec->spec;
3341 /* the ctls are created at once with multiple counts */
3342 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3344 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3348 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3349 struct snd_ctl_elem_value *ucontrol)
3351 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3352 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3353 return mux_select(codec, adc_idx,
3354 ucontrol->value.enumerated.item[0]);
3357 static const struct snd_kcontrol_new cap_src_temp = {
3358 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3359 .name = "Input Source",
3360 .info = mux_enum_info,
3361 .get = mux_enum_get,
3362 .put = mux_enum_put,
3366 * capture volume and capture switch ctls
3369 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3370 struct snd_ctl_elem_value *ucontrol);
3372 /* call the given amp update function for all amps in the imux list at once */
3373 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3374 struct snd_ctl_elem_value *ucontrol,
3375 put_call_t func, int type)
3377 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3378 struct hda_gen_spec *spec = codec->spec;
3379 const struct hda_input_mux *imux;
3380 struct nid_path *path;
3381 int i, adc_idx, err = 0;
3383 imux = &spec->input_mux;
3384 adc_idx = kcontrol->id.index;
3385 mutex_lock(&codec->control_mutex);
3386 /* we use the cache-only update at first since multiple input paths
3387 * may shared the same amp; by updating only caches, the redundant
3388 * writes to hardware can be reduced.
3390 codec->cached_write = 1;
3391 for (i = 0; i < imux->num_items; i++) {
3392 path = get_input_path(codec, adc_idx, i);
3393 if (!path || !path->ctls[type])
3395 kcontrol->private_value = path->ctls[type];
3396 err = func(kcontrol, ucontrol);
3401 codec->cached_write = 0;
3402 mutex_unlock(&codec->control_mutex);
3403 snd_hda_codec_flush_cache(codec); /* flush the updates */
3404 if (err >= 0 && spec->cap_sync_hook)
3405 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3409 /* capture volume ctl callbacks */
3410 #define cap_vol_info snd_hda_mixer_amp_volume_info
3411 #define cap_vol_get snd_hda_mixer_amp_volume_get
3412 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3414 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3415 struct snd_ctl_elem_value *ucontrol)
3417 return cap_put_caller(kcontrol, ucontrol,
3418 snd_hda_mixer_amp_volume_put,
3422 static const struct snd_kcontrol_new cap_vol_temp = {
3423 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3424 .name = "Capture Volume",
3425 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3426 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3427 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3428 .info = cap_vol_info,
3431 .tlv = { .c = cap_vol_tlv },
3434 /* capture switch ctl callbacks */
3435 #define cap_sw_info snd_ctl_boolean_stereo_info
3436 #define cap_sw_get snd_hda_mixer_amp_switch_get
3438 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3439 struct snd_ctl_elem_value *ucontrol)
3441 return cap_put_caller(kcontrol, ucontrol,
3442 snd_hda_mixer_amp_switch_put,
3446 static const struct snd_kcontrol_new cap_sw_temp = {
3447 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3448 .name = "Capture Switch",
3449 .info = cap_sw_info,
3454 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3459 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3460 for (depth = 0; depth < 3; depth++) {
3461 if (depth >= path->depth)
3463 i = path->depth - depth - 1;
3464 nid = path->path[i];
3465 if (!path->ctls[NID_PATH_VOL_CTL]) {
3466 if (nid_has_volume(codec, nid, HDA_OUTPUT))
3467 path->ctls[NID_PATH_VOL_CTL] =
3468 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3469 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3470 int idx = path->idx[i];
3471 if (!depth && codec->single_adc_amp)
3473 path->ctls[NID_PATH_VOL_CTL] =
3474 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3477 if (!path->ctls[NID_PATH_MUTE_CTL]) {
3478 if (nid_has_mute(codec, nid, HDA_OUTPUT))
3479 path->ctls[NID_PATH_MUTE_CTL] =
3480 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3481 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3482 int idx = path->idx[i];
3483 if (!depth && codec->single_adc_amp)
3485 path->ctls[NID_PATH_MUTE_CTL] =
3486 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3493 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3495 struct hda_gen_spec *spec = codec->spec;
3496 struct auto_pin_cfg *cfg = &spec->autocfg;
3500 if (!spec->inv_dmic_split)
3502 for (i = 0; i < cfg->num_inputs; i++) {
3503 if (cfg->inputs[i].pin != nid)
3505 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3507 val = snd_hda_codec_get_pincfg(codec, nid);
3508 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3513 /* capture switch put callback for a single control with hook call */
3514 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3515 struct snd_ctl_elem_value *ucontrol)
3517 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3518 struct hda_gen_spec *spec = codec->spec;
3521 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3525 if (spec->cap_sync_hook)
3526 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3531 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3532 int idx, bool is_switch, unsigned int ctl,
3535 struct hda_gen_spec *spec = codec->spec;
3536 char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3537 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3538 const char *sfx = is_switch ? "Switch" : "Volume";
3539 unsigned int chs = inv_dmic ? 1 : 3;
3540 struct snd_kcontrol_new *knew;
3546 snprintf(tmpname, sizeof(tmpname),
3547 "%s Capture %s", label, sfx);
3549 snprintf(tmpname, sizeof(tmpname),
3551 knew = add_control(spec, type, tmpname, idx,
3552 amp_val_replace_channels(ctl, chs));
3556 knew->put = cap_single_sw_put;
3560 /* Make independent right kcontrol */
3562 snprintf(tmpname, sizeof(tmpname),
3563 "Inverted %s Capture %s", label, sfx);
3565 snprintf(tmpname, sizeof(tmpname),
3566 "Inverted Capture %s", sfx);
3567 knew = add_control(spec, type, tmpname, idx,
3568 amp_val_replace_channels(ctl, 2));
3572 knew->put = cap_single_sw_put;
3576 /* create single (and simple) capture volume and switch controls */
3577 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3578 unsigned int vol_ctl, unsigned int sw_ctl,
3582 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3585 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3591 /* create bound capture volume and switch controls */
3592 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3593 unsigned int vol_ctl, unsigned int sw_ctl)
3595 struct hda_gen_spec *spec = codec->spec;
3596 struct snd_kcontrol_new *knew;
3599 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3603 knew->private_value = vol_ctl;
3604 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3607 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3611 knew->private_value = sw_ctl;
3612 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3617 /* return the vol ctl when used first in the imux list */
3618 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3620 struct nid_path *path;
3624 path = get_input_path(codec, 0, idx);
3627 ctl = path->ctls[type];
3630 for (i = 0; i < idx - 1; i++) {
3631 path = get_input_path(codec, 0, i);
3632 if (path && path->ctls[type] == ctl)
3638 /* create individual capture volume and switch controls per input */
3639 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3641 struct hda_gen_spec *spec = codec->spec;
3642 struct hda_input_mux *imux = &spec->input_mux;
3645 for (i = 0; i < imux->num_items; i++) {
3649 idx = imux->items[i].index;
3650 if (idx >= spec->autocfg.num_inputs)
3652 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3654 for (type = 0; type < 2; type++) {
3655 err = add_single_cap_ctl(codec,
3656 spec->input_labels[idx],
3657 spec->input_label_idxs[idx],
3659 get_first_cap_ctl(codec, i, type),
3668 static int create_capture_mixers(struct hda_codec *codec)
3670 struct hda_gen_spec *spec = codec->spec;
3671 struct hda_input_mux *imux = &spec->input_mux;
3672 int i, n, nums, err;
3674 if (spec->dyn_adc_switch)
3677 nums = spec->num_adc_nids;
3679 if (!spec->auto_mic && imux->num_items > 1) {
3680 struct snd_kcontrol_new *knew;
3682 name = nums > 1 ? "Input Source" : "Capture Source";
3683 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3689 for (n = 0; n < nums; n++) {
3691 bool multi_cap_vol = spec->multi_cap_vol;
3692 bool inv_dmic = false;
3696 for (i = 0; i < imux->num_items; i++) {
3697 struct nid_path *path;
3698 path = get_input_path(codec, n, i);
3701 parse_capvol_in_path(codec, path);
3703 vol = path->ctls[NID_PATH_VOL_CTL];
3704 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3706 if (!same_amp_caps(codec, vol,
3707 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3708 multi_cap_vol = true;
3711 sw = path->ctls[NID_PATH_MUTE_CTL];
3712 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3714 if (!same_amp_caps(codec, sw,
3715 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3716 multi_cap_vol = true;
3718 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3723 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3725 else if (!multi_cap_vol && !inv_dmic)
3726 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3728 err = create_multi_cap_vol_ctl(codec);
3737 * add mic boosts if needed
3740 /* check whether the given amp is feasible as a boost volume */
3741 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3746 if (!nid_has_volume(codec, nid, dir) ||
3747 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3748 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3751 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3752 >> AC_AMPCAP_STEP_SIZE_SHIFT;
3758 /* look for a boost amp in a widget close to the pin */
3759 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3760 struct nid_path *path)
3762 unsigned int val = 0;
3766 for (depth = 0; depth < 3; depth++) {
3767 if (depth >= path->depth - 1)
3769 nid = path->path[depth];
3770 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3771 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3773 } else if (check_boost_vol(codec, nid, HDA_INPUT,
3774 path->idx[depth])) {
3775 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3784 static int parse_mic_boost(struct hda_codec *codec)
3786 struct hda_gen_spec *spec = codec->spec;
3787 struct auto_pin_cfg *cfg = &spec->autocfg;
3788 struct hda_input_mux *imux = &spec->input_mux;
3791 if (!spec->num_adc_nids)
3794 for (i = 0; i < imux->num_items; i++) {
3795 struct nid_path *path;
3798 char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3800 idx = imux->items[i].index;
3801 if (idx >= imux->num_items)
3804 /* check only line-in and mic pins */
3805 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3808 path = get_input_path(codec, 0, i);
3812 val = look_for_boost_amp(codec, path);
3816 /* create a boost control */
3817 snprintf(boost_label, sizeof(boost_label),
3818 "%s Boost Volume", spec->input_labels[idx]);
3819 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3820 spec->input_label_idxs[idx], val))
3823 path->ctls[NID_PATH_BOOST_CTL] = val;
3829 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3831 static void parse_digital(struct hda_codec *codec)
3833 struct hda_gen_spec *spec = codec->spec;
3834 struct nid_path *path;
3836 hda_nid_t dig_nid, pin;
3838 /* support multiple SPDIFs; the secondary is set up as a slave */
3840 for (i = 0; i < spec->autocfg.dig_outs; i++) {
3841 pin = spec->autocfg.dig_out_pins[i];
3842 dig_nid = look_for_dac(codec, pin, true);
3845 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3848 print_nid_path(codec, "digout", path);
3849 path->active = true;
3850 path->pin_fixed = true; /* no jack detection */
3851 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3852 set_pin_target(codec, pin, PIN_OUT, false);
3854 spec->multiout.dig_out_nid = dig_nid;
3855 spec->dig_out_type = spec->autocfg.dig_out_type[0];
3857 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3858 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3860 spec->slave_dig_outs[nums - 1] = dig_nid;
3865 if (spec->autocfg.dig_in_pin) {
3866 pin = spec->autocfg.dig_in_pin;
3867 dig_nid = codec->start_nid;
3868 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3869 unsigned int wcaps = get_wcaps(codec, dig_nid);
3870 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3872 if (!(wcaps & AC_WCAP_DIGITAL))
3874 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3876 print_nid_path(codec, "digin", path);
3877 path->active = true;
3878 path->pin_fixed = true; /* no jack */
3879 spec->dig_in_nid = dig_nid;
3880 spec->digin_path = snd_hda_get_path_idx(codec, path);
3881 set_pin_target(codec, pin, PIN_IN, false);
3890 * input MUX handling
3893 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3895 /* select the given imux item; either unmute exclusively or select the route */
3896 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3899 struct hda_gen_spec *spec = codec->spec;
3900 const struct hda_input_mux *imux;
3901 struct nid_path *old_path, *path;
3903 imux = &spec->input_mux;
3904 if (!imux->num_items)
3907 if (idx >= imux->num_items)
3908 idx = imux->num_items - 1;
3909 if (spec->cur_mux[adc_idx] == idx)
3912 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3915 if (old_path->active)
3916 snd_hda_activate_path(codec, old_path, false, false);
3918 spec->cur_mux[adc_idx] = idx;
3921 update_hp_mic(codec, adc_idx, false);
3923 if (spec->dyn_adc_switch)
3924 dyn_adc_pcm_resetup(codec, idx);
3926 path = get_input_path(codec, adc_idx, idx);
3931 snd_hda_activate_path(codec, path, true, false);
3932 if (spec->cap_sync_hook)
3933 spec->cap_sync_hook(codec, NULL, NULL);
3934 path_power_down_sync(codec, old_path);
3938 /* power up/down widgets in the all paths that match with the given NID
3939 * as terminals (either start- or endpoint)
3941 * returns the last changed NID, or zero if unchanged.
3943 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
3944 int pin_state, int stream_state)
3946 struct hda_gen_spec *spec = codec->spec;
3947 hda_nid_t last, changed = 0;
3948 struct nid_path *path;
3951 for (n = 0; n < spec->paths.used; n++) {
3952 path = snd_array_elem(&spec->paths, n);
3953 if (path->path[0] == nid ||
3954 path->path[path->depth - 1] == nid) {
3955 bool pin_old = path->pin_enabled;
3956 bool stream_old = path->stream_enabled;
3959 path->pin_enabled = pin_state;
3960 if (stream_state >= 0)
3961 path->stream_enabled = stream_state;
3962 if ((!path->pin_fixed && path->pin_enabled != pin_old)
3963 || path->stream_enabled != stream_old) {
3964 last = path_power_update(codec, path, true);
3973 /* power up/down the paths of the given pin according to the jack state;
3974 * power = 0/1 : only power up/down if it matches with the jack state,
3975 * < 0 : force power up/down to follow the jack sate
3977 * returns the last changed NID, or zero if unchanged.
3979 static hda_nid_t set_pin_power_jack(struct hda_codec *codec, hda_nid_t pin,
3984 if (!codec->power_save_node)
3987 on = snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
3988 if (power >= 0 && on != power)
3990 return set_path_power(codec, pin, on, -1);
3993 static void pin_power_callback(struct hda_codec *codec,
3994 struct hda_jack_callback *jack,
3997 if (jack && jack->tbl->nid)
3998 sync_power_state_change(codec,
3999 set_pin_power_jack(codec, jack->tbl->nid, on));
4002 /* callback only doing power up -- called at first */
4003 static void pin_power_up_callback(struct hda_codec *codec,
4004 struct hda_jack_callback *jack)
4006 pin_power_callback(codec, jack, true);
4009 /* callback only doing power down -- called at last */
4010 static void pin_power_down_callback(struct hda_codec *codec,
4011 struct hda_jack_callback *jack)
4013 pin_power_callback(codec, jack, false);
4016 /* set up the power up/down callbacks */
4017 static void add_pin_power_ctls(struct hda_codec *codec, int num_pins,
4018 const hda_nid_t *pins, bool on)
4021 hda_jack_callback_fn cb =
4022 on ? pin_power_up_callback : pin_power_down_callback;
4024 for (i = 0; i < num_pins && pins[i]; i++) {
4025 if (is_jack_detectable(codec, pins[i]))
4026 snd_hda_jack_detect_enable_callback(codec, pins[i], cb);
4028 set_path_power(codec, pins[i], true, -1);
4032 /* enabled power callback to each available I/O pin with jack detections;
4033 * the digital I/O pins are excluded because of the unreliable detectsion
4035 static void add_all_pin_power_ctls(struct hda_codec *codec, bool on)
4037 struct hda_gen_spec *spec = codec->spec;
4038 struct auto_pin_cfg *cfg = &spec->autocfg;
4041 if (!codec->power_save_node)
4043 add_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins, on);
4044 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4045 add_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins, on);
4046 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4047 add_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins, on);
4048 for (i = 0; i < cfg->num_inputs; i++)
4049 add_pin_power_ctls(codec, 1, &cfg->inputs[i].pin, on);
4052 /* sync path power up/down with the jack states of given pins */
4053 static void sync_pin_power_ctls(struct hda_codec *codec, int num_pins,
4054 const hda_nid_t *pins)
4058 for (i = 0; i < num_pins && pins[i]; i++)
4059 if (is_jack_detectable(codec, pins[i]))
4060 set_pin_power_jack(codec, pins[i], -1);
4063 /* sync path power up/down with pins; called at init and resume */
4064 static void sync_all_pin_power_ctls(struct hda_codec *codec)
4066 struct hda_gen_spec *spec = codec->spec;
4067 struct auto_pin_cfg *cfg = &spec->autocfg;
4070 if (!codec->power_save_node)
4072 sync_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins);
4073 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4074 sync_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins);
4075 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4076 sync_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins);
4077 for (i = 0; i < cfg->num_inputs; i++)
4078 sync_pin_power_ctls(codec, 1, &cfg->inputs[i].pin);
4081 /* add fake paths if not present yet */
4082 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid,
4083 int num_pins, const hda_nid_t *pins)
4085 struct hda_gen_spec *spec = codec->spec;
4086 struct nid_path *path;
4089 for (i = 0; i < num_pins; i++) {
4092 if (get_nid_path(codec, nid, pins[i], 0))
4094 path = snd_array_new(&spec->paths);
4097 memset(path, 0, sizeof(*path));
4099 path->path[0] = nid;
4100 path->path[1] = pins[i];
4101 path->active = true;
4106 /* create fake paths to all outputs from beep */
4107 static int add_fake_beep_paths(struct hda_codec *codec)
4109 struct hda_gen_spec *spec = codec->spec;
4110 struct auto_pin_cfg *cfg = &spec->autocfg;
4111 hda_nid_t nid = spec->beep_nid;
4114 if (!codec->power_save_node || !nid)
4116 err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins);
4119 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4120 err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins);
4124 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4125 err = add_fake_paths(codec, nid, cfg->speaker_outs,
4133 /* power up/down beep widget and its output paths */
4134 static void beep_power_hook(struct hda_beep *beep, bool on)
4136 set_path_power(beep->codec, beep->nid, -1, on);
4140 * snd_hda_gen_fix_pin_power - Fix the power of the given pin widget to D0
4141 * @codec: the HDA codec
4142 * @pin: NID of pin to fix
4144 int snd_hda_gen_fix_pin_power(struct hda_codec *codec, hda_nid_t pin)
4146 struct hda_gen_spec *spec = codec->spec;
4147 struct nid_path *path;
4149 path = snd_array_new(&spec->paths);
4152 memset(path, 0, sizeof(*path));
4154 path->path[0] = pin;
4155 path->active = true;
4156 path->pin_fixed = true;
4157 path->stream_enabled = true;
4160 EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power);
4163 * Jack detections for HP auto-mute and mic-switch
4166 /* check each pin in the given array; returns true if any of them is plugged */
4167 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
4170 bool present = false;
4172 for (i = 0; i < num_pins; i++) {
4173 hda_nid_t nid = pins[i];
4176 /* don't detect pins retasked as inputs */
4177 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
4179 if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
4185 /* standard HP/line-out auto-mute helper */
4186 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
4187 int *paths, bool mute)
4189 struct hda_gen_spec *spec = codec->spec;
4192 for (i = 0; i < num_pins; i++) {
4193 hda_nid_t nid = pins[i];
4194 unsigned int val, oldval;
4198 oldval = snd_hda_codec_get_pin_target(codec, nid);
4199 if (oldval & PIN_IN)
4200 continue; /* no mute for inputs */
4202 if (spec->auto_mute_via_amp) {
4203 struct nid_path *path;
4206 path = snd_hda_get_path_from_idx(codec, paths[i]);
4209 mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
4213 spec->mute_bits |= (1ULL << mute_nid);
4215 spec->mute_bits &= ~(1ULL << mute_nid);
4218 /* don't reset VREF value in case it's controlling
4219 * the amp (see alc861_fixup_asus_amp_vref_0f())
4221 if (spec->keep_vref_in_automute)
4222 val = oldval & ~PIN_HP;
4227 /* here we call update_pin_ctl() so that the pinctl is
4228 * changed without changing the pinctl target value;
4229 * the original target value will be still referred at
4230 * the init / resume again
4232 update_pin_ctl(codec, nid, val);
4235 set_pin_eapd(codec, nid, !mute);
4236 if (codec->power_save_node) {
4239 on = snd_hda_jack_detect_state(codec, nid)
4240 != HDA_JACK_NOT_PRESENT;
4241 set_path_power(codec, nid, on, -1);
4247 * snd_hda_gen_update_outputs - Toggle outputs muting
4248 * @codec: the HDA codec
4250 * Update the mute status of all outputs based on the current jack states.
4252 void snd_hda_gen_update_outputs(struct hda_codec *codec)
4254 struct hda_gen_spec *spec = codec->spec;
4258 /* Control HP pins/amps depending on master_mute state;
4259 * in general, HP pins/amps control should be enabled in all cases,
4260 * but currently set only for master_mute, just to be safe
4262 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4263 paths = spec->out_paths;
4265 paths = spec->hp_paths;
4266 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4267 spec->autocfg.hp_pins, paths, spec->master_mute);
4269 if (!spec->automute_speaker)
4272 on = spec->hp_jack_present | spec->line_jack_present;
4273 on |= spec->master_mute;
4274 spec->speaker_muted = on;
4275 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4276 paths = spec->out_paths;
4278 paths = spec->speaker_paths;
4279 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4280 spec->autocfg.speaker_pins, paths, on);
4282 /* toggle line-out mutes if needed, too */
4283 /* if LO is a copy of either HP or Speaker, don't need to handle it */
4284 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4285 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4287 if (!spec->automute_lo)
4290 on = spec->hp_jack_present;
4291 on |= spec->master_mute;
4292 spec->line_out_muted = on;
4293 paths = spec->out_paths;
4294 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4295 spec->autocfg.line_out_pins, paths, on);
4297 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs);
4299 static void call_update_outputs(struct hda_codec *codec)
4301 struct hda_gen_spec *spec = codec->spec;
4302 if (spec->automute_hook)
4303 spec->automute_hook(codec);
4305 snd_hda_gen_update_outputs(codec);
4307 /* sync the whole vmaster slaves to reflect the new auto-mute status */
4308 if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4309 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4313 * snd_hda_gen_hp_automute - standard HP-automute helper
4314 * @codec: the HDA codec
4315 * @jack: jack object, NULL for the whole
4317 void snd_hda_gen_hp_automute(struct hda_codec *codec,
4318 struct hda_jack_callback *jack)
4320 struct hda_gen_spec *spec = codec->spec;
4321 hda_nid_t *pins = spec->autocfg.hp_pins;
4322 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4324 /* No detection for the first HP jack during indep-HP mode */
4325 if (spec->indep_hp_enabled) {
4330 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4331 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4333 call_update_outputs(codec);
4335 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute);
4338 * snd_hda_gen_line_automute - standard line-out-automute helper
4339 * @codec: the HDA codec
4340 * @jack: jack object, NULL for the whole
4342 void snd_hda_gen_line_automute(struct hda_codec *codec,
4343 struct hda_jack_callback *jack)
4345 struct hda_gen_spec *spec = codec->spec;
4347 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4349 /* check LO jack only when it's different from HP */
4350 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4353 spec->line_jack_present =
4354 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4355 spec->autocfg.line_out_pins);
4356 if (!spec->automute_speaker || !spec->detect_lo)
4358 call_update_outputs(codec);
4360 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute);
4363 * snd_hda_gen_mic_autoswitch - standard mic auto-switch helper
4364 * @codec: the HDA codec
4365 * @jack: jack object, NULL for the whole
4367 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
4368 struct hda_jack_callback *jack)
4370 struct hda_gen_spec *spec = codec->spec;
4373 if (!spec->auto_mic)
4376 for (i = spec->am_num_entries - 1; i > 0; i--) {
4377 hda_nid_t pin = spec->am_entry[i].pin;
4378 /* don't detect pins retasked as outputs */
4379 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
4381 if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
4382 mux_select(codec, 0, spec->am_entry[i].idx);
4386 mux_select(codec, 0, spec->am_entry[0].idx);
4388 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch);
4390 /* call appropriate hooks */
4391 static void call_hp_automute(struct hda_codec *codec,
4392 struct hda_jack_callback *jack)
4394 struct hda_gen_spec *spec = codec->spec;
4395 if (spec->hp_automute_hook)
4396 spec->hp_automute_hook(codec, jack);
4398 snd_hda_gen_hp_automute(codec, jack);
4401 static void call_line_automute(struct hda_codec *codec,
4402 struct hda_jack_callback *jack)
4404 struct hda_gen_spec *spec = codec->spec;
4405 if (spec->line_automute_hook)
4406 spec->line_automute_hook(codec, jack);
4408 snd_hda_gen_line_automute(codec, jack);
4411 static void call_mic_autoswitch(struct hda_codec *codec,
4412 struct hda_jack_callback *jack)
4414 struct hda_gen_spec *spec = codec->spec;
4415 if (spec->mic_autoswitch_hook)
4416 spec->mic_autoswitch_hook(codec, jack);
4418 snd_hda_gen_mic_autoswitch(codec, jack);
4421 /* update jack retasking */
4422 static void update_automute_all(struct hda_codec *codec)
4424 call_hp_automute(codec, NULL);
4425 call_line_automute(codec, NULL);
4426 call_mic_autoswitch(codec, NULL);
4430 * Auto-Mute mode mixer enum support
4432 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4433 struct snd_ctl_elem_info *uinfo)
4435 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4436 struct hda_gen_spec *spec = codec->spec;
4437 static const char * const texts3[] = {
4438 "Disabled", "Speaker Only", "Line Out+Speaker"
4441 if (spec->automute_speaker_possible && spec->automute_lo_possible)
4442 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4443 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4446 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4447 struct snd_ctl_elem_value *ucontrol)
4449 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4450 struct hda_gen_spec *spec = codec->spec;
4451 unsigned int val = 0;
4452 if (spec->automute_speaker)
4454 if (spec->automute_lo)
4457 ucontrol->value.enumerated.item[0] = val;
4461 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4462 struct snd_ctl_elem_value *ucontrol)
4464 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4465 struct hda_gen_spec *spec = codec->spec;
4467 switch (ucontrol->value.enumerated.item[0]) {
4469 if (!spec->automute_speaker && !spec->automute_lo)
4471 spec->automute_speaker = 0;
4472 spec->automute_lo = 0;
4475 if (spec->automute_speaker_possible) {
4476 if (!spec->automute_lo && spec->automute_speaker)
4478 spec->automute_speaker = 1;
4479 spec->automute_lo = 0;
4480 } else if (spec->automute_lo_possible) {
4481 if (spec->automute_lo)
4483 spec->automute_lo = 1;
4488 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4490 if (spec->automute_speaker && spec->automute_lo)
4492 spec->automute_speaker = 1;
4493 spec->automute_lo = 1;
4498 call_update_outputs(codec);
4502 static const struct snd_kcontrol_new automute_mode_enum = {
4503 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4504 .name = "Auto-Mute Mode",
4505 .info = automute_mode_info,
4506 .get = automute_mode_get,
4507 .put = automute_mode_put,
4510 static int add_automute_mode_enum(struct hda_codec *codec)
4512 struct hda_gen_spec *spec = codec->spec;
4514 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4520 * Check the availability of HP/line-out auto-mute;
4521 * Set up appropriately if really supported
4523 static int check_auto_mute_availability(struct hda_codec *codec)
4525 struct hda_gen_spec *spec = codec->spec;
4526 struct auto_pin_cfg *cfg = &spec->autocfg;
4530 if (spec->suppress_auto_mute)
4533 if (cfg->hp_pins[0])
4535 if (cfg->line_out_pins[0])
4537 if (cfg->speaker_pins[0])
4539 if (present < 2) /* need two different output types */
4542 if (!cfg->speaker_pins[0] &&
4543 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4544 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4545 sizeof(cfg->speaker_pins));
4546 cfg->speaker_outs = cfg->line_outs;
4549 if (!cfg->hp_pins[0] &&
4550 cfg->line_out_type == AUTO_PIN_HP_OUT) {
4551 memcpy(cfg->hp_pins, cfg->line_out_pins,
4552 sizeof(cfg->hp_pins));
4553 cfg->hp_outs = cfg->line_outs;
4556 for (i = 0; i < cfg->hp_outs; i++) {
4557 hda_nid_t nid = cfg->hp_pins[i];
4558 if (!is_jack_detectable(codec, nid))
4560 codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid);
4561 snd_hda_jack_detect_enable_callback(codec, nid,
4563 spec->detect_hp = 1;
4566 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4567 if (cfg->speaker_outs)
4568 for (i = 0; i < cfg->line_outs; i++) {
4569 hda_nid_t nid = cfg->line_out_pins[i];
4570 if (!is_jack_detectable(codec, nid))
4572 codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid);
4573 snd_hda_jack_detect_enable_callback(codec, nid,
4574 call_line_automute);
4575 spec->detect_lo = 1;
4577 spec->automute_lo_possible = spec->detect_hp;
4580 spec->automute_speaker_possible = cfg->speaker_outs &&
4581 (spec->detect_hp || spec->detect_lo);
4583 spec->automute_lo = spec->automute_lo_possible;
4584 spec->automute_speaker = spec->automute_speaker_possible;
4586 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4587 /* create a control for automute mode */
4588 err = add_automute_mode_enum(codec);
4595 /* check whether all auto-mic pins are valid; setup indices if OK */
4596 static bool auto_mic_check_imux(struct hda_codec *codec)
4598 struct hda_gen_spec *spec = codec->spec;
4599 const struct hda_input_mux *imux;
4602 imux = &spec->input_mux;
4603 for (i = 0; i < spec->am_num_entries; i++) {
4604 spec->am_entry[i].idx =
4605 find_idx_in_nid_list(spec->am_entry[i].pin,
4606 spec->imux_pins, imux->num_items);
4607 if (spec->am_entry[i].idx < 0)
4608 return false; /* no corresponding imux */
4611 /* we don't need the jack detection for the first pin */
4612 for (i = 1; i < spec->am_num_entries; i++)
4613 snd_hda_jack_detect_enable_callback(codec,
4614 spec->am_entry[i].pin,
4615 call_mic_autoswitch);
4619 static int compare_attr(const void *ap, const void *bp)
4621 const struct automic_entry *a = ap;
4622 const struct automic_entry *b = bp;
4623 return (int)(a->attr - b->attr);
4627 * Check the availability of auto-mic switch;
4628 * Set up if really supported
4630 static int check_auto_mic_availability(struct hda_codec *codec)
4632 struct hda_gen_spec *spec = codec->spec;
4633 struct auto_pin_cfg *cfg = &spec->autocfg;
4637 if (spec->suppress_auto_mic)
4642 for (i = 0; i < cfg->num_inputs; i++) {
4643 hda_nid_t nid = cfg->inputs[i].pin;
4645 attr = snd_hda_codec_get_pincfg(codec, nid);
4646 attr = snd_hda_get_input_pin_attr(attr);
4647 if (types & (1 << attr))
4648 return 0; /* already occupied */
4650 case INPUT_PIN_ATTR_INT:
4651 if (cfg->inputs[i].type != AUTO_PIN_MIC)
4652 return 0; /* invalid type */
4654 case INPUT_PIN_ATTR_UNUSED:
4655 return 0; /* invalid entry */
4657 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4658 return 0; /* invalid type */
4659 if (!spec->line_in_auto_switch &&
4660 cfg->inputs[i].type != AUTO_PIN_MIC)
4661 return 0; /* only mic is allowed */
4662 if (!is_jack_detectable(codec, nid))
4663 return 0; /* no unsol support */
4666 if (num_pins >= MAX_AUTO_MIC_PINS)
4668 types |= (1 << attr);
4669 spec->am_entry[num_pins].pin = nid;
4670 spec->am_entry[num_pins].attr = attr;
4677 spec->am_num_entries = num_pins;
4678 /* sort the am_entry in the order of attr so that the pin with a
4679 * higher attr will be selected when the jack is plugged.
4681 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4682 compare_attr, NULL);
4684 if (!auto_mic_check_imux(codec))
4688 spec->num_adc_nids = 1;
4689 spec->cur_mux[0] = spec->am_entry[0].idx;
4690 codec_dbg(codec, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4691 spec->am_entry[0].pin,
4692 spec->am_entry[1].pin,
4693 spec->am_entry[2].pin);
4699 * snd_hda_gen_path_power_filter - power_filter hook to make inactive widgets
4701 * @codec: the HDA codec
4702 * @nid: NID to evalute
4703 * @power_state: target power state
4705 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4707 unsigned int power_state)
4709 if (power_state != AC_PWRST_D0 || nid == codec->afg)
4711 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4713 if (is_active_nid_for_any(codec, nid))
4717 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter);
4719 /* mute all aamix inputs initially; parse up to the first leaves */
4720 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4723 const hda_nid_t *conn;
4726 nums = snd_hda_get_conn_list(codec, mix, &conn);
4727 has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4728 for (i = 0; i < nums; i++) {
4730 update_amp(codec, mix, HDA_INPUT, i,
4731 0xff, HDA_AMP_MUTE);
4732 else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4733 update_amp(codec, conn[i], HDA_OUTPUT, 0,
4734 0xff, HDA_AMP_MUTE);
4739 * snd_hda_gen_stream_pm - Stream power management callback
4740 * @codec: the HDA codec
4741 * @nid: audio widget
4742 * @on: power on/off flag
4744 * Set this in patch_ops.stream_pm. Only valid with power_save_node flag.
4746 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on)
4748 if (codec->power_save_node)
4749 set_path_power(codec, nid, -1, on);
4751 EXPORT_SYMBOL_GPL(snd_hda_gen_stream_pm);
4754 * snd_hda_gen_parse_auto_config - Parse the given BIOS configuration and
4755 * set up the hda_gen_spec
4756 * @codec: the HDA codec
4757 * @cfg: Parsed pin configuration
4759 * return 1 if successful, 0 if the proper config is not found,
4760 * or a negative error code
4762 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4763 struct auto_pin_cfg *cfg)
4765 struct hda_gen_spec *spec = codec->spec;
4768 parse_user_hints(codec);
4770 if (spec->mixer_nid && !spec->mixer_merge_nid)
4771 spec->mixer_merge_nid = spec->mixer_nid;
4773 if (cfg != &spec->autocfg) {
4774 spec->autocfg = *cfg;
4775 cfg = &spec->autocfg;
4778 if (!spec->main_out_badness)
4779 spec->main_out_badness = &hda_main_out_badness;
4780 if (!spec->extra_out_badness)
4781 spec->extra_out_badness = &hda_extra_out_badness;
4783 fill_all_dac_nids(codec);
4785 if (!cfg->line_outs) {
4786 if (cfg->dig_outs || cfg->dig_in_pin) {
4787 spec->multiout.max_channels = 2;
4788 spec->no_analog = 1;
4791 if (!cfg->num_inputs && !cfg->dig_in_pin)
4792 return 0; /* can't find valid BIOS pin config */
4795 if (!spec->no_primary_hp &&
4796 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4797 cfg->line_outs <= cfg->hp_outs) {
4798 /* use HP as primary out */
4799 cfg->speaker_outs = cfg->line_outs;
4800 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4801 sizeof(cfg->speaker_pins));
4802 cfg->line_outs = cfg->hp_outs;
4803 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4805 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4806 cfg->line_out_type = AUTO_PIN_HP_OUT;
4809 err = parse_output_paths(codec);
4812 err = create_multi_channel_mode(codec);
4815 err = create_multi_out_ctls(codec, cfg);
4818 err = create_hp_out_ctls(codec);
4821 err = create_speaker_out_ctls(codec);
4824 err = create_indep_hp_ctls(codec);
4827 err = create_loopback_mixing_ctl(codec);
4830 err = create_hp_mic(codec);
4833 err = create_input_ctls(codec);
4837 /* add power-down pin callbacks at first */
4838 add_all_pin_power_ctls(codec, false);
4840 spec->const_channel_count = spec->ext_channel_count;
4841 /* check the multiple speaker and headphone pins */
4842 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4843 spec->const_channel_count = max(spec->const_channel_count,
4844 cfg->speaker_outs * 2);
4845 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4846 spec->const_channel_count = max(spec->const_channel_count,
4848 spec->multiout.max_channels = max(spec->ext_channel_count,
4849 spec->const_channel_count);
4851 err = check_auto_mute_availability(codec);
4855 err = check_dyn_adc_switch(codec);
4859 err = check_auto_mic_availability(codec);
4863 /* add stereo mix if available and not enabled yet */
4864 if (!spec->auto_mic && spec->mixer_nid &&
4865 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
4866 spec->input_mux.num_items > 1) {
4867 err = parse_capture_source(codec, spec->mixer_nid,
4868 CFG_IDX_MIX, spec->num_all_adcs,
4875 err = create_capture_mixers(codec);
4879 err = parse_mic_boost(codec);
4883 /* create "Headphone Mic Jack Mode" if no input selection is
4884 * available (or user specifies add_jack_modes hint)
4886 if (spec->hp_mic_pin &&
4887 (spec->auto_mic || spec->input_mux.num_items == 1 ||
4888 spec->add_jack_modes)) {
4889 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
4894 if (spec->add_jack_modes) {
4895 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4896 err = create_out_jack_modes(codec, cfg->line_outs,
4897 cfg->line_out_pins);
4901 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4902 err = create_out_jack_modes(codec, cfg->hp_outs,
4909 /* add power-up pin callbacks at last */
4910 add_all_pin_power_ctls(codec, true);
4912 /* mute all aamix input initially */
4913 if (spec->mixer_nid)
4914 mute_all_mixer_nid(codec, spec->mixer_nid);
4917 parse_digital(codec);
4919 if (spec->power_down_unused || codec->power_save_node)
4920 codec->power_filter = snd_hda_gen_path_power_filter;
4922 if (!spec->no_analog && spec->beep_nid) {
4923 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4926 if (codec->beep && codec->power_save_node) {
4927 err = add_fake_beep_paths(codec);
4930 codec->beep->power_hook = beep_power_hook;
4936 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config);
4940 * Build control elements
4943 /* slave controls for virtual master */
4944 static const char * const slave_pfxs[] = {
4945 "Front", "Surround", "Center", "LFE", "Side",
4946 "Headphone", "Speaker", "Mono", "Line Out",
4947 "CLFE", "Bass Speaker", "PCM",
4948 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4949 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4950 "Headphone Side", "Headphone+LO", "Speaker+LO",
4955 * snd_hda_gen_build_controls - Build controls from the parsed results
4956 * @codec: the HDA codec
4958 * Pass this to build_controls patch_ops.
4960 int snd_hda_gen_build_controls(struct hda_codec *codec)
4962 struct hda_gen_spec *spec = codec->spec;
4965 if (spec->kctls.used) {
4966 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4971 if (spec->multiout.dig_out_nid) {
4972 err = snd_hda_create_dig_out_ctls(codec,
4973 spec->multiout.dig_out_nid,
4974 spec->multiout.dig_out_nid,
4975 spec->pcm_rec[1]->pcm_type);
4978 if (!spec->no_analog) {
4979 err = snd_hda_create_spdif_share_sw(codec,
4983 spec->multiout.share_spdif = 1;
4986 if (spec->dig_in_nid) {
4987 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4992 /* if we have no master control, let's create it */
4993 if (!spec->no_analog &&
4994 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4995 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4996 spec->vmaster_tlv, slave_pfxs,
5001 if (!spec->no_analog &&
5002 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
5003 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
5006 true, &spec->vmaster_mute.sw_kctl);
5009 if (spec->vmaster_mute.hook) {
5010 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
5011 spec->vmaster_mute_enum);
5012 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5016 free_kctls(spec); /* no longer needed */
5018 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5024 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls);
5031 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
5032 struct hda_codec *codec,
5033 struct snd_pcm_substream *substream,
5036 struct hda_gen_spec *spec = codec->spec;
5037 if (spec->pcm_playback_hook)
5038 spec->pcm_playback_hook(hinfo, codec, substream, action);
5041 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
5042 struct hda_codec *codec,
5043 struct snd_pcm_substream *substream,
5046 struct hda_gen_spec *spec = codec->spec;
5047 if (spec->pcm_capture_hook)
5048 spec->pcm_capture_hook(hinfo, codec, substream, action);
5052 * Analog playback callbacks
5054 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
5055 struct hda_codec *codec,
5056 struct snd_pcm_substream *substream)
5058 struct hda_gen_spec *spec = codec->spec;
5061 mutex_lock(&spec->pcm_mutex);
5062 err = snd_hda_multi_out_analog_open(codec,
5063 &spec->multiout, substream,
5066 spec->active_streams |= 1 << STREAM_MULTI_OUT;
5067 call_pcm_playback_hook(hinfo, codec, substream,
5068 HDA_GEN_PCM_ACT_OPEN);
5070 mutex_unlock(&spec->pcm_mutex);
5074 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5075 struct hda_codec *codec,
5076 unsigned int stream_tag,
5077 unsigned int format,
5078 struct snd_pcm_substream *substream)
5080 struct hda_gen_spec *spec = codec->spec;
5083 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5084 stream_tag, format, substream);
5086 call_pcm_playback_hook(hinfo, codec, substream,
5087 HDA_GEN_PCM_ACT_PREPARE);
5091 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5092 struct hda_codec *codec,
5093 struct snd_pcm_substream *substream)
5095 struct hda_gen_spec *spec = codec->spec;
5098 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5100 call_pcm_playback_hook(hinfo, codec, substream,
5101 HDA_GEN_PCM_ACT_CLEANUP);
5105 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
5106 struct hda_codec *codec,
5107 struct snd_pcm_substream *substream)
5109 struct hda_gen_spec *spec = codec->spec;
5110 mutex_lock(&spec->pcm_mutex);
5111 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5112 call_pcm_playback_hook(hinfo, codec, substream,
5113 HDA_GEN_PCM_ACT_CLOSE);
5114 mutex_unlock(&spec->pcm_mutex);
5118 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
5119 struct hda_codec *codec,
5120 struct snd_pcm_substream *substream)
5122 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
5126 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5127 struct hda_codec *codec,
5128 unsigned int stream_tag,
5129 unsigned int format,
5130 struct snd_pcm_substream *substream)
5132 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5133 call_pcm_capture_hook(hinfo, codec, substream,
5134 HDA_GEN_PCM_ACT_PREPARE);
5138 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5139 struct hda_codec *codec,
5140 struct snd_pcm_substream *substream)
5142 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5143 call_pcm_capture_hook(hinfo, codec, substream,
5144 HDA_GEN_PCM_ACT_CLEANUP);
5148 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
5149 struct hda_codec *codec,
5150 struct snd_pcm_substream *substream)
5152 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
5156 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
5157 struct hda_codec *codec,
5158 struct snd_pcm_substream *substream)
5160 struct hda_gen_spec *spec = codec->spec;
5163 mutex_lock(&spec->pcm_mutex);
5164 if (!spec->indep_hp_enabled)
5167 spec->active_streams |= 1 << STREAM_INDEP_HP;
5168 call_pcm_playback_hook(hinfo, codec, substream,
5169 HDA_GEN_PCM_ACT_OPEN);
5170 mutex_unlock(&spec->pcm_mutex);
5174 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
5175 struct hda_codec *codec,
5176 struct snd_pcm_substream *substream)
5178 struct hda_gen_spec *spec = codec->spec;
5179 mutex_lock(&spec->pcm_mutex);
5180 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5181 call_pcm_playback_hook(hinfo, codec, substream,
5182 HDA_GEN_PCM_ACT_CLOSE);
5183 mutex_unlock(&spec->pcm_mutex);
5187 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5188 struct hda_codec *codec,
5189 unsigned int stream_tag,
5190 unsigned int format,
5191 struct snd_pcm_substream *substream)
5193 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5194 call_pcm_playback_hook(hinfo, codec, substream,
5195 HDA_GEN_PCM_ACT_PREPARE);
5199 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5200 struct hda_codec *codec,
5201 struct snd_pcm_substream *substream)
5203 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5204 call_pcm_playback_hook(hinfo, codec, substream,
5205 HDA_GEN_PCM_ACT_CLEANUP);
5212 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
5213 struct hda_codec *codec,
5214 struct snd_pcm_substream *substream)
5216 struct hda_gen_spec *spec = codec->spec;
5217 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5220 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5221 struct hda_codec *codec,
5222 unsigned int stream_tag,
5223 unsigned int format,
5224 struct snd_pcm_substream *substream)
5226 struct hda_gen_spec *spec = codec->spec;
5227 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5228 stream_tag, format, substream);
5231 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5232 struct hda_codec *codec,
5233 struct snd_pcm_substream *substream)
5235 struct hda_gen_spec *spec = codec->spec;
5236 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5239 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
5240 struct hda_codec *codec,
5241 struct snd_pcm_substream *substream)
5243 struct hda_gen_spec *spec = codec->spec;
5244 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5250 #define alt_capture_pcm_open capture_pcm_open
5251 #define alt_capture_pcm_close capture_pcm_close
5253 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5254 struct hda_codec *codec,
5255 unsigned int stream_tag,
5256 unsigned int format,
5257 struct snd_pcm_substream *substream)
5259 struct hda_gen_spec *spec = codec->spec;
5261 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5262 stream_tag, 0, format);
5263 call_pcm_capture_hook(hinfo, codec, substream,
5264 HDA_GEN_PCM_ACT_PREPARE);
5268 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5269 struct hda_codec *codec,
5270 struct snd_pcm_substream *substream)
5272 struct hda_gen_spec *spec = codec->spec;
5274 snd_hda_codec_cleanup_stream(codec,
5275 spec->adc_nids[substream->number + 1]);
5276 call_pcm_capture_hook(hinfo, codec, substream,
5277 HDA_GEN_PCM_ACT_CLEANUP);
5283 static const struct hda_pcm_stream pcm_analog_playback = {
5287 /* NID is set in build_pcms */
5289 .open = playback_pcm_open,
5290 .close = playback_pcm_close,
5291 .prepare = playback_pcm_prepare,
5292 .cleanup = playback_pcm_cleanup
5296 static const struct hda_pcm_stream pcm_analog_capture = {
5300 /* NID is set in build_pcms */
5302 .open = capture_pcm_open,
5303 .close = capture_pcm_close,
5304 .prepare = capture_pcm_prepare,
5305 .cleanup = capture_pcm_cleanup
5309 static const struct hda_pcm_stream pcm_analog_alt_playback = {
5313 /* NID is set in build_pcms */
5315 .open = alt_playback_pcm_open,
5316 .close = alt_playback_pcm_close,
5317 .prepare = alt_playback_pcm_prepare,
5318 .cleanup = alt_playback_pcm_cleanup
5322 static const struct hda_pcm_stream pcm_analog_alt_capture = {
5323 .substreams = 2, /* can be overridden */
5326 /* NID is set in build_pcms */
5328 .open = alt_capture_pcm_open,
5329 .close = alt_capture_pcm_close,
5330 .prepare = alt_capture_pcm_prepare,
5331 .cleanup = alt_capture_pcm_cleanup
5335 static const struct hda_pcm_stream pcm_digital_playback = {
5339 /* NID is set in build_pcms */
5341 .open = dig_playback_pcm_open,
5342 .close = dig_playback_pcm_close,
5343 .prepare = dig_playback_pcm_prepare,
5344 .cleanup = dig_playback_pcm_cleanup
5348 static const struct hda_pcm_stream pcm_digital_capture = {
5352 /* NID is set in build_pcms */
5355 /* Used by build_pcms to flag that a PCM has no playback stream */
5356 static const struct hda_pcm_stream pcm_null_stream = {
5363 * dynamic changing ADC PCM streams
5365 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
5367 struct hda_gen_spec *spec = codec->spec;
5368 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5370 if (spec->cur_adc && spec->cur_adc != new_adc) {
5371 /* stream is running, let's swap the current ADC */
5372 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5373 spec->cur_adc = new_adc;
5374 snd_hda_codec_setup_stream(codec, new_adc,
5375 spec->cur_adc_stream_tag, 0,
5376 spec->cur_adc_format);
5382 /* analog capture with dynamic dual-adc changes */
5383 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5384 struct hda_codec *codec,
5385 unsigned int stream_tag,
5386 unsigned int format,
5387 struct snd_pcm_substream *substream)
5389 struct hda_gen_spec *spec = codec->spec;
5390 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5391 spec->cur_adc_stream_tag = stream_tag;
5392 spec->cur_adc_format = format;
5393 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5397 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5398 struct hda_codec *codec,
5399 struct snd_pcm_substream *substream)
5401 struct hda_gen_spec *spec = codec->spec;
5402 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5407 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
5411 .nid = 0, /* fill later */
5413 .prepare = dyn_adc_capture_pcm_prepare,
5414 .cleanup = dyn_adc_capture_pcm_cleanup
5418 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
5419 const char *chip_name)
5425 strlcpy(str, chip_name, len);
5427 /* drop non-alnum chars after a space */
5428 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5429 if (!isalnum(p[1])) {
5434 strlcat(str, sfx, len);
5437 /* copy PCM stream info from @default_str, and override non-NULL entries
5438 * from @spec_str and @nid
5440 static void setup_pcm_stream(struct hda_pcm_stream *str,
5441 const struct hda_pcm_stream *default_str,
5442 const struct hda_pcm_stream *spec_str,
5445 *str = *default_str;
5449 if (spec_str->substreams)
5450 str->substreams = spec_str->substreams;
5451 if (spec_str->channels_min)
5452 str->channels_min = spec_str->channels_min;
5453 if (spec_str->channels_max)
5454 str->channels_max = spec_str->channels_max;
5455 if (spec_str->rates)
5456 str->rates = spec_str->rates;
5457 if (spec_str->formats)
5458 str->formats = spec_str->formats;
5459 if (spec_str->maxbps)
5460 str->maxbps = spec_str->maxbps;
5465 * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5466 * @codec: the HDA codec
5468 * Pass this to build_pcms patch_ops.
5470 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5472 struct hda_gen_spec *spec = codec->spec;
5473 struct hda_pcm *info;
5474 bool have_multi_adcs;
5476 if (spec->no_analog)
5479 fill_pcm_stream_name(spec->stream_name_analog,
5480 sizeof(spec->stream_name_analog),
5481 " Analog", codec->chip_name);
5482 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5485 spec->pcm_rec[0] = info;
5487 if (spec->multiout.num_dacs > 0) {
5488 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5489 &pcm_analog_playback,
5490 spec->stream_analog_playback,
5491 spec->multiout.dac_nids[0]);
5492 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5493 spec->multiout.max_channels;
5494 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5495 spec->autocfg.line_outs == 2)
5496 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5499 if (spec->num_adc_nids) {
5500 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5501 (spec->dyn_adc_switch ?
5502 &dyn_adc_pcm_analog_capture : &pcm_analog_capture),
5503 spec->stream_analog_capture,
5508 /* SPDIF for stream index #1 */
5509 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5510 fill_pcm_stream_name(spec->stream_name_digital,
5511 sizeof(spec->stream_name_digital),
5512 " Digital", codec->chip_name);
5513 info = snd_hda_codec_pcm_new(codec, "%s",
5514 spec->stream_name_digital);
5517 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5518 spec->pcm_rec[1] = info;
5519 if (spec->dig_out_type)
5520 info->pcm_type = spec->dig_out_type;
5522 info->pcm_type = HDA_PCM_TYPE_SPDIF;
5523 if (spec->multiout.dig_out_nid)
5524 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5525 &pcm_digital_playback,
5526 spec->stream_digital_playback,
5527 spec->multiout.dig_out_nid);
5528 if (spec->dig_in_nid)
5529 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5530 &pcm_digital_capture,
5531 spec->stream_digital_capture,
5535 if (spec->no_analog)
5538 /* If the use of more than one ADC is requested for the current
5539 * model, configure a second analog capture-only PCM.
5541 have_multi_adcs = (spec->num_adc_nids > 1) &&
5542 !spec->dyn_adc_switch && !spec->auto_mic;
5543 /* Additional Analaog capture for index #2 */
5544 if (spec->alt_dac_nid || have_multi_adcs) {
5545 fill_pcm_stream_name(spec->stream_name_alt_analog,
5546 sizeof(spec->stream_name_alt_analog),
5547 " Alt Analog", codec->chip_name);
5548 info = snd_hda_codec_pcm_new(codec, "%s",
5549 spec->stream_name_alt_analog);
5552 spec->pcm_rec[2] = info;
5553 if (spec->alt_dac_nid)
5554 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5555 &pcm_analog_alt_playback,
5556 spec->stream_analog_alt_playback,
5559 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5560 &pcm_null_stream, NULL, 0);
5561 if (have_multi_adcs) {
5562 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5563 &pcm_analog_alt_capture,
5564 spec->stream_analog_alt_capture,
5566 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5567 spec->num_adc_nids - 1;
5569 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5570 &pcm_null_stream, NULL, 0);
5576 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5580 * Standard auto-parser initializations
5583 /* configure the given path as a proper output */
5584 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5586 struct nid_path *path;
5589 path = snd_hda_get_path_from_idx(codec, path_idx);
5590 if (!path || !path->depth)
5592 pin = path->path[path->depth - 1];
5593 restore_pin_ctl(codec, pin);
5594 snd_hda_activate_path(codec, path, path->active,
5595 aamix_default(codec->spec));
5596 set_pin_eapd(codec, pin, path->active);
5599 /* initialize primary output paths */
5600 static void init_multi_out(struct hda_codec *codec)
5602 struct hda_gen_spec *spec = codec->spec;
5605 for (i = 0; i < spec->autocfg.line_outs; i++)
5606 set_output_and_unmute(codec, spec->out_paths[i]);
5610 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5614 for (i = 0; i < num_outs; i++)
5615 set_output_and_unmute(codec, paths[i]);
5618 /* initialize hp and speaker paths */
5619 static void init_extra_out(struct hda_codec *codec)
5621 struct hda_gen_spec *spec = codec->spec;
5623 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5624 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5625 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5626 __init_extra_out(codec, spec->autocfg.speaker_outs,
5627 spec->speaker_paths);
5630 /* initialize multi-io paths */
5631 static void init_multi_io(struct hda_codec *codec)
5633 struct hda_gen_spec *spec = codec->spec;
5636 for (i = 0; i < spec->multi_ios; i++) {
5637 hda_nid_t pin = spec->multi_io[i].pin;
5638 struct nid_path *path;
5639 path = get_multiio_path(codec, i);
5642 if (!spec->multi_io[i].ctl_in)
5643 spec->multi_io[i].ctl_in =
5644 snd_hda_codec_get_pin_target(codec, pin);
5645 snd_hda_activate_path(codec, path, path->active,
5646 aamix_default(spec));
5650 static void init_aamix_paths(struct hda_codec *codec)
5652 struct hda_gen_spec *spec = codec->spec;
5654 if (!spec->have_aamix_ctl)
5656 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5657 spec->aamix_out_paths[0],
5658 spec->autocfg.line_out_type);
5659 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5660 spec->aamix_out_paths[1],
5662 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5663 spec->aamix_out_paths[2],
5664 AUTO_PIN_SPEAKER_OUT);
5667 /* set up input pins and loopback paths */
5668 static void init_analog_input(struct hda_codec *codec)
5670 struct hda_gen_spec *spec = codec->spec;
5671 struct auto_pin_cfg *cfg = &spec->autocfg;
5674 for (i = 0; i < cfg->num_inputs; i++) {
5675 hda_nid_t nid = cfg->inputs[i].pin;
5676 if (is_input_pin(codec, nid))
5677 restore_pin_ctl(codec, nid);
5679 /* init loopback inputs */
5680 if (spec->mixer_nid) {
5681 resume_path_from_idx(codec, spec->loopback_paths[i]);
5682 resume_path_from_idx(codec, spec->loopback_merge_path);
5687 /* initialize ADC paths */
5688 static void init_input_src(struct hda_codec *codec)
5690 struct hda_gen_spec *spec = codec->spec;
5691 struct hda_input_mux *imux = &spec->input_mux;
5692 struct nid_path *path;
5695 if (spec->dyn_adc_switch)
5698 nums = spec->num_adc_nids;
5700 for (c = 0; c < nums; c++) {
5701 for (i = 0; i < imux->num_items; i++) {
5702 path = get_input_path(codec, c, i);
5704 bool active = path->active;
5705 if (i == spec->cur_mux[c])
5707 snd_hda_activate_path(codec, path, active, false);
5711 update_hp_mic(codec, c, true);
5714 if (spec->cap_sync_hook)
5715 spec->cap_sync_hook(codec, NULL, NULL);
5718 /* set right pin controls for digital I/O */
5719 static void init_digital(struct hda_codec *codec)
5721 struct hda_gen_spec *spec = codec->spec;
5725 for (i = 0; i < spec->autocfg.dig_outs; i++)
5726 set_output_and_unmute(codec, spec->digout_paths[i]);
5727 pin = spec->autocfg.dig_in_pin;
5729 restore_pin_ctl(codec, pin);
5730 resume_path_from_idx(codec, spec->digin_path);
5734 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5735 * invalid unsol tags by some reason
5737 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5741 for (i = 0; i < codec->init_pins.used; i++) {
5742 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5743 hda_nid_t nid = pin->nid;
5744 if (is_jack_detectable(codec, nid) &&
5745 !snd_hda_jack_tbl_get(codec, nid))
5746 snd_hda_codec_update_cache(codec, nid, 0,
5747 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5752 * snd_hda_gen_init - initialize the generic spec
5753 * @codec: the HDA codec
5755 * This can be put as patch_ops init function.
5757 int snd_hda_gen_init(struct hda_codec *codec)
5759 struct hda_gen_spec *spec = codec->spec;
5761 if (spec->init_hook)
5762 spec->init_hook(codec);
5764 snd_hda_apply_verbs(codec);
5766 codec->cached_write = 1;
5768 init_multi_out(codec);
5769 init_extra_out(codec);
5770 init_multi_io(codec);
5771 init_aamix_paths(codec);
5772 init_analog_input(codec);
5773 init_input_src(codec);
5774 init_digital(codec);
5776 clear_unsol_on_unused_pins(codec);
5778 sync_all_pin_power_ctls(codec);
5780 /* call init functions of standard auto-mute helpers */
5781 update_automute_all(codec);
5783 snd_hda_codec_flush_cache(codec);
5785 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5786 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5788 hda_call_check_power_status(codec, 0x01);
5791 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5794 * snd_hda_gen_free - free the generic spec
5795 * @codec: the HDA codec
5797 * This can be put as patch_ops free function.
5799 void snd_hda_gen_free(struct hda_codec *codec)
5801 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5802 snd_hda_gen_spec_free(codec->spec);
5806 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
5810 * snd_hda_gen_check_power_status - check the loopback power save state
5811 * @codec: the HDA codec
5812 * @nid: NID to inspect
5814 * This can be put as patch_ops check_power_status function.
5816 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5818 struct hda_gen_spec *spec = codec->spec;
5819 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5821 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
5826 * the generic codec support
5829 static const struct hda_codec_ops generic_patch_ops = {
5830 .build_controls = snd_hda_gen_build_controls,
5831 .build_pcms = snd_hda_gen_build_pcms,
5832 .init = snd_hda_gen_init,
5833 .free = snd_hda_gen_free,
5834 .unsol_event = snd_hda_jack_unsol_event,
5836 .check_power_status = snd_hda_gen_check_power_status,
5841 * snd_hda_parse_generic_codec - Generic codec parser
5842 * @codec: the HDA codec
5844 static int snd_hda_parse_generic_codec(struct hda_codec *codec)
5846 struct hda_gen_spec *spec;
5849 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5852 snd_hda_gen_spec_init(spec);
5855 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5859 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5863 codec->patch_ops = generic_patch_ops;
5867 snd_hda_gen_free(codec);
5871 static const struct hda_codec_preset snd_hda_preset_generic[] = {
5872 { .id = HDA_CODEC_ID_GENERIC, .patch = snd_hda_parse_generic_codec },
5876 static struct hda_codec_driver generic_driver = {
5877 .preset = snd_hda_preset_generic,
5880 module_hda_codec_driver(generic_driver);
5882 MODULE_LICENSE("GPL");
5883 MODULE_DESCRIPTION("Generic HD-audio codec parser");