1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Universal Interface for Intel High Definition Audio Codec
5 * Generic widget tree parser
7 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
10 #include <linux/init.h>
11 #include <linux/slab.h>
12 #include <linux/export.h>
13 #include <linux/sort.h>
14 #include <linux/delay.h>
15 #include <linux/ctype.h>
16 #include <linux/string.h>
17 #include <linux/bitops.h>
18 #include <linux/module.h>
19 #include <linux/leds.h>
20 #include <sound/core.h>
21 #include <sound/jack.h>
22 #include <sound/tlv.h>
23 #include <sound/hda_codec.h>
24 #include "hda_local.h"
25 #include "hda_auto_parser.h"
28 #include "hda_generic.h"
32 * snd_hda_gen_spec_init - initialize hda_gen_spec struct
33 * @spec: hda_gen_spec object to initialize
35 * Initialize the given hda_gen_spec object.
37 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
39 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
40 snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
41 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8);
42 mutex_init(&spec->pcm_mutex);
45 EXPORT_SYMBOL_GPL(snd_hda_gen_spec_init);
48 * snd_hda_gen_add_kctl - Add a new kctl_new struct from the template
49 * @spec: hda_gen_spec object
50 * @name: name string to override the template, NULL if unchanged
51 * @temp: template for the new kctl
53 * Add a new kctl (actually snd_kcontrol_new to be instantiated later)
54 * element based on the given snd_kcontrol_new template @temp and the
55 * name string @name to the list in @spec.
56 * Returns the newly created object or NULL as error.
58 struct snd_kcontrol_new *
59 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
60 const struct snd_kcontrol_new *temp)
62 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
67 knew->name = kstrdup(name, GFP_KERNEL);
69 knew->name = kstrdup(knew->name, GFP_KERNEL);
74 EXPORT_SYMBOL_GPL(snd_hda_gen_add_kctl);
76 static void free_kctls(struct hda_gen_spec *spec)
78 if (spec->kctls.list) {
79 struct snd_kcontrol_new *kctl = spec->kctls.list;
81 for (i = 0; i < spec->kctls.used; i++)
84 snd_array_free(&spec->kctls);
87 static void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
92 snd_array_free(&spec->paths);
93 snd_array_free(&spec->loopback_list);
99 static void parse_user_hints(struct hda_codec *codec)
101 struct hda_gen_spec *spec = codec->spec;
104 val = snd_hda_get_bool_hint(codec, "jack_detect");
106 codec->no_jack_detect = !val;
107 val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
109 codec->inv_jack_detect = !!val;
110 val = snd_hda_get_bool_hint(codec, "trigger_sense");
112 codec->no_trigger_sense = !val;
113 val = snd_hda_get_bool_hint(codec, "inv_eapd");
115 codec->inv_eapd = !!val;
116 val = snd_hda_get_bool_hint(codec, "pcm_format_first");
118 codec->pcm_format_first = !!val;
119 val = snd_hda_get_bool_hint(codec, "sticky_stream");
121 codec->no_sticky_stream = !val;
122 val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
124 codec->spdif_status_reset = !!val;
125 val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
127 codec->pin_amp_workaround = !!val;
128 val = snd_hda_get_bool_hint(codec, "single_adc_amp");
130 codec->single_adc_amp = !!val;
131 val = snd_hda_get_bool_hint(codec, "power_save_node");
133 codec->power_save_node = !!val;
135 val = snd_hda_get_bool_hint(codec, "auto_mute");
137 spec->suppress_auto_mute = !val;
138 val = snd_hda_get_bool_hint(codec, "auto_mic");
140 spec->suppress_auto_mic = !val;
141 val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
143 spec->line_in_auto_switch = !!val;
144 val = snd_hda_get_bool_hint(codec, "auto_mute_via_amp");
146 spec->auto_mute_via_amp = !!val;
147 val = snd_hda_get_bool_hint(codec, "need_dac_fix");
149 spec->need_dac_fix = !!val;
150 val = snd_hda_get_bool_hint(codec, "primary_hp");
152 spec->no_primary_hp = !val;
153 val = snd_hda_get_bool_hint(codec, "multi_io");
155 spec->no_multi_io = !val;
156 val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
158 spec->multi_cap_vol = !!val;
159 val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
161 spec->inv_dmic_split = !!val;
162 val = snd_hda_get_bool_hint(codec, "indep_hp");
164 spec->indep_hp = !!val;
165 val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
167 spec->add_stereo_mix_input = !!val;
168 /* the following two are just for compatibility */
169 val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
171 spec->add_jack_modes = !!val;
172 val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
174 spec->add_jack_modes = !!val;
175 val = snd_hda_get_bool_hint(codec, "add_jack_modes");
177 spec->add_jack_modes = !!val;
178 val = snd_hda_get_bool_hint(codec, "power_down_unused");
180 spec->power_down_unused = !!val;
181 val = snd_hda_get_bool_hint(codec, "add_hp_mic");
183 spec->hp_mic = !!val;
184 val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
186 spec->suppress_hp_mic_detect = !val;
187 val = snd_hda_get_bool_hint(codec, "vmaster");
189 spec->suppress_vmaster = !val;
191 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
192 spec->mixer_nid = val;
196 * pin control value accesses
199 #define update_pin_ctl(codec, pin, val) \
200 snd_hda_codec_write_cache(codec, pin, 0, \
201 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
203 /* restore the pinctl based on the cached value */
204 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
206 update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
209 /* set the pinctl target value and write it if requested */
210 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
211 unsigned int val, bool do_write)
215 val = snd_hda_correct_pin_ctl(codec, pin, val);
216 snd_hda_codec_set_pin_target(codec, pin, val);
218 update_pin_ctl(codec, pin, val);
221 /* set pinctl target values for all given pins */
222 static void set_pin_targets(struct hda_codec *codec, int num_pins,
223 hda_nid_t *pins, unsigned int val)
226 for (i = 0; i < num_pins; i++)
227 set_pin_target(codec, pins[i], val, false);
234 /* return the position of NID in the list, or -1 if not found */
235 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
238 for (i = 0; i < nums; i++)
244 /* return true if the given NID is contained in the path */
245 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
247 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
250 static struct nid_path *get_nid_path(struct hda_codec *codec,
251 hda_nid_t from_nid, hda_nid_t to_nid,
254 struct hda_gen_spec *spec = codec->spec;
255 struct nid_path *path;
258 snd_array_for_each(&spec->paths, i, path) {
259 if (path->depth <= 0)
261 if ((!from_nid || path->path[0] == from_nid) &&
262 (!to_nid || path->path[path->depth - 1] == to_nid)) {
264 (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
265 (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
273 * snd_hda_get_path_idx - get the index number corresponding to the path
275 * @codec: the HDA codec
276 * @path: nid_path object
278 * The returned index starts from 1, i.e. the actual array index with offset 1,
279 * and zero is handled as an invalid path
281 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
283 struct hda_gen_spec *spec = codec->spec;
284 struct nid_path *array = spec->paths.list;
287 if (!spec->paths.used)
290 if (idx < 0 || idx >= spec->paths.used)
294 EXPORT_SYMBOL_GPL(snd_hda_get_path_idx);
297 * snd_hda_get_path_from_idx - get the path instance corresponding to the
299 * @codec: the HDA codec
300 * @idx: the path index
302 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
304 struct hda_gen_spec *spec = codec->spec;
306 if (idx <= 0 || idx > spec->paths.used)
308 return snd_array_elem(&spec->paths, idx - 1);
310 EXPORT_SYMBOL_GPL(snd_hda_get_path_from_idx);
312 /* check whether the given DAC is already found in any existing paths */
313 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
315 struct hda_gen_spec *spec = codec->spec;
316 const struct nid_path *path;
319 snd_array_for_each(&spec->paths, i, path) {
320 if (path->path[0] == nid)
326 /* check whether the given two widgets can be connected */
327 static bool is_reachable_path(struct hda_codec *codec,
328 hda_nid_t from_nid, hda_nid_t to_nid)
330 if (!from_nid || !to_nid)
332 return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
335 /* nid, dir and idx */
336 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
338 /* check whether the given ctl is already assigned in any path elements */
339 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
341 struct hda_gen_spec *spec = codec->spec;
342 const struct nid_path *path;
345 val &= AMP_VAL_COMPARE_MASK;
346 snd_array_for_each(&spec->paths, i, path) {
347 if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
353 /* check whether a control with the given (nid, dir, idx) was assigned */
354 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
355 int dir, int idx, int type)
357 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
358 return is_ctl_used(codec, val, type);
361 static void print_nid_path(struct hda_codec *codec,
362 const char *pfx, struct nid_path *path)
369 for (i = 0; i < path->depth; i++)
370 pos += scnprintf(pos, sizeof(buf) - (pos - buf), "%s%02x",
371 pos != buf ? ":" : "",
374 codec_dbg(codec, "%s path: depth=%d '%s'\n", pfx, path->depth, buf);
377 /* called recursively */
378 static bool __parse_nid_path(struct hda_codec *codec,
379 hda_nid_t from_nid, hda_nid_t to_nid,
380 int anchor_nid, struct nid_path *path,
383 const hda_nid_t *conn;
386 if (to_nid == anchor_nid)
387 anchor_nid = 0; /* anchor passed */
388 else if (to_nid == (hda_nid_t)(-anchor_nid))
389 return false; /* hit the exclusive nid */
391 nums = snd_hda_get_conn_list(codec, to_nid, &conn);
392 for (i = 0; i < nums; i++) {
393 if (conn[i] != from_nid) {
394 /* special case: when from_nid is 0,
395 * try to find an empty DAC
398 get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
399 is_dac_already_used(codec, conn[i]))
402 /* anchor is not requested or already passed? */
406 if (depth >= MAX_NID_PATH_DEPTH)
408 for (i = 0; i < nums; i++) {
410 type = get_wcaps_type(get_wcaps(codec, conn[i]));
411 if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
414 if (__parse_nid_path(codec, from_nid, conn[i],
415 anchor_nid, path, depth + 1))
421 path->path[path->depth] = conn[i];
422 path->idx[path->depth + 1] = i;
423 if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
424 path->multi[path->depth + 1] = 1;
430 * snd_hda_parse_nid_path - parse the widget path from the given nid to
432 * @codec: the HDA codec
433 * @from_nid: the NID where the path start from
434 * @to_nid: the NID where the path ends at
435 * @anchor_nid: the anchor indication
436 * @path: the path object to store the result
438 * Returns true if a matching path is found.
440 * The parsing behavior depends on parameters:
441 * when @from_nid is 0, try to find an empty DAC;
442 * when @anchor_nid is set to a positive value, only paths through the widget
443 * with the given value are evaluated.
444 * when @anchor_nid is set to a negative value, paths through the widget
445 * with the negative of given value are excluded, only other paths are chosen.
446 * when @anchor_nid is zero, no special handling about path selection.
448 static bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
449 hda_nid_t to_nid, int anchor_nid,
450 struct nid_path *path)
452 if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
453 path->path[path->depth] = to_nid;
461 * snd_hda_add_new_path - parse the path between the given NIDs and
462 * add to the path list
463 * @codec: the HDA codec
464 * @from_nid: the NID where the path start from
465 * @to_nid: the NID where the path ends at
466 * @anchor_nid: the anchor indication, see snd_hda_parse_nid_path()
468 * If no valid path is found, returns NULL.
471 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
472 hda_nid_t to_nid, int anchor_nid)
474 struct hda_gen_spec *spec = codec->spec;
475 struct nid_path *path;
477 if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
480 /* check whether the path has been already added */
481 path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
485 path = snd_array_new(&spec->paths);
488 memset(path, 0, sizeof(*path));
489 if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
495 EXPORT_SYMBOL_GPL(snd_hda_add_new_path);
497 /* clear the given path as invalid so that it won't be picked up later */
498 static void invalidate_nid_path(struct hda_codec *codec, int idx)
500 struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
503 memset(path, 0, sizeof(*path));
506 /* return a DAC if paired to the given pin by codec driver */
507 static hda_nid_t get_preferred_dac(struct hda_codec *codec, hda_nid_t pin)
509 struct hda_gen_spec *spec = codec->spec;
510 const hda_nid_t *list = spec->preferred_dacs;
514 for (; *list; list += 2)
520 /* look for an empty DAC slot */
521 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
524 struct hda_gen_spec *spec = codec->spec;
528 for (i = 0; i < spec->num_all_dacs; i++) {
529 hda_nid_t nid = spec->all_dacs[i];
530 if (!nid || is_dac_already_used(codec, nid))
532 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
533 if (is_digital != cap_digital)
535 if (is_reachable_path(codec, nid, pin))
541 /* replace the channels in the composed amp value with the given number */
542 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
544 val &= ~(0x3U << 16);
549 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
550 hda_nid_t nid2, int dir)
552 if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
553 return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
554 return (query_amp_caps(codec, nid1, dir) ==
555 query_amp_caps(codec, nid2, dir));
558 /* look for a widget suitable for assigning a mute switch in the path */
559 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
560 struct nid_path *path)
564 for (i = path->depth - 1; i >= 0; i--) {
565 if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
566 return path->path[i];
567 if (i != path->depth - 1 && i != 0 &&
568 nid_has_mute(codec, path->path[i], HDA_INPUT))
569 return path->path[i];
574 /* look for a widget suitable for assigning a volume ctl in the path */
575 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
576 struct nid_path *path)
578 struct hda_gen_spec *spec = codec->spec;
581 for (i = path->depth - 1; i >= 0; i--) {
582 hda_nid_t nid = path->path[i];
583 if ((spec->out_vol_mask >> nid) & 1)
585 if (nid_has_volume(codec, nid, HDA_OUTPUT))
592 * path activation / deactivation
595 /* can have the amp-in capability? */
596 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
598 hda_nid_t nid = path->path[idx];
599 unsigned int caps = get_wcaps(codec, nid);
600 unsigned int type = get_wcaps_type(caps);
602 if (!(caps & AC_WCAP_IN_AMP))
604 if (type == AC_WID_PIN && idx > 0) /* only for input pins */
609 /* can have the amp-out capability? */
610 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
612 hda_nid_t nid = path->path[idx];
613 unsigned int caps = get_wcaps(codec, nid);
614 unsigned int type = get_wcaps_type(caps);
616 if (!(caps & AC_WCAP_OUT_AMP))
618 if (type == AC_WID_PIN && !idx) /* only for output pins */
623 /* check whether the given (nid,dir,idx) is active */
624 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
625 unsigned int dir, unsigned int idx)
627 struct hda_gen_spec *spec = codec->spec;
628 int type = get_wcaps_type(get_wcaps(codec, nid));
629 const struct nid_path *path;
632 if (nid == codec->core.afg)
635 snd_array_for_each(&spec->paths, n, path) {
638 if (codec->power_save_node) {
639 if (!path->stream_enabled)
641 /* ignore unplugged paths except for DAC/ADC */
642 if (!(path->pin_enabled || path->pin_fixed) &&
643 type != AC_WID_AUD_OUT && type != AC_WID_AUD_IN)
646 for (i = 0; i < path->depth; i++) {
647 if (path->path[i] == nid) {
648 if (dir == HDA_OUTPUT || idx == -1 ||
658 /* check whether the NID is referred by any active paths */
659 #define is_active_nid_for_any(codec, nid) \
660 is_active_nid(codec, nid, HDA_OUTPUT, -1)
662 /* get the default amp value for the target state */
663 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
664 int dir, unsigned int caps, bool enable)
666 unsigned int val = 0;
668 if (caps & AC_AMPCAP_NUM_STEPS) {
671 val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
673 if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
680 /* is this a stereo widget or a stereo-to-mono mix? */
681 static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir)
683 unsigned int wcaps = get_wcaps(codec, nid);
686 if (wcaps & AC_WCAP_STEREO)
688 if (dir != HDA_INPUT || get_wcaps_type(wcaps) != AC_WID_AUD_MIX)
690 if (snd_hda_get_num_conns(codec, nid) != 1)
692 if (snd_hda_get_connections(codec, nid, &conn, 1) < 0)
694 return !!(get_wcaps(codec, conn) & AC_WCAP_STEREO);
697 /* initialize the amp value (only at the first time) */
698 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
700 unsigned int caps = query_amp_caps(codec, nid, dir);
701 int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
703 if (is_stereo_amps(codec, nid, dir))
704 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
706 snd_hda_codec_amp_init(codec, nid, 0, dir, idx, 0xff, val);
709 /* update the amp, doing in stereo or mono depending on NID */
710 static int update_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx,
711 unsigned int mask, unsigned int val)
713 if (is_stereo_amps(codec, nid, dir))
714 return snd_hda_codec_amp_stereo(codec, nid, dir, idx,
717 return snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
721 /* calculate amp value mask we can modify;
722 * if the given amp is controlled by mixers, don't touch it
724 static unsigned int get_amp_mask_to_modify(struct hda_codec *codec,
725 hda_nid_t nid, int dir, int idx,
728 unsigned int mask = 0xff;
730 if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
731 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL))
734 if (caps & AC_AMPCAP_NUM_STEPS) {
735 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
736 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
742 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
743 int idx, int idx_to_check, bool enable)
746 unsigned int mask, val;
748 caps = query_amp_caps(codec, nid, dir);
749 val = get_amp_val_to_activate(codec, nid, dir, caps, enable);
750 mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps);
755 update_amp(codec, nid, dir, idx, mask, val);
758 static void check_and_activate_amp(struct hda_codec *codec, hda_nid_t nid,
759 int dir, int idx, int idx_to_check,
762 /* check whether the given amp is still used by others */
763 if (!enable && is_active_nid(codec, nid, dir, idx_to_check))
765 activate_amp(codec, nid, dir, idx, idx_to_check, enable);
768 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
771 hda_nid_t nid = path->path[i];
772 init_amp(codec, nid, HDA_OUTPUT, 0);
773 check_and_activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable);
776 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
777 int i, bool enable, bool add_aamix)
779 struct hda_gen_spec *spec = codec->spec;
780 const hda_nid_t *conn;
783 hda_nid_t nid = path->path[i];
785 nums = snd_hda_get_conn_list(codec, nid, &conn);
788 type = get_wcaps_type(get_wcaps(codec, nid));
789 if (type == AC_WID_PIN ||
790 (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
796 for (n = 0; n < nums; n++)
797 init_amp(codec, nid, HDA_INPUT, n);
799 /* here is a little bit tricky in comparison with activate_amp_out();
800 * when aa-mixer is available, we need to enable the path as well
802 for (n = 0; n < nums; n++) {
804 if (conn[n] != spec->mixer_merge_nid)
806 /* when aamix is disabled, force to off */
808 activate_amp(codec, nid, HDA_INPUT, n, n, false);
812 check_and_activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
816 /* sync power of each widget in the given path */
817 static hda_nid_t path_power_update(struct hda_codec *codec,
818 struct nid_path *path,
819 bool allow_powerdown)
821 hda_nid_t nid, changed = 0;
824 for (i = 0; i < path->depth; i++) {
826 if (!(get_wcaps(codec, nid) & AC_WCAP_POWER))
828 if (nid == codec->core.afg)
830 if (!allow_powerdown || is_active_nid_for_any(codec, nid))
834 power = snd_hda_codec_read(codec, nid, 0,
835 AC_VERB_GET_POWER_STATE, 0);
836 if (power != (state | (state << 4))) {
837 snd_hda_codec_write(codec, nid, 0,
838 AC_VERB_SET_POWER_STATE, state);
840 /* all known codecs seem to be capable to handl
841 * widgets state even in D3, so far.
842 * if any new codecs need to restore the widget
843 * states after D0 transition, call the function
847 if (state == AC_PWRST_D0)
848 snd_hdac_regmap_sync_node(&codec->core, nid);
855 /* do sync with the last power state change */
856 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid)
860 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0);
865 * snd_hda_activate_path - activate or deactivate the given path
866 * @codec: the HDA codec
867 * @path: the path to activate/deactivate
868 * @enable: flag to activate or not
869 * @add_aamix: enable the input from aamix NID
871 * If @add_aamix is set, enable the input from aa-mix NID as well (if any).
873 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
874 bool enable, bool add_aamix)
876 struct hda_gen_spec *spec = codec->spec;
879 path->active = enable;
881 /* make sure the widget is powered up */
882 if (enable && (spec->power_down_unused || codec->power_save_node))
883 path_power_update(codec, path, codec->power_save_node);
885 for (i = path->depth - 1; i >= 0; i--) {
886 hda_nid_t nid = path->path[i];
888 if (enable && path->multi[i])
889 snd_hda_codec_write_cache(codec, nid, 0,
890 AC_VERB_SET_CONNECT_SEL,
892 if (has_amp_in(codec, path, i))
893 activate_amp_in(codec, path, i, enable, add_aamix);
894 if (has_amp_out(codec, path, i))
895 activate_amp_out(codec, path, i, enable);
898 EXPORT_SYMBOL_GPL(snd_hda_activate_path);
900 /* if the given path is inactive, put widgets into D3 (only if suitable) */
901 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
903 struct hda_gen_spec *spec = codec->spec;
905 if (!(spec->power_down_unused || codec->power_save_node) || path->active)
907 sync_power_state_change(codec, path_power_update(codec, path, true));
910 /* turn on/off EAPD on the given pin */
911 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
913 struct hda_gen_spec *spec = codec->spec;
914 if (spec->own_eapd_ctl ||
915 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
917 if (spec->keep_eapd_on && !enable)
921 snd_hda_codec_write_cache(codec, pin, 0,
922 AC_VERB_SET_EAPD_BTLENABLE,
923 enable ? 0x02 : 0x00);
926 /* re-initialize the path specified by the given path index */
927 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
929 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
931 snd_hda_activate_path(codec, path, path->active, false);
936 * Helper functions for creating mixer ctl elements
939 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
940 struct snd_ctl_elem_value *ucontrol);
941 static int hda_gen_bind_mute_get(struct snd_kcontrol *kcontrol,
942 struct snd_ctl_elem_value *ucontrol);
943 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
944 struct snd_ctl_elem_value *ucontrol);
951 static const struct snd_kcontrol_new control_templates[] = {
952 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
953 /* only the put callback is replaced for handling the special mute */
955 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
956 .subdevice = HDA_SUBDEV_AMP_FLAG,
957 .info = snd_hda_mixer_amp_switch_info,
958 .get = snd_hda_mixer_amp_switch_get,
959 .put = hda_gen_mixer_mute_put, /* replaced */
960 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
963 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
964 .info = snd_hda_mixer_amp_switch_info,
965 .get = hda_gen_bind_mute_get,
966 .put = hda_gen_bind_mute_put, /* replaced */
967 .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
971 /* add dynamic controls from template */
972 static struct snd_kcontrol_new *
973 add_control(struct hda_gen_spec *spec, int type, const char *name,
974 int cidx, unsigned long val)
976 struct snd_kcontrol_new *knew;
978 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
982 if (get_amp_nid_(val))
983 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
984 if (knew->access == 0)
985 knew->access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
986 knew->private_value = val;
990 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
991 const char *pfx, const char *dir,
992 const char *sfx, int cidx, unsigned long val)
994 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
995 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
996 if (!add_control(spec, type, name, cidx, val))
1001 #define add_pb_vol_ctrl(spec, type, pfx, val) \
1002 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1003 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1004 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1005 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1006 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1007 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1008 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1010 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1011 unsigned int chs, struct nid_path *path)
1016 val = path->ctls[NID_PATH_VOL_CTL];
1019 val = amp_val_replace_channels(val, chs);
1020 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1023 /* return the channel bits suitable for the given path->ctls[] */
1024 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
1027 int chs = 1; /* mono (left only) */
1029 hda_nid_t nid = get_amp_nid_(path->ctls[type]);
1030 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
1031 chs = 3; /* stereo */
1036 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
1037 struct nid_path *path)
1039 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
1040 return add_vol_ctl(codec, pfx, cidx, chs, path);
1043 /* create a mute-switch for the given mixer widget;
1044 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
1046 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1047 unsigned int chs, struct nid_path *path)
1050 int type = HDA_CTL_WIDGET_MUTE;
1054 val = path->ctls[NID_PATH_MUTE_CTL];
1057 val = amp_val_replace_channels(val, chs);
1058 if (get_amp_direction_(val) == HDA_INPUT) {
1059 hda_nid_t nid = get_amp_nid_(val);
1060 int nums = snd_hda_get_num_conns(codec, nid);
1062 type = HDA_CTL_BIND_MUTE;
1066 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1069 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
1070 int cidx, struct nid_path *path)
1072 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
1073 return add_sw_ctl(codec, pfx, cidx, chs, path);
1076 /* playback mute control with the software mute bit check */
1077 static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
1078 struct snd_ctl_elem_value *ucontrol)
1080 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1081 struct hda_gen_spec *spec = codec->spec;
1083 if (spec->auto_mute_via_amp) {
1084 hda_nid_t nid = get_amp_nid(kcontrol);
1085 bool enabled = !((spec->mute_bits >> nid) & 1);
1086 ucontrol->value.integer.value[0] &= enabled;
1087 ucontrol->value.integer.value[1] &= enabled;
1091 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
1092 struct snd_ctl_elem_value *ucontrol)
1094 sync_auto_mute_bits(kcontrol, ucontrol);
1095 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1099 * Bound mute controls
1101 #define AMP_VAL_IDX_SHIFT 19
1102 #define AMP_VAL_IDX_MASK (0x0f<<19)
1104 static int hda_gen_bind_mute_get(struct snd_kcontrol *kcontrol,
1105 struct snd_ctl_elem_value *ucontrol)
1107 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1111 mutex_lock(&codec->control_mutex);
1112 pval = kcontrol->private_value;
1113 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1114 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1115 kcontrol->private_value = pval;
1116 mutex_unlock(&codec->control_mutex);
1120 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
1121 struct snd_ctl_elem_value *ucontrol)
1123 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1125 int i, indices, err = 0, change = 0;
1127 sync_auto_mute_bits(kcontrol, ucontrol);
1129 mutex_lock(&codec->control_mutex);
1130 pval = kcontrol->private_value;
1131 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1132 for (i = 0; i < indices; i++) {
1133 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1134 (i << AMP_VAL_IDX_SHIFT);
1135 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1140 kcontrol->private_value = pval;
1141 mutex_unlock(&codec->control_mutex);
1142 return err < 0 ? err : change;
1145 /* any ctl assigned to the path with the given index? */
1146 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
1148 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
1149 return path && path->ctls[ctl_type];
1152 static const char * const channel_name[4] = {
1153 "Front", "Surround", "CLFE", "Side"
1156 /* give some appropriate ctl name prefix for the given line out channel */
1157 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1158 int *index, int ctl_type)
1160 struct hda_gen_spec *spec = codec->spec;
1161 struct auto_pin_cfg *cfg = &spec->autocfg;
1164 if (cfg->line_outs == 1 && !spec->multi_ios &&
1165 !codec->force_pin_prefix &&
1166 !cfg->hp_outs && !cfg->speaker_outs)
1167 return spec->vmaster_mute.hook ? "PCM" : "Master";
1169 /* if there is really a single DAC used in the whole output paths,
1170 * use it master (or "PCM" if a vmaster hook is present)
1172 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1173 !codec->force_pin_prefix &&
1174 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1175 return spec->vmaster_mute.hook ? "PCM" : "Master";
1177 /* multi-io channels */
1178 if (ch >= cfg->line_outs)
1179 return channel_name[ch];
1181 switch (cfg->line_out_type) {
1182 case AUTO_PIN_SPEAKER_OUT:
1183 /* if the primary channel vol/mute is shared with HP volume,
1184 * don't name it as Speaker
1186 if (!ch && cfg->hp_outs &&
1187 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1189 if (cfg->line_outs == 1)
1191 if (cfg->line_outs == 2)
1192 return ch ? "Bass Speaker" : "Speaker";
1194 case AUTO_PIN_HP_OUT:
1195 /* if the primary channel vol/mute is shared with spk volume,
1196 * don't name it as Headphone
1198 if (!ch && cfg->speaker_outs &&
1199 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1201 /* for multi-io case, only the primary out */
1202 if (ch && spec->multi_ios)
1206 case AUTO_PIN_LINE_OUT:
1207 /* This deals with the case where one HP or one Speaker or
1208 * one HP + one Speaker need to share the DAC with LO
1211 bool hp_lo_shared = false, spk_lo_shared = false;
1213 if (cfg->speaker_outs)
1214 spk_lo_shared = !path_has_mixer(codec,
1215 spec->speaker_paths[0], ctl_type);
1217 hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1218 if (hp_lo_shared && spk_lo_shared)
1219 return spec->vmaster_mute.hook ? "PCM" : "Master";
1221 return "Headphone+LO";
1223 return "Speaker+LO";
1227 /* for a single channel output, we don't have to name the channel */
1228 if (cfg->line_outs == 1 && !spec->multi_ios)
1231 if (ch >= ARRAY_SIZE(channel_name)) {
1236 return channel_name[ch];
1240 * Parse output paths
1243 /* badness definition */
1245 /* No primary DAC is found for the main output */
1246 BAD_NO_PRIMARY_DAC = 0x10000,
1247 /* No DAC is found for the extra output */
1248 BAD_NO_DAC = 0x4000,
1249 /* No possible multi-ios */
1250 BAD_MULTI_IO = 0x120,
1251 /* No individual DAC for extra output */
1252 BAD_NO_EXTRA_DAC = 0x102,
1253 /* No individual DAC for extra surrounds */
1254 BAD_NO_EXTRA_SURR_DAC = 0x101,
1255 /* Primary DAC shared with main surrounds */
1256 BAD_SHARED_SURROUND = 0x100,
1257 /* No independent HP possible */
1258 BAD_NO_INDEP_HP = 0x10,
1259 /* Primary DAC shared with main CLFE */
1260 BAD_SHARED_CLFE = 0x10,
1261 /* Primary DAC shared with extra surrounds */
1262 BAD_SHARED_EXTRA_SURROUND = 0x10,
1263 /* Volume widget is shared */
1264 BAD_SHARED_VOL = 0x10,
1267 /* look for widgets in the given path which are appropriate for
1268 * volume and mute controls, and assign the values to ctls[].
1270 * When no appropriate widget is found in the path, the badness value
1271 * is incremented depending on the situation. The function returns the
1272 * total badness for both volume and mute controls.
1274 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1276 struct hda_gen_spec *spec = codec->spec;
1282 return BAD_SHARED_VOL * 2;
1284 if (path->ctls[NID_PATH_VOL_CTL] ||
1285 path->ctls[NID_PATH_MUTE_CTL])
1286 return 0; /* already evaluated */
1288 nid = look_for_out_vol_nid(codec, path);
1290 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1291 if (spec->dac_min_mute)
1292 val |= HDA_AMP_VAL_MIN_MUTE;
1293 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1294 badness += BAD_SHARED_VOL;
1296 path->ctls[NID_PATH_VOL_CTL] = val;
1298 badness += BAD_SHARED_VOL;
1299 nid = look_for_out_mute_nid(codec, path);
1301 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1302 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1303 nid_has_mute(codec, nid, HDA_OUTPUT))
1304 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1306 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1307 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1308 badness += BAD_SHARED_VOL;
1310 path->ctls[NID_PATH_MUTE_CTL] = val;
1312 badness += BAD_SHARED_VOL;
1316 const struct badness_table hda_main_out_badness = {
1317 .no_primary_dac = BAD_NO_PRIMARY_DAC,
1318 .no_dac = BAD_NO_DAC,
1319 .shared_primary = BAD_NO_PRIMARY_DAC,
1320 .shared_surr = BAD_SHARED_SURROUND,
1321 .shared_clfe = BAD_SHARED_CLFE,
1322 .shared_surr_main = BAD_SHARED_SURROUND,
1324 EXPORT_SYMBOL_GPL(hda_main_out_badness);
1326 const struct badness_table hda_extra_out_badness = {
1327 .no_primary_dac = BAD_NO_DAC,
1328 .no_dac = BAD_NO_DAC,
1329 .shared_primary = BAD_NO_EXTRA_DAC,
1330 .shared_surr = BAD_SHARED_EXTRA_SURROUND,
1331 .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1332 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1334 EXPORT_SYMBOL_GPL(hda_extra_out_badness);
1336 /* get the DAC of the primary output corresponding to the given array index */
1337 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1339 struct hda_gen_spec *spec = codec->spec;
1340 struct auto_pin_cfg *cfg = &spec->autocfg;
1342 if (cfg->line_outs > idx)
1343 return spec->private_dac_nids[idx];
1344 idx -= cfg->line_outs;
1345 if (spec->multi_ios > idx)
1346 return spec->multi_io[idx].dac;
1350 /* return the DAC if it's reachable, otherwise zero */
1351 static inline hda_nid_t try_dac(struct hda_codec *codec,
1352 hda_nid_t dac, hda_nid_t pin)
1354 return is_reachable_path(codec, dac, pin) ? dac : 0;
1357 /* try to assign DACs to pins and return the resultant badness */
1358 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1359 const hda_nid_t *pins, hda_nid_t *dacs,
1361 const struct badness_table *bad)
1363 struct hda_gen_spec *spec = codec->spec;
1371 for (i = 0; i < num_outs; i++) {
1372 struct nid_path *path;
1373 hda_nid_t pin = pins[i];
1375 if (!spec->obey_preferred_dacs) {
1376 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1378 badness += assign_out_path_ctls(codec, path);
1383 dacs[i] = get_preferred_dac(codec, pin);
1385 if (is_dac_already_used(codec, dacs[i]))
1386 badness += bad->shared_primary;
1387 } else if (spec->obey_preferred_dacs) {
1388 badness += BAD_NO_PRIMARY_DAC;
1392 dacs[i] = look_for_dac(codec, pin, false);
1393 if (!dacs[i] && !i) {
1394 /* try to steal the DAC of surrounds for the front */
1395 for (j = 1; j < num_outs; j++) {
1396 if (is_reachable_path(codec, dacs[j], pin)) {
1399 invalidate_nid_path(codec, path_idx[j]);
1408 dac = try_dac(codec, get_primary_out(codec, i), pin);
1410 dac = try_dac(codec, dacs[0], pin);
1412 dac = try_dac(codec, get_primary_out(codec, i), pin);
1415 badness += bad->shared_primary;
1417 badness += bad->shared_surr;
1419 badness += bad->shared_clfe;
1420 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1421 dac = spec->private_dac_nids[0];
1422 badness += bad->shared_surr_main;
1424 badness += bad->no_primary_dac;
1426 badness += bad->no_dac;
1430 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1431 if (!path && !i && spec->mixer_nid) {
1432 /* try with aamix */
1433 path = snd_hda_add_new_path(codec, dac, pin, 0);
1437 badness += bad->no_dac;
1439 /* print_nid_path(codec, "output", path); */
1440 path->active = true;
1441 path_idx[i] = snd_hda_get_path_idx(codec, path);
1442 badness += assign_out_path_ctls(codec, path);
1449 /* return NID if the given pin has only a single connection to a certain DAC */
1450 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1452 struct hda_gen_spec *spec = codec->spec;
1454 hda_nid_t nid_found = 0;
1456 for (i = 0; i < spec->num_all_dacs; i++) {
1457 hda_nid_t nid = spec->all_dacs[i];
1458 if (!nid || is_dac_already_used(codec, nid))
1460 if (is_reachable_path(codec, nid, pin)) {
1469 /* check whether the given pin can be a multi-io pin */
1470 static bool can_be_multiio_pin(struct hda_codec *codec,
1471 unsigned int location, hda_nid_t nid)
1473 unsigned int defcfg, caps;
1475 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1476 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1478 if (location && get_defcfg_location(defcfg) != location)
1480 caps = snd_hda_query_pin_caps(codec, nid);
1481 if (!(caps & AC_PINCAP_OUT))
1486 /* count the number of input pins that are capable to be multi-io */
1487 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1489 struct hda_gen_spec *spec = codec->spec;
1490 struct auto_pin_cfg *cfg = &spec->autocfg;
1491 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1492 unsigned int location = get_defcfg_location(defcfg);
1496 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1497 for (i = 0; i < cfg->num_inputs; i++) {
1498 if (cfg->inputs[i].type != type)
1500 if (can_be_multiio_pin(codec, location,
1501 cfg->inputs[i].pin))
1511 * When hardwired is set, try to fill ony hardwired pins, and returns
1512 * zero if any pins are filled, non-zero if nothing found.
1513 * When hardwired is off, try to fill possible input pins, and returns
1514 * the badness value.
1516 static int fill_multi_ios(struct hda_codec *codec,
1517 hda_nid_t reference_pin,
1520 struct hda_gen_spec *spec = codec->spec;
1521 struct auto_pin_cfg *cfg = &spec->autocfg;
1522 int type, i, j, num_pins, old_pins;
1523 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1524 unsigned int location = get_defcfg_location(defcfg);
1526 struct nid_path *path;
1528 old_pins = spec->multi_ios;
1532 num_pins = count_multiio_pins(codec, reference_pin);
1536 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1537 for (i = 0; i < cfg->num_inputs; i++) {
1538 hda_nid_t nid = cfg->inputs[i].pin;
1541 if (cfg->inputs[i].type != type)
1543 if (!can_be_multiio_pin(codec, location, nid))
1545 for (j = 0; j < spec->multi_ios; j++) {
1546 if (nid == spec->multi_io[j].pin)
1549 if (j < spec->multi_ios)
1553 dac = get_dac_if_single(codec, nid);
1555 dac = look_for_dac(codec, nid, false);
1560 path = snd_hda_add_new_path(codec, dac, nid,
1566 /* print_nid_path(codec, "multiio", path); */
1567 spec->multi_io[spec->multi_ios].pin = nid;
1568 spec->multi_io[spec->multi_ios].dac = dac;
1569 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1570 snd_hda_get_path_idx(codec, path);
1572 if (spec->multi_ios >= 2)
1578 badness = BAD_MULTI_IO;
1579 if (old_pins == spec->multi_ios) {
1581 return 1; /* nothing found */
1583 return badness; /* no badness if nothing found */
1585 if (!hardwired && spec->multi_ios < 2) {
1586 /* cancel newly assigned paths */
1587 spec->paths.used -= spec->multi_ios - old_pins;
1588 spec->multi_ios = old_pins;
1592 /* assign volume and mute controls */
1593 for (i = old_pins; i < spec->multi_ios; i++) {
1594 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1595 badness += assign_out_path_ctls(codec, path);
1601 /* map DACs for all pins in the list if they are single connections */
1602 static bool map_singles(struct hda_codec *codec, int outs,
1603 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1605 struct hda_gen_spec *spec = codec->spec;
1608 for (i = 0; i < outs; i++) {
1609 struct nid_path *path;
1613 dac = get_dac_if_single(codec, pins[i]);
1616 path = snd_hda_add_new_path(codec, dac, pins[i],
1618 if (!path && !i && spec->mixer_nid)
1619 path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1623 /* print_nid_path(codec, "output", path); */
1624 path->active = true;
1625 path_idx[i] = snd_hda_get_path_idx(codec, path);
1631 static inline bool has_aamix_out_paths(struct hda_gen_spec *spec)
1633 return spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
1634 spec->aamix_out_paths[2];
1637 /* create a new path including aamix if available, and return its index */
1638 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1640 struct hda_gen_spec *spec = codec->spec;
1641 struct nid_path *path;
1642 hda_nid_t path_dac, dac, pin;
1644 path = snd_hda_get_path_from_idx(codec, path_idx);
1645 if (!path || !path->depth ||
1646 is_nid_contained(path, spec->mixer_nid))
1648 path_dac = path->path[0];
1649 dac = spec->private_dac_nids[0];
1650 pin = path->path[path->depth - 1];
1651 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1653 if (dac != path_dac)
1655 else if (spec->multiout.hp_out_nid[0])
1656 dac = spec->multiout.hp_out_nid[0];
1657 else if (spec->multiout.extra_out_nid[0])
1658 dac = spec->multiout.extra_out_nid[0];
1662 path = snd_hda_add_new_path(codec, dac, pin,
1667 /* print_nid_path(codec, "output-aamix", path); */
1668 path->active = false; /* unused as default */
1669 path->pin_fixed = true; /* static route */
1670 return snd_hda_get_path_idx(codec, path);
1673 /* check whether the independent HP is available with the current config */
1674 static bool indep_hp_possible(struct hda_codec *codec)
1676 struct hda_gen_spec *spec = codec->spec;
1677 struct auto_pin_cfg *cfg = &spec->autocfg;
1678 struct nid_path *path;
1681 if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1682 idx = spec->out_paths[0];
1684 idx = spec->hp_paths[0];
1685 path = snd_hda_get_path_from_idx(codec, idx);
1689 /* assume no path conflicts unless aamix is involved */
1690 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1693 /* check whether output paths contain aamix */
1694 for (i = 0; i < cfg->line_outs; i++) {
1695 if (spec->out_paths[i] == idx)
1697 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1698 if (path && is_nid_contained(path, spec->mixer_nid))
1701 for (i = 0; i < cfg->speaker_outs; i++) {
1702 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1703 if (path && is_nid_contained(path, spec->mixer_nid))
1710 /* fill the empty entries in the dac array for speaker/hp with the
1711 * shared dac pointed by the paths
1713 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1714 hda_nid_t *dacs, int *path_idx)
1716 struct nid_path *path;
1719 for (i = 0; i < num_outs; i++) {
1722 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1725 dacs[i] = path->path[0];
1729 /* fill in the dac_nids table from the parsed pin configuration */
1730 static int fill_and_eval_dacs(struct hda_codec *codec,
1731 bool fill_hardwired,
1732 bool fill_mio_first)
1734 struct hda_gen_spec *spec = codec->spec;
1735 struct auto_pin_cfg *cfg = &spec->autocfg;
1736 int i, err, badness;
1738 /* set num_dacs once to full for look_for_dac() */
1739 spec->multiout.num_dacs = cfg->line_outs;
1740 spec->multiout.dac_nids = spec->private_dac_nids;
1741 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1742 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1743 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1744 spec->multi_ios = 0;
1745 snd_array_free(&spec->paths);
1747 /* clear path indices */
1748 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1749 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1750 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1751 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1752 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1753 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1754 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1755 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1759 /* fill hard-wired DACs first */
1760 if (fill_hardwired) {
1763 mapped = map_singles(codec, cfg->line_outs,
1765 spec->private_dac_nids,
1767 mapped |= map_singles(codec, cfg->hp_outs,
1769 spec->multiout.hp_out_nid,
1771 mapped |= map_singles(codec, cfg->speaker_outs,
1773 spec->multiout.extra_out_nid,
1774 spec->speaker_paths);
1775 if (!spec->no_multi_io &&
1776 fill_mio_first && cfg->line_outs == 1 &&
1777 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1778 err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1785 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1786 spec->private_dac_nids, spec->out_paths,
1787 spec->main_out_badness);
1789 if (!spec->no_multi_io && fill_mio_first &&
1790 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1791 /* try to fill multi-io first */
1792 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1795 /* we don't count badness at this stage yet */
1798 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1799 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1800 spec->multiout.hp_out_nid,
1802 spec->extra_out_badness);
1807 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1808 err = try_assign_dacs(codec, cfg->speaker_outs,
1810 spec->multiout.extra_out_nid,
1811 spec->speaker_paths,
1812 spec->extra_out_badness);
1817 if (!spec->no_multi_io &&
1818 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1819 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1825 if (spec->mixer_nid) {
1826 spec->aamix_out_paths[0] =
1827 check_aamix_out_path(codec, spec->out_paths[0]);
1828 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1829 spec->aamix_out_paths[1] =
1830 check_aamix_out_path(codec, spec->hp_paths[0]);
1831 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1832 spec->aamix_out_paths[2] =
1833 check_aamix_out_path(codec, spec->speaker_paths[0]);
1836 if (!spec->no_multi_io &&
1837 cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1838 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1839 spec->multi_ios = 1; /* give badness */
1841 /* re-count num_dacs and squash invalid entries */
1842 spec->multiout.num_dacs = 0;
1843 for (i = 0; i < cfg->line_outs; i++) {
1844 if (spec->private_dac_nids[i])
1845 spec->multiout.num_dacs++;
1847 memmove(spec->private_dac_nids + i,
1848 spec->private_dac_nids + i + 1,
1849 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1850 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1854 spec->ext_channel_count = spec->min_channel_count =
1855 spec->multiout.num_dacs * 2;
1857 if (spec->multi_ios == 2) {
1858 for (i = 0; i < 2; i++)
1859 spec->private_dac_nids[spec->multiout.num_dacs++] =
1860 spec->multi_io[i].dac;
1861 } else if (spec->multi_ios) {
1862 spec->multi_ios = 0;
1863 badness += BAD_MULTI_IO;
1866 if (spec->indep_hp && !indep_hp_possible(codec))
1867 badness += BAD_NO_INDEP_HP;
1869 /* re-fill the shared DAC for speaker / headphone */
1870 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1871 refill_shared_dacs(codec, cfg->hp_outs,
1872 spec->multiout.hp_out_nid,
1874 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1875 refill_shared_dacs(codec, cfg->speaker_outs,
1876 spec->multiout.extra_out_nid,
1877 spec->speaker_paths);
1882 #define DEBUG_BADNESS
1884 #ifdef DEBUG_BADNESS
1885 #define debug_badness(fmt, ...) \
1886 codec_dbg(codec, fmt, ##__VA_ARGS__)
1888 #define debug_badness(fmt, ...) \
1889 do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1892 #ifdef DEBUG_BADNESS
1893 static inline void print_nid_path_idx(struct hda_codec *codec,
1894 const char *pfx, int idx)
1896 struct nid_path *path;
1898 path = snd_hda_get_path_from_idx(codec, idx);
1900 print_nid_path(codec, pfx, path);
1903 static void debug_show_configs(struct hda_codec *codec,
1904 struct auto_pin_cfg *cfg)
1906 struct hda_gen_spec *spec = codec->spec;
1907 static const char * const lo_type[3] = { "LO", "SP", "HP" };
1910 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1911 cfg->line_out_pins[0], cfg->line_out_pins[1],
1912 cfg->line_out_pins[2], cfg->line_out_pins[3],
1913 spec->multiout.dac_nids[0],
1914 spec->multiout.dac_nids[1],
1915 spec->multiout.dac_nids[2],
1916 spec->multiout.dac_nids[3],
1917 lo_type[cfg->line_out_type]);
1918 for (i = 0; i < cfg->line_outs; i++)
1919 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1920 if (spec->multi_ios > 0)
1921 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1923 spec->multi_io[0].pin, spec->multi_io[1].pin,
1924 spec->multi_io[0].dac, spec->multi_io[1].dac);
1925 for (i = 0; i < spec->multi_ios; i++)
1926 print_nid_path_idx(codec, " mio",
1927 spec->out_paths[cfg->line_outs + i]);
1929 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1930 cfg->hp_pins[0], cfg->hp_pins[1],
1931 cfg->hp_pins[2], cfg->hp_pins[3],
1932 spec->multiout.hp_out_nid[0],
1933 spec->multiout.hp_out_nid[1],
1934 spec->multiout.hp_out_nid[2],
1935 spec->multiout.hp_out_nid[3]);
1936 for (i = 0; i < cfg->hp_outs; i++)
1937 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1938 if (cfg->speaker_outs)
1939 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1940 cfg->speaker_pins[0], cfg->speaker_pins[1],
1941 cfg->speaker_pins[2], cfg->speaker_pins[3],
1942 spec->multiout.extra_out_nid[0],
1943 spec->multiout.extra_out_nid[1],
1944 spec->multiout.extra_out_nid[2],
1945 spec->multiout.extra_out_nid[3]);
1946 for (i = 0; i < cfg->speaker_outs; i++)
1947 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1948 for (i = 0; i < 3; i++)
1949 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1952 #define debug_show_configs(codec, cfg) /* NOP */
1955 /* find all available DACs of the codec */
1956 static void fill_all_dac_nids(struct hda_codec *codec)
1958 struct hda_gen_spec *spec = codec->spec;
1961 spec->num_all_dacs = 0;
1962 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1963 for_each_hda_codec_node(nid, codec) {
1964 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1966 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1967 codec_err(codec, "Too many DACs!\n");
1970 spec->all_dacs[spec->num_all_dacs++] = nid;
1974 static int parse_output_paths(struct hda_codec *codec)
1976 struct hda_gen_spec *spec = codec->spec;
1977 struct auto_pin_cfg *cfg = &spec->autocfg;
1978 struct auto_pin_cfg *best_cfg;
1980 int best_badness = INT_MAX;
1982 bool fill_hardwired = true, fill_mio_first = true;
1983 bool best_wired = true, best_mio = true;
1984 bool hp_spk_swapped = false;
1986 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1992 badness = fill_and_eval_dacs(codec, fill_hardwired,
1998 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1999 cfg->line_out_type, fill_hardwired, fill_mio_first,
2001 debug_show_configs(codec, cfg);
2002 if (badness < best_badness) {
2003 best_badness = badness;
2005 best_wired = fill_hardwired;
2006 best_mio = fill_mio_first;
2010 fill_mio_first = !fill_mio_first;
2011 if (!fill_mio_first)
2013 fill_hardwired = !fill_hardwired;
2014 if (!fill_hardwired)
2018 hp_spk_swapped = true;
2019 if (cfg->speaker_outs > 0 &&
2020 cfg->line_out_type == AUTO_PIN_HP_OUT) {
2021 cfg->hp_outs = cfg->line_outs;
2022 memcpy(cfg->hp_pins, cfg->line_out_pins,
2023 sizeof(cfg->hp_pins));
2024 cfg->line_outs = cfg->speaker_outs;
2025 memcpy(cfg->line_out_pins, cfg->speaker_pins,
2026 sizeof(cfg->speaker_pins));
2027 cfg->speaker_outs = 0;
2028 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
2029 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
2030 fill_hardwired = true;
2033 if (cfg->hp_outs > 0 &&
2034 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
2035 cfg->speaker_outs = cfg->line_outs;
2036 memcpy(cfg->speaker_pins, cfg->line_out_pins,
2037 sizeof(cfg->speaker_pins));
2038 cfg->line_outs = cfg->hp_outs;
2039 memcpy(cfg->line_out_pins, cfg->hp_pins,
2040 sizeof(cfg->hp_pins));
2042 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
2043 cfg->line_out_type = AUTO_PIN_HP_OUT;
2044 fill_hardwired = true;
2051 debug_badness("==> restoring best_cfg\n");
2053 fill_and_eval_dacs(codec, best_wired, best_mio);
2055 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
2056 cfg->line_out_type, best_wired, best_mio);
2057 debug_show_configs(codec, cfg);
2059 if (cfg->line_out_pins[0]) {
2060 struct nid_path *path;
2061 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2063 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2064 if (spec->vmaster_nid) {
2065 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2066 HDA_OUTPUT, spec->vmaster_tlv);
2067 if (spec->dac_min_mute)
2068 spec->vmaster_tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] |= TLV_DB_SCALE_MUTE;
2072 /* set initial pinctl targets */
2073 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2077 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
2078 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2079 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
2080 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
2081 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2082 set_pin_targets(codec, cfg->speaker_outs,
2083 cfg->speaker_pins, val);
2086 /* clear indep_hp flag if not available */
2087 if (spec->indep_hp && !indep_hp_possible(codec))
2094 /* add playback controls from the parsed DAC table */
2095 static int create_multi_out_ctls(struct hda_codec *codec,
2096 const struct auto_pin_cfg *cfg)
2098 struct hda_gen_spec *spec = codec->spec;
2099 int i, err, noutputs;
2101 noutputs = cfg->line_outs;
2102 if (spec->multi_ios > 0 && cfg->line_outs < 3)
2103 noutputs += spec->multi_ios;
2105 for (i = 0; i < noutputs; i++) {
2108 struct nid_path *path;
2110 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2114 name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
2115 if (!name || !strcmp(name, "CLFE")) {
2117 err = add_vol_ctl(codec, "Center", 0, 1, path);
2120 err = add_vol_ctl(codec, "LFE", 0, 2, path);
2124 err = add_stereo_vol(codec, name, index, path);
2129 name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
2130 if (!name || !strcmp(name, "CLFE")) {
2131 err = add_sw_ctl(codec, "Center", 0, 1, path);
2134 err = add_sw_ctl(codec, "LFE", 0, 2, path);
2138 err = add_stereo_sw(codec, name, index, path);
2146 static int create_extra_out(struct hda_codec *codec, int path_idx,
2147 const char *pfx, int cidx)
2149 struct nid_path *path;
2152 path = snd_hda_get_path_from_idx(codec, path_idx);
2155 err = add_stereo_vol(codec, pfx, cidx, path);
2158 err = add_stereo_sw(codec, pfx, cidx, path);
2164 /* add playback controls for speaker and HP outputs */
2165 static int create_extra_outs(struct hda_codec *codec, int num_pins,
2166 const int *paths, const char *pfx)
2170 for (i = 0; i < num_pins; i++) {
2172 char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2175 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
2176 name = "Bass Speaker";
2177 else if (num_pins >= 3) {
2178 snprintf(tmp, sizeof(tmp), "%s %s",
2179 pfx, channel_name[i]);
2185 err = create_extra_out(codec, paths[i], name, idx);
2192 static int create_hp_out_ctls(struct hda_codec *codec)
2194 struct hda_gen_spec *spec = codec->spec;
2195 return create_extra_outs(codec, spec->autocfg.hp_outs,
2200 static int create_speaker_out_ctls(struct hda_codec *codec)
2202 struct hda_gen_spec *spec = codec->spec;
2203 return create_extra_outs(codec, spec->autocfg.speaker_outs,
2204 spec->speaker_paths,
2209 * independent HP controls
2212 static void call_hp_automute(struct hda_codec *codec,
2213 struct hda_jack_callback *jack);
2214 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2215 struct snd_ctl_elem_info *uinfo)
2217 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2220 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2221 struct snd_ctl_elem_value *ucontrol)
2223 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2224 struct hda_gen_spec *spec = codec->spec;
2225 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2229 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2230 int nomix_path_idx, int mix_path_idx,
2233 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2234 struct snd_ctl_elem_value *ucontrol)
2236 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2237 struct hda_gen_spec *spec = codec->spec;
2238 unsigned int select = ucontrol->value.enumerated.item[0];
2241 mutex_lock(&spec->pcm_mutex);
2242 if (spec->active_streams) {
2247 if (spec->indep_hp_enabled != select) {
2249 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2250 dacp = &spec->private_dac_nids[0];
2252 dacp = &spec->multiout.hp_out_nid[0];
2254 /* update HP aamix paths in case it conflicts with indep HP */
2255 if (spec->have_aamix_ctl) {
2256 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2257 update_aamix_paths(codec, spec->aamix_mode,
2259 spec->aamix_out_paths[0],
2260 spec->autocfg.line_out_type);
2262 update_aamix_paths(codec, spec->aamix_mode,
2264 spec->aamix_out_paths[1],
2268 spec->indep_hp_enabled = select;
2269 if (spec->indep_hp_enabled)
2272 *dacp = spec->alt_dac_nid;
2274 call_hp_automute(codec, NULL);
2278 mutex_unlock(&spec->pcm_mutex);
2282 static const struct snd_kcontrol_new indep_hp_ctl = {
2283 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2284 .name = "Independent HP",
2285 .info = indep_hp_info,
2286 .get = indep_hp_get,
2287 .put = indep_hp_put,
2291 static int create_indep_hp_ctls(struct hda_codec *codec)
2293 struct hda_gen_spec *spec = codec->spec;
2296 if (!spec->indep_hp)
2298 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2299 dac = spec->multiout.dac_nids[0];
2301 dac = spec->multiout.hp_out_nid[0];
2307 spec->indep_hp_enabled = false;
2308 spec->alt_dac_nid = dac;
2309 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2315 * channel mode enum control
2318 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2319 struct snd_ctl_elem_info *uinfo)
2321 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2322 struct hda_gen_spec *spec = codec->spec;
2325 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2327 uinfo->value.enumerated.items = spec->multi_ios + 1;
2328 if (uinfo->value.enumerated.item > spec->multi_ios)
2329 uinfo->value.enumerated.item = spec->multi_ios;
2330 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2331 sprintf(uinfo->value.enumerated.name, "%dch", chs);
2335 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2336 struct snd_ctl_elem_value *ucontrol)
2338 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2339 struct hda_gen_spec *spec = codec->spec;
2340 ucontrol->value.enumerated.item[0] =
2341 (spec->ext_channel_count - spec->min_channel_count) / 2;
2345 static inline struct nid_path *
2346 get_multiio_path(struct hda_codec *codec, int idx)
2348 struct hda_gen_spec *spec = codec->spec;
2349 return snd_hda_get_path_from_idx(codec,
2350 spec->out_paths[spec->autocfg.line_outs + idx]);
2353 static void update_automute_all(struct hda_codec *codec);
2355 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2356 * used for output paths
2358 static bool aamix_default(struct hda_gen_spec *spec)
2360 return !spec->have_aamix_ctl || spec->aamix_mode;
2363 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2365 struct hda_gen_spec *spec = codec->spec;
2366 hda_nid_t nid = spec->multi_io[idx].pin;
2367 struct nid_path *path;
2369 path = get_multiio_path(codec, idx);
2373 if (path->active == output)
2377 set_pin_target(codec, nid, PIN_OUT, true);
2378 snd_hda_activate_path(codec, path, true, aamix_default(spec));
2379 set_pin_eapd(codec, nid, true);
2381 set_pin_eapd(codec, nid, false);
2382 snd_hda_activate_path(codec, path, false, aamix_default(spec));
2383 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2384 path_power_down_sync(codec, path);
2387 /* update jack retasking in case it modifies any of them */
2388 update_automute_all(codec);
2393 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2394 struct snd_ctl_elem_value *ucontrol)
2396 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2397 struct hda_gen_spec *spec = codec->spec;
2400 ch = ucontrol->value.enumerated.item[0];
2401 if (ch < 0 || ch > spec->multi_ios)
2403 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2405 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2406 for (i = 0; i < spec->multi_ios; i++)
2407 set_multi_io(codec, i, i < ch);
2408 spec->multiout.max_channels = max(spec->ext_channel_count,
2409 spec->const_channel_count);
2410 if (spec->need_dac_fix)
2411 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2415 static const struct snd_kcontrol_new channel_mode_enum = {
2416 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2417 .name = "Channel Mode",
2418 .info = ch_mode_info,
2423 static int create_multi_channel_mode(struct hda_codec *codec)
2425 struct hda_gen_spec *spec = codec->spec;
2427 if (spec->multi_ios > 0) {
2428 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2435 * aamix loopback enable/disable switch
2438 #define loopback_mixing_info indep_hp_info
2440 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2441 struct snd_ctl_elem_value *ucontrol)
2443 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2444 struct hda_gen_spec *spec = codec->spec;
2445 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2449 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2450 int nomix_path_idx, int mix_path_idx,
2453 struct hda_gen_spec *spec = codec->spec;
2454 struct nid_path *nomix_path, *mix_path;
2456 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2457 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2458 if (!nomix_path || !mix_path)
2461 /* if HP aamix path is driven from a different DAC and the
2462 * independent HP mode is ON, can't turn on aamix path
2464 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2465 mix_path->path[0] != spec->alt_dac_nid)
2469 snd_hda_activate_path(codec, nomix_path, false, true);
2470 snd_hda_activate_path(codec, mix_path, true, true);
2471 path_power_down_sync(codec, nomix_path);
2473 snd_hda_activate_path(codec, mix_path, false, false);
2474 snd_hda_activate_path(codec, nomix_path, true, false);
2475 path_power_down_sync(codec, mix_path);
2479 /* re-initialize the output paths; only called from loopback_mixing_put() */
2480 static void update_output_paths(struct hda_codec *codec, int num_outs,
2483 struct hda_gen_spec *spec = codec->spec;
2484 struct nid_path *path;
2487 for (i = 0; i < num_outs; i++) {
2488 path = snd_hda_get_path_from_idx(codec, paths[i]);
2490 snd_hda_activate_path(codec, path, path->active,
2495 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2496 struct snd_ctl_elem_value *ucontrol)
2498 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2499 struct hda_gen_spec *spec = codec->spec;
2500 const struct auto_pin_cfg *cfg = &spec->autocfg;
2501 unsigned int val = ucontrol->value.enumerated.item[0];
2503 if (val == spec->aamix_mode)
2505 spec->aamix_mode = val;
2506 if (has_aamix_out_paths(spec)) {
2507 update_aamix_paths(codec, val, spec->out_paths[0],
2508 spec->aamix_out_paths[0],
2509 cfg->line_out_type);
2510 update_aamix_paths(codec, val, spec->hp_paths[0],
2511 spec->aamix_out_paths[1],
2513 update_aamix_paths(codec, val, spec->speaker_paths[0],
2514 spec->aamix_out_paths[2],
2515 AUTO_PIN_SPEAKER_OUT);
2517 update_output_paths(codec, cfg->line_outs, spec->out_paths);
2518 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2519 update_output_paths(codec, cfg->hp_outs, spec->hp_paths);
2520 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
2521 update_output_paths(codec, cfg->speaker_outs,
2522 spec->speaker_paths);
2527 static const struct snd_kcontrol_new loopback_mixing_enum = {
2528 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2529 .name = "Loopback Mixing",
2530 .info = loopback_mixing_info,
2531 .get = loopback_mixing_get,
2532 .put = loopback_mixing_put,
2535 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2537 struct hda_gen_spec *spec = codec->spec;
2539 if (!spec->mixer_nid)
2541 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2543 spec->have_aamix_ctl = 1;
2548 * shared headphone/mic handling
2551 static void call_update_outputs(struct hda_codec *codec);
2553 /* for shared I/O, change the pin-control accordingly */
2554 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2556 struct hda_gen_spec *spec = codec->spec;
2561 pin = spec->hp_mic_pin;
2562 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2565 val = snd_hda_codec_get_pin_target(codec, pin);
2575 val = snd_hda_get_default_vref(codec, pin);
2576 /* if the HP pin doesn't support VREF and the codec driver gives an
2577 * alternative pin, set up the VREF on that pin instead
2579 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2580 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2581 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2582 if (vref_val != AC_PINCTL_VREF_HIZ)
2583 snd_hda_set_pin_ctl_cache(codec, vref_pin,
2584 PIN_IN | (as_mic ? vref_val : 0));
2587 if (!spec->hp_mic_jack_modes) {
2592 set_pin_target(codec, pin, val, true);
2593 call_hp_automute(codec, NULL);
2597 /* create a shared input with the headphone out */
2598 static int create_hp_mic(struct hda_codec *codec)
2600 struct hda_gen_spec *spec = codec->spec;
2601 struct auto_pin_cfg *cfg = &spec->autocfg;
2602 unsigned int defcfg;
2605 if (!spec->hp_mic) {
2606 if (spec->suppress_hp_mic_detect)
2608 /* automatic detection: only if no input or a single internal
2609 * input pin is found, try to detect the shared hp/mic
2611 if (cfg->num_inputs > 1)
2613 else if (cfg->num_inputs == 1) {
2614 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2615 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2620 spec->hp_mic = 0; /* clear once */
2621 if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2625 if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2626 nid = cfg->line_out_pins[0];
2627 else if (cfg->hp_outs > 0)
2628 nid = cfg->hp_pins[0];
2632 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2633 return 0; /* no input */
2635 cfg->inputs[cfg->num_inputs].pin = nid;
2636 cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2637 cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2640 spec->hp_mic_pin = nid;
2641 /* we can't handle auto-mic together with HP-mic */
2642 spec->suppress_auto_mic = 1;
2643 codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid);
2651 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2653 static const char * const out_jack_texts[] = {
2654 "Line Out", "Headphone Out",
2657 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2658 struct snd_ctl_elem_info *uinfo)
2660 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2663 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2664 struct snd_ctl_elem_value *ucontrol)
2666 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2667 hda_nid_t nid = kcontrol->private_value;
2668 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2669 ucontrol->value.enumerated.item[0] = 1;
2671 ucontrol->value.enumerated.item[0] = 0;
2675 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2676 struct snd_ctl_elem_value *ucontrol)
2678 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2679 hda_nid_t nid = kcontrol->private_value;
2682 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2683 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2685 snd_hda_set_pin_ctl_cache(codec, nid, val);
2689 static const struct snd_kcontrol_new out_jack_mode_enum = {
2690 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2691 .info = out_jack_mode_info,
2692 .get = out_jack_mode_get,
2693 .put = out_jack_mode_put,
2696 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2698 struct hda_gen_spec *spec = codec->spec;
2699 const struct snd_kcontrol_new *kctl;
2702 snd_array_for_each(&spec->kctls, i, kctl) {
2703 if (!strcmp(kctl->name, name) && kctl->index == idx)
2709 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2710 char *name, size_t name_len)
2712 struct hda_gen_spec *spec = codec->spec;
2715 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2716 strlcat(name, " Jack Mode", name_len);
2718 for (; find_kctl_name(codec, name, idx); idx++)
2722 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2724 struct hda_gen_spec *spec = codec->spec;
2725 if (spec->add_jack_modes) {
2726 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2727 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2733 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2736 struct hda_gen_spec *spec = codec->spec;
2739 for (i = 0; i < num_pins; i++) {
2740 hda_nid_t pin = pins[i];
2741 if (pin == spec->hp_mic_pin)
2743 if (get_out_jack_num_items(codec, pin) > 1) {
2744 struct snd_kcontrol_new *knew;
2745 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2746 get_jack_mode_name(codec, pin, name, sizeof(name));
2747 knew = snd_hda_gen_add_kctl(spec, name,
2748 &out_jack_mode_enum);
2751 knew->private_value = pin;
2762 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2765 static const char * const vref_texts[NUM_VREFS] = {
2766 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2767 "", "Mic 80pc Bias", "Mic 100pc Bias"
2770 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2772 unsigned int pincap;
2774 pincap = snd_hda_query_pin_caps(codec, pin);
2775 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2776 /* filter out unusual vrefs */
2777 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2781 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2782 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2784 unsigned int i, n = 0;
2786 for (i = 0; i < NUM_VREFS; i++) {
2787 if (vref_caps & (1 << i)) {
2796 /* convert back from the vref ctl index to the enum item index */
2797 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2799 unsigned int i, n = 0;
2801 for (i = 0; i < NUM_VREFS; i++) {
2804 if (vref_caps & (1 << i))
2810 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2811 struct snd_ctl_elem_info *uinfo)
2813 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2814 hda_nid_t nid = kcontrol->private_value;
2815 unsigned int vref_caps = get_vref_caps(codec, nid);
2817 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2819 /* set the right text */
2820 strcpy(uinfo->value.enumerated.name,
2821 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2825 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2826 struct snd_ctl_elem_value *ucontrol)
2828 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2829 hda_nid_t nid = kcontrol->private_value;
2830 unsigned int vref_caps = get_vref_caps(codec, nid);
2833 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2834 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2838 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2839 struct snd_ctl_elem_value *ucontrol)
2841 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2842 hda_nid_t nid = kcontrol->private_value;
2843 unsigned int vref_caps = get_vref_caps(codec, nid);
2844 unsigned int val, idx;
2846 val = snd_hda_codec_get_pin_target(codec, nid);
2847 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2848 if (idx == ucontrol->value.enumerated.item[0])
2851 val &= ~AC_PINCTL_VREFEN;
2852 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2853 snd_hda_set_pin_ctl_cache(codec, nid, val);
2857 static const struct snd_kcontrol_new in_jack_mode_enum = {
2858 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2859 .info = in_jack_mode_info,
2860 .get = in_jack_mode_get,
2861 .put = in_jack_mode_put,
2864 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2866 struct hda_gen_spec *spec = codec->spec;
2868 if (spec->add_jack_modes)
2869 nitems = hweight32(get_vref_caps(codec, pin));
2870 return nitems ? nitems : 1;
2873 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2875 struct hda_gen_spec *spec = codec->spec;
2876 struct snd_kcontrol_new *knew;
2877 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2878 unsigned int defcfg;
2880 if (pin == spec->hp_mic_pin)
2881 return 0; /* already done in create_out_jack_mode() */
2883 /* no jack mode for fixed pins */
2884 defcfg = snd_hda_codec_get_pincfg(codec, pin);
2885 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2888 /* no multiple vref caps? */
2889 if (get_in_jack_num_items(codec, pin) <= 1)
2892 get_jack_mode_name(codec, pin, name, sizeof(name));
2893 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2896 knew->private_value = pin;
2901 * HP/mic shared jack mode
2903 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2904 struct snd_ctl_elem_info *uinfo)
2906 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2907 hda_nid_t nid = kcontrol->private_value;
2908 int out_jacks = get_out_jack_num_items(codec, nid);
2909 int in_jacks = get_in_jack_num_items(codec, nid);
2910 const char *text = NULL;
2913 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2915 uinfo->value.enumerated.items = out_jacks + in_jacks;
2916 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2917 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2918 idx = uinfo->value.enumerated.item;
2919 if (idx < out_jacks) {
2921 text = out_jack_texts[idx];
2923 text = "Headphone Out";
2927 unsigned int vref_caps = get_vref_caps(codec, nid);
2928 text = vref_texts[get_vref_idx(vref_caps, idx)];
2933 strcpy(uinfo->value.enumerated.name, text);
2937 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2939 int out_jacks = get_out_jack_num_items(codec, nid);
2940 int in_jacks = get_in_jack_num_items(codec, nid);
2941 unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2944 if (val & PIN_OUT) {
2945 if (out_jacks > 1 && val == PIN_HP)
2947 } else if (val & PIN_IN) {
2950 unsigned int vref_caps = get_vref_caps(codec, nid);
2951 val &= AC_PINCTL_VREFEN;
2952 idx += cvt_from_vref_idx(vref_caps, val);
2958 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2959 struct snd_ctl_elem_value *ucontrol)
2961 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2962 hda_nid_t nid = kcontrol->private_value;
2963 ucontrol->value.enumerated.item[0] =
2964 get_cur_hp_mic_jack_mode(codec, nid);
2968 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2969 struct snd_ctl_elem_value *ucontrol)
2971 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2972 hda_nid_t nid = kcontrol->private_value;
2973 int out_jacks = get_out_jack_num_items(codec, nid);
2974 int in_jacks = get_in_jack_num_items(codec, nid);
2975 unsigned int val, oldval, idx;
2977 oldval = get_cur_hp_mic_jack_mode(codec, nid);
2978 idx = ucontrol->value.enumerated.item[0];
2982 if (idx < out_jacks) {
2984 val = idx ? PIN_HP : PIN_OUT;
2990 unsigned int vref_caps = get_vref_caps(codec, nid);
2991 val = snd_hda_codec_get_pin_target(codec, nid);
2992 val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2993 val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2995 val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2997 snd_hda_set_pin_ctl_cache(codec, nid, val);
2998 call_hp_automute(codec, NULL);
3003 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
3004 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3005 .info = hp_mic_jack_mode_info,
3006 .get = hp_mic_jack_mode_get,
3007 .put = hp_mic_jack_mode_put,
3010 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
3012 struct hda_gen_spec *spec = codec->spec;
3013 struct snd_kcontrol_new *knew;
3015 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
3016 &hp_mic_jack_mode_enum);
3019 knew->private_value = pin;
3020 spec->hp_mic_jack_modes = 1;
3028 /* add the powersave loopback-list entry */
3029 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
3031 struct hda_amp_list *list;
3033 list = snd_array_new(&spec->loopback_list);
3037 list->dir = HDA_INPUT;
3039 spec->loopback.amplist = spec->loopback_list.list;
3043 /* return true if either a volume or a mute amp is found for the given
3044 * aamix path; the amp has to be either in the mixer node or its direct leaf
3046 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
3047 hda_nid_t pin, unsigned int *mix_val,
3048 unsigned int *mute_val)
3051 const hda_nid_t *list;
3054 idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
3058 *mix_val = *mute_val = 0;
3059 if (nid_has_volume(codec, mix_nid, HDA_INPUT))
3060 *mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
3061 if (nid_has_mute(codec, mix_nid, HDA_INPUT))
3062 *mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
3063 if (*mix_val && *mute_val)
3066 /* check leaf node */
3067 num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
3068 if (num_conns < idx)
3071 if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
3072 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
3073 *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3074 if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
3075 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
3076 *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3078 return *mix_val || *mute_val;
3081 /* create input playback/capture controls for the given pin */
3082 static int new_analog_input(struct hda_codec *codec, int input_idx,
3083 hda_nid_t pin, const char *ctlname, int ctlidx,
3086 struct hda_gen_spec *spec = codec->spec;
3087 struct nid_path *path;
3088 unsigned int mix_val, mute_val;
3091 if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
3094 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
3097 print_nid_path(codec, "loopback", path);
3098 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3100 idx = path->idx[path->depth - 1];
3102 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3105 path->ctls[NID_PATH_VOL_CTL] = mix_val;
3109 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3112 path->ctls[NID_PATH_MUTE_CTL] = mute_val;
3115 path->active = true;
3116 path->stream_enabled = true; /* no DAC/ADC involved */
3117 err = add_loopback_list(spec, mix_nid, idx);
3121 if (spec->mixer_nid != spec->mixer_merge_nid &&
3122 !spec->loopback_merge_path) {
3123 path = snd_hda_add_new_path(codec, spec->mixer_nid,
3124 spec->mixer_merge_nid, 0);
3126 print_nid_path(codec, "loopback-merge", path);
3127 path->active = true;
3128 path->pin_fixed = true; /* static route */
3129 path->stream_enabled = true; /* no DAC/ADC involved */
3130 spec->loopback_merge_path =
3131 snd_hda_get_path_idx(codec, path);
3138 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
3140 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
3141 return (pincap & AC_PINCAP_IN) != 0;
3144 /* Parse the codec tree and retrieve ADCs */
3145 static int fill_adc_nids(struct hda_codec *codec)
3147 struct hda_gen_spec *spec = codec->spec;
3149 hda_nid_t *adc_nids = spec->adc_nids;
3150 int max_nums = ARRAY_SIZE(spec->adc_nids);
3153 for_each_hda_codec_node(nid, codec) {
3154 unsigned int caps = get_wcaps(codec, nid);
3155 int type = get_wcaps_type(caps);
3157 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
3159 adc_nids[nums] = nid;
3160 if (++nums >= max_nums)
3163 spec->num_adc_nids = nums;
3165 /* copy the detected ADCs to all_adcs[] */
3166 spec->num_all_adcs = nums;
3167 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3172 /* filter out invalid adc_nids that don't give all active input pins;
3173 * if needed, check whether dynamic ADC-switching is available
3175 static int check_dyn_adc_switch(struct hda_codec *codec)
3177 struct hda_gen_spec *spec = codec->spec;
3178 struct hda_input_mux *imux = &spec->input_mux;
3179 unsigned int ok_bits;
3184 for (n = 0; n < spec->num_adc_nids; n++) {
3185 for (i = 0; i < imux->num_items; i++) {
3186 if (!spec->input_paths[i][n])
3189 if (i >= imux->num_items) {
3190 ok_bits |= (1 << n);
3196 /* check whether ADC-switch is possible */
3197 for (i = 0; i < imux->num_items; i++) {
3198 for (n = 0; n < spec->num_adc_nids; n++) {
3199 if (spec->input_paths[i][n]) {
3200 spec->dyn_adc_idx[i] = n;
3206 codec_dbg(codec, "enabling ADC switching\n");
3207 spec->dyn_adc_switch = 1;
3208 } else if (nums != spec->num_adc_nids) {
3209 /* shrink the invalid adcs and input paths */
3211 for (n = 0; n < spec->num_adc_nids; n++) {
3212 if (!(ok_bits & (1 << n)))
3215 spec->adc_nids[nums] = spec->adc_nids[n];
3216 for (i = 0; i < imux->num_items; i++) {
3217 invalidate_nid_path(codec,
3218 spec->input_paths[i][nums]);
3219 spec->input_paths[i][nums] =
3220 spec->input_paths[i][n];
3221 spec->input_paths[i][n] = 0;
3226 spec->num_adc_nids = nums;
3229 if (imux->num_items == 1 ||
3230 (imux->num_items == 2 && spec->hp_mic)) {
3231 codec_dbg(codec, "reducing to a single ADC\n");
3232 spec->num_adc_nids = 1; /* reduce to a single ADC */
3235 /* single index for individual volumes ctls */
3236 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3237 spec->num_adc_nids = 1;
3242 /* parse capture source paths from the given pin and create imux items */
3243 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3244 int cfg_idx, int num_adcs,
3245 const char *label, int anchor)
3247 struct hda_gen_spec *spec = codec->spec;
3248 struct hda_input_mux *imux = &spec->input_mux;
3249 int imux_idx = imux->num_items;
3250 bool imux_added = false;
3253 for (c = 0; c < num_adcs; c++) {
3254 struct nid_path *path;
3255 hda_nid_t adc = spec->adc_nids[c];
3257 if (!is_reachable_path(codec, pin, adc))
3259 path = snd_hda_add_new_path(codec, pin, adc, anchor);
3262 print_nid_path(codec, "input", path);
3263 spec->input_paths[imux_idx][c] =
3264 snd_hda_get_path_idx(codec, path);
3267 if (spec->hp_mic_pin == pin)
3268 spec->hp_mic_mux_idx = imux->num_items;
3269 spec->imux_pins[imux->num_items] = pin;
3270 snd_hda_add_imux_item(codec, imux, label, cfg_idx, NULL);
3272 if (spec->dyn_adc_switch)
3273 spec->dyn_adc_idx[imux_idx] = c;
3281 * create playback/capture controls for input pins
3284 /* fill the label for each input at first */
3285 static int fill_input_pin_labels(struct hda_codec *codec)
3287 struct hda_gen_spec *spec = codec->spec;
3288 const struct auto_pin_cfg *cfg = &spec->autocfg;
3291 for (i = 0; i < cfg->num_inputs; i++) {
3292 hda_nid_t pin = cfg->inputs[i].pin;
3296 if (!is_input_pin(codec, pin))
3299 label = hda_get_autocfg_input_label(codec, cfg, i);
3301 for (j = i - 1; j >= 0; j--) {
3302 if (spec->input_labels[j] &&
3303 !strcmp(spec->input_labels[j], label)) {
3304 idx = spec->input_label_idxs[j] + 1;
3309 spec->input_labels[i] = label;
3310 spec->input_label_idxs[i] = idx;
3316 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
3318 static int create_input_ctls(struct hda_codec *codec)
3320 struct hda_gen_spec *spec = codec->spec;
3321 const struct auto_pin_cfg *cfg = &spec->autocfg;
3322 hda_nid_t mixer = spec->mixer_nid;
3327 num_adcs = fill_adc_nids(codec);
3331 err = fill_input_pin_labels(codec);
3335 for (i = 0; i < cfg->num_inputs; i++) {
3338 pin = cfg->inputs[i].pin;
3339 if (!is_input_pin(codec, pin))
3343 if (cfg->inputs[i].type == AUTO_PIN_MIC)
3344 val |= snd_hda_get_default_vref(codec, pin);
3345 if (pin != spec->hp_mic_pin &&
3346 !snd_hda_codec_get_pin_target(codec, pin))
3347 set_pin_target(codec, pin, val, false);
3350 if (is_reachable_path(codec, pin, mixer)) {
3351 err = new_analog_input(codec, i, pin,
3352 spec->input_labels[i],
3353 spec->input_label_idxs[i],
3360 err = parse_capture_source(codec, pin, i, num_adcs,
3361 spec->input_labels[i], -mixer);
3365 if (spec->add_jack_modes) {
3366 err = create_in_jack_mode(codec, pin);
3372 /* add stereo mix when explicitly enabled via hint */
3373 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3374 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3379 spec->suppress_auto_mic = 1;
3390 /* get the input path specified by the given adc and imux indices */
3391 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3393 struct hda_gen_spec *spec = codec->spec;
3394 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3398 if (spec->dyn_adc_switch)
3399 adc_idx = spec->dyn_adc_idx[imux_idx];
3400 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3404 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3407 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3410 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3411 struct snd_ctl_elem_info *uinfo)
3413 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3414 struct hda_gen_spec *spec = codec->spec;
3415 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3418 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3419 struct snd_ctl_elem_value *ucontrol)
3421 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3422 struct hda_gen_spec *spec = codec->spec;
3423 /* the ctls are created at once with multiple counts */
3424 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3426 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3430 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3431 struct snd_ctl_elem_value *ucontrol)
3433 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3434 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3435 return mux_select(codec, adc_idx,
3436 ucontrol->value.enumerated.item[0]);
3439 static const struct snd_kcontrol_new cap_src_temp = {
3440 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3441 .name = "Input Source",
3442 .info = mux_enum_info,
3443 .get = mux_enum_get,
3444 .put = mux_enum_put,
3448 * capture volume and capture switch ctls
3451 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3452 struct snd_ctl_elem_value *ucontrol);
3454 /* call the given amp update function for all amps in the imux list at once */
3455 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3456 struct snd_ctl_elem_value *ucontrol,
3457 put_call_t func, int type)
3459 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3460 struct hda_gen_spec *spec = codec->spec;
3461 const struct hda_input_mux *imux;
3462 struct nid_path *path;
3463 int i, adc_idx, err = 0;
3465 imux = &spec->input_mux;
3466 adc_idx = kcontrol->id.index;
3467 mutex_lock(&codec->control_mutex);
3468 for (i = 0; i < imux->num_items; i++) {
3469 path = get_input_path(codec, adc_idx, i);
3470 if (!path || !path->ctls[type])
3472 kcontrol->private_value = path->ctls[type];
3473 err = func(kcontrol, ucontrol);
3477 mutex_unlock(&codec->control_mutex);
3478 if (err >= 0 && spec->cap_sync_hook)
3479 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3483 /* capture volume ctl callbacks */
3484 #define cap_vol_info snd_hda_mixer_amp_volume_info
3485 #define cap_vol_get snd_hda_mixer_amp_volume_get
3486 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3488 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3489 struct snd_ctl_elem_value *ucontrol)
3491 return cap_put_caller(kcontrol, ucontrol,
3492 snd_hda_mixer_amp_volume_put,
3496 static const struct snd_kcontrol_new cap_vol_temp = {
3497 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3498 .name = "Capture Volume",
3499 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3500 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3501 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3502 .info = cap_vol_info,
3505 .tlv = { .c = cap_vol_tlv },
3508 /* capture switch ctl callbacks */
3509 #define cap_sw_info snd_ctl_boolean_stereo_info
3510 #define cap_sw_get snd_hda_mixer_amp_switch_get
3512 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3513 struct snd_ctl_elem_value *ucontrol)
3515 return cap_put_caller(kcontrol, ucontrol,
3516 snd_hda_mixer_amp_switch_put,
3520 static const struct snd_kcontrol_new cap_sw_temp = {
3521 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3522 .name = "Capture Switch",
3523 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3524 .info = cap_sw_info,
3529 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3534 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3535 for (depth = 0; depth < 3; depth++) {
3536 if (depth >= path->depth)
3538 i = path->depth - depth - 1;
3539 nid = path->path[i];
3540 if (!path->ctls[NID_PATH_VOL_CTL]) {
3541 if (nid_has_volume(codec, nid, HDA_OUTPUT))
3542 path->ctls[NID_PATH_VOL_CTL] =
3543 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3544 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3545 int idx = path->idx[i];
3546 if (!depth && codec->single_adc_amp)
3548 path->ctls[NID_PATH_VOL_CTL] =
3549 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3552 if (!path->ctls[NID_PATH_MUTE_CTL]) {
3553 if (nid_has_mute(codec, nid, HDA_OUTPUT))
3554 path->ctls[NID_PATH_MUTE_CTL] =
3555 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3556 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3557 int idx = path->idx[i];
3558 if (!depth && codec->single_adc_amp)
3560 path->ctls[NID_PATH_MUTE_CTL] =
3561 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3568 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3570 struct hda_gen_spec *spec = codec->spec;
3571 struct auto_pin_cfg *cfg = &spec->autocfg;
3575 if (!spec->inv_dmic_split)
3577 for (i = 0; i < cfg->num_inputs; i++) {
3578 if (cfg->inputs[i].pin != nid)
3580 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3582 val = snd_hda_codec_get_pincfg(codec, nid);
3583 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3588 /* capture switch put callback for a single control with hook call */
3589 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3590 struct snd_ctl_elem_value *ucontrol)
3592 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3593 struct hda_gen_spec *spec = codec->spec;
3596 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3600 if (spec->cap_sync_hook)
3601 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3606 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3607 int idx, bool is_switch, unsigned int ctl,
3610 struct hda_gen_spec *spec = codec->spec;
3611 char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3612 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3613 const char *sfx = is_switch ? "Switch" : "Volume";
3614 unsigned int chs = inv_dmic ? 1 : 3;
3615 struct snd_kcontrol_new *knew;
3621 snprintf(tmpname, sizeof(tmpname),
3622 "%s Capture %s", label, sfx);
3624 snprintf(tmpname, sizeof(tmpname),
3626 knew = add_control(spec, type, tmpname, idx,
3627 amp_val_replace_channels(ctl, chs));
3631 knew->put = cap_single_sw_put;
3632 if (spec->mic_mute_led)
3633 knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
3638 /* Make independent right kcontrol */
3640 snprintf(tmpname, sizeof(tmpname),
3641 "Inverted %s Capture %s", label, sfx);
3643 snprintf(tmpname, sizeof(tmpname),
3644 "Inverted Capture %s", sfx);
3645 knew = add_control(spec, type, tmpname, idx,
3646 amp_val_replace_channels(ctl, 2));
3650 knew->put = cap_single_sw_put;
3651 if (spec->mic_mute_led)
3652 knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
3657 /* create single (and simple) capture volume and switch controls */
3658 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3659 unsigned int vol_ctl, unsigned int sw_ctl,
3663 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3666 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3672 /* create bound capture volume and switch controls */
3673 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3674 unsigned int vol_ctl, unsigned int sw_ctl)
3676 struct hda_gen_spec *spec = codec->spec;
3677 struct snd_kcontrol_new *knew;
3680 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3684 knew->private_value = vol_ctl;
3685 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3688 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3692 knew->private_value = sw_ctl;
3693 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3694 if (spec->mic_mute_led)
3695 knew->access |= SNDRV_CTL_ELEM_ACCESS_MIC_LED;
3700 /* return the vol ctl when used first in the imux list */
3701 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3703 struct nid_path *path;
3707 path = get_input_path(codec, 0, idx);
3710 ctl = path->ctls[type];
3713 for (i = 0; i < idx - 1; i++) {
3714 path = get_input_path(codec, 0, i);
3715 if (path && path->ctls[type] == ctl)
3721 /* create individual capture volume and switch controls per input */
3722 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3724 struct hda_gen_spec *spec = codec->spec;
3725 struct hda_input_mux *imux = &spec->input_mux;
3728 for (i = 0; i < imux->num_items; i++) {
3732 idx = imux->items[i].index;
3733 if (idx >= spec->autocfg.num_inputs)
3735 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3737 for (type = 0; type < 2; type++) {
3738 err = add_single_cap_ctl(codec,
3739 spec->input_labels[idx],
3740 spec->input_label_idxs[idx],
3742 get_first_cap_ctl(codec, i, type),
3751 static int create_capture_mixers(struct hda_codec *codec)
3753 struct hda_gen_spec *spec = codec->spec;
3754 struct hda_input_mux *imux = &spec->input_mux;
3755 int i, n, nums, err;
3757 if (spec->dyn_adc_switch)
3760 nums = spec->num_adc_nids;
3762 if (!spec->auto_mic && imux->num_items > 1) {
3763 struct snd_kcontrol_new *knew;
3765 name = nums > 1 ? "Input Source" : "Capture Source";
3766 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3772 for (n = 0; n < nums; n++) {
3774 bool multi_cap_vol = spec->multi_cap_vol;
3775 bool inv_dmic = false;
3779 for (i = 0; i < imux->num_items; i++) {
3780 struct nid_path *path;
3781 path = get_input_path(codec, n, i);
3784 parse_capvol_in_path(codec, path);
3786 vol = path->ctls[NID_PATH_VOL_CTL];
3787 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3789 if (!same_amp_caps(codec, vol,
3790 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3791 multi_cap_vol = true;
3794 sw = path->ctls[NID_PATH_MUTE_CTL];
3795 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3797 if (!same_amp_caps(codec, sw,
3798 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3799 multi_cap_vol = true;
3801 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3806 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3808 else if (!multi_cap_vol && !inv_dmic)
3809 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3811 err = create_multi_cap_vol_ctl(codec);
3820 * add mic boosts if needed
3823 /* check whether the given amp is feasible as a boost volume */
3824 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3829 if (!nid_has_volume(codec, nid, dir) ||
3830 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3831 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3834 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3835 >> AC_AMPCAP_STEP_SIZE_SHIFT;
3841 /* look for a boost amp in a widget close to the pin */
3842 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3843 struct nid_path *path)
3845 unsigned int val = 0;
3849 for (depth = 0; depth < 3; depth++) {
3850 if (depth >= path->depth - 1)
3852 nid = path->path[depth];
3853 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3854 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3856 } else if (check_boost_vol(codec, nid, HDA_INPUT,
3857 path->idx[depth])) {
3858 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3867 static int parse_mic_boost(struct hda_codec *codec)
3869 struct hda_gen_spec *spec = codec->spec;
3870 struct auto_pin_cfg *cfg = &spec->autocfg;
3871 struct hda_input_mux *imux = &spec->input_mux;
3874 if (!spec->num_adc_nids)
3877 for (i = 0; i < imux->num_items; i++) {
3878 struct nid_path *path;
3881 char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3883 idx = imux->items[i].index;
3884 if (idx >= imux->num_items)
3887 /* check only line-in and mic pins */
3888 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3891 path = get_input_path(codec, 0, i);
3895 val = look_for_boost_amp(codec, path);
3899 /* create a boost control */
3900 snprintf(boost_label, sizeof(boost_label),
3901 "%s Boost Volume", spec->input_labels[idx]);
3902 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3903 spec->input_label_idxs[idx], val))
3906 path->ctls[NID_PATH_BOOST_CTL] = val;
3911 #ifdef CONFIG_SND_HDA_GENERIC_LEDS
3913 * vmaster mute LED hook helpers
3916 static int create_mute_led_cdev(struct hda_codec *codec,
3917 int (*callback)(struct led_classdev *,
3918 enum led_brightness),
3921 struct led_classdev *cdev;
3923 cdev = devm_kzalloc(&codec->core.dev, sizeof(*cdev), GFP_KERNEL);
3927 cdev->name = micmute ? "hda::micmute" : "hda::mute";
3928 cdev->max_brightness = 1;
3929 cdev->default_trigger = micmute ? "audio-micmute" : "audio-mute";
3930 cdev->brightness_set_blocking = callback;
3931 cdev->brightness = ledtrig_audio_get(micmute ? LED_AUDIO_MICMUTE : LED_AUDIO_MUTE);
3932 cdev->flags = LED_CORE_SUSPENDRESUME;
3934 return devm_led_classdev_register(&codec->core.dev, cdev);
3938 * snd_hda_gen_add_mute_led_cdev - Create a LED classdev and enable as vmaster mute LED
3939 * @codec: the HDA codec
3940 * @callback: the callback for LED classdev brightness_set_blocking
3942 int snd_hda_gen_add_mute_led_cdev(struct hda_codec *codec,
3943 int (*callback)(struct led_classdev *,
3944 enum led_brightness))
3946 struct hda_gen_spec *spec = codec->spec;
3950 err = create_mute_led_cdev(codec, callback, false);
3952 codec_warn(codec, "failed to create a mute LED cdev\n");
3957 if (spec->vmaster_mute.hook)
3958 codec_err(codec, "vmaster hook already present before cdev!\n");
3960 spec->vmaster_mute_led = 1;
3963 EXPORT_SYMBOL_GPL(snd_hda_gen_add_mute_led_cdev);
3966 * snd_hda_gen_add_micmute_led_cdev - Create a LED classdev and enable as mic-mute LED
3967 * @codec: the HDA codec
3968 * @callback: the callback for LED classdev brightness_set_blocking
3970 * Called from the codec drivers for offering the mic mute LED controls.
3971 * This creates a LED classdev and sets up the cap_sync_hook that is called at
3972 * each time when the capture mixer switch changes.
3974 * When NULL is passed to @callback, no classdev is created but only the
3975 * LED-trigger is set up.
3977 * Returns 0 or a negative error.
3979 int snd_hda_gen_add_micmute_led_cdev(struct hda_codec *codec,
3980 int (*callback)(struct led_classdev *,
3981 enum led_brightness))
3983 struct hda_gen_spec *spec = codec->spec;
3987 err = create_mute_led_cdev(codec, callback, true);
3989 codec_warn(codec, "failed to create a mic-mute LED cdev\n");
3994 spec->mic_mute_led = 1;
3997 EXPORT_SYMBOL_GPL(snd_hda_gen_add_micmute_led_cdev);
3998 #endif /* CONFIG_SND_HDA_GENERIC_LEDS */
4001 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
4003 static void parse_digital(struct hda_codec *codec)
4005 struct hda_gen_spec *spec = codec->spec;
4006 struct nid_path *path;
4008 hda_nid_t dig_nid, pin;
4010 /* support multiple SPDIFs; the secondary is set up as a follower */
4012 for (i = 0; i < spec->autocfg.dig_outs; i++) {
4013 pin = spec->autocfg.dig_out_pins[i];
4014 dig_nid = look_for_dac(codec, pin, true);
4017 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
4020 print_nid_path(codec, "digout", path);
4021 path->active = true;
4022 path->pin_fixed = true; /* no jack detection */
4023 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
4024 set_pin_target(codec, pin, PIN_OUT, false);
4026 spec->multiout.dig_out_nid = dig_nid;
4027 spec->dig_out_type = spec->autocfg.dig_out_type[0];
4029 spec->multiout.follower_dig_outs = spec->follower_dig_outs;
4030 if (nums >= ARRAY_SIZE(spec->follower_dig_outs) - 1)
4032 spec->follower_dig_outs[nums - 1] = dig_nid;
4037 if (spec->autocfg.dig_in_pin) {
4038 pin = spec->autocfg.dig_in_pin;
4039 for_each_hda_codec_node(dig_nid, codec) {
4040 unsigned int wcaps = get_wcaps(codec, dig_nid);
4041 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
4043 if (!(wcaps & AC_WCAP_DIGITAL))
4045 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
4047 print_nid_path(codec, "digin", path);
4048 path->active = true;
4049 path->pin_fixed = true; /* no jack */
4050 spec->dig_in_nid = dig_nid;
4051 spec->digin_path = snd_hda_get_path_idx(codec, path);
4052 set_pin_target(codec, pin, PIN_IN, false);
4061 * input MUX handling
4064 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
4066 /* select the given imux item; either unmute exclusively or select the route */
4067 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
4070 struct hda_gen_spec *spec = codec->spec;
4071 const struct hda_input_mux *imux;
4072 struct nid_path *old_path, *path;
4074 imux = &spec->input_mux;
4075 if (!imux->num_items)
4078 if (idx >= imux->num_items)
4079 idx = imux->num_items - 1;
4080 if (spec->cur_mux[adc_idx] == idx)
4083 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
4086 if (old_path->active)
4087 snd_hda_activate_path(codec, old_path, false, false);
4089 spec->cur_mux[adc_idx] = idx;
4092 update_hp_mic(codec, adc_idx, false);
4094 if (spec->dyn_adc_switch)
4095 dyn_adc_pcm_resetup(codec, idx);
4097 path = get_input_path(codec, adc_idx, idx);
4102 snd_hda_activate_path(codec, path, true, false);
4103 if (spec->cap_sync_hook)
4104 spec->cap_sync_hook(codec, NULL, NULL);
4105 path_power_down_sync(codec, old_path);
4109 /* power up/down widgets in the all paths that match with the given NID
4110 * as terminals (either start- or endpoint)
4112 * returns the last changed NID, or zero if unchanged.
4114 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
4115 int pin_state, int stream_state)
4117 struct hda_gen_spec *spec = codec->spec;
4118 hda_nid_t last, changed = 0;
4119 struct nid_path *path;
4122 snd_array_for_each(&spec->paths, n, path) {
4125 if (path->path[0] == nid ||
4126 path->path[path->depth - 1] == nid) {
4127 bool pin_old = path->pin_enabled;
4128 bool stream_old = path->stream_enabled;
4131 path->pin_enabled = pin_state;
4132 if (stream_state >= 0)
4133 path->stream_enabled = stream_state;
4134 if ((!path->pin_fixed && path->pin_enabled != pin_old)
4135 || path->stream_enabled != stream_old) {
4136 last = path_power_update(codec, path, true);
4145 /* check the jack status for power control */
4146 static bool detect_pin_state(struct hda_codec *codec, hda_nid_t pin)
4148 if (!is_jack_detectable(codec, pin))
4150 return snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
4153 /* power up/down the paths of the given pin according to the jack state;
4154 * power = 0/1 : only power up/down if it matches with the jack state,
4155 * < 0 : force power up/down to follow the jack sate
4157 * returns the last changed NID, or zero if unchanged.
4159 static hda_nid_t set_pin_power_jack(struct hda_codec *codec, hda_nid_t pin,
4164 if (!codec->power_save_node)
4167 on = detect_pin_state(codec, pin);
4169 if (power >= 0 && on != power)
4171 return set_path_power(codec, pin, on, -1);
4174 static void pin_power_callback(struct hda_codec *codec,
4175 struct hda_jack_callback *jack,
4178 if (jack && jack->nid)
4179 sync_power_state_change(codec,
4180 set_pin_power_jack(codec, jack->nid, on));
4183 /* callback only doing power up -- called at first */
4184 static void pin_power_up_callback(struct hda_codec *codec,
4185 struct hda_jack_callback *jack)
4187 pin_power_callback(codec, jack, true);
4190 /* callback only doing power down -- called at last */
4191 static void pin_power_down_callback(struct hda_codec *codec,
4192 struct hda_jack_callback *jack)
4194 pin_power_callback(codec, jack, false);
4197 /* set up the power up/down callbacks */
4198 static void add_pin_power_ctls(struct hda_codec *codec, int num_pins,
4199 const hda_nid_t *pins, bool on)
4202 hda_jack_callback_fn cb =
4203 on ? pin_power_up_callback : pin_power_down_callback;
4205 for (i = 0; i < num_pins && pins[i]; i++) {
4206 if (is_jack_detectable(codec, pins[i]))
4207 snd_hda_jack_detect_enable_callback(codec, pins[i], cb);
4209 set_path_power(codec, pins[i], true, -1);
4213 /* enabled power callback to each available I/O pin with jack detections;
4214 * the digital I/O pins are excluded because of the unreliable detectsion
4216 static void add_all_pin_power_ctls(struct hda_codec *codec, bool on)
4218 struct hda_gen_spec *spec = codec->spec;
4219 struct auto_pin_cfg *cfg = &spec->autocfg;
4222 if (!codec->power_save_node)
4224 add_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins, on);
4225 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4226 add_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins, on);
4227 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4228 add_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins, on);
4229 for (i = 0; i < cfg->num_inputs; i++)
4230 add_pin_power_ctls(codec, 1, &cfg->inputs[i].pin, on);
4233 /* sync path power up/down with the jack states of given pins */
4234 static void sync_pin_power_ctls(struct hda_codec *codec, int num_pins,
4235 const hda_nid_t *pins)
4239 for (i = 0; i < num_pins && pins[i]; i++)
4240 if (is_jack_detectable(codec, pins[i]))
4241 set_pin_power_jack(codec, pins[i], -1);
4244 /* sync path power up/down with pins; called at init and resume */
4245 static void sync_all_pin_power_ctls(struct hda_codec *codec)
4247 struct hda_gen_spec *spec = codec->spec;
4248 struct auto_pin_cfg *cfg = &spec->autocfg;
4251 if (!codec->power_save_node)
4253 sync_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins);
4254 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4255 sync_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins);
4256 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4257 sync_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins);
4258 for (i = 0; i < cfg->num_inputs; i++)
4259 sync_pin_power_ctls(codec, 1, &cfg->inputs[i].pin);
4262 /* add fake paths if not present yet */
4263 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid,
4264 int num_pins, const hda_nid_t *pins)
4266 struct hda_gen_spec *spec = codec->spec;
4267 struct nid_path *path;
4270 for (i = 0; i < num_pins; i++) {
4273 if (get_nid_path(codec, nid, pins[i], 0))
4275 path = snd_array_new(&spec->paths);
4278 memset(path, 0, sizeof(*path));
4280 path->path[0] = nid;
4281 path->path[1] = pins[i];
4282 path->active = true;
4287 /* create fake paths to all outputs from beep */
4288 static int add_fake_beep_paths(struct hda_codec *codec)
4290 struct hda_gen_spec *spec = codec->spec;
4291 struct auto_pin_cfg *cfg = &spec->autocfg;
4292 hda_nid_t nid = spec->beep_nid;
4295 if (!codec->power_save_node || !nid)
4297 err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins);
4300 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4301 err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins);
4305 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4306 err = add_fake_paths(codec, nid, cfg->speaker_outs,
4314 /* power up/down beep widget and its output paths */
4315 static void beep_power_hook(struct hda_beep *beep, bool on)
4317 set_path_power(beep->codec, beep->nid, -1, on);
4321 * snd_hda_gen_fix_pin_power - Fix the power of the given pin widget to D0
4322 * @codec: the HDA codec
4323 * @pin: NID of pin to fix
4325 int snd_hda_gen_fix_pin_power(struct hda_codec *codec, hda_nid_t pin)
4327 struct hda_gen_spec *spec = codec->spec;
4328 struct nid_path *path;
4330 path = snd_array_new(&spec->paths);
4333 memset(path, 0, sizeof(*path));
4335 path->path[0] = pin;
4336 path->active = true;
4337 path->pin_fixed = true;
4338 path->stream_enabled = true;
4341 EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power);
4344 * Jack detections for HP auto-mute and mic-switch
4347 /* check each pin in the given array; returns true if any of them is plugged */
4348 static bool detect_jacks(struct hda_codec *codec, int num_pins, const hda_nid_t *pins)
4351 bool present = false;
4353 for (i = 0; i < num_pins; i++) {
4354 hda_nid_t nid = pins[i];
4357 /* don't detect pins retasked as inputs */
4358 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
4360 if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
4366 /* standard HP/line-out auto-mute helper */
4367 static void do_automute(struct hda_codec *codec, int num_pins, const hda_nid_t *pins,
4368 int *paths, bool mute)
4370 struct hda_gen_spec *spec = codec->spec;
4373 for (i = 0; i < num_pins; i++) {
4374 hda_nid_t nid = pins[i];
4375 unsigned int val, oldval;
4379 oldval = snd_hda_codec_get_pin_target(codec, nid);
4380 if (oldval & PIN_IN)
4381 continue; /* no mute for inputs */
4383 if (spec->auto_mute_via_amp) {
4384 struct nid_path *path;
4387 path = snd_hda_get_path_from_idx(codec, paths[i]);
4390 mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
4394 spec->mute_bits |= (1ULL << mute_nid);
4396 spec->mute_bits &= ~(1ULL << mute_nid);
4399 /* don't reset VREF value in case it's controlling
4400 * the amp (see alc861_fixup_asus_amp_vref_0f())
4402 if (spec->keep_vref_in_automute)
4403 val = oldval & ~PIN_HP;
4408 /* here we call update_pin_ctl() so that the pinctl is
4409 * changed without changing the pinctl target value;
4410 * the original target value will be still referred at
4411 * the init / resume again
4413 update_pin_ctl(codec, nid, val);
4416 set_pin_eapd(codec, nid, !mute);
4417 if (codec->power_save_node) {
4420 on = detect_pin_state(codec, nid);
4421 set_path_power(codec, nid, on, -1);
4427 * snd_hda_gen_update_outputs - Toggle outputs muting
4428 * @codec: the HDA codec
4430 * Update the mute status of all outputs based on the current jack states.
4432 void snd_hda_gen_update_outputs(struct hda_codec *codec)
4434 struct hda_gen_spec *spec = codec->spec;
4438 /* Control HP pins/amps depending on master_mute state;
4439 * in general, HP pins/amps control should be enabled in all cases,
4440 * but currently set only for master_mute, just to be safe
4442 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4443 paths = spec->out_paths;
4445 paths = spec->hp_paths;
4446 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4447 spec->autocfg.hp_pins, paths, spec->master_mute);
4449 if (!spec->automute_speaker)
4452 on = spec->hp_jack_present | spec->line_jack_present;
4453 on |= spec->master_mute;
4454 spec->speaker_muted = on;
4455 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4456 paths = spec->out_paths;
4458 paths = spec->speaker_paths;
4459 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4460 spec->autocfg.speaker_pins, paths, on);
4462 /* toggle line-out mutes if needed, too */
4463 /* if LO is a copy of either HP or Speaker, don't need to handle it */
4464 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4465 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4467 if (!spec->automute_lo)
4470 on = spec->hp_jack_present;
4471 on |= spec->master_mute;
4472 spec->line_out_muted = on;
4473 paths = spec->out_paths;
4474 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4475 spec->autocfg.line_out_pins, paths, on);
4477 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs);
4479 static void call_update_outputs(struct hda_codec *codec)
4481 struct hda_gen_spec *spec = codec->spec;
4482 if (spec->automute_hook)
4483 spec->automute_hook(codec);
4485 snd_hda_gen_update_outputs(codec);
4487 /* sync the whole vmaster followers to reflect the new auto-mute status */
4488 if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4489 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4493 * snd_hda_gen_hp_automute - standard HP-automute helper
4494 * @codec: the HDA codec
4495 * @jack: jack object, NULL for the whole
4497 void snd_hda_gen_hp_automute(struct hda_codec *codec,
4498 struct hda_jack_callback *jack)
4500 struct hda_gen_spec *spec = codec->spec;
4501 hda_nid_t *pins = spec->autocfg.hp_pins;
4502 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4504 /* No detection for the first HP jack during indep-HP mode */
4505 if (spec->indep_hp_enabled) {
4510 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4511 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4513 call_update_outputs(codec);
4515 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute);
4518 * snd_hda_gen_line_automute - standard line-out-automute helper
4519 * @codec: the HDA codec
4520 * @jack: jack object, NULL for the whole
4522 void snd_hda_gen_line_automute(struct hda_codec *codec,
4523 struct hda_jack_callback *jack)
4525 struct hda_gen_spec *spec = codec->spec;
4527 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4529 /* check LO jack only when it's different from HP */
4530 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4533 spec->line_jack_present =
4534 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4535 spec->autocfg.line_out_pins);
4536 if (!spec->automute_speaker || !spec->detect_lo)
4538 call_update_outputs(codec);
4540 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute);
4543 * snd_hda_gen_mic_autoswitch - standard mic auto-switch helper
4544 * @codec: the HDA codec
4545 * @jack: jack object, NULL for the whole
4547 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
4548 struct hda_jack_callback *jack)
4550 struct hda_gen_spec *spec = codec->spec;
4553 if (!spec->auto_mic)
4556 for (i = spec->am_num_entries - 1; i > 0; i--) {
4557 hda_nid_t pin = spec->am_entry[i].pin;
4558 /* don't detect pins retasked as outputs */
4559 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
4561 if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
4562 mux_select(codec, 0, spec->am_entry[i].idx);
4566 mux_select(codec, 0, spec->am_entry[0].idx);
4568 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch);
4570 /* call appropriate hooks */
4571 static void call_hp_automute(struct hda_codec *codec,
4572 struct hda_jack_callback *jack)
4574 struct hda_gen_spec *spec = codec->spec;
4575 if (spec->hp_automute_hook)
4576 spec->hp_automute_hook(codec, jack);
4578 snd_hda_gen_hp_automute(codec, jack);
4581 static void call_line_automute(struct hda_codec *codec,
4582 struct hda_jack_callback *jack)
4584 struct hda_gen_spec *spec = codec->spec;
4585 if (spec->line_automute_hook)
4586 spec->line_automute_hook(codec, jack);
4588 snd_hda_gen_line_automute(codec, jack);
4591 static void call_mic_autoswitch(struct hda_codec *codec,
4592 struct hda_jack_callback *jack)
4594 struct hda_gen_spec *spec = codec->spec;
4595 if (spec->mic_autoswitch_hook)
4596 spec->mic_autoswitch_hook(codec, jack);
4598 snd_hda_gen_mic_autoswitch(codec, jack);
4601 /* update jack retasking */
4602 static void update_automute_all(struct hda_codec *codec)
4604 call_hp_automute(codec, NULL);
4605 call_line_automute(codec, NULL);
4606 call_mic_autoswitch(codec, NULL);
4610 * Auto-Mute mode mixer enum support
4612 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4613 struct snd_ctl_elem_info *uinfo)
4615 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4616 struct hda_gen_spec *spec = codec->spec;
4617 static const char * const texts3[] = {
4618 "Disabled", "Speaker Only", "Line Out+Speaker"
4621 if (spec->automute_speaker_possible && spec->automute_lo_possible)
4622 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4623 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4626 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4627 struct snd_ctl_elem_value *ucontrol)
4629 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4630 struct hda_gen_spec *spec = codec->spec;
4631 unsigned int val = 0;
4632 if (spec->automute_speaker)
4634 if (spec->automute_lo)
4637 ucontrol->value.enumerated.item[0] = val;
4641 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4642 struct snd_ctl_elem_value *ucontrol)
4644 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4645 struct hda_gen_spec *spec = codec->spec;
4647 switch (ucontrol->value.enumerated.item[0]) {
4649 if (!spec->automute_speaker && !spec->automute_lo)
4651 spec->automute_speaker = 0;
4652 spec->automute_lo = 0;
4655 if (spec->automute_speaker_possible) {
4656 if (!spec->automute_lo && spec->automute_speaker)
4658 spec->automute_speaker = 1;
4659 spec->automute_lo = 0;
4660 } else if (spec->automute_lo_possible) {
4661 if (spec->automute_lo)
4663 spec->automute_lo = 1;
4668 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4670 if (spec->automute_speaker && spec->automute_lo)
4672 spec->automute_speaker = 1;
4673 spec->automute_lo = 1;
4678 call_update_outputs(codec);
4682 static const struct snd_kcontrol_new automute_mode_enum = {
4683 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4684 .name = "Auto-Mute Mode",
4685 .info = automute_mode_info,
4686 .get = automute_mode_get,
4687 .put = automute_mode_put,
4690 static int add_automute_mode_enum(struct hda_codec *codec)
4692 struct hda_gen_spec *spec = codec->spec;
4694 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4700 * Check the availability of HP/line-out auto-mute;
4701 * Set up appropriately if really supported
4703 static int check_auto_mute_availability(struct hda_codec *codec)
4705 struct hda_gen_spec *spec = codec->spec;
4706 struct auto_pin_cfg *cfg = &spec->autocfg;
4710 if (spec->suppress_auto_mute)
4713 if (cfg->hp_pins[0])
4715 if (cfg->line_out_pins[0])
4717 if (cfg->speaker_pins[0])
4719 if (present < 2) /* need two different output types */
4722 if (!cfg->speaker_pins[0] &&
4723 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4724 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4725 sizeof(cfg->speaker_pins));
4726 cfg->speaker_outs = cfg->line_outs;
4729 if (!cfg->hp_pins[0] &&
4730 cfg->line_out_type == AUTO_PIN_HP_OUT) {
4731 memcpy(cfg->hp_pins, cfg->line_out_pins,
4732 sizeof(cfg->hp_pins));
4733 cfg->hp_outs = cfg->line_outs;
4736 for (i = 0; i < cfg->hp_outs; i++) {
4737 hda_nid_t nid = cfg->hp_pins[i];
4738 if (!is_jack_detectable(codec, nid))
4740 codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid);
4741 snd_hda_jack_detect_enable_callback(codec, nid,
4743 spec->detect_hp = 1;
4746 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4747 if (cfg->speaker_outs)
4748 for (i = 0; i < cfg->line_outs; i++) {
4749 hda_nid_t nid = cfg->line_out_pins[i];
4750 if (!is_jack_detectable(codec, nid))
4752 codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid);
4753 snd_hda_jack_detect_enable_callback(codec, nid,
4754 call_line_automute);
4755 spec->detect_lo = 1;
4757 spec->automute_lo_possible = spec->detect_hp;
4760 spec->automute_speaker_possible = cfg->speaker_outs &&
4761 (spec->detect_hp || spec->detect_lo);
4763 spec->automute_lo = spec->automute_lo_possible;
4764 spec->automute_speaker = spec->automute_speaker_possible;
4766 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4767 /* create a control for automute mode */
4768 err = add_automute_mode_enum(codec);
4775 /* check whether all auto-mic pins are valid; setup indices if OK */
4776 static bool auto_mic_check_imux(struct hda_codec *codec)
4778 struct hda_gen_spec *spec = codec->spec;
4779 const struct hda_input_mux *imux;
4782 imux = &spec->input_mux;
4783 for (i = 0; i < spec->am_num_entries; i++) {
4784 spec->am_entry[i].idx =
4785 find_idx_in_nid_list(spec->am_entry[i].pin,
4786 spec->imux_pins, imux->num_items);
4787 if (spec->am_entry[i].idx < 0)
4788 return false; /* no corresponding imux */
4791 /* we don't need the jack detection for the first pin */
4792 for (i = 1; i < spec->am_num_entries; i++)
4793 snd_hda_jack_detect_enable_callback(codec,
4794 spec->am_entry[i].pin,
4795 call_mic_autoswitch);
4799 static int compare_attr(const void *ap, const void *bp)
4801 const struct automic_entry *a = ap;
4802 const struct automic_entry *b = bp;
4803 return (int)(a->attr - b->attr);
4807 * Check the availability of auto-mic switch;
4808 * Set up if really supported
4810 static int check_auto_mic_availability(struct hda_codec *codec)
4812 struct hda_gen_spec *spec = codec->spec;
4813 struct auto_pin_cfg *cfg = &spec->autocfg;
4817 if (spec->suppress_auto_mic)
4822 for (i = 0; i < cfg->num_inputs; i++) {
4823 hda_nid_t nid = cfg->inputs[i].pin;
4825 attr = snd_hda_codec_get_pincfg(codec, nid);
4826 attr = snd_hda_get_input_pin_attr(attr);
4827 if (types & (1 << attr))
4828 return 0; /* already occupied */
4830 case INPUT_PIN_ATTR_INT:
4831 if (cfg->inputs[i].type != AUTO_PIN_MIC)
4832 return 0; /* invalid type */
4834 case INPUT_PIN_ATTR_UNUSED:
4835 return 0; /* invalid entry */
4837 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4838 return 0; /* invalid type */
4839 if (!spec->line_in_auto_switch &&
4840 cfg->inputs[i].type != AUTO_PIN_MIC)
4841 return 0; /* only mic is allowed */
4842 if (!is_jack_detectable(codec, nid))
4843 return 0; /* no unsol support */
4846 if (num_pins >= MAX_AUTO_MIC_PINS)
4848 types |= (1 << attr);
4849 spec->am_entry[num_pins].pin = nid;
4850 spec->am_entry[num_pins].attr = attr;
4857 spec->am_num_entries = num_pins;
4858 /* sort the am_entry in the order of attr so that the pin with a
4859 * higher attr will be selected when the jack is plugged.
4861 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4862 compare_attr, NULL);
4864 if (!auto_mic_check_imux(codec))
4868 spec->num_adc_nids = 1;
4869 spec->cur_mux[0] = spec->am_entry[0].idx;
4870 codec_dbg(codec, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4871 spec->am_entry[0].pin,
4872 spec->am_entry[1].pin,
4873 spec->am_entry[2].pin);
4879 * snd_hda_gen_path_power_filter - power_filter hook to make inactive widgets
4881 * @codec: the HDA codec
4882 * @nid: NID to evalute
4883 * @power_state: target power state
4885 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4887 unsigned int power_state)
4889 struct hda_gen_spec *spec = codec->spec;
4891 if (!spec->power_down_unused && !codec->power_save_node)
4893 if (power_state != AC_PWRST_D0 || nid == codec->core.afg)
4895 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4897 if (is_active_nid_for_any(codec, nid))
4901 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter);
4903 /* mute all aamix inputs initially; parse up to the first leaves */
4904 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4907 const hda_nid_t *conn;
4910 nums = snd_hda_get_conn_list(codec, mix, &conn);
4911 has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4912 for (i = 0; i < nums; i++) {
4914 update_amp(codec, mix, HDA_INPUT, i,
4915 0xff, HDA_AMP_MUTE);
4916 else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4917 update_amp(codec, conn[i], HDA_OUTPUT, 0,
4918 0xff, HDA_AMP_MUTE);
4923 * snd_hda_gen_stream_pm - Stream power management callback
4924 * @codec: the HDA codec
4925 * @nid: audio widget
4926 * @on: power on/off flag
4928 * Set this in patch_ops.stream_pm. Only valid with power_save_node flag.
4930 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on)
4932 if (codec->power_save_node)
4933 set_path_power(codec, nid, -1, on);
4935 EXPORT_SYMBOL_GPL(snd_hda_gen_stream_pm);
4938 * snd_hda_gen_parse_auto_config - Parse the given BIOS configuration and
4939 * set up the hda_gen_spec
4940 * @codec: the HDA codec
4941 * @cfg: Parsed pin configuration
4943 * return 1 if successful, 0 if the proper config is not found,
4944 * or a negative error code
4946 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4947 struct auto_pin_cfg *cfg)
4949 struct hda_gen_spec *spec = codec->spec;
4952 parse_user_hints(codec);
4954 if (spec->vmaster_mute_led || spec->mic_mute_led)
4955 snd_ctl_led_request();
4957 if (spec->mixer_nid && !spec->mixer_merge_nid)
4958 spec->mixer_merge_nid = spec->mixer_nid;
4960 if (cfg != &spec->autocfg) {
4961 spec->autocfg = *cfg;
4962 cfg = &spec->autocfg;
4965 if (!spec->main_out_badness)
4966 spec->main_out_badness = &hda_main_out_badness;
4967 if (!spec->extra_out_badness)
4968 spec->extra_out_badness = &hda_extra_out_badness;
4970 fill_all_dac_nids(codec);
4972 if (!cfg->line_outs) {
4973 if (cfg->dig_outs || cfg->dig_in_pin) {
4974 spec->multiout.max_channels = 2;
4975 spec->no_analog = 1;
4978 if (!cfg->num_inputs && !cfg->dig_in_pin)
4979 return 0; /* can't find valid BIOS pin config */
4982 if (!spec->no_primary_hp &&
4983 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4984 cfg->line_outs <= cfg->hp_outs) {
4985 /* use HP as primary out */
4986 cfg->speaker_outs = cfg->line_outs;
4987 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4988 sizeof(cfg->speaker_pins));
4989 cfg->line_outs = cfg->hp_outs;
4990 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4992 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4993 cfg->line_out_type = AUTO_PIN_HP_OUT;
4996 err = parse_output_paths(codec);
4999 err = create_multi_channel_mode(codec);
5002 err = create_multi_out_ctls(codec, cfg);
5005 err = create_hp_out_ctls(codec);
5008 err = create_speaker_out_ctls(codec);
5011 err = create_indep_hp_ctls(codec);
5014 err = create_loopback_mixing_ctl(codec);
5017 err = create_hp_mic(codec);
5020 err = create_input_ctls(codec);
5024 /* add power-down pin callbacks at first */
5025 add_all_pin_power_ctls(codec, false);
5027 spec->const_channel_count = spec->ext_channel_count;
5028 /* check the multiple speaker and headphone pins */
5029 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
5030 spec->const_channel_count = max(spec->const_channel_count,
5031 cfg->speaker_outs * 2);
5032 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
5033 spec->const_channel_count = max(spec->const_channel_count,
5035 spec->multiout.max_channels = max(spec->ext_channel_count,
5036 spec->const_channel_count);
5038 err = check_auto_mute_availability(codec);
5042 err = check_dyn_adc_switch(codec);
5046 err = check_auto_mic_availability(codec);
5050 /* add stereo mix if available and not enabled yet */
5051 if (!spec->auto_mic && spec->mixer_nid &&
5052 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
5053 spec->input_mux.num_items > 1) {
5054 err = parse_capture_source(codec, spec->mixer_nid,
5055 CFG_IDX_MIX, spec->num_all_adcs,
5062 err = create_capture_mixers(codec);
5066 err = parse_mic_boost(codec);
5070 /* create "Headphone Mic Jack Mode" if no input selection is
5071 * available (or user specifies add_jack_modes hint)
5073 if (spec->hp_mic_pin &&
5074 (spec->auto_mic || spec->input_mux.num_items == 1 ||
5075 spec->add_jack_modes)) {
5076 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
5081 if (spec->add_jack_modes) {
5082 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
5083 err = create_out_jack_modes(codec, cfg->line_outs,
5084 cfg->line_out_pins);
5088 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
5089 err = create_out_jack_modes(codec, cfg->hp_outs,
5096 /* add power-up pin callbacks at last */
5097 add_all_pin_power_ctls(codec, true);
5099 /* mute all aamix input initially */
5100 if (spec->mixer_nid)
5101 mute_all_mixer_nid(codec, spec->mixer_nid);
5104 parse_digital(codec);
5106 if (spec->power_down_unused || codec->power_save_node) {
5107 if (!codec->power_filter)
5108 codec->power_filter = snd_hda_gen_path_power_filter;
5109 if (!codec->patch_ops.stream_pm)
5110 codec->patch_ops.stream_pm = snd_hda_gen_stream_pm;
5113 if (!spec->no_analog && spec->beep_nid) {
5114 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
5117 if (codec->beep && codec->power_save_node) {
5118 err = add_fake_beep_paths(codec);
5121 codec->beep->power_hook = beep_power_hook;
5127 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config);
5131 * Build control elements
5134 /* follower controls for virtual master */
5135 static const char * const follower_pfxs[] = {
5136 "Front", "Surround", "Center", "LFE", "Side",
5137 "Headphone", "Speaker", "Mono", "Line Out",
5138 "CLFE", "Bass Speaker", "PCM",
5139 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
5140 "Headphone Front", "Headphone Surround", "Headphone CLFE",
5141 "Headphone Side", "Headphone+LO", "Speaker+LO",
5146 * snd_hda_gen_build_controls - Build controls from the parsed results
5147 * @codec: the HDA codec
5149 * Pass this to build_controls patch_ops.
5151 int snd_hda_gen_build_controls(struct hda_codec *codec)
5153 struct hda_gen_spec *spec = codec->spec;
5156 if (spec->kctls.used) {
5157 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
5162 if (spec->multiout.dig_out_nid) {
5163 err = snd_hda_create_dig_out_ctls(codec,
5164 spec->multiout.dig_out_nid,
5165 spec->multiout.dig_out_nid,
5166 spec->pcm_rec[1]->pcm_type);
5169 if (!spec->no_analog) {
5170 err = snd_hda_create_spdif_share_sw(codec,
5174 spec->multiout.share_spdif = 1;
5177 if (spec->dig_in_nid) {
5178 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
5183 /* if we have no master control, let's create it */
5184 if (!spec->no_analog && !spec->suppress_vmaster &&
5185 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
5186 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
5187 spec->vmaster_tlv, follower_pfxs,
5188 "Playback Volume", 0);
5192 if (!spec->no_analog && !spec->suppress_vmaster &&
5193 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
5194 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
5195 NULL, follower_pfxs,
5196 "Playback Switch", true,
5197 spec->vmaster_mute_led ?
5198 SNDRV_CTL_ELEM_ACCESS_SPK_LED : 0,
5199 &spec->vmaster_mute.sw_kctl);
5202 if (spec->vmaster_mute.hook) {
5203 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute);
5204 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5208 free_kctls(spec); /* no longer needed */
5210 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5216 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls);
5223 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
5224 struct hda_codec *codec,
5225 struct snd_pcm_substream *substream,
5228 struct hda_gen_spec *spec = codec->spec;
5229 if (spec->pcm_playback_hook)
5230 spec->pcm_playback_hook(hinfo, codec, substream, action);
5233 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
5234 struct hda_codec *codec,
5235 struct snd_pcm_substream *substream,
5238 struct hda_gen_spec *spec = codec->spec;
5239 if (spec->pcm_capture_hook)
5240 spec->pcm_capture_hook(hinfo, codec, substream, action);
5244 * Analog playback callbacks
5246 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
5247 struct hda_codec *codec,
5248 struct snd_pcm_substream *substream)
5250 struct hda_gen_spec *spec = codec->spec;
5253 mutex_lock(&spec->pcm_mutex);
5254 err = snd_hda_multi_out_analog_open(codec,
5255 &spec->multiout, substream,
5258 spec->active_streams |= 1 << STREAM_MULTI_OUT;
5259 call_pcm_playback_hook(hinfo, codec, substream,
5260 HDA_GEN_PCM_ACT_OPEN);
5262 mutex_unlock(&spec->pcm_mutex);
5266 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5267 struct hda_codec *codec,
5268 unsigned int stream_tag,
5269 unsigned int format,
5270 struct snd_pcm_substream *substream)
5272 struct hda_gen_spec *spec = codec->spec;
5275 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5276 stream_tag, format, substream);
5278 call_pcm_playback_hook(hinfo, codec, substream,
5279 HDA_GEN_PCM_ACT_PREPARE);
5283 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5284 struct hda_codec *codec,
5285 struct snd_pcm_substream *substream)
5287 struct hda_gen_spec *spec = codec->spec;
5290 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5292 call_pcm_playback_hook(hinfo, codec, substream,
5293 HDA_GEN_PCM_ACT_CLEANUP);
5297 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
5298 struct hda_codec *codec,
5299 struct snd_pcm_substream *substream)
5301 struct hda_gen_spec *spec = codec->spec;
5302 mutex_lock(&spec->pcm_mutex);
5303 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5304 call_pcm_playback_hook(hinfo, codec, substream,
5305 HDA_GEN_PCM_ACT_CLOSE);
5306 mutex_unlock(&spec->pcm_mutex);
5310 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
5311 struct hda_codec *codec,
5312 struct snd_pcm_substream *substream)
5314 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
5318 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5319 struct hda_codec *codec,
5320 unsigned int stream_tag,
5321 unsigned int format,
5322 struct snd_pcm_substream *substream)
5324 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5325 call_pcm_capture_hook(hinfo, codec, substream,
5326 HDA_GEN_PCM_ACT_PREPARE);
5330 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5331 struct hda_codec *codec,
5332 struct snd_pcm_substream *substream)
5334 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5335 call_pcm_capture_hook(hinfo, codec, substream,
5336 HDA_GEN_PCM_ACT_CLEANUP);
5340 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
5341 struct hda_codec *codec,
5342 struct snd_pcm_substream *substream)
5344 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
5348 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
5349 struct hda_codec *codec,
5350 struct snd_pcm_substream *substream)
5352 struct hda_gen_spec *spec = codec->spec;
5355 mutex_lock(&spec->pcm_mutex);
5356 if (spec->indep_hp && !spec->indep_hp_enabled)
5359 spec->active_streams |= 1 << STREAM_INDEP_HP;
5360 call_pcm_playback_hook(hinfo, codec, substream,
5361 HDA_GEN_PCM_ACT_OPEN);
5362 mutex_unlock(&spec->pcm_mutex);
5366 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
5367 struct hda_codec *codec,
5368 struct snd_pcm_substream *substream)
5370 struct hda_gen_spec *spec = codec->spec;
5371 mutex_lock(&spec->pcm_mutex);
5372 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5373 call_pcm_playback_hook(hinfo, codec, substream,
5374 HDA_GEN_PCM_ACT_CLOSE);
5375 mutex_unlock(&spec->pcm_mutex);
5379 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5380 struct hda_codec *codec,
5381 unsigned int stream_tag,
5382 unsigned int format,
5383 struct snd_pcm_substream *substream)
5385 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5386 call_pcm_playback_hook(hinfo, codec, substream,
5387 HDA_GEN_PCM_ACT_PREPARE);
5391 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5392 struct hda_codec *codec,
5393 struct snd_pcm_substream *substream)
5395 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5396 call_pcm_playback_hook(hinfo, codec, substream,
5397 HDA_GEN_PCM_ACT_CLEANUP);
5404 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
5405 struct hda_codec *codec,
5406 struct snd_pcm_substream *substream)
5408 struct hda_gen_spec *spec = codec->spec;
5409 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5412 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5413 struct hda_codec *codec,
5414 unsigned int stream_tag,
5415 unsigned int format,
5416 struct snd_pcm_substream *substream)
5418 struct hda_gen_spec *spec = codec->spec;
5419 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5420 stream_tag, format, substream);
5423 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5424 struct hda_codec *codec,
5425 struct snd_pcm_substream *substream)
5427 struct hda_gen_spec *spec = codec->spec;
5428 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5431 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
5432 struct hda_codec *codec,
5433 struct snd_pcm_substream *substream)
5435 struct hda_gen_spec *spec = codec->spec;
5436 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5442 #define alt_capture_pcm_open capture_pcm_open
5443 #define alt_capture_pcm_close capture_pcm_close
5445 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5446 struct hda_codec *codec,
5447 unsigned int stream_tag,
5448 unsigned int format,
5449 struct snd_pcm_substream *substream)
5451 struct hda_gen_spec *spec = codec->spec;
5453 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5454 stream_tag, 0, format);
5455 call_pcm_capture_hook(hinfo, codec, substream,
5456 HDA_GEN_PCM_ACT_PREPARE);
5460 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5461 struct hda_codec *codec,
5462 struct snd_pcm_substream *substream)
5464 struct hda_gen_spec *spec = codec->spec;
5466 snd_hda_codec_cleanup_stream(codec,
5467 spec->adc_nids[substream->number + 1]);
5468 call_pcm_capture_hook(hinfo, codec, substream,
5469 HDA_GEN_PCM_ACT_CLEANUP);
5475 static const struct hda_pcm_stream pcm_analog_playback = {
5479 /* NID is set in build_pcms */
5481 .open = playback_pcm_open,
5482 .close = playback_pcm_close,
5483 .prepare = playback_pcm_prepare,
5484 .cleanup = playback_pcm_cleanup
5488 static const struct hda_pcm_stream pcm_analog_capture = {
5492 /* NID is set in build_pcms */
5494 .open = capture_pcm_open,
5495 .close = capture_pcm_close,
5496 .prepare = capture_pcm_prepare,
5497 .cleanup = capture_pcm_cleanup
5501 static const struct hda_pcm_stream pcm_analog_alt_playback = {
5505 /* NID is set in build_pcms */
5507 .open = alt_playback_pcm_open,
5508 .close = alt_playback_pcm_close,
5509 .prepare = alt_playback_pcm_prepare,
5510 .cleanup = alt_playback_pcm_cleanup
5514 static const struct hda_pcm_stream pcm_analog_alt_capture = {
5515 .substreams = 2, /* can be overridden */
5518 /* NID is set in build_pcms */
5520 .open = alt_capture_pcm_open,
5521 .close = alt_capture_pcm_close,
5522 .prepare = alt_capture_pcm_prepare,
5523 .cleanup = alt_capture_pcm_cleanup
5527 static const struct hda_pcm_stream pcm_digital_playback = {
5531 /* NID is set in build_pcms */
5533 .open = dig_playback_pcm_open,
5534 .close = dig_playback_pcm_close,
5535 .prepare = dig_playback_pcm_prepare,
5536 .cleanup = dig_playback_pcm_cleanup
5540 static const struct hda_pcm_stream pcm_digital_capture = {
5544 /* NID is set in build_pcms */
5547 /* Used by build_pcms to flag that a PCM has no playback stream */
5548 static const struct hda_pcm_stream pcm_null_stream = {
5555 * dynamic changing ADC PCM streams
5557 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
5559 struct hda_gen_spec *spec = codec->spec;
5560 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5562 if (spec->cur_adc && spec->cur_adc != new_adc) {
5563 /* stream is running, let's swap the current ADC */
5564 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5565 spec->cur_adc = new_adc;
5566 snd_hda_codec_setup_stream(codec, new_adc,
5567 spec->cur_adc_stream_tag, 0,
5568 spec->cur_adc_format);
5574 /* analog capture with dynamic dual-adc changes */
5575 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5576 struct hda_codec *codec,
5577 unsigned int stream_tag,
5578 unsigned int format,
5579 struct snd_pcm_substream *substream)
5581 struct hda_gen_spec *spec = codec->spec;
5582 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5583 spec->cur_adc_stream_tag = stream_tag;
5584 spec->cur_adc_format = format;
5585 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5586 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_PREPARE);
5590 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5591 struct hda_codec *codec,
5592 struct snd_pcm_substream *substream)
5594 struct hda_gen_spec *spec = codec->spec;
5595 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5597 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLEANUP);
5601 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
5605 .nid = 0, /* fill later */
5607 .prepare = dyn_adc_capture_pcm_prepare,
5608 .cleanup = dyn_adc_capture_pcm_cleanup
5612 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
5613 const char *chip_name)
5619 strscpy(str, chip_name, len);
5621 /* drop non-alnum chars after a space */
5622 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5623 if (!isalnum(p[1])) {
5628 strlcat(str, sfx, len);
5631 /* copy PCM stream info from @default_str, and override non-NULL entries
5632 * from @spec_str and @nid
5634 static void setup_pcm_stream(struct hda_pcm_stream *str,
5635 const struct hda_pcm_stream *default_str,
5636 const struct hda_pcm_stream *spec_str,
5639 *str = *default_str;
5643 if (spec_str->substreams)
5644 str->substreams = spec_str->substreams;
5645 if (spec_str->channels_min)
5646 str->channels_min = spec_str->channels_min;
5647 if (spec_str->channels_max)
5648 str->channels_max = spec_str->channels_max;
5649 if (spec_str->rates)
5650 str->rates = spec_str->rates;
5651 if (spec_str->formats)
5652 str->formats = spec_str->formats;
5653 if (spec_str->maxbps)
5654 str->maxbps = spec_str->maxbps;
5659 * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5660 * @codec: the HDA codec
5662 * Pass this to build_pcms patch_ops.
5664 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5666 struct hda_gen_spec *spec = codec->spec;
5667 struct hda_pcm *info;
5668 bool have_multi_adcs;
5670 if (spec->no_analog)
5673 fill_pcm_stream_name(spec->stream_name_analog,
5674 sizeof(spec->stream_name_analog),
5675 " Analog", codec->core.chip_name);
5676 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5679 spec->pcm_rec[0] = info;
5681 if (spec->multiout.num_dacs > 0) {
5682 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5683 &pcm_analog_playback,
5684 spec->stream_analog_playback,
5685 spec->multiout.dac_nids[0]);
5686 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5687 spec->multiout.max_channels;
5688 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5689 spec->autocfg.line_outs == 2)
5690 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5693 if (spec->num_adc_nids) {
5694 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5695 (spec->dyn_adc_switch ?
5696 &dyn_adc_pcm_analog_capture : &pcm_analog_capture),
5697 spec->stream_analog_capture,
5702 /* SPDIF for stream index #1 */
5703 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5704 fill_pcm_stream_name(spec->stream_name_digital,
5705 sizeof(spec->stream_name_digital),
5706 " Digital", codec->core.chip_name);
5707 info = snd_hda_codec_pcm_new(codec, "%s",
5708 spec->stream_name_digital);
5711 codec->follower_dig_outs = spec->multiout.follower_dig_outs;
5712 spec->pcm_rec[1] = info;
5713 if (spec->dig_out_type)
5714 info->pcm_type = spec->dig_out_type;
5716 info->pcm_type = HDA_PCM_TYPE_SPDIF;
5717 if (spec->multiout.dig_out_nid)
5718 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5719 &pcm_digital_playback,
5720 spec->stream_digital_playback,
5721 spec->multiout.dig_out_nid);
5722 if (spec->dig_in_nid)
5723 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5724 &pcm_digital_capture,
5725 spec->stream_digital_capture,
5729 if (spec->no_analog)
5732 /* If the use of more than one ADC is requested for the current
5733 * model, configure a second analog capture-only PCM.
5735 have_multi_adcs = (spec->num_adc_nids > 1) &&
5736 !spec->dyn_adc_switch && !spec->auto_mic;
5737 /* Additional Analaog capture for index #2 */
5738 if (spec->alt_dac_nid || have_multi_adcs) {
5739 fill_pcm_stream_name(spec->stream_name_alt_analog,
5740 sizeof(spec->stream_name_alt_analog),
5741 " Alt Analog", codec->core.chip_name);
5742 info = snd_hda_codec_pcm_new(codec, "%s",
5743 spec->stream_name_alt_analog);
5746 spec->pcm_rec[2] = info;
5747 if (spec->alt_dac_nid)
5748 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5749 &pcm_analog_alt_playback,
5750 spec->stream_analog_alt_playback,
5753 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5754 &pcm_null_stream, NULL, 0);
5755 if (have_multi_adcs) {
5756 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5757 &pcm_analog_alt_capture,
5758 spec->stream_analog_alt_capture,
5760 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5761 spec->num_adc_nids - 1;
5763 setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5764 &pcm_null_stream, NULL, 0);
5770 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5774 * Standard auto-parser initializations
5777 /* configure the given path as a proper output */
5778 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5780 struct nid_path *path;
5783 path = snd_hda_get_path_from_idx(codec, path_idx);
5784 if (!path || !path->depth)
5786 pin = path->path[path->depth - 1];
5787 restore_pin_ctl(codec, pin);
5788 snd_hda_activate_path(codec, path, path->active,
5789 aamix_default(codec->spec));
5790 set_pin_eapd(codec, pin, path->active);
5793 /* initialize primary output paths */
5794 static void init_multi_out(struct hda_codec *codec)
5796 struct hda_gen_spec *spec = codec->spec;
5799 for (i = 0; i < spec->autocfg.line_outs; i++)
5800 set_output_and_unmute(codec, spec->out_paths[i]);
5804 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5808 for (i = 0; i < num_outs; i++)
5809 set_output_and_unmute(codec, paths[i]);
5812 /* initialize hp and speaker paths */
5813 static void init_extra_out(struct hda_codec *codec)
5815 struct hda_gen_spec *spec = codec->spec;
5817 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5818 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5819 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5820 __init_extra_out(codec, spec->autocfg.speaker_outs,
5821 spec->speaker_paths);
5824 /* initialize multi-io paths */
5825 static void init_multi_io(struct hda_codec *codec)
5827 struct hda_gen_spec *spec = codec->spec;
5830 for (i = 0; i < spec->multi_ios; i++) {
5831 hda_nid_t pin = spec->multi_io[i].pin;
5832 struct nid_path *path;
5833 path = get_multiio_path(codec, i);
5836 if (!spec->multi_io[i].ctl_in)
5837 spec->multi_io[i].ctl_in =
5838 snd_hda_codec_get_pin_target(codec, pin);
5839 snd_hda_activate_path(codec, path, path->active,
5840 aamix_default(spec));
5844 static void init_aamix_paths(struct hda_codec *codec)
5846 struct hda_gen_spec *spec = codec->spec;
5848 if (!spec->have_aamix_ctl)
5850 if (!has_aamix_out_paths(spec))
5852 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5853 spec->aamix_out_paths[0],
5854 spec->autocfg.line_out_type);
5855 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5856 spec->aamix_out_paths[1],
5858 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5859 spec->aamix_out_paths[2],
5860 AUTO_PIN_SPEAKER_OUT);
5863 /* set up input pins and loopback paths */
5864 static void init_analog_input(struct hda_codec *codec)
5866 struct hda_gen_spec *spec = codec->spec;
5867 struct auto_pin_cfg *cfg = &spec->autocfg;
5870 for (i = 0; i < cfg->num_inputs; i++) {
5871 hda_nid_t nid = cfg->inputs[i].pin;
5872 if (is_input_pin(codec, nid))
5873 restore_pin_ctl(codec, nid);
5875 /* init loopback inputs */
5876 if (spec->mixer_nid) {
5877 resume_path_from_idx(codec, spec->loopback_paths[i]);
5878 resume_path_from_idx(codec, spec->loopback_merge_path);
5883 /* initialize ADC paths */
5884 static void init_input_src(struct hda_codec *codec)
5886 struct hda_gen_spec *spec = codec->spec;
5887 struct hda_input_mux *imux = &spec->input_mux;
5888 struct nid_path *path;
5891 if (spec->dyn_adc_switch)
5894 nums = spec->num_adc_nids;
5896 for (c = 0; c < nums; c++) {
5897 for (i = 0; i < imux->num_items; i++) {
5898 path = get_input_path(codec, c, i);
5900 bool active = path->active;
5901 if (i == spec->cur_mux[c])
5903 snd_hda_activate_path(codec, path, active, false);
5907 update_hp_mic(codec, c, true);
5910 if (spec->cap_sync_hook)
5911 spec->cap_sync_hook(codec, NULL, NULL);
5914 /* set right pin controls for digital I/O */
5915 static void init_digital(struct hda_codec *codec)
5917 struct hda_gen_spec *spec = codec->spec;
5921 for (i = 0; i < spec->autocfg.dig_outs; i++)
5922 set_output_and_unmute(codec, spec->digout_paths[i]);
5923 pin = spec->autocfg.dig_in_pin;
5925 restore_pin_ctl(codec, pin);
5926 resume_path_from_idx(codec, spec->digin_path);
5930 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5931 * invalid unsol tags by some reason
5933 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5935 const struct hda_pincfg *pin;
5938 snd_array_for_each(&codec->init_pins, i, pin) {
5939 hda_nid_t nid = pin->nid;
5940 if (is_jack_detectable(codec, nid) &&
5941 !snd_hda_jack_tbl_get(codec, nid))
5942 snd_hda_codec_write_cache(codec, nid, 0,
5943 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5948 * snd_hda_gen_init - initialize the generic spec
5949 * @codec: the HDA codec
5951 * This can be put as patch_ops init function.
5953 int snd_hda_gen_init(struct hda_codec *codec)
5955 struct hda_gen_spec *spec = codec->spec;
5957 if (spec->init_hook)
5958 spec->init_hook(codec);
5960 if (!spec->skip_verbs)
5961 snd_hda_apply_verbs(codec);
5963 init_multi_out(codec);
5964 init_extra_out(codec);
5965 init_multi_io(codec);
5966 init_aamix_paths(codec);
5967 init_analog_input(codec);
5968 init_input_src(codec);
5969 init_digital(codec);
5971 clear_unsol_on_unused_pins(codec);
5973 sync_all_pin_power_ctls(codec);
5975 /* call init functions of standard auto-mute helpers */
5976 update_automute_all(codec);
5978 snd_hda_regmap_sync(codec);
5980 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5981 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5983 hda_call_check_power_status(codec, 0x01);
5986 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5989 * snd_hda_gen_free - free the generic spec
5990 * @codec: the HDA codec
5992 * This can be put as patch_ops free function.
5994 void snd_hda_gen_free(struct hda_codec *codec)
5996 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5997 snd_hda_gen_spec_free(codec->spec);
6001 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
6004 * snd_hda_gen_reboot_notify - Make codec enter D3 before rebooting
6005 * @codec: the HDA codec
6007 * This can be put as patch_ops reboot_notify function.
6009 void snd_hda_gen_reboot_notify(struct hda_codec *codec)
6011 /* Make the codec enter D3 to avoid spurious noises from the internal
6012 * speaker during (and after) reboot
6014 snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3);
6015 snd_hda_codec_write(codec, codec->core.afg, 0,
6016 AC_VERB_SET_POWER_STATE, AC_PWRST_D3);
6019 EXPORT_SYMBOL_GPL(snd_hda_gen_reboot_notify);
6023 * snd_hda_gen_check_power_status - check the loopback power save state
6024 * @codec: the HDA codec
6025 * @nid: NID to inspect
6027 * This can be put as patch_ops check_power_status function.
6029 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
6031 struct hda_gen_spec *spec = codec->spec;
6032 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
6034 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
6039 * the generic codec support
6042 static const struct hda_codec_ops generic_patch_ops = {
6043 .build_controls = snd_hda_gen_build_controls,
6044 .build_pcms = snd_hda_gen_build_pcms,
6045 .init = snd_hda_gen_init,
6046 .free = snd_hda_gen_free,
6047 .unsol_event = snd_hda_jack_unsol_event,
6048 .reboot_notify = snd_hda_gen_reboot_notify,
6050 .check_power_status = snd_hda_gen_check_power_status,
6055 * snd_hda_parse_generic_codec - Generic codec parser
6056 * @codec: the HDA codec
6058 static int snd_hda_parse_generic_codec(struct hda_codec *codec)
6060 struct hda_gen_spec *spec;
6063 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
6066 snd_hda_gen_spec_init(spec);
6069 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
6073 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
6077 codec->patch_ops = generic_patch_ops;
6081 snd_hda_gen_free(codec);
6085 static const struct hda_device_id snd_hda_id_generic[] = {
6086 HDA_CODEC_ENTRY(HDA_CODEC_ID_GENERIC, "Generic", snd_hda_parse_generic_codec),
6089 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_generic);
6091 static struct hda_codec_driver generic_driver = {
6092 .id = snd_hda_id_generic,
6095 module_hda_codec_driver(generic_driver);
6097 MODULE_LICENSE("GPL");
6098 MODULE_DESCRIPTION("Generic HD-audio codec parser");