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