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