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