xref: /openbmc/linux/sound/pci/hda/hda_generic.c (revision 12eb4683)
1 /*
2  * Universal Interface for Intel High Definition Audio Codec
3  *
4  * Generic widget tree parser
5  *
6  * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
7  *
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.
12  *
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.
17  *
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
21  */
22 
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"
36 #include "hda_jack.h"
37 #include "hda_beep.h"
38 #include "hda_generic.h"
39 
40 
41 /* initialize hda_gen_spec struct */
42 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
43 {
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);
48 	return 0;
49 }
50 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init);
51 
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)
55 {
56 	struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
57 	if (!knew)
58 		return NULL;
59 	*knew = *temp;
60 	if (name)
61 		knew->name = kstrdup(name, GFP_KERNEL);
62 	else if (knew->name)
63 		knew->name = kstrdup(knew->name, GFP_KERNEL);
64 	if (!knew->name)
65 		return NULL;
66 	return knew;
67 }
68 EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl);
69 
70 static void free_kctls(struct hda_gen_spec *spec)
71 {
72 	if (spec->kctls.list) {
73 		struct snd_kcontrol_new *kctl = spec->kctls.list;
74 		int i;
75 		for (i = 0; i < spec->kctls.used; i++)
76 			kfree(kctl[i].name);
77 	}
78 	snd_array_free(&spec->kctls);
79 }
80 
81 void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
82 {
83 	if (!spec)
84 		return;
85 	free_kctls(spec);
86 	snd_array_free(&spec->paths);
87 	snd_array_free(&spec->loopback_list);
88 }
89 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free);
90 
91 /*
92  * store user hints
93  */
94 static void parse_user_hints(struct hda_codec *codec)
95 {
96 	struct hda_gen_spec *spec = codec->spec;
97 	int val;
98 
99 	val = snd_hda_get_bool_hint(codec, "jack_detect");
100 	if (val >= 0)
101 		codec->no_jack_detect = !val;
102 	val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
103 	if (val >= 0)
104 		codec->inv_jack_detect = !!val;
105 	val = snd_hda_get_bool_hint(codec, "trigger_sense");
106 	if (val >= 0)
107 		codec->no_trigger_sense = !val;
108 	val = snd_hda_get_bool_hint(codec, "inv_eapd");
109 	if (val >= 0)
110 		codec->inv_eapd = !!val;
111 	val = snd_hda_get_bool_hint(codec, "pcm_format_first");
112 	if (val >= 0)
113 		codec->pcm_format_first = !!val;
114 	val = snd_hda_get_bool_hint(codec, "sticky_stream");
115 	if (val >= 0)
116 		codec->no_sticky_stream = !val;
117 	val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
118 	if (val >= 0)
119 		codec->spdif_status_reset = !!val;
120 	val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
121 	if (val >= 0)
122 		codec->pin_amp_workaround = !!val;
123 	val = snd_hda_get_bool_hint(codec, "single_adc_amp");
124 	if (val >= 0)
125 		codec->single_adc_amp = !!val;
126 
127 	val = snd_hda_get_bool_hint(codec, "auto_mute");
128 	if (val >= 0)
129 		spec->suppress_auto_mute = !val;
130 	val = snd_hda_get_bool_hint(codec, "auto_mic");
131 	if (val >= 0)
132 		spec->suppress_auto_mic = !val;
133 	val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
134 	if (val >= 0)
135 		spec->line_in_auto_switch = !!val;
136 	val = snd_hda_get_bool_hint(codec, "auto_mute_via_amp");
137 	if (val >= 0)
138 		spec->auto_mute_via_amp = !!val;
139 	val = snd_hda_get_bool_hint(codec, "need_dac_fix");
140 	if (val >= 0)
141 		spec->need_dac_fix = !!val;
142 	val = snd_hda_get_bool_hint(codec, "primary_hp");
143 	if (val >= 0)
144 		spec->no_primary_hp = !val;
145 	val = snd_hda_get_bool_hint(codec, "multi_io");
146 	if (val >= 0)
147 		spec->no_multi_io = !val;
148 	val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
149 	if (val >= 0)
150 		spec->multi_cap_vol = !!val;
151 	val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
152 	if (val >= 0)
153 		spec->inv_dmic_split = !!val;
154 	val = snd_hda_get_bool_hint(codec, "indep_hp");
155 	if (val >= 0)
156 		spec->indep_hp = !!val;
157 	val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
158 	if (val >= 0)
159 		spec->add_stereo_mix_input = !!val;
160 	/* the following two are just for compatibility */
161 	val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
162 	if (val >= 0)
163 		spec->add_jack_modes = !!val;
164 	val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
165 	if (val >= 0)
166 		spec->add_jack_modes = !!val;
167 	val = snd_hda_get_bool_hint(codec, "add_jack_modes");
168 	if (val >= 0)
169 		spec->add_jack_modes = !!val;
170 	val = snd_hda_get_bool_hint(codec, "power_down_unused");
171 	if (val >= 0)
172 		spec->power_down_unused = !!val;
173 	val = snd_hda_get_bool_hint(codec, "add_hp_mic");
174 	if (val >= 0)
175 		spec->hp_mic = !!val;
176 	val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
177 	if (val >= 0)
178 		spec->suppress_hp_mic_detect = !val;
179 
180 	if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
181 		spec->mixer_nid = val;
182 }
183 
184 /*
185  * pin control value accesses
186  */
187 
188 #define update_pin_ctl(codec, pin, val) \
189 	snd_hda_codec_update_cache(codec, pin, 0, \
190 				   AC_VERB_SET_PIN_WIDGET_CONTROL, val)
191 
192 /* restore the pinctl based on the cached value */
193 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
194 {
195 	update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
196 }
197 
198 /* set the pinctl target value and write it if requested */
199 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
200 			   unsigned int val, bool do_write)
201 {
202 	if (!pin)
203 		return;
204 	val = snd_hda_correct_pin_ctl(codec, pin, val);
205 	snd_hda_codec_set_pin_target(codec, pin, val);
206 	if (do_write)
207 		update_pin_ctl(codec, pin, val);
208 }
209 
210 /* set pinctl target values for all given pins */
211 static void set_pin_targets(struct hda_codec *codec, int num_pins,
212 			    hda_nid_t *pins, unsigned int val)
213 {
214 	int i;
215 	for (i = 0; i < num_pins; i++)
216 		set_pin_target(codec, pins[i], val, false);
217 }
218 
219 /*
220  * parsing paths
221  */
222 
223 /* return the position of NID in the list, or -1 if not found */
224 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
225 {
226 	int i;
227 	for (i = 0; i < nums; i++)
228 		if (list[i] == nid)
229 			return i;
230 	return -1;
231 }
232 
233 /* return true if the given NID is contained in the path */
234 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
235 {
236 	return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
237 }
238 
239 static struct nid_path *get_nid_path(struct hda_codec *codec,
240 				     hda_nid_t from_nid, hda_nid_t to_nid,
241 				     int anchor_nid)
242 {
243 	struct hda_gen_spec *spec = codec->spec;
244 	int i;
245 
246 	for (i = 0; i < spec->paths.used; i++) {
247 		struct nid_path *path = snd_array_elem(&spec->paths, i);
248 		if (path->depth <= 0)
249 			continue;
250 		if ((!from_nid || path->path[0] == from_nid) &&
251 		    (!to_nid || path->path[path->depth - 1] == to_nid)) {
252 			if (!anchor_nid ||
253 			    (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
254 			    (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
255 				return path;
256 		}
257 	}
258 	return NULL;
259 }
260 
261 /* get the path between the given NIDs;
262  * passing 0 to either @pin or @dac behaves as a wildcard
263  */
264 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
265 				      hda_nid_t from_nid, hda_nid_t to_nid)
266 {
267 	return get_nid_path(codec, from_nid, to_nid, 0);
268 }
269 EXPORT_SYMBOL_HDA(snd_hda_get_nid_path);
270 
271 /* get the index number corresponding to the path instance;
272  * the index starts from 1, for easier checking the invalid value
273  */
274 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
275 {
276 	struct hda_gen_spec *spec = codec->spec;
277 	struct nid_path *array = spec->paths.list;
278 	ssize_t idx;
279 
280 	if (!spec->paths.used)
281 		return 0;
282 	idx = path - array;
283 	if (idx < 0 || idx >= spec->paths.used)
284 		return 0;
285 	return idx + 1;
286 }
287 EXPORT_SYMBOL_HDA(snd_hda_get_path_idx);
288 
289 /* get the path instance corresponding to the given index number */
290 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
291 {
292 	struct hda_gen_spec *spec = codec->spec;
293 
294 	if (idx <= 0 || idx > spec->paths.used)
295 		return NULL;
296 	return snd_array_elem(&spec->paths, idx - 1);
297 }
298 EXPORT_SYMBOL_HDA(snd_hda_get_path_from_idx);
299 
300 /* check whether the given DAC is already found in any existing paths */
301 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
302 {
303 	struct hda_gen_spec *spec = codec->spec;
304 	int i;
305 
306 	for (i = 0; i < spec->paths.used; i++) {
307 		struct nid_path *path = snd_array_elem(&spec->paths, i);
308 		if (path->path[0] == nid)
309 			return true;
310 	}
311 	return false;
312 }
313 
314 /* check whether the given two widgets can be connected */
315 static bool is_reachable_path(struct hda_codec *codec,
316 			      hda_nid_t from_nid, hda_nid_t to_nid)
317 {
318 	if (!from_nid || !to_nid)
319 		return false;
320 	return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
321 }
322 
323 /* nid, dir and idx */
324 #define AMP_VAL_COMPARE_MASK	(0xffff | (1U << 18) | (0x0f << 19))
325 
326 /* check whether the given ctl is already assigned in any path elements */
327 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
328 {
329 	struct hda_gen_spec *spec = codec->spec;
330 	int i;
331 
332 	val &= AMP_VAL_COMPARE_MASK;
333 	for (i = 0; i < spec->paths.used; i++) {
334 		struct nid_path *path = snd_array_elem(&spec->paths, i);
335 		if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
336 			return true;
337 	}
338 	return false;
339 }
340 
341 /* check whether a control with the given (nid, dir, idx) was assigned */
342 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
343 			      int dir, int idx, int type)
344 {
345 	unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
346 	return is_ctl_used(codec, val, type);
347 }
348 
349 static void print_nid_path(const char *pfx, struct nid_path *path)
350 {
351 	char buf[40];
352 	int i;
353 
354 
355 	buf[0] = 0;
356 	for (i = 0; i < path->depth; i++) {
357 		char tmp[4];
358 		sprintf(tmp, ":%02x", path->path[i]);
359 		strlcat(buf, tmp, sizeof(buf));
360 	}
361 	snd_printdd("%s path: depth=%d %s\n", pfx, path->depth, buf);
362 }
363 
364 /* called recursively */
365 static bool __parse_nid_path(struct hda_codec *codec,
366 			     hda_nid_t from_nid, hda_nid_t to_nid,
367 			     int anchor_nid, struct nid_path *path,
368 			     int depth)
369 {
370 	const hda_nid_t *conn;
371 	int i, nums;
372 
373 	if (to_nid == anchor_nid)
374 		anchor_nid = 0; /* anchor passed */
375 	else if (to_nid == (hda_nid_t)(-anchor_nid))
376 		return false; /* hit the exclusive nid */
377 
378 	nums = snd_hda_get_conn_list(codec, to_nid, &conn);
379 	for (i = 0; i < nums; i++) {
380 		if (conn[i] != from_nid) {
381 			/* special case: when from_nid is 0,
382 			 * try to find an empty DAC
383 			 */
384 			if (from_nid ||
385 			    get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
386 			    is_dac_already_used(codec, conn[i]))
387 				continue;
388 		}
389 		/* anchor is not requested or already passed? */
390 		if (anchor_nid <= 0)
391 			goto found;
392 	}
393 	if (depth >= MAX_NID_PATH_DEPTH)
394 		return false;
395 	for (i = 0; i < nums; i++) {
396 		unsigned int type;
397 		type = get_wcaps_type(get_wcaps(codec, conn[i]));
398 		if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
399 		    type == AC_WID_PIN)
400 			continue;
401 		if (__parse_nid_path(codec, from_nid, conn[i],
402 				     anchor_nid, path, depth + 1))
403 			goto found;
404 	}
405 	return false;
406 
407  found:
408 	path->path[path->depth] = conn[i];
409 	path->idx[path->depth + 1] = i;
410 	if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
411 		path->multi[path->depth + 1] = 1;
412 	path->depth++;
413 	return true;
414 }
415 
416 /* parse the widget path from the given nid to the target nid;
417  * when @from_nid is 0, try to find an empty DAC;
418  * when @anchor_nid is set to a positive value, only paths through the widget
419  * with the given value are evaluated.
420  * when @anchor_nid is set to a negative value, paths through the widget
421  * with the negative of given value are excluded, only other paths are chosen.
422  * when @anchor_nid is zero, no special handling about path selection.
423  */
424 bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
425 			    hda_nid_t to_nid, int anchor_nid,
426 			    struct nid_path *path)
427 {
428 	if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
429 		path->path[path->depth] = to_nid;
430 		path->depth++;
431 		return true;
432 	}
433 	return false;
434 }
435 EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path);
436 
437 /*
438  * parse the path between the given NIDs and add to the path list.
439  * if no valid path is found, return NULL
440  */
441 struct nid_path *
442 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
443 		     hda_nid_t to_nid, int anchor_nid)
444 {
445 	struct hda_gen_spec *spec = codec->spec;
446 	struct nid_path *path;
447 
448 	if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
449 		return NULL;
450 
451 	/* check whether the path has been already added */
452 	path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
453 	if (path)
454 		return path;
455 
456 	path = snd_array_new(&spec->paths);
457 	if (!path)
458 		return NULL;
459 	memset(path, 0, sizeof(*path));
460 	if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
461 		return path;
462 	/* push back */
463 	spec->paths.used--;
464 	return NULL;
465 }
466 EXPORT_SYMBOL_HDA(snd_hda_add_new_path);
467 
468 /* clear the given path as invalid so that it won't be picked up later */
469 static void invalidate_nid_path(struct hda_codec *codec, int idx)
470 {
471 	struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
472 	if (!path)
473 		return;
474 	memset(path, 0, sizeof(*path));
475 }
476 
477 /* return a DAC if paired to the given pin by codec driver */
478 static hda_nid_t get_preferred_dac(struct hda_codec *codec, hda_nid_t pin)
479 {
480 	struct hda_gen_spec *spec = codec->spec;
481 	const hda_nid_t *list = spec->preferred_dacs;
482 
483 	if (!list)
484 		return 0;
485 	for (; *list; list += 2)
486 		if (*list == pin)
487 			return list[1];
488 	return 0;
489 }
490 
491 /* look for an empty DAC slot */
492 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
493 			      bool is_digital)
494 {
495 	struct hda_gen_spec *spec = codec->spec;
496 	bool cap_digital;
497 	int i;
498 
499 	for (i = 0; i < spec->num_all_dacs; i++) {
500 		hda_nid_t nid = spec->all_dacs[i];
501 		if (!nid || is_dac_already_used(codec, nid))
502 			continue;
503 		cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
504 		if (is_digital != cap_digital)
505 			continue;
506 		if (is_reachable_path(codec, nid, pin))
507 			return nid;
508 	}
509 	return 0;
510 }
511 
512 /* replace the channels in the composed amp value with the given number */
513 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
514 {
515 	val &= ~(0x3U << 16);
516 	val |= chs << 16;
517 	return val;
518 }
519 
520 /* check whether the widget has the given amp capability for the direction */
521 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
522 			   int dir, unsigned int bits)
523 {
524 	if (!nid)
525 		return false;
526 	if (get_wcaps(codec, nid) & (1 << (dir + 1)))
527 		if (query_amp_caps(codec, nid, dir) & bits)
528 			return true;
529 	return false;
530 }
531 
532 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
533 			  hda_nid_t nid2, int dir)
534 {
535 	if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
536 		return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
537 	return (query_amp_caps(codec, nid1, dir) ==
538 		query_amp_caps(codec, nid2, dir));
539 }
540 
541 #define nid_has_mute(codec, nid, dir) \
542 	check_amp_caps(codec, nid, dir, (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE))
543 #define nid_has_volume(codec, nid, dir) \
544 	check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
545 
546 /* look for a widget suitable for assigning a mute switch in the path */
547 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
548 				       struct nid_path *path)
549 {
550 	int i;
551 
552 	for (i = path->depth - 1; i >= 0; i--) {
553 		if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
554 			return path->path[i];
555 		if (i != path->depth - 1 && i != 0 &&
556 		    nid_has_mute(codec, path->path[i], HDA_INPUT))
557 			return path->path[i];
558 	}
559 	return 0;
560 }
561 
562 /* look for a widget suitable for assigning a volume ctl in the path */
563 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
564 				      struct nid_path *path)
565 {
566 	struct hda_gen_spec *spec = codec->spec;
567 	int i;
568 
569 	for (i = path->depth - 1; i >= 0; i--) {
570 		hda_nid_t nid = path->path[i];
571 		if ((spec->out_vol_mask >> nid) & 1)
572 			continue;
573 		if (nid_has_volume(codec, nid, HDA_OUTPUT))
574 			return nid;
575 	}
576 	return 0;
577 }
578 
579 /*
580  * path activation / deactivation
581  */
582 
583 /* can have the amp-in capability? */
584 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
585 {
586 	hda_nid_t nid = path->path[idx];
587 	unsigned int caps = get_wcaps(codec, nid);
588 	unsigned int type = get_wcaps_type(caps);
589 
590 	if (!(caps & AC_WCAP_IN_AMP))
591 		return false;
592 	if (type == AC_WID_PIN && idx > 0) /* only for input pins */
593 		return false;
594 	return true;
595 }
596 
597 /* can have the amp-out capability? */
598 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
599 {
600 	hda_nid_t nid = path->path[idx];
601 	unsigned int caps = get_wcaps(codec, nid);
602 	unsigned int type = get_wcaps_type(caps);
603 
604 	if (!(caps & AC_WCAP_OUT_AMP))
605 		return false;
606 	if (type == AC_WID_PIN && !idx) /* only for output pins */
607 		return false;
608 	return true;
609 }
610 
611 /* check whether the given (nid,dir,idx) is active */
612 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
613 			  unsigned int dir, unsigned int idx)
614 {
615 	struct hda_gen_spec *spec = codec->spec;
616 	int i, n;
617 
618 	for (n = 0; n < spec->paths.used; n++) {
619 		struct nid_path *path = snd_array_elem(&spec->paths, n);
620 		if (!path->active)
621 			continue;
622 		for (i = 0; i < path->depth; i++) {
623 			if (path->path[i] == nid) {
624 				if (dir == HDA_OUTPUT || path->idx[i] == idx)
625 					return true;
626 				break;
627 			}
628 		}
629 	}
630 	return false;
631 }
632 
633 /* check whether the NID is referred by any active paths */
634 #define is_active_nid_for_any(codec, nid) \
635 	is_active_nid(codec, nid, HDA_OUTPUT, 0)
636 
637 /* get the default amp value for the target state */
638 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
639 				   int dir, unsigned int caps, bool enable)
640 {
641 	unsigned int val = 0;
642 
643 	if (caps & AC_AMPCAP_NUM_STEPS) {
644 		/* set to 0dB */
645 		if (enable)
646 			val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
647 	}
648 	if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
649 		if (!enable)
650 			val |= HDA_AMP_MUTE;
651 	}
652 	return val;
653 }
654 
655 /* initialize the amp value (only at the first time) */
656 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
657 {
658 	unsigned int caps = query_amp_caps(codec, nid, dir);
659 	int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
660 	snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
661 }
662 
663 /* calculate amp value mask we can modify;
664  * if the given amp is controlled by mixers, don't touch it
665  */
666 static unsigned int get_amp_mask_to_modify(struct hda_codec *codec,
667 					   hda_nid_t nid, int dir, int idx,
668 					   unsigned int caps)
669 {
670 	unsigned int mask = 0xff;
671 
672 	if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
673 		if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL))
674 			mask &= ~0x80;
675 	}
676 	if (caps & AC_AMPCAP_NUM_STEPS) {
677 		if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
678 		    is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
679 			mask &= ~0x7f;
680 	}
681 	return mask;
682 }
683 
684 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
685 			 int idx, int idx_to_check, bool enable)
686 {
687 	unsigned int caps;
688 	unsigned int mask, val;
689 
690 	if (!enable && is_active_nid(codec, nid, dir, idx_to_check))
691 		return;
692 
693 	caps = query_amp_caps(codec, nid, dir);
694 	val = get_amp_val_to_activate(codec, nid, dir, caps, enable);
695 	mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps);
696 	if (!mask)
697 		return;
698 
699 	val &= mask;
700 	snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val);
701 }
702 
703 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
704 			     int i, bool enable)
705 {
706 	hda_nid_t nid = path->path[i];
707 	init_amp(codec, nid, HDA_OUTPUT, 0);
708 	activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable);
709 }
710 
711 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
712 			    int i, bool enable, bool add_aamix)
713 {
714 	struct hda_gen_spec *spec = codec->spec;
715 	const hda_nid_t *conn;
716 	int n, nums, idx;
717 	int type;
718 	hda_nid_t nid = path->path[i];
719 
720 	nums = snd_hda_get_conn_list(codec, nid, &conn);
721 	type = get_wcaps_type(get_wcaps(codec, nid));
722 	if (type == AC_WID_PIN ||
723 	    (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
724 		nums = 1;
725 		idx = 0;
726 	} else
727 		idx = path->idx[i];
728 
729 	for (n = 0; n < nums; n++)
730 		init_amp(codec, nid, HDA_INPUT, n);
731 
732 	/* here is a little bit tricky in comparison with activate_amp_out();
733 	 * when aa-mixer is available, we need to enable the path as well
734 	 */
735 	for (n = 0; n < nums; n++) {
736 		if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid))
737 			continue;
738 		activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
739 	}
740 }
741 
742 /* activate or deactivate the given path
743  * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
744  */
745 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
746 			   bool enable, bool add_aamix)
747 {
748 	struct hda_gen_spec *spec = codec->spec;
749 	int i;
750 
751 	if (!enable)
752 		path->active = false;
753 
754 	for (i = path->depth - 1; i >= 0; i--) {
755 		hda_nid_t nid = path->path[i];
756 		if (enable && spec->power_down_unused) {
757 			/* make sure the widget is powered up */
758 			if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D0))
759 				snd_hda_codec_write(codec, nid, 0,
760 						    AC_VERB_SET_POWER_STATE,
761 						    AC_PWRST_D0);
762 		}
763 		if (enable && path->multi[i])
764 			snd_hda_codec_write_cache(codec, nid, 0,
765 					    AC_VERB_SET_CONNECT_SEL,
766 					    path->idx[i]);
767 		if (has_amp_in(codec, path, i))
768 			activate_amp_in(codec, path, i, enable, add_aamix);
769 		if (has_amp_out(codec, path, i))
770 			activate_amp_out(codec, path, i, enable);
771 	}
772 
773 	if (enable)
774 		path->active = true;
775 }
776 EXPORT_SYMBOL_HDA(snd_hda_activate_path);
777 
778 /* if the given path is inactive, put widgets into D3 (only if suitable) */
779 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
780 {
781 	struct hda_gen_spec *spec = codec->spec;
782 	bool changed = false;
783 	int i;
784 
785 	if (!spec->power_down_unused || path->active)
786 		return;
787 
788 	for (i = 0; i < path->depth; i++) {
789 		hda_nid_t nid = path->path[i];
790 		if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3) &&
791 		    !is_active_nid_for_any(codec, nid)) {
792 			snd_hda_codec_write(codec, nid, 0,
793 					    AC_VERB_SET_POWER_STATE,
794 					    AC_PWRST_D3);
795 			changed = true;
796 		}
797 	}
798 
799 	if (changed) {
800 		msleep(10);
801 		snd_hda_codec_read(codec, path->path[0], 0,
802 				   AC_VERB_GET_POWER_STATE, 0);
803 	}
804 }
805 
806 /* turn on/off EAPD on the given pin */
807 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
808 {
809 	struct hda_gen_spec *spec = codec->spec;
810 	if (spec->own_eapd_ctl ||
811 	    !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
812 		return;
813 	if (spec->keep_eapd_on && !enable)
814 		return;
815 	if (codec->inv_eapd)
816 		enable = !enable;
817 	snd_hda_codec_update_cache(codec, pin, 0,
818 				   AC_VERB_SET_EAPD_BTLENABLE,
819 				   enable ? 0x02 : 0x00);
820 }
821 
822 /* re-initialize the path specified by the given path index */
823 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
824 {
825 	struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
826 	if (path)
827 		snd_hda_activate_path(codec, path, path->active, false);
828 }
829 
830 
831 /*
832  * Helper functions for creating mixer ctl elements
833  */
834 
835 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
836 				  struct snd_ctl_elem_value *ucontrol);
837 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
838 				 struct snd_ctl_elem_value *ucontrol);
839 
840 enum {
841 	HDA_CTL_WIDGET_VOL,
842 	HDA_CTL_WIDGET_MUTE,
843 	HDA_CTL_BIND_MUTE,
844 };
845 static const struct snd_kcontrol_new control_templates[] = {
846 	HDA_CODEC_VOLUME(NULL, 0, 0, 0),
847 	/* only the put callback is replaced for handling the special mute */
848 	{
849 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
850 		.subdevice = HDA_SUBDEV_AMP_FLAG,
851 		.info = snd_hda_mixer_amp_switch_info,
852 		.get = snd_hda_mixer_amp_switch_get,
853 		.put = hda_gen_mixer_mute_put, /* replaced */
854 		.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
855 	},
856 	{
857 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
858 		.info = snd_hda_mixer_amp_switch_info,
859 		.get = snd_hda_mixer_bind_switch_get,
860 		.put = hda_gen_bind_mute_put, /* replaced */
861 		.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
862 	},
863 };
864 
865 /* add dynamic controls from template */
866 static struct snd_kcontrol_new *
867 add_control(struct hda_gen_spec *spec, int type, const char *name,
868 		       int cidx, unsigned long val)
869 {
870 	struct snd_kcontrol_new *knew;
871 
872 	knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
873 	if (!knew)
874 		return NULL;
875 	knew->index = cidx;
876 	if (get_amp_nid_(val))
877 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
878 	knew->private_value = val;
879 	return knew;
880 }
881 
882 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
883 				const char *pfx, const char *dir,
884 				const char *sfx, int cidx, unsigned long val)
885 {
886 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
887 	snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
888 	if (!add_control(spec, type, name, cidx, val))
889 		return -ENOMEM;
890 	return 0;
891 }
892 
893 #define add_pb_vol_ctrl(spec, type, pfx, val)			\
894 	add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
895 #define add_pb_sw_ctrl(spec, type, pfx, val)			\
896 	add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
897 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val)			\
898 	add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
899 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val)			\
900 	add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
901 
902 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
903 		       unsigned int chs, struct nid_path *path)
904 {
905 	unsigned int val;
906 	if (!path)
907 		return 0;
908 	val = path->ctls[NID_PATH_VOL_CTL];
909 	if (!val)
910 		return 0;
911 	val = amp_val_replace_channels(val, chs);
912 	return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
913 }
914 
915 /* return the channel bits suitable for the given path->ctls[] */
916 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
917 			       int type)
918 {
919 	int chs = 1; /* mono (left only) */
920 	if (path) {
921 		hda_nid_t nid = get_amp_nid_(path->ctls[type]);
922 		if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
923 			chs = 3; /* stereo */
924 	}
925 	return chs;
926 }
927 
928 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
929 			  struct nid_path *path)
930 {
931 	int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
932 	return add_vol_ctl(codec, pfx, cidx, chs, path);
933 }
934 
935 /* create a mute-switch for the given mixer widget;
936  * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
937  */
938 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
939 		      unsigned int chs, struct nid_path *path)
940 {
941 	unsigned int val;
942 	int type = HDA_CTL_WIDGET_MUTE;
943 
944 	if (!path)
945 		return 0;
946 	val = path->ctls[NID_PATH_MUTE_CTL];
947 	if (!val)
948 		return 0;
949 	val = amp_val_replace_channels(val, chs);
950 	if (get_amp_direction_(val) == HDA_INPUT) {
951 		hda_nid_t nid = get_amp_nid_(val);
952 		int nums = snd_hda_get_num_conns(codec, nid);
953 		if (nums > 1) {
954 			type = HDA_CTL_BIND_MUTE;
955 			val |= nums << 19;
956 		}
957 	}
958 	return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
959 }
960 
961 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
962 				  int cidx, struct nid_path *path)
963 {
964 	int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
965 	return add_sw_ctl(codec, pfx, cidx, chs, path);
966 }
967 
968 /* playback mute control with the software mute bit check */
969 static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
970 				struct snd_ctl_elem_value *ucontrol)
971 {
972 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
973 	struct hda_gen_spec *spec = codec->spec;
974 
975 	if (spec->auto_mute_via_amp) {
976 		hda_nid_t nid = get_amp_nid(kcontrol);
977 		bool enabled = !((spec->mute_bits >> nid) & 1);
978 		ucontrol->value.integer.value[0] &= enabled;
979 		ucontrol->value.integer.value[1] &= enabled;
980 	}
981 }
982 
983 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
984 				  struct snd_ctl_elem_value *ucontrol)
985 {
986 	sync_auto_mute_bits(kcontrol, ucontrol);
987 	return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
988 }
989 
990 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
991 				 struct snd_ctl_elem_value *ucontrol)
992 {
993 	sync_auto_mute_bits(kcontrol, ucontrol);
994 	return snd_hda_mixer_bind_switch_put(kcontrol, ucontrol);
995 }
996 
997 /* any ctl assigned to the path with the given index? */
998 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
999 {
1000 	struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
1001 	return path && path->ctls[ctl_type];
1002 }
1003 
1004 static const char * const channel_name[4] = {
1005 	"Front", "Surround", "CLFE", "Side"
1006 };
1007 
1008 /* give some appropriate ctl name prefix for the given line out channel */
1009 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1010 				    int *index, int ctl_type)
1011 {
1012 	struct hda_gen_spec *spec = codec->spec;
1013 	struct auto_pin_cfg *cfg = &spec->autocfg;
1014 
1015 	*index = 0;
1016 	if (cfg->line_outs == 1 && !spec->multi_ios &&
1017 	    !cfg->hp_outs && !cfg->speaker_outs)
1018 		return spec->vmaster_mute.hook ? "PCM" : "Master";
1019 
1020 	/* if there is really a single DAC used in the whole output paths,
1021 	 * use it master (or "PCM" if a vmaster hook is present)
1022 	 */
1023 	if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1024 	    !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1025 		return spec->vmaster_mute.hook ? "PCM" : "Master";
1026 
1027 	/* multi-io channels */
1028 	if (ch >= cfg->line_outs)
1029 		return channel_name[ch];
1030 
1031 	switch (cfg->line_out_type) {
1032 	case AUTO_PIN_SPEAKER_OUT:
1033 		/* if the primary channel vol/mute is shared with HP volume,
1034 		 * don't name it as Speaker
1035 		 */
1036 		if (!ch && cfg->hp_outs &&
1037 		    !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1038 			break;
1039 		if (cfg->line_outs == 1)
1040 			return "Speaker";
1041 		if (cfg->line_outs == 2)
1042 			return ch ? "Bass Speaker" : "Speaker";
1043 		break;
1044 	case AUTO_PIN_HP_OUT:
1045 		/* if the primary channel vol/mute is shared with spk volume,
1046 		 * don't name it as Headphone
1047 		 */
1048 		if (!ch && cfg->speaker_outs &&
1049 		    !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1050 			break;
1051 		/* for multi-io case, only the primary out */
1052 		if (ch && spec->multi_ios)
1053 			break;
1054 		*index = ch;
1055 		return "Headphone";
1056 	}
1057 
1058 	/* for a single channel output, we don't have to name the channel */
1059 	if (cfg->line_outs == 1 && !spec->multi_ios)
1060 		return "PCM";
1061 
1062 	if (ch >= ARRAY_SIZE(channel_name)) {
1063 		snd_BUG();
1064 		return "PCM";
1065 	}
1066 
1067 	return channel_name[ch];
1068 }
1069 
1070 /*
1071  * Parse output paths
1072  */
1073 
1074 /* badness definition */
1075 enum {
1076 	/* No primary DAC is found for the main output */
1077 	BAD_NO_PRIMARY_DAC = 0x10000,
1078 	/* No DAC is found for the extra output */
1079 	BAD_NO_DAC = 0x4000,
1080 	/* No possible multi-ios */
1081 	BAD_MULTI_IO = 0x120,
1082 	/* No individual DAC for extra output */
1083 	BAD_NO_EXTRA_DAC = 0x102,
1084 	/* No individual DAC for extra surrounds */
1085 	BAD_NO_EXTRA_SURR_DAC = 0x101,
1086 	/* Primary DAC shared with main surrounds */
1087 	BAD_SHARED_SURROUND = 0x100,
1088 	/* No independent HP possible */
1089 	BAD_NO_INDEP_HP = 0x10,
1090 	/* Primary DAC shared with main CLFE */
1091 	BAD_SHARED_CLFE = 0x10,
1092 	/* Primary DAC shared with extra surrounds */
1093 	BAD_SHARED_EXTRA_SURROUND = 0x10,
1094 	/* Volume widget is shared */
1095 	BAD_SHARED_VOL = 0x10,
1096 };
1097 
1098 /* look for widgets in the given path which are appropriate for
1099  * volume and mute controls, and assign the values to ctls[].
1100  *
1101  * When no appropriate widget is found in the path, the badness value
1102  * is incremented depending on the situation.  The function returns the
1103  * total badness for both volume and mute controls.
1104  */
1105 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1106 {
1107 	hda_nid_t nid;
1108 	unsigned int val;
1109 	int badness = 0;
1110 
1111 	if (!path)
1112 		return BAD_SHARED_VOL * 2;
1113 
1114 	if (path->ctls[NID_PATH_VOL_CTL] ||
1115 	    path->ctls[NID_PATH_MUTE_CTL])
1116 		return 0; /* already evaluated */
1117 
1118 	nid = look_for_out_vol_nid(codec, path);
1119 	if (nid) {
1120 		val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1121 		if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1122 			badness += BAD_SHARED_VOL;
1123 		else
1124 			path->ctls[NID_PATH_VOL_CTL] = val;
1125 	} else
1126 		badness += BAD_SHARED_VOL;
1127 	nid = look_for_out_mute_nid(codec, path);
1128 	if (nid) {
1129 		unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1130 		if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1131 		    nid_has_mute(codec, nid, HDA_OUTPUT))
1132 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1133 		else
1134 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1135 		if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1136 			badness += BAD_SHARED_VOL;
1137 		else
1138 			path->ctls[NID_PATH_MUTE_CTL] = val;
1139 	} else
1140 		badness += BAD_SHARED_VOL;
1141 	return badness;
1142 }
1143 
1144 const struct badness_table hda_main_out_badness = {
1145 	.no_primary_dac = BAD_NO_PRIMARY_DAC,
1146 	.no_dac = BAD_NO_DAC,
1147 	.shared_primary = BAD_NO_PRIMARY_DAC,
1148 	.shared_surr = BAD_SHARED_SURROUND,
1149 	.shared_clfe = BAD_SHARED_CLFE,
1150 	.shared_surr_main = BAD_SHARED_SURROUND,
1151 };
1152 EXPORT_SYMBOL_HDA(hda_main_out_badness);
1153 
1154 const struct badness_table hda_extra_out_badness = {
1155 	.no_primary_dac = BAD_NO_DAC,
1156 	.no_dac = BAD_NO_DAC,
1157 	.shared_primary = BAD_NO_EXTRA_DAC,
1158 	.shared_surr = BAD_SHARED_EXTRA_SURROUND,
1159 	.shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1160 	.shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1161 };
1162 EXPORT_SYMBOL_HDA(hda_extra_out_badness);
1163 
1164 /* get the DAC of the primary output corresponding to the given array index */
1165 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1166 {
1167 	struct hda_gen_spec *spec = codec->spec;
1168 	struct auto_pin_cfg *cfg = &spec->autocfg;
1169 
1170 	if (cfg->line_outs > idx)
1171 		return spec->private_dac_nids[idx];
1172 	idx -= cfg->line_outs;
1173 	if (spec->multi_ios > idx)
1174 		return spec->multi_io[idx].dac;
1175 	return 0;
1176 }
1177 
1178 /* return the DAC if it's reachable, otherwise zero */
1179 static inline hda_nid_t try_dac(struct hda_codec *codec,
1180 				hda_nid_t dac, hda_nid_t pin)
1181 {
1182 	return is_reachable_path(codec, dac, pin) ? dac : 0;
1183 }
1184 
1185 /* try to assign DACs to pins and return the resultant badness */
1186 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1187 			   const hda_nid_t *pins, hda_nid_t *dacs,
1188 			   int *path_idx,
1189 			   const struct badness_table *bad)
1190 {
1191 	struct hda_gen_spec *spec = codec->spec;
1192 	int i, j;
1193 	int badness = 0;
1194 	hda_nid_t dac;
1195 
1196 	if (!num_outs)
1197 		return 0;
1198 
1199 	for (i = 0; i < num_outs; i++) {
1200 		struct nid_path *path;
1201 		hda_nid_t pin = pins[i];
1202 
1203 		path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1204 		if (path) {
1205 			badness += assign_out_path_ctls(codec, path);
1206 			continue;
1207 		}
1208 
1209 		dacs[i] = get_preferred_dac(codec, pin);
1210 		if (dacs[i]) {
1211 			if (is_dac_already_used(codec, dacs[i]))
1212 				badness += bad->shared_primary;
1213 		}
1214 
1215 		if (!dacs[i])
1216 			dacs[i] = look_for_dac(codec, pin, false);
1217 		if (!dacs[i] && !i) {
1218 			/* try to steal the DAC of surrounds for the front */
1219 			for (j = 1; j < num_outs; j++) {
1220 				if (is_reachable_path(codec, dacs[j], pin)) {
1221 					dacs[0] = dacs[j];
1222 					dacs[j] = 0;
1223 					invalidate_nid_path(codec, path_idx[j]);
1224 					path_idx[j] = 0;
1225 					break;
1226 				}
1227 			}
1228 		}
1229 		dac = dacs[i];
1230 		if (!dac) {
1231 			if (num_outs > 2)
1232 				dac = try_dac(codec, get_primary_out(codec, i), pin);
1233 			if (!dac)
1234 				dac = try_dac(codec, dacs[0], pin);
1235 			if (!dac)
1236 				dac = try_dac(codec, get_primary_out(codec, i), pin);
1237 			if (dac) {
1238 				if (!i)
1239 					badness += bad->shared_primary;
1240 				else if (i == 1)
1241 					badness += bad->shared_surr;
1242 				else
1243 					badness += bad->shared_clfe;
1244 			} else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1245 				dac = spec->private_dac_nids[0];
1246 				badness += bad->shared_surr_main;
1247 			} else if (!i)
1248 				badness += bad->no_primary_dac;
1249 			else
1250 				badness += bad->no_dac;
1251 		}
1252 		if (!dac)
1253 			continue;
1254 		path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1255 		if (!path && !i && spec->mixer_nid) {
1256 			/* try with aamix */
1257 			path = snd_hda_add_new_path(codec, dac, pin, 0);
1258 		}
1259 		if (!path) {
1260 			dac = dacs[i] = 0;
1261 			badness += bad->no_dac;
1262 		} else {
1263 			/* print_nid_path("output", path); */
1264 			path->active = true;
1265 			path_idx[i] = snd_hda_get_path_idx(codec, path);
1266 			badness += assign_out_path_ctls(codec, path);
1267 		}
1268 	}
1269 
1270 	return badness;
1271 }
1272 
1273 /* return NID if the given pin has only a single connection to a certain DAC */
1274 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1275 {
1276 	struct hda_gen_spec *spec = codec->spec;
1277 	int i;
1278 	hda_nid_t nid_found = 0;
1279 
1280 	for (i = 0; i < spec->num_all_dacs; i++) {
1281 		hda_nid_t nid = spec->all_dacs[i];
1282 		if (!nid || is_dac_already_used(codec, nid))
1283 			continue;
1284 		if (is_reachable_path(codec, nid, pin)) {
1285 			if (nid_found)
1286 				return 0;
1287 			nid_found = nid;
1288 		}
1289 	}
1290 	return nid_found;
1291 }
1292 
1293 /* check whether the given pin can be a multi-io pin */
1294 static bool can_be_multiio_pin(struct hda_codec *codec,
1295 			       unsigned int location, hda_nid_t nid)
1296 {
1297 	unsigned int defcfg, caps;
1298 
1299 	defcfg = snd_hda_codec_get_pincfg(codec, nid);
1300 	if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1301 		return false;
1302 	if (location && get_defcfg_location(defcfg) != location)
1303 		return false;
1304 	caps = snd_hda_query_pin_caps(codec, nid);
1305 	if (!(caps & AC_PINCAP_OUT))
1306 		return false;
1307 	return true;
1308 }
1309 
1310 /* count the number of input pins that are capable to be multi-io */
1311 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1312 {
1313 	struct hda_gen_spec *spec = codec->spec;
1314 	struct auto_pin_cfg *cfg = &spec->autocfg;
1315 	unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1316 	unsigned int location = get_defcfg_location(defcfg);
1317 	int type, i;
1318 	int num_pins = 0;
1319 
1320 	for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1321 		for (i = 0; i < cfg->num_inputs; i++) {
1322 			if (cfg->inputs[i].type != type)
1323 				continue;
1324 			if (can_be_multiio_pin(codec, location,
1325 					       cfg->inputs[i].pin))
1326 				num_pins++;
1327 		}
1328 	}
1329 	return num_pins;
1330 }
1331 
1332 /*
1333  * multi-io helper
1334  *
1335  * When hardwired is set, try to fill ony hardwired pins, and returns
1336  * zero if any pins are filled, non-zero if nothing found.
1337  * When hardwired is off, try to fill possible input pins, and returns
1338  * the badness value.
1339  */
1340 static int fill_multi_ios(struct hda_codec *codec,
1341 			  hda_nid_t reference_pin,
1342 			  bool hardwired)
1343 {
1344 	struct hda_gen_spec *spec = codec->spec;
1345 	struct auto_pin_cfg *cfg = &spec->autocfg;
1346 	int type, i, j, num_pins, old_pins;
1347 	unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1348 	unsigned int location = get_defcfg_location(defcfg);
1349 	int badness = 0;
1350 	struct nid_path *path;
1351 
1352 	old_pins = spec->multi_ios;
1353 	if (old_pins >= 2)
1354 		goto end_fill;
1355 
1356 	num_pins = count_multiio_pins(codec, reference_pin);
1357 	if (num_pins < 2)
1358 		goto end_fill;
1359 
1360 	for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1361 		for (i = 0; i < cfg->num_inputs; i++) {
1362 			hda_nid_t nid = cfg->inputs[i].pin;
1363 			hda_nid_t dac = 0;
1364 
1365 			if (cfg->inputs[i].type != type)
1366 				continue;
1367 			if (!can_be_multiio_pin(codec, location, nid))
1368 				continue;
1369 			for (j = 0; j < spec->multi_ios; j++) {
1370 				if (nid == spec->multi_io[j].pin)
1371 					break;
1372 			}
1373 			if (j < spec->multi_ios)
1374 				continue;
1375 
1376 			if (hardwired)
1377 				dac = get_dac_if_single(codec, nid);
1378 			else if (!dac)
1379 				dac = look_for_dac(codec, nid, false);
1380 			if (!dac) {
1381 				badness++;
1382 				continue;
1383 			}
1384 			path = snd_hda_add_new_path(codec, dac, nid,
1385 						    -spec->mixer_nid);
1386 			if (!path) {
1387 				badness++;
1388 				continue;
1389 			}
1390 			/* print_nid_path("multiio", path); */
1391 			spec->multi_io[spec->multi_ios].pin = nid;
1392 			spec->multi_io[spec->multi_ios].dac = dac;
1393 			spec->out_paths[cfg->line_outs + spec->multi_ios] =
1394 				snd_hda_get_path_idx(codec, path);
1395 			spec->multi_ios++;
1396 			if (spec->multi_ios >= 2)
1397 				break;
1398 		}
1399 	}
1400  end_fill:
1401 	if (badness)
1402 		badness = BAD_MULTI_IO;
1403 	if (old_pins == spec->multi_ios) {
1404 		if (hardwired)
1405 			return 1; /* nothing found */
1406 		else
1407 			return badness; /* no badness if nothing found */
1408 	}
1409 	if (!hardwired && spec->multi_ios < 2) {
1410 		/* cancel newly assigned paths */
1411 		spec->paths.used -= spec->multi_ios - old_pins;
1412 		spec->multi_ios = old_pins;
1413 		return badness;
1414 	}
1415 
1416 	/* assign volume and mute controls */
1417 	for (i = old_pins; i < spec->multi_ios; i++) {
1418 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1419 		badness += assign_out_path_ctls(codec, path);
1420 	}
1421 
1422 	return badness;
1423 }
1424 
1425 /* map DACs for all pins in the list if they are single connections */
1426 static bool map_singles(struct hda_codec *codec, int outs,
1427 			const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1428 {
1429 	struct hda_gen_spec *spec = codec->spec;
1430 	int i;
1431 	bool found = false;
1432 	for (i = 0; i < outs; i++) {
1433 		struct nid_path *path;
1434 		hda_nid_t dac;
1435 		if (dacs[i])
1436 			continue;
1437 		dac = get_dac_if_single(codec, pins[i]);
1438 		if (!dac)
1439 			continue;
1440 		path = snd_hda_add_new_path(codec, dac, pins[i],
1441 					    -spec->mixer_nid);
1442 		if (!path && !i && spec->mixer_nid)
1443 			path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1444 		if (path) {
1445 			dacs[i] = dac;
1446 			found = true;
1447 			/* print_nid_path("output", path); */
1448 			path->active = true;
1449 			path_idx[i] = snd_hda_get_path_idx(codec, path);
1450 		}
1451 	}
1452 	return found;
1453 }
1454 
1455 /* create a new path including aamix if available, and return its index */
1456 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1457 {
1458 	struct hda_gen_spec *spec = codec->spec;
1459 	struct nid_path *path;
1460 	hda_nid_t path_dac, dac, pin;
1461 
1462 	path = snd_hda_get_path_from_idx(codec, path_idx);
1463 	if (!path || !path->depth ||
1464 	    is_nid_contained(path, spec->mixer_nid))
1465 		return 0;
1466 	path_dac = path->path[0];
1467 	dac = spec->private_dac_nids[0];
1468 	pin = path->path[path->depth - 1];
1469 	path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1470 	if (!path) {
1471 		if (dac != path_dac)
1472 			dac = path_dac;
1473 		else if (spec->multiout.hp_out_nid[0])
1474 			dac = spec->multiout.hp_out_nid[0];
1475 		else if (spec->multiout.extra_out_nid[0])
1476 			dac = spec->multiout.extra_out_nid[0];
1477 		else
1478 			dac = 0;
1479 		if (dac)
1480 			path = snd_hda_add_new_path(codec, dac, pin,
1481 						    spec->mixer_nid);
1482 	}
1483 	if (!path)
1484 		return 0;
1485 	/* print_nid_path("output-aamix", path); */
1486 	path->active = false; /* unused as default */
1487 	return snd_hda_get_path_idx(codec, path);
1488 }
1489 
1490 /* check whether the independent HP is available with the current config */
1491 static bool indep_hp_possible(struct hda_codec *codec)
1492 {
1493 	struct hda_gen_spec *spec = codec->spec;
1494 	struct auto_pin_cfg *cfg = &spec->autocfg;
1495 	struct nid_path *path;
1496 	int i, idx;
1497 
1498 	if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1499 		idx = spec->out_paths[0];
1500 	else
1501 		idx = spec->hp_paths[0];
1502 	path = snd_hda_get_path_from_idx(codec, idx);
1503 	if (!path)
1504 		return false;
1505 
1506 	/* assume no path conflicts unless aamix is involved */
1507 	if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1508 		return true;
1509 
1510 	/* check whether output paths contain aamix */
1511 	for (i = 0; i < cfg->line_outs; i++) {
1512 		if (spec->out_paths[i] == idx)
1513 			break;
1514 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1515 		if (path && is_nid_contained(path, spec->mixer_nid))
1516 			return false;
1517 	}
1518 	for (i = 0; i < cfg->speaker_outs; i++) {
1519 		path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1520 		if (path && is_nid_contained(path, spec->mixer_nid))
1521 			return false;
1522 	}
1523 
1524 	return true;
1525 }
1526 
1527 /* fill the empty entries in the dac array for speaker/hp with the
1528  * shared dac pointed by the paths
1529  */
1530 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1531 			       hda_nid_t *dacs, int *path_idx)
1532 {
1533 	struct nid_path *path;
1534 	int i;
1535 
1536 	for (i = 0; i < num_outs; i++) {
1537 		if (dacs[i])
1538 			continue;
1539 		path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1540 		if (!path)
1541 			continue;
1542 		dacs[i] = path->path[0];
1543 	}
1544 }
1545 
1546 /* fill in the dac_nids table from the parsed pin configuration */
1547 static int fill_and_eval_dacs(struct hda_codec *codec,
1548 			      bool fill_hardwired,
1549 			      bool fill_mio_first)
1550 {
1551 	struct hda_gen_spec *spec = codec->spec;
1552 	struct auto_pin_cfg *cfg = &spec->autocfg;
1553 	int i, err, badness;
1554 
1555 	/* set num_dacs once to full for look_for_dac() */
1556 	spec->multiout.num_dacs = cfg->line_outs;
1557 	spec->multiout.dac_nids = spec->private_dac_nids;
1558 	memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1559 	memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1560 	memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1561 	spec->multi_ios = 0;
1562 	snd_array_free(&spec->paths);
1563 
1564 	/* clear path indices */
1565 	memset(spec->out_paths, 0, sizeof(spec->out_paths));
1566 	memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1567 	memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1568 	memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1569 	memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1570 	memset(spec->input_paths, 0, sizeof(spec->input_paths));
1571 	memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1572 	memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1573 
1574 	badness = 0;
1575 
1576 	/* fill hard-wired DACs first */
1577 	if (fill_hardwired) {
1578 		bool mapped;
1579 		do {
1580 			mapped = map_singles(codec, cfg->line_outs,
1581 					     cfg->line_out_pins,
1582 					     spec->private_dac_nids,
1583 					     spec->out_paths);
1584 			mapped |= map_singles(codec, cfg->hp_outs,
1585 					      cfg->hp_pins,
1586 					      spec->multiout.hp_out_nid,
1587 					      spec->hp_paths);
1588 			mapped |= map_singles(codec, cfg->speaker_outs,
1589 					      cfg->speaker_pins,
1590 					      spec->multiout.extra_out_nid,
1591 					      spec->speaker_paths);
1592 			if (!spec->no_multi_io &&
1593 			    fill_mio_first && cfg->line_outs == 1 &&
1594 			    cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1595 				err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1596 				if (!err)
1597 					mapped = true;
1598 			}
1599 		} while (mapped);
1600 	}
1601 
1602 	badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1603 				   spec->private_dac_nids, spec->out_paths,
1604 				   spec->main_out_badness);
1605 
1606 	if (!spec->no_multi_io && fill_mio_first &&
1607 	    cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1608 		/* try to fill multi-io first */
1609 		err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1610 		if (err < 0)
1611 			return err;
1612 		/* we don't count badness at this stage yet */
1613 	}
1614 
1615 	if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1616 		err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1617 				      spec->multiout.hp_out_nid,
1618 				      spec->hp_paths,
1619 				      spec->extra_out_badness);
1620 		if (err < 0)
1621 			return err;
1622 		badness += err;
1623 	}
1624 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1625 		err = try_assign_dacs(codec, cfg->speaker_outs,
1626 				      cfg->speaker_pins,
1627 				      spec->multiout.extra_out_nid,
1628 				      spec->speaker_paths,
1629 				      spec->extra_out_badness);
1630 		if (err < 0)
1631 			return err;
1632 		badness += err;
1633 	}
1634 	if (!spec->no_multi_io &&
1635 	    cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1636 		err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1637 		if (err < 0)
1638 			return err;
1639 		badness += err;
1640 	}
1641 
1642 	if (spec->mixer_nid) {
1643 		spec->aamix_out_paths[0] =
1644 			check_aamix_out_path(codec, spec->out_paths[0]);
1645 		if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1646 			spec->aamix_out_paths[1] =
1647 				check_aamix_out_path(codec, spec->hp_paths[0]);
1648 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1649 			spec->aamix_out_paths[2] =
1650 				check_aamix_out_path(codec, spec->speaker_paths[0]);
1651 	}
1652 
1653 	if (!spec->no_multi_io &&
1654 	    cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1655 		if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1656 			spec->multi_ios = 1; /* give badness */
1657 
1658 	/* re-count num_dacs and squash invalid entries */
1659 	spec->multiout.num_dacs = 0;
1660 	for (i = 0; i < cfg->line_outs; i++) {
1661 		if (spec->private_dac_nids[i])
1662 			spec->multiout.num_dacs++;
1663 		else {
1664 			memmove(spec->private_dac_nids + i,
1665 				spec->private_dac_nids + i + 1,
1666 				sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1667 			spec->private_dac_nids[cfg->line_outs - 1] = 0;
1668 		}
1669 	}
1670 
1671 	spec->ext_channel_count = spec->min_channel_count =
1672 		spec->multiout.num_dacs * 2;
1673 
1674 	if (spec->multi_ios == 2) {
1675 		for (i = 0; i < 2; i++)
1676 			spec->private_dac_nids[spec->multiout.num_dacs++] =
1677 				spec->multi_io[i].dac;
1678 	} else if (spec->multi_ios) {
1679 		spec->multi_ios = 0;
1680 		badness += BAD_MULTI_IO;
1681 	}
1682 
1683 	if (spec->indep_hp && !indep_hp_possible(codec))
1684 		badness += BAD_NO_INDEP_HP;
1685 
1686 	/* re-fill the shared DAC for speaker / headphone */
1687 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1688 		refill_shared_dacs(codec, cfg->hp_outs,
1689 				   spec->multiout.hp_out_nid,
1690 				   spec->hp_paths);
1691 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1692 		refill_shared_dacs(codec, cfg->speaker_outs,
1693 				   spec->multiout.extra_out_nid,
1694 				   spec->speaker_paths);
1695 
1696 	return badness;
1697 }
1698 
1699 #define DEBUG_BADNESS
1700 
1701 #ifdef DEBUG_BADNESS
1702 #define debug_badness	snd_printdd
1703 #else
1704 #define debug_badness(...)
1705 #endif
1706 
1707 #ifdef DEBUG_BADNESS
1708 static inline void print_nid_path_idx(struct hda_codec *codec,
1709 				      const char *pfx, int idx)
1710 {
1711 	struct nid_path *path;
1712 
1713 	path = snd_hda_get_path_from_idx(codec, idx);
1714 	if (path)
1715 		print_nid_path(pfx, path);
1716 }
1717 
1718 static void debug_show_configs(struct hda_codec *codec,
1719 			       struct auto_pin_cfg *cfg)
1720 {
1721 	struct hda_gen_spec *spec = codec->spec;
1722 	static const char * const lo_type[3] = { "LO", "SP", "HP" };
1723 	int i;
1724 
1725 	debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1726 		      cfg->line_out_pins[0], cfg->line_out_pins[1],
1727 		      cfg->line_out_pins[2], cfg->line_out_pins[3],
1728 		      spec->multiout.dac_nids[0],
1729 		      spec->multiout.dac_nids[1],
1730 		      spec->multiout.dac_nids[2],
1731 		      spec->multiout.dac_nids[3],
1732 		      lo_type[cfg->line_out_type]);
1733 	for (i = 0; i < cfg->line_outs; i++)
1734 		print_nid_path_idx(codec, "  out", spec->out_paths[i]);
1735 	if (spec->multi_ios > 0)
1736 		debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1737 			      spec->multi_ios,
1738 			      spec->multi_io[0].pin, spec->multi_io[1].pin,
1739 			      spec->multi_io[0].dac, spec->multi_io[1].dac);
1740 	for (i = 0; i < spec->multi_ios; i++)
1741 		print_nid_path_idx(codec, "  mio",
1742 				   spec->out_paths[cfg->line_outs + i]);
1743 	if (cfg->hp_outs)
1744 		debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1745 		      cfg->hp_pins[0], cfg->hp_pins[1],
1746 		      cfg->hp_pins[2], cfg->hp_pins[3],
1747 		      spec->multiout.hp_out_nid[0],
1748 		      spec->multiout.hp_out_nid[1],
1749 		      spec->multiout.hp_out_nid[2],
1750 		      spec->multiout.hp_out_nid[3]);
1751 	for (i = 0; i < cfg->hp_outs; i++)
1752 		print_nid_path_idx(codec, "  hp ", spec->hp_paths[i]);
1753 	if (cfg->speaker_outs)
1754 		debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1755 		      cfg->speaker_pins[0], cfg->speaker_pins[1],
1756 		      cfg->speaker_pins[2], cfg->speaker_pins[3],
1757 		      spec->multiout.extra_out_nid[0],
1758 		      spec->multiout.extra_out_nid[1],
1759 		      spec->multiout.extra_out_nid[2],
1760 		      spec->multiout.extra_out_nid[3]);
1761 	for (i = 0; i < cfg->speaker_outs; i++)
1762 		print_nid_path_idx(codec, "  spk", spec->speaker_paths[i]);
1763 	for (i = 0; i < 3; i++)
1764 		print_nid_path_idx(codec, "  mix", spec->aamix_out_paths[i]);
1765 }
1766 #else
1767 #define debug_show_configs(codec, cfg) /* NOP */
1768 #endif
1769 
1770 /* find all available DACs of the codec */
1771 static void fill_all_dac_nids(struct hda_codec *codec)
1772 {
1773 	struct hda_gen_spec *spec = codec->spec;
1774 	int i;
1775 	hda_nid_t nid = codec->start_nid;
1776 
1777 	spec->num_all_dacs = 0;
1778 	memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1779 	for (i = 0; i < codec->num_nodes; i++, nid++) {
1780 		if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1781 			continue;
1782 		if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1783 			snd_printk(KERN_ERR "hda: Too many DACs!\n");
1784 			break;
1785 		}
1786 		spec->all_dacs[spec->num_all_dacs++] = nid;
1787 	}
1788 }
1789 
1790 static int parse_output_paths(struct hda_codec *codec)
1791 {
1792 	struct hda_gen_spec *spec = codec->spec;
1793 	struct auto_pin_cfg *cfg = &spec->autocfg;
1794 	struct auto_pin_cfg *best_cfg;
1795 	unsigned int val;
1796 	int best_badness = INT_MAX;
1797 	int badness;
1798 	bool fill_hardwired = true, fill_mio_first = true;
1799 	bool best_wired = true, best_mio = true;
1800 	bool hp_spk_swapped = false;
1801 
1802 	best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1803 	if (!best_cfg)
1804 		return -ENOMEM;
1805 	*best_cfg = *cfg;
1806 
1807 	for (;;) {
1808 		badness = fill_and_eval_dacs(codec, fill_hardwired,
1809 					     fill_mio_first);
1810 		if (badness < 0) {
1811 			kfree(best_cfg);
1812 			return badness;
1813 		}
1814 		debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1815 			      cfg->line_out_type, fill_hardwired, fill_mio_first,
1816 			      badness);
1817 		debug_show_configs(codec, cfg);
1818 		if (badness < best_badness) {
1819 			best_badness = badness;
1820 			*best_cfg = *cfg;
1821 			best_wired = fill_hardwired;
1822 			best_mio = fill_mio_first;
1823 		}
1824 		if (!badness)
1825 			break;
1826 		fill_mio_first = !fill_mio_first;
1827 		if (!fill_mio_first)
1828 			continue;
1829 		fill_hardwired = !fill_hardwired;
1830 		if (!fill_hardwired)
1831 			continue;
1832 		if (hp_spk_swapped)
1833 			break;
1834 		hp_spk_swapped = true;
1835 		if (cfg->speaker_outs > 0 &&
1836 		    cfg->line_out_type == AUTO_PIN_HP_OUT) {
1837 			cfg->hp_outs = cfg->line_outs;
1838 			memcpy(cfg->hp_pins, cfg->line_out_pins,
1839 			       sizeof(cfg->hp_pins));
1840 			cfg->line_outs = cfg->speaker_outs;
1841 			memcpy(cfg->line_out_pins, cfg->speaker_pins,
1842 			       sizeof(cfg->speaker_pins));
1843 			cfg->speaker_outs = 0;
1844 			memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1845 			cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1846 			fill_hardwired = true;
1847 			continue;
1848 		}
1849 		if (cfg->hp_outs > 0 &&
1850 		    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1851 			cfg->speaker_outs = cfg->line_outs;
1852 			memcpy(cfg->speaker_pins, cfg->line_out_pins,
1853 			       sizeof(cfg->speaker_pins));
1854 			cfg->line_outs = cfg->hp_outs;
1855 			memcpy(cfg->line_out_pins, cfg->hp_pins,
1856 			       sizeof(cfg->hp_pins));
1857 			cfg->hp_outs = 0;
1858 			memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1859 			cfg->line_out_type = AUTO_PIN_HP_OUT;
1860 			fill_hardwired = true;
1861 			continue;
1862 		}
1863 		break;
1864 	}
1865 
1866 	if (badness) {
1867 		debug_badness("==> restoring best_cfg\n");
1868 		*cfg = *best_cfg;
1869 		fill_and_eval_dacs(codec, best_wired, best_mio);
1870 	}
1871 	debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1872 		      cfg->line_out_type, best_wired, best_mio);
1873 	debug_show_configs(codec, cfg);
1874 
1875 	if (cfg->line_out_pins[0]) {
1876 		struct nid_path *path;
1877 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
1878 		if (path)
1879 			spec->vmaster_nid = look_for_out_vol_nid(codec, path);
1880 		if (spec->vmaster_nid)
1881 			snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1882 						HDA_OUTPUT, spec->vmaster_tlv);
1883 	}
1884 
1885 	/* set initial pinctl targets */
1886 	if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
1887 		val = PIN_HP;
1888 	else
1889 		val = PIN_OUT;
1890 	set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
1891 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1892 		set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
1893 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1894 		val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
1895 		set_pin_targets(codec, cfg->speaker_outs,
1896 				cfg->speaker_pins, val);
1897 	}
1898 
1899 	/* clear indep_hp flag if not available */
1900 	if (spec->indep_hp && !indep_hp_possible(codec))
1901 		spec->indep_hp = 0;
1902 
1903 	kfree(best_cfg);
1904 	return 0;
1905 }
1906 
1907 /* add playback controls from the parsed DAC table */
1908 static int create_multi_out_ctls(struct hda_codec *codec,
1909 				 const struct auto_pin_cfg *cfg)
1910 {
1911 	struct hda_gen_spec *spec = codec->spec;
1912 	int i, err, noutputs;
1913 
1914 	noutputs = cfg->line_outs;
1915 	if (spec->multi_ios > 0 && cfg->line_outs < 3)
1916 		noutputs += spec->multi_ios;
1917 
1918 	for (i = 0; i < noutputs; i++) {
1919 		const char *name;
1920 		int index;
1921 		struct nid_path *path;
1922 
1923 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1924 		if (!path)
1925 			continue;
1926 
1927 		name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
1928 		if (!name || !strcmp(name, "CLFE")) {
1929 			/* Center/LFE */
1930 			err = add_vol_ctl(codec, "Center", 0, 1, path);
1931 			if (err < 0)
1932 				return err;
1933 			err = add_vol_ctl(codec, "LFE", 0, 2, path);
1934 			if (err < 0)
1935 				return err;
1936 		} else {
1937 			err = add_stereo_vol(codec, name, index, path);
1938 			if (err < 0)
1939 				return err;
1940 		}
1941 
1942 		name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
1943 		if (!name || !strcmp(name, "CLFE")) {
1944 			err = add_sw_ctl(codec, "Center", 0, 1, path);
1945 			if (err < 0)
1946 				return err;
1947 			err = add_sw_ctl(codec, "LFE", 0, 2, path);
1948 			if (err < 0)
1949 				return err;
1950 		} else {
1951 			err = add_stereo_sw(codec, name, index, path);
1952 			if (err < 0)
1953 				return err;
1954 		}
1955 	}
1956 	return 0;
1957 }
1958 
1959 static int create_extra_out(struct hda_codec *codec, int path_idx,
1960 			    const char *pfx, int cidx)
1961 {
1962 	struct nid_path *path;
1963 	int err;
1964 
1965 	path = snd_hda_get_path_from_idx(codec, path_idx);
1966 	if (!path)
1967 		return 0;
1968 	err = add_stereo_vol(codec, pfx, cidx, path);
1969 	if (err < 0)
1970 		return err;
1971 	err = add_stereo_sw(codec, pfx, cidx, path);
1972 	if (err < 0)
1973 		return err;
1974 	return 0;
1975 }
1976 
1977 /* add playback controls for speaker and HP outputs */
1978 static int create_extra_outs(struct hda_codec *codec, int num_pins,
1979 			     const int *paths, const char *pfx)
1980 {
1981 	int i;
1982 
1983 	for (i = 0; i < num_pins; i++) {
1984 		const char *name;
1985 		char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1986 		int err, idx = 0;
1987 
1988 		if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
1989 			name = "Bass Speaker";
1990 		else if (num_pins >= 3) {
1991 			snprintf(tmp, sizeof(tmp), "%s %s",
1992 				 pfx, channel_name[i]);
1993 			name = tmp;
1994 		} else {
1995 			name = pfx;
1996 			idx = i;
1997 		}
1998 		err = create_extra_out(codec, paths[i], name, idx);
1999 		if (err < 0)
2000 			return err;
2001 	}
2002 	return 0;
2003 }
2004 
2005 static int create_hp_out_ctls(struct hda_codec *codec)
2006 {
2007 	struct hda_gen_spec *spec = codec->spec;
2008 	return create_extra_outs(codec, spec->autocfg.hp_outs,
2009 				 spec->hp_paths,
2010 				 "Headphone");
2011 }
2012 
2013 static int create_speaker_out_ctls(struct hda_codec *codec)
2014 {
2015 	struct hda_gen_spec *spec = codec->spec;
2016 	return create_extra_outs(codec, spec->autocfg.speaker_outs,
2017 				 spec->speaker_paths,
2018 				 "Speaker");
2019 }
2020 
2021 /*
2022  * independent HP controls
2023  */
2024 
2025 static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack);
2026 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2027 			 struct snd_ctl_elem_info *uinfo)
2028 {
2029 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2030 }
2031 
2032 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2033 			struct snd_ctl_elem_value *ucontrol)
2034 {
2035 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2036 	struct hda_gen_spec *spec = codec->spec;
2037 	ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2038 	return 0;
2039 }
2040 
2041 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2042 			       int nomix_path_idx, int mix_path_idx,
2043 			       int out_type);
2044 
2045 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2046 			struct snd_ctl_elem_value *ucontrol)
2047 {
2048 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2049 	struct hda_gen_spec *spec = codec->spec;
2050 	unsigned int select = ucontrol->value.enumerated.item[0];
2051 	int ret = 0;
2052 
2053 	mutex_lock(&spec->pcm_mutex);
2054 	if (spec->active_streams) {
2055 		ret = -EBUSY;
2056 		goto unlock;
2057 	}
2058 
2059 	if (spec->indep_hp_enabled != select) {
2060 		hda_nid_t *dacp;
2061 		if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2062 			dacp = &spec->private_dac_nids[0];
2063 		else
2064 			dacp = &spec->multiout.hp_out_nid[0];
2065 
2066 		/* update HP aamix paths in case it conflicts with indep HP */
2067 		if (spec->have_aamix_ctl) {
2068 			if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2069 				update_aamix_paths(codec, spec->aamix_mode,
2070 						   spec->out_paths[0],
2071 						   spec->aamix_out_paths[0],
2072 						   spec->autocfg.line_out_type);
2073 			else
2074 				update_aamix_paths(codec, spec->aamix_mode,
2075 						   spec->hp_paths[0],
2076 						   spec->aamix_out_paths[1],
2077 						   AUTO_PIN_HP_OUT);
2078 		}
2079 
2080 		spec->indep_hp_enabled = select;
2081 		if (spec->indep_hp_enabled)
2082 			*dacp = 0;
2083 		else
2084 			*dacp = spec->alt_dac_nid;
2085 
2086 		call_hp_automute(codec, NULL);
2087 		ret = 1;
2088 	}
2089  unlock:
2090 	mutex_unlock(&spec->pcm_mutex);
2091 	return ret;
2092 }
2093 
2094 static const struct snd_kcontrol_new indep_hp_ctl = {
2095 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2096 	.name = "Independent HP",
2097 	.info = indep_hp_info,
2098 	.get = indep_hp_get,
2099 	.put = indep_hp_put,
2100 };
2101 
2102 
2103 static int create_indep_hp_ctls(struct hda_codec *codec)
2104 {
2105 	struct hda_gen_spec *spec = codec->spec;
2106 	hda_nid_t dac;
2107 
2108 	if (!spec->indep_hp)
2109 		return 0;
2110 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2111 		dac = spec->multiout.dac_nids[0];
2112 	else
2113 		dac = spec->multiout.hp_out_nid[0];
2114 	if (!dac) {
2115 		spec->indep_hp = 0;
2116 		return 0;
2117 	}
2118 
2119 	spec->indep_hp_enabled = false;
2120 	spec->alt_dac_nid = dac;
2121 	if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2122 		return -ENOMEM;
2123 	return 0;
2124 }
2125 
2126 /*
2127  * channel mode enum control
2128  */
2129 
2130 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2131 			struct snd_ctl_elem_info *uinfo)
2132 {
2133 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2134 	struct hda_gen_spec *spec = codec->spec;
2135 	int chs;
2136 
2137 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2138 	uinfo->count = 1;
2139 	uinfo->value.enumerated.items = spec->multi_ios + 1;
2140 	if (uinfo->value.enumerated.item > spec->multi_ios)
2141 		uinfo->value.enumerated.item = spec->multi_ios;
2142 	chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2143 	sprintf(uinfo->value.enumerated.name, "%dch", chs);
2144 	return 0;
2145 }
2146 
2147 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2148 		       struct snd_ctl_elem_value *ucontrol)
2149 {
2150 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2151 	struct hda_gen_spec *spec = codec->spec;
2152 	ucontrol->value.enumerated.item[0] =
2153 		(spec->ext_channel_count - spec->min_channel_count) / 2;
2154 	return 0;
2155 }
2156 
2157 static inline struct nid_path *
2158 get_multiio_path(struct hda_codec *codec, int idx)
2159 {
2160 	struct hda_gen_spec *spec = codec->spec;
2161 	return snd_hda_get_path_from_idx(codec,
2162 		spec->out_paths[spec->autocfg.line_outs + idx]);
2163 }
2164 
2165 static void update_automute_all(struct hda_codec *codec);
2166 
2167 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2168  * used for output paths
2169  */
2170 static bool aamix_default(struct hda_gen_spec *spec)
2171 {
2172 	return !spec->have_aamix_ctl || spec->aamix_mode;
2173 }
2174 
2175 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2176 {
2177 	struct hda_gen_spec *spec = codec->spec;
2178 	hda_nid_t nid = spec->multi_io[idx].pin;
2179 	struct nid_path *path;
2180 
2181 	path = get_multiio_path(codec, idx);
2182 	if (!path)
2183 		return -EINVAL;
2184 
2185 	if (path->active == output)
2186 		return 0;
2187 
2188 	if (output) {
2189 		set_pin_target(codec, nid, PIN_OUT, true);
2190 		snd_hda_activate_path(codec, path, true, aamix_default(spec));
2191 		set_pin_eapd(codec, nid, true);
2192 	} else {
2193 		set_pin_eapd(codec, nid, false);
2194 		snd_hda_activate_path(codec, path, false, aamix_default(spec));
2195 		set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2196 		path_power_down_sync(codec, path);
2197 	}
2198 
2199 	/* update jack retasking in case it modifies any of them */
2200 	update_automute_all(codec);
2201 
2202 	return 0;
2203 }
2204 
2205 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2206 		       struct snd_ctl_elem_value *ucontrol)
2207 {
2208 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2209 	struct hda_gen_spec *spec = codec->spec;
2210 	int i, ch;
2211 
2212 	ch = ucontrol->value.enumerated.item[0];
2213 	if (ch < 0 || ch > spec->multi_ios)
2214 		return -EINVAL;
2215 	if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2216 		return 0;
2217 	spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2218 	for (i = 0; i < spec->multi_ios; i++)
2219 		set_multi_io(codec, i, i < ch);
2220 	spec->multiout.max_channels = max(spec->ext_channel_count,
2221 					  spec->const_channel_count);
2222 	if (spec->need_dac_fix)
2223 		spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2224 	return 1;
2225 }
2226 
2227 static const struct snd_kcontrol_new channel_mode_enum = {
2228 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2229 	.name = "Channel Mode",
2230 	.info = ch_mode_info,
2231 	.get = ch_mode_get,
2232 	.put = ch_mode_put,
2233 };
2234 
2235 static int create_multi_channel_mode(struct hda_codec *codec)
2236 {
2237 	struct hda_gen_spec *spec = codec->spec;
2238 
2239 	if (spec->multi_ios > 0) {
2240 		if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2241 			return -ENOMEM;
2242 	}
2243 	return 0;
2244 }
2245 
2246 /*
2247  * aamix loopback enable/disable switch
2248  */
2249 
2250 #define loopback_mixing_info	indep_hp_info
2251 
2252 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2253 			       struct snd_ctl_elem_value *ucontrol)
2254 {
2255 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2256 	struct hda_gen_spec *spec = codec->spec;
2257 	ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2258 	return 0;
2259 }
2260 
2261 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2262 			       int nomix_path_idx, int mix_path_idx,
2263 			       int out_type)
2264 {
2265 	struct hda_gen_spec *spec = codec->spec;
2266 	struct nid_path *nomix_path, *mix_path;
2267 
2268 	nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2269 	mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2270 	if (!nomix_path || !mix_path)
2271 		return;
2272 
2273 	/* if HP aamix path is driven from a different DAC and the
2274 	 * independent HP mode is ON, can't turn on aamix path
2275 	 */
2276 	if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2277 	    mix_path->path[0] != spec->alt_dac_nid)
2278 		do_mix = false;
2279 
2280 	if (do_mix) {
2281 		snd_hda_activate_path(codec, nomix_path, false, true);
2282 		snd_hda_activate_path(codec, mix_path, true, true);
2283 		path_power_down_sync(codec, nomix_path);
2284 	} else {
2285 		snd_hda_activate_path(codec, mix_path, false, false);
2286 		snd_hda_activate_path(codec, nomix_path, true, false);
2287 		path_power_down_sync(codec, mix_path);
2288 	}
2289 }
2290 
2291 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2292 			       struct snd_ctl_elem_value *ucontrol)
2293 {
2294 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2295 	struct hda_gen_spec *spec = codec->spec;
2296 	unsigned int val = ucontrol->value.enumerated.item[0];
2297 
2298 	if (val == spec->aamix_mode)
2299 		return 0;
2300 	spec->aamix_mode = val;
2301 	update_aamix_paths(codec, val, spec->out_paths[0],
2302 			   spec->aamix_out_paths[0],
2303 			   spec->autocfg.line_out_type);
2304 	update_aamix_paths(codec, val, spec->hp_paths[0],
2305 			   spec->aamix_out_paths[1],
2306 			   AUTO_PIN_HP_OUT);
2307 	update_aamix_paths(codec, val, spec->speaker_paths[0],
2308 			   spec->aamix_out_paths[2],
2309 			   AUTO_PIN_SPEAKER_OUT);
2310 	return 1;
2311 }
2312 
2313 static const struct snd_kcontrol_new loopback_mixing_enum = {
2314 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2315 	.name = "Loopback Mixing",
2316 	.info = loopback_mixing_info,
2317 	.get = loopback_mixing_get,
2318 	.put = loopback_mixing_put,
2319 };
2320 
2321 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2322 {
2323 	struct hda_gen_spec *spec = codec->spec;
2324 
2325 	if (!spec->mixer_nid)
2326 		return 0;
2327 	if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2328 	      spec->aamix_out_paths[2]))
2329 		return 0;
2330 	if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2331 		return -ENOMEM;
2332 	spec->have_aamix_ctl = 1;
2333 	return 0;
2334 }
2335 
2336 /*
2337  * shared headphone/mic handling
2338  */
2339 
2340 static void call_update_outputs(struct hda_codec *codec);
2341 
2342 /* for shared I/O, change the pin-control accordingly */
2343 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2344 {
2345 	struct hda_gen_spec *spec = codec->spec;
2346 	bool as_mic;
2347 	unsigned int val;
2348 	hda_nid_t pin;
2349 
2350 	pin = spec->hp_mic_pin;
2351 	as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2352 
2353 	if (!force) {
2354 		val = snd_hda_codec_get_pin_target(codec, pin);
2355 		if (as_mic) {
2356 			if (val & PIN_IN)
2357 				return;
2358 		} else {
2359 			if (val & PIN_OUT)
2360 				return;
2361 		}
2362 	}
2363 
2364 	val = snd_hda_get_default_vref(codec, pin);
2365 	/* if the HP pin doesn't support VREF and the codec driver gives an
2366 	 * alternative pin, set up the VREF on that pin instead
2367 	 */
2368 	if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2369 		const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2370 		unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2371 		if (vref_val != AC_PINCTL_VREF_HIZ)
2372 			snd_hda_set_pin_ctl_cache(codec, vref_pin,
2373 						  PIN_IN | (as_mic ? vref_val : 0));
2374 	}
2375 
2376 	if (!spec->hp_mic_jack_modes) {
2377 		if (as_mic)
2378 			val |= PIN_IN;
2379 		else
2380 			val = PIN_HP;
2381 		set_pin_target(codec, pin, val, true);
2382 		call_hp_automute(codec, NULL);
2383 	}
2384 }
2385 
2386 /* create a shared input with the headphone out */
2387 static int create_hp_mic(struct hda_codec *codec)
2388 {
2389 	struct hda_gen_spec *spec = codec->spec;
2390 	struct auto_pin_cfg *cfg = &spec->autocfg;
2391 	unsigned int defcfg;
2392 	hda_nid_t nid;
2393 
2394 	if (!spec->hp_mic) {
2395 		if (spec->suppress_hp_mic_detect)
2396 			return 0;
2397 		/* automatic detection: only if no input or a single internal
2398 		 * input pin is found, try to detect the shared hp/mic
2399 		 */
2400 		if (cfg->num_inputs > 1)
2401 			return 0;
2402 		else if (cfg->num_inputs == 1) {
2403 			defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2404 			if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2405 				return 0;
2406 		}
2407 	}
2408 
2409 	spec->hp_mic = 0; /* clear once */
2410 	if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2411 		return 0;
2412 
2413 	nid = 0;
2414 	if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2415 		nid = cfg->line_out_pins[0];
2416 	else if (cfg->hp_outs > 0)
2417 		nid = cfg->hp_pins[0];
2418 	if (!nid)
2419 		return 0;
2420 
2421 	if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2422 		return 0; /* no input */
2423 
2424 	cfg->inputs[cfg->num_inputs].pin = nid;
2425 	cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2426 	cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2427 	cfg->num_inputs++;
2428 	spec->hp_mic = 1;
2429 	spec->hp_mic_pin = nid;
2430 	/* we can't handle auto-mic together with HP-mic */
2431 	spec->suppress_auto_mic = 1;
2432 	snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid);
2433 	return 0;
2434 }
2435 
2436 /*
2437  * output jack mode
2438  */
2439 
2440 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2441 
2442 static const char * const out_jack_texts[] = {
2443 	"Line Out", "Headphone Out",
2444 };
2445 
2446 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2447 			      struct snd_ctl_elem_info *uinfo)
2448 {
2449 	return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2450 }
2451 
2452 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2453 			     struct snd_ctl_elem_value *ucontrol)
2454 {
2455 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2456 	hda_nid_t nid = kcontrol->private_value;
2457 	if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2458 		ucontrol->value.enumerated.item[0] = 1;
2459 	else
2460 		ucontrol->value.enumerated.item[0] = 0;
2461 	return 0;
2462 }
2463 
2464 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2465 			     struct snd_ctl_elem_value *ucontrol)
2466 {
2467 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2468 	hda_nid_t nid = kcontrol->private_value;
2469 	unsigned int val;
2470 
2471 	val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2472 	if (snd_hda_codec_get_pin_target(codec, nid) == val)
2473 		return 0;
2474 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2475 	return 1;
2476 }
2477 
2478 static const struct snd_kcontrol_new out_jack_mode_enum = {
2479 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2480 	.info = out_jack_mode_info,
2481 	.get = out_jack_mode_get,
2482 	.put = out_jack_mode_put,
2483 };
2484 
2485 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2486 {
2487 	struct hda_gen_spec *spec = codec->spec;
2488 	int i;
2489 
2490 	for (i = 0; i < spec->kctls.used; i++) {
2491 		struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2492 		if (!strcmp(kctl->name, name) && kctl->index == idx)
2493 			return true;
2494 	}
2495 	return false;
2496 }
2497 
2498 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2499 			       char *name, size_t name_len)
2500 {
2501 	struct hda_gen_spec *spec = codec->spec;
2502 	int idx = 0;
2503 
2504 	snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2505 	strlcat(name, " Jack Mode", name_len);
2506 
2507 	for (; find_kctl_name(codec, name, idx); idx++)
2508 		;
2509 }
2510 
2511 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2512 {
2513 	struct hda_gen_spec *spec = codec->spec;
2514 	if (spec->add_jack_modes) {
2515 		unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2516 		if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2517 			return 2;
2518 	}
2519 	return 1;
2520 }
2521 
2522 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2523 				 hda_nid_t *pins)
2524 {
2525 	struct hda_gen_spec *spec = codec->spec;
2526 	int i;
2527 
2528 	for (i = 0; i < num_pins; i++) {
2529 		hda_nid_t pin = pins[i];
2530 		if (pin == spec->hp_mic_pin)
2531 			continue;
2532 		if (get_out_jack_num_items(codec, pin) > 1) {
2533 			struct snd_kcontrol_new *knew;
2534 			char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2535 			get_jack_mode_name(codec, pin, name, sizeof(name));
2536 			knew = snd_hda_gen_add_kctl(spec, name,
2537 						    &out_jack_mode_enum);
2538 			if (!knew)
2539 				return -ENOMEM;
2540 			knew->private_value = pin;
2541 		}
2542 	}
2543 
2544 	return 0;
2545 }
2546 
2547 /*
2548  * input jack mode
2549  */
2550 
2551 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2552 #define NUM_VREFS	6
2553 
2554 static const char * const vref_texts[NUM_VREFS] = {
2555 	"Line In", "Mic 50pc Bias", "Mic 0V Bias",
2556 	"", "Mic 80pc Bias", "Mic 100pc Bias"
2557 };
2558 
2559 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2560 {
2561 	unsigned int pincap;
2562 
2563 	pincap = snd_hda_query_pin_caps(codec, pin);
2564 	pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2565 	/* filter out unusual vrefs */
2566 	pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2567 	return pincap;
2568 }
2569 
2570 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2571 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2572 {
2573 	unsigned int i, n = 0;
2574 
2575 	for (i = 0; i < NUM_VREFS; i++) {
2576 		if (vref_caps & (1 << i)) {
2577 			if (n == item_idx)
2578 				return i;
2579 			n++;
2580 		}
2581 	}
2582 	return 0;
2583 }
2584 
2585 /* convert back from the vref ctl index to the enum item index */
2586 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2587 {
2588 	unsigned int i, n = 0;
2589 
2590 	for (i = 0; i < NUM_VREFS; i++) {
2591 		if (i == idx)
2592 			return n;
2593 		if (vref_caps & (1 << i))
2594 			n++;
2595 	}
2596 	return 0;
2597 }
2598 
2599 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2600 			     struct snd_ctl_elem_info *uinfo)
2601 {
2602 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2603 	hda_nid_t nid = kcontrol->private_value;
2604 	unsigned int vref_caps = get_vref_caps(codec, nid);
2605 
2606 	snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2607 				 vref_texts);
2608 	/* set the right text */
2609 	strcpy(uinfo->value.enumerated.name,
2610 	       vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2611 	return 0;
2612 }
2613 
2614 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2615 			    struct snd_ctl_elem_value *ucontrol)
2616 {
2617 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2618 	hda_nid_t nid = kcontrol->private_value;
2619 	unsigned int vref_caps = get_vref_caps(codec, nid);
2620 	unsigned int idx;
2621 
2622 	idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2623 	ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2624 	return 0;
2625 }
2626 
2627 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2628 			    struct snd_ctl_elem_value *ucontrol)
2629 {
2630 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2631 	hda_nid_t nid = kcontrol->private_value;
2632 	unsigned int vref_caps = get_vref_caps(codec, nid);
2633 	unsigned int val, idx;
2634 
2635 	val = snd_hda_codec_get_pin_target(codec, nid);
2636 	idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2637 	if (idx == ucontrol->value.enumerated.item[0])
2638 		return 0;
2639 
2640 	val &= ~AC_PINCTL_VREFEN;
2641 	val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2642 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2643 	return 1;
2644 }
2645 
2646 static const struct snd_kcontrol_new in_jack_mode_enum = {
2647 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2648 	.info = in_jack_mode_info,
2649 	.get = in_jack_mode_get,
2650 	.put = in_jack_mode_put,
2651 };
2652 
2653 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2654 {
2655 	struct hda_gen_spec *spec = codec->spec;
2656 	int nitems = 0;
2657 	if (spec->add_jack_modes)
2658 		nitems = hweight32(get_vref_caps(codec, pin));
2659 	return nitems ? nitems : 1;
2660 }
2661 
2662 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2663 {
2664 	struct hda_gen_spec *spec = codec->spec;
2665 	struct snd_kcontrol_new *knew;
2666 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2667 	unsigned int defcfg;
2668 
2669 	if (pin == spec->hp_mic_pin)
2670 		return 0; /* already done in create_out_jack_mode() */
2671 
2672 	/* no jack mode for fixed pins */
2673 	defcfg = snd_hda_codec_get_pincfg(codec, pin);
2674 	if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2675 		return 0;
2676 
2677 	/* no multiple vref caps? */
2678 	if (get_in_jack_num_items(codec, pin) <= 1)
2679 		return 0;
2680 
2681 	get_jack_mode_name(codec, pin, name, sizeof(name));
2682 	knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2683 	if (!knew)
2684 		return -ENOMEM;
2685 	knew->private_value = pin;
2686 	return 0;
2687 }
2688 
2689 /*
2690  * HP/mic shared jack mode
2691  */
2692 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2693 				 struct snd_ctl_elem_info *uinfo)
2694 {
2695 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2696 	hda_nid_t nid = kcontrol->private_value;
2697 	int out_jacks = get_out_jack_num_items(codec, nid);
2698 	int in_jacks = get_in_jack_num_items(codec, nid);
2699 	const char *text = NULL;
2700 	int idx;
2701 
2702 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2703 	uinfo->count = 1;
2704 	uinfo->value.enumerated.items = out_jacks + in_jacks;
2705 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2706 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2707 	idx = uinfo->value.enumerated.item;
2708 	if (idx < out_jacks) {
2709 		if (out_jacks > 1)
2710 			text = out_jack_texts[idx];
2711 		else
2712 			text = "Headphone Out";
2713 	} else {
2714 		idx -= out_jacks;
2715 		if (in_jacks > 1) {
2716 			unsigned int vref_caps = get_vref_caps(codec, nid);
2717 			text = vref_texts[get_vref_idx(vref_caps, idx)];
2718 		} else
2719 			text = "Mic In";
2720 	}
2721 
2722 	strcpy(uinfo->value.enumerated.name, text);
2723 	return 0;
2724 }
2725 
2726 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2727 {
2728 	int out_jacks = get_out_jack_num_items(codec, nid);
2729 	int in_jacks = get_in_jack_num_items(codec, nid);
2730 	unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2731 	int idx = 0;
2732 
2733 	if (val & PIN_OUT) {
2734 		if (out_jacks > 1 && val == PIN_HP)
2735 			idx = 1;
2736 	} else if (val & PIN_IN) {
2737 		idx = out_jacks;
2738 		if (in_jacks > 1) {
2739 			unsigned int vref_caps = get_vref_caps(codec, nid);
2740 			val &= AC_PINCTL_VREFEN;
2741 			idx += cvt_from_vref_idx(vref_caps, val);
2742 		}
2743 	}
2744 	return idx;
2745 }
2746 
2747 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2748 				struct snd_ctl_elem_value *ucontrol)
2749 {
2750 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2751 	hda_nid_t nid = kcontrol->private_value;
2752 	ucontrol->value.enumerated.item[0] =
2753 		get_cur_hp_mic_jack_mode(codec, nid);
2754 	return 0;
2755 }
2756 
2757 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2758 				struct snd_ctl_elem_value *ucontrol)
2759 {
2760 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2761 	hda_nid_t nid = kcontrol->private_value;
2762 	int out_jacks = get_out_jack_num_items(codec, nid);
2763 	int in_jacks = get_in_jack_num_items(codec, nid);
2764 	unsigned int val, oldval, idx;
2765 
2766 	oldval = get_cur_hp_mic_jack_mode(codec, nid);
2767 	idx = ucontrol->value.enumerated.item[0];
2768 	if (oldval == idx)
2769 		return 0;
2770 
2771 	if (idx < out_jacks) {
2772 		if (out_jacks > 1)
2773 			val = idx ? PIN_HP : PIN_OUT;
2774 		else
2775 			val = PIN_HP;
2776 	} else {
2777 		idx -= out_jacks;
2778 		if (in_jacks > 1) {
2779 			unsigned int vref_caps = get_vref_caps(codec, nid);
2780 			val = snd_hda_codec_get_pin_target(codec, nid);
2781 			val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2782 			val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2783 		} else
2784 			val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2785 	}
2786 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2787 	call_hp_automute(codec, NULL);
2788 
2789 	return 1;
2790 }
2791 
2792 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2793 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2794 	.info = hp_mic_jack_mode_info,
2795 	.get = hp_mic_jack_mode_get,
2796 	.put = hp_mic_jack_mode_put,
2797 };
2798 
2799 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2800 {
2801 	struct hda_gen_spec *spec = codec->spec;
2802 	struct snd_kcontrol_new *knew;
2803 
2804 	knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2805 				    &hp_mic_jack_mode_enum);
2806 	if (!knew)
2807 		return -ENOMEM;
2808 	knew->private_value = pin;
2809 	spec->hp_mic_jack_modes = 1;
2810 	return 0;
2811 }
2812 
2813 /*
2814  * Parse input paths
2815  */
2816 
2817 /* add the powersave loopback-list entry */
2818 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2819 {
2820 	struct hda_amp_list *list;
2821 
2822 	list = snd_array_new(&spec->loopback_list);
2823 	if (!list)
2824 		return -ENOMEM;
2825 	list->nid = mix;
2826 	list->dir = HDA_INPUT;
2827 	list->idx = idx;
2828 	spec->loopback.amplist = spec->loopback_list.list;
2829 	return 0;
2830 }
2831 
2832 /* return true if either a volume or a mute amp is found for the given
2833  * aamix path; the amp has to be either in the mixer node or its direct leaf
2834  */
2835 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
2836 				   hda_nid_t pin, unsigned int *mix_val,
2837 				   unsigned int *mute_val)
2838 {
2839 	int idx, num_conns;
2840 	const hda_nid_t *list;
2841 	hda_nid_t nid;
2842 
2843 	idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
2844 	if (idx < 0)
2845 		return false;
2846 
2847 	*mix_val = *mute_val = 0;
2848 	if (nid_has_volume(codec, mix_nid, HDA_INPUT))
2849 		*mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2850 	if (nid_has_mute(codec, mix_nid, HDA_INPUT))
2851 		*mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2852 	if (*mix_val && *mute_val)
2853 		return true;
2854 
2855 	/* check leaf node */
2856 	num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
2857 	if (num_conns < idx)
2858 		return false;
2859 	nid = list[idx];
2860 	if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT))
2861 		*mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2862 	if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT))
2863 		*mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2864 
2865 	return *mix_val || *mute_val;
2866 }
2867 
2868 /* create input playback/capture controls for the given pin */
2869 static int new_analog_input(struct hda_codec *codec, int input_idx,
2870 			    hda_nid_t pin, const char *ctlname, int ctlidx,
2871 			    hda_nid_t mix_nid)
2872 {
2873 	struct hda_gen_spec *spec = codec->spec;
2874 	struct nid_path *path;
2875 	unsigned int mix_val, mute_val;
2876 	int err, idx;
2877 
2878 	if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
2879 		return 0;
2880 
2881 	path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2882 	if (!path)
2883 		return -EINVAL;
2884 	print_nid_path("loopback", path);
2885 	spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2886 
2887 	idx = path->idx[path->depth - 1];
2888 	if (mix_val) {
2889 		err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
2890 		if (err < 0)
2891 			return err;
2892 		path->ctls[NID_PATH_VOL_CTL] = mix_val;
2893 	}
2894 
2895 	if (mute_val) {
2896 		err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
2897 		if (err < 0)
2898 			return err;
2899 		path->ctls[NID_PATH_MUTE_CTL] = mute_val;
2900 	}
2901 
2902 	path->active = true;
2903 	err = add_loopback_list(spec, mix_nid, idx);
2904 	if (err < 0)
2905 		return err;
2906 
2907 	if (spec->mixer_nid != spec->mixer_merge_nid &&
2908 	    !spec->loopback_merge_path) {
2909 		path = snd_hda_add_new_path(codec, spec->mixer_nid,
2910 					    spec->mixer_merge_nid, 0);
2911 		if (path) {
2912 			print_nid_path("loopback-merge", path);
2913 			path->active = true;
2914 			spec->loopback_merge_path =
2915 				snd_hda_get_path_idx(codec, path);
2916 		}
2917 	}
2918 
2919 	return 0;
2920 }
2921 
2922 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2923 {
2924 	unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2925 	return (pincap & AC_PINCAP_IN) != 0;
2926 }
2927 
2928 /* Parse the codec tree and retrieve ADCs */
2929 static int fill_adc_nids(struct hda_codec *codec)
2930 {
2931 	struct hda_gen_spec *spec = codec->spec;
2932 	hda_nid_t nid;
2933 	hda_nid_t *adc_nids = spec->adc_nids;
2934 	int max_nums = ARRAY_SIZE(spec->adc_nids);
2935 	int i, nums = 0;
2936 
2937 	nid = codec->start_nid;
2938 	for (i = 0; i < codec->num_nodes; i++, nid++) {
2939 		unsigned int caps = get_wcaps(codec, nid);
2940 		int type = get_wcaps_type(caps);
2941 
2942 		if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2943 			continue;
2944 		adc_nids[nums] = nid;
2945 		if (++nums >= max_nums)
2946 			break;
2947 	}
2948 	spec->num_adc_nids = nums;
2949 
2950 	/* copy the detected ADCs to all_adcs[] */
2951 	spec->num_all_adcs = nums;
2952 	memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
2953 
2954 	return nums;
2955 }
2956 
2957 /* filter out invalid adc_nids that don't give all active input pins;
2958  * if needed, check whether dynamic ADC-switching is available
2959  */
2960 static int check_dyn_adc_switch(struct hda_codec *codec)
2961 {
2962 	struct hda_gen_spec *spec = codec->spec;
2963 	struct hda_input_mux *imux = &spec->input_mux;
2964 	unsigned int ok_bits;
2965 	int i, n, nums;
2966 
2967 	nums = 0;
2968 	ok_bits = 0;
2969 	for (n = 0; n < spec->num_adc_nids; n++) {
2970 		for (i = 0; i < imux->num_items; i++) {
2971 			if (!spec->input_paths[i][n])
2972 				break;
2973 		}
2974 		if (i >= imux->num_items) {
2975 			ok_bits |= (1 << n);
2976 			nums++;
2977 		}
2978 	}
2979 
2980 	if (!ok_bits) {
2981 		/* check whether ADC-switch is possible */
2982 		for (i = 0; i < imux->num_items; i++) {
2983 			for (n = 0; n < spec->num_adc_nids; n++) {
2984 				if (spec->input_paths[i][n]) {
2985 					spec->dyn_adc_idx[i] = n;
2986 					break;
2987 				}
2988 			}
2989 		}
2990 
2991 		snd_printdd("hda-codec: enabling ADC switching\n");
2992 		spec->dyn_adc_switch = 1;
2993 	} else if (nums != spec->num_adc_nids) {
2994 		/* shrink the invalid adcs and input paths */
2995 		nums = 0;
2996 		for (n = 0; n < spec->num_adc_nids; n++) {
2997 			if (!(ok_bits & (1 << n)))
2998 				continue;
2999 			if (n != nums) {
3000 				spec->adc_nids[nums] = spec->adc_nids[n];
3001 				for (i = 0; i < imux->num_items; i++) {
3002 					invalidate_nid_path(codec,
3003 						spec->input_paths[i][nums]);
3004 					spec->input_paths[i][nums] =
3005 						spec->input_paths[i][n];
3006 				}
3007 			}
3008 			nums++;
3009 		}
3010 		spec->num_adc_nids = nums;
3011 	}
3012 
3013 	if (imux->num_items == 1 ||
3014 	    (imux->num_items == 2 && spec->hp_mic)) {
3015 		snd_printdd("hda-codec: reducing to a single ADC\n");
3016 		spec->num_adc_nids = 1; /* reduce to a single ADC */
3017 	}
3018 
3019 	/* single index for individual volumes ctls */
3020 	if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3021 		spec->num_adc_nids = 1;
3022 
3023 	return 0;
3024 }
3025 
3026 /* parse capture source paths from the given pin and create imux items */
3027 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3028 				int cfg_idx, int num_adcs,
3029 				const char *label, int anchor)
3030 {
3031 	struct hda_gen_spec *spec = codec->spec;
3032 	struct hda_input_mux *imux = &spec->input_mux;
3033 	int imux_idx = imux->num_items;
3034 	bool imux_added = false;
3035 	int c;
3036 
3037 	for (c = 0; c < num_adcs; c++) {
3038 		struct nid_path *path;
3039 		hda_nid_t adc = spec->adc_nids[c];
3040 
3041 		if (!is_reachable_path(codec, pin, adc))
3042 			continue;
3043 		path = snd_hda_add_new_path(codec, pin, adc, anchor);
3044 		if (!path)
3045 			continue;
3046 		print_nid_path("input", path);
3047 		spec->input_paths[imux_idx][c] =
3048 			snd_hda_get_path_idx(codec, path);
3049 
3050 		if (!imux_added) {
3051 			if (spec->hp_mic_pin == pin)
3052 				spec->hp_mic_mux_idx = imux->num_items;
3053 			spec->imux_pins[imux->num_items] = pin;
3054 			snd_hda_add_imux_item(imux, label, cfg_idx, NULL);
3055 			imux_added = true;
3056 		}
3057 	}
3058 
3059 	return 0;
3060 }
3061 
3062 /*
3063  * create playback/capture controls for input pins
3064  */
3065 
3066 /* fill the label for each input at first */
3067 static int fill_input_pin_labels(struct hda_codec *codec)
3068 {
3069 	struct hda_gen_spec *spec = codec->spec;
3070 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3071 	int i;
3072 
3073 	for (i = 0; i < cfg->num_inputs; i++) {
3074 		hda_nid_t pin = cfg->inputs[i].pin;
3075 		const char *label;
3076 		int j, idx;
3077 
3078 		if (!is_input_pin(codec, pin))
3079 			continue;
3080 
3081 		label = hda_get_autocfg_input_label(codec, cfg, i);
3082 		idx = 0;
3083 		for (j = i - 1; j >= 0; j--) {
3084 			if (spec->input_labels[j] &&
3085 			    !strcmp(spec->input_labels[j], label)) {
3086 				idx = spec->input_label_idxs[j] + 1;
3087 				break;
3088 			}
3089 		}
3090 
3091 		spec->input_labels[i] = label;
3092 		spec->input_label_idxs[i] = idx;
3093 	}
3094 
3095 	return 0;
3096 }
3097 
3098 #define CFG_IDX_MIX	99	/* a dummy cfg->input idx for stereo mix */
3099 
3100 static int create_input_ctls(struct hda_codec *codec)
3101 {
3102 	struct hda_gen_spec *spec = codec->spec;
3103 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3104 	hda_nid_t mixer = spec->mixer_nid;
3105 	int num_adcs;
3106 	int i, err;
3107 	unsigned int val;
3108 
3109 	num_adcs = fill_adc_nids(codec);
3110 	if (num_adcs < 0)
3111 		return 0;
3112 
3113 	err = fill_input_pin_labels(codec);
3114 	if (err < 0)
3115 		return err;
3116 
3117 	for (i = 0; i < cfg->num_inputs; i++) {
3118 		hda_nid_t pin;
3119 
3120 		pin = cfg->inputs[i].pin;
3121 		if (!is_input_pin(codec, pin))
3122 			continue;
3123 
3124 		val = PIN_IN;
3125 		if (cfg->inputs[i].type == AUTO_PIN_MIC)
3126 			val |= snd_hda_get_default_vref(codec, pin);
3127 		if (pin != spec->hp_mic_pin)
3128 			set_pin_target(codec, pin, val, false);
3129 
3130 		if (mixer) {
3131 			if (is_reachable_path(codec, pin, mixer)) {
3132 				err = new_analog_input(codec, i, pin,
3133 						       spec->input_labels[i],
3134 						       spec->input_label_idxs[i],
3135 						       mixer);
3136 				if (err < 0)
3137 					return err;
3138 			}
3139 		}
3140 
3141 		err = parse_capture_source(codec, pin, i, num_adcs,
3142 					   spec->input_labels[i], -mixer);
3143 		if (err < 0)
3144 			return err;
3145 
3146 		if (spec->add_jack_modes) {
3147 			err = create_in_jack_mode(codec, pin);
3148 			if (err < 0)
3149 				return err;
3150 		}
3151 	}
3152 
3153 	if (mixer && spec->add_stereo_mix_input) {
3154 		err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3155 					   "Stereo Mix", 0);
3156 		if (err < 0)
3157 			return err;
3158 	}
3159 
3160 	return 0;
3161 }
3162 
3163 
3164 /*
3165  * input source mux
3166  */
3167 
3168 /* get the input path specified by the given adc and imux indices */
3169 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3170 {
3171 	struct hda_gen_spec *spec = codec->spec;
3172 	if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3173 		snd_BUG();
3174 		return NULL;
3175 	}
3176 	if (spec->dyn_adc_switch)
3177 		adc_idx = spec->dyn_adc_idx[imux_idx];
3178 	if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3179 		snd_BUG();
3180 		return NULL;
3181 	}
3182 	return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3183 }
3184 
3185 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3186 		      unsigned int idx);
3187 
3188 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3189 			 struct snd_ctl_elem_info *uinfo)
3190 {
3191 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3192 	struct hda_gen_spec *spec = codec->spec;
3193 	return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3194 }
3195 
3196 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3197 			struct snd_ctl_elem_value *ucontrol)
3198 {
3199 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3200 	struct hda_gen_spec *spec = codec->spec;
3201 	/* the ctls are created at once with multiple counts */
3202 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3203 
3204 	ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3205 	return 0;
3206 }
3207 
3208 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3209 			    struct snd_ctl_elem_value *ucontrol)
3210 {
3211 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3212 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3213 	return mux_select(codec, adc_idx,
3214 			  ucontrol->value.enumerated.item[0]);
3215 }
3216 
3217 static const struct snd_kcontrol_new cap_src_temp = {
3218 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3219 	.name = "Input Source",
3220 	.info = mux_enum_info,
3221 	.get = mux_enum_get,
3222 	.put = mux_enum_put,
3223 };
3224 
3225 /*
3226  * capture volume and capture switch ctls
3227  */
3228 
3229 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3230 			  struct snd_ctl_elem_value *ucontrol);
3231 
3232 /* call the given amp update function for all amps in the imux list at once */
3233 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3234 			  struct snd_ctl_elem_value *ucontrol,
3235 			  put_call_t func, int type)
3236 {
3237 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3238 	struct hda_gen_spec *spec = codec->spec;
3239 	const struct hda_input_mux *imux;
3240 	struct nid_path *path;
3241 	int i, adc_idx, err = 0;
3242 
3243 	imux = &spec->input_mux;
3244 	adc_idx = kcontrol->id.index;
3245 	mutex_lock(&codec->control_mutex);
3246 	/* we use the cache-only update at first since multiple input paths
3247 	 * may shared the same amp; by updating only caches, the redundant
3248 	 * writes to hardware can be reduced.
3249 	 */
3250 	codec->cached_write = 1;
3251 	for (i = 0; i < imux->num_items; i++) {
3252 		path = get_input_path(codec, adc_idx, i);
3253 		if (!path || !path->ctls[type])
3254 			continue;
3255 		kcontrol->private_value = path->ctls[type];
3256 		err = func(kcontrol, ucontrol);
3257 		if (err < 0)
3258 			goto error;
3259 	}
3260  error:
3261 	codec->cached_write = 0;
3262 	mutex_unlock(&codec->control_mutex);
3263 	snd_hda_codec_flush_cache(codec); /* flush the updates */
3264 	if (err >= 0 && spec->cap_sync_hook)
3265 		spec->cap_sync_hook(codec, ucontrol);
3266 	return err;
3267 }
3268 
3269 /* capture volume ctl callbacks */
3270 #define cap_vol_info		snd_hda_mixer_amp_volume_info
3271 #define cap_vol_get		snd_hda_mixer_amp_volume_get
3272 #define cap_vol_tlv		snd_hda_mixer_amp_tlv
3273 
3274 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3275 		       struct snd_ctl_elem_value *ucontrol)
3276 {
3277 	return cap_put_caller(kcontrol, ucontrol,
3278 			      snd_hda_mixer_amp_volume_put,
3279 			      NID_PATH_VOL_CTL);
3280 }
3281 
3282 static const struct snd_kcontrol_new cap_vol_temp = {
3283 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3284 	.name = "Capture Volume",
3285 	.access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3286 		   SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3287 		   SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3288 	.info = cap_vol_info,
3289 	.get = cap_vol_get,
3290 	.put = cap_vol_put,
3291 	.tlv = { .c = cap_vol_tlv },
3292 };
3293 
3294 /* capture switch ctl callbacks */
3295 #define cap_sw_info		snd_ctl_boolean_stereo_info
3296 #define cap_sw_get		snd_hda_mixer_amp_switch_get
3297 
3298 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3299 		      struct snd_ctl_elem_value *ucontrol)
3300 {
3301 	return cap_put_caller(kcontrol, ucontrol,
3302 			      snd_hda_mixer_amp_switch_put,
3303 			      NID_PATH_MUTE_CTL);
3304 }
3305 
3306 static const struct snd_kcontrol_new cap_sw_temp = {
3307 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3308 	.name = "Capture Switch",
3309 	.info = cap_sw_info,
3310 	.get = cap_sw_get,
3311 	.put = cap_sw_put,
3312 };
3313 
3314 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3315 {
3316 	hda_nid_t nid;
3317 	int i, depth;
3318 
3319 	path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3320 	for (depth = 0; depth < 3; depth++) {
3321 		if (depth >= path->depth)
3322 			return -EINVAL;
3323 		i = path->depth - depth - 1;
3324 		nid = path->path[i];
3325 		if (!path->ctls[NID_PATH_VOL_CTL]) {
3326 			if (nid_has_volume(codec, nid, HDA_OUTPUT))
3327 				path->ctls[NID_PATH_VOL_CTL] =
3328 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3329 			else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3330 				int idx = path->idx[i];
3331 				if (!depth && codec->single_adc_amp)
3332 					idx = 0;
3333 				path->ctls[NID_PATH_VOL_CTL] =
3334 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3335 			}
3336 		}
3337 		if (!path->ctls[NID_PATH_MUTE_CTL]) {
3338 			if (nid_has_mute(codec, nid, HDA_OUTPUT))
3339 				path->ctls[NID_PATH_MUTE_CTL] =
3340 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3341 			else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3342 				int idx = path->idx[i];
3343 				if (!depth && codec->single_adc_amp)
3344 					idx = 0;
3345 				path->ctls[NID_PATH_MUTE_CTL] =
3346 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3347 			}
3348 		}
3349 	}
3350 	return 0;
3351 }
3352 
3353 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3354 {
3355 	struct hda_gen_spec *spec = codec->spec;
3356 	struct auto_pin_cfg *cfg = &spec->autocfg;
3357 	unsigned int val;
3358 	int i;
3359 
3360 	if (!spec->inv_dmic_split)
3361 		return false;
3362 	for (i = 0; i < cfg->num_inputs; i++) {
3363 		if (cfg->inputs[i].pin != nid)
3364 			continue;
3365 		if (cfg->inputs[i].type != AUTO_PIN_MIC)
3366 			return false;
3367 		val = snd_hda_codec_get_pincfg(codec, nid);
3368 		return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3369 	}
3370 	return false;
3371 }
3372 
3373 /* capture switch put callback for a single control with hook call */
3374 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3375 			     struct snd_ctl_elem_value *ucontrol)
3376 {
3377 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3378 	struct hda_gen_spec *spec = codec->spec;
3379 	int ret;
3380 
3381 	ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3382 	if (ret < 0)
3383 		return ret;
3384 
3385 	if (spec->cap_sync_hook)
3386 		spec->cap_sync_hook(codec, ucontrol);
3387 
3388 	return ret;
3389 }
3390 
3391 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3392 			      int idx, bool is_switch, unsigned int ctl,
3393 			      bool inv_dmic)
3394 {
3395 	struct hda_gen_spec *spec = codec->spec;
3396 	char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3397 	int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3398 	const char *sfx = is_switch ? "Switch" : "Volume";
3399 	unsigned int chs = inv_dmic ? 1 : 3;
3400 	struct snd_kcontrol_new *knew;
3401 
3402 	if (!ctl)
3403 		return 0;
3404 
3405 	if (label)
3406 		snprintf(tmpname, sizeof(tmpname),
3407 			 "%s Capture %s", label, sfx);
3408 	else
3409 		snprintf(tmpname, sizeof(tmpname),
3410 			 "Capture %s", sfx);
3411 	knew = add_control(spec, type, tmpname, idx,
3412 			   amp_val_replace_channels(ctl, chs));
3413 	if (!knew)
3414 		return -ENOMEM;
3415 	if (is_switch)
3416 		knew->put = cap_single_sw_put;
3417 	if (!inv_dmic)
3418 		return 0;
3419 
3420 	/* Make independent right kcontrol */
3421 	if (label)
3422 		snprintf(tmpname, sizeof(tmpname),
3423 			 "Inverted %s Capture %s", label, sfx);
3424 	else
3425 		snprintf(tmpname, sizeof(tmpname),
3426 			 "Inverted Capture %s", sfx);
3427 	knew = add_control(spec, type, tmpname, idx,
3428 			   amp_val_replace_channels(ctl, 2));
3429 	if (!knew)
3430 		return -ENOMEM;
3431 	if (is_switch)
3432 		knew->put = cap_single_sw_put;
3433 	return 0;
3434 }
3435 
3436 /* create single (and simple) capture volume and switch controls */
3437 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3438 				     unsigned int vol_ctl, unsigned int sw_ctl,
3439 				     bool inv_dmic)
3440 {
3441 	int err;
3442 	err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3443 	if (err < 0)
3444 		return err;
3445 	err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3446 	if (err < 0)
3447 		return err;
3448 	return 0;
3449 }
3450 
3451 /* create bound capture volume and switch controls */
3452 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3453 				   unsigned int vol_ctl, unsigned int sw_ctl)
3454 {
3455 	struct hda_gen_spec *spec = codec->spec;
3456 	struct snd_kcontrol_new *knew;
3457 
3458 	if (vol_ctl) {
3459 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3460 		if (!knew)
3461 			return -ENOMEM;
3462 		knew->index = idx;
3463 		knew->private_value = vol_ctl;
3464 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3465 	}
3466 	if (sw_ctl) {
3467 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3468 		if (!knew)
3469 			return -ENOMEM;
3470 		knew->index = idx;
3471 		knew->private_value = sw_ctl;
3472 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3473 	}
3474 	return 0;
3475 }
3476 
3477 /* return the vol ctl when used first in the imux list */
3478 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3479 {
3480 	struct nid_path *path;
3481 	unsigned int ctl;
3482 	int i;
3483 
3484 	path = get_input_path(codec, 0, idx);
3485 	if (!path)
3486 		return 0;
3487 	ctl = path->ctls[type];
3488 	if (!ctl)
3489 		return 0;
3490 	for (i = 0; i < idx - 1; i++) {
3491 		path = get_input_path(codec, 0, i);
3492 		if (path && path->ctls[type] == ctl)
3493 			return 0;
3494 	}
3495 	return ctl;
3496 }
3497 
3498 /* create individual capture volume and switch controls per input */
3499 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3500 {
3501 	struct hda_gen_spec *spec = codec->spec;
3502 	struct hda_input_mux *imux = &spec->input_mux;
3503 	int i, err, type;
3504 
3505 	for (i = 0; i < imux->num_items; i++) {
3506 		bool inv_dmic;
3507 		int idx;
3508 
3509 		idx = imux->items[i].index;
3510 		if (idx >= spec->autocfg.num_inputs)
3511 			continue;
3512 		inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3513 
3514 		for (type = 0; type < 2; type++) {
3515 			err = add_single_cap_ctl(codec,
3516 						 spec->input_labels[idx],
3517 						 spec->input_label_idxs[idx],
3518 						 type,
3519 						 get_first_cap_ctl(codec, i, type),
3520 						 inv_dmic);
3521 			if (err < 0)
3522 				return err;
3523 		}
3524 	}
3525 	return 0;
3526 }
3527 
3528 static int create_capture_mixers(struct hda_codec *codec)
3529 {
3530 	struct hda_gen_spec *spec = codec->spec;
3531 	struct hda_input_mux *imux = &spec->input_mux;
3532 	int i, n, nums, err;
3533 
3534 	if (spec->dyn_adc_switch)
3535 		nums = 1;
3536 	else
3537 		nums = spec->num_adc_nids;
3538 
3539 	if (!spec->auto_mic && imux->num_items > 1) {
3540 		struct snd_kcontrol_new *knew;
3541 		const char *name;
3542 		name = nums > 1 ? "Input Source" : "Capture Source";
3543 		knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3544 		if (!knew)
3545 			return -ENOMEM;
3546 		knew->count = nums;
3547 	}
3548 
3549 	for (n = 0; n < nums; n++) {
3550 		bool multi = false;
3551 		bool multi_cap_vol = spec->multi_cap_vol;
3552 		bool inv_dmic = false;
3553 		int vol, sw;
3554 
3555 		vol = sw = 0;
3556 		for (i = 0; i < imux->num_items; i++) {
3557 			struct nid_path *path;
3558 			path = get_input_path(codec, n, i);
3559 			if (!path)
3560 				continue;
3561 			parse_capvol_in_path(codec, path);
3562 			if (!vol)
3563 				vol = path->ctls[NID_PATH_VOL_CTL];
3564 			else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3565 				multi = true;
3566 				if (!same_amp_caps(codec, vol,
3567 				    path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3568 					multi_cap_vol = true;
3569 			}
3570 			if (!sw)
3571 				sw = path->ctls[NID_PATH_MUTE_CTL];
3572 			else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3573 				multi = true;
3574 				if (!same_amp_caps(codec, sw,
3575 				    path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3576 					multi_cap_vol = true;
3577 			}
3578 			if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3579 				inv_dmic = true;
3580 		}
3581 
3582 		if (!multi)
3583 			err = create_single_cap_vol_ctl(codec, n, vol, sw,
3584 							inv_dmic);
3585 		else if (!multi_cap_vol && !inv_dmic)
3586 			err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3587 		else
3588 			err = create_multi_cap_vol_ctl(codec);
3589 		if (err < 0)
3590 			return err;
3591 	}
3592 
3593 	return 0;
3594 }
3595 
3596 /*
3597  * add mic boosts if needed
3598  */
3599 
3600 /* check whether the given amp is feasible as a boost volume */
3601 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3602 			    int dir, int idx)
3603 {
3604 	unsigned int step;
3605 
3606 	if (!nid_has_volume(codec, nid, dir) ||
3607 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3608 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3609 		return false;
3610 
3611 	step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3612 		>> AC_AMPCAP_STEP_SIZE_SHIFT;
3613 	if (step < 0x20)
3614 		return false;
3615 	return true;
3616 }
3617 
3618 /* look for a boost amp in a widget close to the pin */
3619 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3620 				       struct nid_path *path)
3621 {
3622 	unsigned int val = 0;
3623 	hda_nid_t nid;
3624 	int depth;
3625 
3626 	for (depth = 0; depth < 3; depth++) {
3627 		if (depth >= path->depth - 1)
3628 			break;
3629 		nid = path->path[depth];
3630 		if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3631 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3632 			break;
3633 		} else if (check_boost_vol(codec, nid, HDA_INPUT,
3634 					   path->idx[depth])) {
3635 			val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3636 						  HDA_INPUT);
3637 			break;
3638 		}
3639 	}
3640 
3641 	return val;
3642 }
3643 
3644 static int parse_mic_boost(struct hda_codec *codec)
3645 {
3646 	struct hda_gen_spec *spec = codec->spec;
3647 	struct auto_pin_cfg *cfg = &spec->autocfg;
3648 	struct hda_input_mux *imux = &spec->input_mux;
3649 	int i;
3650 
3651 	if (!spec->num_adc_nids)
3652 		return 0;
3653 
3654 	for (i = 0; i < imux->num_items; i++) {
3655 		struct nid_path *path;
3656 		unsigned int val;
3657 		int idx;
3658 		char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3659 
3660 		idx = imux->items[i].index;
3661 		if (idx >= imux->num_items)
3662 			continue;
3663 
3664 		/* check only line-in and mic pins */
3665 		if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3666 			continue;
3667 
3668 		path = get_input_path(codec, 0, i);
3669 		if (!path)
3670 			continue;
3671 
3672 		val = look_for_boost_amp(codec, path);
3673 		if (!val)
3674 			continue;
3675 
3676 		/* create a boost control */
3677 		snprintf(boost_label, sizeof(boost_label),
3678 			 "%s Boost Volume", spec->input_labels[idx]);
3679 		if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3680 				 spec->input_label_idxs[idx], val))
3681 			return -ENOMEM;
3682 
3683 		path->ctls[NID_PATH_BOOST_CTL] = val;
3684 	}
3685 	return 0;
3686 }
3687 
3688 /*
3689  * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3690  */
3691 static void parse_digital(struct hda_codec *codec)
3692 {
3693 	struct hda_gen_spec *spec = codec->spec;
3694 	struct nid_path *path;
3695 	int i, nums;
3696 	hda_nid_t dig_nid, pin;
3697 
3698 	/* support multiple SPDIFs; the secondary is set up as a slave */
3699 	nums = 0;
3700 	for (i = 0; i < spec->autocfg.dig_outs; i++) {
3701 		pin = spec->autocfg.dig_out_pins[i];
3702 		dig_nid = look_for_dac(codec, pin, true);
3703 		if (!dig_nid)
3704 			continue;
3705 		path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3706 		if (!path)
3707 			continue;
3708 		print_nid_path("digout", path);
3709 		path->active = true;
3710 		spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3711 		set_pin_target(codec, pin, PIN_OUT, false);
3712 		if (!nums) {
3713 			spec->multiout.dig_out_nid = dig_nid;
3714 			spec->dig_out_type = spec->autocfg.dig_out_type[0];
3715 		} else {
3716 			spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3717 			if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3718 			break;
3719 			spec->slave_dig_outs[nums - 1] = dig_nid;
3720 		}
3721 		nums++;
3722 	}
3723 
3724 	if (spec->autocfg.dig_in_pin) {
3725 		pin = spec->autocfg.dig_in_pin;
3726 		dig_nid = codec->start_nid;
3727 		for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3728 			unsigned int wcaps = get_wcaps(codec, dig_nid);
3729 			if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3730 				continue;
3731 			if (!(wcaps & AC_WCAP_DIGITAL))
3732 				continue;
3733 			path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3734 			if (path) {
3735 				print_nid_path("digin", path);
3736 				path->active = true;
3737 				spec->dig_in_nid = dig_nid;
3738 				spec->digin_path = snd_hda_get_path_idx(codec, path);
3739 				set_pin_target(codec, pin, PIN_IN, false);
3740 				break;
3741 			}
3742 		}
3743 	}
3744 }
3745 
3746 
3747 /*
3748  * input MUX handling
3749  */
3750 
3751 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3752 
3753 /* select the given imux item; either unmute exclusively or select the route */
3754 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3755 		      unsigned int idx)
3756 {
3757 	struct hda_gen_spec *spec = codec->spec;
3758 	const struct hda_input_mux *imux;
3759 	struct nid_path *old_path, *path;
3760 
3761 	imux = &spec->input_mux;
3762 	if (!imux->num_items)
3763 		return 0;
3764 
3765 	if (idx >= imux->num_items)
3766 		idx = imux->num_items - 1;
3767 	if (spec->cur_mux[adc_idx] == idx)
3768 		return 0;
3769 
3770 	old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3771 	if (!old_path)
3772 		return 0;
3773 	if (old_path->active)
3774 		snd_hda_activate_path(codec, old_path, false, false);
3775 
3776 	spec->cur_mux[adc_idx] = idx;
3777 
3778 	if (spec->hp_mic)
3779 		update_hp_mic(codec, adc_idx, false);
3780 
3781 	if (spec->dyn_adc_switch)
3782 		dyn_adc_pcm_resetup(codec, idx);
3783 
3784 	path = get_input_path(codec, adc_idx, idx);
3785 	if (!path)
3786 		return 0;
3787 	if (path->active)
3788 		return 0;
3789 	snd_hda_activate_path(codec, path, true, false);
3790 	if (spec->cap_sync_hook)
3791 		spec->cap_sync_hook(codec, NULL);
3792 	path_power_down_sync(codec, old_path);
3793 	return 1;
3794 }
3795 
3796 
3797 /*
3798  * Jack detections for HP auto-mute and mic-switch
3799  */
3800 
3801 /* check each pin in the given array; returns true if any of them is plugged */
3802 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
3803 {
3804 	int i;
3805 	bool present = false;
3806 
3807 	for (i = 0; i < num_pins; i++) {
3808 		hda_nid_t nid = pins[i];
3809 		if (!nid)
3810 			break;
3811 		/* don't detect pins retasked as inputs */
3812 		if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
3813 			continue;
3814 		if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
3815 			present = true;
3816 	}
3817 	return present;
3818 }
3819 
3820 /* standard HP/line-out auto-mute helper */
3821 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3822 			int *paths, bool mute)
3823 {
3824 	struct hda_gen_spec *spec = codec->spec;
3825 	int i;
3826 
3827 	for (i = 0; i < num_pins; i++) {
3828 		hda_nid_t nid = pins[i];
3829 		unsigned int val, oldval;
3830 		if (!nid)
3831 			break;
3832 
3833 		if (spec->auto_mute_via_amp) {
3834 			struct nid_path *path;
3835 			hda_nid_t mute_nid;
3836 
3837 			path = snd_hda_get_path_from_idx(codec, paths[i]);
3838 			if (!path)
3839 				continue;
3840 			mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
3841 			if (!mute_nid)
3842 				continue;
3843 			if (mute)
3844 				spec->mute_bits |= (1ULL << mute_nid);
3845 			else
3846 				spec->mute_bits &= ~(1ULL << mute_nid);
3847 			set_pin_eapd(codec, nid, !mute);
3848 			continue;
3849 		}
3850 
3851 		oldval = snd_hda_codec_get_pin_target(codec, nid);
3852 		if (oldval & PIN_IN)
3853 			continue; /* no mute for inputs */
3854 		/* don't reset VREF value in case it's controlling
3855 		 * the amp (see alc861_fixup_asus_amp_vref_0f())
3856 		 */
3857 		if (spec->keep_vref_in_automute)
3858 			val = oldval & ~PIN_HP;
3859 		else
3860 			val = 0;
3861 		if (!mute)
3862 			val |= oldval;
3863 		/* here we call update_pin_ctl() so that the pinctl is changed
3864 		 * without changing the pinctl target value;
3865 		 * the original target value will be still referred at the
3866 		 * init / resume again
3867 		 */
3868 		update_pin_ctl(codec, nid, val);
3869 		set_pin_eapd(codec, nid, !mute);
3870 	}
3871 }
3872 
3873 /* Toggle outputs muting */
3874 void snd_hda_gen_update_outputs(struct hda_codec *codec)
3875 {
3876 	struct hda_gen_spec *spec = codec->spec;
3877 	int *paths;
3878 	int on;
3879 
3880 	/* Control HP pins/amps depending on master_mute state;
3881 	 * in general, HP pins/amps control should be enabled in all cases,
3882 	 * but currently set only for master_mute, just to be safe
3883 	 */
3884 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
3885 		paths = spec->out_paths;
3886 	else
3887 		paths = spec->hp_paths;
3888 	do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3889 		    spec->autocfg.hp_pins, paths, spec->master_mute);
3890 
3891 	if (!spec->automute_speaker)
3892 		on = 0;
3893 	else
3894 		on = spec->hp_jack_present | spec->line_jack_present;
3895 	on |= spec->master_mute;
3896 	spec->speaker_muted = on;
3897 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3898 		paths = spec->out_paths;
3899 	else
3900 		paths = spec->speaker_paths;
3901 	do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3902 		    spec->autocfg.speaker_pins, paths, on);
3903 
3904 	/* toggle line-out mutes if needed, too */
3905 	/* if LO is a copy of either HP or Speaker, don't need to handle it */
3906 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3907 	    spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3908 		return;
3909 	if (!spec->automute_lo)
3910 		on = 0;
3911 	else
3912 		on = spec->hp_jack_present;
3913 	on |= spec->master_mute;
3914 	spec->line_out_muted = on;
3915 	paths = spec->out_paths;
3916 	do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3917 		    spec->autocfg.line_out_pins, paths, on);
3918 }
3919 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs);
3920 
3921 static void call_update_outputs(struct hda_codec *codec)
3922 {
3923 	struct hda_gen_spec *spec = codec->spec;
3924 	if (spec->automute_hook)
3925 		spec->automute_hook(codec);
3926 	else
3927 		snd_hda_gen_update_outputs(codec);
3928 
3929 	/* sync the whole vmaster slaves to reflect the new auto-mute status */
3930 	if (spec->auto_mute_via_amp && !codec->bus->shutdown)
3931 		snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
3932 }
3933 
3934 /* standard HP-automute helper */
3935 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3936 {
3937 	struct hda_gen_spec *spec = codec->spec;
3938 	hda_nid_t *pins = spec->autocfg.hp_pins;
3939 	int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
3940 
3941 	/* No detection for the first HP jack during indep-HP mode */
3942 	if (spec->indep_hp_enabled) {
3943 		pins++;
3944 		num_pins--;
3945 	}
3946 
3947 	spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
3948 	if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3949 		return;
3950 	call_update_outputs(codec);
3951 }
3952 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute);
3953 
3954 /* standard line-out-automute helper */
3955 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3956 {
3957 	struct hda_gen_spec *spec = codec->spec;
3958 
3959 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3960 		return;
3961 	/* check LO jack only when it's different from HP */
3962 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3963 		return;
3964 
3965 	spec->line_jack_present =
3966 		detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3967 			     spec->autocfg.line_out_pins);
3968 	if (!spec->automute_speaker || !spec->detect_lo)
3969 		return;
3970 	call_update_outputs(codec);
3971 }
3972 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute);
3973 
3974 /* standard mic auto-switch helper */
3975 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3976 {
3977 	struct hda_gen_spec *spec = codec->spec;
3978 	int i;
3979 
3980 	if (!spec->auto_mic)
3981 		return;
3982 
3983 	for (i = spec->am_num_entries - 1; i > 0; i--) {
3984 		hda_nid_t pin = spec->am_entry[i].pin;
3985 		/* don't detect pins retasked as outputs */
3986 		if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3987 			continue;
3988 		if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
3989 			mux_select(codec, 0, spec->am_entry[i].idx);
3990 			return;
3991 		}
3992 	}
3993 	mux_select(codec, 0, spec->am_entry[0].idx);
3994 }
3995 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch);
3996 
3997 /* call appropriate hooks */
3998 static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3999 {
4000 	struct hda_gen_spec *spec = codec->spec;
4001 	if (spec->hp_automute_hook)
4002 		spec->hp_automute_hook(codec, jack);
4003 	else
4004 		snd_hda_gen_hp_automute(codec, jack);
4005 }
4006 
4007 static void call_line_automute(struct hda_codec *codec,
4008 			       struct hda_jack_tbl *jack)
4009 {
4010 	struct hda_gen_spec *spec = codec->spec;
4011 	if (spec->line_automute_hook)
4012 		spec->line_automute_hook(codec, jack);
4013 	else
4014 		snd_hda_gen_line_automute(codec, jack);
4015 }
4016 
4017 static void call_mic_autoswitch(struct hda_codec *codec,
4018 				struct hda_jack_tbl *jack)
4019 {
4020 	struct hda_gen_spec *spec = codec->spec;
4021 	if (spec->mic_autoswitch_hook)
4022 		spec->mic_autoswitch_hook(codec, jack);
4023 	else
4024 		snd_hda_gen_mic_autoswitch(codec, jack);
4025 }
4026 
4027 /* update jack retasking */
4028 static void update_automute_all(struct hda_codec *codec)
4029 {
4030 	call_hp_automute(codec, NULL);
4031 	call_line_automute(codec, NULL);
4032 	call_mic_autoswitch(codec, NULL);
4033 }
4034 
4035 /*
4036  * Auto-Mute mode mixer enum support
4037  */
4038 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4039 			      struct snd_ctl_elem_info *uinfo)
4040 {
4041 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4042 	struct hda_gen_spec *spec = codec->spec;
4043 	static const char * const texts3[] = {
4044 		"Disabled", "Speaker Only", "Line Out+Speaker"
4045 	};
4046 
4047 	if (spec->automute_speaker_possible && spec->automute_lo_possible)
4048 		return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4049 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4050 }
4051 
4052 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4053 			     struct snd_ctl_elem_value *ucontrol)
4054 {
4055 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4056 	struct hda_gen_spec *spec = codec->spec;
4057 	unsigned int val = 0;
4058 	if (spec->automute_speaker)
4059 		val++;
4060 	if (spec->automute_lo)
4061 		val++;
4062 
4063 	ucontrol->value.enumerated.item[0] = val;
4064 	return 0;
4065 }
4066 
4067 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4068 			     struct snd_ctl_elem_value *ucontrol)
4069 {
4070 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4071 	struct hda_gen_spec *spec = codec->spec;
4072 
4073 	switch (ucontrol->value.enumerated.item[0]) {
4074 	case 0:
4075 		if (!spec->automute_speaker && !spec->automute_lo)
4076 			return 0;
4077 		spec->automute_speaker = 0;
4078 		spec->automute_lo = 0;
4079 		break;
4080 	case 1:
4081 		if (spec->automute_speaker_possible) {
4082 			if (!spec->automute_lo && spec->automute_speaker)
4083 				return 0;
4084 			spec->automute_speaker = 1;
4085 			spec->automute_lo = 0;
4086 		} else if (spec->automute_lo_possible) {
4087 			if (spec->automute_lo)
4088 				return 0;
4089 			spec->automute_lo = 1;
4090 		} else
4091 			return -EINVAL;
4092 		break;
4093 	case 2:
4094 		if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4095 			return -EINVAL;
4096 		if (spec->automute_speaker && spec->automute_lo)
4097 			return 0;
4098 		spec->automute_speaker = 1;
4099 		spec->automute_lo = 1;
4100 		break;
4101 	default:
4102 		return -EINVAL;
4103 	}
4104 	call_update_outputs(codec);
4105 	return 1;
4106 }
4107 
4108 static const struct snd_kcontrol_new automute_mode_enum = {
4109 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4110 	.name = "Auto-Mute Mode",
4111 	.info = automute_mode_info,
4112 	.get = automute_mode_get,
4113 	.put = automute_mode_put,
4114 };
4115 
4116 static int add_automute_mode_enum(struct hda_codec *codec)
4117 {
4118 	struct hda_gen_spec *spec = codec->spec;
4119 
4120 	if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4121 		return -ENOMEM;
4122 	return 0;
4123 }
4124 
4125 /*
4126  * Check the availability of HP/line-out auto-mute;
4127  * Set up appropriately if really supported
4128  */
4129 static int check_auto_mute_availability(struct hda_codec *codec)
4130 {
4131 	struct hda_gen_spec *spec = codec->spec;
4132 	struct auto_pin_cfg *cfg = &spec->autocfg;
4133 	int present = 0;
4134 	int i, err;
4135 
4136 	if (spec->suppress_auto_mute)
4137 		return 0;
4138 
4139 	if (cfg->hp_pins[0])
4140 		present++;
4141 	if (cfg->line_out_pins[0])
4142 		present++;
4143 	if (cfg->speaker_pins[0])
4144 		present++;
4145 	if (present < 2) /* need two different output types */
4146 		return 0;
4147 
4148 	if (!cfg->speaker_pins[0] &&
4149 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4150 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4151 		       sizeof(cfg->speaker_pins));
4152 		cfg->speaker_outs = cfg->line_outs;
4153 	}
4154 
4155 	if (!cfg->hp_pins[0] &&
4156 	    cfg->line_out_type == AUTO_PIN_HP_OUT) {
4157 		memcpy(cfg->hp_pins, cfg->line_out_pins,
4158 		       sizeof(cfg->hp_pins));
4159 		cfg->hp_outs = cfg->line_outs;
4160 	}
4161 
4162 	for (i = 0; i < cfg->hp_outs; i++) {
4163 		hda_nid_t nid = cfg->hp_pins[i];
4164 		if (!is_jack_detectable(codec, nid))
4165 			continue;
4166 		snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
4167 			    nid);
4168 		snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
4169 						    call_hp_automute);
4170 		spec->detect_hp = 1;
4171 	}
4172 
4173 	if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4174 		if (cfg->speaker_outs)
4175 			for (i = 0; i < cfg->line_outs; i++) {
4176 				hda_nid_t nid = cfg->line_out_pins[i];
4177 				if (!is_jack_detectable(codec, nid))
4178 					continue;
4179 				snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
4180 				snd_hda_jack_detect_enable_callback(codec, nid,
4181 								    HDA_GEN_FRONT_EVENT,
4182 								    call_line_automute);
4183 				spec->detect_lo = 1;
4184 			}
4185 		spec->automute_lo_possible = spec->detect_hp;
4186 	}
4187 
4188 	spec->automute_speaker_possible = cfg->speaker_outs &&
4189 		(spec->detect_hp || spec->detect_lo);
4190 
4191 	spec->automute_lo = spec->automute_lo_possible;
4192 	spec->automute_speaker = spec->automute_speaker_possible;
4193 
4194 	if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4195 		/* create a control for automute mode */
4196 		err = add_automute_mode_enum(codec);
4197 		if (err < 0)
4198 			return err;
4199 	}
4200 	return 0;
4201 }
4202 
4203 /* check whether all auto-mic pins are valid; setup indices if OK */
4204 static bool auto_mic_check_imux(struct hda_codec *codec)
4205 {
4206 	struct hda_gen_spec *spec = codec->spec;
4207 	const struct hda_input_mux *imux;
4208 	int i;
4209 
4210 	imux = &spec->input_mux;
4211 	for (i = 0; i < spec->am_num_entries; i++) {
4212 		spec->am_entry[i].idx =
4213 			find_idx_in_nid_list(spec->am_entry[i].pin,
4214 					     spec->imux_pins, imux->num_items);
4215 		if (spec->am_entry[i].idx < 0)
4216 			return false; /* no corresponding imux */
4217 	}
4218 
4219 	/* we don't need the jack detection for the first pin */
4220 	for (i = 1; i < spec->am_num_entries; i++)
4221 		snd_hda_jack_detect_enable_callback(codec,
4222 						    spec->am_entry[i].pin,
4223 						    HDA_GEN_MIC_EVENT,
4224 						    call_mic_autoswitch);
4225 	return true;
4226 }
4227 
4228 static int compare_attr(const void *ap, const void *bp)
4229 {
4230 	const struct automic_entry *a = ap;
4231 	const struct automic_entry *b = bp;
4232 	return (int)(a->attr - b->attr);
4233 }
4234 
4235 /*
4236  * Check the availability of auto-mic switch;
4237  * Set up if really supported
4238  */
4239 static int check_auto_mic_availability(struct hda_codec *codec)
4240 {
4241 	struct hda_gen_spec *spec = codec->spec;
4242 	struct auto_pin_cfg *cfg = &spec->autocfg;
4243 	unsigned int types;
4244 	int i, num_pins;
4245 
4246 	if (spec->suppress_auto_mic)
4247 		return 0;
4248 
4249 	types = 0;
4250 	num_pins = 0;
4251 	for (i = 0; i < cfg->num_inputs; i++) {
4252 		hda_nid_t nid = cfg->inputs[i].pin;
4253 		unsigned int attr;
4254 		attr = snd_hda_codec_get_pincfg(codec, nid);
4255 		attr = snd_hda_get_input_pin_attr(attr);
4256 		if (types & (1 << attr))
4257 			return 0; /* already occupied */
4258 		switch (attr) {
4259 		case INPUT_PIN_ATTR_INT:
4260 			if (cfg->inputs[i].type != AUTO_PIN_MIC)
4261 				return 0; /* invalid type */
4262 			break;
4263 		case INPUT_PIN_ATTR_UNUSED:
4264 			return 0; /* invalid entry */
4265 		default:
4266 			if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4267 				return 0; /* invalid type */
4268 			if (!spec->line_in_auto_switch &&
4269 			    cfg->inputs[i].type != AUTO_PIN_MIC)
4270 				return 0; /* only mic is allowed */
4271 			if (!is_jack_detectable(codec, nid))
4272 				return 0; /* no unsol support */
4273 			break;
4274 		}
4275 		if (num_pins >= MAX_AUTO_MIC_PINS)
4276 			return 0;
4277 		types |= (1 << attr);
4278 		spec->am_entry[num_pins].pin = nid;
4279 		spec->am_entry[num_pins].attr = attr;
4280 		num_pins++;
4281 	}
4282 
4283 	if (num_pins < 2)
4284 		return 0;
4285 
4286 	spec->am_num_entries = num_pins;
4287 	/* sort the am_entry in the order of attr so that the pin with a
4288 	 * higher attr will be selected when the jack is plugged.
4289 	 */
4290 	sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4291 	     compare_attr, NULL);
4292 
4293 	if (!auto_mic_check_imux(codec))
4294 		return 0;
4295 
4296 	spec->auto_mic = 1;
4297 	spec->num_adc_nids = 1;
4298 	spec->cur_mux[0] = spec->am_entry[0].idx;
4299 	snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4300 		    spec->am_entry[0].pin,
4301 		    spec->am_entry[1].pin,
4302 		    spec->am_entry[2].pin);
4303 
4304 	return 0;
4305 }
4306 
4307 /* power_filter hook; make inactive widgets into power down */
4308 static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4309 						  hda_nid_t nid,
4310 						  unsigned int power_state)
4311 {
4312 	if (power_state != AC_PWRST_D0)
4313 		return power_state;
4314 	if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4315 		return power_state;
4316 	if (is_active_nid_for_any(codec, nid))
4317 		return power_state;
4318 	return AC_PWRST_D3;
4319 }
4320 
4321 /* mute all aamix inputs initially; parse up to the first leaves */
4322 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4323 {
4324 	int i, nums;
4325 	const hda_nid_t *conn;
4326 	bool has_amp;
4327 
4328 	nums = snd_hda_get_conn_list(codec, mix, &conn);
4329 	has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4330 	for (i = 0; i < nums; i++) {
4331 		if (has_amp)
4332 			snd_hda_codec_amp_stereo(codec, mix,
4333 						 HDA_INPUT, i,
4334 						 0xff, HDA_AMP_MUTE);
4335 		else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4336 			snd_hda_codec_amp_stereo(codec, conn[i],
4337 						 HDA_OUTPUT, 0,
4338 						 0xff, HDA_AMP_MUTE);
4339 	}
4340 }
4341 
4342 /*
4343  * Parse the given BIOS configuration and set up the hda_gen_spec
4344  *
4345  * return 1 if successful, 0 if the proper config is not found,
4346  * or a negative error code
4347  */
4348 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4349 				  struct auto_pin_cfg *cfg)
4350 {
4351 	struct hda_gen_spec *spec = codec->spec;
4352 	int err;
4353 
4354 	parse_user_hints(codec);
4355 
4356 	if (spec->mixer_nid && !spec->mixer_merge_nid)
4357 		spec->mixer_merge_nid = spec->mixer_nid;
4358 
4359 	if (cfg != &spec->autocfg) {
4360 		spec->autocfg = *cfg;
4361 		cfg = &spec->autocfg;
4362 	}
4363 
4364 	if (!spec->main_out_badness)
4365 		spec->main_out_badness = &hda_main_out_badness;
4366 	if (!spec->extra_out_badness)
4367 		spec->extra_out_badness = &hda_extra_out_badness;
4368 
4369 	fill_all_dac_nids(codec);
4370 
4371 	if (!cfg->line_outs) {
4372 		if (cfg->dig_outs || cfg->dig_in_pin) {
4373 			spec->multiout.max_channels = 2;
4374 			spec->no_analog = 1;
4375 			goto dig_only;
4376 		}
4377 		return 0; /* can't find valid BIOS pin config */
4378 	}
4379 
4380 	if (!spec->no_primary_hp &&
4381 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4382 	    cfg->line_outs <= cfg->hp_outs) {
4383 		/* use HP as primary out */
4384 		cfg->speaker_outs = cfg->line_outs;
4385 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4386 		       sizeof(cfg->speaker_pins));
4387 		cfg->line_outs = cfg->hp_outs;
4388 		memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4389 		cfg->hp_outs = 0;
4390 		memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4391 		cfg->line_out_type = AUTO_PIN_HP_OUT;
4392 	}
4393 
4394 	err = parse_output_paths(codec);
4395 	if (err < 0)
4396 		return err;
4397 	err = create_multi_channel_mode(codec);
4398 	if (err < 0)
4399 		return err;
4400 	err = create_multi_out_ctls(codec, cfg);
4401 	if (err < 0)
4402 		return err;
4403 	err = create_hp_out_ctls(codec);
4404 	if (err < 0)
4405 		return err;
4406 	err = create_speaker_out_ctls(codec);
4407 	if (err < 0)
4408 		return err;
4409 	err = create_indep_hp_ctls(codec);
4410 	if (err < 0)
4411 		return err;
4412 	err = create_loopback_mixing_ctl(codec);
4413 	if (err < 0)
4414 		return err;
4415 	err = create_hp_mic(codec);
4416 	if (err < 0)
4417 		return err;
4418 	err = create_input_ctls(codec);
4419 	if (err < 0)
4420 		return err;
4421 
4422 	spec->const_channel_count = spec->ext_channel_count;
4423 	/* check the multiple speaker and headphone pins */
4424 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4425 		spec->const_channel_count = max(spec->const_channel_count,
4426 						cfg->speaker_outs * 2);
4427 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4428 		spec->const_channel_count = max(spec->const_channel_count,
4429 						cfg->hp_outs * 2);
4430 	spec->multiout.max_channels = max(spec->ext_channel_count,
4431 					  spec->const_channel_count);
4432 
4433 	err = check_auto_mute_availability(codec);
4434 	if (err < 0)
4435 		return err;
4436 
4437 	err = check_dyn_adc_switch(codec);
4438 	if (err < 0)
4439 		return err;
4440 
4441 	err = check_auto_mic_availability(codec);
4442 	if (err < 0)
4443 		return err;
4444 
4445 	err = create_capture_mixers(codec);
4446 	if (err < 0)
4447 		return err;
4448 
4449 	err = parse_mic_boost(codec);
4450 	if (err < 0)
4451 		return err;
4452 
4453 	/* create "Headphone Mic Jack Mode" if no input selection is
4454 	 * available (or user specifies add_jack_modes hint)
4455 	 */
4456 	if (spec->hp_mic_pin &&
4457 	    (spec->auto_mic || spec->input_mux.num_items == 1 ||
4458 	     spec->add_jack_modes)) {
4459 		err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
4460 		if (err < 0)
4461 			return err;
4462 	}
4463 
4464 	if (spec->add_jack_modes) {
4465 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4466 			err = create_out_jack_modes(codec, cfg->line_outs,
4467 						    cfg->line_out_pins);
4468 			if (err < 0)
4469 				return err;
4470 		}
4471 		if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4472 			err = create_out_jack_modes(codec, cfg->hp_outs,
4473 						    cfg->hp_pins);
4474 			if (err < 0)
4475 				return err;
4476 		}
4477 	}
4478 
4479 	/* mute all aamix input initially */
4480 	if (spec->mixer_nid)
4481 		mute_all_mixer_nid(codec, spec->mixer_nid);
4482 
4483  dig_only:
4484 	parse_digital(codec);
4485 
4486 	if (spec->power_down_unused)
4487 		codec->power_filter = snd_hda_gen_path_power_filter;
4488 
4489 	if (!spec->no_analog && spec->beep_nid) {
4490 		err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4491 		if (err < 0)
4492 			return err;
4493 	}
4494 
4495 	return 1;
4496 }
4497 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config);
4498 
4499 
4500 /*
4501  * Build control elements
4502  */
4503 
4504 /* slave controls for virtual master */
4505 static const char * const slave_pfxs[] = {
4506 	"Front", "Surround", "Center", "LFE", "Side",
4507 	"Headphone", "Speaker", "Mono", "Line Out",
4508 	"CLFE", "Bass Speaker", "PCM",
4509 	"Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4510 	"Headphone Front", "Headphone Surround", "Headphone CLFE",
4511 	"Headphone Side",
4512 	NULL,
4513 };
4514 
4515 int snd_hda_gen_build_controls(struct hda_codec *codec)
4516 {
4517 	struct hda_gen_spec *spec = codec->spec;
4518 	int err;
4519 
4520 	if (spec->kctls.used) {
4521 		err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4522 		if (err < 0)
4523 			return err;
4524 	}
4525 
4526 	if (spec->multiout.dig_out_nid) {
4527 		err = snd_hda_create_dig_out_ctls(codec,
4528 						  spec->multiout.dig_out_nid,
4529 						  spec->multiout.dig_out_nid,
4530 						  spec->pcm_rec[1].pcm_type);
4531 		if (err < 0)
4532 			return err;
4533 		if (!spec->no_analog) {
4534 			err = snd_hda_create_spdif_share_sw(codec,
4535 							    &spec->multiout);
4536 			if (err < 0)
4537 				return err;
4538 			spec->multiout.share_spdif = 1;
4539 		}
4540 	}
4541 	if (spec->dig_in_nid) {
4542 		err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4543 		if (err < 0)
4544 			return err;
4545 	}
4546 
4547 	/* if we have no master control, let's create it */
4548 	if (!spec->no_analog &&
4549 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4550 		err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4551 					  spec->vmaster_tlv, slave_pfxs,
4552 					  "Playback Volume");
4553 		if (err < 0)
4554 			return err;
4555 	}
4556 	if (!spec->no_analog &&
4557 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4558 		err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4559 					    NULL, slave_pfxs,
4560 					    "Playback Switch",
4561 					    true, &spec->vmaster_mute.sw_kctl);
4562 		if (err < 0)
4563 			return err;
4564 		if (spec->vmaster_mute.hook) {
4565 			snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4566 						 spec->vmaster_mute_enum);
4567 			snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
4568 		}
4569 	}
4570 
4571 	free_kctls(spec); /* no longer needed */
4572 
4573 	err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
4574 	if (err < 0)
4575 		return err;
4576 
4577 	return 0;
4578 }
4579 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls);
4580 
4581 
4582 /*
4583  * PCM definitions
4584  */
4585 
4586 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
4587 				   struct hda_codec *codec,
4588 				   struct snd_pcm_substream *substream,
4589 				   int action)
4590 {
4591 	struct hda_gen_spec *spec = codec->spec;
4592 	if (spec->pcm_playback_hook)
4593 		spec->pcm_playback_hook(hinfo, codec, substream, action);
4594 }
4595 
4596 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
4597 				  struct hda_codec *codec,
4598 				  struct snd_pcm_substream *substream,
4599 				  int action)
4600 {
4601 	struct hda_gen_spec *spec = codec->spec;
4602 	if (spec->pcm_capture_hook)
4603 		spec->pcm_capture_hook(hinfo, codec, substream, action);
4604 }
4605 
4606 /*
4607  * Analog playback callbacks
4608  */
4609 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
4610 			     struct hda_codec *codec,
4611 			     struct snd_pcm_substream *substream)
4612 {
4613 	struct hda_gen_spec *spec = codec->spec;
4614 	int err;
4615 
4616 	mutex_lock(&spec->pcm_mutex);
4617 	err = snd_hda_multi_out_analog_open(codec,
4618 					    &spec->multiout, substream,
4619 					     hinfo);
4620 	if (!err) {
4621 		spec->active_streams |= 1 << STREAM_MULTI_OUT;
4622 		call_pcm_playback_hook(hinfo, codec, substream,
4623 				       HDA_GEN_PCM_ACT_OPEN);
4624 	}
4625 	mutex_unlock(&spec->pcm_mutex);
4626 	return err;
4627 }
4628 
4629 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4630 				struct hda_codec *codec,
4631 				unsigned int stream_tag,
4632 				unsigned int format,
4633 				struct snd_pcm_substream *substream)
4634 {
4635 	struct hda_gen_spec *spec = codec->spec;
4636 	int err;
4637 
4638 	err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
4639 					       stream_tag, format, substream);
4640 	if (!err)
4641 		call_pcm_playback_hook(hinfo, codec, substream,
4642 				       HDA_GEN_PCM_ACT_PREPARE);
4643 	return err;
4644 }
4645 
4646 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4647 				struct hda_codec *codec,
4648 				struct snd_pcm_substream *substream)
4649 {
4650 	struct hda_gen_spec *spec = codec->spec;
4651 	int err;
4652 
4653 	err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
4654 	if (!err)
4655 		call_pcm_playback_hook(hinfo, codec, substream,
4656 				       HDA_GEN_PCM_ACT_CLEANUP);
4657 	return err;
4658 }
4659 
4660 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
4661 			      struct hda_codec *codec,
4662 			      struct snd_pcm_substream *substream)
4663 {
4664 	struct hda_gen_spec *spec = codec->spec;
4665 	mutex_lock(&spec->pcm_mutex);
4666 	spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
4667 	call_pcm_playback_hook(hinfo, codec, substream,
4668 			       HDA_GEN_PCM_ACT_CLOSE);
4669 	mutex_unlock(&spec->pcm_mutex);
4670 	return 0;
4671 }
4672 
4673 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
4674 			    struct hda_codec *codec,
4675 			    struct snd_pcm_substream *substream)
4676 {
4677 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
4678 	return 0;
4679 }
4680 
4681 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4682 			       struct hda_codec *codec,
4683 			       unsigned int stream_tag,
4684 			       unsigned int format,
4685 			       struct snd_pcm_substream *substream)
4686 {
4687 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4688 	call_pcm_capture_hook(hinfo, codec, substream,
4689 			      HDA_GEN_PCM_ACT_PREPARE);
4690 	return 0;
4691 }
4692 
4693 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4694 			       struct hda_codec *codec,
4695 			       struct snd_pcm_substream *substream)
4696 {
4697 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4698 	call_pcm_capture_hook(hinfo, codec, substream,
4699 			      HDA_GEN_PCM_ACT_CLEANUP);
4700 	return 0;
4701 }
4702 
4703 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
4704 			     struct hda_codec *codec,
4705 			     struct snd_pcm_substream *substream)
4706 {
4707 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
4708 	return 0;
4709 }
4710 
4711 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
4712 				 struct hda_codec *codec,
4713 				 struct snd_pcm_substream *substream)
4714 {
4715 	struct hda_gen_spec *spec = codec->spec;
4716 	int err = 0;
4717 
4718 	mutex_lock(&spec->pcm_mutex);
4719 	if (!spec->indep_hp_enabled)
4720 		err = -EBUSY;
4721 	else
4722 		spec->active_streams |= 1 << STREAM_INDEP_HP;
4723 	call_pcm_playback_hook(hinfo, codec, substream,
4724 			       HDA_GEN_PCM_ACT_OPEN);
4725 	mutex_unlock(&spec->pcm_mutex);
4726 	return err;
4727 }
4728 
4729 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
4730 				  struct hda_codec *codec,
4731 				  struct snd_pcm_substream *substream)
4732 {
4733 	struct hda_gen_spec *spec = codec->spec;
4734 	mutex_lock(&spec->pcm_mutex);
4735 	spec->active_streams &= ~(1 << STREAM_INDEP_HP);
4736 	call_pcm_playback_hook(hinfo, codec, substream,
4737 			       HDA_GEN_PCM_ACT_CLOSE);
4738 	mutex_unlock(&spec->pcm_mutex);
4739 	return 0;
4740 }
4741 
4742 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4743 				    struct hda_codec *codec,
4744 				    unsigned int stream_tag,
4745 				    unsigned int format,
4746 				    struct snd_pcm_substream *substream)
4747 {
4748 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4749 	call_pcm_playback_hook(hinfo, codec, substream,
4750 			       HDA_GEN_PCM_ACT_PREPARE);
4751 	return 0;
4752 }
4753 
4754 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4755 				    struct hda_codec *codec,
4756 				    struct snd_pcm_substream *substream)
4757 {
4758 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4759 	call_pcm_playback_hook(hinfo, codec, substream,
4760 			       HDA_GEN_PCM_ACT_CLEANUP);
4761 	return 0;
4762 }
4763 
4764 /*
4765  * Digital out
4766  */
4767 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
4768 				 struct hda_codec *codec,
4769 				 struct snd_pcm_substream *substream)
4770 {
4771 	struct hda_gen_spec *spec = codec->spec;
4772 	return snd_hda_multi_out_dig_open(codec, &spec->multiout);
4773 }
4774 
4775 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4776 				    struct hda_codec *codec,
4777 				    unsigned int stream_tag,
4778 				    unsigned int format,
4779 				    struct snd_pcm_substream *substream)
4780 {
4781 	struct hda_gen_spec *spec = codec->spec;
4782 	return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
4783 					     stream_tag, format, substream);
4784 }
4785 
4786 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4787 				    struct hda_codec *codec,
4788 				    struct snd_pcm_substream *substream)
4789 {
4790 	struct hda_gen_spec *spec = codec->spec;
4791 	return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
4792 }
4793 
4794 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
4795 				  struct hda_codec *codec,
4796 				  struct snd_pcm_substream *substream)
4797 {
4798 	struct hda_gen_spec *spec = codec->spec;
4799 	return snd_hda_multi_out_dig_close(codec, &spec->multiout);
4800 }
4801 
4802 /*
4803  * Analog capture
4804  */
4805 #define alt_capture_pcm_open	capture_pcm_open
4806 #define alt_capture_pcm_close	capture_pcm_close
4807 
4808 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4809 				   struct hda_codec *codec,
4810 				   unsigned int stream_tag,
4811 				   unsigned int format,
4812 				   struct snd_pcm_substream *substream)
4813 {
4814 	struct hda_gen_spec *spec = codec->spec;
4815 
4816 	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
4817 				   stream_tag, 0, format);
4818 	call_pcm_capture_hook(hinfo, codec, substream,
4819 			      HDA_GEN_PCM_ACT_PREPARE);
4820 	return 0;
4821 }
4822 
4823 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4824 				   struct hda_codec *codec,
4825 				   struct snd_pcm_substream *substream)
4826 {
4827 	struct hda_gen_spec *spec = codec->spec;
4828 
4829 	snd_hda_codec_cleanup_stream(codec,
4830 				     spec->adc_nids[substream->number + 1]);
4831 	call_pcm_capture_hook(hinfo, codec, substream,
4832 			      HDA_GEN_PCM_ACT_CLEANUP);
4833 	return 0;
4834 }
4835 
4836 /*
4837  */
4838 static const struct hda_pcm_stream pcm_analog_playback = {
4839 	.substreams = 1,
4840 	.channels_min = 2,
4841 	.channels_max = 8,
4842 	/* NID is set in build_pcms */
4843 	.ops = {
4844 		.open = playback_pcm_open,
4845 		.close = playback_pcm_close,
4846 		.prepare = playback_pcm_prepare,
4847 		.cleanup = playback_pcm_cleanup
4848 	},
4849 };
4850 
4851 static const struct hda_pcm_stream pcm_analog_capture = {
4852 	.substreams = 1,
4853 	.channels_min = 2,
4854 	.channels_max = 2,
4855 	/* NID is set in build_pcms */
4856 	.ops = {
4857 		.open = capture_pcm_open,
4858 		.close = capture_pcm_close,
4859 		.prepare = capture_pcm_prepare,
4860 		.cleanup = capture_pcm_cleanup
4861 	},
4862 };
4863 
4864 static const struct hda_pcm_stream pcm_analog_alt_playback = {
4865 	.substreams = 1,
4866 	.channels_min = 2,
4867 	.channels_max = 2,
4868 	/* NID is set in build_pcms */
4869 	.ops = {
4870 		.open = alt_playback_pcm_open,
4871 		.close = alt_playback_pcm_close,
4872 		.prepare = alt_playback_pcm_prepare,
4873 		.cleanup = alt_playback_pcm_cleanup
4874 	},
4875 };
4876 
4877 static const struct hda_pcm_stream pcm_analog_alt_capture = {
4878 	.substreams = 2, /* can be overridden */
4879 	.channels_min = 2,
4880 	.channels_max = 2,
4881 	/* NID is set in build_pcms */
4882 	.ops = {
4883 		.open = alt_capture_pcm_open,
4884 		.close = alt_capture_pcm_close,
4885 		.prepare = alt_capture_pcm_prepare,
4886 		.cleanup = alt_capture_pcm_cleanup
4887 	},
4888 };
4889 
4890 static const struct hda_pcm_stream pcm_digital_playback = {
4891 	.substreams = 1,
4892 	.channels_min = 2,
4893 	.channels_max = 2,
4894 	/* NID is set in build_pcms */
4895 	.ops = {
4896 		.open = dig_playback_pcm_open,
4897 		.close = dig_playback_pcm_close,
4898 		.prepare = dig_playback_pcm_prepare,
4899 		.cleanup = dig_playback_pcm_cleanup
4900 	},
4901 };
4902 
4903 static const struct hda_pcm_stream pcm_digital_capture = {
4904 	.substreams = 1,
4905 	.channels_min = 2,
4906 	.channels_max = 2,
4907 	/* NID is set in build_pcms */
4908 };
4909 
4910 /* Used by build_pcms to flag that a PCM has no playback stream */
4911 static const struct hda_pcm_stream pcm_null_stream = {
4912 	.substreams = 0,
4913 	.channels_min = 0,
4914 	.channels_max = 0,
4915 };
4916 
4917 /*
4918  * dynamic changing ADC PCM streams
4919  */
4920 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
4921 {
4922 	struct hda_gen_spec *spec = codec->spec;
4923 	hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
4924 
4925 	if (spec->cur_adc && spec->cur_adc != new_adc) {
4926 		/* stream is running, let's swap the current ADC */
4927 		__snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
4928 		spec->cur_adc = new_adc;
4929 		snd_hda_codec_setup_stream(codec, new_adc,
4930 					   spec->cur_adc_stream_tag, 0,
4931 					   spec->cur_adc_format);
4932 		return true;
4933 	}
4934 	return false;
4935 }
4936 
4937 /* analog capture with dynamic dual-adc changes */
4938 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4939 				       struct hda_codec *codec,
4940 				       unsigned int stream_tag,
4941 				       unsigned int format,
4942 				       struct snd_pcm_substream *substream)
4943 {
4944 	struct hda_gen_spec *spec = codec->spec;
4945 	spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
4946 	spec->cur_adc_stream_tag = stream_tag;
4947 	spec->cur_adc_format = format;
4948 	snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
4949 	return 0;
4950 }
4951 
4952 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4953 				       struct hda_codec *codec,
4954 				       struct snd_pcm_substream *substream)
4955 {
4956 	struct hda_gen_spec *spec = codec->spec;
4957 	snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
4958 	spec->cur_adc = 0;
4959 	return 0;
4960 }
4961 
4962 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
4963 	.substreams = 1,
4964 	.channels_min = 2,
4965 	.channels_max = 2,
4966 	.nid = 0, /* fill later */
4967 	.ops = {
4968 		.prepare = dyn_adc_capture_pcm_prepare,
4969 		.cleanup = dyn_adc_capture_pcm_cleanup
4970 	},
4971 };
4972 
4973 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
4974 				 const char *chip_name)
4975 {
4976 	char *p;
4977 
4978 	if (*str)
4979 		return;
4980 	strlcpy(str, chip_name, len);
4981 
4982 	/* drop non-alnum chars after a space */
4983 	for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
4984 		if (!isalnum(p[1])) {
4985 			*p = 0;
4986 			break;
4987 		}
4988 	}
4989 	strlcat(str, sfx, len);
4990 }
4991 
4992 /* build PCM streams based on the parsed results */
4993 int snd_hda_gen_build_pcms(struct hda_codec *codec)
4994 {
4995 	struct hda_gen_spec *spec = codec->spec;
4996 	struct hda_pcm *info = spec->pcm_rec;
4997 	const struct hda_pcm_stream *p;
4998 	bool have_multi_adcs;
4999 
5000 	codec->num_pcms = 1;
5001 	codec->pcm_info = info;
5002 
5003 	if (spec->no_analog)
5004 		goto skip_analog;
5005 
5006 	fill_pcm_stream_name(spec->stream_name_analog,
5007 			     sizeof(spec->stream_name_analog),
5008 			     " Analog", codec->chip_name);
5009 	info->name = spec->stream_name_analog;
5010 
5011 	if (spec->multiout.num_dacs > 0) {
5012 		p = spec->stream_analog_playback;
5013 		if (!p)
5014 			p = &pcm_analog_playback;
5015 		info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5016 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
5017 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5018 			spec->multiout.max_channels;
5019 		if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5020 		    spec->autocfg.line_outs == 2)
5021 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5022 				snd_pcm_2_1_chmaps;
5023 	}
5024 	if (spec->num_adc_nids) {
5025 		p = spec->stream_analog_capture;
5026 		if (!p) {
5027 			if (spec->dyn_adc_switch)
5028 				p = &dyn_adc_pcm_analog_capture;
5029 			else
5030 				p = &pcm_analog_capture;
5031 		}
5032 		info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5033 		info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
5034 	}
5035 
5036  skip_analog:
5037 	/* SPDIF for stream index #1 */
5038 	if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5039 		fill_pcm_stream_name(spec->stream_name_digital,
5040 				     sizeof(spec->stream_name_digital),
5041 				     " Digital", codec->chip_name);
5042 		codec->num_pcms = 2;
5043 		codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5044 		info = spec->pcm_rec + 1;
5045 		info->name = spec->stream_name_digital;
5046 		if (spec->dig_out_type)
5047 			info->pcm_type = spec->dig_out_type;
5048 		else
5049 			info->pcm_type = HDA_PCM_TYPE_SPDIF;
5050 		if (spec->multiout.dig_out_nid) {
5051 			p = spec->stream_digital_playback;
5052 			if (!p)
5053 				p = &pcm_digital_playback;
5054 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5055 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
5056 		}
5057 		if (spec->dig_in_nid) {
5058 			p = spec->stream_digital_capture;
5059 			if (!p)
5060 				p = &pcm_digital_capture;
5061 			info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5062 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
5063 		}
5064 	}
5065 
5066 	if (spec->no_analog)
5067 		return 0;
5068 
5069 	/* If the use of more than one ADC is requested for the current
5070 	 * model, configure a second analog capture-only PCM.
5071 	 */
5072 	have_multi_adcs = (spec->num_adc_nids > 1) &&
5073 		!spec->dyn_adc_switch && !spec->auto_mic;
5074 	/* Additional Analaog capture for index #2 */
5075 	if (spec->alt_dac_nid || have_multi_adcs) {
5076 		fill_pcm_stream_name(spec->stream_name_alt_analog,
5077 				     sizeof(spec->stream_name_alt_analog),
5078 			     " Alt Analog", codec->chip_name);
5079 		codec->num_pcms = 3;
5080 		info = spec->pcm_rec + 2;
5081 		info->name = spec->stream_name_alt_analog;
5082 		if (spec->alt_dac_nid) {
5083 			p = spec->stream_analog_alt_playback;
5084 			if (!p)
5085 				p = &pcm_analog_alt_playback;
5086 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5087 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
5088 				spec->alt_dac_nid;
5089 		} else {
5090 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
5091 				pcm_null_stream;
5092 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
5093 		}
5094 		if (have_multi_adcs) {
5095 			p = spec->stream_analog_alt_capture;
5096 			if (!p)
5097 				p = &pcm_analog_alt_capture;
5098 			info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5099 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
5100 				spec->adc_nids[1];
5101 			info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5102 				spec->num_adc_nids - 1;
5103 		} else {
5104 			info->stream[SNDRV_PCM_STREAM_CAPTURE] =
5105 				pcm_null_stream;
5106 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
5107 		}
5108 	}
5109 
5110 	return 0;
5111 }
5112 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
5113 
5114 
5115 /*
5116  * Standard auto-parser initializations
5117  */
5118 
5119 /* configure the given path as a proper output */
5120 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5121 {
5122 	struct nid_path *path;
5123 	hda_nid_t pin;
5124 
5125 	path = snd_hda_get_path_from_idx(codec, path_idx);
5126 	if (!path || !path->depth)
5127 		return;
5128 	pin = path->path[path->depth - 1];
5129 	restore_pin_ctl(codec, pin);
5130 	snd_hda_activate_path(codec, path, path->active,
5131 			      aamix_default(codec->spec));
5132 	set_pin_eapd(codec, pin, path->active);
5133 }
5134 
5135 /* initialize primary output paths */
5136 static void init_multi_out(struct hda_codec *codec)
5137 {
5138 	struct hda_gen_spec *spec = codec->spec;
5139 	int i;
5140 
5141 	for (i = 0; i < spec->autocfg.line_outs; i++)
5142 		set_output_and_unmute(codec, spec->out_paths[i]);
5143 }
5144 
5145 
5146 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5147 {
5148 	int i;
5149 
5150 	for (i = 0; i < num_outs; i++)
5151 		set_output_and_unmute(codec, paths[i]);
5152 }
5153 
5154 /* initialize hp and speaker paths */
5155 static void init_extra_out(struct hda_codec *codec)
5156 {
5157 	struct hda_gen_spec *spec = codec->spec;
5158 
5159 	if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5160 		__init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5161 	if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5162 		__init_extra_out(codec, spec->autocfg.speaker_outs,
5163 				 spec->speaker_paths);
5164 }
5165 
5166 /* initialize multi-io paths */
5167 static void init_multi_io(struct hda_codec *codec)
5168 {
5169 	struct hda_gen_spec *spec = codec->spec;
5170 	int i;
5171 
5172 	for (i = 0; i < spec->multi_ios; i++) {
5173 		hda_nid_t pin = spec->multi_io[i].pin;
5174 		struct nid_path *path;
5175 		path = get_multiio_path(codec, i);
5176 		if (!path)
5177 			continue;
5178 		if (!spec->multi_io[i].ctl_in)
5179 			spec->multi_io[i].ctl_in =
5180 				snd_hda_codec_get_pin_target(codec, pin);
5181 		snd_hda_activate_path(codec, path, path->active,
5182 				      aamix_default(spec));
5183 	}
5184 }
5185 
5186 /* set up input pins and loopback paths */
5187 static void init_analog_input(struct hda_codec *codec)
5188 {
5189 	struct hda_gen_spec *spec = codec->spec;
5190 	struct auto_pin_cfg *cfg = &spec->autocfg;
5191 	int i;
5192 
5193 	for (i = 0; i < cfg->num_inputs; i++) {
5194 		hda_nid_t nid = cfg->inputs[i].pin;
5195 		if (is_input_pin(codec, nid))
5196 			restore_pin_ctl(codec, nid);
5197 
5198 		/* init loopback inputs */
5199 		if (spec->mixer_nid) {
5200 			resume_path_from_idx(codec, spec->loopback_paths[i]);
5201 			resume_path_from_idx(codec, spec->loopback_merge_path);
5202 		}
5203 	}
5204 }
5205 
5206 /* initialize ADC paths */
5207 static void init_input_src(struct hda_codec *codec)
5208 {
5209 	struct hda_gen_spec *spec = codec->spec;
5210 	struct hda_input_mux *imux = &spec->input_mux;
5211 	struct nid_path *path;
5212 	int i, c, nums;
5213 
5214 	if (spec->dyn_adc_switch)
5215 		nums = 1;
5216 	else
5217 		nums = spec->num_adc_nids;
5218 
5219 	for (c = 0; c < nums; c++) {
5220 		for (i = 0; i < imux->num_items; i++) {
5221 			path = get_input_path(codec, c, i);
5222 			if (path) {
5223 				bool active = path->active;
5224 				if (i == spec->cur_mux[c])
5225 					active = true;
5226 				snd_hda_activate_path(codec, path, active, false);
5227 			}
5228 		}
5229 		if (spec->hp_mic)
5230 			update_hp_mic(codec, c, true);
5231 	}
5232 
5233 	if (spec->cap_sync_hook)
5234 		spec->cap_sync_hook(codec, NULL);
5235 }
5236 
5237 /* set right pin controls for digital I/O */
5238 static void init_digital(struct hda_codec *codec)
5239 {
5240 	struct hda_gen_spec *spec = codec->spec;
5241 	int i;
5242 	hda_nid_t pin;
5243 
5244 	for (i = 0; i < spec->autocfg.dig_outs; i++)
5245 		set_output_and_unmute(codec, spec->digout_paths[i]);
5246 	pin = spec->autocfg.dig_in_pin;
5247 	if (pin) {
5248 		restore_pin_ctl(codec, pin);
5249 		resume_path_from_idx(codec, spec->digin_path);
5250 	}
5251 }
5252 
5253 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5254  * invalid unsol tags by some reason
5255  */
5256 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5257 {
5258 	int i;
5259 
5260 	for (i = 0; i < codec->init_pins.used; i++) {
5261 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5262 		hda_nid_t nid = pin->nid;
5263 		if (is_jack_detectable(codec, nid) &&
5264 		    !snd_hda_jack_tbl_get(codec, nid))
5265 			snd_hda_codec_update_cache(codec, nid, 0,
5266 					AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5267 	}
5268 }
5269 
5270 /*
5271  * initialize the generic spec;
5272  * this can be put as patch_ops.init function
5273  */
5274 int snd_hda_gen_init(struct hda_codec *codec)
5275 {
5276 	struct hda_gen_spec *spec = codec->spec;
5277 
5278 	if (spec->init_hook)
5279 		spec->init_hook(codec);
5280 
5281 	snd_hda_apply_verbs(codec);
5282 
5283 	codec->cached_write = 1;
5284 
5285 	init_multi_out(codec);
5286 	init_extra_out(codec);
5287 	init_multi_io(codec);
5288 	init_analog_input(codec);
5289 	init_input_src(codec);
5290 	init_digital(codec);
5291 
5292 	clear_unsol_on_unused_pins(codec);
5293 
5294 	/* call init functions of standard auto-mute helpers */
5295 	update_automute_all(codec);
5296 
5297 	snd_hda_codec_flush_cache(codec);
5298 
5299 	if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5300 		snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5301 
5302 	hda_call_check_power_status(codec, 0x01);
5303 	return 0;
5304 }
5305 EXPORT_SYMBOL_HDA(snd_hda_gen_init);
5306 
5307 /*
5308  * free the generic spec;
5309  * this can be put as patch_ops.free function
5310  */
5311 void snd_hda_gen_free(struct hda_codec *codec)
5312 {
5313 	snd_hda_detach_beep_device(codec);
5314 	snd_hda_gen_spec_free(codec->spec);
5315 	kfree(codec->spec);
5316 	codec->spec = NULL;
5317 }
5318 EXPORT_SYMBOL_HDA(snd_hda_gen_free);
5319 
5320 #ifdef CONFIG_PM
5321 /*
5322  * check the loopback power save state;
5323  * this can be put as patch_ops.check_power_status function
5324  */
5325 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5326 {
5327 	struct hda_gen_spec *spec = codec->spec;
5328 	return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5329 }
5330 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status);
5331 #endif
5332 
5333 
5334 /*
5335  * the generic codec support
5336  */
5337 
5338 static const struct hda_codec_ops generic_patch_ops = {
5339 	.build_controls = snd_hda_gen_build_controls,
5340 	.build_pcms = snd_hda_gen_build_pcms,
5341 	.init = snd_hda_gen_init,
5342 	.free = snd_hda_gen_free,
5343 	.unsol_event = snd_hda_jack_unsol_event,
5344 #ifdef CONFIG_PM
5345 	.check_power_status = snd_hda_gen_check_power_status,
5346 #endif
5347 };
5348 
5349 int snd_hda_parse_generic_codec(struct hda_codec *codec)
5350 {
5351 	struct hda_gen_spec *spec;
5352 	int err;
5353 
5354 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5355 	if (!spec)
5356 		return -ENOMEM;
5357 	snd_hda_gen_spec_init(spec);
5358 	codec->spec = spec;
5359 
5360 	err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5361 	if (err < 0)
5362 		return err;
5363 
5364 	err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5365 	if (err < 0)
5366 		goto error;
5367 
5368 	codec->patch_ops = generic_patch_ops;
5369 	return 0;
5370 
5371 error:
5372 	snd_hda_gen_free(codec);
5373 	return err;
5374 }
5375 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec);
5376