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