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