xref: /openbmc/linux/sound/pci/hda/hda_generic.c (revision 293d5b43)
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, power;
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 		power = snd_hda_codec_read(codec, nid, 0,
842 					   AC_VERB_GET_POWER_STATE, 0);
843 		if (power != (state | (state << 4))) {
844 			snd_hda_codec_write(codec, nid, 0,
845 					    AC_VERB_SET_POWER_STATE, state);
846 			changed = nid;
847 			/* all known codecs seem to be capable to handl
848 			 * widgets state even in D3, so far.
849 			 * if any new codecs need to restore the widget
850 			 * states after D0 transition, call the function
851 			 * below.
852 			 */
853 #if 0 /* disabled */
854 			if (state == AC_PWRST_D0)
855 				snd_hdac_regmap_sync_node(&codec->core, nid);
856 #endif
857 		}
858 	}
859 	return changed;
860 }
861 
862 /* do sync with the last power state change */
863 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid)
864 {
865 	if (nid) {
866 		msleep(10);
867 		snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0);
868 	}
869 }
870 
871 /**
872  * snd_hda_activate_path - activate or deactivate the given path
873  * @codec: the HDA codec
874  * @path: the path to activate/deactivate
875  * @enable: flag to activate or not
876  * @add_aamix: enable the input from aamix NID
877  *
878  * If @add_aamix is set, enable the input from aa-mix NID as well (if any).
879  */
880 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
881 			   bool enable, bool add_aamix)
882 {
883 	struct hda_gen_spec *spec = codec->spec;
884 	int i;
885 
886 	path->active = enable;
887 
888 	/* make sure the widget is powered up */
889 	if (enable && (spec->power_down_unused || codec->power_save_node))
890 		path_power_update(codec, path, codec->power_save_node);
891 
892 	for (i = path->depth - 1; i >= 0; i--) {
893 		hda_nid_t nid = path->path[i];
894 
895 		if (enable && path->multi[i])
896 			snd_hda_codec_update_cache(codec, nid, 0,
897 					    AC_VERB_SET_CONNECT_SEL,
898 					    path->idx[i]);
899 		if (has_amp_in(codec, path, i))
900 			activate_amp_in(codec, path, i, enable, add_aamix);
901 		if (has_amp_out(codec, path, i))
902 			activate_amp_out(codec, path, i, enable);
903 	}
904 }
905 EXPORT_SYMBOL_GPL(snd_hda_activate_path);
906 
907 /* if the given path is inactive, put widgets into D3 (only if suitable) */
908 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
909 {
910 	struct hda_gen_spec *spec = codec->spec;
911 
912 	if (!(spec->power_down_unused || codec->power_save_node) || path->active)
913 		return;
914 	sync_power_state_change(codec, path_power_update(codec, path, true));
915 }
916 
917 /* turn on/off EAPD on the given pin */
918 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
919 {
920 	struct hda_gen_spec *spec = codec->spec;
921 	if (spec->own_eapd_ctl ||
922 	    !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
923 		return;
924 	if (spec->keep_eapd_on && !enable)
925 		return;
926 	if (codec->inv_eapd)
927 		enable = !enable;
928 	snd_hda_codec_update_cache(codec, pin, 0,
929 				   AC_VERB_SET_EAPD_BTLENABLE,
930 				   enable ? 0x02 : 0x00);
931 }
932 
933 /* re-initialize the path specified by the given path index */
934 static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
935 {
936 	struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
937 	if (path)
938 		snd_hda_activate_path(codec, path, path->active, false);
939 }
940 
941 
942 /*
943  * Helper functions for creating mixer ctl elements
944  */
945 
946 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
947 				  struct snd_ctl_elem_value *ucontrol);
948 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
949 				 struct snd_ctl_elem_value *ucontrol);
950 
951 enum {
952 	HDA_CTL_WIDGET_VOL,
953 	HDA_CTL_WIDGET_MUTE,
954 	HDA_CTL_BIND_MUTE,
955 };
956 static const struct snd_kcontrol_new control_templates[] = {
957 	HDA_CODEC_VOLUME(NULL, 0, 0, 0),
958 	/* only the put callback is replaced for handling the special mute */
959 	{
960 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
961 		.subdevice = HDA_SUBDEV_AMP_FLAG,
962 		.info = snd_hda_mixer_amp_switch_info,
963 		.get = snd_hda_mixer_amp_switch_get,
964 		.put = hda_gen_mixer_mute_put, /* replaced */
965 		.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
966 	},
967 	{
968 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
969 		.info = snd_hda_mixer_amp_switch_info,
970 		.get = snd_hda_mixer_bind_switch_get,
971 		.put = hda_gen_bind_mute_put, /* replaced */
972 		.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
973 	},
974 };
975 
976 /* add dynamic controls from template */
977 static struct snd_kcontrol_new *
978 add_control(struct hda_gen_spec *spec, int type, const char *name,
979 		       int cidx, unsigned long val)
980 {
981 	struct snd_kcontrol_new *knew;
982 
983 	knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
984 	if (!knew)
985 		return NULL;
986 	knew->index = cidx;
987 	if (get_amp_nid_(val))
988 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
989 	knew->private_value = val;
990 	return knew;
991 }
992 
993 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
994 				const char *pfx, const char *dir,
995 				const char *sfx, int cidx, unsigned long val)
996 {
997 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
998 	snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
999 	if (!add_control(spec, type, name, cidx, val))
1000 		return -ENOMEM;
1001 	return 0;
1002 }
1003 
1004 #define add_pb_vol_ctrl(spec, type, pfx, val)			\
1005 	add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1006 #define add_pb_sw_ctrl(spec, type, pfx, val)			\
1007 	add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1008 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val)			\
1009 	add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1010 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val)			\
1011 	add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1012 
1013 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1014 		       unsigned int chs, struct nid_path *path)
1015 {
1016 	unsigned int val;
1017 	if (!path)
1018 		return 0;
1019 	val = path->ctls[NID_PATH_VOL_CTL];
1020 	if (!val)
1021 		return 0;
1022 	val = amp_val_replace_channels(val, chs);
1023 	return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1024 }
1025 
1026 /* return the channel bits suitable for the given path->ctls[] */
1027 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
1028 			       int type)
1029 {
1030 	int chs = 1; /* mono (left only) */
1031 	if (path) {
1032 		hda_nid_t nid = get_amp_nid_(path->ctls[type]);
1033 		if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
1034 			chs = 3; /* stereo */
1035 	}
1036 	return chs;
1037 }
1038 
1039 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
1040 			  struct nid_path *path)
1041 {
1042 	int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
1043 	return add_vol_ctl(codec, pfx, cidx, chs, path);
1044 }
1045 
1046 /* create a mute-switch for the given mixer widget;
1047  * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
1048  */
1049 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
1050 		      unsigned int chs, struct nid_path *path)
1051 {
1052 	unsigned int val;
1053 	int type = HDA_CTL_WIDGET_MUTE;
1054 
1055 	if (!path)
1056 		return 0;
1057 	val = path->ctls[NID_PATH_MUTE_CTL];
1058 	if (!val)
1059 		return 0;
1060 	val = amp_val_replace_channels(val, chs);
1061 	if (get_amp_direction_(val) == HDA_INPUT) {
1062 		hda_nid_t nid = get_amp_nid_(val);
1063 		int nums = snd_hda_get_num_conns(codec, nid);
1064 		if (nums > 1) {
1065 			type = HDA_CTL_BIND_MUTE;
1066 			val |= nums << 19;
1067 		}
1068 	}
1069 	return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1070 }
1071 
1072 static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
1073 				  int cidx, struct nid_path *path)
1074 {
1075 	int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
1076 	return add_sw_ctl(codec, pfx, cidx, chs, path);
1077 }
1078 
1079 /* playback mute control with the software mute bit check */
1080 static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
1081 				struct snd_ctl_elem_value *ucontrol)
1082 {
1083 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1084 	struct hda_gen_spec *spec = codec->spec;
1085 
1086 	if (spec->auto_mute_via_amp) {
1087 		hda_nid_t nid = get_amp_nid(kcontrol);
1088 		bool enabled = !((spec->mute_bits >> nid) & 1);
1089 		ucontrol->value.integer.value[0] &= enabled;
1090 		ucontrol->value.integer.value[1] &= enabled;
1091 	}
1092 }
1093 
1094 static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
1095 				  struct snd_ctl_elem_value *ucontrol)
1096 {
1097 	sync_auto_mute_bits(kcontrol, ucontrol);
1098 	return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1099 }
1100 
1101 static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
1102 				 struct snd_ctl_elem_value *ucontrol)
1103 {
1104 	sync_auto_mute_bits(kcontrol, ucontrol);
1105 	return snd_hda_mixer_bind_switch_put(kcontrol, ucontrol);
1106 }
1107 
1108 /* any ctl assigned to the path with the given index? */
1109 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
1110 {
1111 	struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
1112 	return path && path->ctls[ctl_type];
1113 }
1114 
1115 static const char * const channel_name[4] = {
1116 	"Front", "Surround", "CLFE", "Side"
1117 };
1118 
1119 /* give some appropriate ctl name prefix for the given line out channel */
1120 static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1121 				    int *index, int ctl_type)
1122 {
1123 	struct hda_gen_spec *spec = codec->spec;
1124 	struct auto_pin_cfg *cfg = &spec->autocfg;
1125 
1126 	*index = 0;
1127 	if (cfg->line_outs == 1 && !spec->multi_ios &&
1128 	    !cfg->hp_outs && !cfg->speaker_outs)
1129 		return spec->vmaster_mute.hook ? "PCM" : "Master";
1130 
1131 	/* if there is really a single DAC used in the whole output paths,
1132 	 * use it master (or "PCM" if a vmaster hook is present)
1133 	 */
1134 	if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1135 	    !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1136 		return spec->vmaster_mute.hook ? "PCM" : "Master";
1137 
1138 	/* multi-io channels */
1139 	if (ch >= cfg->line_outs)
1140 		return channel_name[ch];
1141 
1142 	switch (cfg->line_out_type) {
1143 	case AUTO_PIN_SPEAKER_OUT:
1144 		/* if the primary channel vol/mute is shared with HP volume,
1145 		 * don't name it as Speaker
1146 		 */
1147 		if (!ch && cfg->hp_outs &&
1148 		    !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1149 			break;
1150 		if (cfg->line_outs == 1)
1151 			return "Speaker";
1152 		if (cfg->line_outs == 2)
1153 			return ch ? "Bass Speaker" : "Speaker";
1154 		break;
1155 	case AUTO_PIN_HP_OUT:
1156 		/* if the primary channel vol/mute is shared with spk volume,
1157 		 * don't name it as Headphone
1158 		 */
1159 		if (!ch && cfg->speaker_outs &&
1160 		    !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1161 			break;
1162 		/* for multi-io case, only the primary out */
1163 		if (ch && spec->multi_ios)
1164 			break;
1165 		*index = ch;
1166 		return "Headphone";
1167 	case AUTO_PIN_LINE_OUT:
1168 		/* This deals with the case where we have two DACs and
1169 		 * one LO, one HP and one Speaker */
1170 		if (!ch && cfg->speaker_outs && cfg->hp_outs) {
1171 			bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1172 			bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
1173 			if (hp_lo_shared && spk_lo_shared)
1174 				return spec->vmaster_mute.hook ? "PCM" : "Master";
1175 			if (hp_lo_shared)
1176 				return "Headphone+LO";
1177 			if (spk_lo_shared)
1178 				return "Speaker+LO";
1179 		}
1180 	}
1181 
1182 	/* for a single channel output, we don't have to name the channel */
1183 	if (cfg->line_outs == 1 && !spec->multi_ios)
1184 		return "Line Out";
1185 
1186 	if (ch >= ARRAY_SIZE(channel_name)) {
1187 		snd_BUG();
1188 		return "PCM";
1189 	}
1190 
1191 	return channel_name[ch];
1192 }
1193 
1194 /*
1195  * Parse output paths
1196  */
1197 
1198 /* badness definition */
1199 enum {
1200 	/* No primary DAC is found for the main output */
1201 	BAD_NO_PRIMARY_DAC = 0x10000,
1202 	/* No DAC is found for the extra output */
1203 	BAD_NO_DAC = 0x4000,
1204 	/* No possible multi-ios */
1205 	BAD_MULTI_IO = 0x120,
1206 	/* No individual DAC for extra output */
1207 	BAD_NO_EXTRA_DAC = 0x102,
1208 	/* No individual DAC for extra surrounds */
1209 	BAD_NO_EXTRA_SURR_DAC = 0x101,
1210 	/* Primary DAC shared with main surrounds */
1211 	BAD_SHARED_SURROUND = 0x100,
1212 	/* No independent HP possible */
1213 	BAD_NO_INDEP_HP = 0x10,
1214 	/* Primary DAC shared with main CLFE */
1215 	BAD_SHARED_CLFE = 0x10,
1216 	/* Primary DAC shared with extra surrounds */
1217 	BAD_SHARED_EXTRA_SURROUND = 0x10,
1218 	/* Volume widget is shared */
1219 	BAD_SHARED_VOL = 0x10,
1220 };
1221 
1222 /* look for widgets in the given path which are appropriate for
1223  * volume and mute controls, and assign the values to ctls[].
1224  *
1225  * When no appropriate widget is found in the path, the badness value
1226  * is incremented depending on the situation.  The function returns the
1227  * total badness for both volume and mute controls.
1228  */
1229 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1230 {
1231 	struct hda_gen_spec *spec = codec->spec;
1232 	hda_nid_t nid;
1233 	unsigned int val;
1234 	int badness = 0;
1235 
1236 	if (!path)
1237 		return BAD_SHARED_VOL * 2;
1238 
1239 	if (path->ctls[NID_PATH_VOL_CTL] ||
1240 	    path->ctls[NID_PATH_MUTE_CTL])
1241 		return 0; /* already evaluated */
1242 
1243 	nid = look_for_out_vol_nid(codec, path);
1244 	if (nid) {
1245 		val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1246 		if (spec->dac_min_mute)
1247 			val |= HDA_AMP_VAL_MIN_MUTE;
1248 		if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1249 			badness += BAD_SHARED_VOL;
1250 		else
1251 			path->ctls[NID_PATH_VOL_CTL] = val;
1252 	} else
1253 		badness += BAD_SHARED_VOL;
1254 	nid = look_for_out_mute_nid(codec, path);
1255 	if (nid) {
1256 		unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1257 		if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1258 		    nid_has_mute(codec, nid, HDA_OUTPUT))
1259 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1260 		else
1261 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1262 		if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1263 			badness += BAD_SHARED_VOL;
1264 		else
1265 			path->ctls[NID_PATH_MUTE_CTL] = val;
1266 	} else
1267 		badness += BAD_SHARED_VOL;
1268 	return badness;
1269 }
1270 
1271 const struct badness_table hda_main_out_badness = {
1272 	.no_primary_dac = BAD_NO_PRIMARY_DAC,
1273 	.no_dac = BAD_NO_DAC,
1274 	.shared_primary = BAD_NO_PRIMARY_DAC,
1275 	.shared_surr = BAD_SHARED_SURROUND,
1276 	.shared_clfe = BAD_SHARED_CLFE,
1277 	.shared_surr_main = BAD_SHARED_SURROUND,
1278 };
1279 EXPORT_SYMBOL_GPL(hda_main_out_badness);
1280 
1281 const struct badness_table hda_extra_out_badness = {
1282 	.no_primary_dac = BAD_NO_DAC,
1283 	.no_dac = BAD_NO_DAC,
1284 	.shared_primary = BAD_NO_EXTRA_DAC,
1285 	.shared_surr = BAD_SHARED_EXTRA_SURROUND,
1286 	.shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1287 	.shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1288 };
1289 EXPORT_SYMBOL_GPL(hda_extra_out_badness);
1290 
1291 /* get the DAC of the primary output corresponding to the given array index */
1292 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1293 {
1294 	struct hda_gen_spec *spec = codec->spec;
1295 	struct auto_pin_cfg *cfg = &spec->autocfg;
1296 
1297 	if (cfg->line_outs > idx)
1298 		return spec->private_dac_nids[idx];
1299 	idx -= cfg->line_outs;
1300 	if (spec->multi_ios > idx)
1301 		return spec->multi_io[idx].dac;
1302 	return 0;
1303 }
1304 
1305 /* return the DAC if it's reachable, otherwise zero */
1306 static inline hda_nid_t try_dac(struct hda_codec *codec,
1307 				hda_nid_t dac, hda_nid_t pin)
1308 {
1309 	return is_reachable_path(codec, dac, pin) ? dac : 0;
1310 }
1311 
1312 /* try to assign DACs to pins and return the resultant badness */
1313 static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1314 			   const hda_nid_t *pins, hda_nid_t *dacs,
1315 			   int *path_idx,
1316 			   const struct badness_table *bad)
1317 {
1318 	struct hda_gen_spec *spec = codec->spec;
1319 	int i, j;
1320 	int badness = 0;
1321 	hda_nid_t dac;
1322 
1323 	if (!num_outs)
1324 		return 0;
1325 
1326 	for (i = 0; i < num_outs; i++) {
1327 		struct nid_path *path;
1328 		hda_nid_t pin = pins[i];
1329 
1330 		path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1331 		if (path) {
1332 			badness += assign_out_path_ctls(codec, path);
1333 			continue;
1334 		}
1335 
1336 		dacs[i] = get_preferred_dac(codec, pin);
1337 		if (dacs[i]) {
1338 			if (is_dac_already_used(codec, dacs[i]))
1339 				badness += bad->shared_primary;
1340 		}
1341 
1342 		if (!dacs[i])
1343 			dacs[i] = look_for_dac(codec, pin, false);
1344 		if (!dacs[i] && !i) {
1345 			/* try to steal the DAC of surrounds for the front */
1346 			for (j = 1; j < num_outs; j++) {
1347 				if (is_reachable_path(codec, dacs[j], pin)) {
1348 					dacs[0] = dacs[j];
1349 					dacs[j] = 0;
1350 					invalidate_nid_path(codec, path_idx[j]);
1351 					path_idx[j] = 0;
1352 					break;
1353 				}
1354 			}
1355 		}
1356 		dac = dacs[i];
1357 		if (!dac) {
1358 			if (num_outs > 2)
1359 				dac = try_dac(codec, get_primary_out(codec, i), pin);
1360 			if (!dac)
1361 				dac = try_dac(codec, dacs[0], pin);
1362 			if (!dac)
1363 				dac = try_dac(codec, get_primary_out(codec, i), pin);
1364 			if (dac) {
1365 				if (!i)
1366 					badness += bad->shared_primary;
1367 				else if (i == 1)
1368 					badness += bad->shared_surr;
1369 				else
1370 					badness += bad->shared_clfe;
1371 			} else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1372 				dac = spec->private_dac_nids[0];
1373 				badness += bad->shared_surr_main;
1374 			} else if (!i)
1375 				badness += bad->no_primary_dac;
1376 			else
1377 				badness += bad->no_dac;
1378 		}
1379 		if (!dac)
1380 			continue;
1381 		path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1382 		if (!path && !i && spec->mixer_nid) {
1383 			/* try with aamix */
1384 			path = snd_hda_add_new_path(codec, dac, pin, 0);
1385 		}
1386 		if (!path) {
1387 			dac = dacs[i] = 0;
1388 			badness += bad->no_dac;
1389 		} else {
1390 			/* print_nid_path(codec, "output", path); */
1391 			path->active = true;
1392 			path_idx[i] = snd_hda_get_path_idx(codec, path);
1393 			badness += assign_out_path_ctls(codec, path);
1394 		}
1395 	}
1396 
1397 	return badness;
1398 }
1399 
1400 /* return NID if the given pin has only a single connection to a certain DAC */
1401 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1402 {
1403 	struct hda_gen_spec *spec = codec->spec;
1404 	int i;
1405 	hda_nid_t nid_found = 0;
1406 
1407 	for (i = 0; i < spec->num_all_dacs; i++) {
1408 		hda_nid_t nid = spec->all_dacs[i];
1409 		if (!nid || is_dac_already_used(codec, nid))
1410 			continue;
1411 		if (is_reachable_path(codec, nid, pin)) {
1412 			if (nid_found)
1413 				return 0;
1414 			nid_found = nid;
1415 		}
1416 	}
1417 	return nid_found;
1418 }
1419 
1420 /* check whether the given pin can be a multi-io pin */
1421 static bool can_be_multiio_pin(struct hda_codec *codec,
1422 			       unsigned int location, hda_nid_t nid)
1423 {
1424 	unsigned int defcfg, caps;
1425 
1426 	defcfg = snd_hda_codec_get_pincfg(codec, nid);
1427 	if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1428 		return false;
1429 	if (location && get_defcfg_location(defcfg) != location)
1430 		return false;
1431 	caps = snd_hda_query_pin_caps(codec, nid);
1432 	if (!(caps & AC_PINCAP_OUT))
1433 		return false;
1434 	return true;
1435 }
1436 
1437 /* count the number of input pins that are capable to be multi-io */
1438 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1439 {
1440 	struct hda_gen_spec *spec = codec->spec;
1441 	struct auto_pin_cfg *cfg = &spec->autocfg;
1442 	unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1443 	unsigned int location = get_defcfg_location(defcfg);
1444 	int type, i;
1445 	int num_pins = 0;
1446 
1447 	for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1448 		for (i = 0; i < cfg->num_inputs; i++) {
1449 			if (cfg->inputs[i].type != type)
1450 				continue;
1451 			if (can_be_multiio_pin(codec, location,
1452 					       cfg->inputs[i].pin))
1453 				num_pins++;
1454 		}
1455 	}
1456 	return num_pins;
1457 }
1458 
1459 /*
1460  * multi-io helper
1461  *
1462  * When hardwired is set, try to fill ony hardwired pins, and returns
1463  * zero if any pins are filled, non-zero if nothing found.
1464  * When hardwired is off, try to fill possible input pins, and returns
1465  * the badness value.
1466  */
1467 static int fill_multi_ios(struct hda_codec *codec,
1468 			  hda_nid_t reference_pin,
1469 			  bool hardwired)
1470 {
1471 	struct hda_gen_spec *spec = codec->spec;
1472 	struct auto_pin_cfg *cfg = &spec->autocfg;
1473 	int type, i, j, num_pins, old_pins;
1474 	unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1475 	unsigned int location = get_defcfg_location(defcfg);
1476 	int badness = 0;
1477 	struct nid_path *path;
1478 
1479 	old_pins = spec->multi_ios;
1480 	if (old_pins >= 2)
1481 		goto end_fill;
1482 
1483 	num_pins = count_multiio_pins(codec, reference_pin);
1484 	if (num_pins < 2)
1485 		goto end_fill;
1486 
1487 	for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1488 		for (i = 0; i < cfg->num_inputs; i++) {
1489 			hda_nid_t nid = cfg->inputs[i].pin;
1490 			hda_nid_t dac = 0;
1491 
1492 			if (cfg->inputs[i].type != type)
1493 				continue;
1494 			if (!can_be_multiio_pin(codec, location, nid))
1495 				continue;
1496 			for (j = 0; j < spec->multi_ios; j++) {
1497 				if (nid == spec->multi_io[j].pin)
1498 					break;
1499 			}
1500 			if (j < spec->multi_ios)
1501 				continue;
1502 
1503 			if (hardwired)
1504 				dac = get_dac_if_single(codec, nid);
1505 			else if (!dac)
1506 				dac = look_for_dac(codec, nid, false);
1507 			if (!dac) {
1508 				badness++;
1509 				continue;
1510 			}
1511 			path = snd_hda_add_new_path(codec, dac, nid,
1512 						    -spec->mixer_nid);
1513 			if (!path) {
1514 				badness++;
1515 				continue;
1516 			}
1517 			/* print_nid_path(codec, "multiio", path); */
1518 			spec->multi_io[spec->multi_ios].pin = nid;
1519 			spec->multi_io[spec->multi_ios].dac = dac;
1520 			spec->out_paths[cfg->line_outs + spec->multi_ios] =
1521 				snd_hda_get_path_idx(codec, path);
1522 			spec->multi_ios++;
1523 			if (spec->multi_ios >= 2)
1524 				break;
1525 		}
1526 	}
1527  end_fill:
1528 	if (badness)
1529 		badness = BAD_MULTI_IO;
1530 	if (old_pins == spec->multi_ios) {
1531 		if (hardwired)
1532 			return 1; /* nothing found */
1533 		else
1534 			return badness; /* no badness if nothing found */
1535 	}
1536 	if (!hardwired && spec->multi_ios < 2) {
1537 		/* cancel newly assigned paths */
1538 		spec->paths.used -= spec->multi_ios - old_pins;
1539 		spec->multi_ios = old_pins;
1540 		return badness;
1541 	}
1542 
1543 	/* assign volume and mute controls */
1544 	for (i = old_pins; i < spec->multi_ios; i++) {
1545 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1546 		badness += assign_out_path_ctls(codec, path);
1547 	}
1548 
1549 	return badness;
1550 }
1551 
1552 /* map DACs for all pins in the list if they are single connections */
1553 static bool map_singles(struct hda_codec *codec, int outs,
1554 			const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1555 {
1556 	struct hda_gen_spec *spec = codec->spec;
1557 	int i;
1558 	bool found = false;
1559 	for (i = 0; i < outs; i++) {
1560 		struct nid_path *path;
1561 		hda_nid_t dac;
1562 		if (dacs[i])
1563 			continue;
1564 		dac = get_dac_if_single(codec, pins[i]);
1565 		if (!dac)
1566 			continue;
1567 		path = snd_hda_add_new_path(codec, dac, pins[i],
1568 					    -spec->mixer_nid);
1569 		if (!path && !i && spec->mixer_nid)
1570 			path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1571 		if (path) {
1572 			dacs[i] = dac;
1573 			found = true;
1574 			/* print_nid_path(codec, "output", path); */
1575 			path->active = true;
1576 			path_idx[i] = snd_hda_get_path_idx(codec, path);
1577 		}
1578 	}
1579 	return found;
1580 }
1581 
1582 static inline bool has_aamix_out_paths(struct hda_gen_spec *spec)
1583 {
1584 	return spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
1585 		spec->aamix_out_paths[2];
1586 }
1587 
1588 /* create a new path including aamix if available, and return its index */
1589 static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1590 {
1591 	struct hda_gen_spec *spec = codec->spec;
1592 	struct nid_path *path;
1593 	hda_nid_t path_dac, dac, pin;
1594 
1595 	path = snd_hda_get_path_from_idx(codec, path_idx);
1596 	if (!path || !path->depth ||
1597 	    is_nid_contained(path, spec->mixer_nid))
1598 		return 0;
1599 	path_dac = path->path[0];
1600 	dac = spec->private_dac_nids[0];
1601 	pin = path->path[path->depth - 1];
1602 	path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1603 	if (!path) {
1604 		if (dac != path_dac)
1605 			dac = path_dac;
1606 		else if (spec->multiout.hp_out_nid[0])
1607 			dac = spec->multiout.hp_out_nid[0];
1608 		else if (spec->multiout.extra_out_nid[0])
1609 			dac = spec->multiout.extra_out_nid[0];
1610 		else
1611 			dac = 0;
1612 		if (dac)
1613 			path = snd_hda_add_new_path(codec, dac, pin,
1614 						    spec->mixer_nid);
1615 	}
1616 	if (!path)
1617 		return 0;
1618 	/* print_nid_path(codec, "output-aamix", path); */
1619 	path->active = false; /* unused as default */
1620 	path->pin_fixed = true; /* static route */
1621 	return snd_hda_get_path_idx(codec, path);
1622 }
1623 
1624 /* check whether the independent HP is available with the current config */
1625 static bool indep_hp_possible(struct hda_codec *codec)
1626 {
1627 	struct hda_gen_spec *spec = codec->spec;
1628 	struct auto_pin_cfg *cfg = &spec->autocfg;
1629 	struct nid_path *path;
1630 	int i, idx;
1631 
1632 	if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1633 		idx = spec->out_paths[0];
1634 	else
1635 		idx = spec->hp_paths[0];
1636 	path = snd_hda_get_path_from_idx(codec, idx);
1637 	if (!path)
1638 		return false;
1639 
1640 	/* assume no path conflicts unless aamix is involved */
1641 	if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1642 		return true;
1643 
1644 	/* check whether output paths contain aamix */
1645 	for (i = 0; i < cfg->line_outs; i++) {
1646 		if (spec->out_paths[i] == idx)
1647 			break;
1648 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1649 		if (path && is_nid_contained(path, spec->mixer_nid))
1650 			return false;
1651 	}
1652 	for (i = 0; i < cfg->speaker_outs; i++) {
1653 		path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1654 		if (path && is_nid_contained(path, spec->mixer_nid))
1655 			return false;
1656 	}
1657 
1658 	return true;
1659 }
1660 
1661 /* fill the empty entries in the dac array for speaker/hp with the
1662  * shared dac pointed by the paths
1663  */
1664 static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1665 			       hda_nid_t *dacs, int *path_idx)
1666 {
1667 	struct nid_path *path;
1668 	int i;
1669 
1670 	for (i = 0; i < num_outs; i++) {
1671 		if (dacs[i])
1672 			continue;
1673 		path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1674 		if (!path)
1675 			continue;
1676 		dacs[i] = path->path[0];
1677 	}
1678 }
1679 
1680 /* fill in the dac_nids table from the parsed pin configuration */
1681 static int fill_and_eval_dacs(struct hda_codec *codec,
1682 			      bool fill_hardwired,
1683 			      bool fill_mio_first)
1684 {
1685 	struct hda_gen_spec *spec = codec->spec;
1686 	struct auto_pin_cfg *cfg = &spec->autocfg;
1687 	int i, err, badness;
1688 
1689 	/* set num_dacs once to full for look_for_dac() */
1690 	spec->multiout.num_dacs = cfg->line_outs;
1691 	spec->multiout.dac_nids = spec->private_dac_nids;
1692 	memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1693 	memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1694 	memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1695 	spec->multi_ios = 0;
1696 	snd_array_free(&spec->paths);
1697 
1698 	/* clear path indices */
1699 	memset(spec->out_paths, 0, sizeof(spec->out_paths));
1700 	memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1701 	memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1702 	memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1703 	memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1704 	memset(spec->input_paths, 0, sizeof(spec->input_paths));
1705 	memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1706 	memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1707 
1708 	badness = 0;
1709 
1710 	/* fill hard-wired DACs first */
1711 	if (fill_hardwired) {
1712 		bool mapped;
1713 		do {
1714 			mapped = map_singles(codec, cfg->line_outs,
1715 					     cfg->line_out_pins,
1716 					     spec->private_dac_nids,
1717 					     spec->out_paths);
1718 			mapped |= map_singles(codec, cfg->hp_outs,
1719 					      cfg->hp_pins,
1720 					      spec->multiout.hp_out_nid,
1721 					      spec->hp_paths);
1722 			mapped |= map_singles(codec, cfg->speaker_outs,
1723 					      cfg->speaker_pins,
1724 					      spec->multiout.extra_out_nid,
1725 					      spec->speaker_paths);
1726 			if (!spec->no_multi_io &&
1727 			    fill_mio_first && cfg->line_outs == 1 &&
1728 			    cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1729 				err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1730 				if (!err)
1731 					mapped = true;
1732 			}
1733 		} while (mapped);
1734 	}
1735 
1736 	badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1737 				   spec->private_dac_nids, spec->out_paths,
1738 				   spec->main_out_badness);
1739 
1740 	if (!spec->no_multi_io && fill_mio_first &&
1741 	    cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1742 		/* try to fill multi-io first */
1743 		err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1744 		if (err < 0)
1745 			return err;
1746 		/* we don't count badness at this stage yet */
1747 	}
1748 
1749 	if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1750 		err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1751 				      spec->multiout.hp_out_nid,
1752 				      spec->hp_paths,
1753 				      spec->extra_out_badness);
1754 		if (err < 0)
1755 			return err;
1756 		badness += err;
1757 	}
1758 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1759 		err = try_assign_dacs(codec, cfg->speaker_outs,
1760 				      cfg->speaker_pins,
1761 				      spec->multiout.extra_out_nid,
1762 				      spec->speaker_paths,
1763 				      spec->extra_out_badness);
1764 		if (err < 0)
1765 			return err;
1766 		badness += err;
1767 	}
1768 	if (!spec->no_multi_io &&
1769 	    cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1770 		err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1771 		if (err < 0)
1772 			return err;
1773 		badness += err;
1774 	}
1775 
1776 	if (spec->mixer_nid) {
1777 		spec->aamix_out_paths[0] =
1778 			check_aamix_out_path(codec, spec->out_paths[0]);
1779 		if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1780 			spec->aamix_out_paths[1] =
1781 				check_aamix_out_path(codec, spec->hp_paths[0]);
1782 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1783 			spec->aamix_out_paths[2] =
1784 				check_aamix_out_path(codec, spec->speaker_paths[0]);
1785 	}
1786 
1787 	if (!spec->no_multi_io &&
1788 	    cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1789 		if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1790 			spec->multi_ios = 1; /* give badness */
1791 
1792 	/* re-count num_dacs and squash invalid entries */
1793 	spec->multiout.num_dacs = 0;
1794 	for (i = 0; i < cfg->line_outs; i++) {
1795 		if (spec->private_dac_nids[i])
1796 			spec->multiout.num_dacs++;
1797 		else {
1798 			memmove(spec->private_dac_nids + i,
1799 				spec->private_dac_nids + i + 1,
1800 				sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1801 			spec->private_dac_nids[cfg->line_outs - 1] = 0;
1802 		}
1803 	}
1804 
1805 	spec->ext_channel_count = spec->min_channel_count =
1806 		spec->multiout.num_dacs * 2;
1807 
1808 	if (spec->multi_ios == 2) {
1809 		for (i = 0; i < 2; i++)
1810 			spec->private_dac_nids[spec->multiout.num_dacs++] =
1811 				spec->multi_io[i].dac;
1812 	} else if (spec->multi_ios) {
1813 		spec->multi_ios = 0;
1814 		badness += BAD_MULTI_IO;
1815 	}
1816 
1817 	if (spec->indep_hp && !indep_hp_possible(codec))
1818 		badness += BAD_NO_INDEP_HP;
1819 
1820 	/* re-fill the shared DAC for speaker / headphone */
1821 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1822 		refill_shared_dacs(codec, cfg->hp_outs,
1823 				   spec->multiout.hp_out_nid,
1824 				   spec->hp_paths);
1825 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1826 		refill_shared_dacs(codec, cfg->speaker_outs,
1827 				   spec->multiout.extra_out_nid,
1828 				   spec->speaker_paths);
1829 
1830 	return badness;
1831 }
1832 
1833 #define DEBUG_BADNESS
1834 
1835 #ifdef DEBUG_BADNESS
1836 #define debug_badness(fmt, ...)						\
1837 	codec_dbg(codec, fmt, ##__VA_ARGS__)
1838 #else
1839 #define debug_badness(fmt, ...)						\
1840 	do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1841 #endif
1842 
1843 #ifdef DEBUG_BADNESS
1844 static inline void print_nid_path_idx(struct hda_codec *codec,
1845 				      const char *pfx, int idx)
1846 {
1847 	struct nid_path *path;
1848 
1849 	path = snd_hda_get_path_from_idx(codec, idx);
1850 	if (path)
1851 		print_nid_path(codec, pfx, path);
1852 }
1853 
1854 static void debug_show_configs(struct hda_codec *codec,
1855 			       struct auto_pin_cfg *cfg)
1856 {
1857 	struct hda_gen_spec *spec = codec->spec;
1858 	static const char * const lo_type[3] = { "LO", "SP", "HP" };
1859 	int i;
1860 
1861 	debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1862 		      cfg->line_out_pins[0], cfg->line_out_pins[1],
1863 		      cfg->line_out_pins[2], cfg->line_out_pins[3],
1864 		      spec->multiout.dac_nids[0],
1865 		      spec->multiout.dac_nids[1],
1866 		      spec->multiout.dac_nids[2],
1867 		      spec->multiout.dac_nids[3],
1868 		      lo_type[cfg->line_out_type]);
1869 	for (i = 0; i < cfg->line_outs; i++)
1870 		print_nid_path_idx(codec, "  out", spec->out_paths[i]);
1871 	if (spec->multi_ios > 0)
1872 		debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1873 			      spec->multi_ios,
1874 			      spec->multi_io[0].pin, spec->multi_io[1].pin,
1875 			      spec->multi_io[0].dac, spec->multi_io[1].dac);
1876 	for (i = 0; i < spec->multi_ios; i++)
1877 		print_nid_path_idx(codec, "  mio",
1878 				   spec->out_paths[cfg->line_outs + i]);
1879 	if (cfg->hp_outs)
1880 		debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1881 		      cfg->hp_pins[0], cfg->hp_pins[1],
1882 		      cfg->hp_pins[2], cfg->hp_pins[3],
1883 		      spec->multiout.hp_out_nid[0],
1884 		      spec->multiout.hp_out_nid[1],
1885 		      spec->multiout.hp_out_nid[2],
1886 		      spec->multiout.hp_out_nid[3]);
1887 	for (i = 0; i < cfg->hp_outs; i++)
1888 		print_nid_path_idx(codec, "  hp ", spec->hp_paths[i]);
1889 	if (cfg->speaker_outs)
1890 		debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1891 		      cfg->speaker_pins[0], cfg->speaker_pins[1],
1892 		      cfg->speaker_pins[2], cfg->speaker_pins[3],
1893 		      spec->multiout.extra_out_nid[0],
1894 		      spec->multiout.extra_out_nid[1],
1895 		      spec->multiout.extra_out_nid[2],
1896 		      spec->multiout.extra_out_nid[3]);
1897 	for (i = 0; i < cfg->speaker_outs; i++)
1898 		print_nid_path_idx(codec, "  spk", spec->speaker_paths[i]);
1899 	for (i = 0; i < 3; i++)
1900 		print_nid_path_idx(codec, "  mix", spec->aamix_out_paths[i]);
1901 }
1902 #else
1903 #define debug_show_configs(codec, cfg) /* NOP */
1904 #endif
1905 
1906 /* find all available DACs of the codec */
1907 static void fill_all_dac_nids(struct hda_codec *codec)
1908 {
1909 	struct hda_gen_spec *spec = codec->spec;
1910 	hda_nid_t nid;
1911 
1912 	spec->num_all_dacs = 0;
1913 	memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1914 	for_each_hda_codec_node(nid, codec) {
1915 		if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1916 			continue;
1917 		if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1918 			codec_err(codec, "Too many DACs!\n");
1919 			break;
1920 		}
1921 		spec->all_dacs[spec->num_all_dacs++] = nid;
1922 	}
1923 }
1924 
1925 static int parse_output_paths(struct hda_codec *codec)
1926 {
1927 	struct hda_gen_spec *spec = codec->spec;
1928 	struct auto_pin_cfg *cfg = &spec->autocfg;
1929 	struct auto_pin_cfg *best_cfg;
1930 	unsigned int val;
1931 	int best_badness = INT_MAX;
1932 	int badness;
1933 	bool fill_hardwired = true, fill_mio_first = true;
1934 	bool best_wired = true, best_mio = true;
1935 	bool hp_spk_swapped = false;
1936 
1937 	best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1938 	if (!best_cfg)
1939 		return -ENOMEM;
1940 	*best_cfg = *cfg;
1941 
1942 	for (;;) {
1943 		badness = fill_and_eval_dacs(codec, fill_hardwired,
1944 					     fill_mio_first);
1945 		if (badness < 0) {
1946 			kfree(best_cfg);
1947 			return badness;
1948 		}
1949 		debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1950 			      cfg->line_out_type, fill_hardwired, fill_mio_first,
1951 			      badness);
1952 		debug_show_configs(codec, cfg);
1953 		if (badness < best_badness) {
1954 			best_badness = badness;
1955 			*best_cfg = *cfg;
1956 			best_wired = fill_hardwired;
1957 			best_mio = fill_mio_first;
1958 		}
1959 		if (!badness)
1960 			break;
1961 		fill_mio_first = !fill_mio_first;
1962 		if (!fill_mio_first)
1963 			continue;
1964 		fill_hardwired = !fill_hardwired;
1965 		if (!fill_hardwired)
1966 			continue;
1967 		if (hp_spk_swapped)
1968 			break;
1969 		hp_spk_swapped = true;
1970 		if (cfg->speaker_outs > 0 &&
1971 		    cfg->line_out_type == AUTO_PIN_HP_OUT) {
1972 			cfg->hp_outs = cfg->line_outs;
1973 			memcpy(cfg->hp_pins, cfg->line_out_pins,
1974 			       sizeof(cfg->hp_pins));
1975 			cfg->line_outs = cfg->speaker_outs;
1976 			memcpy(cfg->line_out_pins, cfg->speaker_pins,
1977 			       sizeof(cfg->speaker_pins));
1978 			cfg->speaker_outs = 0;
1979 			memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1980 			cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1981 			fill_hardwired = true;
1982 			continue;
1983 		}
1984 		if (cfg->hp_outs > 0 &&
1985 		    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1986 			cfg->speaker_outs = cfg->line_outs;
1987 			memcpy(cfg->speaker_pins, cfg->line_out_pins,
1988 			       sizeof(cfg->speaker_pins));
1989 			cfg->line_outs = cfg->hp_outs;
1990 			memcpy(cfg->line_out_pins, cfg->hp_pins,
1991 			       sizeof(cfg->hp_pins));
1992 			cfg->hp_outs = 0;
1993 			memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1994 			cfg->line_out_type = AUTO_PIN_HP_OUT;
1995 			fill_hardwired = true;
1996 			continue;
1997 		}
1998 		break;
1999 	}
2000 
2001 	if (badness) {
2002 		debug_badness("==> restoring best_cfg\n");
2003 		*cfg = *best_cfg;
2004 		fill_and_eval_dacs(codec, best_wired, best_mio);
2005 	}
2006 	debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
2007 		      cfg->line_out_type, best_wired, best_mio);
2008 	debug_show_configs(codec, cfg);
2009 
2010 	if (cfg->line_out_pins[0]) {
2011 		struct nid_path *path;
2012 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2013 		if (path)
2014 			spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2015 		if (spec->vmaster_nid) {
2016 			snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2017 						HDA_OUTPUT, spec->vmaster_tlv);
2018 			if (spec->dac_min_mute)
2019 				spec->vmaster_tlv[3] |= TLV_DB_SCALE_MUTE;
2020 		}
2021 	}
2022 
2023 	/* set initial pinctl targets */
2024 	if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2025 		val = PIN_HP;
2026 	else
2027 		val = PIN_OUT;
2028 	set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
2029 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2030 		set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
2031 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
2032 		val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2033 		set_pin_targets(codec, cfg->speaker_outs,
2034 				cfg->speaker_pins, val);
2035 	}
2036 
2037 	/* clear indep_hp flag if not available */
2038 	if (spec->indep_hp && !indep_hp_possible(codec))
2039 		spec->indep_hp = 0;
2040 
2041 	kfree(best_cfg);
2042 	return 0;
2043 }
2044 
2045 /* add playback controls from the parsed DAC table */
2046 static int create_multi_out_ctls(struct hda_codec *codec,
2047 				 const struct auto_pin_cfg *cfg)
2048 {
2049 	struct hda_gen_spec *spec = codec->spec;
2050 	int i, err, noutputs;
2051 
2052 	noutputs = cfg->line_outs;
2053 	if (spec->multi_ios > 0 && cfg->line_outs < 3)
2054 		noutputs += spec->multi_ios;
2055 
2056 	for (i = 0; i < noutputs; i++) {
2057 		const char *name;
2058 		int index;
2059 		struct nid_path *path;
2060 
2061 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2062 		if (!path)
2063 			continue;
2064 
2065 		name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
2066 		if (!name || !strcmp(name, "CLFE")) {
2067 			/* Center/LFE */
2068 			err = add_vol_ctl(codec, "Center", 0, 1, path);
2069 			if (err < 0)
2070 				return err;
2071 			err = add_vol_ctl(codec, "LFE", 0, 2, path);
2072 			if (err < 0)
2073 				return err;
2074 		} else {
2075 			err = add_stereo_vol(codec, name, index, path);
2076 			if (err < 0)
2077 				return err;
2078 		}
2079 
2080 		name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
2081 		if (!name || !strcmp(name, "CLFE")) {
2082 			err = add_sw_ctl(codec, "Center", 0, 1, path);
2083 			if (err < 0)
2084 				return err;
2085 			err = add_sw_ctl(codec, "LFE", 0, 2, path);
2086 			if (err < 0)
2087 				return err;
2088 		} else {
2089 			err = add_stereo_sw(codec, name, index, path);
2090 			if (err < 0)
2091 				return err;
2092 		}
2093 	}
2094 	return 0;
2095 }
2096 
2097 static int create_extra_out(struct hda_codec *codec, int path_idx,
2098 			    const char *pfx, int cidx)
2099 {
2100 	struct nid_path *path;
2101 	int err;
2102 
2103 	path = snd_hda_get_path_from_idx(codec, path_idx);
2104 	if (!path)
2105 		return 0;
2106 	err = add_stereo_vol(codec, pfx, cidx, path);
2107 	if (err < 0)
2108 		return err;
2109 	err = add_stereo_sw(codec, pfx, cidx, path);
2110 	if (err < 0)
2111 		return err;
2112 	return 0;
2113 }
2114 
2115 /* add playback controls for speaker and HP outputs */
2116 static int create_extra_outs(struct hda_codec *codec, int num_pins,
2117 			     const int *paths, const char *pfx)
2118 {
2119 	int i;
2120 
2121 	for (i = 0; i < num_pins; i++) {
2122 		const char *name;
2123 		char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2124 		int err, idx = 0;
2125 
2126 		if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
2127 			name = "Bass Speaker";
2128 		else if (num_pins >= 3) {
2129 			snprintf(tmp, sizeof(tmp), "%s %s",
2130 				 pfx, channel_name[i]);
2131 			name = tmp;
2132 		} else {
2133 			name = pfx;
2134 			idx = i;
2135 		}
2136 		err = create_extra_out(codec, paths[i], name, idx);
2137 		if (err < 0)
2138 			return err;
2139 	}
2140 	return 0;
2141 }
2142 
2143 static int create_hp_out_ctls(struct hda_codec *codec)
2144 {
2145 	struct hda_gen_spec *spec = codec->spec;
2146 	return create_extra_outs(codec, spec->autocfg.hp_outs,
2147 				 spec->hp_paths,
2148 				 "Headphone");
2149 }
2150 
2151 static int create_speaker_out_ctls(struct hda_codec *codec)
2152 {
2153 	struct hda_gen_spec *spec = codec->spec;
2154 	return create_extra_outs(codec, spec->autocfg.speaker_outs,
2155 				 spec->speaker_paths,
2156 				 "Speaker");
2157 }
2158 
2159 /*
2160  * independent HP controls
2161  */
2162 
2163 static void call_hp_automute(struct hda_codec *codec,
2164 			     struct hda_jack_callback *jack);
2165 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2166 			 struct snd_ctl_elem_info *uinfo)
2167 {
2168 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2169 }
2170 
2171 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2172 			struct snd_ctl_elem_value *ucontrol)
2173 {
2174 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2175 	struct hda_gen_spec *spec = codec->spec;
2176 	ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2177 	return 0;
2178 }
2179 
2180 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2181 			       int nomix_path_idx, int mix_path_idx,
2182 			       int out_type);
2183 
2184 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2185 			struct snd_ctl_elem_value *ucontrol)
2186 {
2187 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2188 	struct hda_gen_spec *spec = codec->spec;
2189 	unsigned int select = ucontrol->value.enumerated.item[0];
2190 	int ret = 0;
2191 
2192 	mutex_lock(&spec->pcm_mutex);
2193 	if (spec->active_streams) {
2194 		ret = -EBUSY;
2195 		goto unlock;
2196 	}
2197 
2198 	if (spec->indep_hp_enabled != select) {
2199 		hda_nid_t *dacp;
2200 		if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2201 			dacp = &spec->private_dac_nids[0];
2202 		else
2203 			dacp = &spec->multiout.hp_out_nid[0];
2204 
2205 		/* update HP aamix paths in case it conflicts with indep HP */
2206 		if (spec->have_aamix_ctl) {
2207 			if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2208 				update_aamix_paths(codec, spec->aamix_mode,
2209 						   spec->out_paths[0],
2210 						   spec->aamix_out_paths[0],
2211 						   spec->autocfg.line_out_type);
2212 			else
2213 				update_aamix_paths(codec, spec->aamix_mode,
2214 						   spec->hp_paths[0],
2215 						   spec->aamix_out_paths[1],
2216 						   AUTO_PIN_HP_OUT);
2217 		}
2218 
2219 		spec->indep_hp_enabled = select;
2220 		if (spec->indep_hp_enabled)
2221 			*dacp = 0;
2222 		else
2223 			*dacp = spec->alt_dac_nid;
2224 
2225 		call_hp_automute(codec, NULL);
2226 		ret = 1;
2227 	}
2228  unlock:
2229 	mutex_unlock(&spec->pcm_mutex);
2230 	return ret;
2231 }
2232 
2233 static const struct snd_kcontrol_new indep_hp_ctl = {
2234 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2235 	.name = "Independent HP",
2236 	.info = indep_hp_info,
2237 	.get = indep_hp_get,
2238 	.put = indep_hp_put,
2239 };
2240 
2241 
2242 static int create_indep_hp_ctls(struct hda_codec *codec)
2243 {
2244 	struct hda_gen_spec *spec = codec->spec;
2245 	hda_nid_t dac;
2246 
2247 	if (!spec->indep_hp)
2248 		return 0;
2249 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2250 		dac = spec->multiout.dac_nids[0];
2251 	else
2252 		dac = spec->multiout.hp_out_nid[0];
2253 	if (!dac) {
2254 		spec->indep_hp = 0;
2255 		return 0;
2256 	}
2257 
2258 	spec->indep_hp_enabled = false;
2259 	spec->alt_dac_nid = dac;
2260 	if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2261 		return -ENOMEM;
2262 	return 0;
2263 }
2264 
2265 /*
2266  * channel mode enum control
2267  */
2268 
2269 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2270 			struct snd_ctl_elem_info *uinfo)
2271 {
2272 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2273 	struct hda_gen_spec *spec = codec->spec;
2274 	int chs;
2275 
2276 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2277 	uinfo->count = 1;
2278 	uinfo->value.enumerated.items = spec->multi_ios + 1;
2279 	if (uinfo->value.enumerated.item > spec->multi_ios)
2280 		uinfo->value.enumerated.item = spec->multi_ios;
2281 	chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2282 	sprintf(uinfo->value.enumerated.name, "%dch", chs);
2283 	return 0;
2284 }
2285 
2286 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2287 		       struct snd_ctl_elem_value *ucontrol)
2288 {
2289 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2290 	struct hda_gen_spec *spec = codec->spec;
2291 	ucontrol->value.enumerated.item[0] =
2292 		(spec->ext_channel_count - spec->min_channel_count) / 2;
2293 	return 0;
2294 }
2295 
2296 static inline struct nid_path *
2297 get_multiio_path(struct hda_codec *codec, int idx)
2298 {
2299 	struct hda_gen_spec *spec = codec->spec;
2300 	return snd_hda_get_path_from_idx(codec,
2301 		spec->out_paths[spec->autocfg.line_outs + idx]);
2302 }
2303 
2304 static void update_automute_all(struct hda_codec *codec);
2305 
2306 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2307  * used for output paths
2308  */
2309 static bool aamix_default(struct hda_gen_spec *spec)
2310 {
2311 	return !spec->have_aamix_ctl || spec->aamix_mode;
2312 }
2313 
2314 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2315 {
2316 	struct hda_gen_spec *spec = codec->spec;
2317 	hda_nid_t nid = spec->multi_io[idx].pin;
2318 	struct nid_path *path;
2319 
2320 	path = get_multiio_path(codec, idx);
2321 	if (!path)
2322 		return -EINVAL;
2323 
2324 	if (path->active == output)
2325 		return 0;
2326 
2327 	if (output) {
2328 		set_pin_target(codec, nid, PIN_OUT, true);
2329 		snd_hda_activate_path(codec, path, true, aamix_default(spec));
2330 		set_pin_eapd(codec, nid, true);
2331 	} else {
2332 		set_pin_eapd(codec, nid, false);
2333 		snd_hda_activate_path(codec, path, false, aamix_default(spec));
2334 		set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2335 		path_power_down_sync(codec, path);
2336 	}
2337 
2338 	/* update jack retasking in case it modifies any of them */
2339 	update_automute_all(codec);
2340 
2341 	return 0;
2342 }
2343 
2344 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2345 		       struct snd_ctl_elem_value *ucontrol)
2346 {
2347 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2348 	struct hda_gen_spec *spec = codec->spec;
2349 	int i, ch;
2350 
2351 	ch = ucontrol->value.enumerated.item[0];
2352 	if (ch < 0 || ch > spec->multi_ios)
2353 		return -EINVAL;
2354 	if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2355 		return 0;
2356 	spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2357 	for (i = 0; i < spec->multi_ios; i++)
2358 		set_multi_io(codec, i, i < ch);
2359 	spec->multiout.max_channels = max(spec->ext_channel_count,
2360 					  spec->const_channel_count);
2361 	if (spec->need_dac_fix)
2362 		spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2363 	return 1;
2364 }
2365 
2366 static const struct snd_kcontrol_new channel_mode_enum = {
2367 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2368 	.name = "Channel Mode",
2369 	.info = ch_mode_info,
2370 	.get = ch_mode_get,
2371 	.put = ch_mode_put,
2372 };
2373 
2374 static int create_multi_channel_mode(struct hda_codec *codec)
2375 {
2376 	struct hda_gen_spec *spec = codec->spec;
2377 
2378 	if (spec->multi_ios > 0) {
2379 		if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2380 			return -ENOMEM;
2381 	}
2382 	return 0;
2383 }
2384 
2385 /*
2386  * aamix loopback enable/disable switch
2387  */
2388 
2389 #define loopback_mixing_info	indep_hp_info
2390 
2391 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2392 			       struct snd_ctl_elem_value *ucontrol)
2393 {
2394 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2395 	struct hda_gen_spec *spec = codec->spec;
2396 	ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2397 	return 0;
2398 }
2399 
2400 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2401 			       int nomix_path_idx, int mix_path_idx,
2402 			       int out_type)
2403 {
2404 	struct hda_gen_spec *spec = codec->spec;
2405 	struct nid_path *nomix_path, *mix_path;
2406 
2407 	nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2408 	mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2409 	if (!nomix_path || !mix_path)
2410 		return;
2411 
2412 	/* if HP aamix path is driven from a different DAC and the
2413 	 * independent HP mode is ON, can't turn on aamix path
2414 	 */
2415 	if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2416 	    mix_path->path[0] != spec->alt_dac_nid)
2417 		do_mix = false;
2418 
2419 	if (do_mix) {
2420 		snd_hda_activate_path(codec, nomix_path, false, true);
2421 		snd_hda_activate_path(codec, mix_path, true, true);
2422 		path_power_down_sync(codec, nomix_path);
2423 	} else {
2424 		snd_hda_activate_path(codec, mix_path, false, false);
2425 		snd_hda_activate_path(codec, nomix_path, true, false);
2426 		path_power_down_sync(codec, mix_path);
2427 	}
2428 }
2429 
2430 /* re-initialize the output paths; only called from loopback_mixing_put() */
2431 static void update_output_paths(struct hda_codec *codec, int num_outs,
2432 				const int *paths)
2433 {
2434 	struct hda_gen_spec *spec = codec->spec;
2435 	struct nid_path *path;
2436 	int i;
2437 
2438 	for (i = 0; i < num_outs; i++) {
2439 		path = snd_hda_get_path_from_idx(codec, paths[i]);
2440 		if (path)
2441 			snd_hda_activate_path(codec, path, path->active,
2442 					      spec->aamix_mode);
2443 	}
2444 }
2445 
2446 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2447 			       struct snd_ctl_elem_value *ucontrol)
2448 {
2449 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2450 	struct hda_gen_spec *spec = codec->spec;
2451 	const struct auto_pin_cfg *cfg = &spec->autocfg;
2452 	unsigned int val = ucontrol->value.enumerated.item[0];
2453 
2454 	if (val == spec->aamix_mode)
2455 		return 0;
2456 	spec->aamix_mode = val;
2457 	if (has_aamix_out_paths(spec)) {
2458 		update_aamix_paths(codec, val, spec->out_paths[0],
2459 				   spec->aamix_out_paths[0],
2460 				   cfg->line_out_type);
2461 		update_aamix_paths(codec, val, spec->hp_paths[0],
2462 				   spec->aamix_out_paths[1],
2463 				   AUTO_PIN_HP_OUT);
2464 		update_aamix_paths(codec, val, spec->speaker_paths[0],
2465 				   spec->aamix_out_paths[2],
2466 				   AUTO_PIN_SPEAKER_OUT);
2467 	} else {
2468 		update_output_paths(codec, cfg->line_outs, spec->out_paths);
2469 		if (cfg->line_out_type != AUTO_PIN_HP_OUT)
2470 			update_output_paths(codec, cfg->hp_outs, spec->hp_paths);
2471 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
2472 			update_output_paths(codec, cfg->speaker_outs,
2473 					    spec->speaker_paths);
2474 	}
2475 	return 1;
2476 }
2477 
2478 static const struct snd_kcontrol_new loopback_mixing_enum = {
2479 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2480 	.name = "Loopback Mixing",
2481 	.info = loopback_mixing_info,
2482 	.get = loopback_mixing_get,
2483 	.put = loopback_mixing_put,
2484 };
2485 
2486 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2487 {
2488 	struct hda_gen_spec *spec = codec->spec;
2489 
2490 	if (!spec->mixer_nid)
2491 		return 0;
2492 	if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2493 		return -ENOMEM;
2494 	spec->have_aamix_ctl = 1;
2495 	return 0;
2496 }
2497 
2498 /*
2499  * shared headphone/mic handling
2500  */
2501 
2502 static void call_update_outputs(struct hda_codec *codec);
2503 
2504 /* for shared I/O, change the pin-control accordingly */
2505 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2506 {
2507 	struct hda_gen_spec *spec = codec->spec;
2508 	bool as_mic;
2509 	unsigned int val;
2510 	hda_nid_t pin;
2511 
2512 	pin = spec->hp_mic_pin;
2513 	as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2514 
2515 	if (!force) {
2516 		val = snd_hda_codec_get_pin_target(codec, pin);
2517 		if (as_mic) {
2518 			if (val & PIN_IN)
2519 				return;
2520 		} else {
2521 			if (val & PIN_OUT)
2522 				return;
2523 		}
2524 	}
2525 
2526 	val = snd_hda_get_default_vref(codec, pin);
2527 	/* if the HP pin doesn't support VREF and the codec driver gives an
2528 	 * alternative pin, set up the VREF on that pin instead
2529 	 */
2530 	if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2531 		const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2532 		unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2533 		if (vref_val != AC_PINCTL_VREF_HIZ)
2534 			snd_hda_set_pin_ctl_cache(codec, vref_pin,
2535 						  PIN_IN | (as_mic ? vref_val : 0));
2536 	}
2537 
2538 	if (!spec->hp_mic_jack_modes) {
2539 		if (as_mic)
2540 			val |= PIN_IN;
2541 		else
2542 			val = PIN_HP;
2543 		set_pin_target(codec, pin, val, true);
2544 		call_hp_automute(codec, NULL);
2545 	}
2546 }
2547 
2548 /* create a shared input with the headphone out */
2549 static int create_hp_mic(struct hda_codec *codec)
2550 {
2551 	struct hda_gen_spec *spec = codec->spec;
2552 	struct auto_pin_cfg *cfg = &spec->autocfg;
2553 	unsigned int defcfg;
2554 	hda_nid_t nid;
2555 
2556 	if (!spec->hp_mic) {
2557 		if (spec->suppress_hp_mic_detect)
2558 			return 0;
2559 		/* automatic detection: only if no input or a single internal
2560 		 * input pin is found, try to detect the shared hp/mic
2561 		 */
2562 		if (cfg->num_inputs > 1)
2563 			return 0;
2564 		else if (cfg->num_inputs == 1) {
2565 			defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2566 			if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2567 				return 0;
2568 		}
2569 	}
2570 
2571 	spec->hp_mic = 0; /* clear once */
2572 	if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2573 		return 0;
2574 
2575 	nid = 0;
2576 	if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2577 		nid = cfg->line_out_pins[0];
2578 	else if (cfg->hp_outs > 0)
2579 		nid = cfg->hp_pins[0];
2580 	if (!nid)
2581 		return 0;
2582 
2583 	if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2584 		return 0; /* no input */
2585 
2586 	cfg->inputs[cfg->num_inputs].pin = nid;
2587 	cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2588 	cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2589 	cfg->num_inputs++;
2590 	spec->hp_mic = 1;
2591 	spec->hp_mic_pin = nid;
2592 	/* we can't handle auto-mic together with HP-mic */
2593 	spec->suppress_auto_mic = 1;
2594 	codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid);
2595 	return 0;
2596 }
2597 
2598 /*
2599  * output jack mode
2600  */
2601 
2602 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2603 
2604 static const char * const out_jack_texts[] = {
2605 	"Line Out", "Headphone Out",
2606 };
2607 
2608 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2609 			      struct snd_ctl_elem_info *uinfo)
2610 {
2611 	return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2612 }
2613 
2614 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2615 			     struct snd_ctl_elem_value *ucontrol)
2616 {
2617 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2618 	hda_nid_t nid = kcontrol->private_value;
2619 	if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2620 		ucontrol->value.enumerated.item[0] = 1;
2621 	else
2622 		ucontrol->value.enumerated.item[0] = 0;
2623 	return 0;
2624 }
2625 
2626 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2627 			     struct snd_ctl_elem_value *ucontrol)
2628 {
2629 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2630 	hda_nid_t nid = kcontrol->private_value;
2631 	unsigned int val;
2632 
2633 	val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2634 	if (snd_hda_codec_get_pin_target(codec, nid) == val)
2635 		return 0;
2636 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2637 	return 1;
2638 }
2639 
2640 static const struct snd_kcontrol_new out_jack_mode_enum = {
2641 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2642 	.info = out_jack_mode_info,
2643 	.get = out_jack_mode_get,
2644 	.put = out_jack_mode_put,
2645 };
2646 
2647 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2648 {
2649 	struct hda_gen_spec *spec = codec->spec;
2650 	int i;
2651 
2652 	for (i = 0; i < spec->kctls.used; i++) {
2653 		struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2654 		if (!strcmp(kctl->name, name) && kctl->index == idx)
2655 			return true;
2656 	}
2657 	return false;
2658 }
2659 
2660 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2661 			       char *name, size_t name_len)
2662 {
2663 	struct hda_gen_spec *spec = codec->spec;
2664 	int idx = 0;
2665 
2666 	snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2667 	strlcat(name, " Jack Mode", name_len);
2668 
2669 	for (; find_kctl_name(codec, name, idx); idx++)
2670 		;
2671 }
2672 
2673 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2674 {
2675 	struct hda_gen_spec *spec = codec->spec;
2676 	if (spec->add_jack_modes) {
2677 		unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2678 		if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2679 			return 2;
2680 	}
2681 	return 1;
2682 }
2683 
2684 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2685 				 hda_nid_t *pins)
2686 {
2687 	struct hda_gen_spec *spec = codec->spec;
2688 	int i;
2689 
2690 	for (i = 0; i < num_pins; i++) {
2691 		hda_nid_t pin = pins[i];
2692 		if (pin == spec->hp_mic_pin)
2693 			continue;
2694 		if (get_out_jack_num_items(codec, pin) > 1) {
2695 			struct snd_kcontrol_new *knew;
2696 			char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2697 			get_jack_mode_name(codec, pin, name, sizeof(name));
2698 			knew = snd_hda_gen_add_kctl(spec, name,
2699 						    &out_jack_mode_enum);
2700 			if (!knew)
2701 				return -ENOMEM;
2702 			knew->private_value = pin;
2703 		}
2704 	}
2705 
2706 	return 0;
2707 }
2708 
2709 /*
2710  * input jack mode
2711  */
2712 
2713 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2714 #define NUM_VREFS	6
2715 
2716 static const char * const vref_texts[NUM_VREFS] = {
2717 	"Line In", "Mic 50pc Bias", "Mic 0V Bias",
2718 	"", "Mic 80pc Bias", "Mic 100pc Bias"
2719 };
2720 
2721 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2722 {
2723 	unsigned int pincap;
2724 
2725 	pincap = snd_hda_query_pin_caps(codec, pin);
2726 	pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2727 	/* filter out unusual vrefs */
2728 	pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2729 	return pincap;
2730 }
2731 
2732 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2733 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2734 {
2735 	unsigned int i, n = 0;
2736 
2737 	for (i = 0; i < NUM_VREFS; i++) {
2738 		if (vref_caps & (1 << i)) {
2739 			if (n == item_idx)
2740 				return i;
2741 			n++;
2742 		}
2743 	}
2744 	return 0;
2745 }
2746 
2747 /* convert back from the vref ctl index to the enum item index */
2748 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2749 {
2750 	unsigned int i, n = 0;
2751 
2752 	for (i = 0; i < NUM_VREFS; i++) {
2753 		if (i == idx)
2754 			return n;
2755 		if (vref_caps & (1 << i))
2756 			n++;
2757 	}
2758 	return 0;
2759 }
2760 
2761 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2762 			     struct snd_ctl_elem_info *uinfo)
2763 {
2764 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2765 	hda_nid_t nid = kcontrol->private_value;
2766 	unsigned int vref_caps = get_vref_caps(codec, nid);
2767 
2768 	snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2769 				 vref_texts);
2770 	/* set the right text */
2771 	strcpy(uinfo->value.enumerated.name,
2772 	       vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2773 	return 0;
2774 }
2775 
2776 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2777 			    struct snd_ctl_elem_value *ucontrol)
2778 {
2779 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2780 	hda_nid_t nid = kcontrol->private_value;
2781 	unsigned int vref_caps = get_vref_caps(codec, nid);
2782 	unsigned int idx;
2783 
2784 	idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2785 	ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2786 	return 0;
2787 }
2788 
2789 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2790 			    struct snd_ctl_elem_value *ucontrol)
2791 {
2792 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2793 	hda_nid_t nid = kcontrol->private_value;
2794 	unsigned int vref_caps = get_vref_caps(codec, nid);
2795 	unsigned int val, idx;
2796 
2797 	val = snd_hda_codec_get_pin_target(codec, nid);
2798 	idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2799 	if (idx == ucontrol->value.enumerated.item[0])
2800 		return 0;
2801 
2802 	val &= ~AC_PINCTL_VREFEN;
2803 	val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2804 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2805 	return 1;
2806 }
2807 
2808 static const struct snd_kcontrol_new in_jack_mode_enum = {
2809 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2810 	.info = in_jack_mode_info,
2811 	.get = in_jack_mode_get,
2812 	.put = in_jack_mode_put,
2813 };
2814 
2815 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2816 {
2817 	struct hda_gen_spec *spec = codec->spec;
2818 	int nitems = 0;
2819 	if (spec->add_jack_modes)
2820 		nitems = hweight32(get_vref_caps(codec, pin));
2821 	return nitems ? nitems : 1;
2822 }
2823 
2824 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2825 {
2826 	struct hda_gen_spec *spec = codec->spec;
2827 	struct snd_kcontrol_new *knew;
2828 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2829 	unsigned int defcfg;
2830 
2831 	if (pin == spec->hp_mic_pin)
2832 		return 0; /* already done in create_out_jack_mode() */
2833 
2834 	/* no jack mode for fixed pins */
2835 	defcfg = snd_hda_codec_get_pincfg(codec, pin);
2836 	if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2837 		return 0;
2838 
2839 	/* no multiple vref caps? */
2840 	if (get_in_jack_num_items(codec, pin) <= 1)
2841 		return 0;
2842 
2843 	get_jack_mode_name(codec, pin, name, sizeof(name));
2844 	knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2845 	if (!knew)
2846 		return -ENOMEM;
2847 	knew->private_value = pin;
2848 	return 0;
2849 }
2850 
2851 /*
2852  * HP/mic shared jack mode
2853  */
2854 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2855 				 struct snd_ctl_elem_info *uinfo)
2856 {
2857 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2858 	hda_nid_t nid = kcontrol->private_value;
2859 	int out_jacks = get_out_jack_num_items(codec, nid);
2860 	int in_jacks = get_in_jack_num_items(codec, nid);
2861 	const char *text = NULL;
2862 	int idx;
2863 
2864 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2865 	uinfo->count = 1;
2866 	uinfo->value.enumerated.items = out_jacks + in_jacks;
2867 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2868 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2869 	idx = uinfo->value.enumerated.item;
2870 	if (idx < out_jacks) {
2871 		if (out_jacks > 1)
2872 			text = out_jack_texts[idx];
2873 		else
2874 			text = "Headphone Out";
2875 	} else {
2876 		idx -= out_jacks;
2877 		if (in_jacks > 1) {
2878 			unsigned int vref_caps = get_vref_caps(codec, nid);
2879 			text = vref_texts[get_vref_idx(vref_caps, idx)];
2880 		} else
2881 			text = "Mic In";
2882 	}
2883 
2884 	strcpy(uinfo->value.enumerated.name, text);
2885 	return 0;
2886 }
2887 
2888 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2889 {
2890 	int out_jacks = get_out_jack_num_items(codec, nid);
2891 	int in_jacks = get_in_jack_num_items(codec, nid);
2892 	unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2893 	int idx = 0;
2894 
2895 	if (val & PIN_OUT) {
2896 		if (out_jacks > 1 && val == PIN_HP)
2897 			idx = 1;
2898 	} else if (val & PIN_IN) {
2899 		idx = out_jacks;
2900 		if (in_jacks > 1) {
2901 			unsigned int vref_caps = get_vref_caps(codec, nid);
2902 			val &= AC_PINCTL_VREFEN;
2903 			idx += cvt_from_vref_idx(vref_caps, val);
2904 		}
2905 	}
2906 	return idx;
2907 }
2908 
2909 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2910 				struct snd_ctl_elem_value *ucontrol)
2911 {
2912 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2913 	hda_nid_t nid = kcontrol->private_value;
2914 	ucontrol->value.enumerated.item[0] =
2915 		get_cur_hp_mic_jack_mode(codec, nid);
2916 	return 0;
2917 }
2918 
2919 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2920 				struct snd_ctl_elem_value *ucontrol)
2921 {
2922 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2923 	hda_nid_t nid = kcontrol->private_value;
2924 	int out_jacks = get_out_jack_num_items(codec, nid);
2925 	int in_jacks = get_in_jack_num_items(codec, nid);
2926 	unsigned int val, oldval, idx;
2927 
2928 	oldval = get_cur_hp_mic_jack_mode(codec, nid);
2929 	idx = ucontrol->value.enumerated.item[0];
2930 	if (oldval == idx)
2931 		return 0;
2932 
2933 	if (idx < out_jacks) {
2934 		if (out_jacks > 1)
2935 			val = idx ? PIN_HP : PIN_OUT;
2936 		else
2937 			val = PIN_HP;
2938 	} else {
2939 		idx -= out_jacks;
2940 		if (in_jacks > 1) {
2941 			unsigned int vref_caps = get_vref_caps(codec, nid);
2942 			val = snd_hda_codec_get_pin_target(codec, nid);
2943 			val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2944 			val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2945 		} else
2946 			val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2947 	}
2948 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2949 	call_hp_automute(codec, NULL);
2950 
2951 	return 1;
2952 }
2953 
2954 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2955 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2956 	.info = hp_mic_jack_mode_info,
2957 	.get = hp_mic_jack_mode_get,
2958 	.put = hp_mic_jack_mode_put,
2959 };
2960 
2961 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2962 {
2963 	struct hda_gen_spec *spec = codec->spec;
2964 	struct snd_kcontrol_new *knew;
2965 
2966 	knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2967 				    &hp_mic_jack_mode_enum);
2968 	if (!knew)
2969 		return -ENOMEM;
2970 	knew->private_value = pin;
2971 	spec->hp_mic_jack_modes = 1;
2972 	return 0;
2973 }
2974 
2975 /*
2976  * Parse input paths
2977  */
2978 
2979 /* add the powersave loopback-list entry */
2980 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2981 {
2982 	struct hda_amp_list *list;
2983 
2984 	list = snd_array_new(&spec->loopback_list);
2985 	if (!list)
2986 		return -ENOMEM;
2987 	list->nid = mix;
2988 	list->dir = HDA_INPUT;
2989 	list->idx = idx;
2990 	spec->loopback.amplist = spec->loopback_list.list;
2991 	return 0;
2992 }
2993 
2994 /* return true if either a volume or a mute amp is found for the given
2995  * aamix path; the amp has to be either in the mixer node or its direct leaf
2996  */
2997 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
2998 				   hda_nid_t pin, unsigned int *mix_val,
2999 				   unsigned int *mute_val)
3000 {
3001 	int idx, num_conns;
3002 	const hda_nid_t *list;
3003 	hda_nid_t nid;
3004 
3005 	idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
3006 	if (idx < 0)
3007 		return false;
3008 
3009 	*mix_val = *mute_val = 0;
3010 	if (nid_has_volume(codec, mix_nid, HDA_INPUT))
3011 		*mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
3012 	if (nid_has_mute(codec, mix_nid, HDA_INPUT))
3013 		*mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
3014 	if (*mix_val && *mute_val)
3015 		return true;
3016 
3017 	/* check leaf node */
3018 	num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
3019 	if (num_conns < idx)
3020 		return false;
3021 	nid = list[idx];
3022 	if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
3023 	    !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
3024 		*mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3025 	if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
3026 	    !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
3027 		*mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3028 
3029 	return *mix_val || *mute_val;
3030 }
3031 
3032 /* create input playback/capture controls for the given pin */
3033 static int new_analog_input(struct hda_codec *codec, int input_idx,
3034 			    hda_nid_t pin, const char *ctlname, int ctlidx,
3035 			    hda_nid_t mix_nid)
3036 {
3037 	struct hda_gen_spec *spec = codec->spec;
3038 	struct nid_path *path;
3039 	unsigned int mix_val, mute_val;
3040 	int err, idx;
3041 
3042 	if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
3043 		return 0;
3044 
3045 	path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
3046 	if (!path)
3047 		return -EINVAL;
3048 	print_nid_path(codec, "loopback", path);
3049 	spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3050 
3051 	idx = path->idx[path->depth - 1];
3052 	if (mix_val) {
3053 		err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3054 		if (err < 0)
3055 			return err;
3056 		path->ctls[NID_PATH_VOL_CTL] = mix_val;
3057 	}
3058 
3059 	if (mute_val) {
3060 		err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3061 		if (err < 0)
3062 			return err;
3063 		path->ctls[NID_PATH_MUTE_CTL] = mute_val;
3064 	}
3065 
3066 	path->active = true;
3067 	path->stream_enabled = true; /* no DAC/ADC involved */
3068 	err = add_loopback_list(spec, mix_nid, idx);
3069 	if (err < 0)
3070 		return err;
3071 
3072 	if (spec->mixer_nid != spec->mixer_merge_nid &&
3073 	    !spec->loopback_merge_path) {
3074 		path = snd_hda_add_new_path(codec, spec->mixer_nid,
3075 					    spec->mixer_merge_nid, 0);
3076 		if (path) {
3077 			print_nid_path(codec, "loopback-merge", path);
3078 			path->active = true;
3079 			path->pin_fixed = true; /* static route */
3080 			path->stream_enabled = true; /* no DAC/ADC involved */
3081 			spec->loopback_merge_path =
3082 				snd_hda_get_path_idx(codec, path);
3083 		}
3084 	}
3085 
3086 	return 0;
3087 }
3088 
3089 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
3090 {
3091 	unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
3092 	return (pincap & AC_PINCAP_IN) != 0;
3093 }
3094 
3095 /* Parse the codec tree and retrieve ADCs */
3096 static int fill_adc_nids(struct hda_codec *codec)
3097 {
3098 	struct hda_gen_spec *spec = codec->spec;
3099 	hda_nid_t nid;
3100 	hda_nid_t *adc_nids = spec->adc_nids;
3101 	int max_nums = ARRAY_SIZE(spec->adc_nids);
3102 	int nums = 0;
3103 
3104 	for_each_hda_codec_node(nid, codec) {
3105 		unsigned int caps = get_wcaps(codec, nid);
3106 		int type = get_wcaps_type(caps);
3107 
3108 		if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
3109 			continue;
3110 		adc_nids[nums] = nid;
3111 		if (++nums >= max_nums)
3112 			break;
3113 	}
3114 	spec->num_adc_nids = nums;
3115 
3116 	/* copy the detected ADCs to all_adcs[] */
3117 	spec->num_all_adcs = nums;
3118 	memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3119 
3120 	return nums;
3121 }
3122 
3123 /* filter out invalid adc_nids that don't give all active input pins;
3124  * if needed, check whether dynamic ADC-switching is available
3125  */
3126 static int check_dyn_adc_switch(struct hda_codec *codec)
3127 {
3128 	struct hda_gen_spec *spec = codec->spec;
3129 	struct hda_input_mux *imux = &spec->input_mux;
3130 	unsigned int ok_bits;
3131 	int i, n, nums;
3132 
3133 	nums = 0;
3134 	ok_bits = 0;
3135 	for (n = 0; n < spec->num_adc_nids; n++) {
3136 		for (i = 0; i < imux->num_items; i++) {
3137 			if (!spec->input_paths[i][n])
3138 				break;
3139 		}
3140 		if (i >= imux->num_items) {
3141 			ok_bits |= (1 << n);
3142 			nums++;
3143 		}
3144 	}
3145 
3146 	if (!ok_bits) {
3147 		/* check whether ADC-switch is possible */
3148 		for (i = 0; i < imux->num_items; i++) {
3149 			for (n = 0; n < spec->num_adc_nids; n++) {
3150 				if (spec->input_paths[i][n]) {
3151 					spec->dyn_adc_idx[i] = n;
3152 					break;
3153 				}
3154 			}
3155 		}
3156 
3157 		codec_dbg(codec, "enabling ADC switching\n");
3158 		spec->dyn_adc_switch = 1;
3159 	} else if (nums != spec->num_adc_nids) {
3160 		/* shrink the invalid adcs and input paths */
3161 		nums = 0;
3162 		for (n = 0; n < spec->num_adc_nids; n++) {
3163 			if (!(ok_bits & (1 << n)))
3164 				continue;
3165 			if (n != nums) {
3166 				spec->adc_nids[nums] = spec->adc_nids[n];
3167 				for (i = 0; i < imux->num_items; i++) {
3168 					invalidate_nid_path(codec,
3169 						spec->input_paths[i][nums]);
3170 					spec->input_paths[i][nums] =
3171 						spec->input_paths[i][n];
3172 				}
3173 			}
3174 			nums++;
3175 		}
3176 		spec->num_adc_nids = nums;
3177 	}
3178 
3179 	if (imux->num_items == 1 ||
3180 	    (imux->num_items == 2 && spec->hp_mic)) {
3181 		codec_dbg(codec, "reducing to a single ADC\n");
3182 		spec->num_adc_nids = 1; /* reduce to a single ADC */
3183 	}
3184 
3185 	/* single index for individual volumes ctls */
3186 	if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3187 		spec->num_adc_nids = 1;
3188 
3189 	return 0;
3190 }
3191 
3192 /* parse capture source paths from the given pin and create imux items */
3193 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3194 				int cfg_idx, int num_adcs,
3195 				const char *label, int anchor)
3196 {
3197 	struct hda_gen_spec *spec = codec->spec;
3198 	struct hda_input_mux *imux = &spec->input_mux;
3199 	int imux_idx = imux->num_items;
3200 	bool imux_added = false;
3201 	int c;
3202 
3203 	for (c = 0; c < num_adcs; c++) {
3204 		struct nid_path *path;
3205 		hda_nid_t adc = spec->adc_nids[c];
3206 
3207 		if (!is_reachable_path(codec, pin, adc))
3208 			continue;
3209 		path = snd_hda_add_new_path(codec, pin, adc, anchor);
3210 		if (!path)
3211 			continue;
3212 		print_nid_path(codec, "input", path);
3213 		spec->input_paths[imux_idx][c] =
3214 			snd_hda_get_path_idx(codec, path);
3215 
3216 		if (!imux_added) {
3217 			if (spec->hp_mic_pin == pin)
3218 				spec->hp_mic_mux_idx = imux->num_items;
3219 			spec->imux_pins[imux->num_items] = pin;
3220 			snd_hda_add_imux_item(codec, imux, label, cfg_idx, NULL);
3221 			imux_added = true;
3222 			if (spec->dyn_adc_switch)
3223 				spec->dyn_adc_idx[imux_idx] = c;
3224 		}
3225 	}
3226 
3227 	return 0;
3228 }
3229 
3230 /*
3231  * create playback/capture controls for input pins
3232  */
3233 
3234 /* fill the label for each input at first */
3235 static int fill_input_pin_labels(struct hda_codec *codec)
3236 {
3237 	struct hda_gen_spec *spec = codec->spec;
3238 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3239 	int i;
3240 
3241 	for (i = 0; i < cfg->num_inputs; i++) {
3242 		hda_nid_t pin = cfg->inputs[i].pin;
3243 		const char *label;
3244 		int j, idx;
3245 
3246 		if (!is_input_pin(codec, pin))
3247 			continue;
3248 
3249 		label = hda_get_autocfg_input_label(codec, cfg, i);
3250 		idx = 0;
3251 		for (j = i - 1; j >= 0; j--) {
3252 			if (spec->input_labels[j] &&
3253 			    !strcmp(spec->input_labels[j], label)) {
3254 				idx = spec->input_label_idxs[j] + 1;
3255 				break;
3256 			}
3257 		}
3258 
3259 		spec->input_labels[i] = label;
3260 		spec->input_label_idxs[i] = idx;
3261 	}
3262 
3263 	return 0;
3264 }
3265 
3266 #define CFG_IDX_MIX	99	/* a dummy cfg->input idx for stereo mix */
3267 
3268 static int create_input_ctls(struct hda_codec *codec)
3269 {
3270 	struct hda_gen_spec *spec = codec->spec;
3271 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3272 	hda_nid_t mixer = spec->mixer_nid;
3273 	int num_adcs;
3274 	int i, err;
3275 	unsigned int val;
3276 
3277 	num_adcs = fill_adc_nids(codec);
3278 	if (num_adcs < 0)
3279 		return 0;
3280 
3281 	err = fill_input_pin_labels(codec);
3282 	if (err < 0)
3283 		return err;
3284 
3285 	for (i = 0; i < cfg->num_inputs; i++) {
3286 		hda_nid_t pin;
3287 
3288 		pin = cfg->inputs[i].pin;
3289 		if (!is_input_pin(codec, pin))
3290 			continue;
3291 
3292 		val = PIN_IN;
3293 		if (cfg->inputs[i].type == AUTO_PIN_MIC)
3294 			val |= snd_hda_get_default_vref(codec, pin);
3295 		if (pin != spec->hp_mic_pin &&
3296 		    !snd_hda_codec_get_pin_target(codec, pin))
3297 			set_pin_target(codec, pin, val, false);
3298 
3299 		if (mixer) {
3300 			if (is_reachable_path(codec, pin, mixer)) {
3301 				err = new_analog_input(codec, i, pin,
3302 						       spec->input_labels[i],
3303 						       spec->input_label_idxs[i],
3304 						       mixer);
3305 				if (err < 0)
3306 					return err;
3307 			}
3308 		}
3309 
3310 		err = parse_capture_source(codec, pin, i, num_adcs,
3311 					   spec->input_labels[i], -mixer);
3312 		if (err < 0)
3313 			return err;
3314 
3315 		if (spec->add_jack_modes) {
3316 			err = create_in_jack_mode(codec, pin);
3317 			if (err < 0)
3318 				return err;
3319 		}
3320 	}
3321 
3322 	/* add stereo mix when explicitly enabled via hint */
3323 	if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3324 		err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3325 					   "Stereo Mix", 0);
3326 		if (err < 0)
3327 			return err;
3328 		else
3329 			spec->suppress_auto_mic = 1;
3330 	}
3331 
3332 	return 0;
3333 }
3334 
3335 
3336 /*
3337  * input source mux
3338  */
3339 
3340 /* get the input path specified by the given adc and imux indices */
3341 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3342 {
3343 	struct hda_gen_spec *spec = codec->spec;
3344 	if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3345 		snd_BUG();
3346 		return NULL;
3347 	}
3348 	if (spec->dyn_adc_switch)
3349 		adc_idx = spec->dyn_adc_idx[imux_idx];
3350 	if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3351 		snd_BUG();
3352 		return NULL;
3353 	}
3354 	return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3355 }
3356 
3357 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3358 		      unsigned int idx);
3359 
3360 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3361 			 struct snd_ctl_elem_info *uinfo)
3362 {
3363 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3364 	struct hda_gen_spec *spec = codec->spec;
3365 	return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3366 }
3367 
3368 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3369 			struct snd_ctl_elem_value *ucontrol)
3370 {
3371 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3372 	struct hda_gen_spec *spec = codec->spec;
3373 	/* the ctls are created at once with multiple counts */
3374 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3375 
3376 	ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3377 	return 0;
3378 }
3379 
3380 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3381 			    struct snd_ctl_elem_value *ucontrol)
3382 {
3383 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3384 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3385 	return mux_select(codec, adc_idx,
3386 			  ucontrol->value.enumerated.item[0]);
3387 }
3388 
3389 static const struct snd_kcontrol_new cap_src_temp = {
3390 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3391 	.name = "Input Source",
3392 	.info = mux_enum_info,
3393 	.get = mux_enum_get,
3394 	.put = mux_enum_put,
3395 };
3396 
3397 /*
3398  * capture volume and capture switch ctls
3399  */
3400 
3401 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3402 			  struct snd_ctl_elem_value *ucontrol);
3403 
3404 /* call the given amp update function for all amps in the imux list at once */
3405 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3406 			  struct snd_ctl_elem_value *ucontrol,
3407 			  put_call_t func, int type)
3408 {
3409 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3410 	struct hda_gen_spec *spec = codec->spec;
3411 	const struct hda_input_mux *imux;
3412 	struct nid_path *path;
3413 	int i, adc_idx, err = 0;
3414 
3415 	imux = &spec->input_mux;
3416 	adc_idx = kcontrol->id.index;
3417 	mutex_lock(&codec->control_mutex);
3418 	for (i = 0; i < imux->num_items; i++) {
3419 		path = get_input_path(codec, adc_idx, i);
3420 		if (!path || !path->ctls[type])
3421 			continue;
3422 		kcontrol->private_value = path->ctls[type];
3423 		err = func(kcontrol, ucontrol);
3424 		if (err < 0)
3425 			break;
3426 	}
3427 	mutex_unlock(&codec->control_mutex);
3428 	if (err >= 0 && spec->cap_sync_hook)
3429 		spec->cap_sync_hook(codec, kcontrol, ucontrol);
3430 	return err;
3431 }
3432 
3433 /* capture volume ctl callbacks */
3434 #define cap_vol_info		snd_hda_mixer_amp_volume_info
3435 #define cap_vol_get		snd_hda_mixer_amp_volume_get
3436 #define cap_vol_tlv		snd_hda_mixer_amp_tlv
3437 
3438 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3439 		       struct snd_ctl_elem_value *ucontrol)
3440 {
3441 	return cap_put_caller(kcontrol, ucontrol,
3442 			      snd_hda_mixer_amp_volume_put,
3443 			      NID_PATH_VOL_CTL);
3444 }
3445 
3446 static const struct snd_kcontrol_new cap_vol_temp = {
3447 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3448 	.name = "Capture Volume",
3449 	.access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3450 		   SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3451 		   SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3452 	.info = cap_vol_info,
3453 	.get = cap_vol_get,
3454 	.put = cap_vol_put,
3455 	.tlv = { .c = cap_vol_tlv },
3456 };
3457 
3458 /* capture switch ctl callbacks */
3459 #define cap_sw_info		snd_ctl_boolean_stereo_info
3460 #define cap_sw_get		snd_hda_mixer_amp_switch_get
3461 
3462 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3463 		      struct snd_ctl_elem_value *ucontrol)
3464 {
3465 	return cap_put_caller(kcontrol, ucontrol,
3466 			      snd_hda_mixer_amp_switch_put,
3467 			      NID_PATH_MUTE_CTL);
3468 }
3469 
3470 static const struct snd_kcontrol_new cap_sw_temp = {
3471 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3472 	.name = "Capture Switch",
3473 	.info = cap_sw_info,
3474 	.get = cap_sw_get,
3475 	.put = cap_sw_put,
3476 };
3477 
3478 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3479 {
3480 	hda_nid_t nid;
3481 	int i, depth;
3482 
3483 	path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3484 	for (depth = 0; depth < 3; depth++) {
3485 		if (depth >= path->depth)
3486 			return -EINVAL;
3487 		i = path->depth - depth - 1;
3488 		nid = path->path[i];
3489 		if (!path->ctls[NID_PATH_VOL_CTL]) {
3490 			if (nid_has_volume(codec, nid, HDA_OUTPUT))
3491 				path->ctls[NID_PATH_VOL_CTL] =
3492 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3493 			else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3494 				int idx = path->idx[i];
3495 				if (!depth && codec->single_adc_amp)
3496 					idx = 0;
3497 				path->ctls[NID_PATH_VOL_CTL] =
3498 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3499 			}
3500 		}
3501 		if (!path->ctls[NID_PATH_MUTE_CTL]) {
3502 			if (nid_has_mute(codec, nid, HDA_OUTPUT))
3503 				path->ctls[NID_PATH_MUTE_CTL] =
3504 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3505 			else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3506 				int idx = path->idx[i];
3507 				if (!depth && codec->single_adc_amp)
3508 					idx = 0;
3509 				path->ctls[NID_PATH_MUTE_CTL] =
3510 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3511 			}
3512 		}
3513 	}
3514 	return 0;
3515 }
3516 
3517 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3518 {
3519 	struct hda_gen_spec *spec = codec->spec;
3520 	struct auto_pin_cfg *cfg = &spec->autocfg;
3521 	unsigned int val;
3522 	int i;
3523 
3524 	if (!spec->inv_dmic_split)
3525 		return false;
3526 	for (i = 0; i < cfg->num_inputs; i++) {
3527 		if (cfg->inputs[i].pin != nid)
3528 			continue;
3529 		if (cfg->inputs[i].type != AUTO_PIN_MIC)
3530 			return false;
3531 		val = snd_hda_codec_get_pincfg(codec, nid);
3532 		return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3533 	}
3534 	return false;
3535 }
3536 
3537 /* capture switch put callback for a single control with hook call */
3538 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3539 			     struct snd_ctl_elem_value *ucontrol)
3540 {
3541 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3542 	struct hda_gen_spec *spec = codec->spec;
3543 	int ret;
3544 
3545 	ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3546 	if (ret < 0)
3547 		return ret;
3548 
3549 	if (spec->cap_sync_hook)
3550 		spec->cap_sync_hook(codec, kcontrol, ucontrol);
3551 
3552 	return ret;
3553 }
3554 
3555 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3556 			      int idx, bool is_switch, unsigned int ctl,
3557 			      bool inv_dmic)
3558 {
3559 	struct hda_gen_spec *spec = codec->spec;
3560 	char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3561 	int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3562 	const char *sfx = is_switch ? "Switch" : "Volume";
3563 	unsigned int chs = inv_dmic ? 1 : 3;
3564 	struct snd_kcontrol_new *knew;
3565 
3566 	if (!ctl)
3567 		return 0;
3568 
3569 	if (label)
3570 		snprintf(tmpname, sizeof(tmpname),
3571 			 "%s Capture %s", label, sfx);
3572 	else
3573 		snprintf(tmpname, sizeof(tmpname),
3574 			 "Capture %s", sfx);
3575 	knew = add_control(spec, type, tmpname, idx,
3576 			   amp_val_replace_channels(ctl, chs));
3577 	if (!knew)
3578 		return -ENOMEM;
3579 	if (is_switch)
3580 		knew->put = cap_single_sw_put;
3581 	if (!inv_dmic)
3582 		return 0;
3583 
3584 	/* Make independent right kcontrol */
3585 	if (label)
3586 		snprintf(tmpname, sizeof(tmpname),
3587 			 "Inverted %s Capture %s", label, sfx);
3588 	else
3589 		snprintf(tmpname, sizeof(tmpname),
3590 			 "Inverted Capture %s", sfx);
3591 	knew = add_control(spec, type, tmpname, idx,
3592 			   amp_val_replace_channels(ctl, 2));
3593 	if (!knew)
3594 		return -ENOMEM;
3595 	if (is_switch)
3596 		knew->put = cap_single_sw_put;
3597 	return 0;
3598 }
3599 
3600 /* create single (and simple) capture volume and switch controls */
3601 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3602 				     unsigned int vol_ctl, unsigned int sw_ctl,
3603 				     bool inv_dmic)
3604 {
3605 	int err;
3606 	err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3607 	if (err < 0)
3608 		return err;
3609 	err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3610 	if (err < 0)
3611 		return err;
3612 	return 0;
3613 }
3614 
3615 /* create bound capture volume and switch controls */
3616 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3617 				   unsigned int vol_ctl, unsigned int sw_ctl)
3618 {
3619 	struct hda_gen_spec *spec = codec->spec;
3620 	struct snd_kcontrol_new *knew;
3621 
3622 	if (vol_ctl) {
3623 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3624 		if (!knew)
3625 			return -ENOMEM;
3626 		knew->index = idx;
3627 		knew->private_value = vol_ctl;
3628 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3629 	}
3630 	if (sw_ctl) {
3631 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3632 		if (!knew)
3633 			return -ENOMEM;
3634 		knew->index = idx;
3635 		knew->private_value = sw_ctl;
3636 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3637 	}
3638 	return 0;
3639 }
3640 
3641 /* return the vol ctl when used first in the imux list */
3642 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3643 {
3644 	struct nid_path *path;
3645 	unsigned int ctl;
3646 	int i;
3647 
3648 	path = get_input_path(codec, 0, idx);
3649 	if (!path)
3650 		return 0;
3651 	ctl = path->ctls[type];
3652 	if (!ctl)
3653 		return 0;
3654 	for (i = 0; i < idx - 1; i++) {
3655 		path = get_input_path(codec, 0, i);
3656 		if (path && path->ctls[type] == ctl)
3657 			return 0;
3658 	}
3659 	return ctl;
3660 }
3661 
3662 /* create individual capture volume and switch controls per input */
3663 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3664 {
3665 	struct hda_gen_spec *spec = codec->spec;
3666 	struct hda_input_mux *imux = &spec->input_mux;
3667 	int i, err, type;
3668 
3669 	for (i = 0; i < imux->num_items; i++) {
3670 		bool inv_dmic;
3671 		int idx;
3672 
3673 		idx = imux->items[i].index;
3674 		if (idx >= spec->autocfg.num_inputs)
3675 			continue;
3676 		inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3677 
3678 		for (type = 0; type < 2; type++) {
3679 			err = add_single_cap_ctl(codec,
3680 						 spec->input_labels[idx],
3681 						 spec->input_label_idxs[idx],
3682 						 type,
3683 						 get_first_cap_ctl(codec, i, type),
3684 						 inv_dmic);
3685 			if (err < 0)
3686 				return err;
3687 		}
3688 	}
3689 	return 0;
3690 }
3691 
3692 static int create_capture_mixers(struct hda_codec *codec)
3693 {
3694 	struct hda_gen_spec *spec = codec->spec;
3695 	struct hda_input_mux *imux = &spec->input_mux;
3696 	int i, n, nums, err;
3697 
3698 	if (spec->dyn_adc_switch)
3699 		nums = 1;
3700 	else
3701 		nums = spec->num_adc_nids;
3702 
3703 	if (!spec->auto_mic && imux->num_items > 1) {
3704 		struct snd_kcontrol_new *knew;
3705 		const char *name;
3706 		name = nums > 1 ? "Input Source" : "Capture Source";
3707 		knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3708 		if (!knew)
3709 			return -ENOMEM;
3710 		knew->count = nums;
3711 	}
3712 
3713 	for (n = 0; n < nums; n++) {
3714 		bool multi = false;
3715 		bool multi_cap_vol = spec->multi_cap_vol;
3716 		bool inv_dmic = false;
3717 		int vol, sw;
3718 
3719 		vol = sw = 0;
3720 		for (i = 0; i < imux->num_items; i++) {
3721 			struct nid_path *path;
3722 			path = get_input_path(codec, n, i);
3723 			if (!path)
3724 				continue;
3725 			parse_capvol_in_path(codec, path);
3726 			if (!vol)
3727 				vol = path->ctls[NID_PATH_VOL_CTL];
3728 			else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3729 				multi = true;
3730 				if (!same_amp_caps(codec, vol,
3731 				    path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3732 					multi_cap_vol = true;
3733 			}
3734 			if (!sw)
3735 				sw = path->ctls[NID_PATH_MUTE_CTL];
3736 			else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3737 				multi = true;
3738 				if (!same_amp_caps(codec, sw,
3739 				    path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3740 					multi_cap_vol = true;
3741 			}
3742 			if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3743 				inv_dmic = true;
3744 		}
3745 
3746 		if (!multi)
3747 			err = create_single_cap_vol_ctl(codec, n, vol, sw,
3748 							inv_dmic);
3749 		else if (!multi_cap_vol && !inv_dmic)
3750 			err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3751 		else
3752 			err = create_multi_cap_vol_ctl(codec);
3753 		if (err < 0)
3754 			return err;
3755 	}
3756 
3757 	return 0;
3758 }
3759 
3760 /*
3761  * add mic boosts if needed
3762  */
3763 
3764 /* check whether the given amp is feasible as a boost volume */
3765 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3766 			    int dir, int idx)
3767 {
3768 	unsigned int step;
3769 
3770 	if (!nid_has_volume(codec, nid, dir) ||
3771 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3772 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3773 		return false;
3774 
3775 	step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3776 		>> AC_AMPCAP_STEP_SIZE_SHIFT;
3777 	if (step < 0x20)
3778 		return false;
3779 	return true;
3780 }
3781 
3782 /* look for a boost amp in a widget close to the pin */
3783 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3784 				       struct nid_path *path)
3785 {
3786 	unsigned int val = 0;
3787 	hda_nid_t nid;
3788 	int depth;
3789 
3790 	for (depth = 0; depth < 3; depth++) {
3791 		if (depth >= path->depth - 1)
3792 			break;
3793 		nid = path->path[depth];
3794 		if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3795 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3796 			break;
3797 		} else if (check_boost_vol(codec, nid, HDA_INPUT,
3798 					   path->idx[depth])) {
3799 			val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3800 						  HDA_INPUT);
3801 			break;
3802 		}
3803 	}
3804 
3805 	return val;
3806 }
3807 
3808 static int parse_mic_boost(struct hda_codec *codec)
3809 {
3810 	struct hda_gen_spec *spec = codec->spec;
3811 	struct auto_pin_cfg *cfg = &spec->autocfg;
3812 	struct hda_input_mux *imux = &spec->input_mux;
3813 	int i;
3814 
3815 	if (!spec->num_adc_nids)
3816 		return 0;
3817 
3818 	for (i = 0; i < imux->num_items; i++) {
3819 		struct nid_path *path;
3820 		unsigned int val;
3821 		int idx;
3822 		char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3823 
3824 		idx = imux->items[i].index;
3825 		if (idx >= imux->num_items)
3826 			continue;
3827 
3828 		/* check only line-in and mic pins */
3829 		if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3830 			continue;
3831 
3832 		path = get_input_path(codec, 0, i);
3833 		if (!path)
3834 			continue;
3835 
3836 		val = look_for_boost_amp(codec, path);
3837 		if (!val)
3838 			continue;
3839 
3840 		/* create a boost control */
3841 		snprintf(boost_label, sizeof(boost_label),
3842 			 "%s Boost Volume", spec->input_labels[idx]);
3843 		if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3844 				 spec->input_label_idxs[idx], val))
3845 			return -ENOMEM;
3846 
3847 		path->ctls[NID_PATH_BOOST_CTL] = val;
3848 	}
3849 	return 0;
3850 }
3851 
3852 /*
3853  * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3854  */
3855 static void parse_digital(struct hda_codec *codec)
3856 {
3857 	struct hda_gen_spec *spec = codec->spec;
3858 	struct nid_path *path;
3859 	int i, nums;
3860 	hda_nid_t dig_nid, pin;
3861 
3862 	/* support multiple SPDIFs; the secondary is set up as a slave */
3863 	nums = 0;
3864 	for (i = 0; i < spec->autocfg.dig_outs; i++) {
3865 		pin = spec->autocfg.dig_out_pins[i];
3866 		dig_nid = look_for_dac(codec, pin, true);
3867 		if (!dig_nid)
3868 			continue;
3869 		path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3870 		if (!path)
3871 			continue;
3872 		print_nid_path(codec, "digout", path);
3873 		path->active = true;
3874 		path->pin_fixed = true; /* no jack detection */
3875 		spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3876 		set_pin_target(codec, pin, PIN_OUT, false);
3877 		if (!nums) {
3878 			spec->multiout.dig_out_nid = dig_nid;
3879 			spec->dig_out_type = spec->autocfg.dig_out_type[0];
3880 		} else {
3881 			spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3882 			if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3883 				break;
3884 			spec->slave_dig_outs[nums - 1] = dig_nid;
3885 		}
3886 		nums++;
3887 	}
3888 
3889 	if (spec->autocfg.dig_in_pin) {
3890 		pin = spec->autocfg.dig_in_pin;
3891 		for_each_hda_codec_node(dig_nid, codec) {
3892 			unsigned int wcaps = get_wcaps(codec, dig_nid);
3893 			if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3894 				continue;
3895 			if (!(wcaps & AC_WCAP_DIGITAL))
3896 				continue;
3897 			path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3898 			if (path) {
3899 				print_nid_path(codec, "digin", path);
3900 				path->active = true;
3901 				path->pin_fixed = true; /* no jack */
3902 				spec->dig_in_nid = dig_nid;
3903 				spec->digin_path = snd_hda_get_path_idx(codec, path);
3904 				set_pin_target(codec, pin, PIN_IN, false);
3905 				break;
3906 			}
3907 		}
3908 	}
3909 }
3910 
3911 
3912 /*
3913  * input MUX handling
3914  */
3915 
3916 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3917 
3918 /* select the given imux item; either unmute exclusively or select the route */
3919 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3920 		      unsigned int idx)
3921 {
3922 	struct hda_gen_spec *spec = codec->spec;
3923 	const struct hda_input_mux *imux;
3924 	struct nid_path *old_path, *path;
3925 
3926 	imux = &spec->input_mux;
3927 	if (!imux->num_items)
3928 		return 0;
3929 
3930 	if (idx >= imux->num_items)
3931 		idx = imux->num_items - 1;
3932 	if (spec->cur_mux[adc_idx] == idx)
3933 		return 0;
3934 
3935 	old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3936 	if (!old_path)
3937 		return 0;
3938 	if (old_path->active)
3939 		snd_hda_activate_path(codec, old_path, false, false);
3940 
3941 	spec->cur_mux[adc_idx] = idx;
3942 
3943 	if (spec->hp_mic)
3944 		update_hp_mic(codec, adc_idx, false);
3945 
3946 	if (spec->dyn_adc_switch)
3947 		dyn_adc_pcm_resetup(codec, idx);
3948 
3949 	path = get_input_path(codec, adc_idx, idx);
3950 	if (!path)
3951 		return 0;
3952 	if (path->active)
3953 		return 0;
3954 	snd_hda_activate_path(codec, path, true, false);
3955 	if (spec->cap_sync_hook)
3956 		spec->cap_sync_hook(codec, NULL, NULL);
3957 	path_power_down_sync(codec, old_path);
3958 	return 1;
3959 }
3960 
3961 /* power up/down widgets in the all paths that match with the given NID
3962  * as terminals (either start- or endpoint)
3963  *
3964  * returns the last changed NID, or zero if unchanged.
3965  */
3966 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
3967 				int pin_state, int stream_state)
3968 {
3969 	struct hda_gen_spec *spec = codec->spec;
3970 	hda_nid_t last, changed = 0;
3971 	struct nid_path *path;
3972 	int n;
3973 
3974 	for (n = 0; n < spec->paths.used; n++) {
3975 		path = snd_array_elem(&spec->paths, n);
3976 		if (!path->depth)
3977 			continue;
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->nid)
4032 		sync_power_state_change(codec,
4033 					set_pin_power_jack(codec, jack->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 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_PREPARE);
5436 	return 0;
5437 }
5438 
5439 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5440 				       struct hda_codec *codec,
5441 				       struct snd_pcm_substream *substream)
5442 {
5443 	struct hda_gen_spec *spec = codec->spec;
5444 	snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5445 	spec->cur_adc = 0;
5446 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLEANUP);
5447 	return 0;
5448 }
5449 
5450 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
5451 	.substreams = 1,
5452 	.channels_min = 2,
5453 	.channels_max = 2,
5454 	.nid = 0, /* fill later */
5455 	.ops = {
5456 		.prepare = dyn_adc_capture_pcm_prepare,
5457 		.cleanup = dyn_adc_capture_pcm_cleanup
5458 	},
5459 };
5460 
5461 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
5462 				 const char *chip_name)
5463 {
5464 	char *p;
5465 
5466 	if (*str)
5467 		return;
5468 	strlcpy(str, chip_name, len);
5469 
5470 	/* drop non-alnum chars after a space */
5471 	for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5472 		if (!isalnum(p[1])) {
5473 			*p = 0;
5474 			break;
5475 		}
5476 	}
5477 	strlcat(str, sfx, len);
5478 }
5479 
5480 /* copy PCM stream info from @default_str, and override non-NULL entries
5481  * from @spec_str and @nid
5482  */
5483 static void setup_pcm_stream(struct hda_pcm_stream *str,
5484 			     const struct hda_pcm_stream *default_str,
5485 			     const struct hda_pcm_stream *spec_str,
5486 			     hda_nid_t nid)
5487 {
5488 	*str = *default_str;
5489 	if (nid)
5490 		str->nid = nid;
5491 	if (spec_str) {
5492 		if (spec_str->substreams)
5493 			str->substreams = spec_str->substreams;
5494 		if (spec_str->channels_min)
5495 			str->channels_min = spec_str->channels_min;
5496 		if (spec_str->channels_max)
5497 			str->channels_max = spec_str->channels_max;
5498 		if (spec_str->rates)
5499 			str->rates = spec_str->rates;
5500 		if (spec_str->formats)
5501 			str->formats = spec_str->formats;
5502 		if (spec_str->maxbps)
5503 			str->maxbps = spec_str->maxbps;
5504 	}
5505 }
5506 
5507 /**
5508  * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5509  * @codec: the HDA codec
5510  *
5511  * Pass this to build_pcms patch_ops.
5512  */
5513 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5514 {
5515 	struct hda_gen_spec *spec = codec->spec;
5516 	struct hda_pcm *info;
5517 	bool have_multi_adcs;
5518 
5519 	if (spec->no_analog)
5520 		goto skip_analog;
5521 
5522 	fill_pcm_stream_name(spec->stream_name_analog,
5523 			     sizeof(spec->stream_name_analog),
5524 			     " Analog", codec->core.chip_name);
5525 	info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5526 	if (!info)
5527 		return -ENOMEM;
5528 	spec->pcm_rec[0] = info;
5529 
5530 	if (spec->multiout.num_dacs > 0) {
5531 		setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5532 				 &pcm_analog_playback,
5533 				 spec->stream_analog_playback,
5534 				 spec->multiout.dac_nids[0]);
5535 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5536 			spec->multiout.max_channels;
5537 		if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5538 		    spec->autocfg.line_outs == 2)
5539 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5540 				snd_pcm_2_1_chmaps;
5541 	}
5542 	if (spec->num_adc_nids) {
5543 		setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5544 				 (spec->dyn_adc_switch ?
5545 				  &dyn_adc_pcm_analog_capture : &pcm_analog_capture),
5546 				 spec->stream_analog_capture,
5547 				 spec->adc_nids[0]);
5548 	}
5549 
5550  skip_analog:
5551 	/* SPDIF for stream index #1 */
5552 	if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5553 		fill_pcm_stream_name(spec->stream_name_digital,
5554 				     sizeof(spec->stream_name_digital),
5555 				     " Digital", codec->core.chip_name);
5556 		info = snd_hda_codec_pcm_new(codec, "%s",
5557 					     spec->stream_name_digital);
5558 		if (!info)
5559 			return -ENOMEM;
5560 		codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5561 		spec->pcm_rec[1] = info;
5562 		if (spec->dig_out_type)
5563 			info->pcm_type = spec->dig_out_type;
5564 		else
5565 			info->pcm_type = HDA_PCM_TYPE_SPDIF;
5566 		if (spec->multiout.dig_out_nid)
5567 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5568 					 &pcm_digital_playback,
5569 					 spec->stream_digital_playback,
5570 					 spec->multiout.dig_out_nid);
5571 		if (spec->dig_in_nid)
5572 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5573 					 &pcm_digital_capture,
5574 					 spec->stream_digital_capture,
5575 					 spec->dig_in_nid);
5576 	}
5577 
5578 	if (spec->no_analog)
5579 		return 0;
5580 
5581 	/* If the use of more than one ADC is requested for the current
5582 	 * model, configure a second analog capture-only PCM.
5583 	 */
5584 	have_multi_adcs = (spec->num_adc_nids > 1) &&
5585 		!spec->dyn_adc_switch && !spec->auto_mic;
5586 	/* Additional Analaog capture for index #2 */
5587 	if (spec->alt_dac_nid || have_multi_adcs) {
5588 		fill_pcm_stream_name(spec->stream_name_alt_analog,
5589 				     sizeof(spec->stream_name_alt_analog),
5590 			     " Alt Analog", codec->core.chip_name);
5591 		info = snd_hda_codec_pcm_new(codec, "%s",
5592 					     spec->stream_name_alt_analog);
5593 		if (!info)
5594 			return -ENOMEM;
5595 		spec->pcm_rec[2] = info;
5596 		if (spec->alt_dac_nid)
5597 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5598 					 &pcm_analog_alt_playback,
5599 					 spec->stream_analog_alt_playback,
5600 					 spec->alt_dac_nid);
5601 		else
5602 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5603 					 &pcm_null_stream, NULL, 0);
5604 		if (have_multi_adcs) {
5605 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5606 					 &pcm_analog_alt_capture,
5607 					 spec->stream_analog_alt_capture,
5608 					 spec->adc_nids[1]);
5609 			info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5610 				spec->num_adc_nids - 1;
5611 		} else {
5612 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5613 					 &pcm_null_stream, NULL, 0);
5614 		}
5615 	}
5616 
5617 	return 0;
5618 }
5619 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5620 
5621 
5622 /*
5623  * Standard auto-parser initializations
5624  */
5625 
5626 /* configure the given path as a proper output */
5627 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5628 {
5629 	struct nid_path *path;
5630 	hda_nid_t pin;
5631 
5632 	path = snd_hda_get_path_from_idx(codec, path_idx);
5633 	if (!path || !path->depth)
5634 		return;
5635 	pin = path->path[path->depth - 1];
5636 	restore_pin_ctl(codec, pin);
5637 	snd_hda_activate_path(codec, path, path->active,
5638 			      aamix_default(codec->spec));
5639 	set_pin_eapd(codec, pin, path->active);
5640 }
5641 
5642 /* initialize primary output paths */
5643 static void init_multi_out(struct hda_codec *codec)
5644 {
5645 	struct hda_gen_spec *spec = codec->spec;
5646 	int i;
5647 
5648 	for (i = 0; i < spec->autocfg.line_outs; i++)
5649 		set_output_and_unmute(codec, spec->out_paths[i]);
5650 }
5651 
5652 
5653 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5654 {
5655 	int i;
5656 
5657 	for (i = 0; i < num_outs; i++)
5658 		set_output_and_unmute(codec, paths[i]);
5659 }
5660 
5661 /* initialize hp and speaker paths */
5662 static void init_extra_out(struct hda_codec *codec)
5663 {
5664 	struct hda_gen_spec *spec = codec->spec;
5665 
5666 	if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5667 		__init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5668 	if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5669 		__init_extra_out(codec, spec->autocfg.speaker_outs,
5670 				 spec->speaker_paths);
5671 }
5672 
5673 /* initialize multi-io paths */
5674 static void init_multi_io(struct hda_codec *codec)
5675 {
5676 	struct hda_gen_spec *spec = codec->spec;
5677 	int i;
5678 
5679 	for (i = 0; i < spec->multi_ios; i++) {
5680 		hda_nid_t pin = spec->multi_io[i].pin;
5681 		struct nid_path *path;
5682 		path = get_multiio_path(codec, i);
5683 		if (!path)
5684 			continue;
5685 		if (!spec->multi_io[i].ctl_in)
5686 			spec->multi_io[i].ctl_in =
5687 				snd_hda_codec_get_pin_target(codec, pin);
5688 		snd_hda_activate_path(codec, path, path->active,
5689 				      aamix_default(spec));
5690 	}
5691 }
5692 
5693 static void init_aamix_paths(struct hda_codec *codec)
5694 {
5695 	struct hda_gen_spec *spec = codec->spec;
5696 
5697 	if (!spec->have_aamix_ctl)
5698 		return;
5699 	if (!has_aamix_out_paths(spec))
5700 		return;
5701 	update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5702 			   spec->aamix_out_paths[0],
5703 			   spec->autocfg.line_out_type);
5704 	update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5705 			   spec->aamix_out_paths[1],
5706 			   AUTO_PIN_HP_OUT);
5707 	update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5708 			   spec->aamix_out_paths[2],
5709 			   AUTO_PIN_SPEAKER_OUT);
5710 }
5711 
5712 /* set up input pins and loopback paths */
5713 static void init_analog_input(struct hda_codec *codec)
5714 {
5715 	struct hda_gen_spec *spec = codec->spec;
5716 	struct auto_pin_cfg *cfg = &spec->autocfg;
5717 	int i;
5718 
5719 	for (i = 0; i < cfg->num_inputs; i++) {
5720 		hda_nid_t nid = cfg->inputs[i].pin;
5721 		if (is_input_pin(codec, nid))
5722 			restore_pin_ctl(codec, nid);
5723 
5724 		/* init loopback inputs */
5725 		if (spec->mixer_nid) {
5726 			resume_path_from_idx(codec, spec->loopback_paths[i]);
5727 			resume_path_from_idx(codec, spec->loopback_merge_path);
5728 		}
5729 	}
5730 }
5731 
5732 /* initialize ADC paths */
5733 static void init_input_src(struct hda_codec *codec)
5734 {
5735 	struct hda_gen_spec *spec = codec->spec;
5736 	struct hda_input_mux *imux = &spec->input_mux;
5737 	struct nid_path *path;
5738 	int i, c, nums;
5739 
5740 	if (spec->dyn_adc_switch)
5741 		nums = 1;
5742 	else
5743 		nums = spec->num_adc_nids;
5744 
5745 	for (c = 0; c < nums; c++) {
5746 		for (i = 0; i < imux->num_items; i++) {
5747 			path = get_input_path(codec, c, i);
5748 			if (path) {
5749 				bool active = path->active;
5750 				if (i == spec->cur_mux[c])
5751 					active = true;
5752 				snd_hda_activate_path(codec, path, active, false);
5753 			}
5754 		}
5755 		if (spec->hp_mic)
5756 			update_hp_mic(codec, c, true);
5757 	}
5758 
5759 	if (spec->cap_sync_hook)
5760 		spec->cap_sync_hook(codec, NULL, NULL);
5761 }
5762 
5763 /* set right pin controls for digital I/O */
5764 static void init_digital(struct hda_codec *codec)
5765 {
5766 	struct hda_gen_spec *spec = codec->spec;
5767 	int i;
5768 	hda_nid_t pin;
5769 
5770 	for (i = 0; i < spec->autocfg.dig_outs; i++)
5771 		set_output_and_unmute(codec, spec->digout_paths[i]);
5772 	pin = spec->autocfg.dig_in_pin;
5773 	if (pin) {
5774 		restore_pin_ctl(codec, pin);
5775 		resume_path_from_idx(codec, spec->digin_path);
5776 	}
5777 }
5778 
5779 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5780  * invalid unsol tags by some reason
5781  */
5782 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5783 {
5784 	int i;
5785 
5786 	for (i = 0; i < codec->init_pins.used; i++) {
5787 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5788 		hda_nid_t nid = pin->nid;
5789 		if (is_jack_detectable(codec, nid) &&
5790 		    !snd_hda_jack_tbl_get(codec, nid))
5791 			snd_hda_codec_update_cache(codec, nid, 0,
5792 					AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5793 	}
5794 }
5795 
5796 /**
5797  * snd_hda_gen_init - initialize the generic spec
5798  * @codec: the HDA codec
5799  *
5800  * This can be put as patch_ops init function.
5801  */
5802 int snd_hda_gen_init(struct hda_codec *codec)
5803 {
5804 	struct hda_gen_spec *spec = codec->spec;
5805 
5806 	if (spec->init_hook)
5807 		spec->init_hook(codec);
5808 
5809 	snd_hda_apply_verbs(codec);
5810 
5811 	init_multi_out(codec);
5812 	init_extra_out(codec);
5813 	init_multi_io(codec);
5814 	init_aamix_paths(codec);
5815 	init_analog_input(codec);
5816 	init_input_src(codec);
5817 	init_digital(codec);
5818 
5819 	clear_unsol_on_unused_pins(codec);
5820 
5821 	sync_all_pin_power_ctls(codec);
5822 
5823 	/* call init functions of standard auto-mute helpers */
5824 	update_automute_all(codec);
5825 
5826 	regcache_sync(codec->core.regmap);
5827 
5828 	if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5829 		snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5830 
5831 	hda_call_check_power_status(codec, 0x01);
5832 	return 0;
5833 }
5834 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5835 
5836 /**
5837  * snd_hda_gen_free - free the generic spec
5838  * @codec: the HDA codec
5839  *
5840  * This can be put as patch_ops free function.
5841  */
5842 void snd_hda_gen_free(struct hda_codec *codec)
5843 {
5844 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5845 	snd_hda_gen_spec_free(codec->spec);
5846 	kfree(codec->spec);
5847 	codec->spec = NULL;
5848 }
5849 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
5850 
5851 #ifdef CONFIG_PM
5852 /**
5853  * snd_hda_gen_check_power_status - check the loopback power save state
5854  * @codec: the HDA codec
5855  * @nid: NID to inspect
5856  *
5857  * This can be put as patch_ops check_power_status function.
5858  */
5859 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5860 {
5861 	struct hda_gen_spec *spec = codec->spec;
5862 	return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5863 }
5864 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
5865 #endif
5866 
5867 
5868 /*
5869  * the generic codec support
5870  */
5871 
5872 static const struct hda_codec_ops generic_patch_ops = {
5873 	.build_controls = snd_hda_gen_build_controls,
5874 	.build_pcms = snd_hda_gen_build_pcms,
5875 	.init = snd_hda_gen_init,
5876 	.free = snd_hda_gen_free,
5877 	.unsol_event = snd_hda_jack_unsol_event,
5878 #ifdef CONFIG_PM
5879 	.check_power_status = snd_hda_gen_check_power_status,
5880 #endif
5881 };
5882 
5883 /*
5884  * snd_hda_parse_generic_codec - Generic codec parser
5885  * @codec: the HDA codec
5886  */
5887 static int snd_hda_parse_generic_codec(struct hda_codec *codec)
5888 {
5889 	struct hda_gen_spec *spec;
5890 	int err;
5891 
5892 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5893 	if (!spec)
5894 		return -ENOMEM;
5895 	snd_hda_gen_spec_init(spec);
5896 	codec->spec = spec;
5897 
5898 	err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5899 	if (err < 0)
5900 		return err;
5901 
5902 	err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5903 	if (err < 0)
5904 		goto error;
5905 
5906 	codec->patch_ops = generic_patch_ops;
5907 	return 0;
5908 
5909 error:
5910 	snd_hda_gen_free(codec);
5911 	return err;
5912 }
5913 
5914 static const struct hda_device_id snd_hda_id_generic[] = {
5915 	HDA_CODEC_ENTRY(HDA_CODEC_ID_GENERIC, "Generic", snd_hda_parse_generic_codec),
5916 	{} /* terminator */
5917 };
5918 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_generic);
5919 
5920 static struct hda_codec_driver generic_driver = {
5921 	.id = snd_hda_id_generic,
5922 };
5923 
5924 module_hda_codec_driver(generic_driver);
5925 
5926 MODULE_LICENSE("GPL");
5927 MODULE_DESCRIPTION("Generic HD-audio codec parser");
5928