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