2 * Universal Interface for Intel High Definition Audio Codec
4 * Generic widget tree parser
6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
8 * This driver is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This driver is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/export.h>
26 #include <linux/sort.h>
27 #include <linux/delay.h>
28 #include <linux/ctype.h>
29 #include <linux/string.h>
30 #include <linux/bitops.h>
31 #include <sound/core.h>
32 #include <sound/jack.h>
33 #include "hda_codec.h"
34 #include "hda_local.h"
35 #include "hda_auto_parser.h"
38 #include "hda_generic.h"
41 /* initialize hda_gen_spec struct */
42 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
44 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
45 snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
46 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8);
47 mutex_init(&spec->pcm_mutex);
50 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init);
52 struct snd_kcontrol_new *
53 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
54 const struct snd_kcontrol_new *temp)
56 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
61 knew->name = kstrdup(name, GFP_KERNEL);
63 knew->name = kstrdup(knew->name, GFP_KERNEL);
68 EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl);
70 static void free_kctls(struct hda_gen_spec *spec)
72 if (spec->kctls.list) {
73 struct snd_kcontrol_new *kctl = spec->kctls.list;
75 for (i = 0; i < spec->kctls.used; i++)
78 snd_array_free(&spec->kctls);
81 void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
86 snd_array_free(&spec->paths);
87 snd_array_free(&spec->loopback_list);
89 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free);
94 static void parse_user_hints(struct hda_codec *codec)
96 struct hda_gen_spec *spec = codec->spec;
99 val = snd_hda_get_bool_hint(codec, "jack_detect");
101 codec->no_jack_detect = !val;
102 val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
104 codec->inv_jack_detect = !!val;
105 val = snd_hda_get_bool_hint(codec, "trigger_sense");
107 codec->no_trigger_sense = !val;
108 val = snd_hda_get_bool_hint(codec, "inv_eapd");
110 codec->inv_eapd = !!val;
111 val = snd_hda_get_bool_hint(codec, "pcm_format_first");
113 codec->pcm_format_first = !!val;
114 val = snd_hda_get_bool_hint(codec, "sticky_stream");
116 codec->no_sticky_stream = !val;
117 val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
119 codec->spdif_status_reset = !!val;
120 val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
122 codec->pin_amp_workaround = !!val;
123 val = snd_hda_get_bool_hint(codec, "single_adc_amp");
125 codec->single_adc_amp = !!val;
127 val = snd_hda_get_bool_hint(codec, "auto_mute");
129 spec->suppress_auto_mute = !val;
130 val = snd_hda_get_bool_hint(codec, "auto_mic");
132 spec->suppress_auto_mic = !val;
133 val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
135 spec->line_in_auto_switch = !!val;
136 val = snd_hda_get_bool_hint(codec, "need_dac_fix");
138 spec->need_dac_fix = !!val;
139 val = snd_hda_get_bool_hint(codec, "primary_hp");
141 spec->no_primary_hp = !val;
142 val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
144 spec->multi_cap_vol = !!val;
145 val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
147 spec->inv_dmic_split = !!val;
148 val = snd_hda_get_bool_hint(codec, "indep_hp");
150 spec->indep_hp = !!val;
151 val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
153 spec->add_stereo_mix_input = !!val;
154 /* the following two are just for compatibility */
155 val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
157 spec->add_jack_modes = !!val;
158 val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
160 spec->add_jack_modes = !!val;
161 val = snd_hda_get_bool_hint(codec, "add_jack_modes");
163 spec->add_jack_modes = !!val;
164 val = snd_hda_get_bool_hint(codec, "power_down_unused");
166 spec->power_down_unused = !!val;
167 val = snd_hda_get_bool_hint(codec, "add_hp_mic");
169 spec->hp_mic = !!val;
170 val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
172 spec->suppress_hp_mic_detect = !val;
174 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
175 spec->mixer_nid = val;
179 * pin control value accesses
182 #define update_pin_ctl(codec, pin, val) \
183 snd_hda_codec_update_cache(codec, pin, 0, \
184 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
186 /* restore the pinctl based on the cached value */
187 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
189 update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
192 /* set the pinctl target value and write it if requested */
193 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
194 unsigned int val, bool do_write)
198 val = snd_hda_correct_pin_ctl(codec, pin, val);
199 snd_hda_codec_set_pin_target(codec, pin, val);
201 update_pin_ctl(codec, pin, val);
204 /* set pinctl target values for all given pins */
205 static void set_pin_targets(struct hda_codec *codec, int num_pins,
206 hda_nid_t *pins, unsigned int val)
209 for (i = 0; i < num_pins; i++)
210 set_pin_target(codec, pins[i], val, false);
217 /* return the position of NID in the list, or -1 if not found */
218 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
221 for (i = 0; i < nums; i++)
227 /* return true if the given NID is contained in the path */
228 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
230 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
233 static struct nid_path *get_nid_path(struct hda_codec *codec,
234 hda_nid_t from_nid, hda_nid_t to_nid,
237 struct hda_gen_spec *spec = codec->spec;
240 for (i = 0; i < spec->paths.used; i++) {
241 struct nid_path *path = snd_array_elem(&spec->paths, i);
242 if (path->depth <= 0)
244 if ((!from_nid || path->path[0] == from_nid) &&
245 (!to_nid || path->path[path->depth - 1] == to_nid)) {
247 (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
248 (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
255 /* get the path between the given NIDs;
256 * passing 0 to either @pin or @dac behaves as a wildcard
258 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
259 hda_nid_t from_nid, hda_nid_t to_nid)
261 return get_nid_path(codec, from_nid, to_nid, 0);
263 EXPORT_SYMBOL_HDA(snd_hda_get_nid_path);
265 /* get the index number corresponding to the path instance;
266 * the index starts from 1, for easier checking the invalid value
268 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
270 struct hda_gen_spec *spec = codec->spec;
271 struct nid_path *array = spec->paths.list;
274 if (!spec->paths.used)
277 if (idx < 0 || idx >= spec->paths.used)
281 EXPORT_SYMBOL_HDA(snd_hda_get_path_idx);
283 /* get the path instance corresponding to the given index number */
284 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
286 struct hda_gen_spec *spec = codec->spec;
288 if (idx <= 0 || idx > spec->paths.used)
290 return snd_array_elem(&spec->paths, idx - 1);
292 EXPORT_SYMBOL_HDA(snd_hda_get_path_from_idx);
294 /* check whether the given DAC is already found in any existing paths */
295 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
297 struct hda_gen_spec *spec = codec->spec;
300 for (i = 0; i < spec->paths.used; i++) {
301 struct nid_path *path = snd_array_elem(&spec->paths, i);
302 if (path->path[0] == nid)
308 /* check whether the given two widgets can be connected */
309 static bool is_reachable_path(struct hda_codec *codec,
310 hda_nid_t from_nid, hda_nid_t to_nid)
312 if (!from_nid || !to_nid)
314 return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
317 /* nid, dir and idx */
318 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
320 /* check whether the given ctl is already assigned in any path elements */
321 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
323 struct hda_gen_spec *spec = codec->spec;
326 val &= AMP_VAL_COMPARE_MASK;
327 for (i = 0; i < spec->paths.used; i++) {
328 struct nid_path *path = snd_array_elem(&spec->paths, i);
329 if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
335 /* check whether a control with the given (nid, dir, idx) was assigned */
336 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
337 int dir, int idx, int type)
339 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
340 return is_ctl_used(codec, val, type);
343 static void print_nid_path(const char *pfx, struct nid_path *path)
350 for (i = 0; i < path->depth; i++) {
352 sprintf(tmp, ":%02x", path->path[i]);
353 strlcat(buf, tmp, sizeof(buf));
355 snd_printdd("%s path: depth=%d %s\n", pfx, path->depth, buf);
358 /* called recursively */
359 static bool __parse_nid_path(struct hda_codec *codec,
360 hda_nid_t from_nid, hda_nid_t to_nid,
361 int anchor_nid, struct nid_path *path,
364 const hda_nid_t *conn;
367 if (to_nid == anchor_nid)
368 anchor_nid = 0; /* anchor passed */
369 else if (to_nid == (hda_nid_t)(-anchor_nid))
370 return false; /* hit the exclusive nid */
372 nums = snd_hda_get_conn_list(codec, to_nid, &conn);
373 for (i = 0; i < nums; i++) {
374 if (conn[i] != from_nid) {
375 /* special case: when from_nid is 0,
376 * try to find an empty DAC
379 get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
380 is_dac_already_used(codec, conn[i]))
383 /* anchor is not requested or already passed? */
387 if (depth >= MAX_NID_PATH_DEPTH)
389 for (i = 0; i < nums; i++) {
391 type = get_wcaps_type(get_wcaps(codec, conn[i]));
392 if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
395 if (__parse_nid_path(codec, from_nid, conn[i],
396 anchor_nid, path, depth + 1))
402 path->path[path->depth] = conn[i];
403 path->idx[path->depth + 1] = i;
404 if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
405 path->multi[path->depth + 1] = 1;
410 /* parse the widget path from the given nid to the target nid;
411 * when @from_nid is 0, try to find an empty DAC;
412 * when @anchor_nid is set to a positive value, only paths through the widget
413 * with the given value are evaluated.
414 * when @anchor_nid is set to a negative value, paths through the widget
415 * with the negative of given value are excluded, only other paths are chosen.
416 * when @anchor_nid is zero, no special handling about path selection.
418 bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
419 hda_nid_t to_nid, int anchor_nid,
420 struct nid_path *path)
422 if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
423 path->path[path->depth] = to_nid;
429 EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path);
432 * parse the path between the given NIDs and add to the path list.
433 * if no valid path is found, return NULL
436 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
437 hda_nid_t to_nid, int anchor_nid)
439 struct hda_gen_spec *spec = codec->spec;
440 struct nid_path *path;
442 if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
445 /* check whether the path has been already added */
446 path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
450 path = snd_array_new(&spec->paths);
453 memset(path, 0, sizeof(*path));
454 if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
460 EXPORT_SYMBOL_HDA(snd_hda_add_new_path);
462 /* clear the given path as invalid so that it won't be picked up later */
463 static void invalidate_nid_path(struct hda_codec *codec, int idx)
465 struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
468 memset(path, 0, sizeof(*path));
471 /* look for an empty DAC slot */
472 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
475 struct hda_gen_spec *spec = codec->spec;
479 for (i = 0; i < spec->num_all_dacs; i++) {
480 hda_nid_t nid = spec->all_dacs[i];
481 if (!nid || is_dac_already_used(codec, nid))
483 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
484 if (is_digital != cap_digital)
486 if (is_reachable_path(codec, nid, pin))
492 /* replace the channels in the composed amp value with the given number */
493 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
495 val &= ~(0x3U << 16);
500 /* check whether the widget has the given amp capability for the direction */
501 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
502 int dir, unsigned int bits)
506 if (get_wcaps(codec, nid) & (1 << (dir + 1)))
507 if (query_amp_caps(codec, nid, dir) & bits)
512 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
513 hda_nid_t nid2, int dir)
515 if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
516 return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
517 return (query_amp_caps(codec, nid1, dir) ==
518 query_amp_caps(codec, nid2, dir));
521 #define nid_has_mute(codec, nid, dir) \
522 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE)
523 #define nid_has_volume(codec, nid, dir) \
524 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
526 /* look for a widget suitable for assigning a mute switch in the path */
527 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
528 struct nid_path *path)
532 for (i = path->depth - 1; i >= 0; i--) {
533 if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
534 return path->path[i];
535 if (i != path->depth - 1 && i != 0 &&
536 nid_has_mute(codec, path->path[i], HDA_INPUT))
537 return path->path[i];
542 /* look for a widget suitable for assigning a volume ctl in the path */
543 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
544 struct nid_path *path)
548 for (i = path->depth - 1; i >= 0; i--) {
549 if (nid_has_volume(codec, path->path[i], HDA_OUTPUT))
550 return path->path[i];
556 * path activation / deactivation
559 /* can have the amp-in capability? */
560 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
562 hda_nid_t nid = path->path[idx];
563 unsigned int caps = get_wcaps(codec, nid);
564 unsigned int type = get_wcaps_type(caps);
566 if (!(caps & AC_WCAP_IN_AMP))
568 if (type == AC_WID_PIN && idx > 0) /* only for input pins */
573 /* can have the amp-out capability? */
574 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
576 hda_nid_t nid = path->path[idx];
577 unsigned int caps = get_wcaps(codec, nid);
578 unsigned int type = get_wcaps_type(caps);
580 if (!(caps & AC_WCAP_OUT_AMP))
582 if (type == AC_WID_PIN && !idx) /* only for output pins */
587 /* check whether the given (nid,dir,idx) is active */
588 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
589 unsigned int dir, unsigned int idx)
591 struct hda_gen_spec *spec = codec->spec;
594 for (n = 0; n < spec->paths.used; n++) {
595 struct nid_path *path = snd_array_elem(&spec->paths, n);
598 for (i = 0; i < path->depth; i++) {
599 if (path->path[i] == nid) {
600 if (dir == HDA_OUTPUT || path->idx[i] == idx)
609 /* get the default amp value for the target state */
610 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
611 int dir, unsigned int caps, bool enable)
613 unsigned int val = 0;
615 if (caps & AC_AMPCAP_NUM_STEPS) {
618 val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
620 if (caps & AC_AMPCAP_MUTE) {
627 /* initialize the amp value (only at the first time) */
628 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
630 unsigned int caps = query_amp_caps(codec, nid, dir);
631 int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
632 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
635 /* calculate amp value mask we can modify;
636 * if the given amp is controlled by mixers, don't touch it
638 static unsigned int get_amp_mask_to_modify(struct hda_codec *codec,
639 hda_nid_t nid, int dir, int idx,
642 unsigned int mask = 0xff;
644 if (caps & AC_AMPCAP_MUTE) {
645 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL))
648 if (caps & AC_AMPCAP_NUM_STEPS) {
649 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
650 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
656 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
657 int idx, int idx_to_check, bool enable)
660 unsigned int mask, val;
662 if (!enable && is_active_nid(codec, nid, dir, idx_to_check))
665 caps = query_amp_caps(codec, nid, dir);
666 val = get_amp_val_to_activate(codec, nid, dir, caps, enable);
667 mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps);
672 snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val);
675 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
678 hda_nid_t nid = path->path[i];
679 init_amp(codec, nid, HDA_OUTPUT, 0);
680 activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable);
683 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
684 int i, bool enable, bool add_aamix)
686 struct hda_gen_spec *spec = codec->spec;
687 const hda_nid_t *conn;
690 hda_nid_t nid = path->path[i];
692 nums = snd_hda_get_conn_list(codec, nid, &conn);
693 type = get_wcaps_type(get_wcaps(codec, nid));
694 if (type == AC_WID_PIN ||
695 (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
701 for (n = 0; n < nums; n++)
702 init_amp(codec, nid, HDA_INPUT, n);
704 /* here is a little bit tricky in comparison with activate_amp_out();
705 * when aa-mixer is available, we need to enable the path as well
707 for (n = 0; n < nums; n++) {
708 if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid))
710 activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
714 /* activate or deactivate the given path
715 * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
717 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
718 bool enable, bool add_aamix)
720 struct hda_gen_spec *spec = codec->spec;
724 path->active = false;
726 for (i = path->depth - 1; i >= 0; i--) {
727 hda_nid_t nid = path->path[i];
728 if (enable && spec->power_down_unused) {
729 /* make sure the widget is powered up */
730 if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D0))
731 snd_hda_codec_write(codec, nid, 0,
732 AC_VERB_SET_POWER_STATE,
735 if (enable && path->multi[i])
736 snd_hda_codec_write_cache(codec, nid, 0,
737 AC_VERB_SET_CONNECT_SEL,
739 if (has_amp_in(codec, path, i))
740 activate_amp_in(codec, path, i, enable, add_aamix);
741 if (has_amp_out(codec, path, i))
742 activate_amp_out(codec, path, i, enable);
748 EXPORT_SYMBOL_HDA(snd_hda_activate_path);
750 /* if the given path is inactive, put widgets into D3 (only if suitable) */
751 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
753 struct hda_gen_spec *spec = codec->spec;
757 if (!spec->power_down_unused || path->active)
760 for (i = 0; i < path->depth; i++) {
761 hda_nid_t nid = path->path[i];
762 if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3)) {
763 snd_hda_codec_write(codec, nid, 0,
764 AC_VERB_SET_POWER_STATE,
772 snd_hda_codec_read(codec, path->path[0], 0,
773 AC_VERB_GET_POWER_STATE, 0);
777 /* turn on/off EAPD on the given pin */
778 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
780 struct hda_gen_spec *spec = codec->spec;
781 if (spec->own_eapd_ctl ||
782 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
786 snd_hda_codec_update_cache(codec, pin, 0,
787 AC_VERB_SET_EAPD_BTLENABLE,
788 enable ? 0x02 : 0x00);
791 /* re-initialize the path specified by the given path index */
792 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
794 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
796 snd_hda_activate_path(codec, path, path->active, false);
801 * Helper functions for creating mixer ctl elements
809 static const struct snd_kcontrol_new control_templates[] = {
810 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
811 HDA_CODEC_MUTE(NULL, 0, 0, 0),
812 HDA_BIND_MUTE(NULL, 0, 0, 0),
815 /* add dynamic controls from template */
816 static struct snd_kcontrol_new *
817 add_control(struct hda_gen_spec *spec, int type, const char *name,
818 int cidx, unsigned long val)
820 struct snd_kcontrol_new *knew;
822 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
826 if (get_amp_nid_(val))
827 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
828 knew->private_value = val;
832 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
833 const char *pfx, const char *dir,
834 const char *sfx, int cidx, unsigned long val)
837 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
838 if (!add_control(spec, type, name, cidx, val))
843 #define add_pb_vol_ctrl(spec, type, pfx, val) \
844 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
845 #define add_pb_sw_ctrl(spec, type, pfx, val) \
846 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
847 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
848 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
849 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
850 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
852 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
853 unsigned int chs, struct nid_path *path)
858 val = path->ctls[NID_PATH_VOL_CTL];
861 val = amp_val_replace_channels(val, chs);
862 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
865 /* return the channel bits suitable for the given path->ctls[] */
866 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
869 int chs = 1; /* mono (left only) */
871 hda_nid_t nid = get_amp_nid_(path->ctls[type]);
872 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
873 chs = 3; /* stereo */
878 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
879 struct nid_path *path)
881 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
882 return add_vol_ctl(codec, pfx, cidx, chs, path);
885 /* create a mute-switch for the given mixer widget;
886 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
888 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
889 unsigned int chs, struct nid_path *path)
892 int type = HDA_CTL_WIDGET_MUTE;
896 val = path->ctls[NID_PATH_MUTE_CTL];
899 val = amp_val_replace_channels(val, chs);
900 if (get_amp_direction_(val) == HDA_INPUT) {
901 hda_nid_t nid = get_amp_nid_(val);
902 int nums = snd_hda_get_num_conns(codec, nid);
904 type = HDA_CTL_BIND_MUTE;
908 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
911 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
912 int cidx, struct nid_path *path)
914 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
915 return add_sw_ctl(codec, pfx, cidx, chs, path);
918 /* any ctl assigned to the path with the given index? */
919 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
921 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
922 return path && path->ctls[ctl_type];
925 static const char * const channel_name[4] = {
926 "Front", "Surround", "CLFE", "Side"
929 /* give some appropriate ctl name prefix for the given line out channel */
930 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
931 int *index, int ctl_type)
933 struct hda_gen_spec *spec = codec->spec;
934 struct auto_pin_cfg *cfg = &spec->autocfg;
937 if (cfg->line_outs == 1 && !spec->multi_ios &&
938 !cfg->hp_outs && !cfg->speaker_outs)
939 return spec->vmaster_mute.hook ? "PCM" : "Master";
941 /* if there is really a single DAC used in the whole output paths,
942 * use it master (or "PCM" if a vmaster hook is present)
944 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
945 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
946 return spec->vmaster_mute.hook ? "PCM" : "Master";
948 /* multi-io channels */
949 if (ch >= cfg->line_outs)
950 return channel_name[ch];
952 switch (cfg->line_out_type) {
953 case AUTO_PIN_SPEAKER_OUT:
954 /* if the primary channel vol/mute is shared with HP volume,
955 * don't name it as Speaker
957 if (!ch && cfg->hp_outs &&
958 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
960 if (cfg->line_outs == 1)
962 if (cfg->line_outs == 2)
963 return ch ? "Bass Speaker" : "Speaker";
965 case AUTO_PIN_HP_OUT:
966 /* if the primary channel vol/mute is shared with spk volume,
967 * don't name it as Headphone
969 if (!ch && cfg->speaker_outs &&
970 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
972 /* for multi-io case, only the primary out */
973 if (ch && spec->multi_ios)
979 /* for a single channel output, we don't have to name the channel */
980 if (cfg->line_outs == 1 && !spec->multi_ios)
983 if (ch >= ARRAY_SIZE(channel_name)) {
988 return channel_name[ch];
995 /* badness definition */
997 /* No primary DAC is found for the main output */
998 BAD_NO_PRIMARY_DAC = 0x10000,
999 /* No DAC is found for the extra output */
1000 BAD_NO_DAC = 0x4000,
1001 /* No possible multi-ios */
1002 BAD_MULTI_IO = 0x120,
1003 /* No individual DAC for extra output */
1004 BAD_NO_EXTRA_DAC = 0x102,
1005 /* No individual DAC for extra surrounds */
1006 BAD_NO_EXTRA_SURR_DAC = 0x101,
1007 /* Primary DAC shared with main surrounds */
1008 BAD_SHARED_SURROUND = 0x100,
1009 /* No independent HP possible */
1010 BAD_NO_INDEP_HP = 0x10,
1011 /* Primary DAC shared with main CLFE */
1012 BAD_SHARED_CLFE = 0x10,
1013 /* Primary DAC shared with extra surrounds */
1014 BAD_SHARED_EXTRA_SURROUND = 0x10,
1015 /* Volume widget is shared */
1016 BAD_SHARED_VOL = 0x10,
1019 /* look for widgets in the given path which are appropriate for
1020 * volume and mute controls, and assign the values to ctls[].
1022 * When no appropriate widget is found in the path, the badness value
1023 * is incremented depending on the situation. The function returns the
1024 * total badness for both volume and mute controls.
1026 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1033 return BAD_SHARED_VOL * 2;
1035 if (path->ctls[NID_PATH_VOL_CTL] ||
1036 path->ctls[NID_PATH_MUTE_CTL])
1037 return 0; /* already evaluated */
1039 nid = look_for_out_vol_nid(codec, path);
1041 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1042 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1043 badness += BAD_SHARED_VOL;
1045 path->ctls[NID_PATH_VOL_CTL] = val;
1047 badness += BAD_SHARED_VOL;
1048 nid = look_for_out_mute_nid(codec, path);
1050 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1051 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1052 nid_has_mute(codec, nid, HDA_OUTPUT))
1053 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1055 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1056 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1057 badness += BAD_SHARED_VOL;
1059 path->ctls[NID_PATH_MUTE_CTL] = val;
1061 badness += BAD_SHARED_VOL;
1065 const struct badness_table hda_main_out_badness = {
1066 .no_primary_dac = BAD_NO_PRIMARY_DAC,
1067 .no_dac = BAD_NO_DAC,
1068 .shared_primary = BAD_NO_PRIMARY_DAC,
1069 .shared_surr = BAD_SHARED_SURROUND,
1070 .shared_clfe = BAD_SHARED_CLFE,
1071 .shared_surr_main = BAD_SHARED_SURROUND,
1073 EXPORT_SYMBOL_HDA(hda_main_out_badness);
1075 const struct badness_table hda_extra_out_badness = {
1076 .no_primary_dac = BAD_NO_DAC,
1077 .no_dac = BAD_NO_DAC,
1078 .shared_primary = BAD_NO_EXTRA_DAC,
1079 .shared_surr = BAD_SHARED_EXTRA_SURROUND,
1080 .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1081 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1083 EXPORT_SYMBOL_HDA(hda_extra_out_badness);
1085 /* get the DAC of the primary output corresponding to the given array index */
1086 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1088 struct hda_gen_spec *spec = codec->spec;
1089 struct auto_pin_cfg *cfg = &spec->autocfg;
1091 if (cfg->line_outs > idx)
1092 return spec->private_dac_nids[idx];
1093 idx -= cfg->line_outs;
1094 if (spec->multi_ios > idx)
1095 return spec->multi_io[idx].dac;
1099 /* return the DAC if it's reachable, otherwise zero */
1100 static inline hda_nid_t try_dac(struct hda_codec *codec,
1101 hda_nid_t dac, hda_nid_t pin)
1103 return is_reachable_path(codec, dac, pin) ? dac : 0;
1106 /* try to assign DACs to pins and return the resultant badness */
1107 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1108 const hda_nid_t *pins, hda_nid_t *dacs,
1110 const struct badness_table *bad)
1112 struct hda_gen_spec *spec = codec->spec;
1120 for (i = 0; i < num_outs; i++) {
1121 struct nid_path *path;
1122 hda_nid_t pin = pins[i];
1124 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1126 badness += assign_out_path_ctls(codec, path);
1130 dacs[i] = look_for_dac(codec, pin, false);
1131 if (!dacs[i] && !i) {
1132 /* try to steal the DAC of surrounds for the front */
1133 for (j = 1; j < num_outs; j++) {
1134 if (is_reachable_path(codec, dacs[j], pin)) {
1137 invalidate_nid_path(codec, path_idx[j]);
1146 dac = try_dac(codec, get_primary_out(codec, i), pin);
1148 dac = try_dac(codec, dacs[0], pin);
1150 dac = try_dac(codec, get_primary_out(codec, i), pin);
1153 badness += bad->shared_primary;
1155 badness += bad->shared_surr;
1157 badness += bad->shared_clfe;
1158 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1159 dac = spec->private_dac_nids[0];
1160 badness += bad->shared_surr_main;
1162 badness += bad->no_primary_dac;
1164 badness += bad->no_dac;
1168 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1169 if (!path && !i && spec->mixer_nid) {
1170 /* try with aamix */
1171 path = snd_hda_add_new_path(codec, dac, pin, 0);
1175 badness += bad->no_dac;
1177 /* print_nid_path("output", path); */
1178 path->active = true;
1179 path_idx[i] = snd_hda_get_path_idx(codec, path);
1180 badness += assign_out_path_ctls(codec, path);
1187 /* return NID if the given pin has only a single connection to a certain DAC */
1188 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1190 struct hda_gen_spec *spec = codec->spec;
1192 hda_nid_t nid_found = 0;
1194 for (i = 0; i < spec->num_all_dacs; i++) {
1195 hda_nid_t nid = spec->all_dacs[i];
1196 if (!nid || is_dac_already_used(codec, nid))
1198 if (is_reachable_path(codec, nid, pin)) {
1207 /* check whether the given pin can be a multi-io pin */
1208 static bool can_be_multiio_pin(struct hda_codec *codec,
1209 unsigned int location, hda_nid_t nid)
1211 unsigned int defcfg, caps;
1213 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1214 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1216 if (location && get_defcfg_location(defcfg) != location)
1218 caps = snd_hda_query_pin_caps(codec, nid);
1219 if (!(caps & AC_PINCAP_OUT))
1224 /* count the number of input pins that are capable to be multi-io */
1225 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1227 struct hda_gen_spec *spec = codec->spec;
1228 struct auto_pin_cfg *cfg = &spec->autocfg;
1229 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1230 unsigned int location = get_defcfg_location(defcfg);
1234 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1235 for (i = 0; i < cfg->num_inputs; i++) {
1236 if (cfg->inputs[i].type != type)
1238 if (can_be_multiio_pin(codec, location,
1239 cfg->inputs[i].pin))
1249 * When hardwired is set, try to fill ony hardwired pins, and returns
1250 * zero if any pins are filled, non-zero if nothing found.
1251 * When hardwired is off, try to fill possible input pins, and returns
1252 * the badness value.
1254 static int fill_multi_ios(struct hda_codec *codec,
1255 hda_nid_t reference_pin,
1258 struct hda_gen_spec *spec = codec->spec;
1259 struct auto_pin_cfg *cfg = &spec->autocfg;
1260 int type, i, j, num_pins, old_pins;
1261 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1262 unsigned int location = get_defcfg_location(defcfg);
1264 struct nid_path *path;
1266 old_pins = spec->multi_ios;
1270 num_pins = count_multiio_pins(codec, reference_pin);
1274 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1275 for (i = 0; i < cfg->num_inputs; i++) {
1276 hda_nid_t nid = cfg->inputs[i].pin;
1279 if (cfg->inputs[i].type != type)
1281 if (!can_be_multiio_pin(codec, location, nid))
1283 for (j = 0; j < spec->multi_ios; j++) {
1284 if (nid == spec->multi_io[j].pin)
1287 if (j < spec->multi_ios)
1291 dac = get_dac_if_single(codec, nid);
1293 dac = look_for_dac(codec, nid, false);
1298 path = snd_hda_add_new_path(codec, dac, nid,
1304 /* print_nid_path("multiio", path); */
1305 spec->multi_io[spec->multi_ios].pin = nid;
1306 spec->multi_io[spec->multi_ios].dac = dac;
1307 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1308 snd_hda_get_path_idx(codec, path);
1310 if (spec->multi_ios >= 2)
1316 badness = BAD_MULTI_IO;
1317 if (old_pins == spec->multi_ios) {
1319 return 1; /* nothing found */
1321 return badness; /* no badness if nothing found */
1323 if (!hardwired && spec->multi_ios < 2) {
1324 /* cancel newly assigned paths */
1325 spec->paths.used -= spec->multi_ios - old_pins;
1326 spec->multi_ios = old_pins;
1330 /* assign volume and mute controls */
1331 for (i = old_pins; i < spec->multi_ios; i++) {
1332 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1333 badness += assign_out_path_ctls(codec, path);
1339 /* map DACs for all pins in the list if they are single connections */
1340 static bool map_singles(struct hda_codec *codec, int outs,
1341 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1343 struct hda_gen_spec *spec = codec->spec;
1346 for (i = 0; i < outs; i++) {
1347 struct nid_path *path;
1351 dac = get_dac_if_single(codec, pins[i]);
1354 path = snd_hda_add_new_path(codec, dac, pins[i],
1356 if (!path && !i && spec->mixer_nid)
1357 path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1361 /* print_nid_path("output", path); */
1362 path->active = true;
1363 path_idx[i] = snd_hda_get_path_idx(codec, path);
1369 /* create a new path including aamix if available, and return its index */
1370 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1372 struct hda_gen_spec *spec = codec->spec;
1373 struct nid_path *path;
1376 path = snd_hda_get_path_from_idx(codec, path_idx);
1377 if (!path || !path->depth ||
1378 is_nid_contained(path, spec->mixer_nid))
1380 dac = path->path[0];
1381 pin = path->path[path->depth - 1];
1382 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1384 if (dac != spec->multiout.dac_nids[0])
1385 dac = spec->multiout.dac_nids[0];
1386 else if (spec->multiout.hp_out_nid[0])
1387 dac = spec->multiout.hp_out_nid[0];
1388 else if (spec->multiout.extra_out_nid[0])
1389 dac = spec->multiout.extra_out_nid[0];
1391 path = snd_hda_add_new_path(codec, dac, pin,
1396 /* print_nid_path("output-aamix", path); */
1397 path->active = false; /* unused as default */
1398 return snd_hda_get_path_idx(codec, path);
1401 /* check whether the independent HP is available with the current config */
1402 static bool indep_hp_possible(struct hda_codec *codec)
1404 struct hda_gen_spec *spec = codec->spec;
1405 struct auto_pin_cfg *cfg = &spec->autocfg;
1406 struct nid_path *path;
1409 if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1410 idx = spec->out_paths[0];
1412 idx = spec->hp_paths[0];
1413 path = snd_hda_get_path_from_idx(codec, idx);
1417 /* assume no path conflicts unless aamix is involved */
1418 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1421 /* check whether output paths contain aamix */
1422 for (i = 0; i < cfg->line_outs; i++) {
1423 if (spec->out_paths[i] == idx)
1425 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1426 if (path && is_nid_contained(path, spec->mixer_nid))
1429 for (i = 0; i < cfg->speaker_outs; i++) {
1430 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1431 if (path && is_nid_contained(path, spec->mixer_nid))
1438 /* fill the empty entries in the dac array for speaker/hp with the
1439 * shared dac pointed by the paths
1441 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1442 hda_nid_t *dacs, int *path_idx)
1444 struct nid_path *path;
1447 for (i = 0; i < num_outs; i++) {
1450 path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1453 dacs[i] = path->path[0];
1457 /* fill in the dac_nids table from the parsed pin configuration */
1458 static int fill_and_eval_dacs(struct hda_codec *codec,
1459 bool fill_hardwired,
1460 bool fill_mio_first)
1462 struct hda_gen_spec *spec = codec->spec;
1463 struct auto_pin_cfg *cfg = &spec->autocfg;
1464 int i, err, badness;
1466 /* set num_dacs once to full for look_for_dac() */
1467 spec->multiout.num_dacs = cfg->line_outs;
1468 spec->multiout.dac_nids = spec->private_dac_nids;
1469 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1470 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1471 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1472 spec->multi_ios = 0;
1473 snd_array_free(&spec->paths);
1475 /* clear path indices */
1476 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1477 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1478 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1479 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1480 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1481 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1482 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1483 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1487 /* fill hard-wired DACs first */
1488 if (fill_hardwired) {
1491 mapped = map_singles(codec, cfg->line_outs,
1493 spec->private_dac_nids,
1495 mapped |= map_singles(codec, cfg->hp_outs,
1497 spec->multiout.hp_out_nid,
1499 mapped |= map_singles(codec, cfg->speaker_outs,
1501 spec->multiout.extra_out_nid,
1502 spec->speaker_paths);
1503 if (fill_mio_first && cfg->line_outs == 1 &&
1504 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1505 err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1512 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1513 spec->private_dac_nids, spec->out_paths,
1514 spec->main_out_badness);
1516 if (fill_mio_first &&
1517 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1518 /* try to fill multi-io first */
1519 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1522 /* we don't count badness at this stage yet */
1525 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1526 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1527 spec->multiout.hp_out_nid,
1529 spec->extra_out_badness);
1534 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1535 err = try_assign_dacs(codec, cfg->speaker_outs,
1537 spec->multiout.extra_out_nid,
1538 spec->speaker_paths,
1539 spec->extra_out_badness);
1544 if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1545 err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1551 if (spec->mixer_nid) {
1552 spec->aamix_out_paths[0] =
1553 check_aamix_out_path(codec, spec->out_paths[0]);
1554 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1555 spec->aamix_out_paths[1] =
1556 check_aamix_out_path(codec, spec->hp_paths[0]);
1557 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1558 spec->aamix_out_paths[2] =
1559 check_aamix_out_path(codec, spec->speaker_paths[0]);
1562 if (cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1563 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1564 spec->multi_ios = 1; /* give badness */
1566 /* re-count num_dacs and squash invalid entries */
1567 spec->multiout.num_dacs = 0;
1568 for (i = 0; i < cfg->line_outs; i++) {
1569 if (spec->private_dac_nids[i])
1570 spec->multiout.num_dacs++;
1572 memmove(spec->private_dac_nids + i,
1573 spec->private_dac_nids + i + 1,
1574 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1575 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1579 spec->ext_channel_count = spec->min_channel_count =
1580 spec->multiout.num_dacs * 2;
1582 if (spec->multi_ios == 2) {
1583 for (i = 0; i < 2; i++)
1584 spec->private_dac_nids[spec->multiout.num_dacs++] =
1585 spec->multi_io[i].dac;
1586 } else if (spec->multi_ios) {
1587 spec->multi_ios = 0;
1588 badness += BAD_MULTI_IO;
1591 if (spec->indep_hp && !indep_hp_possible(codec))
1592 badness += BAD_NO_INDEP_HP;
1594 /* re-fill the shared DAC for speaker / headphone */
1595 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1596 refill_shared_dacs(codec, cfg->hp_outs,
1597 spec->multiout.hp_out_nid,
1599 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1600 refill_shared_dacs(codec, cfg->speaker_outs,
1601 spec->multiout.extra_out_nid,
1602 spec->speaker_paths);
1607 #define DEBUG_BADNESS
1609 #ifdef DEBUG_BADNESS
1610 #define debug_badness snd_printdd
1612 #define debug_badness(...)
1615 #ifdef DEBUG_BADNESS
1616 static inline void print_nid_path_idx(struct hda_codec *codec,
1617 const char *pfx, int idx)
1619 struct nid_path *path;
1621 path = snd_hda_get_path_from_idx(codec, idx);
1623 print_nid_path(pfx, path);
1626 static void debug_show_configs(struct hda_codec *codec,
1627 struct auto_pin_cfg *cfg)
1629 struct hda_gen_spec *spec = codec->spec;
1630 static const char * const lo_type[3] = { "LO", "SP", "HP" };
1633 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1634 cfg->line_out_pins[0], cfg->line_out_pins[1],
1635 cfg->line_out_pins[2], cfg->line_out_pins[3],
1636 spec->multiout.dac_nids[0],
1637 spec->multiout.dac_nids[1],
1638 spec->multiout.dac_nids[2],
1639 spec->multiout.dac_nids[3],
1640 lo_type[cfg->line_out_type]);
1641 for (i = 0; i < cfg->line_outs; i++)
1642 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1643 if (spec->multi_ios > 0)
1644 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1646 spec->multi_io[0].pin, spec->multi_io[1].pin,
1647 spec->multi_io[0].dac, spec->multi_io[1].dac);
1648 for (i = 0; i < spec->multi_ios; i++)
1649 print_nid_path_idx(codec, " mio",
1650 spec->out_paths[cfg->line_outs + i]);
1652 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1653 cfg->hp_pins[0], cfg->hp_pins[1],
1654 cfg->hp_pins[2], cfg->hp_pins[3],
1655 spec->multiout.hp_out_nid[0],
1656 spec->multiout.hp_out_nid[1],
1657 spec->multiout.hp_out_nid[2],
1658 spec->multiout.hp_out_nid[3]);
1659 for (i = 0; i < cfg->hp_outs; i++)
1660 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1661 if (cfg->speaker_outs)
1662 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1663 cfg->speaker_pins[0], cfg->speaker_pins[1],
1664 cfg->speaker_pins[2], cfg->speaker_pins[3],
1665 spec->multiout.extra_out_nid[0],
1666 spec->multiout.extra_out_nid[1],
1667 spec->multiout.extra_out_nid[2],
1668 spec->multiout.extra_out_nid[3]);
1669 for (i = 0; i < cfg->speaker_outs; i++)
1670 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1671 for (i = 0; i < 3; i++)
1672 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1675 #define debug_show_configs(codec, cfg) /* NOP */
1678 /* find all available DACs of the codec */
1679 static void fill_all_dac_nids(struct hda_codec *codec)
1681 struct hda_gen_spec *spec = codec->spec;
1683 hda_nid_t nid = codec->start_nid;
1685 spec->num_all_dacs = 0;
1686 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1687 for (i = 0; i < codec->num_nodes; i++, nid++) {
1688 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1690 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1691 snd_printk(KERN_ERR "hda: Too many DACs!\n");
1694 spec->all_dacs[spec->num_all_dacs++] = nid;
1698 static int parse_output_paths(struct hda_codec *codec)
1700 struct hda_gen_spec *spec = codec->spec;
1701 struct auto_pin_cfg *cfg = &spec->autocfg;
1702 struct auto_pin_cfg *best_cfg;
1704 int best_badness = INT_MAX;
1706 bool fill_hardwired = true, fill_mio_first = true;
1707 bool best_wired = true, best_mio = true;
1708 bool hp_spk_swapped = false;
1710 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1716 badness = fill_and_eval_dacs(codec, fill_hardwired,
1722 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1723 cfg->line_out_type, fill_hardwired, fill_mio_first,
1725 debug_show_configs(codec, cfg);
1726 if (badness < best_badness) {
1727 best_badness = badness;
1729 best_wired = fill_hardwired;
1730 best_mio = fill_mio_first;
1734 fill_mio_first = !fill_mio_first;
1735 if (!fill_mio_first)
1737 fill_hardwired = !fill_hardwired;
1738 if (!fill_hardwired)
1742 hp_spk_swapped = true;
1743 if (cfg->speaker_outs > 0 &&
1744 cfg->line_out_type == AUTO_PIN_HP_OUT) {
1745 cfg->hp_outs = cfg->line_outs;
1746 memcpy(cfg->hp_pins, cfg->line_out_pins,
1747 sizeof(cfg->hp_pins));
1748 cfg->line_outs = cfg->speaker_outs;
1749 memcpy(cfg->line_out_pins, cfg->speaker_pins,
1750 sizeof(cfg->speaker_pins));
1751 cfg->speaker_outs = 0;
1752 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1753 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1754 fill_hardwired = true;
1757 if (cfg->hp_outs > 0 &&
1758 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1759 cfg->speaker_outs = cfg->line_outs;
1760 memcpy(cfg->speaker_pins, cfg->line_out_pins,
1761 sizeof(cfg->speaker_pins));
1762 cfg->line_outs = cfg->hp_outs;
1763 memcpy(cfg->line_out_pins, cfg->hp_pins,
1764 sizeof(cfg->hp_pins));
1766 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1767 cfg->line_out_type = AUTO_PIN_HP_OUT;
1768 fill_hardwired = true;
1775 debug_badness("==> restoring best_cfg\n");
1777 fill_and_eval_dacs(codec, best_wired, best_mio);
1779 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1780 cfg->line_out_type, best_wired, best_mio);
1781 debug_show_configs(codec, cfg);
1783 if (cfg->line_out_pins[0]) {
1784 struct nid_path *path;
1785 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
1787 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
1788 if (spec->vmaster_nid)
1789 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1790 HDA_OUTPUT, spec->vmaster_tlv);
1793 /* set initial pinctl targets */
1794 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
1798 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
1799 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1800 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
1801 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1802 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
1803 set_pin_targets(codec, cfg->speaker_outs,
1804 cfg->speaker_pins, val);
1807 /* clear indep_hp flag if not available */
1808 if (spec->indep_hp && !indep_hp_possible(codec))
1815 /* add playback controls from the parsed DAC table */
1816 static int create_multi_out_ctls(struct hda_codec *codec,
1817 const struct auto_pin_cfg *cfg)
1819 struct hda_gen_spec *spec = codec->spec;
1820 int i, err, noutputs;
1822 noutputs = cfg->line_outs;
1823 if (spec->multi_ios > 0 && cfg->line_outs < 3)
1824 noutputs += spec->multi_ios;
1826 for (i = 0; i < noutputs; i++) {
1829 struct nid_path *path;
1831 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1835 name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
1836 if (!name || !strcmp(name, "CLFE")) {
1838 err = add_vol_ctl(codec, "Center", 0, 1, path);
1841 err = add_vol_ctl(codec, "LFE", 0, 2, path);
1845 err = add_stereo_vol(codec, name, index, path);
1850 name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
1851 if (!name || !strcmp(name, "CLFE")) {
1852 err = add_sw_ctl(codec, "Center", 0, 1, path);
1855 err = add_sw_ctl(codec, "LFE", 0, 2, path);
1859 err = add_stereo_sw(codec, name, index, path);
1867 static int create_extra_out(struct hda_codec *codec, int path_idx,
1868 const char *pfx, int cidx)
1870 struct nid_path *path;
1873 path = snd_hda_get_path_from_idx(codec, path_idx);
1876 err = add_stereo_vol(codec, pfx, cidx, path);
1879 err = add_stereo_sw(codec, pfx, cidx, path);
1885 /* add playback controls for speaker and HP outputs */
1886 static int create_extra_outs(struct hda_codec *codec, int num_pins,
1887 const int *paths, const char *pfx)
1891 for (i = 0; i < num_pins; i++) {
1896 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
1897 name = "Bass Speaker";
1898 else if (num_pins >= 3) {
1899 snprintf(tmp, sizeof(tmp), "%s %s",
1900 pfx, channel_name[i]);
1906 err = create_extra_out(codec, paths[i], name, idx);
1913 static int create_hp_out_ctls(struct hda_codec *codec)
1915 struct hda_gen_spec *spec = codec->spec;
1916 return create_extra_outs(codec, spec->autocfg.hp_outs,
1921 static int create_speaker_out_ctls(struct hda_codec *codec)
1923 struct hda_gen_spec *spec = codec->spec;
1924 return create_extra_outs(codec, spec->autocfg.speaker_outs,
1925 spec->speaker_paths,
1930 * independent HP controls
1933 /* update HP auto-mute state too */
1934 static void update_hp_automute_hook(struct hda_codec *codec)
1936 struct hda_gen_spec *spec = codec->spec;
1938 if (spec->hp_automute_hook)
1939 spec->hp_automute_hook(codec, NULL);
1941 snd_hda_gen_hp_automute(codec, NULL);
1944 static int indep_hp_info(struct snd_kcontrol *kcontrol,
1945 struct snd_ctl_elem_info *uinfo)
1947 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
1950 static int indep_hp_get(struct snd_kcontrol *kcontrol,
1951 struct snd_ctl_elem_value *ucontrol)
1953 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1954 struct hda_gen_spec *spec = codec->spec;
1955 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
1959 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
1960 int nomix_path_idx, int mix_path_idx,
1963 static int indep_hp_put(struct snd_kcontrol *kcontrol,
1964 struct snd_ctl_elem_value *ucontrol)
1966 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1967 struct hda_gen_spec *spec = codec->spec;
1968 unsigned int select = ucontrol->value.enumerated.item[0];
1971 mutex_lock(&spec->pcm_mutex);
1972 if (spec->active_streams) {
1977 if (spec->indep_hp_enabled != select) {
1979 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
1980 dacp = &spec->private_dac_nids[0];
1982 dacp = &spec->multiout.hp_out_nid[0];
1984 /* update HP aamix paths in case it conflicts with indep HP */
1985 if (spec->have_aamix_ctl) {
1986 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
1987 update_aamix_paths(codec, spec->aamix_mode,
1989 spec->aamix_out_paths[0],
1990 spec->autocfg.line_out_type);
1992 update_aamix_paths(codec, spec->aamix_mode,
1994 spec->aamix_out_paths[1],
1998 spec->indep_hp_enabled = select;
1999 if (spec->indep_hp_enabled)
2002 *dacp = spec->alt_dac_nid;
2004 update_hp_automute_hook(codec);
2008 mutex_unlock(&spec->pcm_mutex);
2012 static const struct snd_kcontrol_new indep_hp_ctl = {
2013 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2014 .name = "Independent HP",
2015 .info = indep_hp_info,
2016 .get = indep_hp_get,
2017 .put = indep_hp_put,
2021 static int create_indep_hp_ctls(struct hda_codec *codec)
2023 struct hda_gen_spec *spec = codec->spec;
2026 if (!spec->indep_hp)
2028 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2029 dac = spec->multiout.dac_nids[0];
2031 dac = spec->multiout.hp_out_nid[0];
2037 spec->indep_hp_enabled = false;
2038 spec->alt_dac_nid = dac;
2039 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2045 * channel mode enum control
2048 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2049 struct snd_ctl_elem_info *uinfo)
2051 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2052 struct hda_gen_spec *spec = codec->spec;
2055 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2057 uinfo->value.enumerated.items = spec->multi_ios + 1;
2058 if (uinfo->value.enumerated.item > spec->multi_ios)
2059 uinfo->value.enumerated.item = spec->multi_ios;
2060 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2061 sprintf(uinfo->value.enumerated.name, "%dch", chs);
2065 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2066 struct snd_ctl_elem_value *ucontrol)
2068 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2069 struct hda_gen_spec *spec = codec->spec;
2070 ucontrol->value.enumerated.item[0] =
2071 (spec->ext_channel_count - spec->min_channel_count) / 2;
2075 static inline struct nid_path *
2076 get_multiio_path(struct hda_codec *codec, int idx)
2078 struct hda_gen_spec *spec = codec->spec;
2079 return snd_hda_get_path_from_idx(codec,
2080 spec->out_paths[spec->autocfg.line_outs + idx]);
2083 static void update_automute_all(struct hda_codec *codec);
2085 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2087 struct hda_gen_spec *spec = codec->spec;
2088 hda_nid_t nid = spec->multi_io[idx].pin;
2089 struct nid_path *path;
2091 path = get_multiio_path(codec, idx);
2095 if (path->active == output)
2099 set_pin_target(codec, nid, PIN_OUT, true);
2100 snd_hda_activate_path(codec, path, true, true);
2101 set_pin_eapd(codec, nid, true);
2103 set_pin_eapd(codec, nid, false);
2104 snd_hda_activate_path(codec, path, false, true);
2105 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2106 path_power_down_sync(codec, path);
2109 /* update jack retasking in case it modifies any of them */
2110 update_automute_all(codec);
2115 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2116 struct snd_ctl_elem_value *ucontrol)
2118 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2119 struct hda_gen_spec *spec = codec->spec;
2122 ch = ucontrol->value.enumerated.item[0];
2123 if (ch < 0 || ch > spec->multi_ios)
2125 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2127 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2128 for (i = 0; i < spec->multi_ios; i++)
2129 set_multi_io(codec, i, i < ch);
2130 spec->multiout.max_channels = max(spec->ext_channel_count,
2131 spec->const_channel_count);
2132 if (spec->need_dac_fix)
2133 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2137 static const struct snd_kcontrol_new channel_mode_enum = {
2138 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2139 .name = "Channel Mode",
2140 .info = ch_mode_info,
2145 static int create_multi_channel_mode(struct hda_codec *codec)
2147 struct hda_gen_spec *spec = codec->spec;
2149 if (spec->multi_ios > 0) {
2150 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2157 * aamix loopback enable/disable switch
2160 #define loopback_mixing_info indep_hp_info
2162 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2163 struct snd_ctl_elem_value *ucontrol)
2165 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2166 struct hda_gen_spec *spec = codec->spec;
2167 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2171 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2172 int nomix_path_idx, int mix_path_idx,
2175 struct hda_gen_spec *spec = codec->spec;
2176 struct nid_path *nomix_path, *mix_path;
2178 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2179 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2180 if (!nomix_path || !mix_path)
2183 /* if HP aamix path is driven from a different DAC and the
2184 * independent HP mode is ON, can't turn on aamix path
2186 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2187 mix_path->path[0] != spec->alt_dac_nid)
2191 snd_hda_activate_path(codec, nomix_path, false, true);
2192 snd_hda_activate_path(codec, mix_path, true, true);
2193 path_power_down_sync(codec, nomix_path);
2195 snd_hda_activate_path(codec, mix_path, false, true);
2196 snd_hda_activate_path(codec, nomix_path, true, true);
2197 path_power_down_sync(codec, mix_path);
2201 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2202 struct snd_ctl_elem_value *ucontrol)
2204 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2205 struct hda_gen_spec *spec = codec->spec;
2206 unsigned int val = ucontrol->value.enumerated.item[0];
2208 if (val == spec->aamix_mode)
2210 spec->aamix_mode = val;
2211 update_aamix_paths(codec, val, spec->out_paths[0],
2212 spec->aamix_out_paths[0],
2213 spec->autocfg.line_out_type);
2214 update_aamix_paths(codec, val, spec->hp_paths[0],
2215 spec->aamix_out_paths[1],
2217 update_aamix_paths(codec, val, spec->speaker_paths[0],
2218 spec->aamix_out_paths[2],
2219 AUTO_PIN_SPEAKER_OUT);
2223 static const struct snd_kcontrol_new loopback_mixing_enum = {
2224 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2225 .name = "Loopback Mixing",
2226 .info = loopback_mixing_info,
2227 .get = loopback_mixing_get,
2228 .put = loopback_mixing_put,
2231 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2233 struct hda_gen_spec *spec = codec->spec;
2235 if (!spec->mixer_nid)
2237 if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2238 spec->aamix_out_paths[2]))
2240 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2242 spec->have_aamix_ctl = 1;
2247 * shared headphone/mic handling
2250 static void call_update_outputs(struct hda_codec *codec);
2252 /* for shared I/O, change the pin-control accordingly */
2253 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2255 struct hda_gen_spec *spec = codec->spec;
2260 pin = spec->hp_mic_pin;
2261 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2264 val = snd_hda_codec_get_pin_target(codec, pin);
2274 val = snd_hda_get_default_vref(codec, pin);
2275 /* if the HP pin doesn't support VREF and the codec driver gives an
2276 * alternative pin, set up the VREF on that pin instead
2278 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2279 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2280 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2281 if (vref_val != AC_PINCTL_VREF_HIZ)
2282 snd_hda_set_pin_ctl_cache(codec, vref_pin,
2283 PIN_IN | (as_mic ? vref_val : 0));
2286 if (!spec->hp_mic_jack_modes) {
2291 set_pin_target(codec, pin, val, true);
2292 update_hp_automute_hook(codec);
2296 /* create a shared input with the headphone out */
2297 static int create_hp_mic(struct hda_codec *codec)
2299 struct hda_gen_spec *spec = codec->spec;
2300 struct auto_pin_cfg *cfg = &spec->autocfg;
2301 unsigned int defcfg;
2304 if (!spec->hp_mic) {
2305 if (spec->suppress_hp_mic_detect)
2307 /* automatic detection: only if no input or a single internal
2308 * input pin is found, try to detect the shared hp/mic
2310 if (cfg->num_inputs > 1)
2312 else if (cfg->num_inputs == 1) {
2313 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2314 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2319 spec->hp_mic = 0; /* clear once */
2320 if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2324 if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2325 nid = cfg->line_out_pins[0];
2326 else if (cfg->hp_outs > 0)
2327 nid = cfg->hp_pins[0];
2331 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2332 return 0; /* no input */
2334 cfg->inputs[cfg->num_inputs].pin = nid;
2335 cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2338 spec->hp_mic_pin = nid;
2339 /* we can't handle auto-mic together with HP-mic */
2340 spec->suppress_auto_mic = 1;
2341 snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid);
2349 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2351 static const char * const out_jack_texts[] = {
2352 "Line Out", "Headphone Out",
2355 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2356 struct snd_ctl_elem_info *uinfo)
2358 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2361 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2362 struct snd_ctl_elem_value *ucontrol)
2364 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2365 hda_nid_t nid = kcontrol->private_value;
2366 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2367 ucontrol->value.enumerated.item[0] = 1;
2369 ucontrol->value.enumerated.item[0] = 0;
2373 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2374 struct snd_ctl_elem_value *ucontrol)
2376 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2377 hda_nid_t nid = kcontrol->private_value;
2380 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2381 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2383 snd_hda_set_pin_ctl_cache(codec, nid, val);
2387 static const struct snd_kcontrol_new out_jack_mode_enum = {
2388 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2389 .info = out_jack_mode_info,
2390 .get = out_jack_mode_get,
2391 .put = out_jack_mode_put,
2394 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2396 struct hda_gen_spec *spec = codec->spec;
2399 for (i = 0; i < spec->kctls.used; i++) {
2400 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2401 if (!strcmp(kctl->name, name) && kctl->index == idx)
2407 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2408 char *name, size_t name_len)
2410 struct hda_gen_spec *spec = codec->spec;
2413 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2414 strlcat(name, " Jack Mode", name_len);
2416 for (; find_kctl_name(codec, name, idx); idx++)
2420 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2422 struct hda_gen_spec *spec = codec->spec;
2423 if (spec->add_jack_modes) {
2424 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2425 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2431 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2434 struct hda_gen_spec *spec = codec->spec;
2437 for (i = 0; i < num_pins; i++) {
2438 hda_nid_t pin = pins[i];
2439 if (pin == spec->hp_mic_pin) {
2440 int ret = create_hp_mic_jack_mode(codec, pin);
2445 if (get_out_jack_num_items(codec, pin) > 1) {
2446 struct snd_kcontrol_new *knew;
2448 get_jack_mode_name(codec, pin, name, sizeof(name));
2449 knew = snd_hda_gen_add_kctl(spec, name,
2450 &out_jack_mode_enum);
2453 knew->private_value = pin;
2464 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2467 static const char * const vref_texts[NUM_VREFS] = {
2468 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2469 "", "Mic 80pc Bias", "Mic 100pc Bias"
2472 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2474 unsigned int pincap;
2476 pincap = snd_hda_query_pin_caps(codec, pin);
2477 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2478 /* filter out unusual vrefs */
2479 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2483 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2484 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2486 unsigned int i, n = 0;
2488 for (i = 0; i < NUM_VREFS; i++) {
2489 if (vref_caps & (1 << i)) {
2498 /* convert back from the vref ctl index to the enum item index */
2499 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2501 unsigned int i, n = 0;
2503 for (i = 0; i < NUM_VREFS; i++) {
2506 if (vref_caps & (1 << i))
2512 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2513 struct snd_ctl_elem_info *uinfo)
2515 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2516 hda_nid_t nid = kcontrol->private_value;
2517 unsigned int vref_caps = get_vref_caps(codec, nid);
2519 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2521 /* set the right text */
2522 strcpy(uinfo->value.enumerated.name,
2523 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2527 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2528 struct snd_ctl_elem_value *ucontrol)
2530 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2531 hda_nid_t nid = kcontrol->private_value;
2532 unsigned int vref_caps = get_vref_caps(codec, nid);
2535 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2536 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2540 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2541 struct snd_ctl_elem_value *ucontrol)
2543 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2544 hda_nid_t nid = kcontrol->private_value;
2545 unsigned int vref_caps = get_vref_caps(codec, nid);
2546 unsigned int val, idx;
2548 val = snd_hda_codec_get_pin_target(codec, nid);
2549 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2550 if (idx == ucontrol->value.enumerated.item[0])
2553 val &= ~AC_PINCTL_VREFEN;
2554 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2555 snd_hda_set_pin_ctl_cache(codec, nid, val);
2559 static const struct snd_kcontrol_new in_jack_mode_enum = {
2560 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2561 .info = in_jack_mode_info,
2562 .get = in_jack_mode_get,
2563 .put = in_jack_mode_put,
2566 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2568 struct hda_gen_spec *spec = codec->spec;
2570 if (spec->add_jack_modes)
2571 nitems = hweight32(get_vref_caps(codec, pin));
2572 return nitems ? nitems : 1;
2575 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2577 struct hda_gen_spec *spec = codec->spec;
2578 struct snd_kcontrol_new *knew;
2580 unsigned int defcfg;
2582 if (pin == spec->hp_mic_pin)
2583 return 0; /* already done in create_out_jack_mode() */
2585 /* no jack mode for fixed pins */
2586 defcfg = snd_hda_codec_get_pincfg(codec, pin);
2587 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2590 /* no multiple vref caps? */
2591 if (get_in_jack_num_items(codec, pin) <= 1)
2594 get_jack_mode_name(codec, pin, name, sizeof(name));
2595 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2598 knew->private_value = pin;
2603 * HP/mic shared jack mode
2605 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2606 struct snd_ctl_elem_info *uinfo)
2608 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2609 hda_nid_t nid = kcontrol->private_value;
2610 int out_jacks = get_out_jack_num_items(codec, nid);
2611 int in_jacks = get_in_jack_num_items(codec, nid);
2612 const char *text = NULL;
2615 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2617 uinfo->value.enumerated.items = out_jacks + in_jacks;
2618 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2619 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2620 idx = uinfo->value.enumerated.item;
2621 if (idx < out_jacks) {
2623 text = out_jack_texts[idx];
2625 text = "Headphone Out";
2629 unsigned int vref_caps = get_vref_caps(codec, nid);
2630 text = vref_texts[get_vref_idx(vref_caps, idx)];
2635 strcpy(uinfo->value.enumerated.name, text);
2639 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2641 int out_jacks = get_out_jack_num_items(codec, nid);
2642 int in_jacks = get_in_jack_num_items(codec, nid);
2643 unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2646 if (val & PIN_OUT) {
2647 if (out_jacks > 1 && val == PIN_HP)
2649 } else if (val & PIN_IN) {
2652 unsigned int vref_caps = get_vref_caps(codec, nid);
2653 val &= AC_PINCTL_VREFEN;
2654 idx += cvt_from_vref_idx(vref_caps, val);
2660 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2661 struct snd_ctl_elem_value *ucontrol)
2663 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2664 hda_nid_t nid = kcontrol->private_value;
2665 ucontrol->value.enumerated.item[0] =
2666 get_cur_hp_mic_jack_mode(codec, nid);
2670 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2671 struct snd_ctl_elem_value *ucontrol)
2673 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2674 hda_nid_t nid = kcontrol->private_value;
2675 int out_jacks = get_out_jack_num_items(codec, nid);
2676 int in_jacks = get_in_jack_num_items(codec, nid);
2677 unsigned int val, oldval, idx;
2679 oldval = get_cur_hp_mic_jack_mode(codec, nid);
2680 idx = ucontrol->value.enumerated.item[0];
2684 if (idx < out_jacks) {
2686 val = idx ? PIN_HP : PIN_OUT;
2692 unsigned int vref_caps = get_vref_caps(codec, nid);
2693 val = snd_hda_codec_get_pin_target(codec, nid);
2694 val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2695 val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2697 val = snd_hda_get_default_vref(codec, nid);
2699 snd_hda_set_pin_ctl_cache(codec, nid, val);
2700 update_hp_automute_hook(codec);
2705 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2706 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2707 .info = hp_mic_jack_mode_info,
2708 .get = hp_mic_jack_mode_get,
2709 .put = hp_mic_jack_mode_put,
2712 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2714 struct hda_gen_spec *spec = codec->spec;
2715 struct snd_kcontrol_new *knew;
2717 if (get_out_jack_num_items(codec, pin) <= 1 &&
2718 get_in_jack_num_items(codec, pin) <= 1)
2719 return 0; /* no need */
2720 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2721 &hp_mic_jack_mode_enum);
2724 knew->private_value = pin;
2725 spec->hp_mic_jack_modes = 1;
2733 /* add the powersave loopback-list entry */
2734 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2736 struct hda_amp_list *list;
2738 list = snd_array_new(&spec->loopback_list);
2742 list->dir = HDA_INPUT;
2744 spec->loopback.amplist = spec->loopback_list.list;
2748 /* create input playback/capture controls for the given pin */
2749 static int new_analog_input(struct hda_codec *codec, int input_idx,
2750 hda_nid_t pin, const char *ctlname, int ctlidx,
2753 struct hda_gen_spec *spec = codec->spec;
2754 struct nid_path *path;
2758 if (!nid_has_volume(codec, mix_nid, HDA_INPUT) &&
2759 !nid_has_mute(codec, mix_nid, HDA_INPUT))
2760 return 0; /* no need for analog loopback */
2762 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2765 print_nid_path("loopback", path);
2766 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2768 idx = path->idx[path->depth - 1];
2769 if (nid_has_volume(codec, mix_nid, HDA_INPUT)) {
2770 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2771 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val);
2774 path->ctls[NID_PATH_VOL_CTL] = val;
2777 if (nid_has_mute(codec, mix_nid, HDA_INPUT)) {
2778 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2779 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val);
2782 path->ctls[NID_PATH_MUTE_CTL] = val;
2785 path->active = true;
2786 err = add_loopback_list(spec, mix_nid, idx);
2790 if (spec->mixer_nid != spec->mixer_merge_nid &&
2791 !spec->loopback_merge_path) {
2792 path = snd_hda_add_new_path(codec, spec->mixer_nid,
2793 spec->mixer_merge_nid, 0);
2795 print_nid_path("loopback-merge", path);
2796 path->active = true;
2797 spec->loopback_merge_path =
2798 snd_hda_get_path_idx(codec, path);
2805 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2807 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2808 return (pincap & AC_PINCAP_IN) != 0;
2811 /* Parse the codec tree and retrieve ADCs */
2812 static int fill_adc_nids(struct hda_codec *codec)
2814 struct hda_gen_spec *spec = codec->spec;
2816 hda_nid_t *adc_nids = spec->adc_nids;
2817 int max_nums = ARRAY_SIZE(spec->adc_nids);
2820 nid = codec->start_nid;
2821 for (i = 0; i < codec->num_nodes; i++, nid++) {
2822 unsigned int caps = get_wcaps(codec, nid);
2823 int type = get_wcaps_type(caps);
2825 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2827 adc_nids[nums] = nid;
2828 if (++nums >= max_nums)
2831 spec->num_adc_nids = nums;
2833 /* copy the detected ADCs to all_adcs[] */
2834 spec->num_all_adcs = nums;
2835 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
2840 /* filter out invalid adc_nids that don't give all active input pins;
2841 * if needed, check whether dynamic ADC-switching is available
2843 static int check_dyn_adc_switch(struct hda_codec *codec)
2845 struct hda_gen_spec *spec = codec->spec;
2846 struct hda_input_mux *imux = &spec->input_mux;
2847 unsigned int ok_bits;
2852 for (n = 0; n < spec->num_adc_nids; n++) {
2853 for (i = 0; i < imux->num_items; i++) {
2854 if (!spec->input_paths[i][n])
2857 if (i >= imux->num_items) {
2858 ok_bits |= (1 << n);
2864 /* check whether ADC-switch is possible */
2865 for (i = 0; i < imux->num_items; i++) {
2866 for (n = 0; n < spec->num_adc_nids; n++) {
2867 if (spec->input_paths[i][n]) {
2868 spec->dyn_adc_idx[i] = n;
2874 snd_printdd("hda-codec: enabling ADC switching\n");
2875 spec->dyn_adc_switch = 1;
2876 } else if (nums != spec->num_adc_nids) {
2877 /* shrink the invalid adcs and input paths */
2879 for (n = 0; n < spec->num_adc_nids; n++) {
2880 if (!(ok_bits & (1 << n)))
2883 spec->adc_nids[nums] = spec->adc_nids[n];
2884 for (i = 0; i < imux->num_items; i++) {
2885 invalidate_nid_path(codec,
2886 spec->input_paths[i][nums]);
2887 spec->input_paths[i][nums] =
2888 spec->input_paths[i][n];
2893 spec->num_adc_nids = nums;
2896 if (imux->num_items == 1 ||
2897 (imux->num_items == 2 && spec->hp_mic)) {
2898 snd_printdd("hda-codec: reducing to a single ADC\n");
2899 spec->num_adc_nids = 1; /* reduce to a single ADC */
2902 /* single index for individual volumes ctls */
2903 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
2904 spec->num_adc_nids = 1;
2909 /* parse capture source paths from the given pin and create imux items */
2910 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
2911 int cfg_idx, int num_adcs,
2912 const char *label, int anchor)
2914 struct hda_gen_spec *spec = codec->spec;
2915 struct hda_input_mux *imux = &spec->input_mux;
2916 int imux_idx = imux->num_items;
2917 bool imux_added = false;
2920 for (c = 0; c < num_adcs; c++) {
2921 struct nid_path *path;
2922 hda_nid_t adc = spec->adc_nids[c];
2924 if (!is_reachable_path(codec, pin, adc))
2926 path = snd_hda_add_new_path(codec, pin, adc, anchor);
2929 print_nid_path("input", path);
2930 spec->input_paths[imux_idx][c] =
2931 snd_hda_get_path_idx(codec, path);
2934 if (spec->hp_mic_pin == pin)
2935 spec->hp_mic_mux_idx = imux->num_items;
2936 spec->imux_pins[imux->num_items] = pin;
2937 snd_hda_add_imux_item(imux, label, cfg_idx, NULL);
2946 * create playback/capture controls for input pins
2949 /* fill the label for each input at first */
2950 static int fill_input_pin_labels(struct hda_codec *codec)
2952 struct hda_gen_spec *spec = codec->spec;
2953 const struct auto_pin_cfg *cfg = &spec->autocfg;
2956 for (i = 0; i < cfg->num_inputs; i++) {
2957 hda_nid_t pin = cfg->inputs[i].pin;
2961 if (!is_input_pin(codec, pin))
2964 label = hda_get_autocfg_input_label(codec, cfg, i);
2966 for (j = i - 1; j >= 0; j--) {
2967 if (spec->input_labels[j] &&
2968 !strcmp(spec->input_labels[j], label)) {
2969 idx = spec->input_label_idxs[j] + 1;
2974 spec->input_labels[i] = label;
2975 spec->input_label_idxs[i] = idx;
2981 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
2983 static int create_input_ctls(struct hda_codec *codec)
2985 struct hda_gen_spec *spec = codec->spec;
2986 const struct auto_pin_cfg *cfg = &spec->autocfg;
2987 hda_nid_t mixer = spec->mixer_nid;
2992 num_adcs = fill_adc_nids(codec);
2996 err = fill_input_pin_labels(codec);
3000 for (i = 0; i < cfg->num_inputs; i++) {
3003 pin = cfg->inputs[i].pin;
3004 if (!is_input_pin(codec, pin))
3008 if (cfg->inputs[i].type == AUTO_PIN_MIC)
3009 val |= snd_hda_get_default_vref(codec, pin);
3010 if (pin != spec->hp_mic_pin)
3011 set_pin_target(codec, pin, val, false);
3014 if (is_reachable_path(codec, pin, mixer)) {
3015 err = new_analog_input(codec, i, pin,
3016 spec->input_labels[i],
3017 spec->input_label_idxs[i],
3024 err = parse_capture_source(codec, pin, i, num_adcs,
3025 spec->input_labels[i], -mixer);
3029 if (spec->add_jack_modes) {
3030 err = create_in_jack_mode(codec, pin);
3036 if (mixer && spec->add_stereo_mix_input) {
3037 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3051 /* get the input path specified by the given adc and imux indices */
3052 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3054 struct hda_gen_spec *spec = codec->spec;
3055 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3059 if (spec->dyn_adc_switch)
3060 adc_idx = spec->dyn_adc_idx[imux_idx];
3061 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3065 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3068 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3071 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3072 struct snd_ctl_elem_info *uinfo)
3074 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3075 struct hda_gen_spec *spec = codec->spec;
3076 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3079 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3080 struct snd_ctl_elem_value *ucontrol)
3082 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3083 struct hda_gen_spec *spec = codec->spec;
3084 /* the ctls are created at once with multiple counts */
3085 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3087 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3091 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3092 struct snd_ctl_elem_value *ucontrol)
3094 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3095 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3096 return mux_select(codec, adc_idx,
3097 ucontrol->value.enumerated.item[0]);
3100 static const struct snd_kcontrol_new cap_src_temp = {
3101 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3102 .name = "Input Source",
3103 .info = mux_enum_info,
3104 .get = mux_enum_get,
3105 .put = mux_enum_put,
3109 * capture volume and capture switch ctls
3112 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3113 struct snd_ctl_elem_value *ucontrol);
3115 /* call the given amp update function for all amps in the imux list at once */
3116 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3117 struct snd_ctl_elem_value *ucontrol,
3118 put_call_t func, int type)
3120 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3121 struct hda_gen_spec *spec = codec->spec;
3122 const struct hda_input_mux *imux;
3123 struct nid_path *path;
3124 int i, adc_idx, err = 0;
3126 imux = &spec->input_mux;
3127 adc_idx = kcontrol->id.index;
3128 mutex_lock(&codec->control_mutex);
3129 /* we use the cache-only update at first since multiple input paths
3130 * may shared the same amp; by updating only caches, the redundant
3131 * writes to hardware can be reduced.
3133 codec->cached_write = 1;
3134 for (i = 0; i < imux->num_items; i++) {
3135 path = get_input_path(codec, adc_idx, i);
3136 if (!path || !path->ctls[type])
3138 kcontrol->private_value = path->ctls[type];
3139 err = func(kcontrol, ucontrol);
3144 codec->cached_write = 0;
3145 mutex_unlock(&codec->control_mutex);
3146 snd_hda_codec_flush_cache(codec); /* flush the updates */
3147 if (err >= 0 && spec->cap_sync_hook)
3148 spec->cap_sync_hook(codec, ucontrol);
3152 /* capture volume ctl callbacks */
3153 #define cap_vol_info snd_hda_mixer_amp_volume_info
3154 #define cap_vol_get snd_hda_mixer_amp_volume_get
3155 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3157 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3158 struct snd_ctl_elem_value *ucontrol)
3160 return cap_put_caller(kcontrol, ucontrol,
3161 snd_hda_mixer_amp_volume_put,
3165 static const struct snd_kcontrol_new cap_vol_temp = {
3166 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3167 .name = "Capture Volume",
3168 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3169 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3170 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3171 .info = cap_vol_info,
3174 .tlv = { .c = cap_vol_tlv },
3177 /* capture switch ctl callbacks */
3178 #define cap_sw_info snd_ctl_boolean_stereo_info
3179 #define cap_sw_get snd_hda_mixer_amp_switch_get
3181 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3182 struct snd_ctl_elem_value *ucontrol)
3184 return cap_put_caller(kcontrol, ucontrol,
3185 snd_hda_mixer_amp_switch_put,
3189 static const struct snd_kcontrol_new cap_sw_temp = {
3190 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3191 .name = "Capture Switch",
3192 .info = cap_sw_info,
3197 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3202 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3203 for (depth = 0; depth < 3; depth++) {
3204 if (depth >= path->depth)
3206 i = path->depth - depth - 1;
3207 nid = path->path[i];
3208 if (!path->ctls[NID_PATH_VOL_CTL]) {
3209 if (nid_has_volume(codec, nid, HDA_OUTPUT))
3210 path->ctls[NID_PATH_VOL_CTL] =
3211 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3212 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3213 int idx = path->idx[i];
3214 if (!depth && codec->single_adc_amp)
3216 path->ctls[NID_PATH_VOL_CTL] =
3217 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3220 if (!path->ctls[NID_PATH_MUTE_CTL]) {
3221 if (nid_has_mute(codec, nid, HDA_OUTPUT))
3222 path->ctls[NID_PATH_MUTE_CTL] =
3223 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3224 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3225 int idx = path->idx[i];
3226 if (!depth && codec->single_adc_amp)
3228 path->ctls[NID_PATH_MUTE_CTL] =
3229 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3236 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3238 struct hda_gen_spec *spec = codec->spec;
3239 struct auto_pin_cfg *cfg = &spec->autocfg;
3243 if (!spec->inv_dmic_split)
3245 for (i = 0; i < cfg->num_inputs; i++) {
3246 if (cfg->inputs[i].pin != nid)
3248 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3250 val = snd_hda_codec_get_pincfg(codec, nid);
3251 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3256 /* capture switch put callback for a single control with hook call */
3257 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3258 struct snd_ctl_elem_value *ucontrol)
3260 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3261 struct hda_gen_spec *spec = codec->spec;
3264 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3268 if (spec->cap_sync_hook)
3269 spec->cap_sync_hook(codec, ucontrol);
3274 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3275 int idx, bool is_switch, unsigned int ctl,
3278 struct hda_gen_spec *spec = codec->spec;
3280 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3281 const char *sfx = is_switch ? "Switch" : "Volume";
3282 unsigned int chs = inv_dmic ? 1 : 3;
3283 struct snd_kcontrol_new *knew;
3289 snprintf(tmpname, sizeof(tmpname),
3290 "%s Capture %s", label, sfx);
3292 snprintf(tmpname, sizeof(tmpname),
3294 knew = add_control(spec, type, tmpname, idx,
3295 amp_val_replace_channels(ctl, chs));
3299 knew->put = cap_single_sw_put;
3303 /* Make independent right kcontrol */
3305 snprintf(tmpname, sizeof(tmpname),
3306 "Inverted %s Capture %s", label, sfx);
3308 snprintf(tmpname, sizeof(tmpname),
3309 "Inverted Capture %s", sfx);
3310 knew = add_control(spec, type, tmpname, idx,
3311 amp_val_replace_channels(ctl, 2));
3315 knew->put = cap_single_sw_put;
3319 /* create single (and simple) capture volume and switch controls */
3320 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3321 unsigned int vol_ctl, unsigned int sw_ctl,
3325 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3328 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3334 /* create bound capture volume and switch controls */
3335 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3336 unsigned int vol_ctl, unsigned int sw_ctl)
3338 struct hda_gen_spec *spec = codec->spec;
3339 struct snd_kcontrol_new *knew;
3342 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3346 knew->private_value = vol_ctl;
3347 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3350 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3354 knew->private_value = sw_ctl;
3355 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3360 /* return the vol ctl when used first in the imux list */
3361 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3363 struct nid_path *path;
3367 path = get_input_path(codec, 0, idx);
3370 ctl = path->ctls[type];
3373 for (i = 0; i < idx - 1; i++) {
3374 path = get_input_path(codec, 0, i);
3375 if (path && path->ctls[type] == ctl)
3381 /* create individual capture volume and switch controls per input */
3382 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3384 struct hda_gen_spec *spec = codec->spec;
3385 struct hda_input_mux *imux = &spec->input_mux;
3388 for (i = 0; i < imux->num_items; i++) {
3392 idx = imux->items[i].index;
3393 if (idx >= spec->autocfg.num_inputs)
3395 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3397 for (type = 0; type < 2; type++) {
3398 err = add_single_cap_ctl(codec,
3399 spec->input_labels[idx],
3400 spec->input_label_idxs[idx],
3402 get_first_cap_ctl(codec, i, type),
3411 static int create_capture_mixers(struct hda_codec *codec)
3413 struct hda_gen_spec *spec = codec->spec;
3414 struct hda_input_mux *imux = &spec->input_mux;
3415 int i, n, nums, err;
3417 if (spec->dyn_adc_switch)
3420 nums = spec->num_adc_nids;
3422 if (!spec->auto_mic && imux->num_items > 1) {
3423 struct snd_kcontrol_new *knew;
3425 name = nums > 1 ? "Input Source" : "Capture Source";
3426 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3432 for (n = 0; n < nums; n++) {
3434 bool multi_cap_vol = spec->multi_cap_vol;
3435 bool inv_dmic = false;
3439 for (i = 0; i < imux->num_items; i++) {
3440 struct nid_path *path;
3441 path = get_input_path(codec, n, i);
3444 parse_capvol_in_path(codec, path);
3446 vol = path->ctls[NID_PATH_VOL_CTL];
3447 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3449 if (!same_amp_caps(codec, vol,
3450 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3451 multi_cap_vol = true;
3454 sw = path->ctls[NID_PATH_MUTE_CTL];
3455 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3457 if (!same_amp_caps(codec, sw,
3458 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3459 multi_cap_vol = true;
3461 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3466 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3468 else if (!multi_cap_vol)
3469 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3471 err = create_multi_cap_vol_ctl(codec);
3480 * add mic boosts if needed
3483 /* check whether the given amp is feasible as a boost volume */
3484 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3489 if (!nid_has_volume(codec, nid, dir) ||
3490 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3491 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3494 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3495 >> AC_AMPCAP_STEP_SIZE_SHIFT;
3501 /* look for a boost amp in a widget close to the pin */
3502 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3503 struct nid_path *path)
3505 unsigned int val = 0;
3509 for (depth = 0; depth < 3; depth++) {
3510 if (depth >= path->depth - 1)
3512 nid = path->path[depth];
3513 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3514 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3516 } else if (check_boost_vol(codec, nid, HDA_INPUT,
3517 path->idx[depth])) {
3518 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3527 static int parse_mic_boost(struct hda_codec *codec)
3529 struct hda_gen_spec *spec = codec->spec;
3530 struct auto_pin_cfg *cfg = &spec->autocfg;
3531 struct hda_input_mux *imux = &spec->input_mux;
3534 if (!spec->num_adc_nids)
3537 for (i = 0; i < imux->num_items; i++) {
3538 struct nid_path *path;
3541 char boost_label[44];
3543 idx = imux->items[i].index;
3544 if (idx >= imux->num_items)
3547 /* check only line-in and mic pins */
3548 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3551 path = get_input_path(codec, 0, i);
3555 val = look_for_boost_amp(codec, path);
3559 /* create a boost control */
3560 snprintf(boost_label, sizeof(boost_label),
3561 "%s Boost Volume", spec->input_labels[idx]);
3562 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3563 spec->input_label_idxs[idx], val))
3566 path->ctls[NID_PATH_BOOST_CTL] = val;
3572 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3574 static void parse_digital(struct hda_codec *codec)
3576 struct hda_gen_spec *spec = codec->spec;
3577 struct nid_path *path;
3579 hda_nid_t dig_nid, pin;
3581 /* support multiple SPDIFs; the secondary is set up as a slave */
3583 for (i = 0; i < spec->autocfg.dig_outs; i++) {
3584 pin = spec->autocfg.dig_out_pins[i];
3585 dig_nid = look_for_dac(codec, pin, true);
3588 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3591 print_nid_path("digout", path);
3592 path->active = true;
3593 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3594 set_pin_target(codec, pin, PIN_OUT, false);
3596 spec->multiout.dig_out_nid = dig_nid;
3597 spec->dig_out_type = spec->autocfg.dig_out_type[0];
3599 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3600 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3602 spec->slave_dig_outs[nums - 1] = dig_nid;
3607 if (spec->autocfg.dig_in_pin) {
3608 pin = spec->autocfg.dig_in_pin;
3609 dig_nid = codec->start_nid;
3610 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3611 unsigned int wcaps = get_wcaps(codec, dig_nid);
3612 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3614 if (!(wcaps & AC_WCAP_DIGITAL))
3616 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3618 print_nid_path("digin", path);
3619 path->active = true;
3620 spec->dig_in_nid = dig_nid;
3621 spec->digin_path = snd_hda_get_path_idx(codec, path);
3622 set_pin_target(codec, pin, PIN_IN, false);
3631 * input MUX handling
3634 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3636 /* select the given imux item; either unmute exclusively or select the route */
3637 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3640 struct hda_gen_spec *spec = codec->spec;
3641 const struct hda_input_mux *imux;
3642 struct nid_path *old_path, *path;
3644 imux = &spec->input_mux;
3645 if (!imux->num_items)
3648 if (idx >= imux->num_items)
3649 idx = imux->num_items - 1;
3650 if (spec->cur_mux[adc_idx] == idx)
3653 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3656 if (old_path->active)
3657 snd_hda_activate_path(codec, old_path, false, false);
3659 spec->cur_mux[adc_idx] = idx;
3662 update_hp_mic(codec, adc_idx, false);
3664 if (spec->dyn_adc_switch)
3665 dyn_adc_pcm_resetup(codec, idx);
3667 path = get_input_path(codec, adc_idx, idx);
3672 snd_hda_activate_path(codec, path, true, false);
3673 if (spec->cap_sync_hook)
3674 spec->cap_sync_hook(codec, NULL);
3675 path_power_down_sync(codec, old_path);
3681 * Jack detections for HP auto-mute and mic-switch
3684 /* check each pin in the given array; returns true if any of them is plugged */
3685 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
3689 for (i = 0; i < num_pins; i++) {
3690 hda_nid_t nid = pins[i];
3693 /* don't detect pins retasked as inputs */
3694 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
3696 present |= snd_hda_jack_detect(codec, nid);
3701 /* standard HP/line-out auto-mute helper */
3702 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3705 struct hda_gen_spec *spec = codec->spec;
3708 for (i = 0; i < num_pins; i++) {
3709 hda_nid_t nid = pins[i];
3710 unsigned int val, oldval;
3713 oldval = snd_hda_codec_get_pin_target(codec, nid);
3714 if (oldval & PIN_IN)
3715 continue; /* no mute for inputs */
3716 /* don't reset VREF value in case it's controlling
3717 * the amp (see alc861_fixup_asus_amp_vref_0f())
3719 if (spec->keep_vref_in_automute)
3720 val = oldval & ~PIN_HP;
3725 /* here we call update_pin_ctl() so that the pinctl is changed
3726 * without changing the pinctl target value;
3727 * the original target value will be still referred at the
3728 * init / resume again
3730 update_pin_ctl(codec, nid, val);
3731 set_pin_eapd(codec, nid, !mute);
3735 /* Toggle outputs muting */
3736 void snd_hda_gen_update_outputs(struct hda_codec *codec)
3738 struct hda_gen_spec *spec = codec->spec;
3741 /* Control HP pins/amps depending on master_mute state;
3742 * in general, HP pins/amps control should be enabled in all cases,
3743 * but currently set only for master_mute, just to be safe
3745 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3746 spec->autocfg.hp_pins, spec->master_mute);
3748 if (!spec->automute_speaker)
3751 on = spec->hp_jack_present | spec->line_jack_present;
3752 on |= spec->master_mute;
3753 spec->speaker_muted = on;
3754 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3755 spec->autocfg.speaker_pins, on);
3757 /* toggle line-out mutes if needed, too */
3758 /* if LO is a copy of either HP or Speaker, don't need to handle it */
3759 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3760 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3762 if (!spec->automute_lo)
3765 on = spec->hp_jack_present;
3766 on |= spec->master_mute;
3767 spec->line_out_muted = on;
3768 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3769 spec->autocfg.line_out_pins, on);
3771 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs);
3773 static void call_update_outputs(struct hda_codec *codec)
3775 struct hda_gen_spec *spec = codec->spec;
3776 if (spec->automute_hook)
3777 spec->automute_hook(codec);
3779 snd_hda_gen_update_outputs(codec);
3782 /* standard HP-automute helper */
3783 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3785 struct hda_gen_spec *spec = codec->spec;
3786 hda_nid_t *pins = spec->autocfg.hp_pins;
3787 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
3789 /* No detection for the first HP jack during indep-HP mode */
3790 if (spec->indep_hp_enabled) {
3795 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
3796 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3798 call_update_outputs(codec);
3800 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute);
3802 /* standard line-out-automute helper */
3803 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3805 struct hda_gen_spec *spec = codec->spec;
3807 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3809 /* check LO jack only when it's different from HP */
3810 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3813 spec->line_jack_present =
3814 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3815 spec->autocfg.line_out_pins);
3816 if (!spec->automute_speaker || !spec->detect_lo)
3818 call_update_outputs(codec);
3820 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute);
3822 /* standard mic auto-switch helper */
3823 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3825 struct hda_gen_spec *spec = codec->spec;
3828 if (!spec->auto_mic)
3831 for (i = spec->am_num_entries - 1; i > 0; i--) {
3832 hda_nid_t pin = spec->am_entry[i].pin;
3833 /* don't detect pins retasked as outputs */
3834 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3836 if (snd_hda_jack_detect(codec, pin)) {
3837 mux_select(codec, 0, spec->am_entry[i].idx);
3841 mux_select(codec, 0, spec->am_entry[0].idx);
3843 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch);
3845 /* update jack retasking */
3846 static void update_automute_all(struct hda_codec *codec)
3848 struct hda_gen_spec *spec = codec->spec;
3850 update_hp_automute_hook(codec);
3851 if (spec->line_automute_hook)
3852 spec->line_automute_hook(codec, NULL);
3854 snd_hda_gen_line_automute(codec, NULL);
3855 if (spec->mic_autoswitch_hook)
3856 spec->mic_autoswitch_hook(codec, NULL);
3858 snd_hda_gen_mic_autoswitch(codec, NULL);
3862 * Auto-Mute mode mixer enum support
3864 static int automute_mode_info(struct snd_kcontrol *kcontrol,
3865 struct snd_ctl_elem_info *uinfo)
3867 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3868 struct hda_gen_spec *spec = codec->spec;
3869 static const char * const texts3[] = {
3870 "Disabled", "Speaker Only", "Line Out+Speaker"
3873 if (spec->automute_speaker_possible && spec->automute_lo_possible)
3874 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
3875 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
3878 static int automute_mode_get(struct snd_kcontrol *kcontrol,
3879 struct snd_ctl_elem_value *ucontrol)
3881 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3882 struct hda_gen_spec *spec = codec->spec;
3883 unsigned int val = 0;
3884 if (spec->automute_speaker)
3886 if (spec->automute_lo)
3889 ucontrol->value.enumerated.item[0] = val;
3893 static int automute_mode_put(struct snd_kcontrol *kcontrol,
3894 struct snd_ctl_elem_value *ucontrol)
3896 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3897 struct hda_gen_spec *spec = codec->spec;
3899 switch (ucontrol->value.enumerated.item[0]) {
3901 if (!spec->automute_speaker && !spec->automute_lo)
3903 spec->automute_speaker = 0;
3904 spec->automute_lo = 0;
3907 if (spec->automute_speaker_possible) {
3908 if (!spec->automute_lo && spec->automute_speaker)
3910 spec->automute_speaker = 1;
3911 spec->automute_lo = 0;
3912 } else if (spec->automute_lo_possible) {
3913 if (spec->automute_lo)
3915 spec->automute_lo = 1;
3920 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
3922 if (spec->automute_speaker && spec->automute_lo)
3924 spec->automute_speaker = 1;
3925 spec->automute_lo = 1;
3930 call_update_outputs(codec);
3934 static const struct snd_kcontrol_new automute_mode_enum = {
3935 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3936 .name = "Auto-Mute Mode",
3937 .info = automute_mode_info,
3938 .get = automute_mode_get,
3939 .put = automute_mode_put,
3942 static int add_automute_mode_enum(struct hda_codec *codec)
3944 struct hda_gen_spec *spec = codec->spec;
3946 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
3952 * Check the availability of HP/line-out auto-mute;
3953 * Set up appropriately if really supported
3955 static int check_auto_mute_availability(struct hda_codec *codec)
3957 struct hda_gen_spec *spec = codec->spec;
3958 struct auto_pin_cfg *cfg = &spec->autocfg;
3962 if (spec->suppress_auto_mute)
3965 if (cfg->hp_pins[0])
3967 if (cfg->line_out_pins[0])
3969 if (cfg->speaker_pins[0])
3971 if (present < 2) /* need two different output types */
3974 if (!cfg->speaker_pins[0] &&
3975 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
3976 memcpy(cfg->speaker_pins, cfg->line_out_pins,
3977 sizeof(cfg->speaker_pins));
3978 cfg->speaker_outs = cfg->line_outs;
3981 if (!cfg->hp_pins[0] &&
3982 cfg->line_out_type == AUTO_PIN_HP_OUT) {
3983 memcpy(cfg->hp_pins, cfg->line_out_pins,
3984 sizeof(cfg->hp_pins));
3985 cfg->hp_outs = cfg->line_outs;
3988 for (i = 0; i < cfg->hp_outs; i++) {
3989 hda_nid_t nid = cfg->hp_pins[i];
3990 if (!is_jack_detectable(codec, nid))
3992 snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
3994 snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
3995 spec->hp_automute_hook ?
3996 spec->hp_automute_hook :
3997 snd_hda_gen_hp_automute);
3998 spec->detect_hp = 1;
4001 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4002 if (cfg->speaker_outs)
4003 for (i = 0; i < cfg->line_outs; i++) {
4004 hda_nid_t nid = cfg->line_out_pins[i];
4005 if (!is_jack_detectable(codec, nid))
4007 snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
4008 snd_hda_jack_detect_enable_callback(codec, nid,
4009 HDA_GEN_FRONT_EVENT,
4010 spec->line_automute_hook ?
4011 spec->line_automute_hook :
4012 snd_hda_gen_line_automute);
4013 spec->detect_lo = 1;
4015 spec->automute_lo_possible = spec->detect_hp;
4018 spec->automute_speaker_possible = cfg->speaker_outs &&
4019 (spec->detect_hp || spec->detect_lo);
4021 spec->automute_lo = spec->automute_lo_possible;
4022 spec->automute_speaker = spec->automute_speaker_possible;
4024 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4025 /* create a control for automute mode */
4026 err = add_automute_mode_enum(codec);
4033 /* check whether all auto-mic pins are valid; setup indices if OK */
4034 static bool auto_mic_check_imux(struct hda_codec *codec)
4036 struct hda_gen_spec *spec = codec->spec;
4037 const struct hda_input_mux *imux;
4040 imux = &spec->input_mux;
4041 for (i = 0; i < spec->am_num_entries; i++) {
4042 spec->am_entry[i].idx =
4043 find_idx_in_nid_list(spec->am_entry[i].pin,
4044 spec->imux_pins, imux->num_items);
4045 if (spec->am_entry[i].idx < 0)
4046 return false; /* no corresponding imux */
4049 /* we don't need the jack detection for the first pin */
4050 for (i = 1; i < spec->am_num_entries; i++)
4051 snd_hda_jack_detect_enable_callback(codec,
4052 spec->am_entry[i].pin,
4054 spec->mic_autoswitch_hook ?
4055 spec->mic_autoswitch_hook :
4056 snd_hda_gen_mic_autoswitch);
4060 static int compare_attr(const void *ap, const void *bp)
4062 const struct automic_entry *a = ap;
4063 const struct automic_entry *b = bp;
4064 return (int)(a->attr - b->attr);
4068 * Check the availability of auto-mic switch;
4069 * Set up if really supported
4071 static int check_auto_mic_availability(struct hda_codec *codec)
4073 struct hda_gen_spec *spec = codec->spec;
4074 struct auto_pin_cfg *cfg = &spec->autocfg;
4078 if (spec->suppress_auto_mic)
4083 for (i = 0; i < cfg->num_inputs; i++) {
4084 hda_nid_t nid = cfg->inputs[i].pin;
4086 attr = snd_hda_codec_get_pincfg(codec, nid);
4087 attr = snd_hda_get_input_pin_attr(attr);
4088 if (types & (1 << attr))
4089 return 0; /* already occupied */
4091 case INPUT_PIN_ATTR_INT:
4092 if (cfg->inputs[i].type != AUTO_PIN_MIC)
4093 return 0; /* invalid type */
4095 case INPUT_PIN_ATTR_UNUSED:
4096 return 0; /* invalid entry */
4098 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4099 return 0; /* invalid type */
4100 if (!spec->line_in_auto_switch &&
4101 cfg->inputs[i].type != AUTO_PIN_MIC)
4102 return 0; /* only mic is allowed */
4103 if (!is_jack_detectable(codec, nid))
4104 return 0; /* no unsol support */
4107 if (num_pins >= MAX_AUTO_MIC_PINS)
4109 types |= (1 << attr);
4110 spec->am_entry[num_pins].pin = nid;
4111 spec->am_entry[num_pins].attr = attr;
4118 spec->am_num_entries = num_pins;
4119 /* sort the am_entry in the order of attr so that the pin with a
4120 * higher attr will be selected when the jack is plugged.
4122 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4123 compare_attr, NULL);
4125 if (!auto_mic_check_imux(codec))
4129 spec->num_adc_nids = 1;
4130 spec->cur_mux[0] = spec->am_entry[0].idx;
4131 snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4132 spec->am_entry[0].pin,
4133 spec->am_entry[1].pin,
4134 spec->am_entry[2].pin);
4139 /* power_filter hook; make inactive widgets into power down */
4140 static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4142 unsigned int power_state)
4144 if (power_state != AC_PWRST_D0)
4146 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4148 if (is_active_nid(codec, nid, HDA_OUTPUT, 0))
4155 * Parse the given BIOS configuration and set up the hda_gen_spec
4157 * return 1 if successful, 0 if the proper config is not found,
4158 * or a negative error code
4160 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4161 struct auto_pin_cfg *cfg)
4163 struct hda_gen_spec *spec = codec->spec;
4166 parse_user_hints(codec);
4168 if (spec->mixer_nid && !spec->mixer_merge_nid)
4169 spec->mixer_merge_nid = spec->mixer_nid;
4171 if (cfg != &spec->autocfg) {
4172 spec->autocfg = *cfg;
4173 cfg = &spec->autocfg;
4176 if (!spec->main_out_badness)
4177 spec->main_out_badness = &hda_main_out_badness;
4178 if (!spec->extra_out_badness)
4179 spec->extra_out_badness = &hda_extra_out_badness;
4181 fill_all_dac_nids(codec);
4183 if (!cfg->line_outs) {
4184 if (cfg->dig_outs || cfg->dig_in_pin) {
4185 spec->multiout.max_channels = 2;
4186 spec->no_analog = 1;
4189 return 0; /* can't find valid BIOS pin config */
4192 if (!spec->no_primary_hp &&
4193 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4194 cfg->line_outs <= cfg->hp_outs) {
4195 /* use HP as primary out */
4196 cfg->speaker_outs = cfg->line_outs;
4197 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4198 sizeof(cfg->speaker_pins));
4199 cfg->line_outs = cfg->hp_outs;
4200 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4202 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4203 cfg->line_out_type = AUTO_PIN_HP_OUT;
4206 err = parse_output_paths(codec);
4209 err = create_multi_channel_mode(codec);
4212 err = create_multi_out_ctls(codec, cfg);
4215 err = create_hp_out_ctls(codec);
4218 err = create_speaker_out_ctls(codec);
4221 err = create_indep_hp_ctls(codec);
4224 err = create_loopback_mixing_ctl(codec);
4227 err = create_hp_mic(codec);
4230 err = create_input_ctls(codec);
4234 spec->const_channel_count = spec->ext_channel_count;
4235 /* check the multiple speaker and headphone pins */
4236 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4237 spec->const_channel_count = max(spec->const_channel_count,
4238 cfg->speaker_outs * 2);
4239 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4240 spec->const_channel_count = max(spec->const_channel_count,
4242 spec->multiout.max_channels = max(spec->ext_channel_count,
4243 spec->const_channel_count);
4245 err = check_auto_mute_availability(codec);
4249 err = check_dyn_adc_switch(codec);
4253 err = check_auto_mic_availability(codec);
4257 err = create_capture_mixers(codec);
4261 err = parse_mic_boost(codec);
4265 if (spec->add_jack_modes) {
4266 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4267 err = create_out_jack_modes(codec, cfg->line_outs,
4268 cfg->line_out_pins);
4272 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4273 err = create_out_jack_modes(codec, cfg->hp_outs,
4281 parse_digital(codec);
4283 if (spec->power_down_unused)
4284 codec->power_filter = snd_hda_gen_path_power_filter;
4286 if (!spec->no_analog && spec->beep_nid) {
4287 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4294 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config);
4298 * Build control elements
4301 /* slave controls for virtual master */
4302 static const char * const slave_pfxs[] = {
4303 "Front", "Surround", "Center", "LFE", "Side",
4304 "Headphone", "Speaker", "Mono", "Line Out",
4305 "CLFE", "Bass Speaker", "PCM",
4306 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4307 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4312 int snd_hda_gen_build_controls(struct hda_codec *codec)
4314 struct hda_gen_spec *spec = codec->spec;
4317 if (spec->kctls.used) {
4318 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4323 if (spec->multiout.dig_out_nid) {
4324 err = snd_hda_create_dig_out_ctls(codec,
4325 spec->multiout.dig_out_nid,
4326 spec->multiout.dig_out_nid,
4327 spec->pcm_rec[1].pcm_type);
4330 if (!spec->no_analog) {
4331 err = snd_hda_create_spdif_share_sw(codec,
4335 spec->multiout.share_spdif = 1;
4338 if (spec->dig_in_nid) {
4339 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4344 /* if we have no master control, let's create it */
4345 if (!spec->no_analog &&
4346 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4347 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4348 spec->vmaster_tlv, slave_pfxs,
4353 if (!spec->no_analog &&
4354 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4355 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4358 true, &spec->vmaster_mute.sw_kctl);
4361 if (spec->vmaster_mute.hook)
4362 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4363 spec->vmaster_mute_enum);
4366 free_kctls(spec); /* no longer needed */
4368 if (spec->hp_mic_pin) {
4370 int nid = spec->hp_mic_pin;
4371 err = snd_hda_jack_add_kctl(codec, nid, "Headphone Mic", 0);
4374 err = snd_hda_jack_detect_enable(codec, nid, 0);
4379 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
4385 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls);
4392 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
4393 struct hda_codec *codec,
4394 struct snd_pcm_substream *substream,
4397 struct hda_gen_spec *spec = codec->spec;
4398 if (spec->pcm_playback_hook)
4399 spec->pcm_playback_hook(hinfo, codec, substream, action);
4402 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
4403 struct hda_codec *codec,
4404 struct snd_pcm_substream *substream,
4407 struct hda_gen_spec *spec = codec->spec;
4408 if (spec->pcm_capture_hook)
4409 spec->pcm_capture_hook(hinfo, codec, substream, action);
4413 * Analog playback callbacks
4415 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
4416 struct hda_codec *codec,
4417 struct snd_pcm_substream *substream)
4419 struct hda_gen_spec *spec = codec->spec;
4422 mutex_lock(&spec->pcm_mutex);
4423 err = snd_hda_multi_out_analog_open(codec,
4424 &spec->multiout, substream,
4427 spec->active_streams |= 1 << STREAM_MULTI_OUT;
4428 call_pcm_playback_hook(hinfo, codec, substream,
4429 HDA_GEN_PCM_ACT_OPEN);
4431 mutex_unlock(&spec->pcm_mutex);
4435 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4436 struct hda_codec *codec,
4437 unsigned int stream_tag,
4438 unsigned int format,
4439 struct snd_pcm_substream *substream)
4441 struct hda_gen_spec *spec = codec->spec;
4444 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
4445 stream_tag, format, substream);
4447 call_pcm_playback_hook(hinfo, codec, substream,
4448 HDA_GEN_PCM_ACT_PREPARE);
4452 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4453 struct hda_codec *codec,
4454 struct snd_pcm_substream *substream)
4456 struct hda_gen_spec *spec = codec->spec;
4459 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
4461 call_pcm_playback_hook(hinfo, codec, substream,
4462 HDA_GEN_PCM_ACT_CLEANUP);
4466 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
4467 struct hda_codec *codec,
4468 struct snd_pcm_substream *substream)
4470 struct hda_gen_spec *spec = codec->spec;
4471 mutex_lock(&spec->pcm_mutex);
4472 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
4473 call_pcm_playback_hook(hinfo, codec, substream,
4474 HDA_GEN_PCM_ACT_CLOSE);
4475 mutex_unlock(&spec->pcm_mutex);
4479 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
4480 struct hda_codec *codec,
4481 struct snd_pcm_substream *substream)
4483 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
4487 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4488 struct hda_codec *codec,
4489 unsigned int stream_tag,
4490 unsigned int format,
4491 struct snd_pcm_substream *substream)
4493 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4494 call_pcm_capture_hook(hinfo, codec, substream,
4495 HDA_GEN_PCM_ACT_PREPARE);
4499 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4500 struct hda_codec *codec,
4501 struct snd_pcm_substream *substream)
4503 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4504 call_pcm_capture_hook(hinfo, codec, substream,
4505 HDA_GEN_PCM_ACT_CLEANUP);
4509 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
4510 struct hda_codec *codec,
4511 struct snd_pcm_substream *substream)
4513 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
4517 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
4518 struct hda_codec *codec,
4519 struct snd_pcm_substream *substream)
4521 struct hda_gen_spec *spec = codec->spec;
4524 mutex_lock(&spec->pcm_mutex);
4525 if (!spec->indep_hp_enabled)
4528 spec->active_streams |= 1 << STREAM_INDEP_HP;
4529 call_pcm_playback_hook(hinfo, codec, substream,
4530 HDA_GEN_PCM_ACT_OPEN);
4531 mutex_unlock(&spec->pcm_mutex);
4535 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
4536 struct hda_codec *codec,
4537 struct snd_pcm_substream *substream)
4539 struct hda_gen_spec *spec = codec->spec;
4540 mutex_lock(&spec->pcm_mutex);
4541 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
4542 call_pcm_playback_hook(hinfo, codec, substream,
4543 HDA_GEN_PCM_ACT_CLOSE);
4544 mutex_unlock(&spec->pcm_mutex);
4548 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4549 struct hda_codec *codec,
4550 unsigned int stream_tag,
4551 unsigned int format,
4552 struct snd_pcm_substream *substream)
4554 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4555 call_pcm_playback_hook(hinfo, codec, substream,
4556 HDA_GEN_PCM_ACT_PREPARE);
4560 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4561 struct hda_codec *codec,
4562 struct snd_pcm_substream *substream)
4564 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4565 call_pcm_playback_hook(hinfo, codec, substream,
4566 HDA_GEN_PCM_ACT_CLEANUP);
4573 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
4574 struct hda_codec *codec,
4575 struct snd_pcm_substream *substream)
4577 struct hda_gen_spec *spec = codec->spec;
4578 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
4581 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4582 struct hda_codec *codec,
4583 unsigned int stream_tag,
4584 unsigned int format,
4585 struct snd_pcm_substream *substream)
4587 struct hda_gen_spec *spec = codec->spec;
4588 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
4589 stream_tag, format, substream);
4592 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4593 struct hda_codec *codec,
4594 struct snd_pcm_substream *substream)
4596 struct hda_gen_spec *spec = codec->spec;
4597 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
4600 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
4601 struct hda_codec *codec,
4602 struct snd_pcm_substream *substream)
4604 struct hda_gen_spec *spec = codec->spec;
4605 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
4611 #define alt_capture_pcm_open capture_pcm_open
4612 #define alt_capture_pcm_close capture_pcm_close
4614 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4615 struct hda_codec *codec,
4616 unsigned int stream_tag,
4617 unsigned int format,
4618 struct snd_pcm_substream *substream)
4620 struct hda_gen_spec *spec = codec->spec;
4622 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
4623 stream_tag, 0, format);
4624 call_pcm_capture_hook(hinfo, codec, substream,
4625 HDA_GEN_PCM_ACT_PREPARE);
4629 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4630 struct hda_codec *codec,
4631 struct snd_pcm_substream *substream)
4633 struct hda_gen_spec *spec = codec->spec;
4635 snd_hda_codec_cleanup_stream(codec,
4636 spec->adc_nids[substream->number + 1]);
4637 call_pcm_capture_hook(hinfo, codec, substream,
4638 HDA_GEN_PCM_ACT_CLEANUP);
4644 static const struct hda_pcm_stream pcm_analog_playback = {
4648 /* NID is set in build_pcms */
4650 .open = playback_pcm_open,
4651 .close = playback_pcm_close,
4652 .prepare = playback_pcm_prepare,
4653 .cleanup = playback_pcm_cleanup
4657 static const struct hda_pcm_stream pcm_analog_capture = {
4661 /* NID is set in build_pcms */
4663 .open = capture_pcm_open,
4664 .close = capture_pcm_close,
4665 .prepare = capture_pcm_prepare,
4666 .cleanup = capture_pcm_cleanup
4670 static const struct hda_pcm_stream pcm_analog_alt_playback = {
4674 /* NID is set in build_pcms */
4676 .open = alt_playback_pcm_open,
4677 .close = alt_playback_pcm_close,
4678 .prepare = alt_playback_pcm_prepare,
4679 .cleanup = alt_playback_pcm_cleanup
4683 static const struct hda_pcm_stream pcm_analog_alt_capture = {
4684 .substreams = 2, /* can be overridden */
4687 /* NID is set in build_pcms */
4689 .open = alt_capture_pcm_open,
4690 .close = alt_capture_pcm_close,
4691 .prepare = alt_capture_pcm_prepare,
4692 .cleanup = alt_capture_pcm_cleanup
4696 static const struct hda_pcm_stream pcm_digital_playback = {
4700 /* NID is set in build_pcms */
4702 .open = dig_playback_pcm_open,
4703 .close = dig_playback_pcm_close,
4704 .prepare = dig_playback_pcm_prepare,
4705 .cleanup = dig_playback_pcm_cleanup
4709 static const struct hda_pcm_stream pcm_digital_capture = {
4713 /* NID is set in build_pcms */
4716 /* Used by build_pcms to flag that a PCM has no playback stream */
4717 static const struct hda_pcm_stream pcm_null_stream = {
4724 * dynamic changing ADC PCM streams
4726 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
4728 struct hda_gen_spec *spec = codec->spec;
4729 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
4731 if (spec->cur_adc && spec->cur_adc != new_adc) {
4732 /* stream is running, let's swap the current ADC */
4733 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
4734 spec->cur_adc = new_adc;
4735 snd_hda_codec_setup_stream(codec, new_adc,
4736 spec->cur_adc_stream_tag, 0,
4737 spec->cur_adc_format);
4743 /* analog capture with dynamic dual-adc changes */
4744 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4745 struct hda_codec *codec,
4746 unsigned int stream_tag,
4747 unsigned int format,
4748 struct snd_pcm_substream *substream)
4750 struct hda_gen_spec *spec = codec->spec;
4751 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
4752 spec->cur_adc_stream_tag = stream_tag;
4753 spec->cur_adc_format = format;
4754 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
4758 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4759 struct hda_codec *codec,
4760 struct snd_pcm_substream *substream)
4762 struct hda_gen_spec *spec = codec->spec;
4763 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
4768 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
4772 .nid = 0, /* fill later */
4774 .prepare = dyn_adc_capture_pcm_prepare,
4775 .cleanup = dyn_adc_capture_pcm_cleanup
4779 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
4780 const char *chip_name)
4786 strlcpy(str, chip_name, len);
4788 /* drop non-alnum chars after a space */
4789 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
4790 if (!isalnum(p[1])) {
4795 strlcat(str, sfx, len);
4798 /* build PCM streams based on the parsed results */
4799 int snd_hda_gen_build_pcms(struct hda_codec *codec)
4801 struct hda_gen_spec *spec = codec->spec;
4802 struct hda_pcm *info = spec->pcm_rec;
4803 const struct hda_pcm_stream *p;
4804 bool have_multi_adcs;
4806 codec->num_pcms = 1;
4807 codec->pcm_info = info;
4809 if (spec->no_analog)
4812 fill_pcm_stream_name(spec->stream_name_analog,
4813 sizeof(spec->stream_name_analog),
4814 " Analog", codec->chip_name);
4815 info->name = spec->stream_name_analog;
4817 if (spec->multiout.num_dacs > 0) {
4818 p = spec->stream_analog_playback;
4820 p = &pcm_analog_playback;
4821 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4822 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
4823 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
4824 spec->multiout.max_channels;
4825 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
4826 spec->autocfg.line_outs == 2)
4827 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
4830 if (spec->num_adc_nids) {
4831 p = spec->stream_analog_capture;
4833 if (spec->dyn_adc_switch)
4834 p = &dyn_adc_pcm_analog_capture;
4836 p = &pcm_analog_capture;
4838 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4839 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
4843 /* SPDIF for stream index #1 */
4844 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
4845 fill_pcm_stream_name(spec->stream_name_digital,
4846 sizeof(spec->stream_name_digital),
4847 " Digital", codec->chip_name);
4848 codec->num_pcms = 2;
4849 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
4850 info = spec->pcm_rec + 1;
4851 info->name = spec->stream_name_digital;
4852 if (spec->dig_out_type)
4853 info->pcm_type = spec->dig_out_type;
4855 info->pcm_type = HDA_PCM_TYPE_SPDIF;
4856 if (spec->multiout.dig_out_nid) {
4857 p = spec->stream_digital_playback;
4859 p = &pcm_digital_playback;
4860 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4861 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
4863 if (spec->dig_in_nid) {
4864 p = spec->stream_digital_capture;
4866 p = &pcm_digital_capture;
4867 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4868 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
4872 if (spec->no_analog)
4875 /* If the use of more than one ADC is requested for the current
4876 * model, configure a second analog capture-only PCM.
4878 have_multi_adcs = (spec->num_adc_nids > 1) &&
4879 !spec->dyn_adc_switch && !spec->auto_mic;
4880 /* Additional Analaog capture for index #2 */
4881 if (spec->alt_dac_nid || have_multi_adcs) {
4882 fill_pcm_stream_name(spec->stream_name_alt_analog,
4883 sizeof(spec->stream_name_alt_analog),
4884 " Alt Analog", codec->chip_name);
4885 codec->num_pcms = 3;
4886 info = spec->pcm_rec + 2;
4887 info->name = spec->stream_name_alt_analog;
4888 if (spec->alt_dac_nid) {
4889 p = spec->stream_analog_alt_playback;
4891 p = &pcm_analog_alt_playback;
4892 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4893 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
4896 info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
4898 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
4900 if (have_multi_adcs) {
4901 p = spec->stream_analog_alt_capture;
4903 p = &pcm_analog_alt_capture;
4904 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4905 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
4907 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
4908 spec->num_adc_nids - 1;
4910 info->stream[SNDRV_PCM_STREAM_CAPTURE] =
4912 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
4918 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
4922 * Standard auto-parser initializations
4925 /* configure the given path as a proper output */
4926 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
4928 struct nid_path *path;
4931 path = snd_hda_get_path_from_idx(codec, path_idx);
4932 if (!path || !path->depth)
4934 pin = path->path[path->depth - 1];
4935 restore_pin_ctl(codec, pin);
4936 snd_hda_activate_path(codec, path, path->active, true);
4937 set_pin_eapd(codec, pin, path->active);
4940 /* initialize primary output paths */
4941 static void init_multi_out(struct hda_codec *codec)
4943 struct hda_gen_spec *spec = codec->spec;
4946 for (i = 0; i < spec->autocfg.line_outs; i++)
4947 set_output_and_unmute(codec, spec->out_paths[i]);
4951 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
4955 for (i = 0; i < num_outs; i++)
4956 set_output_and_unmute(codec, paths[i]);
4959 /* initialize hp and speaker paths */
4960 static void init_extra_out(struct hda_codec *codec)
4962 struct hda_gen_spec *spec = codec->spec;
4964 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
4965 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
4966 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
4967 __init_extra_out(codec, spec->autocfg.speaker_outs,
4968 spec->speaker_paths);
4971 /* initialize multi-io paths */
4972 static void init_multi_io(struct hda_codec *codec)
4974 struct hda_gen_spec *spec = codec->spec;
4977 for (i = 0; i < spec->multi_ios; i++) {
4978 hda_nid_t pin = spec->multi_io[i].pin;
4979 struct nid_path *path;
4980 path = get_multiio_path(codec, i);
4983 if (!spec->multi_io[i].ctl_in)
4984 spec->multi_io[i].ctl_in =
4985 snd_hda_codec_get_pin_target(codec, pin);
4986 snd_hda_activate_path(codec, path, path->active, true);
4990 /* set up input pins and loopback paths */
4991 static void init_analog_input(struct hda_codec *codec)
4993 struct hda_gen_spec *spec = codec->spec;
4994 struct auto_pin_cfg *cfg = &spec->autocfg;
4997 for (i = 0; i < cfg->num_inputs; i++) {
4998 hda_nid_t nid = cfg->inputs[i].pin;
4999 if (is_input_pin(codec, nid))
5000 restore_pin_ctl(codec, nid);
5002 /* init loopback inputs */
5003 if (spec->mixer_nid) {
5004 resume_path_from_idx(codec, spec->loopback_paths[i]);
5005 resume_path_from_idx(codec, spec->loopback_merge_path);
5010 /* initialize ADC paths */
5011 static void init_input_src(struct hda_codec *codec)
5013 struct hda_gen_spec *spec = codec->spec;
5014 struct hda_input_mux *imux = &spec->input_mux;
5015 struct nid_path *path;
5018 if (spec->dyn_adc_switch)
5021 nums = spec->num_adc_nids;
5023 for (c = 0; c < nums; c++) {
5024 for (i = 0; i < imux->num_items; i++) {
5025 path = get_input_path(codec, c, i);
5027 bool active = path->active;
5028 if (i == spec->cur_mux[c])
5030 snd_hda_activate_path(codec, path, active, false);
5034 update_hp_mic(codec, c, true);
5037 if (spec->cap_sync_hook)
5038 spec->cap_sync_hook(codec, NULL);
5041 /* set right pin controls for digital I/O */
5042 static void init_digital(struct hda_codec *codec)
5044 struct hda_gen_spec *spec = codec->spec;
5048 for (i = 0; i < spec->autocfg.dig_outs; i++)
5049 set_output_and_unmute(codec, spec->digout_paths[i]);
5050 pin = spec->autocfg.dig_in_pin;
5052 restore_pin_ctl(codec, pin);
5053 resume_path_from_idx(codec, spec->digin_path);
5057 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5058 * invalid unsol tags by some reason
5060 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5064 for (i = 0; i < codec->init_pins.used; i++) {
5065 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5066 hda_nid_t nid = pin->nid;
5067 if (is_jack_detectable(codec, nid) &&
5068 !snd_hda_jack_tbl_get(codec, nid))
5069 snd_hda_codec_update_cache(codec, nid, 0,
5070 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5075 * initialize the generic spec;
5076 * this can be put as patch_ops.init function
5078 int snd_hda_gen_init(struct hda_codec *codec)
5080 struct hda_gen_spec *spec = codec->spec;
5082 if (spec->init_hook)
5083 spec->init_hook(codec);
5085 snd_hda_apply_verbs(codec);
5087 codec->cached_write = 1;
5089 init_multi_out(codec);
5090 init_extra_out(codec);
5091 init_multi_io(codec);
5092 init_analog_input(codec);
5093 init_input_src(codec);
5094 init_digital(codec);
5096 clear_unsol_on_unused_pins(codec);
5098 /* call init functions of standard auto-mute helpers */
5099 update_automute_all(codec);
5101 snd_hda_codec_flush_cache(codec);
5103 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5104 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5106 hda_call_check_power_status(codec, 0x01);
5109 EXPORT_SYMBOL_HDA(snd_hda_gen_init);
5112 * free the generic spec;
5113 * this can be put as patch_ops.free function
5115 void snd_hda_gen_free(struct hda_codec *codec)
5117 snd_hda_detach_beep_device(codec);
5118 snd_hda_gen_spec_free(codec->spec);
5122 EXPORT_SYMBOL_HDA(snd_hda_gen_free);
5126 * check the loopback power save state;
5127 * this can be put as patch_ops.check_power_status function
5129 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5131 struct hda_gen_spec *spec = codec->spec;
5132 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5134 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status);
5139 * the generic codec support
5142 static const struct hda_codec_ops generic_patch_ops = {
5143 .build_controls = snd_hda_gen_build_controls,
5144 .build_pcms = snd_hda_gen_build_pcms,
5145 .init = snd_hda_gen_init,
5146 .free = snd_hda_gen_free,
5147 .unsol_event = snd_hda_jack_unsol_event,
5149 .check_power_status = snd_hda_gen_check_power_status,
5153 int snd_hda_parse_generic_codec(struct hda_codec *codec)
5155 struct hda_gen_spec *spec;
5158 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5161 snd_hda_gen_spec_init(spec);
5164 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5168 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5172 codec->patch_ops = generic_patch_ops;
5176 snd_hda_gen_free(codec);
5179 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec);