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;
2336 cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2339 spec->hp_mic_pin = nid;
2340 /* we can't handle auto-mic together with HP-mic */
2341 spec->suppress_auto_mic = 1;
2342 snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid);
2350 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2352 static const char * const out_jack_texts[] = {
2353 "Line Out", "Headphone Out",
2356 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2357 struct snd_ctl_elem_info *uinfo)
2359 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2362 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2363 struct snd_ctl_elem_value *ucontrol)
2365 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2366 hda_nid_t nid = kcontrol->private_value;
2367 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2368 ucontrol->value.enumerated.item[0] = 1;
2370 ucontrol->value.enumerated.item[0] = 0;
2374 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2375 struct snd_ctl_elem_value *ucontrol)
2377 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2378 hda_nid_t nid = kcontrol->private_value;
2381 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2382 if (snd_hda_codec_get_pin_target(codec, nid) == val)
2384 snd_hda_set_pin_ctl_cache(codec, nid, val);
2388 static const struct snd_kcontrol_new out_jack_mode_enum = {
2389 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2390 .info = out_jack_mode_info,
2391 .get = out_jack_mode_get,
2392 .put = out_jack_mode_put,
2395 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2397 struct hda_gen_spec *spec = codec->spec;
2400 for (i = 0; i < spec->kctls.used; i++) {
2401 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2402 if (!strcmp(kctl->name, name) && kctl->index == idx)
2408 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2409 char *name, size_t name_len)
2411 struct hda_gen_spec *spec = codec->spec;
2414 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2415 strlcat(name, " Jack Mode", name_len);
2417 for (; find_kctl_name(codec, name, idx); idx++)
2421 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2423 struct hda_gen_spec *spec = codec->spec;
2424 if (spec->add_jack_modes) {
2425 unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2426 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2432 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2435 struct hda_gen_spec *spec = codec->spec;
2438 for (i = 0; i < num_pins; i++) {
2439 hda_nid_t pin = pins[i];
2440 if (pin == spec->hp_mic_pin) {
2441 int ret = create_hp_mic_jack_mode(codec, pin);
2446 if (get_out_jack_num_items(codec, pin) > 1) {
2447 struct snd_kcontrol_new *knew;
2449 get_jack_mode_name(codec, pin, name, sizeof(name));
2450 knew = snd_hda_gen_add_kctl(spec, name,
2451 &out_jack_mode_enum);
2454 knew->private_value = pin;
2465 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2468 static const char * const vref_texts[NUM_VREFS] = {
2469 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2470 "", "Mic 80pc Bias", "Mic 100pc Bias"
2473 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2475 unsigned int pincap;
2477 pincap = snd_hda_query_pin_caps(codec, pin);
2478 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2479 /* filter out unusual vrefs */
2480 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2484 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2485 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2487 unsigned int i, n = 0;
2489 for (i = 0; i < NUM_VREFS; i++) {
2490 if (vref_caps & (1 << i)) {
2499 /* convert back from the vref ctl index to the enum item index */
2500 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2502 unsigned int i, n = 0;
2504 for (i = 0; i < NUM_VREFS; i++) {
2507 if (vref_caps & (1 << i))
2513 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2514 struct snd_ctl_elem_info *uinfo)
2516 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2517 hda_nid_t nid = kcontrol->private_value;
2518 unsigned int vref_caps = get_vref_caps(codec, nid);
2520 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2522 /* set the right text */
2523 strcpy(uinfo->value.enumerated.name,
2524 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2528 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2529 struct snd_ctl_elem_value *ucontrol)
2531 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2532 hda_nid_t nid = kcontrol->private_value;
2533 unsigned int vref_caps = get_vref_caps(codec, nid);
2536 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2537 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2541 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2542 struct snd_ctl_elem_value *ucontrol)
2544 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2545 hda_nid_t nid = kcontrol->private_value;
2546 unsigned int vref_caps = get_vref_caps(codec, nid);
2547 unsigned int val, idx;
2549 val = snd_hda_codec_get_pin_target(codec, nid);
2550 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2551 if (idx == ucontrol->value.enumerated.item[0])
2554 val &= ~AC_PINCTL_VREFEN;
2555 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2556 snd_hda_set_pin_ctl_cache(codec, nid, val);
2560 static const struct snd_kcontrol_new in_jack_mode_enum = {
2561 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2562 .info = in_jack_mode_info,
2563 .get = in_jack_mode_get,
2564 .put = in_jack_mode_put,
2567 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2569 struct hda_gen_spec *spec = codec->spec;
2571 if (spec->add_jack_modes)
2572 nitems = hweight32(get_vref_caps(codec, pin));
2573 return nitems ? nitems : 1;
2576 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2578 struct hda_gen_spec *spec = codec->spec;
2579 struct snd_kcontrol_new *knew;
2581 unsigned int defcfg;
2583 if (pin == spec->hp_mic_pin)
2584 return 0; /* already done in create_out_jack_mode() */
2586 /* no jack mode for fixed pins */
2587 defcfg = snd_hda_codec_get_pincfg(codec, pin);
2588 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2591 /* no multiple vref caps? */
2592 if (get_in_jack_num_items(codec, pin) <= 1)
2595 get_jack_mode_name(codec, pin, name, sizeof(name));
2596 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2599 knew->private_value = pin;
2604 * HP/mic shared jack mode
2606 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2607 struct snd_ctl_elem_info *uinfo)
2609 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2610 hda_nid_t nid = kcontrol->private_value;
2611 int out_jacks = get_out_jack_num_items(codec, nid);
2612 int in_jacks = get_in_jack_num_items(codec, nid);
2613 const char *text = NULL;
2616 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2618 uinfo->value.enumerated.items = out_jacks + in_jacks;
2619 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2620 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2621 idx = uinfo->value.enumerated.item;
2622 if (idx < out_jacks) {
2624 text = out_jack_texts[idx];
2626 text = "Headphone Out";
2630 unsigned int vref_caps = get_vref_caps(codec, nid);
2631 text = vref_texts[get_vref_idx(vref_caps, idx)];
2636 strcpy(uinfo->value.enumerated.name, text);
2640 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2642 int out_jacks = get_out_jack_num_items(codec, nid);
2643 int in_jacks = get_in_jack_num_items(codec, nid);
2644 unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2647 if (val & PIN_OUT) {
2648 if (out_jacks > 1 && val == PIN_HP)
2650 } else if (val & PIN_IN) {
2653 unsigned int vref_caps = get_vref_caps(codec, nid);
2654 val &= AC_PINCTL_VREFEN;
2655 idx += cvt_from_vref_idx(vref_caps, val);
2661 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2662 struct snd_ctl_elem_value *ucontrol)
2664 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2665 hda_nid_t nid = kcontrol->private_value;
2666 ucontrol->value.enumerated.item[0] =
2667 get_cur_hp_mic_jack_mode(codec, nid);
2671 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2672 struct snd_ctl_elem_value *ucontrol)
2674 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2675 hda_nid_t nid = kcontrol->private_value;
2676 int out_jacks = get_out_jack_num_items(codec, nid);
2677 int in_jacks = get_in_jack_num_items(codec, nid);
2678 unsigned int val, oldval, idx;
2680 oldval = get_cur_hp_mic_jack_mode(codec, nid);
2681 idx = ucontrol->value.enumerated.item[0];
2685 if (idx < out_jacks) {
2687 val = idx ? PIN_HP : PIN_OUT;
2693 unsigned int vref_caps = get_vref_caps(codec, nid);
2694 val = snd_hda_codec_get_pin_target(codec, nid);
2695 val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2696 val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2698 val = snd_hda_get_default_vref(codec, nid);
2700 snd_hda_set_pin_ctl_cache(codec, nid, val);
2701 update_hp_automute_hook(codec);
2706 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2707 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2708 .info = hp_mic_jack_mode_info,
2709 .get = hp_mic_jack_mode_get,
2710 .put = hp_mic_jack_mode_put,
2713 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2715 struct hda_gen_spec *spec = codec->spec;
2716 struct snd_kcontrol_new *knew;
2718 if (get_out_jack_num_items(codec, pin) <= 1 &&
2719 get_in_jack_num_items(codec, pin) <= 1)
2720 return 0; /* no need */
2721 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2722 &hp_mic_jack_mode_enum);
2725 knew->private_value = pin;
2726 spec->hp_mic_jack_modes = 1;
2734 /* add the powersave loopback-list entry */
2735 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2737 struct hda_amp_list *list;
2739 list = snd_array_new(&spec->loopback_list);
2743 list->dir = HDA_INPUT;
2745 spec->loopback.amplist = spec->loopback_list.list;
2749 /* create input playback/capture controls for the given pin */
2750 static int new_analog_input(struct hda_codec *codec, int input_idx,
2751 hda_nid_t pin, const char *ctlname, int ctlidx,
2754 struct hda_gen_spec *spec = codec->spec;
2755 struct nid_path *path;
2759 if (!nid_has_volume(codec, mix_nid, HDA_INPUT) &&
2760 !nid_has_mute(codec, mix_nid, HDA_INPUT))
2761 return 0; /* no need for analog loopback */
2763 path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2766 print_nid_path("loopback", path);
2767 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2769 idx = path->idx[path->depth - 1];
2770 if (nid_has_volume(codec, mix_nid, HDA_INPUT)) {
2771 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2772 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val);
2775 path->ctls[NID_PATH_VOL_CTL] = val;
2778 if (nid_has_mute(codec, mix_nid, HDA_INPUT)) {
2779 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2780 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val);
2783 path->ctls[NID_PATH_MUTE_CTL] = val;
2786 path->active = true;
2787 err = add_loopback_list(spec, mix_nid, idx);
2791 if (spec->mixer_nid != spec->mixer_merge_nid &&
2792 !spec->loopback_merge_path) {
2793 path = snd_hda_add_new_path(codec, spec->mixer_nid,
2794 spec->mixer_merge_nid, 0);
2796 print_nid_path("loopback-merge", path);
2797 path->active = true;
2798 spec->loopback_merge_path =
2799 snd_hda_get_path_idx(codec, path);
2806 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2808 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2809 return (pincap & AC_PINCAP_IN) != 0;
2812 /* Parse the codec tree and retrieve ADCs */
2813 static int fill_adc_nids(struct hda_codec *codec)
2815 struct hda_gen_spec *spec = codec->spec;
2817 hda_nid_t *adc_nids = spec->adc_nids;
2818 int max_nums = ARRAY_SIZE(spec->adc_nids);
2821 nid = codec->start_nid;
2822 for (i = 0; i < codec->num_nodes; i++, nid++) {
2823 unsigned int caps = get_wcaps(codec, nid);
2824 int type = get_wcaps_type(caps);
2826 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2828 adc_nids[nums] = nid;
2829 if (++nums >= max_nums)
2832 spec->num_adc_nids = nums;
2834 /* copy the detected ADCs to all_adcs[] */
2835 spec->num_all_adcs = nums;
2836 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
2841 /* filter out invalid adc_nids that don't give all active input pins;
2842 * if needed, check whether dynamic ADC-switching is available
2844 static int check_dyn_adc_switch(struct hda_codec *codec)
2846 struct hda_gen_spec *spec = codec->spec;
2847 struct hda_input_mux *imux = &spec->input_mux;
2848 unsigned int ok_bits;
2853 for (n = 0; n < spec->num_adc_nids; n++) {
2854 for (i = 0; i < imux->num_items; i++) {
2855 if (!spec->input_paths[i][n])
2858 if (i >= imux->num_items) {
2859 ok_bits |= (1 << n);
2865 /* check whether ADC-switch is possible */
2866 for (i = 0; i < imux->num_items; i++) {
2867 for (n = 0; n < spec->num_adc_nids; n++) {
2868 if (spec->input_paths[i][n]) {
2869 spec->dyn_adc_idx[i] = n;
2875 snd_printdd("hda-codec: enabling ADC switching\n");
2876 spec->dyn_adc_switch = 1;
2877 } else if (nums != spec->num_adc_nids) {
2878 /* shrink the invalid adcs and input paths */
2880 for (n = 0; n < spec->num_adc_nids; n++) {
2881 if (!(ok_bits & (1 << n)))
2884 spec->adc_nids[nums] = spec->adc_nids[n];
2885 for (i = 0; i < imux->num_items; i++) {
2886 invalidate_nid_path(codec,
2887 spec->input_paths[i][nums]);
2888 spec->input_paths[i][nums] =
2889 spec->input_paths[i][n];
2894 spec->num_adc_nids = nums;
2897 if (imux->num_items == 1 ||
2898 (imux->num_items == 2 && spec->hp_mic)) {
2899 snd_printdd("hda-codec: reducing to a single ADC\n");
2900 spec->num_adc_nids = 1; /* reduce to a single ADC */
2903 /* single index for individual volumes ctls */
2904 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
2905 spec->num_adc_nids = 1;
2910 /* parse capture source paths from the given pin and create imux items */
2911 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
2912 int cfg_idx, int num_adcs,
2913 const char *label, int anchor)
2915 struct hda_gen_spec *spec = codec->spec;
2916 struct hda_input_mux *imux = &spec->input_mux;
2917 int imux_idx = imux->num_items;
2918 bool imux_added = false;
2921 for (c = 0; c < num_adcs; c++) {
2922 struct nid_path *path;
2923 hda_nid_t adc = spec->adc_nids[c];
2925 if (!is_reachable_path(codec, pin, adc))
2927 path = snd_hda_add_new_path(codec, pin, adc, anchor);
2930 print_nid_path("input", path);
2931 spec->input_paths[imux_idx][c] =
2932 snd_hda_get_path_idx(codec, path);
2935 if (spec->hp_mic_pin == pin)
2936 spec->hp_mic_mux_idx = imux->num_items;
2937 spec->imux_pins[imux->num_items] = pin;
2938 snd_hda_add_imux_item(imux, label, cfg_idx, NULL);
2947 * create playback/capture controls for input pins
2950 /* fill the label for each input at first */
2951 static int fill_input_pin_labels(struct hda_codec *codec)
2953 struct hda_gen_spec *spec = codec->spec;
2954 const struct auto_pin_cfg *cfg = &spec->autocfg;
2957 for (i = 0; i < cfg->num_inputs; i++) {
2958 hda_nid_t pin = cfg->inputs[i].pin;
2962 if (!is_input_pin(codec, pin))
2965 label = hda_get_autocfg_input_label(codec, cfg, i);
2967 for (j = i - 1; j >= 0; j--) {
2968 if (spec->input_labels[j] &&
2969 !strcmp(spec->input_labels[j], label)) {
2970 idx = spec->input_label_idxs[j] + 1;
2975 spec->input_labels[i] = label;
2976 spec->input_label_idxs[i] = idx;
2982 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
2984 static int create_input_ctls(struct hda_codec *codec)
2986 struct hda_gen_spec *spec = codec->spec;
2987 const struct auto_pin_cfg *cfg = &spec->autocfg;
2988 hda_nid_t mixer = spec->mixer_nid;
2993 num_adcs = fill_adc_nids(codec);
2997 err = fill_input_pin_labels(codec);
3001 for (i = 0; i < cfg->num_inputs; i++) {
3004 pin = cfg->inputs[i].pin;
3005 if (!is_input_pin(codec, pin))
3009 if (cfg->inputs[i].type == AUTO_PIN_MIC)
3010 val |= snd_hda_get_default_vref(codec, pin);
3011 if (pin != spec->hp_mic_pin)
3012 set_pin_target(codec, pin, val, false);
3015 if (is_reachable_path(codec, pin, mixer)) {
3016 err = new_analog_input(codec, i, pin,
3017 spec->input_labels[i],
3018 spec->input_label_idxs[i],
3025 err = parse_capture_source(codec, pin, i, num_adcs,
3026 spec->input_labels[i], -mixer);
3030 if (spec->add_jack_modes) {
3031 err = create_in_jack_mode(codec, pin);
3037 if (mixer && spec->add_stereo_mix_input) {
3038 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3052 /* get the input path specified by the given adc and imux indices */
3053 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3055 struct hda_gen_spec *spec = codec->spec;
3056 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3060 if (spec->dyn_adc_switch)
3061 adc_idx = spec->dyn_adc_idx[imux_idx];
3062 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3066 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3069 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3072 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3073 struct snd_ctl_elem_info *uinfo)
3075 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3076 struct hda_gen_spec *spec = codec->spec;
3077 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3080 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3081 struct snd_ctl_elem_value *ucontrol)
3083 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3084 struct hda_gen_spec *spec = codec->spec;
3085 /* the ctls are created at once with multiple counts */
3086 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3088 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3092 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3093 struct snd_ctl_elem_value *ucontrol)
3095 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3096 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3097 return mux_select(codec, adc_idx,
3098 ucontrol->value.enumerated.item[0]);
3101 static const struct snd_kcontrol_new cap_src_temp = {
3102 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3103 .name = "Input Source",
3104 .info = mux_enum_info,
3105 .get = mux_enum_get,
3106 .put = mux_enum_put,
3110 * capture volume and capture switch ctls
3113 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3114 struct snd_ctl_elem_value *ucontrol);
3116 /* call the given amp update function for all amps in the imux list at once */
3117 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3118 struct snd_ctl_elem_value *ucontrol,
3119 put_call_t func, int type)
3121 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3122 struct hda_gen_spec *spec = codec->spec;
3123 const struct hda_input_mux *imux;
3124 struct nid_path *path;
3125 int i, adc_idx, err = 0;
3127 imux = &spec->input_mux;
3128 adc_idx = kcontrol->id.index;
3129 mutex_lock(&codec->control_mutex);
3130 /* we use the cache-only update at first since multiple input paths
3131 * may shared the same amp; by updating only caches, the redundant
3132 * writes to hardware can be reduced.
3134 codec->cached_write = 1;
3135 for (i = 0; i < imux->num_items; i++) {
3136 path = get_input_path(codec, adc_idx, i);
3137 if (!path || !path->ctls[type])
3139 kcontrol->private_value = path->ctls[type];
3140 err = func(kcontrol, ucontrol);
3145 codec->cached_write = 0;
3146 mutex_unlock(&codec->control_mutex);
3147 snd_hda_codec_flush_cache(codec); /* flush the updates */
3148 if (err >= 0 && spec->cap_sync_hook)
3149 spec->cap_sync_hook(codec, ucontrol);
3153 /* capture volume ctl callbacks */
3154 #define cap_vol_info snd_hda_mixer_amp_volume_info
3155 #define cap_vol_get snd_hda_mixer_amp_volume_get
3156 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3158 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3159 struct snd_ctl_elem_value *ucontrol)
3161 return cap_put_caller(kcontrol, ucontrol,
3162 snd_hda_mixer_amp_volume_put,
3166 static const struct snd_kcontrol_new cap_vol_temp = {
3167 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3168 .name = "Capture Volume",
3169 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3170 SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3171 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3172 .info = cap_vol_info,
3175 .tlv = { .c = cap_vol_tlv },
3178 /* capture switch ctl callbacks */
3179 #define cap_sw_info snd_ctl_boolean_stereo_info
3180 #define cap_sw_get snd_hda_mixer_amp_switch_get
3182 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3183 struct snd_ctl_elem_value *ucontrol)
3185 return cap_put_caller(kcontrol, ucontrol,
3186 snd_hda_mixer_amp_switch_put,
3190 static const struct snd_kcontrol_new cap_sw_temp = {
3191 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3192 .name = "Capture Switch",
3193 .info = cap_sw_info,
3198 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3203 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3204 for (depth = 0; depth < 3; depth++) {
3205 if (depth >= path->depth)
3207 i = path->depth - depth - 1;
3208 nid = path->path[i];
3209 if (!path->ctls[NID_PATH_VOL_CTL]) {
3210 if (nid_has_volume(codec, nid, HDA_OUTPUT))
3211 path->ctls[NID_PATH_VOL_CTL] =
3212 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3213 else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3214 int idx = path->idx[i];
3215 if (!depth && codec->single_adc_amp)
3217 path->ctls[NID_PATH_VOL_CTL] =
3218 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3221 if (!path->ctls[NID_PATH_MUTE_CTL]) {
3222 if (nid_has_mute(codec, nid, HDA_OUTPUT))
3223 path->ctls[NID_PATH_MUTE_CTL] =
3224 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3225 else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3226 int idx = path->idx[i];
3227 if (!depth && codec->single_adc_amp)
3229 path->ctls[NID_PATH_MUTE_CTL] =
3230 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3237 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3239 struct hda_gen_spec *spec = codec->spec;
3240 struct auto_pin_cfg *cfg = &spec->autocfg;
3244 if (!spec->inv_dmic_split)
3246 for (i = 0; i < cfg->num_inputs; i++) {
3247 if (cfg->inputs[i].pin != nid)
3249 if (cfg->inputs[i].type != AUTO_PIN_MIC)
3251 val = snd_hda_codec_get_pincfg(codec, nid);
3252 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3257 /* capture switch put callback for a single control with hook call */
3258 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3259 struct snd_ctl_elem_value *ucontrol)
3261 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3262 struct hda_gen_spec *spec = codec->spec;
3265 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3269 if (spec->cap_sync_hook)
3270 spec->cap_sync_hook(codec, ucontrol);
3275 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3276 int idx, bool is_switch, unsigned int ctl,
3279 struct hda_gen_spec *spec = codec->spec;
3281 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3282 const char *sfx = is_switch ? "Switch" : "Volume";
3283 unsigned int chs = inv_dmic ? 1 : 3;
3284 struct snd_kcontrol_new *knew;
3290 snprintf(tmpname, sizeof(tmpname),
3291 "%s Capture %s", label, sfx);
3293 snprintf(tmpname, sizeof(tmpname),
3295 knew = add_control(spec, type, tmpname, idx,
3296 amp_val_replace_channels(ctl, chs));
3300 knew->put = cap_single_sw_put;
3304 /* Make independent right kcontrol */
3306 snprintf(tmpname, sizeof(tmpname),
3307 "Inverted %s Capture %s", label, sfx);
3309 snprintf(tmpname, sizeof(tmpname),
3310 "Inverted Capture %s", sfx);
3311 knew = add_control(spec, type, tmpname, idx,
3312 amp_val_replace_channels(ctl, 2));
3316 knew->put = cap_single_sw_put;
3320 /* create single (and simple) capture volume and switch controls */
3321 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3322 unsigned int vol_ctl, unsigned int sw_ctl,
3326 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3329 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3335 /* create bound capture volume and switch controls */
3336 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3337 unsigned int vol_ctl, unsigned int sw_ctl)
3339 struct hda_gen_spec *spec = codec->spec;
3340 struct snd_kcontrol_new *knew;
3343 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3347 knew->private_value = vol_ctl;
3348 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3351 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3355 knew->private_value = sw_ctl;
3356 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3361 /* return the vol ctl when used first in the imux list */
3362 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3364 struct nid_path *path;
3368 path = get_input_path(codec, 0, idx);
3371 ctl = path->ctls[type];
3374 for (i = 0; i < idx - 1; i++) {
3375 path = get_input_path(codec, 0, i);
3376 if (path && path->ctls[type] == ctl)
3382 /* create individual capture volume and switch controls per input */
3383 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3385 struct hda_gen_spec *spec = codec->spec;
3386 struct hda_input_mux *imux = &spec->input_mux;
3389 for (i = 0; i < imux->num_items; i++) {
3393 idx = imux->items[i].index;
3394 if (idx >= spec->autocfg.num_inputs)
3396 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3398 for (type = 0; type < 2; type++) {
3399 err = add_single_cap_ctl(codec,
3400 spec->input_labels[idx],
3401 spec->input_label_idxs[idx],
3403 get_first_cap_ctl(codec, i, type),
3412 static int create_capture_mixers(struct hda_codec *codec)
3414 struct hda_gen_spec *spec = codec->spec;
3415 struct hda_input_mux *imux = &spec->input_mux;
3416 int i, n, nums, err;
3418 if (spec->dyn_adc_switch)
3421 nums = spec->num_adc_nids;
3423 if (!spec->auto_mic && imux->num_items > 1) {
3424 struct snd_kcontrol_new *knew;
3426 name = nums > 1 ? "Input Source" : "Capture Source";
3427 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3433 for (n = 0; n < nums; n++) {
3435 bool multi_cap_vol = spec->multi_cap_vol;
3436 bool inv_dmic = false;
3440 for (i = 0; i < imux->num_items; i++) {
3441 struct nid_path *path;
3442 path = get_input_path(codec, n, i);
3445 parse_capvol_in_path(codec, path);
3447 vol = path->ctls[NID_PATH_VOL_CTL];
3448 else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3450 if (!same_amp_caps(codec, vol,
3451 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3452 multi_cap_vol = true;
3455 sw = path->ctls[NID_PATH_MUTE_CTL];
3456 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3458 if (!same_amp_caps(codec, sw,
3459 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3460 multi_cap_vol = true;
3462 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3467 err = create_single_cap_vol_ctl(codec, n, vol, sw,
3469 else if (!multi_cap_vol)
3470 err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3472 err = create_multi_cap_vol_ctl(codec);
3481 * add mic boosts if needed
3484 /* check whether the given amp is feasible as a boost volume */
3485 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3490 if (!nid_has_volume(codec, nid, dir) ||
3491 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3492 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3495 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3496 >> AC_AMPCAP_STEP_SIZE_SHIFT;
3502 /* look for a boost amp in a widget close to the pin */
3503 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3504 struct nid_path *path)
3506 unsigned int val = 0;
3510 for (depth = 0; depth < 3; depth++) {
3511 if (depth >= path->depth - 1)
3513 nid = path->path[depth];
3514 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3515 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3517 } else if (check_boost_vol(codec, nid, HDA_INPUT,
3518 path->idx[depth])) {
3519 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3528 static int parse_mic_boost(struct hda_codec *codec)
3530 struct hda_gen_spec *spec = codec->spec;
3531 struct auto_pin_cfg *cfg = &spec->autocfg;
3532 struct hda_input_mux *imux = &spec->input_mux;
3535 if (!spec->num_adc_nids)
3538 for (i = 0; i < imux->num_items; i++) {
3539 struct nid_path *path;
3542 char boost_label[44];
3544 idx = imux->items[i].index;
3545 if (idx >= imux->num_items)
3548 /* check only line-in and mic pins */
3549 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3552 path = get_input_path(codec, 0, i);
3556 val = look_for_boost_amp(codec, path);
3560 /* create a boost control */
3561 snprintf(boost_label, sizeof(boost_label),
3562 "%s Boost Volume", spec->input_labels[idx]);
3563 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3564 spec->input_label_idxs[idx], val))
3567 path->ctls[NID_PATH_BOOST_CTL] = val;
3573 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3575 static void parse_digital(struct hda_codec *codec)
3577 struct hda_gen_spec *spec = codec->spec;
3578 struct nid_path *path;
3580 hda_nid_t dig_nid, pin;
3582 /* support multiple SPDIFs; the secondary is set up as a slave */
3584 for (i = 0; i < spec->autocfg.dig_outs; i++) {
3585 pin = spec->autocfg.dig_out_pins[i];
3586 dig_nid = look_for_dac(codec, pin, true);
3589 path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3592 print_nid_path("digout", path);
3593 path->active = true;
3594 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3595 set_pin_target(codec, pin, PIN_OUT, false);
3597 spec->multiout.dig_out_nid = dig_nid;
3598 spec->dig_out_type = spec->autocfg.dig_out_type[0];
3600 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3601 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3603 spec->slave_dig_outs[nums - 1] = dig_nid;
3608 if (spec->autocfg.dig_in_pin) {
3609 pin = spec->autocfg.dig_in_pin;
3610 dig_nid = codec->start_nid;
3611 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3612 unsigned int wcaps = get_wcaps(codec, dig_nid);
3613 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3615 if (!(wcaps & AC_WCAP_DIGITAL))
3617 path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3619 print_nid_path("digin", path);
3620 path->active = true;
3621 spec->dig_in_nid = dig_nid;
3622 spec->digin_path = snd_hda_get_path_idx(codec, path);
3623 set_pin_target(codec, pin, PIN_IN, false);
3632 * input MUX handling
3635 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3637 /* select the given imux item; either unmute exclusively or select the route */
3638 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3641 struct hda_gen_spec *spec = codec->spec;
3642 const struct hda_input_mux *imux;
3643 struct nid_path *old_path, *path;
3645 imux = &spec->input_mux;
3646 if (!imux->num_items)
3649 if (idx >= imux->num_items)
3650 idx = imux->num_items - 1;
3651 if (spec->cur_mux[adc_idx] == idx)
3654 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3657 if (old_path->active)
3658 snd_hda_activate_path(codec, old_path, false, false);
3660 spec->cur_mux[adc_idx] = idx;
3663 update_hp_mic(codec, adc_idx, false);
3665 if (spec->dyn_adc_switch)
3666 dyn_adc_pcm_resetup(codec, idx);
3668 path = get_input_path(codec, adc_idx, idx);
3673 snd_hda_activate_path(codec, path, true, false);
3674 if (spec->cap_sync_hook)
3675 spec->cap_sync_hook(codec, NULL);
3676 path_power_down_sync(codec, old_path);
3682 * Jack detections for HP auto-mute and mic-switch
3685 /* check each pin in the given array; returns true if any of them is plugged */
3686 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
3690 for (i = 0; i < num_pins; i++) {
3691 hda_nid_t nid = pins[i];
3694 /* don't detect pins retasked as inputs */
3695 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
3697 present |= snd_hda_jack_detect(codec, nid);
3702 /* standard HP/line-out auto-mute helper */
3703 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3706 struct hda_gen_spec *spec = codec->spec;
3709 for (i = 0; i < num_pins; i++) {
3710 hda_nid_t nid = pins[i];
3711 unsigned int val, oldval;
3714 oldval = snd_hda_codec_get_pin_target(codec, nid);
3715 if (oldval & PIN_IN)
3716 continue; /* no mute for inputs */
3717 /* don't reset VREF value in case it's controlling
3718 * the amp (see alc861_fixup_asus_amp_vref_0f())
3720 if (spec->keep_vref_in_automute)
3721 val = oldval & ~PIN_HP;
3726 /* here we call update_pin_ctl() so that the pinctl is changed
3727 * without changing the pinctl target value;
3728 * the original target value will be still referred at the
3729 * init / resume again
3731 update_pin_ctl(codec, nid, val);
3732 set_pin_eapd(codec, nid, !mute);
3736 /* Toggle outputs muting */
3737 void snd_hda_gen_update_outputs(struct hda_codec *codec)
3739 struct hda_gen_spec *spec = codec->spec;
3742 /* Control HP pins/amps depending on master_mute state;
3743 * in general, HP pins/amps control should be enabled in all cases,
3744 * but currently set only for master_mute, just to be safe
3746 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3747 spec->autocfg.hp_pins, spec->master_mute);
3749 if (!spec->automute_speaker)
3752 on = spec->hp_jack_present | spec->line_jack_present;
3753 on |= spec->master_mute;
3754 spec->speaker_muted = on;
3755 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3756 spec->autocfg.speaker_pins, on);
3758 /* toggle line-out mutes if needed, too */
3759 /* if LO is a copy of either HP or Speaker, don't need to handle it */
3760 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3761 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3763 if (!spec->automute_lo)
3766 on = spec->hp_jack_present;
3767 on |= spec->master_mute;
3768 spec->line_out_muted = on;
3769 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3770 spec->autocfg.line_out_pins, on);
3772 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs);
3774 static void call_update_outputs(struct hda_codec *codec)
3776 struct hda_gen_spec *spec = codec->spec;
3777 if (spec->automute_hook)
3778 spec->automute_hook(codec);
3780 snd_hda_gen_update_outputs(codec);
3783 /* standard HP-automute helper */
3784 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3786 struct hda_gen_spec *spec = codec->spec;
3787 hda_nid_t *pins = spec->autocfg.hp_pins;
3788 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
3790 /* No detection for the first HP jack during indep-HP mode */
3791 if (spec->indep_hp_enabled) {
3796 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
3797 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3799 call_update_outputs(codec);
3801 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute);
3803 /* standard line-out-automute helper */
3804 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3806 struct hda_gen_spec *spec = codec->spec;
3808 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3810 /* check LO jack only when it's different from HP */
3811 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3814 spec->line_jack_present =
3815 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3816 spec->autocfg.line_out_pins);
3817 if (!spec->automute_speaker || !spec->detect_lo)
3819 call_update_outputs(codec);
3821 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute);
3823 /* standard mic auto-switch helper */
3824 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3826 struct hda_gen_spec *spec = codec->spec;
3829 if (!spec->auto_mic)
3832 for (i = spec->am_num_entries - 1; i > 0; i--) {
3833 hda_nid_t pin = spec->am_entry[i].pin;
3834 /* don't detect pins retasked as outputs */
3835 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3837 if (snd_hda_jack_detect(codec, pin)) {
3838 mux_select(codec, 0, spec->am_entry[i].idx);
3842 mux_select(codec, 0, spec->am_entry[0].idx);
3844 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch);
3846 /* update jack retasking */
3847 static void update_automute_all(struct hda_codec *codec)
3849 struct hda_gen_spec *spec = codec->spec;
3851 update_hp_automute_hook(codec);
3852 if (spec->line_automute_hook)
3853 spec->line_automute_hook(codec, NULL);
3855 snd_hda_gen_line_automute(codec, NULL);
3856 if (spec->mic_autoswitch_hook)
3857 spec->mic_autoswitch_hook(codec, NULL);
3859 snd_hda_gen_mic_autoswitch(codec, NULL);
3863 * Auto-Mute mode mixer enum support
3865 static int automute_mode_info(struct snd_kcontrol *kcontrol,
3866 struct snd_ctl_elem_info *uinfo)
3868 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3869 struct hda_gen_spec *spec = codec->spec;
3870 static const char * const texts3[] = {
3871 "Disabled", "Speaker Only", "Line Out+Speaker"
3874 if (spec->automute_speaker_possible && spec->automute_lo_possible)
3875 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
3876 return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
3879 static int automute_mode_get(struct snd_kcontrol *kcontrol,
3880 struct snd_ctl_elem_value *ucontrol)
3882 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3883 struct hda_gen_spec *spec = codec->spec;
3884 unsigned int val = 0;
3885 if (spec->automute_speaker)
3887 if (spec->automute_lo)
3890 ucontrol->value.enumerated.item[0] = val;
3894 static int automute_mode_put(struct snd_kcontrol *kcontrol,
3895 struct snd_ctl_elem_value *ucontrol)
3897 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3898 struct hda_gen_spec *spec = codec->spec;
3900 switch (ucontrol->value.enumerated.item[0]) {
3902 if (!spec->automute_speaker && !spec->automute_lo)
3904 spec->automute_speaker = 0;
3905 spec->automute_lo = 0;
3908 if (spec->automute_speaker_possible) {
3909 if (!spec->automute_lo && spec->automute_speaker)
3911 spec->automute_speaker = 1;
3912 spec->automute_lo = 0;
3913 } else if (spec->automute_lo_possible) {
3914 if (spec->automute_lo)
3916 spec->automute_lo = 1;
3921 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
3923 if (spec->automute_speaker && spec->automute_lo)
3925 spec->automute_speaker = 1;
3926 spec->automute_lo = 1;
3931 call_update_outputs(codec);
3935 static const struct snd_kcontrol_new automute_mode_enum = {
3936 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3937 .name = "Auto-Mute Mode",
3938 .info = automute_mode_info,
3939 .get = automute_mode_get,
3940 .put = automute_mode_put,
3943 static int add_automute_mode_enum(struct hda_codec *codec)
3945 struct hda_gen_spec *spec = codec->spec;
3947 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
3953 * Check the availability of HP/line-out auto-mute;
3954 * Set up appropriately if really supported
3956 static int check_auto_mute_availability(struct hda_codec *codec)
3958 struct hda_gen_spec *spec = codec->spec;
3959 struct auto_pin_cfg *cfg = &spec->autocfg;
3963 if (spec->suppress_auto_mute)
3966 if (cfg->hp_pins[0])
3968 if (cfg->line_out_pins[0])
3970 if (cfg->speaker_pins[0])
3972 if (present < 2) /* need two different output types */
3975 if (!cfg->speaker_pins[0] &&
3976 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
3977 memcpy(cfg->speaker_pins, cfg->line_out_pins,
3978 sizeof(cfg->speaker_pins));
3979 cfg->speaker_outs = cfg->line_outs;
3982 if (!cfg->hp_pins[0] &&
3983 cfg->line_out_type == AUTO_PIN_HP_OUT) {
3984 memcpy(cfg->hp_pins, cfg->line_out_pins,
3985 sizeof(cfg->hp_pins));
3986 cfg->hp_outs = cfg->line_outs;
3989 for (i = 0; i < cfg->hp_outs; i++) {
3990 hda_nid_t nid = cfg->hp_pins[i];
3991 if (!is_jack_detectable(codec, nid))
3993 snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
3995 snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
3996 spec->hp_automute_hook ?
3997 spec->hp_automute_hook :
3998 snd_hda_gen_hp_automute);
3999 spec->detect_hp = 1;
4002 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4003 if (cfg->speaker_outs)
4004 for (i = 0; i < cfg->line_outs; i++) {
4005 hda_nid_t nid = cfg->line_out_pins[i];
4006 if (!is_jack_detectable(codec, nid))
4008 snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
4009 snd_hda_jack_detect_enable_callback(codec, nid,
4010 HDA_GEN_FRONT_EVENT,
4011 spec->line_automute_hook ?
4012 spec->line_automute_hook :
4013 snd_hda_gen_line_automute);
4014 spec->detect_lo = 1;
4016 spec->automute_lo_possible = spec->detect_hp;
4019 spec->automute_speaker_possible = cfg->speaker_outs &&
4020 (spec->detect_hp || spec->detect_lo);
4022 spec->automute_lo = spec->automute_lo_possible;
4023 spec->automute_speaker = spec->automute_speaker_possible;
4025 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4026 /* create a control for automute mode */
4027 err = add_automute_mode_enum(codec);
4034 /* check whether all auto-mic pins are valid; setup indices if OK */
4035 static bool auto_mic_check_imux(struct hda_codec *codec)
4037 struct hda_gen_spec *spec = codec->spec;
4038 const struct hda_input_mux *imux;
4041 imux = &spec->input_mux;
4042 for (i = 0; i < spec->am_num_entries; i++) {
4043 spec->am_entry[i].idx =
4044 find_idx_in_nid_list(spec->am_entry[i].pin,
4045 spec->imux_pins, imux->num_items);
4046 if (spec->am_entry[i].idx < 0)
4047 return false; /* no corresponding imux */
4050 /* we don't need the jack detection for the first pin */
4051 for (i = 1; i < spec->am_num_entries; i++)
4052 snd_hda_jack_detect_enable_callback(codec,
4053 spec->am_entry[i].pin,
4055 spec->mic_autoswitch_hook ?
4056 spec->mic_autoswitch_hook :
4057 snd_hda_gen_mic_autoswitch);
4061 static int compare_attr(const void *ap, const void *bp)
4063 const struct automic_entry *a = ap;
4064 const struct automic_entry *b = bp;
4065 return (int)(a->attr - b->attr);
4069 * Check the availability of auto-mic switch;
4070 * Set up if really supported
4072 static int check_auto_mic_availability(struct hda_codec *codec)
4074 struct hda_gen_spec *spec = codec->spec;
4075 struct auto_pin_cfg *cfg = &spec->autocfg;
4079 if (spec->suppress_auto_mic)
4084 for (i = 0; i < cfg->num_inputs; i++) {
4085 hda_nid_t nid = cfg->inputs[i].pin;
4087 attr = snd_hda_codec_get_pincfg(codec, nid);
4088 attr = snd_hda_get_input_pin_attr(attr);
4089 if (types & (1 << attr))
4090 return 0; /* already occupied */
4092 case INPUT_PIN_ATTR_INT:
4093 if (cfg->inputs[i].type != AUTO_PIN_MIC)
4094 return 0; /* invalid type */
4096 case INPUT_PIN_ATTR_UNUSED:
4097 return 0; /* invalid entry */
4099 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4100 return 0; /* invalid type */
4101 if (!spec->line_in_auto_switch &&
4102 cfg->inputs[i].type != AUTO_PIN_MIC)
4103 return 0; /* only mic is allowed */
4104 if (!is_jack_detectable(codec, nid))
4105 return 0; /* no unsol support */
4108 if (num_pins >= MAX_AUTO_MIC_PINS)
4110 types |= (1 << attr);
4111 spec->am_entry[num_pins].pin = nid;
4112 spec->am_entry[num_pins].attr = attr;
4119 spec->am_num_entries = num_pins;
4120 /* sort the am_entry in the order of attr so that the pin with a
4121 * higher attr will be selected when the jack is plugged.
4123 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4124 compare_attr, NULL);
4126 if (!auto_mic_check_imux(codec))
4130 spec->num_adc_nids = 1;
4131 spec->cur_mux[0] = spec->am_entry[0].idx;
4132 snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4133 spec->am_entry[0].pin,
4134 spec->am_entry[1].pin,
4135 spec->am_entry[2].pin);
4140 /* power_filter hook; make inactive widgets into power down */
4141 static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4143 unsigned int power_state)
4145 if (power_state != AC_PWRST_D0)
4147 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4149 if (is_active_nid(codec, nid, HDA_OUTPUT, 0))
4156 * Parse the given BIOS configuration and set up the hda_gen_spec
4158 * return 1 if successful, 0 if the proper config is not found,
4159 * or a negative error code
4161 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4162 struct auto_pin_cfg *cfg)
4164 struct hda_gen_spec *spec = codec->spec;
4167 parse_user_hints(codec);
4169 if (spec->mixer_nid && !spec->mixer_merge_nid)
4170 spec->mixer_merge_nid = spec->mixer_nid;
4172 if (cfg != &spec->autocfg) {
4173 spec->autocfg = *cfg;
4174 cfg = &spec->autocfg;
4177 if (!spec->main_out_badness)
4178 spec->main_out_badness = &hda_main_out_badness;
4179 if (!spec->extra_out_badness)
4180 spec->extra_out_badness = &hda_extra_out_badness;
4182 fill_all_dac_nids(codec);
4184 if (!cfg->line_outs) {
4185 if (cfg->dig_outs || cfg->dig_in_pin) {
4186 spec->multiout.max_channels = 2;
4187 spec->no_analog = 1;
4190 return 0; /* can't find valid BIOS pin config */
4193 if (!spec->no_primary_hp &&
4194 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4195 cfg->line_outs <= cfg->hp_outs) {
4196 /* use HP as primary out */
4197 cfg->speaker_outs = cfg->line_outs;
4198 memcpy(cfg->speaker_pins, cfg->line_out_pins,
4199 sizeof(cfg->speaker_pins));
4200 cfg->line_outs = cfg->hp_outs;
4201 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4203 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4204 cfg->line_out_type = AUTO_PIN_HP_OUT;
4207 err = parse_output_paths(codec);
4210 err = create_multi_channel_mode(codec);
4213 err = create_multi_out_ctls(codec, cfg);
4216 err = create_hp_out_ctls(codec);
4219 err = create_speaker_out_ctls(codec);
4222 err = create_indep_hp_ctls(codec);
4225 err = create_loopback_mixing_ctl(codec);
4228 err = create_hp_mic(codec);
4231 err = create_input_ctls(codec);
4235 spec->const_channel_count = spec->ext_channel_count;
4236 /* check the multiple speaker and headphone pins */
4237 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4238 spec->const_channel_count = max(spec->const_channel_count,
4239 cfg->speaker_outs * 2);
4240 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4241 spec->const_channel_count = max(spec->const_channel_count,
4243 spec->multiout.max_channels = max(spec->ext_channel_count,
4244 spec->const_channel_count);
4246 err = check_auto_mute_availability(codec);
4250 err = check_dyn_adc_switch(codec);
4254 err = check_auto_mic_availability(codec);
4258 err = create_capture_mixers(codec);
4262 err = parse_mic_boost(codec);
4266 if (spec->add_jack_modes) {
4267 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4268 err = create_out_jack_modes(codec, cfg->line_outs,
4269 cfg->line_out_pins);
4273 if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4274 err = create_out_jack_modes(codec, cfg->hp_outs,
4282 parse_digital(codec);
4284 if (spec->power_down_unused)
4285 codec->power_filter = snd_hda_gen_path_power_filter;
4287 if (!spec->no_analog && spec->beep_nid) {
4288 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4295 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config);
4299 * Build control elements
4302 /* slave controls for virtual master */
4303 static const char * const slave_pfxs[] = {
4304 "Front", "Surround", "Center", "LFE", "Side",
4305 "Headphone", "Speaker", "Mono", "Line Out",
4306 "CLFE", "Bass Speaker", "PCM",
4307 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4308 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4313 int snd_hda_gen_build_controls(struct hda_codec *codec)
4315 struct hda_gen_spec *spec = codec->spec;
4318 if (spec->kctls.used) {
4319 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4324 if (spec->multiout.dig_out_nid) {
4325 err = snd_hda_create_dig_out_ctls(codec,
4326 spec->multiout.dig_out_nid,
4327 spec->multiout.dig_out_nid,
4328 spec->pcm_rec[1].pcm_type);
4331 if (!spec->no_analog) {
4332 err = snd_hda_create_spdif_share_sw(codec,
4336 spec->multiout.share_spdif = 1;
4339 if (spec->dig_in_nid) {
4340 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4345 /* if we have no master control, let's create it */
4346 if (!spec->no_analog &&
4347 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4348 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4349 spec->vmaster_tlv, slave_pfxs,
4354 if (!spec->no_analog &&
4355 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4356 err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4359 true, &spec->vmaster_mute.sw_kctl);
4362 if (spec->vmaster_mute.hook)
4363 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4364 spec->vmaster_mute_enum);
4367 free_kctls(spec); /* no longer needed */
4369 if (spec->hp_mic_pin) {
4371 int nid = spec->hp_mic_pin;
4372 err = snd_hda_jack_add_kctl(codec, nid, "Headphone Mic", 0);
4375 err = snd_hda_jack_detect_enable(codec, nid, 0);
4380 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
4386 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls);
4393 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
4394 struct hda_codec *codec,
4395 struct snd_pcm_substream *substream,
4398 struct hda_gen_spec *spec = codec->spec;
4399 if (spec->pcm_playback_hook)
4400 spec->pcm_playback_hook(hinfo, codec, substream, action);
4403 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
4404 struct hda_codec *codec,
4405 struct snd_pcm_substream *substream,
4408 struct hda_gen_spec *spec = codec->spec;
4409 if (spec->pcm_capture_hook)
4410 spec->pcm_capture_hook(hinfo, codec, substream, action);
4414 * Analog playback callbacks
4416 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
4417 struct hda_codec *codec,
4418 struct snd_pcm_substream *substream)
4420 struct hda_gen_spec *spec = codec->spec;
4423 mutex_lock(&spec->pcm_mutex);
4424 err = snd_hda_multi_out_analog_open(codec,
4425 &spec->multiout, substream,
4428 spec->active_streams |= 1 << STREAM_MULTI_OUT;
4429 call_pcm_playback_hook(hinfo, codec, substream,
4430 HDA_GEN_PCM_ACT_OPEN);
4432 mutex_unlock(&spec->pcm_mutex);
4436 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4437 struct hda_codec *codec,
4438 unsigned int stream_tag,
4439 unsigned int format,
4440 struct snd_pcm_substream *substream)
4442 struct hda_gen_spec *spec = codec->spec;
4445 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
4446 stream_tag, format, substream);
4448 call_pcm_playback_hook(hinfo, codec, substream,
4449 HDA_GEN_PCM_ACT_PREPARE);
4453 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4454 struct hda_codec *codec,
4455 struct snd_pcm_substream *substream)
4457 struct hda_gen_spec *spec = codec->spec;
4460 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
4462 call_pcm_playback_hook(hinfo, codec, substream,
4463 HDA_GEN_PCM_ACT_CLEANUP);
4467 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
4468 struct hda_codec *codec,
4469 struct snd_pcm_substream *substream)
4471 struct hda_gen_spec *spec = codec->spec;
4472 mutex_lock(&spec->pcm_mutex);
4473 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
4474 call_pcm_playback_hook(hinfo, codec, substream,
4475 HDA_GEN_PCM_ACT_CLOSE);
4476 mutex_unlock(&spec->pcm_mutex);
4480 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
4481 struct hda_codec *codec,
4482 struct snd_pcm_substream *substream)
4484 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
4488 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4489 struct hda_codec *codec,
4490 unsigned int stream_tag,
4491 unsigned int format,
4492 struct snd_pcm_substream *substream)
4494 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4495 call_pcm_capture_hook(hinfo, codec, substream,
4496 HDA_GEN_PCM_ACT_PREPARE);
4500 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4501 struct hda_codec *codec,
4502 struct snd_pcm_substream *substream)
4504 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4505 call_pcm_capture_hook(hinfo, codec, substream,
4506 HDA_GEN_PCM_ACT_CLEANUP);
4510 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
4511 struct hda_codec *codec,
4512 struct snd_pcm_substream *substream)
4514 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
4518 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
4519 struct hda_codec *codec,
4520 struct snd_pcm_substream *substream)
4522 struct hda_gen_spec *spec = codec->spec;
4525 mutex_lock(&spec->pcm_mutex);
4526 if (!spec->indep_hp_enabled)
4529 spec->active_streams |= 1 << STREAM_INDEP_HP;
4530 call_pcm_playback_hook(hinfo, codec, substream,
4531 HDA_GEN_PCM_ACT_OPEN);
4532 mutex_unlock(&spec->pcm_mutex);
4536 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
4537 struct hda_codec *codec,
4538 struct snd_pcm_substream *substream)
4540 struct hda_gen_spec *spec = codec->spec;
4541 mutex_lock(&spec->pcm_mutex);
4542 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
4543 call_pcm_playback_hook(hinfo, codec, substream,
4544 HDA_GEN_PCM_ACT_CLOSE);
4545 mutex_unlock(&spec->pcm_mutex);
4549 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4550 struct hda_codec *codec,
4551 unsigned int stream_tag,
4552 unsigned int format,
4553 struct snd_pcm_substream *substream)
4555 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4556 call_pcm_playback_hook(hinfo, codec, substream,
4557 HDA_GEN_PCM_ACT_PREPARE);
4561 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4562 struct hda_codec *codec,
4563 struct snd_pcm_substream *substream)
4565 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4566 call_pcm_playback_hook(hinfo, codec, substream,
4567 HDA_GEN_PCM_ACT_CLEANUP);
4574 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
4575 struct hda_codec *codec,
4576 struct snd_pcm_substream *substream)
4578 struct hda_gen_spec *spec = codec->spec;
4579 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
4582 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4583 struct hda_codec *codec,
4584 unsigned int stream_tag,
4585 unsigned int format,
4586 struct snd_pcm_substream *substream)
4588 struct hda_gen_spec *spec = codec->spec;
4589 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
4590 stream_tag, format, substream);
4593 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4594 struct hda_codec *codec,
4595 struct snd_pcm_substream *substream)
4597 struct hda_gen_spec *spec = codec->spec;
4598 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
4601 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
4602 struct hda_codec *codec,
4603 struct snd_pcm_substream *substream)
4605 struct hda_gen_spec *spec = codec->spec;
4606 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
4612 #define alt_capture_pcm_open capture_pcm_open
4613 #define alt_capture_pcm_close capture_pcm_close
4615 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4616 struct hda_codec *codec,
4617 unsigned int stream_tag,
4618 unsigned int format,
4619 struct snd_pcm_substream *substream)
4621 struct hda_gen_spec *spec = codec->spec;
4623 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
4624 stream_tag, 0, format);
4625 call_pcm_capture_hook(hinfo, codec, substream,
4626 HDA_GEN_PCM_ACT_PREPARE);
4630 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4631 struct hda_codec *codec,
4632 struct snd_pcm_substream *substream)
4634 struct hda_gen_spec *spec = codec->spec;
4636 snd_hda_codec_cleanup_stream(codec,
4637 spec->adc_nids[substream->number + 1]);
4638 call_pcm_capture_hook(hinfo, codec, substream,
4639 HDA_GEN_PCM_ACT_CLEANUP);
4645 static const struct hda_pcm_stream pcm_analog_playback = {
4649 /* NID is set in build_pcms */
4651 .open = playback_pcm_open,
4652 .close = playback_pcm_close,
4653 .prepare = playback_pcm_prepare,
4654 .cleanup = playback_pcm_cleanup
4658 static const struct hda_pcm_stream pcm_analog_capture = {
4662 /* NID is set in build_pcms */
4664 .open = capture_pcm_open,
4665 .close = capture_pcm_close,
4666 .prepare = capture_pcm_prepare,
4667 .cleanup = capture_pcm_cleanup
4671 static const struct hda_pcm_stream pcm_analog_alt_playback = {
4675 /* NID is set in build_pcms */
4677 .open = alt_playback_pcm_open,
4678 .close = alt_playback_pcm_close,
4679 .prepare = alt_playback_pcm_prepare,
4680 .cleanup = alt_playback_pcm_cleanup
4684 static const struct hda_pcm_stream pcm_analog_alt_capture = {
4685 .substreams = 2, /* can be overridden */
4688 /* NID is set in build_pcms */
4690 .open = alt_capture_pcm_open,
4691 .close = alt_capture_pcm_close,
4692 .prepare = alt_capture_pcm_prepare,
4693 .cleanup = alt_capture_pcm_cleanup
4697 static const struct hda_pcm_stream pcm_digital_playback = {
4701 /* NID is set in build_pcms */
4703 .open = dig_playback_pcm_open,
4704 .close = dig_playback_pcm_close,
4705 .prepare = dig_playback_pcm_prepare,
4706 .cleanup = dig_playback_pcm_cleanup
4710 static const struct hda_pcm_stream pcm_digital_capture = {
4714 /* NID is set in build_pcms */
4717 /* Used by build_pcms to flag that a PCM has no playback stream */
4718 static const struct hda_pcm_stream pcm_null_stream = {
4725 * dynamic changing ADC PCM streams
4727 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
4729 struct hda_gen_spec *spec = codec->spec;
4730 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
4732 if (spec->cur_adc && spec->cur_adc != new_adc) {
4733 /* stream is running, let's swap the current ADC */
4734 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
4735 spec->cur_adc = new_adc;
4736 snd_hda_codec_setup_stream(codec, new_adc,
4737 spec->cur_adc_stream_tag, 0,
4738 spec->cur_adc_format);
4744 /* analog capture with dynamic dual-adc changes */
4745 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4746 struct hda_codec *codec,
4747 unsigned int stream_tag,
4748 unsigned int format,
4749 struct snd_pcm_substream *substream)
4751 struct hda_gen_spec *spec = codec->spec;
4752 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
4753 spec->cur_adc_stream_tag = stream_tag;
4754 spec->cur_adc_format = format;
4755 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
4759 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4760 struct hda_codec *codec,
4761 struct snd_pcm_substream *substream)
4763 struct hda_gen_spec *spec = codec->spec;
4764 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
4769 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
4773 .nid = 0, /* fill later */
4775 .prepare = dyn_adc_capture_pcm_prepare,
4776 .cleanup = dyn_adc_capture_pcm_cleanup
4780 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
4781 const char *chip_name)
4787 strlcpy(str, chip_name, len);
4789 /* drop non-alnum chars after a space */
4790 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
4791 if (!isalnum(p[1])) {
4796 strlcat(str, sfx, len);
4799 /* build PCM streams based on the parsed results */
4800 int snd_hda_gen_build_pcms(struct hda_codec *codec)
4802 struct hda_gen_spec *spec = codec->spec;
4803 struct hda_pcm *info = spec->pcm_rec;
4804 const struct hda_pcm_stream *p;
4805 bool have_multi_adcs;
4807 codec->num_pcms = 1;
4808 codec->pcm_info = info;
4810 if (spec->no_analog)
4813 fill_pcm_stream_name(spec->stream_name_analog,
4814 sizeof(spec->stream_name_analog),
4815 " Analog", codec->chip_name);
4816 info->name = spec->stream_name_analog;
4818 if (spec->multiout.num_dacs > 0) {
4819 p = spec->stream_analog_playback;
4821 p = &pcm_analog_playback;
4822 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4823 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
4824 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
4825 spec->multiout.max_channels;
4826 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
4827 spec->autocfg.line_outs == 2)
4828 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
4831 if (spec->num_adc_nids) {
4832 p = spec->stream_analog_capture;
4834 if (spec->dyn_adc_switch)
4835 p = &dyn_adc_pcm_analog_capture;
4837 p = &pcm_analog_capture;
4839 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4840 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
4844 /* SPDIF for stream index #1 */
4845 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
4846 fill_pcm_stream_name(spec->stream_name_digital,
4847 sizeof(spec->stream_name_digital),
4848 " Digital", codec->chip_name);
4849 codec->num_pcms = 2;
4850 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
4851 info = spec->pcm_rec + 1;
4852 info->name = spec->stream_name_digital;
4853 if (spec->dig_out_type)
4854 info->pcm_type = spec->dig_out_type;
4856 info->pcm_type = HDA_PCM_TYPE_SPDIF;
4857 if (spec->multiout.dig_out_nid) {
4858 p = spec->stream_digital_playback;
4860 p = &pcm_digital_playback;
4861 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4862 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
4864 if (spec->dig_in_nid) {
4865 p = spec->stream_digital_capture;
4867 p = &pcm_digital_capture;
4868 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4869 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
4873 if (spec->no_analog)
4876 /* If the use of more than one ADC is requested for the current
4877 * model, configure a second analog capture-only PCM.
4879 have_multi_adcs = (spec->num_adc_nids > 1) &&
4880 !spec->dyn_adc_switch && !spec->auto_mic;
4881 /* Additional Analaog capture for index #2 */
4882 if (spec->alt_dac_nid || have_multi_adcs) {
4883 fill_pcm_stream_name(spec->stream_name_alt_analog,
4884 sizeof(spec->stream_name_alt_analog),
4885 " Alt Analog", codec->chip_name);
4886 codec->num_pcms = 3;
4887 info = spec->pcm_rec + 2;
4888 info->name = spec->stream_name_alt_analog;
4889 if (spec->alt_dac_nid) {
4890 p = spec->stream_analog_alt_playback;
4892 p = &pcm_analog_alt_playback;
4893 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4894 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
4897 info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
4899 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
4901 if (have_multi_adcs) {
4902 p = spec->stream_analog_alt_capture;
4904 p = &pcm_analog_alt_capture;
4905 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4906 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
4908 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
4909 spec->num_adc_nids - 1;
4911 info->stream[SNDRV_PCM_STREAM_CAPTURE] =
4913 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
4919 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
4923 * Standard auto-parser initializations
4926 /* configure the given path as a proper output */
4927 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
4929 struct nid_path *path;
4932 path = snd_hda_get_path_from_idx(codec, path_idx);
4933 if (!path || !path->depth)
4935 pin = path->path[path->depth - 1];
4936 restore_pin_ctl(codec, pin);
4937 snd_hda_activate_path(codec, path, path->active, true);
4938 set_pin_eapd(codec, pin, path->active);
4941 /* initialize primary output paths */
4942 static void init_multi_out(struct hda_codec *codec)
4944 struct hda_gen_spec *spec = codec->spec;
4947 for (i = 0; i < spec->autocfg.line_outs; i++)
4948 set_output_and_unmute(codec, spec->out_paths[i]);
4952 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
4956 for (i = 0; i < num_outs; i++)
4957 set_output_and_unmute(codec, paths[i]);
4960 /* initialize hp and speaker paths */
4961 static void init_extra_out(struct hda_codec *codec)
4963 struct hda_gen_spec *spec = codec->spec;
4965 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
4966 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
4967 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
4968 __init_extra_out(codec, spec->autocfg.speaker_outs,
4969 spec->speaker_paths);
4972 /* initialize multi-io paths */
4973 static void init_multi_io(struct hda_codec *codec)
4975 struct hda_gen_spec *spec = codec->spec;
4978 for (i = 0; i < spec->multi_ios; i++) {
4979 hda_nid_t pin = spec->multi_io[i].pin;
4980 struct nid_path *path;
4981 path = get_multiio_path(codec, i);
4984 if (!spec->multi_io[i].ctl_in)
4985 spec->multi_io[i].ctl_in =
4986 snd_hda_codec_get_pin_target(codec, pin);
4987 snd_hda_activate_path(codec, path, path->active, true);
4991 /* set up input pins and loopback paths */
4992 static void init_analog_input(struct hda_codec *codec)
4994 struct hda_gen_spec *spec = codec->spec;
4995 struct auto_pin_cfg *cfg = &spec->autocfg;
4998 for (i = 0; i < cfg->num_inputs; i++) {
4999 hda_nid_t nid = cfg->inputs[i].pin;
5000 if (is_input_pin(codec, nid))
5001 restore_pin_ctl(codec, nid);
5003 /* init loopback inputs */
5004 if (spec->mixer_nid) {
5005 resume_path_from_idx(codec, spec->loopback_paths[i]);
5006 resume_path_from_idx(codec, spec->loopback_merge_path);
5011 /* initialize ADC paths */
5012 static void init_input_src(struct hda_codec *codec)
5014 struct hda_gen_spec *spec = codec->spec;
5015 struct hda_input_mux *imux = &spec->input_mux;
5016 struct nid_path *path;
5019 if (spec->dyn_adc_switch)
5022 nums = spec->num_adc_nids;
5024 for (c = 0; c < nums; c++) {
5025 for (i = 0; i < imux->num_items; i++) {
5026 path = get_input_path(codec, c, i);
5028 bool active = path->active;
5029 if (i == spec->cur_mux[c])
5031 snd_hda_activate_path(codec, path, active, false);
5035 update_hp_mic(codec, c, true);
5038 if (spec->cap_sync_hook)
5039 spec->cap_sync_hook(codec, NULL);
5042 /* set right pin controls for digital I/O */
5043 static void init_digital(struct hda_codec *codec)
5045 struct hda_gen_spec *spec = codec->spec;
5049 for (i = 0; i < spec->autocfg.dig_outs; i++)
5050 set_output_and_unmute(codec, spec->digout_paths[i]);
5051 pin = spec->autocfg.dig_in_pin;
5053 restore_pin_ctl(codec, pin);
5054 resume_path_from_idx(codec, spec->digin_path);
5058 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5059 * invalid unsol tags by some reason
5061 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5065 for (i = 0; i < codec->init_pins.used; i++) {
5066 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5067 hda_nid_t nid = pin->nid;
5068 if (is_jack_detectable(codec, nid) &&
5069 !snd_hda_jack_tbl_get(codec, nid))
5070 snd_hda_codec_update_cache(codec, nid, 0,
5071 AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5076 * initialize the generic spec;
5077 * this can be put as patch_ops.init function
5079 int snd_hda_gen_init(struct hda_codec *codec)
5081 struct hda_gen_spec *spec = codec->spec;
5083 if (spec->init_hook)
5084 spec->init_hook(codec);
5086 snd_hda_apply_verbs(codec);
5088 codec->cached_write = 1;
5090 init_multi_out(codec);
5091 init_extra_out(codec);
5092 init_multi_io(codec);
5093 init_analog_input(codec);
5094 init_input_src(codec);
5095 init_digital(codec);
5097 clear_unsol_on_unused_pins(codec);
5099 /* call init functions of standard auto-mute helpers */
5100 update_automute_all(codec);
5102 snd_hda_codec_flush_cache(codec);
5104 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5105 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5107 hda_call_check_power_status(codec, 0x01);
5110 EXPORT_SYMBOL_HDA(snd_hda_gen_init);
5113 * free the generic spec;
5114 * this can be put as patch_ops.free function
5116 void snd_hda_gen_free(struct hda_codec *codec)
5118 snd_hda_detach_beep_device(codec);
5119 snd_hda_gen_spec_free(codec->spec);
5123 EXPORT_SYMBOL_HDA(snd_hda_gen_free);
5127 * check the loopback power save state;
5128 * this can be put as patch_ops.check_power_status function
5130 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5132 struct hda_gen_spec *spec = codec->spec;
5133 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5135 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status);
5140 * the generic codec support
5143 static const struct hda_codec_ops generic_patch_ops = {
5144 .build_controls = snd_hda_gen_build_controls,
5145 .build_pcms = snd_hda_gen_build_pcms,
5146 .init = snd_hda_gen_init,
5147 .free = snd_hda_gen_free,
5148 .unsol_event = snd_hda_jack_unsol_event,
5150 .check_power_status = snd_hda_gen_check_power_status,
5154 int snd_hda_parse_generic_codec(struct hda_codec *codec)
5156 struct hda_gen_spec *spec;
5159 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5162 snd_hda_gen_spec_init(spec);
5165 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5169 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5173 codec->patch_ops = generic_patch_ops;
5177 snd_hda_gen_free(codec);
5180 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec);