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->core.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->core.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 if (state == AC_PWRST_D0)
846 snd_hdac_regmap_sync_node(&codec->core, nid);
852 /* do sync with the last power state change */
853 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid)
857 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0);
862 * snd_hda_activate_path - activate or deactivate the given path
863 * @codec: the HDA codec
864 * @path: the path to activate/deactivate
865 * @enable: flag to activate or not
866 * @add_aamix: enable the input from aamix NID
868 * If @add_aamix is set, enable the input from aa-mix NID as well (if any).
870 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
871 bool enable, bool add_aamix)
873 struct hda_gen_spec *spec = codec->spec;
877 path->active = false;
879 /* make sure the widget is powered up */
880 if (enable && (spec->power_down_unused || codec->power_save_node))
881 path_power_update(codec, path, codec->power_save_node);
883 for (i = path->depth - 1; i >= 0; i--) {
884 hda_nid_t nid = path->path[i];
886 if (enable && path->multi[i])
887 snd_hda_codec_update_cache(codec, nid, 0,
888 AC_VERB_SET_CONNECT_SEL,
890 if (has_amp_in(codec, path, i))
891 activate_amp_in(codec, path, i, enable, add_aamix);
892 if (has_amp_out(codec, path, i))
893 activate_amp_out(codec, path, i, enable);
899 EXPORT_SYMBOL_GPL(snd_hda_activate_path);
901 /* if the given path is inactive, put widgets into D3 (only if suitable) */
902 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
904 struct hda_gen_spec *spec = codec->spec;
906 if (!(spec->power_down_unused || codec->power_save_node) || path->active)
908 sync_power_state_change(codec, path_power_update(codec, path, true));
911 /* turn on/off EAPD on the given pin */
912 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
914 struct hda_gen_spec *spec = codec->spec;
915 if (spec->own_eapd_ctl ||
916 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
918 if (spec->keep_eapd_on && !enable)
922 snd_hda_codec_update_cache(codec, pin, 0,
923 AC_VERB_SET_EAPD_BTLENABLE,
924 enable ? 0x02 : 0x00);
927 /* re-initialize the path specified by the given path index */
928 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
930 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
932 snd_hda_activate_path(codec, path, path->active, false);
937 * Helper functions for creating mixer ctl elements
940 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
941 struct snd_ctl_elem_value *ucontrol);
942 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
943 struct snd_ctl_elem_value *ucontrol);
950 static const struct snd_kcontrol_new control_templates[] = {
951 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
952 /* only the put callback is replaced for handling the special mute */
954 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
955 .subdevice = HDA_SUBDEV_AMP_FLAG,
956 .info = snd_hda_mixer_amp_switch_info,
957 .get = snd_hda_mixer_amp_switch_get,
958 .put = hda_gen_mixer_mute_put, /* replaced */
959 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
962 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
963 .info = snd_hda_mixer_amp_switch_info,
964 .get = snd_hda_mixer_bind_switch_get,
965 .put = hda_gen_bind_mute_put, /* replaced */
966 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
970 /* add dynamic controls from template */
971 static struct snd_kcontrol_new *
972 add_control(struct hda_gen_spec *spec, int type, const char *name,
973 int cidx, unsigned long val)
975 struct snd_kcontrol_new *knew;
977 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
981 if (get_amp_nid_(val))
982 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
983 knew->private_value = val;
987 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
988 const char *pfx, const char *dir,
989 const char *sfx, int cidx, unsigned long val)
991 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
992 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
993 if (!add_control(spec, type, name, cidx, val))
998 #define add_pb_vol_ctrl(spec, type, pfx, val) \
999 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1000 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1001 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1002 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1003 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1004 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1005 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1007 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1008 unsigned int chs, struct nid_path *path)
1013 val = path->ctls[NID_PATH_VOL_CTL];
1016 val = amp_val_replace_channels(val, chs);
1017 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1020 /* return the channel bits suitable for the given path->ctls[] */
1021 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
1024 int chs = 1; /* mono (left only) */
1026 hda_nid_t nid = get_amp_nid_(path->ctls[type]);
1027 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
1028 chs = 3; /* stereo */
1033 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
1034 struct nid_path *path)
1036 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
1037 return add_vol_ctl(codec, pfx, cidx, chs, path);
1040 /* create a mute-switch for the given mixer widget;
1041 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
1043 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1044 unsigned int chs, struct nid_path *path)
1047 int type = HDA_CTL_WIDGET_MUTE;
1051 val = path->ctls[NID_PATH_MUTE_CTL];
1054 val = amp_val_replace_channels(val, chs);
1055 if (get_amp_direction_(val) == HDA_INPUT) {
1056 hda_nid_t nid = get_amp_nid_(val);
1057 int nums = snd_hda_get_num_conns(codec, nid);
1059 type = HDA_CTL_BIND_MUTE;
1063 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1066 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
1067 int cidx, struct nid_path *path)
1069 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
1070 return add_sw_ctl(codec, pfx, cidx, chs, path);
1073 /* playback mute control with the software mute bit check */
1074 static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
1075 struct snd_ctl_elem_value *ucontrol)
1077 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1078 struct hda_gen_spec *spec = codec->spec;
1080 if (spec->auto_mute_via_amp) {
1081 hda_nid_t nid = get_amp_nid(kcontrol);
1082 bool enabled = !((spec->mute_bits >> nid) & 1);
1083 ucontrol->value.integer.value[0] &= enabled;
1084 ucontrol->value.integer.value[1] &= enabled;
1088 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
1089 struct snd_ctl_elem_value *ucontrol)
1091 sync_auto_mute_bits(kcontrol, ucontrol);
1092 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1095 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
1096 struct snd_ctl_elem_value *ucontrol)
1098 sync_auto_mute_bits(kcontrol, ucontrol);
1099 return snd_hda_mixer_bind_switch_put(kcontrol, ucontrol);
1102 /* any ctl assigned to the path with the given index? */
1103 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
1105 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
1106 return path && path->ctls[ctl_type];
1109 static const char * const channel_name[4] = {
1110 "Front", "Surround", "CLFE", "Side"
1113 /* give some appropriate ctl name prefix for the given line out channel */
1114 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1115 int *index, int ctl_type)
1117 struct hda_gen_spec *spec = codec->spec;
1118 struct auto_pin_cfg *cfg = &spec->autocfg;
1121 if (cfg->line_outs == 1 && !spec->multi_ios &&
1122 !cfg->hp_outs && !cfg->speaker_outs)
1123 return spec->vmaster_mute.hook ? "PCM" : "Master";
1125 /* if there is really a single DAC used in the whole output paths,
1126 * use it master (or "PCM" if a vmaster hook is present)
1128 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1129 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1130 return spec->vmaster_mute.hook ? "PCM" : "Master";
1132 /* multi-io channels */
1133 if (ch >= cfg->line_outs)
1134 return channel_name[ch];
1136 switch (cfg->line_out_type) {
1137 case AUTO_PIN_SPEAKER_OUT:
1138 /* if the primary channel vol/mute is shared with HP volume,
1139 * don't name it as Speaker
1141 if (!ch && cfg->hp_outs &&
1142 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1144 if (cfg->line_outs == 1)
1146 if (cfg->line_outs == 2)
1147 return ch ? "Bass Speaker" : "Speaker";
1149 case AUTO_PIN_HP_OUT:
1150 /* if the primary channel vol/mute is shared with spk volume,
1151 * don't name it as Headphone
1153 if (!ch && cfg->speaker_outs &&
1154 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1156 /* for multi-io case, only the primary out */
1157 if (ch && spec->multi_ios)
1161 case AUTO_PIN_LINE_OUT:
1162 /* This deals with the case where we have two DACs and
1163 * one LO, one HP and one Speaker */
1164 if (!ch && cfg->speaker_outs && cfg->hp_outs) {
1165 bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1166 bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
1167 if (hp_lo_shared && spk_lo_shared)
1168 return spec->vmaster_mute.hook ? "PCM" : "Master";
1170 return "Headphone+LO";
1172 return "Speaker+LO";
1176 /* for a single channel output, we don't have to name the channel */
1177 if (cfg->line_outs == 1 && !spec->multi_ios)
1180 if (ch >= ARRAY_SIZE(channel_name)) {
1185 return channel_name[ch];
1189 * Parse output paths
1192 /* badness definition */
1194 /* No primary DAC is found for the main output */
1195 BAD_NO_PRIMARY_DAC = 0x10000,
1196 /* No DAC is found for the extra output */
1197 BAD_NO_DAC = 0x4000,
1198 /* No possible multi-ios */
1199 BAD_MULTI_IO = 0x120,
1200 /* No individual DAC for extra output */
1201 BAD_NO_EXTRA_DAC = 0x102,
1202 /* No individual DAC for extra surrounds */
1203 BAD_NO_EXTRA_SURR_DAC = 0x101,
1204 /* Primary DAC shared with main surrounds */
1205 BAD_SHARED_SURROUND = 0x100,
1206 /* No independent HP possible */
1207 BAD_NO_INDEP_HP = 0x10,
1208 /* Primary DAC shared with main CLFE */
1209 BAD_SHARED_CLFE = 0x10,
1210 /* Primary DAC shared with extra surrounds */
1211 BAD_SHARED_EXTRA_SURROUND = 0x10,
1212 /* Volume widget is shared */
1213 BAD_SHARED_VOL = 0x10,
1216 /* look for widgets in the given path which are appropriate for
1217 * volume and mute controls, and assign the values to ctls[].
1219 * When no appropriate widget is found in the path, the badness value
1220 * is incremented depending on the situation. The function returns the
1221 * total badness for both volume and mute controls.
1223 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1225 struct hda_gen_spec *spec = codec->spec;
1231 return BAD_SHARED_VOL * 2;
1233 if (path->ctls[NID_PATH_VOL_CTL] ||
1234 path->ctls[NID_PATH_MUTE_CTL])
1235 return 0; /* already evaluated */
1237 nid = look_for_out_vol_nid(codec, path);
1239 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1240 if (spec->dac_min_mute)
1241 val |= HDA_AMP_VAL_MIN_MUTE;
1242 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1243 badness += BAD_SHARED_VOL;
1245 path->ctls[NID_PATH_VOL_CTL] = val;
1247 badness += BAD_SHARED_VOL;
1248 nid = look_for_out_mute_nid(codec, path);
1250 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1251 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1252 nid_has_mute(codec, nid, HDA_OUTPUT))
1253 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1255 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1256 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1257 badness += BAD_SHARED_VOL;
1259 path->ctls[NID_PATH_MUTE_CTL] = val;
1261 badness += BAD_SHARED_VOL;
1265 const struct badness_table hda_main_out_badness = {
1266 .no_primary_dac = BAD_NO_PRIMARY_DAC,
1267 .no_dac = BAD_NO_DAC,
1268 .shared_primary = BAD_NO_PRIMARY_DAC,
1269 .shared_surr = BAD_SHARED_SURROUND,
1270 .shared_clfe = BAD_SHARED_CLFE,
1271 .shared_surr_main = BAD_SHARED_SURROUND,
1273 EXPORT_SYMBOL_GPL(hda_main_out_badness);
1275 const struct badness_table hda_extra_out_badness = {
1276 .no_primary_dac = BAD_NO_DAC,
1277 .no_dac = BAD_NO_DAC,
1278 .shared_primary = BAD_NO_EXTRA_DAC,
1279 .shared_surr = BAD_SHARED_EXTRA_SURROUND,
1280 .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1281 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1283 EXPORT_SYMBOL_GPL(hda_extra_out_badness);
1285 /* get the DAC of the primary output corresponding to the given array index */
1286 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1288 struct hda_gen_spec *spec = codec->spec;
1289 struct auto_pin_cfg *cfg = &spec->autocfg;
1291 if (cfg->line_outs > idx)
1292 return spec->private_dac_nids[idx];
1293 idx -= cfg->line_outs;
1294 if (spec->multi_ios > idx)
1295 return spec->multi_io[idx].dac;
1299 /* return the DAC if it's reachable, otherwise zero */
1300 static inline hda_nid_t try_dac(struct hda_codec *codec,
1301 hda_nid_t dac, hda_nid_t pin)
1303 return is_reachable_path(codec, dac, pin) ? dac : 0;
1306 /* try to assign DACs to pins and return the resultant badness */
1307 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1308 const hda_nid_t *pins, hda_nid_t *dacs,
1310 const struct badness_table *bad)
1312 struct hda_gen_spec *spec = codec->spec;
1320 for (i = 0; i < num_outs; i++) {
1321 struct nid_path *path;
1322 hda_nid_t pin = pins[i];
1324 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1326 badness += assign_out_path_ctls(codec, path);
1330 dacs[i] = get_preferred_dac(codec, pin);
1332 if (is_dac_already_used(codec, dacs[i]))
1333 badness += bad->shared_primary;
1337 dacs[i] = look_for_dac(codec, pin, false);
1338 if (!dacs[i] && !i) {
1339 /* try to steal the DAC of surrounds for the front */
1340 for (j = 1; j < num_outs; j++) {
1341 if (is_reachable_path(codec, dacs[j], pin)) {
1344 invalidate_nid_path(codec, path_idx[j]);
1353 dac = try_dac(codec, get_primary_out(codec, i), pin);
1355 dac = try_dac(codec, dacs[0], pin);
1357 dac = try_dac(codec, get_primary_out(codec, i), pin);
1360 badness += bad->shared_primary;
1362 badness += bad->shared_surr;
1364 badness += bad->shared_clfe;
1365 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1366 dac = spec->private_dac_nids[0];
1367 badness += bad->shared_surr_main;
1369 badness += bad->no_primary_dac;
1371 badness += bad->no_dac;
1375 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1376 if (!path && !i && spec->mixer_nid) {
1377 /* try with aamix */
1378 path = snd_hda_add_new_path(codec, dac, pin, 0);
1382 badness += bad->no_dac;
1384 /* print_nid_path(codec, "output", path); */
1385 path->active = true;
1386 path_idx[i] = snd_hda_get_path_idx(codec, path);
1387 badness += assign_out_path_ctls(codec, path);
1394 /* return NID if the given pin has only a single connection to a certain DAC */
1395 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1397 struct hda_gen_spec *spec = codec->spec;
1399 hda_nid_t nid_found = 0;
1401 for (i = 0; i < spec->num_all_dacs; i++) {
1402 hda_nid_t nid = spec->all_dacs[i];
1403 if (!nid || is_dac_already_used(codec, nid))
1405 if (is_reachable_path(codec, nid, pin)) {
1414 /* check whether the given pin can be a multi-io pin */
1415 static bool can_be_multiio_pin(struct hda_codec *codec,
1416 unsigned int location, hda_nid_t nid)
1418 unsigned int defcfg, caps;
1420 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1421 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1423 if (location && get_defcfg_location(defcfg) != location)
1425 caps = snd_hda_query_pin_caps(codec, nid);
1426 if (!(caps & AC_PINCAP_OUT))
1431 /* count the number of input pins that are capable to be multi-io */
1432 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1434 struct hda_gen_spec *spec = codec->spec;
1435 struct auto_pin_cfg *cfg = &spec->autocfg;
1436 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1437 unsigned int location = get_defcfg_location(defcfg);
1441 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1442 for (i = 0; i < cfg->num_inputs; i++) {
1443 if (cfg->inputs[i].type != type)
1445 if (can_be_multiio_pin(codec, location,
1446 cfg->inputs[i].pin))
1456 * When hardwired is set, try to fill ony hardwired pins, and returns
1457 * zero if any pins are filled, non-zero if nothing found.
1458 * When hardwired is off, try to fill possible input pins, and returns
1459 * the badness value.
1461 static int fill_multi_ios(struct hda_codec *codec,
1462 hda_nid_t reference_pin,
1465 struct hda_gen_spec *spec = codec->spec;
1466 struct auto_pin_cfg *cfg = &spec->autocfg;
1467 int type, i, j, num_pins, old_pins;
1468 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1469 unsigned int location = get_defcfg_location(defcfg);
1471 struct nid_path *path;
1473 old_pins = spec->multi_ios;
1477 num_pins = count_multiio_pins(codec, reference_pin);
1481 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1482 for (i = 0; i < cfg->num_inputs; i++) {
1483 hda_nid_t nid = cfg->inputs[i].pin;
1486 if (cfg->inputs[i].type != type)
1488 if (!can_be_multiio_pin(codec, location, nid))
1490 for (j = 0; j < spec->multi_ios; j++) {
1491 if (nid == spec->multi_io[j].pin)
1494 if (j < spec->multi_ios)
1498 dac = get_dac_if_single(codec, nid);
1500 dac = look_for_dac(codec, nid, false);
1505 path = snd_hda_add_new_path(codec, dac, nid,
1511 /* print_nid_path(codec, "multiio", path); */
1512 spec->multi_io[spec->multi_ios].pin = nid;
1513 spec->multi_io[spec->multi_ios].dac = dac;
1514 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1515 snd_hda_get_path_idx(codec, path);
1517 if (spec->multi_ios >= 2)
1523 badness = BAD_MULTI_IO;
1524 if (old_pins == spec->multi_ios) {
1526 return 1; /* nothing found */
1528 return badness; /* no badness if nothing found */
1530 if (!hardwired && spec->multi_ios < 2) {
1531 /* cancel newly assigned paths */
1532 spec->paths.used -= spec->multi_ios - old_pins;
1533 spec->multi_ios = old_pins;
1537 /* assign volume and mute controls */
1538 for (i = old_pins; i < spec->multi_ios; i++) {
1539 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1540 badness += assign_out_path_ctls(codec, path);
1546 /* map DACs for all pins in the list if they are single connections */
1547 static bool map_singles(struct hda_codec *codec, int outs,
1548 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1550 struct hda_gen_spec *spec = codec->spec;
1553 for (i = 0; i < outs; i++) {
1554 struct nid_path *path;
1558 dac = get_dac_if_single(codec, pins[i]);
1561 path = snd_hda_add_new_path(codec, dac, pins[i],
1563 if (!path && !i && spec->mixer_nid)
1564 path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1568 /* print_nid_path(codec, "output", path); */
1569 path->active = true;
1570 path_idx[i] = snd_hda_get_path_idx(codec, path);
1576 /* create a new path including aamix if available, and return its index */
1577 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1579 struct hda_gen_spec *spec = codec->spec;
1580 struct nid_path *path;
1581 hda_nid_t path_dac, dac, pin;
1583 path = snd_hda_get_path_from_idx(codec, path_idx);
1584 if (!path || !path->depth ||
1585 is_nid_contained(path, spec->mixer_nid))
1587 path_dac = path->path[0];
1588 dac = spec->private_dac_nids[0];
1589 pin = path->path[path->depth - 1];
1590 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1592 if (dac != path_dac)
1594 else if (spec->multiout.hp_out_nid[0])
1595 dac = spec->multiout.hp_out_nid[0];
1596 else if (spec->multiout.extra_out_nid[0])
1597 dac = spec->multiout.extra_out_nid[0];
1601 path = snd_hda_add_new_path(codec, dac, pin,
1606 /* print_nid_path(codec, "output-aamix", path); */
1607 path->active = false; /* unused as default */
1608 path->pin_fixed = true; /* static route */
1609 return snd_hda_get_path_idx(codec, path);
1612 /* check whether the independent HP is available with the current config */
1613 static bool indep_hp_possible(struct hda_codec *codec)
1615 struct hda_gen_spec *spec = codec->spec;
1616 struct auto_pin_cfg *cfg = &spec->autocfg;
1617 struct nid_path *path;
1620 if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1621 idx = spec->out_paths[0];
1623 idx = spec->hp_paths[0];
1624 path = snd_hda_get_path_from_idx(codec, idx);
1628 /* assume no path conflicts unless aamix is involved */
1629 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1632 /* check whether output paths contain aamix */
1633 for (i = 0; i < cfg->line_outs; i++) {
1634 if (spec->out_paths[i] == idx)
1636 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1637 if (path && is_nid_contained(path, spec->mixer_nid))
1640 for (i = 0; i < cfg->speaker_outs; i++) {
1641 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1642 if (path && is_nid_contained(path, spec->mixer_nid))
1649 /* fill the empty entries in the dac array for speaker/hp with the
1650 * shared dac pointed by the paths
1652 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1653 hda_nid_t *dacs, int *path_idx)
1655 struct nid_path *path;
1658 for (i = 0; i < num_outs; i++) {
1661 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1664 dacs[i] = path->path[0];
1668 /* fill in the dac_nids table from the parsed pin configuration */
1669 static int fill_and_eval_dacs(struct hda_codec *codec,
1670 bool fill_hardwired,
1671 bool fill_mio_first)
1673 struct hda_gen_spec *spec = codec->spec;
1674 struct auto_pin_cfg *cfg = &spec->autocfg;
1675 int i, err, badness;
1677 /* set num_dacs once to full for look_for_dac() */
1678 spec->multiout.num_dacs = cfg->line_outs;
1679 spec->multiout.dac_nids = spec->private_dac_nids;
1680 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1681 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1682 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1683 spec->multi_ios = 0;
1684 snd_array_free(&spec->paths);
1686 /* clear path indices */
1687 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1688 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1689 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1690 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1691 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1692 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1693 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1694 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1698 /* fill hard-wired DACs first */
1699 if (fill_hardwired) {
1702 mapped = map_singles(codec, cfg->line_outs,
1704 spec->private_dac_nids,
1706 mapped |= map_singles(codec, cfg->hp_outs,
1708 spec->multiout.hp_out_nid,
1710 mapped |= map_singles(codec, cfg->speaker_outs,
1712 spec->multiout.extra_out_nid,
1713 spec->speaker_paths);
1714 if (!spec->no_multi_io &&
1715 fill_mio_first && cfg->line_outs == 1 &&
1716 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1717 err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1724 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1725 spec->private_dac_nids, spec->out_paths,
1726 spec->main_out_badness);
1728 if (!spec->no_multi_io && fill_mio_first &&
1729 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1730 /* try to fill multi-io first */
1731 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1734 /* we don't count badness at this stage yet */
1737 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1738 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1739 spec->multiout.hp_out_nid,
1741 spec->extra_out_badness);
1746 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1747 err = try_assign_dacs(codec, cfg->speaker_outs,
1749 spec->multiout.extra_out_nid,
1750 spec->speaker_paths,
1751 spec->extra_out_badness);
1756 if (!spec->no_multi_io &&
1757 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1758 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1764 if (spec->mixer_nid) {
1765 spec->aamix_out_paths[0] =
1766 check_aamix_out_path(codec, spec->out_paths[0]);
1767 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1768 spec->aamix_out_paths[1] =
1769 check_aamix_out_path(codec, spec->hp_paths[0]);
1770 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1771 spec->aamix_out_paths[2] =
1772 check_aamix_out_path(codec, spec->speaker_paths[0]);
1775 if (!spec->no_multi_io &&
1776 cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1777 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1778 spec->multi_ios = 1; /* give badness */
1780 /* re-count num_dacs and squash invalid entries */
1781 spec->multiout.num_dacs = 0;
1782 for (i = 0; i < cfg->line_outs; i++) {
1783 if (spec->private_dac_nids[i])
1784 spec->multiout.num_dacs++;
1786 memmove(spec->private_dac_nids + i,
1787 spec->private_dac_nids + i + 1,
1788 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1789 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1793 spec->ext_channel_count = spec->min_channel_count =
1794 spec->multiout.num_dacs * 2;
1796 if (spec->multi_ios == 2) {
1797 for (i = 0; i < 2; i++)
1798 spec->private_dac_nids[spec->multiout.num_dacs++] =
1799 spec->multi_io[i].dac;
1800 } else if (spec->multi_ios) {
1801 spec->multi_ios = 0;
1802 badness += BAD_MULTI_IO;
1805 if (spec->indep_hp && !indep_hp_possible(codec))
1806 badness += BAD_NO_INDEP_HP;
1808 /* re-fill the shared DAC for speaker / headphone */
1809 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1810 refill_shared_dacs(codec, cfg->hp_outs,
1811 spec->multiout.hp_out_nid,
1813 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1814 refill_shared_dacs(codec, cfg->speaker_outs,
1815 spec->multiout.extra_out_nid,
1816 spec->speaker_paths);
1821 #define DEBUG_BADNESS
1823 #ifdef DEBUG_BADNESS
1824 #define debug_badness(fmt, ...) \
1825 codec_dbg(codec, fmt, ##__VA_ARGS__)
1827 #define debug_badness(fmt, ...) \
1828 do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1831 #ifdef DEBUG_BADNESS
1832 static inline void print_nid_path_idx(struct hda_codec *codec,
1833 const char *pfx, int idx)
1835 struct nid_path *path;
1837 path = snd_hda_get_path_from_idx(codec, idx);
1839 print_nid_path(codec, pfx, path);
1842 static void debug_show_configs(struct hda_codec *codec,
1843 struct auto_pin_cfg *cfg)
1845 struct hda_gen_spec *spec = codec->spec;
1846 static const char * const lo_type[3] = { "LO", "SP", "HP" };
1849 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1850 cfg->line_out_pins[0], cfg->line_out_pins[1],
1851 cfg->line_out_pins[2], cfg->line_out_pins[3],
1852 spec->multiout.dac_nids[0],
1853 spec->multiout.dac_nids[1],
1854 spec->multiout.dac_nids[2],
1855 spec->multiout.dac_nids[3],
1856 lo_type[cfg->line_out_type]);
1857 for (i = 0; i < cfg->line_outs; i++)
1858 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1859 if (spec->multi_ios > 0)
1860 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1862 spec->multi_io[0].pin, spec->multi_io[1].pin,
1863 spec->multi_io[0].dac, spec->multi_io[1].dac);
1864 for (i = 0; i < spec->multi_ios; i++)
1865 print_nid_path_idx(codec, " mio",
1866 spec->out_paths[cfg->line_outs + i]);
1868 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1869 cfg->hp_pins[0], cfg->hp_pins[1],
1870 cfg->hp_pins[2], cfg->hp_pins[3],
1871 spec->multiout.hp_out_nid[0],
1872 spec->multiout.hp_out_nid[1],
1873 spec->multiout.hp_out_nid[2],
1874 spec->multiout.hp_out_nid[3]);
1875 for (i = 0; i < cfg->hp_outs; i++)
1876 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1877 if (cfg->speaker_outs)
1878 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1879 cfg->speaker_pins[0], cfg->speaker_pins[1],
1880 cfg->speaker_pins[2], cfg->speaker_pins[3],
1881 spec->multiout.extra_out_nid[0],
1882 spec->multiout.extra_out_nid[1],
1883 spec->multiout.extra_out_nid[2],
1884 spec->multiout.extra_out_nid[3]);
1885 for (i = 0; i < cfg->speaker_outs; i++)
1886 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1887 for (i = 0; i < 3; i++)
1888 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1891 #define debug_show_configs(codec, cfg) /* NOP */
1894 /* find all available DACs of the codec */
1895 static void fill_all_dac_nids(struct hda_codec *codec)
1897 struct hda_gen_spec *spec = codec->spec;
1900 spec->num_all_dacs = 0;
1901 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1902 for_each_hda_codec_node(nid, codec) {
1903 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1905 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1906 codec_err(codec, "Too many DACs!\n");
1909 spec->all_dacs[spec->num_all_dacs++] = nid;
1913 static int parse_output_paths(struct hda_codec *codec)
1915 struct hda_gen_spec *spec = codec->spec;
1916 struct auto_pin_cfg *cfg = &spec->autocfg;
1917 struct auto_pin_cfg *best_cfg;
1919 int best_badness = INT_MAX;
1921 bool fill_hardwired = true, fill_mio_first = true;
1922 bool best_wired = true, best_mio = true;
1923 bool hp_spk_swapped = false;
1925 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1931 badness = fill_and_eval_dacs(codec, fill_hardwired,
1937 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1938 cfg->line_out_type, fill_hardwired, fill_mio_first,
1940 debug_show_configs(codec, cfg);
1941 if (badness < best_badness) {
1942 best_badness = badness;
1944 best_wired = fill_hardwired;
1945 best_mio = fill_mio_first;
1949 fill_mio_first = !fill_mio_first;
1950 if (!fill_mio_first)
1952 fill_hardwired = !fill_hardwired;
1953 if (!fill_hardwired)
1957 hp_spk_swapped = true;
1958 if (cfg->speaker_outs > 0 &&
1959 cfg->line_out_type == AUTO_PIN_HP_OUT) {
1960 cfg->hp_outs = cfg->line_outs;
1961 memcpy(cfg->hp_pins, cfg->line_out_pins,
1962 sizeof(cfg->hp_pins));
1963 cfg->line_outs = cfg->speaker_outs;
1964 memcpy(cfg->line_out_pins, cfg->speaker_pins,
1965 sizeof(cfg->speaker_pins));
1966 cfg->speaker_outs = 0;
1967 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1968 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1969 fill_hardwired = true;
1972 if (cfg->hp_outs > 0 &&
1973 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1974 cfg->speaker_outs = cfg->line_outs;
1975 memcpy(cfg->speaker_pins, cfg->line_out_pins,
1976 sizeof(cfg->speaker_pins));
1977 cfg->line_outs = cfg->hp_outs;
1978 memcpy(cfg->line_out_pins, cfg->hp_pins,
1979 sizeof(cfg->hp_pins));
1981 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1982 cfg->line_out_type = AUTO_PIN_HP_OUT;
1983 fill_hardwired = true;
1990 debug_badness("==> restoring best_cfg\n");
1992 fill_and_eval_dacs(codec, best_wired, best_mio);
1994 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1995 cfg->line_out_type, best_wired, best_mio);
1996 debug_show_configs(codec, cfg);
1998 if (cfg->line_out_pins[0]) {
1999 struct nid_path *path;
2000 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2002 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2003 if (spec->vmaster_nid) {
2004 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2005 HDA_OUTPUT, spec->vmaster_tlv);
2006 if (spec->dac_min_mute)
2007 spec->vmaster_tlv[3] |= TLV_DB_SCALE_MUTE;
2011 /* set initial pinctl targets */
2012 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2016 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
2017 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2018 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
2019 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
2020 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2021 set_pin_targets(codec, cfg->speaker_outs,
2022 cfg->speaker_pins, val);
2025 /* clear indep_hp flag if not available */
2026 if (spec->indep_hp && !indep_hp_possible(codec))
2033 /* add playback controls from the parsed DAC table */
2034 static int create_multi_out_ctls(struct hda_codec *codec,
2035 const struct auto_pin_cfg *cfg)
2037 struct hda_gen_spec *spec = codec->spec;
2038 int i, err, noutputs;
2040 noutputs = cfg->line_outs;
2041 if (spec->multi_ios > 0 && cfg->line_outs < 3)
2042 noutputs += spec->multi_ios;
2044 for (i = 0; i < noutputs; i++) {
2047 struct nid_path *path;
2049 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2053 name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
2054 if (!name || !strcmp(name, "CLFE")) {
2056 err = add_vol_ctl(codec, "Center", 0, 1, path);
2059 err = add_vol_ctl(codec, "LFE", 0, 2, path);
2063 err = add_stereo_vol(codec, name, index, path);
2068 name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
2069 if (!name || !strcmp(name, "CLFE")) {
2070 err = add_sw_ctl(codec, "Center", 0, 1, path);
2073 err = add_sw_ctl(codec, "LFE", 0, 2, path);
2077 err = add_stereo_sw(codec, name, index, path);
2085 static int create_extra_out(struct hda_codec *codec, int path_idx,
2086 const char *pfx, int cidx)
2088 struct nid_path *path;
2091 path = snd_hda_get_path_from_idx(codec, path_idx);
2094 err = add_stereo_vol(codec, pfx, cidx, path);
2097 err = add_stereo_sw(codec, pfx, cidx, path);
2103 /* add playback controls for speaker and HP outputs */
2104 static int create_extra_outs(struct hda_codec *codec, int num_pins,
2105 const int *paths, const char *pfx)
2109 for (i = 0; i < num_pins; i++) {
2111 char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2114 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
2115 name = "Bass Speaker";
2116 else if (num_pins >= 3) {
2117 snprintf(tmp, sizeof(tmp), "%s %s",
2118 pfx, channel_name[i]);
2124 err = create_extra_out(codec, paths[i], name, idx);
2131 static int create_hp_out_ctls(struct hda_codec *codec)
2133 struct hda_gen_spec *spec = codec->spec;
2134 return create_extra_outs(codec, spec->autocfg.hp_outs,
2139 static int create_speaker_out_ctls(struct hda_codec *codec)
2141 struct hda_gen_spec *spec = codec->spec;
2142 return create_extra_outs(codec, spec->autocfg.speaker_outs,
2143 spec->speaker_paths,
2148 * independent HP controls
2151 static void call_hp_automute(struct hda_codec *codec,
2152 struct hda_jack_callback *jack);
2153 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2154 struct snd_ctl_elem_info *uinfo)
2156 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2159 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2160 struct snd_ctl_elem_value *ucontrol)
2162 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2163 struct hda_gen_spec *spec = codec->spec;
2164 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2168 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2169 int nomix_path_idx, int mix_path_idx,
2172 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2173 struct snd_ctl_elem_value *ucontrol)
2175 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2176 struct hda_gen_spec *spec = codec->spec;
2177 unsigned int select = ucontrol->value.enumerated.item[0];
2180 mutex_lock(&spec->pcm_mutex);
2181 if (spec->active_streams) {
2186 if (spec->indep_hp_enabled != select) {
2188 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2189 dacp = &spec->private_dac_nids[0];
2191 dacp = &spec->multiout.hp_out_nid[0];
2193 /* update HP aamix paths in case it conflicts with indep HP */
2194 if (spec->have_aamix_ctl) {
2195 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2196 update_aamix_paths(codec, spec->aamix_mode,
2198 spec->aamix_out_paths[0],
2199 spec->autocfg.line_out_type);
2201 update_aamix_paths(codec, spec->aamix_mode,
2203 spec->aamix_out_paths[1],
2207 spec->indep_hp_enabled = select;
2208 if (spec->indep_hp_enabled)
2211 *dacp = spec->alt_dac_nid;
2213 call_hp_automute(codec, NULL);
2217 mutex_unlock(&spec->pcm_mutex);
2221 static const struct snd_kcontrol_new indep_hp_ctl = {
2222 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2223 .name = "Independent HP",
2224 .info = indep_hp_info,
2225 .get = indep_hp_get,
2226 .put = indep_hp_put,
2230 static int create_indep_hp_ctls(struct hda_codec *codec)
2232 struct hda_gen_spec *spec = codec->spec;
2235 if (!spec->indep_hp)
2237 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2238 dac = spec->multiout.dac_nids[0];
2240 dac = spec->multiout.hp_out_nid[0];
2246 spec->indep_hp_enabled = false;
2247 spec->alt_dac_nid = dac;
2248 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2254 * channel mode enum control
2257 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2258 struct snd_ctl_elem_info *uinfo)
2260 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2261 struct hda_gen_spec *spec = codec->spec;
2264 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2266 uinfo->value.enumerated.items = spec->multi_ios + 1;
2267 if (uinfo->value.enumerated.item > spec->multi_ios)
2268 uinfo->value.enumerated.item = spec->multi_ios;
2269 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2270 sprintf(uinfo->value.enumerated.name, "%dch", chs);
2274 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2275 struct snd_ctl_elem_value *ucontrol)
2277 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2278 struct hda_gen_spec *spec = codec->spec;
2279 ucontrol->value.enumerated.item[0] =
2280 (spec->ext_channel_count - spec->min_channel_count) / 2;
2284 static inline struct nid_path *
2285 get_multiio_path(struct hda_codec *codec, int idx)
2287 struct hda_gen_spec *spec = codec->spec;
2288 return snd_hda_get_path_from_idx(codec,
2289 spec->out_paths[spec->autocfg.line_outs + idx]);
2292 static void update_automute_all(struct hda_codec *codec);
2294 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2295 * used for output paths
2297 static bool aamix_default(struct hda_gen_spec *spec)
2299 return !spec->have_aamix_ctl || spec->aamix_mode;
2302 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2304 struct hda_gen_spec *spec = codec->spec;
2305 hda_nid_t nid = spec->multi_io[idx].pin;
2306 struct nid_path *path;
2308 path = get_multiio_path(codec, idx);
2312 if (path->active == output)
2316 set_pin_target(codec, nid, PIN_OUT, true);
2317 snd_hda_activate_path(codec, path, true, aamix_default(spec));
2318 set_pin_eapd(codec, nid, true);
2320 set_pin_eapd(codec, nid, false);
2321 snd_hda_activate_path(codec, path, false, aamix_default(spec));
2322 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2323 path_power_down_sync(codec, path);
2326 /* update jack retasking in case it modifies any of them */
2327 update_automute_all(codec);
2332 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2333 struct snd_ctl_elem_value *ucontrol)
2335 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2336 struct hda_gen_spec *spec = codec->spec;
2339 ch = ucontrol->value.enumerated.item[0];
2340 if (ch < 0 || ch > spec->multi_ios)
2342 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2344 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2345 for (i = 0; i < spec->multi_ios; i++)
2346 set_multi_io(codec, i, i < ch);
2347 spec->multiout.max_channels = max(spec->ext_channel_count,
2348 spec->const_channel_count);
2349 if (spec->need_dac_fix)
2350 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2354 static const struct snd_kcontrol_new channel_mode_enum = {
2355 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2356 .name = "Channel Mode",
2357 .info = ch_mode_info,
2362 static int create_multi_channel_mode(struct hda_codec *codec)
2364 struct hda_gen_spec *spec = codec->spec;
2366 if (spec->multi_ios > 0) {
2367 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2374 * aamix loopback enable/disable switch
2377 #define loopback_mixing_info indep_hp_info
2379 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2380 struct snd_ctl_elem_value *ucontrol)
2382 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2383 struct hda_gen_spec *spec = codec->spec;
2384 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2388 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2389 int nomix_path_idx, int mix_path_idx,
2392 struct hda_gen_spec *spec = codec->spec;
2393 struct nid_path *nomix_path, *mix_path;
2395 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2396 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2397 if (!nomix_path || !mix_path)
2400 /* if HP aamix path is driven from a different DAC and the
2401 * independent HP mode is ON, can't turn on aamix path
2403 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2404 mix_path->path[0] != spec->alt_dac_nid)
2408 snd_hda_activate_path(codec, nomix_path, false, true);
2409 snd_hda_activate_path(codec, mix_path, true, true);
2410 path_power_down_sync(codec, nomix_path);
2412 snd_hda_activate_path(codec, mix_path, false, false);
2413 snd_hda_activate_path(codec, nomix_path, true, false);
2414 path_power_down_sync(codec, mix_path);
2418 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2419 struct snd_ctl_elem_value *ucontrol)
2421 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2422 struct hda_gen_spec *spec = codec->spec;
2423 unsigned int val = ucontrol->value.enumerated.item[0];
2425 if (val == spec->aamix_mode)
2427 spec->aamix_mode = val;
2428 update_aamix_paths(codec, val, spec->out_paths[0],
2429 spec->aamix_out_paths[0],
2430 spec->autocfg.line_out_type);
2431 update_aamix_paths(codec, val, spec->hp_paths[0],
2432 spec->aamix_out_paths[1],
2434 update_aamix_paths(codec, val, spec->speaker_paths[0],
2435 spec->aamix_out_paths[2],
2436 AUTO_PIN_SPEAKER_OUT);
2440 static const struct snd_kcontrol_new loopback_mixing_enum = {
2441 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2442 .name = "Loopback Mixing",
2443 .info = loopback_mixing_info,
2444 .get = loopback_mixing_get,
2445 .put = loopback_mixing_put,
2448 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2450 struct hda_gen_spec *spec = codec->spec;
2452 if (!spec->mixer_nid)
2454 if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2455 spec->aamix_out_paths[2]))
2457 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2459 spec->have_aamix_ctl = 1;
2464 * shared headphone/mic handling
2467 static void call_update_outputs(struct hda_codec *codec);
2469 /* for shared I/O, change the pin-control accordingly */
2470 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2472 struct hda_gen_spec *spec = codec->spec;
2477 pin = spec->hp_mic_pin;
2478 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2481 val = snd_hda_codec_get_pin_target(codec, pin);
2491 val = snd_hda_get_default_vref(codec, pin);
2492 /* if the HP pin doesn't support VREF and the codec driver gives an
2493 * alternative pin, set up the VREF on that pin instead
2495 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2496 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2497 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2498 if (vref_val != AC_PINCTL_VREF_HIZ)
2499 snd_hda_set_pin_ctl_cache(codec, vref_pin,
2500 PIN_IN | (as_mic ? vref_val : 0));
2503 if (!spec->hp_mic_jack_modes) {
2508 set_pin_target(codec, pin, val, true);
2509 call_hp_automute(codec, NULL);
2513 /* create a shared input with the headphone out */
2514 static int create_hp_mic(struct hda_codec *codec)
2516 struct hda_gen_spec *spec = codec->spec;
2517 struct auto_pin_cfg *cfg = &spec->autocfg;
2518 unsigned int defcfg;
2521 if (!spec->hp_mic) {
2522 if (spec->suppress_hp_mic_detect)
2524 /* automatic detection: only if no input or a single internal
2525 * input pin is found, try to detect the shared hp/mic
2527 if (cfg->num_inputs > 1)
2529 else if (cfg->num_inputs == 1) {
2530 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2531 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2536 spec->hp_mic = 0; /* clear once */
2537 if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2541 if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2542 nid = cfg->line_out_pins[0];
2543 else if (cfg->hp_outs > 0)
2544 nid = cfg->hp_pins[0];
2548 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2549 return 0; /* no input */
2551 cfg->inputs[cfg->num_inputs].pin = nid;
2552 cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2553 cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2556 spec->hp_mic_pin = nid;
2557 /* we can't handle auto-mic together with HP-mic */
2558 spec->suppress_auto_mic = 1;
2559 codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid);
2567 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2569 static const char * const out_jack_texts[] = {
2570 "Line Out", "Headphone Out",
2573 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2574 struct snd_ctl_elem_info *uinfo)
2576 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2579 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2580 struct snd_ctl_elem_value *ucontrol)
2582 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2583 hda_nid_t nid = kcontrol->private_value;
2584 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2585 ucontrol->value.enumerated.item[0] = 1;
2587 ucontrol->value.enumerated.item[0] = 0;
2591 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2592 struct snd_ctl_elem_value *ucontrol)
2594 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2595 hda_nid_t nid = kcontrol->private_value;
2598 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2599 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2601 snd_hda_set_pin_ctl_cache(codec, nid, val);
2605 static const struct snd_kcontrol_new out_jack_mode_enum = {
2606 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2607 .info = out_jack_mode_info,
2608 .get = out_jack_mode_get,
2609 .put = out_jack_mode_put,
2612 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2614 struct hda_gen_spec *spec = codec->spec;
2617 for (i = 0; i < spec->kctls.used; i++) {
2618 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2619 if (!strcmp(kctl->name, name) && kctl->index == idx)
2625 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2626 char *name, size_t name_len)
2628 struct hda_gen_spec *spec = codec->spec;
2631 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2632 strlcat(name, " Jack Mode", name_len);
2634 for (; find_kctl_name(codec, name, idx); idx++)
2638 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2640 struct hda_gen_spec *spec = codec->spec;
2641 if (spec->add_jack_modes) {
2642 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2643 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2649 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2652 struct hda_gen_spec *spec = codec->spec;
2655 for (i = 0; i < num_pins; i++) {
2656 hda_nid_t pin = pins[i];
2657 if (pin == spec->hp_mic_pin)
2659 if (get_out_jack_num_items(codec, pin) > 1) {
2660 struct snd_kcontrol_new *knew;
2661 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2662 get_jack_mode_name(codec, pin, name, sizeof(name));
2663 knew = snd_hda_gen_add_kctl(spec, name,
2664 &out_jack_mode_enum);
2667 knew->private_value = pin;
2678 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2681 static const char * const vref_texts[NUM_VREFS] = {
2682 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2683 "", "Mic 80pc Bias", "Mic 100pc Bias"
2686 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2688 unsigned int pincap;
2690 pincap = snd_hda_query_pin_caps(codec, pin);
2691 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2692 /* filter out unusual vrefs */
2693 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2697 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2698 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2700 unsigned int i, n = 0;
2702 for (i = 0; i < NUM_VREFS; i++) {
2703 if (vref_caps & (1 << i)) {
2712 /* convert back from the vref ctl index to the enum item index */
2713 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2715 unsigned int i, n = 0;
2717 for (i = 0; i < NUM_VREFS; i++) {
2720 if (vref_caps & (1 << i))
2726 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2727 struct snd_ctl_elem_info *uinfo)
2729 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2730 hda_nid_t nid = kcontrol->private_value;
2731 unsigned int vref_caps = get_vref_caps(codec, nid);
2733 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2735 /* set the right text */
2736 strcpy(uinfo->value.enumerated.name,
2737 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2741 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2742 struct snd_ctl_elem_value *ucontrol)
2744 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2745 hda_nid_t nid = kcontrol->private_value;
2746 unsigned int vref_caps = get_vref_caps(codec, nid);
2749 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2750 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2754 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2755 struct snd_ctl_elem_value *ucontrol)
2757 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2758 hda_nid_t nid = kcontrol->private_value;
2759 unsigned int vref_caps = get_vref_caps(codec, nid);
2760 unsigned int val, idx;
2762 val = snd_hda_codec_get_pin_target(codec, nid);
2763 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2764 if (idx == ucontrol->value.enumerated.item[0])
2767 val &= ~AC_PINCTL_VREFEN;
2768 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2769 snd_hda_set_pin_ctl_cache(codec, nid, val);
2773 static const struct snd_kcontrol_new in_jack_mode_enum = {
2774 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2775 .info = in_jack_mode_info,
2776 .get = in_jack_mode_get,
2777 .put = in_jack_mode_put,
2780 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2782 struct hda_gen_spec *spec = codec->spec;
2784 if (spec->add_jack_modes)
2785 nitems = hweight32(get_vref_caps(codec, pin));
2786 return nitems ? nitems : 1;
2789 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2791 struct hda_gen_spec *spec = codec->spec;
2792 struct snd_kcontrol_new *knew;
2793 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2794 unsigned int defcfg;
2796 if (pin == spec->hp_mic_pin)
2797 return 0; /* already done in create_out_jack_mode() */
2799 /* no jack mode for fixed pins */
2800 defcfg = snd_hda_codec_get_pincfg(codec, pin);
2801 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2804 /* no multiple vref caps? */
2805 if (get_in_jack_num_items(codec, pin) <= 1)
2808 get_jack_mode_name(codec, pin, name, sizeof(name));
2809 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2812 knew->private_value = pin;
2817 * HP/mic shared jack mode
2819 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2820 struct snd_ctl_elem_info *uinfo)
2822 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2823 hda_nid_t nid = kcontrol->private_value;
2824 int out_jacks = get_out_jack_num_items(codec, nid);
2825 int in_jacks = get_in_jack_num_items(codec, nid);
2826 const char *text = NULL;
2829 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2831 uinfo->value.enumerated.items = out_jacks + in_jacks;
2832 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2833 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2834 idx = uinfo->value.enumerated.item;
2835 if (idx < out_jacks) {
2837 text = out_jack_texts[idx];
2839 text = "Headphone Out";
2843 unsigned int vref_caps = get_vref_caps(codec, nid);
2844 text = vref_texts[get_vref_idx(vref_caps, idx)];
2849 strcpy(uinfo->value.enumerated.name, text);
2853 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2855 int out_jacks = get_out_jack_num_items(codec, nid);
2856 int in_jacks = get_in_jack_num_items(codec, nid);
2857 unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2860 if (val & PIN_OUT) {
2861 if (out_jacks > 1 && val == PIN_HP)
2863 } else if (val & PIN_IN) {
2866 unsigned int vref_caps = get_vref_caps(codec, nid);
2867 val &= AC_PINCTL_VREFEN;
2868 idx += cvt_from_vref_idx(vref_caps, val);
2874 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2875 struct snd_ctl_elem_value *ucontrol)
2877 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2878 hda_nid_t nid = kcontrol->private_value;
2879 ucontrol->value.enumerated.item[0] =
2880 get_cur_hp_mic_jack_mode(codec, nid);
2884 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2885 struct snd_ctl_elem_value *ucontrol)
2887 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2888 hda_nid_t nid = kcontrol->private_value;
2889 int out_jacks = get_out_jack_num_items(codec, nid);
2890 int in_jacks = get_in_jack_num_items(codec, nid);
2891 unsigned int val, oldval, idx;
2893 oldval = get_cur_hp_mic_jack_mode(codec, nid);
2894 idx = ucontrol->value.enumerated.item[0];
2898 if (idx < out_jacks) {
2900 val = idx ? PIN_HP : PIN_OUT;
2906 unsigned int vref_caps = get_vref_caps(codec, nid);
2907 val = snd_hda_codec_get_pin_target(codec, nid);
2908 val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2909 val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2911 val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2913 snd_hda_set_pin_ctl_cache(codec, nid, val);
2914 call_hp_automute(codec, NULL);
2919 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2920 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2921 .info = hp_mic_jack_mode_info,
2922 .get = hp_mic_jack_mode_get,
2923 .put = hp_mic_jack_mode_put,
2926 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2928 struct hda_gen_spec *spec = codec->spec;
2929 struct snd_kcontrol_new *knew;
2931 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2932 &hp_mic_jack_mode_enum);
2935 knew->private_value = pin;
2936 spec->hp_mic_jack_modes = 1;
2944 /* add the powersave loopback-list entry */
2945 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2947 struct hda_amp_list *list;
2949 list = snd_array_new(&spec->loopback_list);
2953 list->dir = HDA_INPUT;
2955 spec->loopback.amplist = spec->loopback_list.list;
2959 /* return true if either a volume or a mute amp is found for the given
2960 * aamix path; the amp has to be either in the mixer node or its direct leaf
2962 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
2963 hda_nid_t pin, unsigned int *mix_val,
2964 unsigned int *mute_val)
2967 const hda_nid_t *list;
2970 idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
2974 *mix_val = *mute_val = 0;
2975 if (nid_has_volume(codec, mix_nid, HDA_INPUT))
2976 *mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2977 if (nid_has_mute(codec, mix_nid, HDA_INPUT))
2978 *mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2979 if (*mix_val && *mute_val)
2982 /* check leaf node */
2983 num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
2984 if (num_conns < idx)
2987 if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
2988 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
2989 *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2990 if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
2991 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
2992 *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2994 return *mix_val || *mute_val;
2997 /* create input playback/capture controls for the given pin */
2998 static int new_analog_input(struct hda_codec *codec, int input_idx,
2999 hda_nid_t pin, const char *ctlname, int ctlidx,
3002 struct hda_gen_spec *spec = codec->spec;
3003 struct nid_path *path;
3004 unsigned int mix_val, mute_val;
3007 if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
3010 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
3013 print_nid_path(codec, "loopback", path);
3014 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3016 idx = path->idx[path->depth - 1];
3018 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3021 path->ctls[NID_PATH_VOL_CTL] = mix_val;
3025 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3028 path->ctls[NID_PATH_MUTE_CTL] = mute_val;
3031 path->active = true;
3032 path->stream_enabled = true; /* no DAC/ADC involved */
3033 err = add_loopback_list(spec, mix_nid, idx);
3037 if (spec->mixer_nid != spec->mixer_merge_nid &&
3038 !spec->loopback_merge_path) {
3039 path = snd_hda_add_new_path(codec, spec->mixer_nid,
3040 spec->mixer_merge_nid, 0);
3042 print_nid_path(codec, "loopback-merge", path);
3043 path->active = true;
3044 path->pin_fixed = true; /* static route */
3045 path->stream_enabled = true; /* no DAC/ADC involved */
3046 spec->loopback_merge_path =
3047 snd_hda_get_path_idx(codec, path);
3054 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
3056 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
3057 return (pincap & AC_PINCAP_IN) != 0;
3060 /* Parse the codec tree and retrieve ADCs */
3061 static int fill_adc_nids(struct hda_codec *codec)
3063 struct hda_gen_spec *spec = codec->spec;
3065 hda_nid_t *adc_nids = spec->adc_nids;
3066 int max_nums = ARRAY_SIZE(spec->adc_nids);
3069 for_each_hda_codec_node(nid, codec) {
3070 unsigned int caps = get_wcaps(codec, nid);
3071 int type = get_wcaps_type(caps);
3073 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
3075 adc_nids[nums] = nid;
3076 if (++nums >= max_nums)
3079 spec->num_adc_nids = nums;
3081 /* copy the detected ADCs to all_adcs[] */
3082 spec->num_all_adcs = nums;
3083 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3088 /* filter out invalid adc_nids that don't give all active input pins;
3089 * if needed, check whether dynamic ADC-switching is available
3091 static int check_dyn_adc_switch(struct hda_codec *codec)
3093 struct hda_gen_spec *spec = codec->spec;
3094 struct hda_input_mux *imux = &spec->input_mux;
3095 unsigned int ok_bits;
3100 for (n = 0; n < spec->num_adc_nids; n++) {
3101 for (i = 0; i < imux->num_items; i++) {
3102 if (!spec->input_paths[i][n])
3105 if (i >= imux->num_items) {
3106 ok_bits |= (1 << n);
3112 /* check whether ADC-switch is possible */
3113 for (i = 0; i < imux->num_items; i++) {
3114 for (n = 0; n < spec->num_adc_nids; n++) {
3115 if (spec->input_paths[i][n]) {
3116 spec->dyn_adc_idx[i] = n;
3122 codec_dbg(codec, "enabling ADC switching\n");
3123 spec->dyn_adc_switch = 1;
3124 } else if (nums != spec->num_adc_nids) {
3125 /* shrink the invalid adcs and input paths */
3127 for (n = 0; n < spec->num_adc_nids; n++) {
3128 if (!(ok_bits & (1 << n)))
3131 spec->adc_nids[nums] = spec->adc_nids[n];
3132 for (i = 0; i < imux->num_items; i++) {
3133 invalidate_nid_path(codec,
3134 spec->input_paths[i][nums]);
3135 spec->input_paths[i][nums] =
3136 spec->input_paths[i][n];
3141 spec->num_adc_nids = nums;
3144 if (imux->num_items == 1 ||
3145 (imux->num_items == 2 && spec->hp_mic)) {
3146 codec_dbg(codec, "reducing to a single ADC\n");
3147 spec->num_adc_nids = 1; /* reduce to a single ADC */
3150 /* single index for individual volumes ctls */
3151 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3152 spec->num_adc_nids = 1;
3157 /* parse capture source paths from the given pin and create imux items */
3158 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3159 int cfg_idx, int num_adcs,
3160 const char *label, int anchor)
3162 struct hda_gen_spec *spec = codec->spec;
3163 struct hda_input_mux *imux = &spec->input_mux;
3164 int imux_idx = imux->num_items;
3165 bool imux_added = false;
3168 for (c = 0; c < num_adcs; c++) {
3169 struct nid_path *path;
3170 hda_nid_t adc = spec->adc_nids[c];
3172 if (!is_reachable_path(codec, pin, adc))
3174 path = snd_hda_add_new_path(codec, pin, adc, anchor);
3177 print_nid_path(codec, "input", path);
3178 spec->input_paths[imux_idx][c] =
3179 snd_hda_get_path_idx(codec, path);
3182 if (spec->hp_mic_pin == pin)
3183 spec->hp_mic_mux_idx = imux->num_items;
3184 spec->imux_pins[imux->num_items] = pin;
3185 snd_hda_add_imux_item(codec, imux, label, cfg_idx, NULL);
3187 if (spec->dyn_adc_switch)
3188 spec->dyn_adc_idx[imux_idx] = c;
3196 * create playback/capture controls for input pins
3199 /* fill the label for each input at first */
3200 static int fill_input_pin_labels(struct hda_codec *codec)
3202 struct hda_gen_spec *spec = codec->spec;
3203 const struct auto_pin_cfg *cfg = &spec->autocfg;
3206 for (i = 0; i < cfg->num_inputs; i++) {
3207 hda_nid_t pin = cfg->inputs[i].pin;
3211 if (!is_input_pin(codec, pin))
3214 label = hda_get_autocfg_input_label(codec, cfg, i);
3216 for (j = i - 1; j >= 0; j--) {
3217 if (spec->input_labels[j] &&
3218 !strcmp(spec->input_labels[j], label)) {
3219 idx = spec->input_label_idxs[j] + 1;
3224 spec->input_labels[i] = label;
3225 spec->input_label_idxs[i] = idx;
3231 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
3233 static int create_input_ctls(struct hda_codec *codec)
3235 struct hda_gen_spec *spec = codec->spec;
3236 const struct auto_pin_cfg *cfg = &spec->autocfg;
3237 hda_nid_t mixer = spec->mixer_nid;
3242 num_adcs = fill_adc_nids(codec);
3246 err = fill_input_pin_labels(codec);
3250 for (i = 0; i < cfg->num_inputs; i++) {
3253 pin = cfg->inputs[i].pin;
3254 if (!is_input_pin(codec, pin))
3258 if (cfg->inputs[i].type == AUTO_PIN_MIC)
3259 val |= snd_hda_get_default_vref(codec, pin);
3260 if (pin != spec->hp_mic_pin)
3261 set_pin_target(codec, pin, val, false);
3264 if (is_reachable_path(codec, pin, mixer)) {
3265 err = new_analog_input(codec, i, pin,
3266 spec->input_labels[i],
3267 spec->input_label_idxs[i],
3274 err = parse_capture_source(codec, pin, i, num_adcs,
3275 spec->input_labels[i], -mixer);
3279 if (spec->add_jack_modes) {
3280 err = create_in_jack_mode(codec, pin);
3286 /* add stereo mix when explicitly enabled via hint */
3287 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3288 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3293 spec->suppress_auto_mic = 1;
3304 /* get the input path specified by the given adc and imux indices */
3305 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3307 struct hda_gen_spec *spec = codec->spec;
3308 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3312 if (spec->dyn_adc_switch)
3313 adc_idx = spec->dyn_adc_idx[imux_idx];
3314 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3318 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3321 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3324 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3325 struct snd_ctl_elem_info *uinfo)
3327 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3328 struct hda_gen_spec *spec = codec->spec;
3329 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3332 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3333 struct snd_ctl_elem_value *ucontrol)
3335 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3336 struct hda_gen_spec *spec = codec->spec;
3337 /* the ctls are created at once with multiple counts */
3338 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3340 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3344 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3345 struct snd_ctl_elem_value *ucontrol)
3347 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3348 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3349 return mux_select(codec, adc_idx,
3350 ucontrol->value.enumerated.item[0]);
3353 static const struct snd_kcontrol_new cap_src_temp = {
3354 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3355 .name = "Input Source",
3356 .info = mux_enum_info,
3357 .get = mux_enum_get,
3358 .put = mux_enum_put,
3362 * capture volume and capture switch ctls
3365 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3366 struct snd_ctl_elem_value *ucontrol);
3368 /* call the given amp update function for all amps in the imux list at once */
3369 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3370 struct snd_ctl_elem_value *ucontrol,
3371 put_call_t func, int type)
3373 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3374 struct hda_gen_spec *spec = codec->spec;
3375 const struct hda_input_mux *imux;
3376 struct nid_path *path;
3377 int i, adc_idx, err = 0;
3379 imux = &spec->input_mux;
3380 adc_idx = kcontrol->id.index;
3381 mutex_lock(&codec->control_mutex);
3382 for (i = 0; i < imux->num_items; i++) {
3383 path = get_input_path(codec, adc_idx, i);
3384 if (!path || !path->ctls[type])
3386 kcontrol->private_value = path->ctls[type];
3387 err = func(kcontrol, ucontrol);
3391 mutex_unlock(&codec->control_mutex);
3392 if (err >= 0 && spec->cap_sync_hook)
3393 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3397 /* capture volume ctl callbacks */
3398 #define cap_vol_info snd_hda_mixer_amp_volume_info
3399 #define cap_vol_get snd_hda_mixer_amp_volume_get
3400 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3402 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3403 struct snd_ctl_elem_value *ucontrol)
3405 return cap_put_caller(kcontrol, ucontrol,
3406 snd_hda_mixer_amp_volume_put,
3410 static const struct snd_kcontrol_new cap_vol_temp = {
3411 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3412 .name = "Capture Volume",
3413 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3414 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3415 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3416 .info = cap_vol_info,
3419 .tlv = { .c = cap_vol_tlv },
3422 /* capture switch ctl callbacks */
3423 #define cap_sw_info snd_ctl_boolean_stereo_info
3424 #define cap_sw_get snd_hda_mixer_amp_switch_get
3426 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3427 struct snd_ctl_elem_value *ucontrol)
3429 return cap_put_caller(kcontrol, ucontrol,
3430 snd_hda_mixer_amp_switch_put,
3434 static const struct snd_kcontrol_new cap_sw_temp = {
3435 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3436 .name = "Capture Switch",
3437 .info = cap_sw_info,
3442 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3447 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3448 for (depth = 0; depth < 3; depth++) {
3449 if (depth >= path->depth)
3451 i = path->depth - depth - 1;
3452 nid = path->path[i];
3453 if (!path->ctls[NID_PATH_VOL_CTL]) {
3454 if (nid_has_volume(codec, nid, HDA_OUTPUT))
3455 path->ctls[NID_PATH_VOL_CTL] =
3456 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3457 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3458 int idx = path->idx[i];
3459 if (!depth && codec->single_adc_amp)
3461 path->ctls[NID_PATH_VOL_CTL] =
3462 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3465 if (!path->ctls[NID_PATH_MUTE_CTL]) {
3466 if (nid_has_mute(codec, nid, HDA_OUTPUT))
3467 path->ctls[NID_PATH_MUTE_CTL] =
3468 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3469 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3470 int idx = path->idx[i];
3471 if (!depth && codec->single_adc_amp)
3473 path->ctls[NID_PATH_MUTE_CTL] =
3474 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3481 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3483 struct hda_gen_spec *spec = codec->spec;
3484 struct auto_pin_cfg *cfg = &spec->autocfg;
3488 if (!spec->inv_dmic_split)
3490 for (i = 0; i < cfg->num_inputs; i++) {
3491 if (cfg->inputs[i].pin != nid)
3493 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3495 val = snd_hda_codec_get_pincfg(codec, nid);
3496 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3501 /* capture switch put callback for a single control with hook call */
3502 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3503 struct snd_ctl_elem_value *ucontrol)
3505 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3506 struct hda_gen_spec *spec = codec->spec;
3509 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3513 if (spec->cap_sync_hook)
3514 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3519 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3520 int idx, bool is_switch, unsigned int ctl,
3523 struct hda_gen_spec *spec = codec->spec;
3524 char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3525 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3526 const char *sfx = is_switch ? "Switch" : "Volume";
3527 unsigned int chs = inv_dmic ? 1 : 3;
3528 struct snd_kcontrol_new *knew;
3534 snprintf(tmpname, sizeof(tmpname),
3535 "%s Capture %s", label, sfx);
3537 snprintf(tmpname, sizeof(tmpname),
3539 knew = add_control(spec, type, tmpname, idx,
3540 amp_val_replace_channels(ctl, chs));
3544 knew->put = cap_single_sw_put;
3548 /* Make independent right kcontrol */
3550 snprintf(tmpname, sizeof(tmpname),
3551 "Inverted %s Capture %s", label, sfx);
3553 snprintf(tmpname, sizeof(tmpname),
3554 "Inverted Capture %s", sfx);
3555 knew = add_control(spec, type, tmpname, idx,
3556 amp_val_replace_channels(ctl, 2));
3560 knew->put = cap_single_sw_put;
3564 /* create single (and simple) capture volume and switch controls */
3565 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3566 unsigned int vol_ctl, unsigned int sw_ctl,
3570 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3573 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3579 /* create bound capture volume and switch controls */
3580 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3581 unsigned int vol_ctl, unsigned int sw_ctl)
3583 struct hda_gen_spec *spec = codec->spec;
3584 struct snd_kcontrol_new *knew;
3587 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3591 knew->private_value = vol_ctl;
3592 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3595 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3599 knew->private_value = sw_ctl;
3600 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3605 /* return the vol ctl when used first in the imux list */
3606 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3608 struct nid_path *path;
3612 path = get_input_path(codec, 0, idx);
3615 ctl = path->ctls[type];
3618 for (i = 0; i < idx - 1; i++) {
3619 path = get_input_path(codec, 0, i);
3620 if (path && path->ctls[type] == ctl)
3626 /* create individual capture volume and switch controls per input */
3627 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3629 struct hda_gen_spec *spec = codec->spec;
3630 struct hda_input_mux *imux = &spec->input_mux;
3633 for (i = 0; i < imux->num_items; i++) {
3637 idx = imux->items[i].index;
3638 if (idx >= spec->autocfg.num_inputs)
3640 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3642 for (type = 0; type < 2; type++) {
3643 err = add_single_cap_ctl(codec,
3644 spec->input_labels[idx],
3645 spec->input_label_idxs[idx],
3647 get_first_cap_ctl(codec, i, type),
3656 static int create_capture_mixers(struct hda_codec *codec)
3658 struct hda_gen_spec *spec = codec->spec;
3659 struct hda_input_mux *imux = &spec->input_mux;
3660 int i, n, nums, err;
3662 if (spec->dyn_adc_switch)
3665 nums = spec->num_adc_nids;
3667 if (!spec->auto_mic && imux->num_items > 1) {
3668 struct snd_kcontrol_new *knew;
3670 name = nums > 1 ? "Input Source" : "Capture Source";
3671 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3677 for (n = 0; n < nums; n++) {
3679 bool multi_cap_vol = spec->multi_cap_vol;
3680 bool inv_dmic = false;
3684 for (i = 0; i < imux->num_items; i++) {
3685 struct nid_path *path;
3686 path = get_input_path(codec, n, i);
3689 parse_capvol_in_path(codec, path);
3691 vol = path->ctls[NID_PATH_VOL_CTL];
3692 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3694 if (!same_amp_caps(codec, vol,
3695 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3696 multi_cap_vol = true;
3699 sw = path->ctls[NID_PATH_MUTE_CTL];
3700 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3702 if (!same_amp_caps(codec, sw,
3703 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3704 multi_cap_vol = true;
3706 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3711 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3713 else if (!multi_cap_vol && !inv_dmic)
3714 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3716 err = create_multi_cap_vol_ctl(codec);
3725 * add mic boosts if needed
3728 /* check whether the given amp is feasible as a boost volume */
3729 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3734 if (!nid_has_volume(codec, nid, dir) ||
3735 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3736 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3739 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3740 >> AC_AMPCAP_STEP_SIZE_SHIFT;
3746 /* look for a boost amp in a widget close to the pin */
3747 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3748 struct nid_path *path)
3750 unsigned int val = 0;
3754 for (depth = 0; depth < 3; depth++) {
3755 if (depth >= path->depth - 1)
3757 nid = path->path[depth];
3758 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3759 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3761 } else if (check_boost_vol(codec, nid, HDA_INPUT,
3762 path->idx[depth])) {
3763 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3772 static int parse_mic_boost(struct hda_codec *codec)
3774 struct hda_gen_spec *spec = codec->spec;
3775 struct auto_pin_cfg *cfg = &spec->autocfg;
3776 struct hda_input_mux *imux = &spec->input_mux;
3779 if (!spec->num_adc_nids)
3782 for (i = 0; i < imux->num_items; i++) {
3783 struct nid_path *path;
3786 char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3788 idx = imux->items[i].index;
3789 if (idx >= imux->num_items)
3792 /* check only line-in and mic pins */
3793 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3796 path = get_input_path(codec, 0, i);
3800 val = look_for_boost_amp(codec, path);
3804 /* create a boost control */
3805 snprintf(boost_label, sizeof(boost_label),
3806 "%s Boost Volume", spec->input_labels[idx]);
3807 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3808 spec->input_label_idxs[idx], val))
3811 path->ctls[NID_PATH_BOOST_CTL] = val;
3817 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3819 static void parse_digital(struct hda_codec *codec)
3821 struct hda_gen_spec *spec = codec->spec;
3822 struct nid_path *path;
3824 hda_nid_t dig_nid, pin;
3826 /* support multiple SPDIFs; the secondary is set up as a slave */
3828 for (i = 0; i < spec->autocfg.dig_outs; i++) {
3829 pin = spec->autocfg.dig_out_pins[i];
3830 dig_nid = look_for_dac(codec, pin, true);
3833 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3836 print_nid_path(codec, "digout", path);
3837 path->active = true;
3838 path->pin_fixed = true; /* no jack detection */
3839 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3840 set_pin_target(codec, pin, PIN_OUT, false);
3842 spec->multiout.dig_out_nid = dig_nid;
3843 spec->dig_out_type = spec->autocfg.dig_out_type[0];
3845 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3846 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3848 spec->slave_dig_outs[nums - 1] = dig_nid;
3853 if (spec->autocfg.dig_in_pin) {
3854 pin = spec->autocfg.dig_in_pin;
3855 for_each_hda_codec_node(dig_nid, codec) {
3856 unsigned int wcaps = get_wcaps(codec, dig_nid);
3857 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3859 if (!(wcaps & AC_WCAP_DIGITAL))
3861 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3863 print_nid_path(codec, "digin", path);
3864 path->active = true;
3865 path->pin_fixed = true; /* no jack */
3866 spec->dig_in_nid = dig_nid;
3867 spec->digin_path = snd_hda_get_path_idx(codec, path);
3868 set_pin_target(codec, pin, PIN_IN, false);
3877 * input MUX handling
3880 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3882 /* select the given imux item; either unmute exclusively or select the route */
3883 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3886 struct hda_gen_spec *spec = codec->spec;
3887 const struct hda_input_mux *imux;
3888 struct nid_path *old_path, *path;
3890 imux = &spec->input_mux;
3891 if (!imux->num_items)
3894 if (idx >= imux->num_items)
3895 idx = imux->num_items - 1;
3896 if (spec->cur_mux[adc_idx] == idx)
3899 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3902 if (old_path->active)
3903 snd_hda_activate_path(codec, old_path, false, false);
3905 spec->cur_mux[adc_idx] = idx;
3908 update_hp_mic(codec, adc_idx, false);
3910 if (spec->dyn_adc_switch)
3911 dyn_adc_pcm_resetup(codec, idx);
3913 path = get_input_path(codec, adc_idx, idx);
3918 snd_hda_activate_path(codec, path, true, false);
3919 if (spec->cap_sync_hook)
3920 spec->cap_sync_hook(codec, NULL, NULL);
3921 path_power_down_sync(codec, old_path);
3925 /* power up/down widgets in the all paths that match with the given NID
3926 * as terminals (either start- or endpoint)
3928 * returns the last changed NID, or zero if unchanged.
3930 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
3931 int pin_state, int stream_state)
3933 struct hda_gen_spec *spec = codec->spec;
3934 hda_nid_t last, changed = 0;
3935 struct nid_path *path;
3938 for (n = 0; n < spec->paths.used; n++) {
3939 path = snd_array_elem(&spec->paths, n);
3940 if (path->path[0] == nid ||
3941 path->path[path->depth - 1] == nid) {
3942 bool pin_old = path->pin_enabled;
3943 bool stream_old = path->stream_enabled;
3946 path->pin_enabled = pin_state;
3947 if (stream_state >= 0)
3948 path->stream_enabled = stream_state;
3949 if ((!path->pin_fixed && path->pin_enabled != pin_old)
3950 || path->stream_enabled != stream_old) {
3951 last = path_power_update(codec, path, true);
3960 /* power up/down the paths of the given pin according to the jack state;
3961 * power = 0/1 : only power up/down if it matches with the jack state,
3962 * < 0 : force power up/down to follow the jack sate
3964 * returns the last changed NID, or zero if unchanged.
3966 static hda_nid_t set_pin_power_jack(struct hda_codec *codec, hda_nid_t pin,
3971 if (!codec->power_save_node)
3974 on = snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
3975 if (power >= 0 && on != power)
3977 return set_path_power(codec, pin, on, -1);
3980 static void pin_power_callback(struct hda_codec *codec,
3981 struct hda_jack_callback *jack,
3984 if (jack && jack->tbl->nid)
3985 sync_power_state_change(codec,
3986 set_pin_power_jack(codec, jack->tbl->nid, on));
3989 /* callback only doing power up -- called at first */
3990 static void pin_power_up_callback(struct hda_codec *codec,
3991 struct hda_jack_callback *jack)
3993 pin_power_callback(codec, jack, true);
3996 /* callback only doing power down -- called at last */
3997 static void pin_power_down_callback(struct hda_codec *codec,
3998 struct hda_jack_callback *jack)
4000 pin_power_callback(codec, jack, false);
4003 /* set up the power up/down callbacks */
4004 static void add_pin_power_ctls(struct hda_codec *codec, int num_pins,
4005 const hda_nid_t *pins, bool on)
4008 hda_jack_callback_fn cb =
4009 on ? pin_power_up_callback : pin_power_down_callback;
4011 for (i = 0; i < num_pins && pins[i]; i++) {
4012 if (is_jack_detectable(codec, pins[i]))
4013 snd_hda_jack_detect_enable_callback(codec, pins[i], cb);
4015 set_path_power(codec, pins[i], true, -1);
4019 /* enabled power callback to each available I/O pin with jack detections;
4020 * the digital I/O pins are excluded because of the unreliable detectsion
4022 static void add_all_pin_power_ctls(struct hda_codec *codec, bool on)
4024 struct hda_gen_spec *spec = codec->spec;
4025 struct auto_pin_cfg *cfg = &spec->autocfg;
4028 if (!codec->power_save_node)
4030 add_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins, on);
4031 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4032 add_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins, on);
4033 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4034 add_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins, on);
4035 for (i = 0; i < cfg->num_inputs; i++)
4036 add_pin_power_ctls(codec, 1, &cfg->inputs[i].pin, on);
4039 /* sync path power up/down with the jack states of given pins */
4040 static void sync_pin_power_ctls(struct hda_codec *codec, int num_pins,
4041 const hda_nid_t *pins)
4045 for (i = 0; i < num_pins && pins[i]; i++)
4046 if (is_jack_detectable(codec, pins[i]))
4047 set_pin_power_jack(codec, pins[i], -1);
4050 /* sync path power up/down with pins; called at init and resume */
4051 static void sync_all_pin_power_ctls(struct hda_codec *codec)
4053 struct hda_gen_spec *spec = codec->spec;
4054 struct auto_pin_cfg *cfg = &spec->autocfg;
4057 if (!codec->power_save_node)
4059 sync_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins);
4060 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4061 sync_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins);
4062 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4063 sync_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins);
4064 for (i = 0; i < cfg->num_inputs; i++)
4065 sync_pin_power_ctls(codec, 1, &cfg->inputs[i].pin);
4068 /* add fake paths if not present yet */
4069 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid,
4070 int num_pins, const hda_nid_t *pins)
4072 struct hda_gen_spec *spec = codec->spec;
4073 struct nid_path *path;
4076 for (i = 0; i < num_pins; i++) {
4079 if (get_nid_path(codec, nid, pins[i], 0))
4081 path = snd_array_new(&spec->paths);
4084 memset(path, 0, sizeof(*path));
4086 path->path[0] = nid;
4087 path->path[1] = pins[i];
4088 path->active = true;
4093 /* create fake paths to all outputs from beep */
4094 static int add_fake_beep_paths(struct hda_codec *codec)
4096 struct hda_gen_spec *spec = codec->spec;
4097 struct auto_pin_cfg *cfg = &spec->autocfg;
4098 hda_nid_t nid = spec->beep_nid;
4101 if (!codec->power_save_node || !nid)
4103 err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins);
4106 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4107 err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins);
4111 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4112 err = add_fake_paths(codec, nid, cfg->speaker_outs,
4120 /* power up/down beep widget and its output paths */
4121 static void beep_power_hook(struct hda_beep *beep, bool on)
4123 set_path_power(beep->codec, beep->nid, -1, on);
4127 * snd_hda_gen_fix_pin_power - Fix the power of the given pin widget to D0
4128 * @codec: the HDA codec
4129 * @pin: NID of pin to fix
4131 int snd_hda_gen_fix_pin_power(struct hda_codec *codec, hda_nid_t pin)
4133 struct hda_gen_spec *spec = codec->spec;
4134 struct nid_path *path;
4136 path = snd_array_new(&spec->paths);
4139 memset(path, 0, sizeof(*path));
4141 path->path[0] = pin;
4142 path->active = true;
4143 path->pin_fixed = true;
4144 path->stream_enabled = true;
4147 EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power);
4150 * Jack detections for HP auto-mute and mic-switch
4153 /* check each pin in the given array; returns true if any of them is plugged */
4154 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
4157 bool present = false;
4159 for (i = 0; i < num_pins; i++) {
4160 hda_nid_t nid = pins[i];
4163 /* don't detect pins retasked as inputs */
4164 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
4166 if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
4172 /* standard HP/line-out auto-mute helper */
4173 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
4174 int *paths, bool mute)
4176 struct hda_gen_spec *spec = codec->spec;
4179 for (i = 0; i < num_pins; i++) {
4180 hda_nid_t nid = pins[i];
4181 unsigned int val, oldval;
4185 oldval = snd_hda_codec_get_pin_target(codec, nid);
4186 if (oldval & PIN_IN)
4187 continue; /* no mute for inputs */
4189 if (spec->auto_mute_via_amp) {
4190 struct nid_path *path;
4193 path = snd_hda_get_path_from_idx(codec, paths[i]);
4196 mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
4200 spec->mute_bits |= (1ULL << mute_nid);
4202 spec->mute_bits &= ~(1ULL << mute_nid);
4205 /* don't reset VREF value in case it's controlling
4206 * the amp (see alc861_fixup_asus_amp_vref_0f())
4208 if (spec->keep_vref_in_automute)
4209 val = oldval & ~PIN_HP;
4214 /* here we call update_pin_ctl() so that the pinctl is
4215 * changed without changing the pinctl target value;
4216 * the original target value will be still referred at
4217 * the init / resume again
4219 update_pin_ctl(codec, nid, val);
4222 set_pin_eapd(codec, nid, !mute);
4223 if (codec->power_save_node) {
4226 on = snd_hda_jack_detect_state(codec, nid)
4227 != HDA_JACK_NOT_PRESENT;
4228 set_path_power(codec, nid, on, -1);
4234 * snd_hda_gen_update_outputs - Toggle outputs muting
4235 * @codec: the HDA codec
4237 * Update the mute status of all outputs based on the current jack states.
4239 void snd_hda_gen_update_outputs(struct hda_codec *codec)
4241 struct hda_gen_spec *spec = codec->spec;
4245 /* Control HP pins/amps depending on master_mute state;
4246 * in general, HP pins/amps control should be enabled in all cases,
4247 * but currently set only for master_mute, just to be safe
4249 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4250 paths = spec->out_paths;
4252 paths = spec->hp_paths;
4253 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4254 spec->autocfg.hp_pins, paths, spec->master_mute);
4256 if (!spec->automute_speaker)
4259 on = spec->hp_jack_present | spec->line_jack_present;
4260 on |= spec->master_mute;
4261 spec->speaker_muted = on;
4262 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4263 paths = spec->out_paths;
4265 paths = spec->speaker_paths;
4266 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4267 spec->autocfg.speaker_pins, paths, on);
4269 /* toggle line-out mutes if needed, too */
4270 /* if LO is a copy of either HP or Speaker, don't need to handle it */
4271 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4272 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4274 if (!spec->automute_lo)
4277 on = spec->hp_jack_present;
4278 on |= spec->master_mute;
4279 spec->line_out_muted = on;
4280 paths = spec->out_paths;
4281 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4282 spec->autocfg.line_out_pins, paths, on);
4284 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs);
4286 static void call_update_outputs(struct hda_codec *codec)
4288 struct hda_gen_spec *spec = codec->spec;
4289 if (spec->automute_hook)
4290 spec->automute_hook(codec);
4292 snd_hda_gen_update_outputs(codec);
4294 /* sync the whole vmaster slaves to reflect the new auto-mute status */
4295 if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4296 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4300 * snd_hda_gen_hp_automute - standard HP-automute helper
4301 * @codec: the HDA codec
4302 * @jack: jack object, NULL for the whole
4304 void snd_hda_gen_hp_automute(struct hda_codec *codec,
4305 struct hda_jack_callback *jack)
4307 struct hda_gen_spec *spec = codec->spec;
4308 hda_nid_t *pins = spec->autocfg.hp_pins;
4309 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4311 /* No detection for the first HP jack during indep-HP mode */
4312 if (spec->indep_hp_enabled) {
4317 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4318 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4320 call_update_outputs(codec);
4322 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute);
4325 * snd_hda_gen_line_automute - standard line-out-automute helper
4326 * @codec: the HDA codec
4327 * @jack: jack object, NULL for the whole
4329 void snd_hda_gen_line_automute(struct hda_codec *codec,
4330 struct hda_jack_callback *jack)
4332 struct hda_gen_spec *spec = codec->spec;
4334 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4336 /* check LO jack only when it's different from HP */
4337 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4340 spec->line_jack_present =
4341 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4342 spec->autocfg.line_out_pins);
4343 if (!spec->automute_speaker || !spec->detect_lo)
4345 call_update_outputs(codec);
4347 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute);
4350 * snd_hda_gen_mic_autoswitch - standard mic auto-switch helper
4351 * @codec: the HDA codec
4352 * @jack: jack object, NULL for the whole
4354 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
4355 struct hda_jack_callback *jack)
4357 struct hda_gen_spec *spec = codec->spec;
4360 if (!spec->auto_mic)
4363 for (i = spec->am_num_entries - 1; i > 0; i--) {
4364 hda_nid_t pin = spec->am_entry[i].pin;
4365 /* don't detect pins retasked as outputs */
4366 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
4368 if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
4369 mux_select(codec, 0, spec->am_entry[i].idx);
4373 mux_select(codec, 0, spec->am_entry[0].idx);
4375 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch);
4377 /* call appropriate hooks */
4378 static void call_hp_automute(struct hda_codec *codec,
4379 struct hda_jack_callback *jack)
4381 struct hda_gen_spec *spec = codec->spec;
4382 if (spec->hp_automute_hook)
4383 spec->hp_automute_hook(codec, jack);
4385 snd_hda_gen_hp_automute(codec, jack);
4388 static void call_line_automute(struct hda_codec *codec,
4389 struct hda_jack_callback *jack)
4391 struct hda_gen_spec *spec = codec->spec;
4392 if (spec->line_automute_hook)
4393 spec->line_automute_hook(codec, jack);
4395 snd_hda_gen_line_automute(codec, jack);
4398 static void call_mic_autoswitch(struct hda_codec *codec,
4399 struct hda_jack_callback *jack)
4401 struct hda_gen_spec *spec = codec->spec;
4402 if (spec->mic_autoswitch_hook)
4403 spec->mic_autoswitch_hook(codec, jack);
4405 snd_hda_gen_mic_autoswitch(codec, jack);
4408 /* update jack retasking */
4409 static void update_automute_all(struct hda_codec *codec)
4411 call_hp_automute(codec, NULL);
4412 call_line_automute(codec, NULL);
4413 call_mic_autoswitch(codec, NULL);
4417 * Auto-Mute mode mixer enum support
4419 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4420 struct snd_ctl_elem_info *uinfo)
4422 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4423 struct hda_gen_spec *spec = codec->spec;
4424 static const char * const texts3[] = {
4425 "Disabled", "Speaker Only", "Line Out+Speaker"
4428 if (spec->automute_speaker_possible && spec->automute_lo_possible)
4429 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4430 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4433 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4434 struct snd_ctl_elem_value *ucontrol)
4436 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4437 struct hda_gen_spec *spec = codec->spec;
4438 unsigned int val = 0;
4439 if (spec->automute_speaker)
4441 if (spec->automute_lo)
4444 ucontrol->value.enumerated.item[0] = val;
4448 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4449 struct snd_ctl_elem_value *ucontrol)
4451 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4452 struct hda_gen_spec *spec = codec->spec;
4454 switch (ucontrol->value.enumerated.item[0]) {
4456 if (!spec->automute_speaker && !spec->automute_lo)
4458 spec->automute_speaker = 0;
4459 spec->automute_lo = 0;
4462 if (spec->automute_speaker_possible) {
4463 if (!spec->automute_lo && spec->automute_speaker)
4465 spec->automute_speaker = 1;
4466 spec->automute_lo = 0;
4467 } else if (spec->automute_lo_possible) {
4468 if (spec->automute_lo)
4470 spec->automute_lo = 1;
4475 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4477 if (spec->automute_speaker && spec->automute_lo)
4479 spec->automute_speaker = 1;
4480 spec->automute_lo = 1;
4485 call_update_outputs(codec);
4489 static const struct snd_kcontrol_new automute_mode_enum = {
4490 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4491 .name = "Auto-Mute Mode",
4492 .info = automute_mode_info,
4493 .get = automute_mode_get,
4494 .put = automute_mode_put,
4497 static int add_automute_mode_enum(struct hda_codec *codec)
4499 struct hda_gen_spec *spec = codec->spec;
4501 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4507 * Check the availability of HP/line-out auto-mute;
4508 * Set up appropriately if really supported
4510 static int check_auto_mute_availability(struct hda_codec *codec)
4512 struct hda_gen_spec *spec = codec->spec;
4513 struct auto_pin_cfg *cfg = &spec->autocfg;
4517 if (spec->suppress_auto_mute)
4520 if (cfg->hp_pins[0])
4522 if (cfg->line_out_pins[0])
4524 if (cfg->speaker_pins[0])
4526 if (present < 2) /* need two different output types */
4529 if (!cfg->speaker_pins[0] &&
4530 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4531 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4532 sizeof(cfg->speaker_pins));
4533 cfg->speaker_outs = cfg->line_outs;
4536 if (!cfg->hp_pins[0] &&
4537 cfg->line_out_type == AUTO_PIN_HP_OUT) {
4538 memcpy(cfg->hp_pins, cfg->line_out_pins,
4539 sizeof(cfg->hp_pins));
4540 cfg->hp_outs = cfg->line_outs;
4543 for (i = 0; i < cfg->hp_outs; i++) {
4544 hda_nid_t nid = cfg->hp_pins[i];
4545 if (!is_jack_detectable(codec, nid))
4547 codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid);
4548 snd_hda_jack_detect_enable_callback(codec, nid,
4550 spec->detect_hp = 1;
4553 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4554 if (cfg->speaker_outs)
4555 for (i = 0; i < cfg->line_outs; i++) {
4556 hda_nid_t nid = cfg->line_out_pins[i];
4557 if (!is_jack_detectable(codec, nid))
4559 codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid);
4560 snd_hda_jack_detect_enable_callback(codec, nid,
4561 call_line_automute);
4562 spec->detect_lo = 1;
4564 spec->automute_lo_possible = spec->detect_hp;
4567 spec->automute_speaker_possible = cfg->speaker_outs &&
4568 (spec->detect_hp || spec->detect_lo);
4570 spec->automute_lo = spec->automute_lo_possible;
4571 spec->automute_speaker = spec->automute_speaker_possible;
4573 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4574 /* create a control for automute mode */
4575 err = add_automute_mode_enum(codec);
4582 /* check whether all auto-mic pins are valid; setup indices if OK */
4583 static bool auto_mic_check_imux(struct hda_codec *codec)
4585 struct hda_gen_spec *spec = codec->spec;
4586 const struct hda_input_mux *imux;
4589 imux = &spec->input_mux;
4590 for (i = 0; i < spec->am_num_entries; i++) {
4591 spec->am_entry[i].idx =
4592 find_idx_in_nid_list(spec->am_entry[i].pin,
4593 spec->imux_pins, imux->num_items);
4594 if (spec->am_entry[i].idx < 0)
4595 return false; /* no corresponding imux */
4598 /* we don't need the jack detection for the first pin */
4599 for (i = 1; i < spec->am_num_entries; i++)
4600 snd_hda_jack_detect_enable_callback(codec,
4601 spec->am_entry[i].pin,
4602 call_mic_autoswitch);
4606 static int compare_attr(const void *ap, const void *bp)
4608 const struct automic_entry *a = ap;
4609 const struct automic_entry *b = bp;
4610 return (int)(a->attr - b->attr);
4614 * Check the availability of auto-mic switch;
4615 * Set up if really supported
4617 static int check_auto_mic_availability(struct hda_codec *codec)
4619 struct hda_gen_spec *spec = codec->spec;
4620 struct auto_pin_cfg *cfg = &spec->autocfg;
4624 if (spec->suppress_auto_mic)
4629 for (i = 0; i < cfg->num_inputs; i++) {
4630 hda_nid_t nid = cfg->inputs[i].pin;
4632 attr = snd_hda_codec_get_pincfg(codec, nid);
4633 attr = snd_hda_get_input_pin_attr(attr);
4634 if (types & (1 << attr))
4635 return 0; /* already occupied */
4637 case INPUT_PIN_ATTR_INT:
4638 if (cfg->inputs[i].type != AUTO_PIN_MIC)
4639 return 0; /* invalid type */
4641 case INPUT_PIN_ATTR_UNUSED:
4642 return 0; /* invalid entry */
4644 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4645 return 0; /* invalid type */
4646 if (!spec->line_in_auto_switch &&
4647 cfg->inputs[i].type != AUTO_PIN_MIC)
4648 return 0; /* only mic is allowed */
4649 if (!is_jack_detectable(codec, nid))
4650 return 0; /* no unsol support */
4653 if (num_pins >= MAX_AUTO_MIC_PINS)
4655 types |= (1 << attr);
4656 spec->am_entry[num_pins].pin = nid;
4657 spec->am_entry[num_pins].attr = attr;
4664 spec->am_num_entries = num_pins;
4665 /* sort the am_entry in the order of attr so that the pin with a
4666 * higher attr will be selected when the jack is plugged.
4668 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4669 compare_attr, NULL);
4671 if (!auto_mic_check_imux(codec))
4675 spec->num_adc_nids = 1;
4676 spec->cur_mux[0] = spec->am_entry[0].idx;
4677 codec_dbg(codec, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4678 spec->am_entry[0].pin,
4679 spec->am_entry[1].pin,
4680 spec->am_entry[2].pin);
4686 * snd_hda_gen_path_power_filter - power_filter hook to make inactive widgets
4688 * @codec: the HDA codec
4689 * @nid: NID to evalute
4690 * @power_state: target power state
4692 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4694 unsigned int power_state)
4696 if (power_state != AC_PWRST_D0 || nid == codec->core.afg)
4698 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4700 if (is_active_nid_for_any(codec, nid))
4704 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter);
4706 /* mute all aamix inputs initially; parse up to the first leaves */
4707 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4710 const hda_nid_t *conn;
4713 nums = snd_hda_get_conn_list(codec, mix, &conn);
4714 has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4715 for (i = 0; i < nums; i++) {
4717 update_amp(codec, mix, HDA_INPUT, i,
4718 0xff, HDA_AMP_MUTE);
4719 else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4720 update_amp(codec, conn[i], HDA_OUTPUT, 0,
4721 0xff, HDA_AMP_MUTE);
4726 * snd_hda_gen_stream_pm - Stream power management callback
4727 * @codec: the HDA codec
4728 * @nid: audio widget
4729 * @on: power on/off flag
4731 * Set this in patch_ops.stream_pm. Only valid with power_save_node flag.
4733 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on)
4735 if (codec->power_save_node)
4736 set_path_power(codec, nid, -1, on);
4738 EXPORT_SYMBOL_GPL(snd_hda_gen_stream_pm);
4741 * snd_hda_gen_parse_auto_config - Parse the given BIOS configuration and
4742 * set up the hda_gen_spec
4743 * @codec: the HDA codec
4744 * @cfg: Parsed pin configuration
4746 * return 1 if successful, 0 if the proper config is not found,
4747 * or a negative error code
4749 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4750 struct auto_pin_cfg *cfg)
4752 struct hda_gen_spec *spec = codec->spec;
4755 parse_user_hints(codec);
4757 if (spec->mixer_nid && !spec->mixer_merge_nid)
4758 spec->mixer_merge_nid = spec->mixer_nid;
4760 if (cfg != &spec->autocfg) {
4761 spec->autocfg = *cfg;
4762 cfg = &spec->autocfg;
4765 if (!spec->main_out_badness)
4766 spec->main_out_badness = &hda_main_out_badness;
4767 if (!spec->extra_out_badness)
4768 spec->extra_out_badness = &hda_extra_out_badness;
4770 fill_all_dac_nids(codec);
4772 if (!cfg->line_outs) {
4773 if (cfg->dig_outs || cfg->dig_in_pin) {
4774 spec->multiout.max_channels = 2;
4775 spec->no_analog = 1;
4778 if (!cfg->num_inputs && !cfg->dig_in_pin)
4779 return 0; /* can't find valid BIOS pin config */
4782 if (!spec->no_primary_hp &&
4783 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4784 cfg->line_outs <= cfg->hp_outs) {
4785 /* use HP as primary out */
4786 cfg->speaker_outs = cfg->line_outs;
4787 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4788 sizeof(cfg->speaker_pins));
4789 cfg->line_outs = cfg->hp_outs;
4790 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4792 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4793 cfg->line_out_type = AUTO_PIN_HP_OUT;
4796 err = parse_output_paths(codec);
4799 err = create_multi_channel_mode(codec);
4802 err = create_multi_out_ctls(codec, cfg);
4805 err = create_hp_out_ctls(codec);
4808 err = create_speaker_out_ctls(codec);
4811 err = create_indep_hp_ctls(codec);
4814 err = create_loopback_mixing_ctl(codec);
4817 err = create_hp_mic(codec);
4820 err = create_input_ctls(codec);
4824 /* add power-down pin callbacks at first */
4825 add_all_pin_power_ctls(codec, false);
4827 spec->const_channel_count = spec->ext_channel_count;
4828 /* check the multiple speaker and headphone pins */
4829 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4830 spec->const_channel_count = max(spec->const_channel_count,
4831 cfg->speaker_outs * 2);
4832 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4833 spec->const_channel_count = max(spec->const_channel_count,
4835 spec->multiout.max_channels = max(spec->ext_channel_count,
4836 spec->const_channel_count);
4838 err = check_auto_mute_availability(codec);
4842 err = check_dyn_adc_switch(codec);
4846 err = check_auto_mic_availability(codec);
4850 /* add stereo mix if available and not enabled yet */
4851 if (!spec->auto_mic && spec->mixer_nid &&
4852 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
4853 spec->input_mux.num_items > 1) {
4854 err = parse_capture_source(codec, spec->mixer_nid,
4855 CFG_IDX_MIX, spec->num_all_adcs,
4862 err = create_capture_mixers(codec);
4866 err = parse_mic_boost(codec);
4870 /* create "Headphone Mic Jack Mode" if no input selection is
4871 * available (or user specifies add_jack_modes hint)
4873 if (spec->hp_mic_pin &&
4874 (spec->auto_mic || spec->input_mux.num_items == 1 ||
4875 spec->add_jack_modes)) {
4876 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
4881 if (spec->add_jack_modes) {
4882 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4883 err = create_out_jack_modes(codec, cfg->line_outs,
4884 cfg->line_out_pins);
4888 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4889 err = create_out_jack_modes(codec, cfg->hp_outs,
4896 /* add power-up pin callbacks at last */
4897 add_all_pin_power_ctls(codec, true);
4899 /* mute all aamix input initially */
4900 if (spec->mixer_nid)
4901 mute_all_mixer_nid(codec, spec->mixer_nid);
4904 parse_digital(codec);
4906 if (spec->power_down_unused || codec->power_save_node)
4907 codec->power_filter = snd_hda_gen_path_power_filter;
4909 if (!spec->no_analog && spec->beep_nid) {
4910 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4913 if (codec->beep && codec->power_save_node) {
4914 err = add_fake_beep_paths(codec);
4917 codec->beep->power_hook = beep_power_hook;
4923 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config);
4927 * Build control elements
4930 /* slave controls for virtual master */
4931 static const char * const slave_pfxs[] = {
4932 "Front", "Surround", "Center", "LFE", "Side",
4933 "Headphone", "Speaker", "Mono", "Line Out",
4934 "CLFE", "Bass Speaker", "PCM",
4935 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4936 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4937 "Headphone Side", "Headphone+LO", "Speaker+LO",
4942 * snd_hda_gen_build_controls - Build controls from the parsed results
4943 * @codec: the HDA codec
4945 * Pass this to build_controls patch_ops.
4947 int snd_hda_gen_build_controls(struct hda_codec *codec)
4949 struct hda_gen_spec *spec = codec->spec;
4952 if (spec->kctls.used) {
4953 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4958 if (spec->multiout.dig_out_nid) {
4959 err = snd_hda_create_dig_out_ctls(codec,
4960 spec->multiout.dig_out_nid,
4961 spec->multiout.dig_out_nid,
4962 spec->pcm_rec[1]->pcm_type);
4965 if (!spec->no_analog) {
4966 err = snd_hda_create_spdif_share_sw(codec,
4970 spec->multiout.share_spdif = 1;
4973 if (spec->dig_in_nid) {
4974 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4979 /* if we have no master control, let's create it */
4980 if (!spec->no_analog &&
4981 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4982 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4983 spec->vmaster_tlv, slave_pfxs,
4988 if (!spec->no_analog &&
4989 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4990 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4993 true, &spec->vmaster_mute.sw_kctl);
4996 if (spec->vmaster_mute.hook) {
4997 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4998 spec->vmaster_mute_enum);
4999 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5003 free_kctls(spec); /* no longer needed */
5005 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5011 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls);
5018 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
5019 struct hda_codec *codec,
5020 struct snd_pcm_substream *substream,
5023 struct hda_gen_spec *spec = codec->spec;
5024 if (spec->pcm_playback_hook)
5025 spec->pcm_playback_hook(hinfo, codec, substream, action);
5028 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
5029 struct hda_codec *codec,
5030 struct snd_pcm_substream *substream,
5033 struct hda_gen_spec *spec = codec->spec;
5034 if (spec->pcm_capture_hook)
5035 spec->pcm_capture_hook(hinfo, codec, substream, action);
5039 * Analog playback callbacks
5041 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
5042 struct hda_codec *codec,
5043 struct snd_pcm_substream *substream)
5045 struct hda_gen_spec *spec = codec->spec;
5048 mutex_lock(&spec->pcm_mutex);
5049 err = snd_hda_multi_out_analog_open(codec,
5050 &spec->multiout, substream,
5053 spec->active_streams |= 1 << STREAM_MULTI_OUT;
5054 call_pcm_playback_hook(hinfo, codec, substream,
5055 HDA_GEN_PCM_ACT_OPEN);
5057 mutex_unlock(&spec->pcm_mutex);
5061 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5062 struct hda_codec *codec,
5063 unsigned int stream_tag,
5064 unsigned int format,
5065 struct snd_pcm_substream *substream)
5067 struct hda_gen_spec *spec = codec->spec;
5070 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5071 stream_tag, format, substream);
5073 call_pcm_playback_hook(hinfo, codec, substream,
5074 HDA_GEN_PCM_ACT_PREPARE);
5078 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5079 struct hda_codec *codec,
5080 struct snd_pcm_substream *substream)
5082 struct hda_gen_spec *spec = codec->spec;
5085 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5087 call_pcm_playback_hook(hinfo, codec, substream,
5088 HDA_GEN_PCM_ACT_CLEANUP);
5092 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
5093 struct hda_codec *codec,
5094 struct snd_pcm_substream *substream)
5096 struct hda_gen_spec *spec = codec->spec;
5097 mutex_lock(&spec->pcm_mutex);
5098 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5099 call_pcm_playback_hook(hinfo, codec, substream,
5100 HDA_GEN_PCM_ACT_CLOSE);
5101 mutex_unlock(&spec->pcm_mutex);
5105 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
5106 struct hda_codec *codec,
5107 struct snd_pcm_substream *substream)
5109 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
5113 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5114 struct hda_codec *codec,
5115 unsigned int stream_tag,
5116 unsigned int format,
5117 struct snd_pcm_substream *substream)
5119 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5120 call_pcm_capture_hook(hinfo, codec, substream,
5121 HDA_GEN_PCM_ACT_PREPARE);
5125 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5126 struct hda_codec *codec,
5127 struct snd_pcm_substream *substream)
5129 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5130 call_pcm_capture_hook(hinfo, codec, substream,
5131 HDA_GEN_PCM_ACT_CLEANUP);
5135 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
5136 struct hda_codec *codec,
5137 struct snd_pcm_substream *substream)
5139 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
5143 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
5144 struct hda_codec *codec,
5145 struct snd_pcm_substream *substream)
5147 struct hda_gen_spec *spec = codec->spec;
5150 mutex_lock(&spec->pcm_mutex);
5151 if (!spec->indep_hp_enabled)
5154 spec->active_streams |= 1 << STREAM_INDEP_HP;
5155 call_pcm_playback_hook(hinfo, codec, substream,
5156 HDA_GEN_PCM_ACT_OPEN);
5157 mutex_unlock(&spec->pcm_mutex);
5161 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
5162 struct hda_codec *codec,
5163 struct snd_pcm_substream *substream)
5165 struct hda_gen_spec *spec = codec->spec;
5166 mutex_lock(&spec->pcm_mutex);
5167 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5168 call_pcm_playback_hook(hinfo, codec, substream,
5169 HDA_GEN_PCM_ACT_CLOSE);
5170 mutex_unlock(&spec->pcm_mutex);
5174 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5175 struct hda_codec *codec,
5176 unsigned int stream_tag,
5177 unsigned int format,
5178 struct snd_pcm_substream *substream)
5180 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5181 call_pcm_playback_hook(hinfo, codec, substream,
5182 HDA_GEN_PCM_ACT_PREPARE);
5186 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5187 struct hda_codec *codec,
5188 struct snd_pcm_substream *substream)
5190 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5191 call_pcm_playback_hook(hinfo, codec, substream,
5192 HDA_GEN_PCM_ACT_CLEANUP);
5199 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
5200 struct hda_codec *codec,
5201 struct snd_pcm_substream *substream)
5203 struct hda_gen_spec *spec = codec->spec;
5204 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5207 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5208 struct hda_codec *codec,
5209 unsigned int stream_tag,
5210 unsigned int format,
5211 struct snd_pcm_substream *substream)
5213 struct hda_gen_spec *spec = codec->spec;
5214 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5215 stream_tag, format, substream);
5218 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5219 struct hda_codec *codec,
5220 struct snd_pcm_substream *substream)
5222 struct hda_gen_spec *spec = codec->spec;
5223 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5226 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
5227 struct hda_codec *codec,
5228 struct snd_pcm_substream *substream)
5230 struct hda_gen_spec *spec = codec->spec;
5231 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5237 #define alt_capture_pcm_open capture_pcm_open
5238 #define alt_capture_pcm_close capture_pcm_close
5240 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5241 struct hda_codec *codec,
5242 unsigned int stream_tag,
5243 unsigned int format,
5244 struct snd_pcm_substream *substream)
5246 struct hda_gen_spec *spec = codec->spec;
5248 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5249 stream_tag, 0, format);
5250 call_pcm_capture_hook(hinfo, codec, substream,
5251 HDA_GEN_PCM_ACT_PREPARE);
5255 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5256 struct hda_codec *codec,
5257 struct snd_pcm_substream *substream)
5259 struct hda_gen_spec *spec = codec->spec;
5261 snd_hda_codec_cleanup_stream(codec,
5262 spec->adc_nids[substream->number + 1]);
5263 call_pcm_capture_hook(hinfo, codec, substream,
5264 HDA_GEN_PCM_ACT_CLEANUP);
5270 static const struct hda_pcm_stream pcm_analog_playback = {
5274 /* NID is set in build_pcms */
5276 .open = playback_pcm_open,
5277 .close = playback_pcm_close,
5278 .prepare = playback_pcm_prepare,
5279 .cleanup = playback_pcm_cleanup
5283 static const struct hda_pcm_stream pcm_analog_capture = {
5287 /* NID is set in build_pcms */
5289 .open = capture_pcm_open,
5290 .close = capture_pcm_close,
5291 .prepare = capture_pcm_prepare,
5292 .cleanup = capture_pcm_cleanup
5296 static const struct hda_pcm_stream pcm_analog_alt_playback = {
5300 /* NID is set in build_pcms */
5302 .open = alt_playback_pcm_open,
5303 .close = alt_playback_pcm_close,
5304 .prepare = alt_playback_pcm_prepare,
5305 .cleanup = alt_playback_pcm_cleanup
5309 static const struct hda_pcm_stream pcm_analog_alt_capture = {
5310 .substreams = 2, /* can be overridden */
5313 /* NID is set in build_pcms */
5315 .open = alt_capture_pcm_open,
5316 .close = alt_capture_pcm_close,
5317 .prepare = alt_capture_pcm_prepare,
5318 .cleanup = alt_capture_pcm_cleanup
5322 static const struct hda_pcm_stream pcm_digital_playback = {
5326 /* NID is set in build_pcms */
5328 .open = dig_playback_pcm_open,
5329 .close = dig_playback_pcm_close,
5330 .prepare = dig_playback_pcm_prepare,
5331 .cleanup = dig_playback_pcm_cleanup
5335 static const struct hda_pcm_stream pcm_digital_capture = {
5339 /* NID is set in build_pcms */
5342 /* Used by build_pcms to flag that a PCM has no playback stream */
5343 static const struct hda_pcm_stream pcm_null_stream = {
5350 * dynamic changing ADC PCM streams
5352 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
5354 struct hda_gen_spec *spec = codec->spec;
5355 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5357 if (spec->cur_adc && spec->cur_adc != new_adc) {
5358 /* stream is running, let's swap the current ADC */
5359 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5360 spec->cur_adc = new_adc;
5361 snd_hda_codec_setup_stream(codec, new_adc,
5362 spec->cur_adc_stream_tag, 0,
5363 spec->cur_adc_format);
5369 /* analog capture with dynamic dual-adc changes */
5370 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5371 struct hda_codec *codec,
5372 unsigned int stream_tag,
5373 unsigned int format,
5374 struct snd_pcm_substream *substream)
5376 struct hda_gen_spec *spec = codec->spec;
5377 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5378 spec->cur_adc_stream_tag = stream_tag;
5379 spec->cur_adc_format = format;
5380 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5384 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5385 struct hda_codec *codec,
5386 struct snd_pcm_substream *substream)
5388 struct hda_gen_spec *spec = codec->spec;
5389 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5394 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
5398 .nid = 0, /* fill later */
5400 .prepare = dyn_adc_capture_pcm_prepare,
5401 .cleanup = dyn_adc_capture_pcm_cleanup
5405 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
5406 const char *chip_name)
5412 strlcpy(str, chip_name, len);
5414 /* drop non-alnum chars after a space */
5415 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5416 if (!isalnum(p[1])) {
5421 strlcat(str, sfx, len);
5424 /* copy PCM stream info from @default_str, and override non-NULL entries
5425 * from @spec_str and @nid
5427 static void setup_pcm_stream(struct hda_pcm_stream *str,
5428 const struct hda_pcm_stream *default_str,
5429 const struct hda_pcm_stream *spec_str,
5432 *str = *default_str;
5436 if (spec_str->substreams)
5437 str->substreams = spec_str->substreams;
5438 if (spec_str->channels_min)
5439 str->channels_min = spec_str->channels_min;
5440 if (spec_str->channels_max)
5441 str->channels_max = spec_str->channels_max;
5442 if (spec_str->rates)
5443 str->rates = spec_str->rates;
5444 if (spec_str->formats)
5445 str->formats = spec_str->formats;
5446 if (spec_str->maxbps)
5447 str->maxbps = spec_str->maxbps;
5452 * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5453 * @codec: the HDA codec
5455 * Pass this to build_pcms patch_ops.
5457 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5459 struct hda_gen_spec *spec = codec->spec;
5460 struct hda_pcm *info;
5461 bool have_multi_adcs;
5463 if (spec->no_analog)
5466 fill_pcm_stream_name(spec->stream_name_analog,
5467 sizeof(spec->stream_name_analog),
5468 " Analog", codec->core.chip_name);
5469 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5472 spec->pcm_rec[0] = info;
5474 if (spec->multiout.num_dacs > 0) {
5475 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5476 &pcm_analog_playback,
5477 spec->stream_analog_playback,
5478 spec->multiout.dac_nids[0]);
5479 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5480 spec->multiout.max_channels;
5481 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5482 spec->autocfg.line_outs == 2)
5483 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5486 if (spec->num_adc_nids) {
5487 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5488 (spec->dyn_adc_switch ?
5489 &dyn_adc_pcm_analog_capture : &pcm_analog_capture),
5490 spec->stream_analog_capture,
5495 /* SPDIF for stream index #1 */
5496 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5497 fill_pcm_stream_name(spec->stream_name_digital,
5498 sizeof(spec->stream_name_digital),
5499 " Digital", codec->core.chip_name);
5500 info = snd_hda_codec_pcm_new(codec, "%s",
5501 spec->stream_name_digital);
5504 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5505 spec->pcm_rec[1] = info;
5506 if (spec->dig_out_type)
5507 info->pcm_type = spec->dig_out_type;
5509 info->pcm_type = HDA_PCM_TYPE_SPDIF;
5510 if (spec->multiout.dig_out_nid)
5511 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5512 &pcm_digital_playback,
5513 spec->stream_digital_playback,
5514 spec->multiout.dig_out_nid);
5515 if (spec->dig_in_nid)
5516 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5517 &pcm_digital_capture,
5518 spec->stream_digital_capture,
5522 if (spec->no_analog)
5525 /* If the use of more than one ADC is requested for the current
5526 * model, configure a second analog capture-only PCM.
5528 have_multi_adcs = (spec->num_adc_nids > 1) &&
5529 !spec->dyn_adc_switch && !spec->auto_mic;
5530 /* Additional Analaog capture for index #2 */
5531 if (spec->alt_dac_nid || have_multi_adcs) {
5532 fill_pcm_stream_name(spec->stream_name_alt_analog,
5533 sizeof(spec->stream_name_alt_analog),
5534 " Alt Analog", codec->core.chip_name);
5535 info = snd_hda_codec_pcm_new(codec, "%s",
5536 spec->stream_name_alt_analog);
5539 spec->pcm_rec[2] = info;
5540 if (spec->alt_dac_nid)
5541 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5542 &pcm_analog_alt_playback,
5543 spec->stream_analog_alt_playback,
5546 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5547 &pcm_null_stream, NULL, 0);
5548 if (have_multi_adcs) {
5549 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5550 &pcm_analog_alt_capture,
5551 spec->stream_analog_alt_capture,
5553 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5554 spec->num_adc_nids - 1;
5556 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5557 &pcm_null_stream, NULL, 0);
5563 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5567 * Standard auto-parser initializations
5570 /* configure the given path as a proper output */
5571 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5573 struct nid_path *path;
5576 path = snd_hda_get_path_from_idx(codec, path_idx);
5577 if (!path || !path->depth)
5579 pin = path->path[path->depth - 1];
5580 restore_pin_ctl(codec, pin);
5581 snd_hda_activate_path(codec, path, path->active,
5582 aamix_default(codec->spec));
5583 set_pin_eapd(codec, pin, path->active);
5586 /* initialize primary output paths */
5587 static void init_multi_out(struct hda_codec *codec)
5589 struct hda_gen_spec *spec = codec->spec;
5592 for (i = 0; i < spec->autocfg.line_outs; i++)
5593 set_output_and_unmute(codec, spec->out_paths[i]);
5597 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5601 for (i = 0; i < num_outs; i++)
5602 set_output_and_unmute(codec, paths[i]);
5605 /* initialize hp and speaker paths */
5606 static void init_extra_out(struct hda_codec *codec)
5608 struct hda_gen_spec *spec = codec->spec;
5610 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5611 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5612 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5613 __init_extra_out(codec, spec->autocfg.speaker_outs,
5614 spec->speaker_paths);
5617 /* initialize multi-io paths */
5618 static void init_multi_io(struct hda_codec *codec)
5620 struct hda_gen_spec *spec = codec->spec;
5623 for (i = 0; i < spec->multi_ios; i++) {
5624 hda_nid_t pin = spec->multi_io[i].pin;
5625 struct nid_path *path;
5626 path = get_multiio_path(codec, i);
5629 if (!spec->multi_io[i].ctl_in)
5630 spec->multi_io[i].ctl_in =
5631 snd_hda_codec_get_pin_target(codec, pin);
5632 snd_hda_activate_path(codec, path, path->active,
5633 aamix_default(spec));
5637 static void init_aamix_paths(struct hda_codec *codec)
5639 struct hda_gen_spec *spec = codec->spec;
5641 if (!spec->have_aamix_ctl)
5643 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5644 spec->aamix_out_paths[0],
5645 spec->autocfg.line_out_type);
5646 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5647 spec->aamix_out_paths[1],
5649 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5650 spec->aamix_out_paths[2],
5651 AUTO_PIN_SPEAKER_OUT);
5654 /* set up input pins and loopback paths */
5655 static void init_analog_input(struct hda_codec *codec)
5657 struct hda_gen_spec *spec = codec->spec;
5658 struct auto_pin_cfg *cfg = &spec->autocfg;
5661 for (i = 0; i < cfg->num_inputs; i++) {
5662 hda_nid_t nid = cfg->inputs[i].pin;
5663 if (is_input_pin(codec, nid))
5664 restore_pin_ctl(codec, nid);
5666 /* init loopback inputs */
5667 if (spec->mixer_nid) {
5668 resume_path_from_idx(codec, spec->loopback_paths[i]);
5669 resume_path_from_idx(codec, spec->loopback_merge_path);
5674 /* initialize ADC paths */
5675 static void init_input_src(struct hda_codec *codec)
5677 struct hda_gen_spec *spec = codec->spec;
5678 struct hda_input_mux *imux = &spec->input_mux;
5679 struct nid_path *path;
5682 if (spec->dyn_adc_switch)
5685 nums = spec->num_adc_nids;
5687 for (c = 0; c < nums; c++) {
5688 for (i = 0; i < imux->num_items; i++) {
5689 path = get_input_path(codec, c, i);
5691 bool active = path->active;
5692 if (i == spec->cur_mux[c])
5694 snd_hda_activate_path(codec, path, active, false);
5698 update_hp_mic(codec, c, true);
5701 if (spec->cap_sync_hook)
5702 spec->cap_sync_hook(codec, NULL, NULL);
5705 /* set right pin controls for digital I/O */
5706 static void init_digital(struct hda_codec *codec)
5708 struct hda_gen_spec *spec = codec->spec;
5712 for (i = 0; i < spec->autocfg.dig_outs; i++)
5713 set_output_and_unmute(codec, spec->digout_paths[i]);
5714 pin = spec->autocfg.dig_in_pin;
5716 restore_pin_ctl(codec, pin);
5717 resume_path_from_idx(codec, spec->digin_path);
5721 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5722 * invalid unsol tags by some reason
5724 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5728 for (i = 0; i < codec->init_pins.used; i++) {
5729 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5730 hda_nid_t nid = pin->nid;
5731 if (is_jack_detectable(codec, nid) &&
5732 !snd_hda_jack_tbl_get(codec, nid))
5733 snd_hda_codec_update_cache(codec, nid, 0,
5734 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5739 * snd_hda_gen_init - initialize the generic spec
5740 * @codec: the HDA codec
5742 * This can be put as patch_ops init function.
5744 int snd_hda_gen_init(struct hda_codec *codec)
5746 struct hda_gen_spec *spec = codec->spec;
5748 if (spec->init_hook)
5749 spec->init_hook(codec);
5751 snd_hda_apply_verbs(codec);
5753 init_multi_out(codec);
5754 init_extra_out(codec);
5755 init_multi_io(codec);
5756 init_aamix_paths(codec);
5757 init_analog_input(codec);
5758 init_input_src(codec);
5759 init_digital(codec);
5761 clear_unsol_on_unused_pins(codec);
5763 sync_all_pin_power_ctls(codec);
5765 /* call init functions of standard auto-mute helpers */
5766 update_automute_all(codec);
5768 regcache_sync(codec->core.regmap);
5770 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5771 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5773 hda_call_check_power_status(codec, 0x01);
5776 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5779 * snd_hda_gen_free - free the generic spec
5780 * @codec: the HDA codec
5782 * This can be put as patch_ops free function.
5784 void snd_hda_gen_free(struct hda_codec *codec)
5786 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5787 snd_hda_gen_spec_free(codec->spec);
5791 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
5795 * snd_hda_gen_check_power_status - check the loopback power save state
5796 * @codec: the HDA codec
5797 * @nid: NID to inspect
5799 * This can be put as patch_ops check_power_status function.
5801 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5803 struct hda_gen_spec *spec = codec->spec;
5804 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5806 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
5811 * the generic codec support
5814 static const struct hda_codec_ops generic_patch_ops = {
5815 .build_controls = snd_hda_gen_build_controls,
5816 .build_pcms = snd_hda_gen_build_pcms,
5817 .init = snd_hda_gen_init,
5818 .free = snd_hda_gen_free,
5819 .unsol_event = snd_hda_jack_unsol_event,
5821 .check_power_status = snd_hda_gen_check_power_status,
5826 * snd_hda_parse_generic_codec - Generic codec parser
5827 * @codec: the HDA codec
5829 static int snd_hda_parse_generic_codec(struct hda_codec *codec)
5831 struct hda_gen_spec *spec;
5834 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5837 snd_hda_gen_spec_init(spec);
5840 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5844 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5848 codec->patch_ops = generic_patch_ops;
5852 snd_hda_gen_free(codec);
5856 static const struct hda_codec_preset snd_hda_preset_generic[] = {
5857 { .id = HDA_CODEC_ID_GENERIC, .patch = snd_hda_parse_generic_codec },
5861 static struct hda_codec_driver generic_driver = {
5862 .preset = snd_hda_preset_generic,
5865 module_hda_codec_driver(generic_driver);
5867 MODULE_LICENSE("GPL");
5868 MODULE_DESCRIPTION("Generic HD-audio codec parser");