xref: /openbmc/linux/sound/pci/hda/hda_generic.c (revision 3805e6a1)
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->path[0] == nid ||
3977 		    path->path[path->depth - 1] == nid) {
3978 			bool pin_old = path->pin_enabled;
3979 			bool stream_old = path->stream_enabled;
3980 
3981 			if (pin_state >= 0)
3982 				path->pin_enabled = pin_state;
3983 			if (stream_state >= 0)
3984 				path->stream_enabled = stream_state;
3985 			if ((!path->pin_fixed && path->pin_enabled != pin_old)
3986 			    || path->stream_enabled != stream_old) {
3987 				last = path_power_update(codec, path, true);
3988 				if (last)
3989 					changed = last;
3990 			}
3991 		}
3992 	}
3993 	return changed;
3994 }
3995 
3996 /* check the jack status for power control */
3997 static bool detect_pin_state(struct hda_codec *codec, hda_nid_t pin)
3998 {
3999 	if (!is_jack_detectable(codec, pin))
4000 		return true;
4001 	return snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
4002 }
4003 
4004 /* power up/down the paths of the given pin according to the jack state;
4005  * power = 0/1 : only power up/down if it matches with the jack state,
4006  *       < 0   : force power up/down to follow the jack sate
4007  *
4008  * returns the last changed NID, or zero if unchanged.
4009  */
4010 static hda_nid_t set_pin_power_jack(struct hda_codec *codec, hda_nid_t pin,
4011 				    int power)
4012 {
4013 	bool on;
4014 
4015 	if (!codec->power_save_node)
4016 		return 0;
4017 
4018 	on = detect_pin_state(codec, pin);
4019 
4020 	if (power >= 0 && on != power)
4021 		return 0;
4022 	return set_path_power(codec, pin, on, -1);
4023 }
4024 
4025 static void pin_power_callback(struct hda_codec *codec,
4026 			       struct hda_jack_callback *jack,
4027 			       bool on)
4028 {
4029 	if (jack && jack->nid)
4030 		sync_power_state_change(codec,
4031 					set_pin_power_jack(codec, jack->nid, on));
4032 }
4033 
4034 /* callback only doing power up -- called at first */
4035 static void pin_power_up_callback(struct hda_codec *codec,
4036 				  struct hda_jack_callback *jack)
4037 {
4038 	pin_power_callback(codec, jack, true);
4039 }
4040 
4041 /* callback only doing power down -- called at last */
4042 static void pin_power_down_callback(struct hda_codec *codec,
4043 				    struct hda_jack_callback *jack)
4044 {
4045 	pin_power_callback(codec, jack, false);
4046 }
4047 
4048 /* set up the power up/down callbacks */
4049 static void add_pin_power_ctls(struct hda_codec *codec, int num_pins,
4050 			       const hda_nid_t *pins, bool on)
4051 {
4052 	int i;
4053 	hda_jack_callback_fn cb =
4054 		on ? pin_power_up_callback : pin_power_down_callback;
4055 
4056 	for (i = 0; i < num_pins && pins[i]; i++) {
4057 		if (is_jack_detectable(codec, pins[i]))
4058 			snd_hda_jack_detect_enable_callback(codec, pins[i], cb);
4059 		else
4060 			set_path_power(codec, pins[i], true, -1);
4061 	}
4062 }
4063 
4064 /* enabled power callback to each available I/O pin with jack detections;
4065  * the digital I/O pins are excluded because of the unreliable detectsion
4066  */
4067 static void add_all_pin_power_ctls(struct hda_codec *codec, bool on)
4068 {
4069 	struct hda_gen_spec *spec = codec->spec;
4070 	struct auto_pin_cfg *cfg = &spec->autocfg;
4071 	int i;
4072 
4073 	if (!codec->power_save_node)
4074 		return;
4075 	add_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins, on);
4076 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4077 		add_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins, on);
4078 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4079 		add_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins, on);
4080 	for (i = 0; i < cfg->num_inputs; i++)
4081 		add_pin_power_ctls(codec, 1, &cfg->inputs[i].pin, on);
4082 }
4083 
4084 /* sync path power up/down with the jack states of given pins */
4085 static void sync_pin_power_ctls(struct hda_codec *codec, int num_pins,
4086 				const hda_nid_t *pins)
4087 {
4088 	int i;
4089 
4090 	for (i = 0; i < num_pins && pins[i]; i++)
4091 		if (is_jack_detectable(codec, pins[i]))
4092 			set_pin_power_jack(codec, pins[i], -1);
4093 }
4094 
4095 /* sync path power up/down with pins; called at init and resume */
4096 static void sync_all_pin_power_ctls(struct hda_codec *codec)
4097 {
4098 	struct hda_gen_spec *spec = codec->spec;
4099 	struct auto_pin_cfg *cfg = &spec->autocfg;
4100 	int i;
4101 
4102 	if (!codec->power_save_node)
4103 		return;
4104 	sync_pin_power_ctls(codec, cfg->line_outs, cfg->line_out_pins);
4105 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4106 		sync_pin_power_ctls(codec, cfg->hp_outs, cfg->hp_pins);
4107 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4108 		sync_pin_power_ctls(codec, cfg->speaker_outs, cfg->speaker_pins);
4109 	for (i = 0; i < cfg->num_inputs; i++)
4110 		sync_pin_power_ctls(codec, 1, &cfg->inputs[i].pin);
4111 }
4112 
4113 /* add fake paths if not present yet */
4114 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid,
4115 			   int num_pins, const hda_nid_t *pins)
4116 {
4117 	struct hda_gen_spec *spec = codec->spec;
4118 	struct nid_path *path;
4119 	int i;
4120 
4121 	for (i = 0; i < num_pins; i++) {
4122 		if (!pins[i])
4123 			break;
4124 		if (get_nid_path(codec, nid, pins[i], 0))
4125 			continue;
4126 		path = snd_array_new(&spec->paths);
4127 		if (!path)
4128 			return -ENOMEM;
4129 		memset(path, 0, sizeof(*path));
4130 		path->depth = 2;
4131 		path->path[0] = nid;
4132 		path->path[1] = pins[i];
4133 		path->active = true;
4134 	}
4135 	return 0;
4136 }
4137 
4138 /* create fake paths to all outputs from beep */
4139 static int add_fake_beep_paths(struct hda_codec *codec)
4140 {
4141 	struct hda_gen_spec *spec = codec->spec;
4142 	struct auto_pin_cfg *cfg = &spec->autocfg;
4143 	hda_nid_t nid = spec->beep_nid;
4144 	int err;
4145 
4146 	if (!codec->power_save_node || !nid)
4147 		return 0;
4148 	err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins);
4149 	if (err < 0)
4150 		return err;
4151 	if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4152 		err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins);
4153 		if (err < 0)
4154 			return err;
4155 	}
4156 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4157 		err = add_fake_paths(codec, nid, cfg->speaker_outs,
4158 				     cfg->speaker_pins);
4159 		if (err < 0)
4160 			return err;
4161 	}
4162 	return 0;
4163 }
4164 
4165 /* power up/down beep widget and its output paths */
4166 static void beep_power_hook(struct hda_beep *beep, bool on)
4167 {
4168 	set_path_power(beep->codec, beep->nid, -1, on);
4169 }
4170 
4171 /**
4172  * snd_hda_gen_fix_pin_power - Fix the power of the given pin widget to D0
4173  * @codec: the HDA codec
4174  * @pin: NID of pin to fix
4175  */
4176 int snd_hda_gen_fix_pin_power(struct hda_codec *codec, hda_nid_t pin)
4177 {
4178 	struct hda_gen_spec *spec = codec->spec;
4179 	struct nid_path *path;
4180 
4181 	path = snd_array_new(&spec->paths);
4182 	if (!path)
4183 		return -ENOMEM;
4184 	memset(path, 0, sizeof(*path));
4185 	path->depth = 1;
4186 	path->path[0] = pin;
4187 	path->active = true;
4188 	path->pin_fixed = true;
4189 	path->stream_enabled = true;
4190 	return 0;
4191 }
4192 EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power);
4193 
4194 /*
4195  * Jack detections for HP auto-mute and mic-switch
4196  */
4197 
4198 /* check each pin in the given array; returns true if any of them is plugged */
4199 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
4200 {
4201 	int i;
4202 	bool present = false;
4203 
4204 	for (i = 0; i < num_pins; i++) {
4205 		hda_nid_t nid = pins[i];
4206 		if (!nid)
4207 			break;
4208 		/* don't detect pins retasked as inputs */
4209 		if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
4210 			continue;
4211 		if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
4212 			present = true;
4213 	}
4214 	return present;
4215 }
4216 
4217 /* standard HP/line-out auto-mute helper */
4218 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
4219 			int *paths, bool mute)
4220 {
4221 	struct hda_gen_spec *spec = codec->spec;
4222 	int i;
4223 
4224 	for (i = 0; i < num_pins; i++) {
4225 		hda_nid_t nid = pins[i];
4226 		unsigned int val, oldval;
4227 		if (!nid)
4228 			break;
4229 
4230 		oldval = snd_hda_codec_get_pin_target(codec, nid);
4231 		if (oldval & PIN_IN)
4232 			continue; /* no mute for inputs */
4233 
4234 		if (spec->auto_mute_via_amp) {
4235 			struct nid_path *path;
4236 			hda_nid_t mute_nid;
4237 
4238 			path = snd_hda_get_path_from_idx(codec, paths[i]);
4239 			if (!path)
4240 				continue;
4241 			mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
4242 			if (!mute_nid)
4243 				continue;
4244 			if (mute)
4245 				spec->mute_bits |= (1ULL << mute_nid);
4246 			else
4247 				spec->mute_bits &= ~(1ULL << mute_nid);
4248 			continue;
4249 		} else {
4250 			/* don't reset VREF value in case it's controlling
4251 			 * the amp (see alc861_fixup_asus_amp_vref_0f())
4252 			 */
4253 			if (spec->keep_vref_in_automute)
4254 				val = oldval & ~PIN_HP;
4255 			else
4256 				val = 0;
4257 			if (!mute)
4258 				val |= oldval;
4259 			/* here we call update_pin_ctl() so that the pinctl is
4260 			 * changed without changing the pinctl target value;
4261 			 * the original target value will be still referred at
4262 			 * the init / resume again
4263 			 */
4264 			update_pin_ctl(codec, nid, val);
4265 		}
4266 
4267 		set_pin_eapd(codec, nid, !mute);
4268 		if (codec->power_save_node) {
4269 			bool on = !mute;
4270 			if (on)
4271 				on = detect_pin_state(codec, nid);
4272 			set_path_power(codec, nid, on, -1);
4273 		}
4274 	}
4275 }
4276 
4277 /**
4278  * snd_hda_gen_update_outputs - Toggle outputs muting
4279  * @codec: the HDA codec
4280  *
4281  * Update the mute status of all outputs based on the current jack states.
4282  */
4283 void snd_hda_gen_update_outputs(struct hda_codec *codec)
4284 {
4285 	struct hda_gen_spec *spec = codec->spec;
4286 	int *paths;
4287 	int on;
4288 
4289 	/* Control HP pins/amps depending on master_mute state;
4290 	 * in general, HP pins/amps control should be enabled in all cases,
4291 	 * but currently set only for master_mute, just to be safe
4292 	 */
4293 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4294 		paths = spec->out_paths;
4295 	else
4296 		paths = spec->hp_paths;
4297 	do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4298 		    spec->autocfg.hp_pins, paths, spec->master_mute);
4299 
4300 	if (!spec->automute_speaker)
4301 		on = 0;
4302 	else
4303 		on = spec->hp_jack_present | spec->line_jack_present;
4304 	on |= spec->master_mute;
4305 	spec->speaker_muted = on;
4306 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4307 		paths = spec->out_paths;
4308 	else
4309 		paths = spec->speaker_paths;
4310 	do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4311 		    spec->autocfg.speaker_pins, paths, on);
4312 
4313 	/* toggle line-out mutes if needed, too */
4314 	/* if LO is a copy of either HP or Speaker, don't need to handle it */
4315 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4316 	    spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4317 		return;
4318 	if (!spec->automute_lo)
4319 		on = 0;
4320 	else
4321 		on = spec->hp_jack_present;
4322 	on |= spec->master_mute;
4323 	spec->line_out_muted = on;
4324 	paths = spec->out_paths;
4325 	do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4326 		    spec->autocfg.line_out_pins, paths, on);
4327 }
4328 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs);
4329 
4330 static void call_update_outputs(struct hda_codec *codec)
4331 {
4332 	struct hda_gen_spec *spec = codec->spec;
4333 	if (spec->automute_hook)
4334 		spec->automute_hook(codec);
4335 	else
4336 		snd_hda_gen_update_outputs(codec);
4337 
4338 	/* sync the whole vmaster slaves to reflect the new auto-mute status */
4339 	if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4340 		snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4341 }
4342 
4343 /**
4344  * snd_hda_gen_hp_automute - standard HP-automute helper
4345  * @codec: the HDA codec
4346  * @jack: jack object, NULL for the whole
4347  */
4348 void snd_hda_gen_hp_automute(struct hda_codec *codec,
4349 			     struct hda_jack_callback *jack)
4350 {
4351 	struct hda_gen_spec *spec = codec->spec;
4352 	hda_nid_t *pins = spec->autocfg.hp_pins;
4353 	int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4354 
4355 	/* No detection for the first HP jack during indep-HP mode */
4356 	if (spec->indep_hp_enabled) {
4357 		pins++;
4358 		num_pins--;
4359 	}
4360 
4361 	spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4362 	if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4363 		return;
4364 	call_update_outputs(codec);
4365 }
4366 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute);
4367 
4368 /**
4369  * snd_hda_gen_line_automute - standard line-out-automute helper
4370  * @codec: the HDA codec
4371  * @jack: jack object, NULL for the whole
4372  */
4373 void snd_hda_gen_line_automute(struct hda_codec *codec,
4374 			       struct hda_jack_callback *jack)
4375 {
4376 	struct hda_gen_spec *spec = codec->spec;
4377 
4378 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4379 		return;
4380 	/* check LO jack only when it's different from HP */
4381 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4382 		return;
4383 
4384 	spec->line_jack_present =
4385 		detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4386 			     spec->autocfg.line_out_pins);
4387 	if (!spec->automute_speaker || !spec->detect_lo)
4388 		return;
4389 	call_update_outputs(codec);
4390 }
4391 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute);
4392 
4393 /**
4394  * snd_hda_gen_mic_autoswitch - standard mic auto-switch helper
4395  * @codec: the HDA codec
4396  * @jack: jack object, NULL for the whole
4397  */
4398 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
4399 				struct hda_jack_callback *jack)
4400 {
4401 	struct hda_gen_spec *spec = codec->spec;
4402 	int i;
4403 
4404 	if (!spec->auto_mic)
4405 		return;
4406 
4407 	for (i = spec->am_num_entries - 1; i > 0; i--) {
4408 		hda_nid_t pin = spec->am_entry[i].pin;
4409 		/* don't detect pins retasked as outputs */
4410 		if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
4411 			continue;
4412 		if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
4413 			mux_select(codec, 0, spec->am_entry[i].idx);
4414 			return;
4415 		}
4416 	}
4417 	mux_select(codec, 0, spec->am_entry[0].idx);
4418 }
4419 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch);
4420 
4421 /* call appropriate hooks */
4422 static void call_hp_automute(struct hda_codec *codec,
4423 			     struct hda_jack_callback *jack)
4424 {
4425 	struct hda_gen_spec *spec = codec->spec;
4426 	if (spec->hp_automute_hook)
4427 		spec->hp_automute_hook(codec, jack);
4428 	else
4429 		snd_hda_gen_hp_automute(codec, jack);
4430 }
4431 
4432 static void call_line_automute(struct hda_codec *codec,
4433 			       struct hda_jack_callback *jack)
4434 {
4435 	struct hda_gen_spec *spec = codec->spec;
4436 	if (spec->line_automute_hook)
4437 		spec->line_automute_hook(codec, jack);
4438 	else
4439 		snd_hda_gen_line_automute(codec, jack);
4440 }
4441 
4442 static void call_mic_autoswitch(struct hda_codec *codec,
4443 				struct hda_jack_callback *jack)
4444 {
4445 	struct hda_gen_spec *spec = codec->spec;
4446 	if (spec->mic_autoswitch_hook)
4447 		spec->mic_autoswitch_hook(codec, jack);
4448 	else
4449 		snd_hda_gen_mic_autoswitch(codec, jack);
4450 }
4451 
4452 /* update jack retasking */
4453 static void update_automute_all(struct hda_codec *codec)
4454 {
4455 	call_hp_automute(codec, NULL);
4456 	call_line_automute(codec, NULL);
4457 	call_mic_autoswitch(codec, NULL);
4458 }
4459 
4460 /*
4461  * Auto-Mute mode mixer enum support
4462  */
4463 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4464 			      struct snd_ctl_elem_info *uinfo)
4465 {
4466 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4467 	struct hda_gen_spec *spec = codec->spec;
4468 	static const char * const texts3[] = {
4469 		"Disabled", "Speaker Only", "Line Out+Speaker"
4470 	};
4471 
4472 	if (spec->automute_speaker_possible && spec->automute_lo_possible)
4473 		return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4474 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4475 }
4476 
4477 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4478 			     struct snd_ctl_elem_value *ucontrol)
4479 {
4480 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4481 	struct hda_gen_spec *spec = codec->spec;
4482 	unsigned int val = 0;
4483 	if (spec->automute_speaker)
4484 		val++;
4485 	if (spec->automute_lo)
4486 		val++;
4487 
4488 	ucontrol->value.enumerated.item[0] = val;
4489 	return 0;
4490 }
4491 
4492 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4493 			     struct snd_ctl_elem_value *ucontrol)
4494 {
4495 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4496 	struct hda_gen_spec *spec = codec->spec;
4497 
4498 	switch (ucontrol->value.enumerated.item[0]) {
4499 	case 0:
4500 		if (!spec->automute_speaker && !spec->automute_lo)
4501 			return 0;
4502 		spec->automute_speaker = 0;
4503 		spec->automute_lo = 0;
4504 		break;
4505 	case 1:
4506 		if (spec->automute_speaker_possible) {
4507 			if (!spec->automute_lo && spec->automute_speaker)
4508 				return 0;
4509 			spec->automute_speaker = 1;
4510 			spec->automute_lo = 0;
4511 		} else if (spec->automute_lo_possible) {
4512 			if (spec->automute_lo)
4513 				return 0;
4514 			spec->automute_lo = 1;
4515 		} else
4516 			return -EINVAL;
4517 		break;
4518 	case 2:
4519 		if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4520 			return -EINVAL;
4521 		if (spec->automute_speaker && spec->automute_lo)
4522 			return 0;
4523 		spec->automute_speaker = 1;
4524 		spec->automute_lo = 1;
4525 		break;
4526 	default:
4527 		return -EINVAL;
4528 	}
4529 	call_update_outputs(codec);
4530 	return 1;
4531 }
4532 
4533 static const struct snd_kcontrol_new automute_mode_enum = {
4534 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4535 	.name = "Auto-Mute Mode",
4536 	.info = automute_mode_info,
4537 	.get = automute_mode_get,
4538 	.put = automute_mode_put,
4539 };
4540 
4541 static int add_automute_mode_enum(struct hda_codec *codec)
4542 {
4543 	struct hda_gen_spec *spec = codec->spec;
4544 
4545 	if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4546 		return -ENOMEM;
4547 	return 0;
4548 }
4549 
4550 /*
4551  * Check the availability of HP/line-out auto-mute;
4552  * Set up appropriately if really supported
4553  */
4554 static int check_auto_mute_availability(struct hda_codec *codec)
4555 {
4556 	struct hda_gen_spec *spec = codec->spec;
4557 	struct auto_pin_cfg *cfg = &spec->autocfg;
4558 	int present = 0;
4559 	int i, err;
4560 
4561 	if (spec->suppress_auto_mute)
4562 		return 0;
4563 
4564 	if (cfg->hp_pins[0])
4565 		present++;
4566 	if (cfg->line_out_pins[0])
4567 		present++;
4568 	if (cfg->speaker_pins[0])
4569 		present++;
4570 	if (present < 2) /* need two different output types */
4571 		return 0;
4572 
4573 	if (!cfg->speaker_pins[0] &&
4574 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4575 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4576 		       sizeof(cfg->speaker_pins));
4577 		cfg->speaker_outs = cfg->line_outs;
4578 	}
4579 
4580 	if (!cfg->hp_pins[0] &&
4581 	    cfg->line_out_type == AUTO_PIN_HP_OUT) {
4582 		memcpy(cfg->hp_pins, cfg->line_out_pins,
4583 		       sizeof(cfg->hp_pins));
4584 		cfg->hp_outs = cfg->line_outs;
4585 	}
4586 
4587 	for (i = 0; i < cfg->hp_outs; i++) {
4588 		hda_nid_t nid = cfg->hp_pins[i];
4589 		if (!is_jack_detectable(codec, nid))
4590 			continue;
4591 		codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid);
4592 		snd_hda_jack_detect_enable_callback(codec, nid,
4593 						    call_hp_automute);
4594 		spec->detect_hp = 1;
4595 	}
4596 
4597 	if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4598 		if (cfg->speaker_outs)
4599 			for (i = 0; i < cfg->line_outs; i++) {
4600 				hda_nid_t nid = cfg->line_out_pins[i];
4601 				if (!is_jack_detectable(codec, nid))
4602 					continue;
4603 				codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid);
4604 				snd_hda_jack_detect_enable_callback(codec, nid,
4605 								    call_line_automute);
4606 				spec->detect_lo = 1;
4607 			}
4608 		spec->automute_lo_possible = spec->detect_hp;
4609 	}
4610 
4611 	spec->automute_speaker_possible = cfg->speaker_outs &&
4612 		(spec->detect_hp || spec->detect_lo);
4613 
4614 	spec->automute_lo = spec->automute_lo_possible;
4615 	spec->automute_speaker = spec->automute_speaker_possible;
4616 
4617 	if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4618 		/* create a control for automute mode */
4619 		err = add_automute_mode_enum(codec);
4620 		if (err < 0)
4621 			return err;
4622 	}
4623 	return 0;
4624 }
4625 
4626 /* check whether all auto-mic pins are valid; setup indices if OK */
4627 static bool auto_mic_check_imux(struct hda_codec *codec)
4628 {
4629 	struct hda_gen_spec *spec = codec->spec;
4630 	const struct hda_input_mux *imux;
4631 	int i;
4632 
4633 	imux = &spec->input_mux;
4634 	for (i = 0; i < spec->am_num_entries; i++) {
4635 		spec->am_entry[i].idx =
4636 			find_idx_in_nid_list(spec->am_entry[i].pin,
4637 					     spec->imux_pins, imux->num_items);
4638 		if (spec->am_entry[i].idx < 0)
4639 			return false; /* no corresponding imux */
4640 	}
4641 
4642 	/* we don't need the jack detection for the first pin */
4643 	for (i = 1; i < spec->am_num_entries; i++)
4644 		snd_hda_jack_detect_enable_callback(codec,
4645 						    spec->am_entry[i].pin,
4646 						    call_mic_autoswitch);
4647 	return true;
4648 }
4649 
4650 static int compare_attr(const void *ap, const void *bp)
4651 {
4652 	const struct automic_entry *a = ap;
4653 	const struct automic_entry *b = bp;
4654 	return (int)(a->attr - b->attr);
4655 }
4656 
4657 /*
4658  * Check the availability of auto-mic switch;
4659  * Set up if really supported
4660  */
4661 static int check_auto_mic_availability(struct hda_codec *codec)
4662 {
4663 	struct hda_gen_spec *spec = codec->spec;
4664 	struct auto_pin_cfg *cfg = &spec->autocfg;
4665 	unsigned int types;
4666 	int i, num_pins;
4667 
4668 	if (spec->suppress_auto_mic)
4669 		return 0;
4670 
4671 	types = 0;
4672 	num_pins = 0;
4673 	for (i = 0; i < cfg->num_inputs; i++) {
4674 		hda_nid_t nid = cfg->inputs[i].pin;
4675 		unsigned int attr;
4676 		attr = snd_hda_codec_get_pincfg(codec, nid);
4677 		attr = snd_hda_get_input_pin_attr(attr);
4678 		if (types & (1 << attr))
4679 			return 0; /* already occupied */
4680 		switch (attr) {
4681 		case INPUT_PIN_ATTR_INT:
4682 			if (cfg->inputs[i].type != AUTO_PIN_MIC)
4683 				return 0; /* invalid type */
4684 			break;
4685 		case INPUT_PIN_ATTR_UNUSED:
4686 			return 0; /* invalid entry */
4687 		default:
4688 			if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4689 				return 0; /* invalid type */
4690 			if (!spec->line_in_auto_switch &&
4691 			    cfg->inputs[i].type != AUTO_PIN_MIC)
4692 				return 0; /* only mic is allowed */
4693 			if (!is_jack_detectable(codec, nid))
4694 				return 0; /* no unsol support */
4695 			break;
4696 		}
4697 		if (num_pins >= MAX_AUTO_MIC_PINS)
4698 			return 0;
4699 		types |= (1 << attr);
4700 		spec->am_entry[num_pins].pin = nid;
4701 		spec->am_entry[num_pins].attr = attr;
4702 		num_pins++;
4703 	}
4704 
4705 	if (num_pins < 2)
4706 		return 0;
4707 
4708 	spec->am_num_entries = num_pins;
4709 	/* sort the am_entry in the order of attr so that the pin with a
4710 	 * higher attr will be selected when the jack is plugged.
4711 	 */
4712 	sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4713 	     compare_attr, NULL);
4714 
4715 	if (!auto_mic_check_imux(codec))
4716 		return 0;
4717 
4718 	spec->auto_mic = 1;
4719 	spec->num_adc_nids = 1;
4720 	spec->cur_mux[0] = spec->am_entry[0].idx;
4721 	codec_dbg(codec, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4722 		    spec->am_entry[0].pin,
4723 		    spec->am_entry[1].pin,
4724 		    spec->am_entry[2].pin);
4725 
4726 	return 0;
4727 }
4728 
4729 /**
4730  * snd_hda_gen_path_power_filter - power_filter hook to make inactive widgets
4731  * into power down
4732  * @codec: the HDA codec
4733  * @nid: NID to evalute
4734  * @power_state: target power state
4735  */
4736 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4737 						  hda_nid_t nid,
4738 						  unsigned int power_state)
4739 {
4740 	struct hda_gen_spec *spec = codec->spec;
4741 
4742 	if (!spec->power_down_unused && !codec->power_save_node)
4743 		return power_state;
4744 	if (power_state != AC_PWRST_D0 || nid == codec->core.afg)
4745 		return power_state;
4746 	if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4747 		return power_state;
4748 	if (is_active_nid_for_any(codec, nid))
4749 		return power_state;
4750 	return AC_PWRST_D3;
4751 }
4752 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter);
4753 
4754 /* mute all aamix inputs initially; parse up to the first leaves */
4755 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4756 {
4757 	int i, nums;
4758 	const hda_nid_t *conn;
4759 	bool has_amp;
4760 
4761 	nums = snd_hda_get_conn_list(codec, mix, &conn);
4762 	has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4763 	for (i = 0; i < nums; i++) {
4764 		if (has_amp)
4765 			update_amp(codec, mix, HDA_INPUT, i,
4766 				   0xff, HDA_AMP_MUTE);
4767 		else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4768 			update_amp(codec, conn[i], HDA_OUTPUT, 0,
4769 				   0xff, HDA_AMP_MUTE);
4770 	}
4771 }
4772 
4773 /**
4774  * snd_hda_gen_stream_pm - Stream power management callback
4775  * @codec: the HDA codec
4776  * @nid: audio widget
4777  * @on: power on/off flag
4778  *
4779  * Set this in patch_ops.stream_pm.  Only valid with power_save_node flag.
4780  */
4781 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on)
4782 {
4783 	if (codec->power_save_node)
4784 		set_path_power(codec, nid, -1, on);
4785 }
4786 EXPORT_SYMBOL_GPL(snd_hda_gen_stream_pm);
4787 
4788 /**
4789  * snd_hda_gen_parse_auto_config - Parse the given BIOS configuration and
4790  * set up the hda_gen_spec
4791  * @codec: the HDA codec
4792  * @cfg: Parsed pin configuration
4793  *
4794  * return 1 if successful, 0 if the proper config is not found,
4795  * or a negative error code
4796  */
4797 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4798 				  struct auto_pin_cfg *cfg)
4799 {
4800 	struct hda_gen_spec *spec = codec->spec;
4801 	int err;
4802 
4803 	parse_user_hints(codec);
4804 
4805 	if (spec->mixer_nid && !spec->mixer_merge_nid)
4806 		spec->mixer_merge_nid = spec->mixer_nid;
4807 
4808 	if (cfg != &spec->autocfg) {
4809 		spec->autocfg = *cfg;
4810 		cfg = &spec->autocfg;
4811 	}
4812 
4813 	if (!spec->main_out_badness)
4814 		spec->main_out_badness = &hda_main_out_badness;
4815 	if (!spec->extra_out_badness)
4816 		spec->extra_out_badness = &hda_extra_out_badness;
4817 
4818 	fill_all_dac_nids(codec);
4819 
4820 	if (!cfg->line_outs) {
4821 		if (cfg->dig_outs || cfg->dig_in_pin) {
4822 			spec->multiout.max_channels = 2;
4823 			spec->no_analog = 1;
4824 			goto dig_only;
4825 		}
4826 		if (!cfg->num_inputs && !cfg->dig_in_pin)
4827 			return 0; /* can't find valid BIOS pin config */
4828 	}
4829 
4830 	if (!spec->no_primary_hp &&
4831 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4832 	    cfg->line_outs <= cfg->hp_outs) {
4833 		/* use HP as primary out */
4834 		cfg->speaker_outs = cfg->line_outs;
4835 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4836 		       sizeof(cfg->speaker_pins));
4837 		cfg->line_outs = cfg->hp_outs;
4838 		memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4839 		cfg->hp_outs = 0;
4840 		memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4841 		cfg->line_out_type = AUTO_PIN_HP_OUT;
4842 	}
4843 
4844 	err = parse_output_paths(codec);
4845 	if (err < 0)
4846 		return err;
4847 	err = create_multi_channel_mode(codec);
4848 	if (err < 0)
4849 		return err;
4850 	err = create_multi_out_ctls(codec, cfg);
4851 	if (err < 0)
4852 		return err;
4853 	err = create_hp_out_ctls(codec);
4854 	if (err < 0)
4855 		return err;
4856 	err = create_speaker_out_ctls(codec);
4857 	if (err < 0)
4858 		return err;
4859 	err = create_indep_hp_ctls(codec);
4860 	if (err < 0)
4861 		return err;
4862 	err = create_loopback_mixing_ctl(codec);
4863 	if (err < 0)
4864 		return err;
4865 	err = create_hp_mic(codec);
4866 	if (err < 0)
4867 		return err;
4868 	err = create_input_ctls(codec);
4869 	if (err < 0)
4870 		return err;
4871 
4872 	/* add power-down pin callbacks at first */
4873 	add_all_pin_power_ctls(codec, false);
4874 
4875 	spec->const_channel_count = spec->ext_channel_count;
4876 	/* check the multiple speaker and headphone pins */
4877 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4878 		spec->const_channel_count = max(spec->const_channel_count,
4879 						cfg->speaker_outs * 2);
4880 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4881 		spec->const_channel_count = max(spec->const_channel_count,
4882 						cfg->hp_outs * 2);
4883 	spec->multiout.max_channels = max(spec->ext_channel_count,
4884 					  spec->const_channel_count);
4885 
4886 	err = check_auto_mute_availability(codec);
4887 	if (err < 0)
4888 		return err;
4889 
4890 	err = check_dyn_adc_switch(codec);
4891 	if (err < 0)
4892 		return err;
4893 
4894 	err = check_auto_mic_availability(codec);
4895 	if (err < 0)
4896 		return err;
4897 
4898 	/* add stereo mix if available and not enabled yet */
4899 	if (!spec->auto_mic && spec->mixer_nid &&
4900 	    spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
4901 	    spec->input_mux.num_items > 1) {
4902 		err = parse_capture_source(codec, spec->mixer_nid,
4903 					   CFG_IDX_MIX, spec->num_all_adcs,
4904 					   "Stereo Mix", 0);
4905 		if (err < 0)
4906 			return err;
4907 	}
4908 
4909 
4910 	err = create_capture_mixers(codec);
4911 	if (err < 0)
4912 		return err;
4913 
4914 	err = parse_mic_boost(codec);
4915 	if (err < 0)
4916 		return err;
4917 
4918 	/* create "Headphone Mic Jack Mode" if no input selection is
4919 	 * available (or user specifies add_jack_modes hint)
4920 	 */
4921 	if (spec->hp_mic_pin &&
4922 	    (spec->auto_mic || spec->input_mux.num_items == 1 ||
4923 	     spec->add_jack_modes)) {
4924 		err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
4925 		if (err < 0)
4926 			return err;
4927 	}
4928 
4929 	if (spec->add_jack_modes) {
4930 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4931 			err = create_out_jack_modes(codec, cfg->line_outs,
4932 						    cfg->line_out_pins);
4933 			if (err < 0)
4934 				return err;
4935 		}
4936 		if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4937 			err = create_out_jack_modes(codec, cfg->hp_outs,
4938 						    cfg->hp_pins);
4939 			if (err < 0)
4940 				return err;
4941 		}
4942 	}
4943 
4944 	/* add power-up pin callbacks at last */
4945 	add_all_pin_power_ctls(codec, true);
4946 
4947 	/* mute all aamix input initially */
4948 	if (spec->mixer_nid)
4949 		mute_all_mixer_nid(codec, spec->mixer_nid);
4950 
4951  dig_only:
4952 	parse_digital(codec);
4953 
4954 	if (spec->power_down_unused || codec->power_save_node) {
4955 		if (!codec->power_filter)
4956 			codec->power_filter = snd_hda_gen_path_power_filter;
4957 		if (!codec->patch_ops.stream_pm)
4958 			codec->patch_ops.stream_pm = snd_hda_gen_stream_pm;
4959 	}
4960 
4961 	if (!spec->no_analog && spec->beep_nid) {
4962 		err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4963 		if (err < 0)
4964 			return err;
4965 		if (codec->beep && codec->power_save_node) {
4966 			err = add_fake_beep_paths(codec);
4967 			if (err < 0)
4968 				return err;
4969 			codec->beep->power_hook = beep_power_hook;
4970 		}
4971 	}
4972 
4973 	return 1;
4974 }
4975 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config);
4976 
4977 
4978 /*
4979  * Build control elements
4980  */
4981 
4982 /* slave controls for virtual master */
4983 static const char * const slave_pfxs[] = {
4984 	"Front", "Surround", "Center", "LFE", "Side",
4985 	"Headphone", "Speaker", "Mono", "Line Out",
4986 	"CLFE", "Bass Speaker", "PCM",
4987 	"Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4988 	"Headphone Front", "Headphone Surround", "Headphone CLFE",
4989 	"Headphone Side", "Headphone+LO", "Speaker+LO",
4990 	NULL,
4991 };
4992 
4993 /**
4994  * snd_hda_gen_build_controls - Build controls from the parsed results
4995  * @codec: the HDA codec
4996  *
4997  * Pass this to build_controls patch_ops.
4998  */
4999 int snd_hda_gen_build_controls(struct hda_codec *codec)
5000 {
5001 	struct hda_gen_spec *spec = codec->spec;
5002 	int err;
5003 
5004 	if (spec->kctls.used) {
5005 		err = snd_hda_add_new_ctls(codec, spec->kctls.list);
5006 		if (err < 0)
5007 			return err;
5008 	}
5009 
5010 	if (spec->multiout.dig_out_nid) {
5011 		err = snd_hda_create_dig_out_ctls(codec,
5012 						  spec->multiout.dig_out_nid,
5013 						  spec->multiout.dig_out_nid,
5014 						  spec->pcm_rec[1]->pcm_type);
5015 		if (err < 0)
5016 			return err;
5017 		if (!spec->no_analog) {
5018 			err = snd_hda_create_spdif_share_sw(codec,
5019 							    &spec->multiout);
5020 			if (err < 0)
5021 				return err;
5022 			spec->multiout.share_spdif = 1;
5023 		}
5024 	}
5025 	if (spec->dig_in_nid) {
5026 		err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
5027 		if (err < 0)
5028 			return err;
5029 	}
5030 
5031 	/* if we have no master control, let's create it */
5032 	if (!spec->no_analog &&
5033 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
5034 		err = snd_hda_add_vmaster(codec, "Master Playback Volume",
5035 					  spec->vmaster_tlv, slave_pfxs,
5036 					  "Playback Volume");
5037 		if (err < 0)
5038 			return err;
5039 	}
5040 	if (!spec->no_analog &&
5041 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
5042 		err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
5043 					    NULL, slave_pfxs,
5044 					    "Playback Switch",
5045 					    true, &spec->vmaster_mute.sw_kctl);
5046 		if (err < 0)
5047 			return err;
5048 		if (spec->vmaster_mute.hook) {
5049 			snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
5050 						 spec->vmaster_mute_enum);
5051 			snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5052 		}
5053 	}
5054 
5055 	free_kctls(spec); /* no longer needed */
5056 
5057 	err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5058 	if (err < 0)
5059 		return err;
5060 
5061 	return 0;
5062 }
5063 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls);
5064 
5065 
5066 /*
5067  * PCM definitions
5068  */
5069 
5070 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
5071 				   struct hda_codec *codec,
5072 				   struct snd_pcm_substream *substream,
5073 				   int action)
5074 {
5075 	struct hda_gen_spec *spec = codec->spec;
5076 	if (spec->pcm_playback_hook)
5077 		spec->pcm_playback_hook(hinfo, codec, substream, action);
5078 }
5079 
5080 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
5081 				  struct hda_codec *codec,
5082 				  struct snd_pcm_substream *substream,
5083 				  int action)
5084 {
5085 	struct hda_gen_spec *spec = codec->spec;
5086 	if (spec->pcm_capture_hook)
5087 		spec->pcm_capture_hook(hinfo, codec, substream, action);
5088 }
5089 
5090 /*
5091  * Analog playback callbacks
5092  */
5093 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
5094 			     struct hda_codec *codec,
5095 			     struct snd_pcm_substream *substream)
5096 {
5097 	struct hda_gen_spec *spec = codec->spec;
5098 	int err;
5099 
5100 	mutex_lock(&spec->pcm_mutex);
5101 	err = snd_hda_multi_out_analog_open(codec,
5102 					    &spec->multiout, substream,
5103 					     hinfo);
5104 	if (!err) {
5105 		spec->active_streams |= 1 << STREAM_MULTI_OUT;
5106 		call_pcm_playback_hook(hinfo, codec, substream,
5107 				       HDA_GEN_PCM_ACT_OPEN);
5108 	}
5109 	mutex_unlock(&spec->pcm_mutex);
5110 	return err;
5111 }
5112 
5113 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5114 				struct hda_codec *codec,
5115 				unsigned int stream_tag,
5116 				unsigned int format,
5117 				struct snd_pcm_substream *substream)
5118 {
5119 	struct hda_gen_spec *spec = codec->spec;
5120 	int err;
5121 
5122 	err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5123 					       stream_tag, format, substream);
5124 	if (!err)
5125 		call_pcm_playback_hook(hinfo, codec, substream,
5126 				       HDA_GEN_PCM_ACT_PREPARE);
5127 	return err;
5128 }
5129 
5130 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5131 				struct hda_codec *codec,
5132 				struct snd_pcm_substream *substream)
5133 {
5134 	struct hda_gen_spec *spec = codec->spec;
5135 	int err;
5136 
5137 	err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5138 	if (!err)
5139 		call_pcm_playback_hook(hinfo, codec, substream,
5140 				       HDA_GEN_PCM_ACT_CLEANUP);
5141 	return err;
5142 }
5143 
5144 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
5145 			      struct hda_codec *codec,
5146 			      struct snd_pcm_substream *substream)
5147 {
5148 	struct hda_gen_spec *spec = codec->spec;
5149 	mutex_lock(&spec->pcm_mutex);
5150 	spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5151 	call_pcm_playback_hook(hinfo, codec, substream,
5152 			       HDA_GEN_PCM_ACT_CLOSE);
5153 	mutex_unlock(&spec->pcm_mutex);
5154 	return 0;
5155 }
5156 
5157 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
5158 			    struct hda_codec *codec,
5159 			    struct snd_pcm_substream *substream)
5160 {
5161 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
5162 	return 0;
5163 }
5164 
5165 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5166 			       struct hda_codec *codec,
5167 			       unsigned int stream_tag,
5168 			       unsigned int format,
5169 			       struct snd_pcm_substream *substream)
5170 {
5171 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5172 	call_pcm_capture_hook(hinfo, codec, substream,
5173 			      HDA_GEN_PCM_ACT_PREPARE);
5174 	return 0;
5175 }
5176 
5177 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5178 			       struct hda_codec *codec,
5179 			       struct snd_pcm_substream *substream)
5180 {
5181 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5182 	call_pcm_capture_hook(hinfo, codec, substream,
5183 			      HDA_GEN_PCM_ACT_CLEANUP);
5184 	return 0;
5185 }
5186 
5187 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
5188 			     struct hda_codec *codec,
5189 			     struct snd_pcm_substream *substream)
5190 {
5191 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
5192 	return 0;
5193 }
5194 
5195 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
5196 				 struct hda_codec *codec,
5197 				 struct snd_pcm_substream *substream)
5198 {
5199 	struct hda_gen_spec *spec = codec->spec;
5200 	int err = 0;
5201 
5202 	mutex_lock(&spec->pcm_mutex);
5203 	if (spec->indep_hp && !spec->indep_hp_enabled)
5204 		err = -EBUSY;
5205 	else
5206 		spec->active_streams |= 1 << STREAM_INDEP_HP;
5207 	call_pcm_playback_hook(hinfo, codec, substream,
5208 			       HDA_GEN_PCM_ACT_OPEN);
5209 	mutex_unlock(&spec->pcm_mutex);
5210 	return err;
5211 }
5212 
5213 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
5214 				  struct hda_codec *codec,
5215 				  struct snd_pcm_substream *substream)
5216 {
5217 	struct hda_gen_spec *spec = codec->spec;
5218 	mutex_lock(&spec->pcm_mutex);
5219 	spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5220 	call_pcm_playback_hook(hinfo, codec, substream,
5221 			       HDA_GEN_PCM_ACT_CLOSE);
5222 	mutex_unlock(&spec->pcm_mutex);
5223 	return 0;
5224 }
5225 
5226 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5227 				    struct hda_codec *codec,
5228 				    unsigned int stream_tag,
5229 				    unsigned int format,
5230 				    struct snd_pcm_substream *substream)
5231 {
5232 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
5233 	call_pcm_playback_hook(hinfo, codec, substream,
5234 			       HDA_GEN_PCM_ACT_PREPARE);
5235 	return 0;
5236 }
5237 
5238 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5239 				    struct hda_codec *codec,
5240 				    struct snd_pcm_substream *substream)
5241 {
5242 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
5243 	call_pcm_playback_hook(hinfo, codec, substream,
5244 			       HDA_GEN_PCM_ACT_CLEANUP);
5245 	return 0;
5246 }
5247 
5248 /*
5249  * Digital out
5250  */
5251 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
5252 				 struct hda_codec *codec,
5253 				 struct snd_pcm_substream *substream)
5254 {
5255 	struct hda_gen_spec *spec = codec->spec;
5256 	return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5257 }
5258 
5259 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5260 				    struct hda_codec *codec,
5261 				    unsigned int stream_tag,
5262 				    unsigned int format,
5263 				    struct snd_pcm_substream *substream)
5264 {
5265 	struct hda_gen_spec *spec = codec->spec;
5266 	return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5267 					     stream_tag, format, substream);
5268 }
5269 
5270 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
5271 				    struct hda_codec *codec,
5272 				    struct snd_pcm_substream *substream)
5273 {
5274 	struct hda_gen_spec *spec = codec->spec;
5275 	return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5276 }
5277 
5278 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
5279 				  struct hda_codec *codec,
5280 				  struct snd_pcm_substream *substream)
5281 {
5282 	struct hda_gen_spec *spec = codec->spec;
5283 	return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5284 }
5285 
5286 /*
5287  * Analog capture
5288  */
5289 #define alt_capture_pcm_open	capture_pcm_open
5290 #define alt_capture_pcm_close	capture_pcm_close
5291 
5292 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5293 				   struct hda_codec *codec,
5294 				   unsigned int stream_tag,
5295 				   unsigned int format,
5296 				   struct snd_pcm_substream *substream)
5297 {
5298 	struct hda_gen_spec *spec = codec->spec;
5299 
5300 	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5301 				   stream_tag, 0, format);
5302 	call_pcm_capture_hook(hinfo, codec, substream,
5303 			      HDA_GEN_PCM_ACT_PREPARE);
5304 	return 0;
5305 }
5306 
5307 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5308 				   struct hda_codec *codec,
5309 				   struct snd_pcm_substream *substream)
5310 {
5311 	struct hda_gen_spec *spec = codec->spec;
5312 
5313 	snd_hda_codec_cleanup_stream(codec,
5314 				     spec->adc_nids[substream->number + 1]);
5315 	call_pcm_capture_hook(hinfo, codec, substream,
5316 			      HDA_GEN_PCM_ACT_CLEANUP);
5317 	return 0;
5318 }
5319 
5320 /*
5321  */
5322 static const struct hda_pcm_stream pcm_analog_playback = {
5323 	.substreams = 1,
5324 	.channels_min = 2,
5325 	.channels_max = 8,
5326 	/* NID is set in build_pcms */
5327 	.ops = {
5328 		.open = playback_pcm_open,
5329 		.close = playback_pcm_close,
5330 		.prepare = playback_pcm_prepare,
5331 		.cleanup = playback_pcm_cleanup
5332 	},
5333 };
5334 
5335 static const struct hda_pcm_stream pcm_analog_capture = {
5336 	.substreams = 1,
5337 	.channels_min = 2,
5338 	.channels_max = 2,
5339 	/* NID is set in build_pcms */
5340 	.ops = {
5341 		.open = capture_pcm_open,
5342 		.close = capture_pcm_close,
5343 		.prepare = capture_pcm_prepare,
5344 		.cleanup = capture_pcm_cleanup
5345 	},
5346 };
5347 
5348 static const struct hda_pcm_stream pcm_analog_alt_playback = {
5349 	.substreams = 1,
5350 	.channels_min = 2,
5351 	.channels_max = 2,
5352 	/* NID is set in build_pcms */
5353 	.ops = {
5354 		.open = alt_playback_pcm_open,
5355 		.close = alt_playback_pcm_close,
5356 		.prepare = alt_playback_pcm_prepare,
5357 		.cleanup = alt_playback_pcm_cleanup
5358 	},
5359 };
5360 
5361 static const struct hda_pcm_stream pcm_analog_alt_capture = {
5362 	.substreams = 2, /* can be overridden */
5363 	.channels_min = 2,
5364 	.channels_max = 2,
5365 	/* NID is set in build_pcms */
5366 	.ops = {
5367 		.open = alt_capture_pcm_open,
5368 		.close = alt_capture_pcm_close,
5369 		.prepare = alt_capture_pcm_prepare,
5370 		.cleanup = alt_capture_pcm_cleanup
5371 	},
5372 };
5373 
5374 static const struct hda_pcm_stream pcm_digital_playback = {
5375 	.substreams = 1,
5376 	.channels_min = 2,
5377 	.channels_max = 2,
5378 	/* NID is set in build_pcms */
5379 	.ops = {
5380 		.open = dig_playback_pcm_open,
5381 		.close = dig_playback_pcm_close,
5382 		.prepare = dig_playback_pcm_prepare,
5383 		.cleanup = dig_playback_pcm_cleanup
5384 	},
5385 };
5386 
5387 static const struct hda_pcm_stream pcm_digital_capture = {
5388 	.substreams = 1,
5389 	.channels_min = 2,
5390 	.channels_max = 2,
5391 	/* NID is set in build_pcms */
5392 };
5393 
5394 /* Used by build_pcms to flag that a PCM has no playback stream */
5395 static const struct hda_pcm_stream pcm_null_stream = {
5396 	.substreams = 0,
5397 	.channels_min = 0,
5398 	.channels_max = 0,
5399 };
5400 
5401 /*
5402  * dynamic changing ADC PCM streams
5403  */
5404 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
5405 {
5406 	struct hda_gen_spec *spec = codec->spec;
5407 	hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5408 
5409 	if (spec->cur_adc && spec->cur_adc != new_adc) {
5410 		/* stream is running, let's swap the current ADC */
5411 		__snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5412 		spec->cur_adc = new_adc;
5413 		snd_hda_codec_setup_stream(codec, new_adc,
5414 					   spec->cur_adc_stream_tag, 0,
5415 					   spec->cur_adc_format);
5416 		return true;
5417 	}
5418 	return false;
5419 }
5420 
5421 /* analog capture with dynamic dual-adc changes */
5422 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
5423 				       struct hda_codec *codec,
5424 				       unsigned int stream_tag,
5425 				       unsigned int format,
5426 				       struct snd_pcm_substream *substream)
5427 {
5428 	struct hda_gen_spec *spec = codec->spec;
5429 	spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5430 	spec->cur_adc_stream_tag = stream_tag;
5431 	spec->cur_adc_format = format;
5432 	snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5433 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_PREPARE);
5434 	return 0;
5435 }
5436 
5437 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
5438 				       struct hda_codec *codec,
5439 				       struct snd_pcm_substream *substream)
5440 {
5441 	struct hda_gen_spec *spec = codec->spec;
5442 	snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5443 	spec->cur_adc = 0;
5444 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLEANUP);
5445 	return 0;
5446 }
5447 
5448 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
5449 	.substreams = 1,
5450 	.channels_min = 2,
5451 	.channels_max = 2,
5452 	.nid = 0, /* fill later */
5453 	.ops = {
5454 		.prepare = dyn_adc_capture_pcm_prepare,
5455 		.cleanup = dyn_adc_capture_pcm_cleanup
5456 	},
5457 };
5458 
5459 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
5460 				 const char *chip_name)
5461 {
5462 	char *p;
5463 
5464 	if (*str)
5465 		return;
5466 	strlcpy(str, chip_name, len);
5467 
5468 	/* drop non-alnum chars after a space */
5469 	for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5470 		if (!isalnum(p[1])) {
5471 			*p = 0;
5472 			break;
5473 		}
5474 	}
5475 	strlcat(str, sfx, len);
5476 }
5477 
5478 /* copy PCM stream info from @default_str, and override non-NULL entries
5479  * from @spec_str and @nid
5480  */
5481 static void setup_pcm_stream(struct hda_pcm_stream *str,
5482 			     const struct hda_pcm_stream *default_str,
5483 			     const struct hda_pcm_stream *spec_str,
5484 			     hda_nid_t nid)
5485 {
5486 	*str = *default_str;
5487 	if (nid)
5488 		str->nid = nid;
5489 	if (spec_str) {
5490 		if (spec_str->substreams)
5491 			str->substreams = spec_str->substreams;
5492 		if (spec_str->channels_min)
5493 			str->channels_min = spec_str->channels_min;
5494 		if (spec_str->channels_max)
5495 			str->channels_max = spec_str->channels_max;
5496 		if (spec_str->rates)
5497 			str->rates = spec_str->rates;
5498 		if (spec_str->formats)
5499 			str->formats = spec_str->formats;
5500 		if (spec_str->maxbps)
5501 			str->maxbps = spec_str->maxbps;
5502 	}
5503 }
5504 
5505 /**
5506  * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5507  * @codec: the HDA codec
5508  *
5509  * Pass this to build_pcms patch_ops.
5510  */
5511 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5512 {
5513 	struct hda_gen_spec *spec = codec->spec;
5514 	struct hda_pcm *info;
5515 	bool have_multi_adcs;
5516 
5517 	if (spec->no_analog)
5518 		goto skip_analog;
5519 
5520 	fill_pcm_stream_name(spec->stream_name_analog,
5521 			     sizeof(spec->stream_name_analog),
5522 			     " Analog", codec->core.chip_name);
5523 	info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5524 	if (!info)
5525 		return -ENOMEM;
5526 	spec->pcm_rec[0] = info;
5527 
5528 	if (spec->multiout.num_dacs > 0) {
5529 		setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5530 				 &pcm_analog_playback,
5531 				 spec->stream_analog_playback,
5532 				 spec->multiout.dac_nids[0]);
5533 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5534 			spec->multiout.max_channels;
5535 		if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5536 		    spec->autocfg.line_outs == 2)
5537 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5538 				snd_pcm_2_1_chmaps;
5539 	}
5540 	if (spec->num_adc_nids) {
5541 		setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5542 				 (spec->dyn_adc_switch ?
5543 				  &dyn_adc_pcm_analog_capture : &pcm_analog_capture),
5544 				 spec->stream_analog_capture,
5545 				 spec->adc_nids[0]);
5546 	}
5547 
5548  skip_analog:
5549 	/* SPDIF for stream index #1 */
5550 	if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5551 		fill_pcm_stream_name(spec->stream_name_digital,
5552 				     sizeof(spec->stream_name_digital),
5553 				     " Digital", codec->core.chip_name);
5554 		info = snd_hda_codec_pcm_new(codec, "%s",
5555 					     spec->stream_name_digital);
5556 		if (!info)
5557 			return -ENOMEM;
5558 		codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5559 		spec->pcm_rec[1] = info;
5560 		if (spec->dig_out_type)
5561 			info->pcm_type = spec->dig_out_type;
5562 		else
5563 			info->pcm_type = HDA_PCM_TYPE_SPDIF;
5564 		if (spec->multiout.dig_out_nid)
5565 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5566 					 &pcm_digital_playback,
5567 					 spec->stream_digital_playback,
5568 					 spec->multiout.dig_out_nid);
5569 		if (spec->dig_in_nid)
5570 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5571 					 &pcm_digital_capture,
5572 					 spec->stream_digital_capture,
5573 					 spec->dig_in_nid);
5574 	}
5575 
5576 	if (spec->no_analog)
5577 		return 0;
5578 
5579 	/* If the use of more than one ADC is requested for the current
5580 	 * model, configure a second analog capture-only PCM.
5581 	 */
5582 	have_multi_adcs = (spec->num_adc_nids > 1) &&
5583 		!spec->dyn_adc_switch && !spec->auto_mic;
5584 	/* Additional Analaog capture for index #2 */
5585 	if (spec->alt_dac_nid || have_multi_adcs) {
5586 		fill_pcm_stream_name(spec->stream_name_alt_analog,
5587 				     sizeof(spec->stream_name_alt_analog),
5588 			     " Alt Analog", codec->core.chip_name);
5589 		info = snd_hda_codec_pcm_new(codec, "%s",
5590 					     spec->stream_name_alt_analog);
5591 		if (!info)
5592 			return -ENOMEM;
5593 		spec->pcm_rec[2] = info;
5594 		if (spec->alt_dac_nid)
5595 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5596 					 &pcm_analog_alt_playback,
5597 					 spec->stream_analog_alt_playback,
5598 					 spec->alt_dac_nid);
5599 		else
5600 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_PLAYBACK],
5601 					 &pcm_null_stream, NULL, 0);
5602 		if (have_multi_adcs) {
5603 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5604 					 &pcm_analog_alt_capture,
5605 					 spec->stream_analog_alt_capture,
5606 					 spec->adc_nids[1]);
5607 			info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5608 				spec->num_adc_nids - 1;
5609 		} else {
5610 			setup_pcm_stream(&info->stream[SNDRV_PCM_STREAM_CAPTURE],
5611 					 &pcm_null_stream, NULL, 0);
5612 		}
5613 	}
5614 
5615 	return 0;
5616 }
5617 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5618 
5619 
5620 /*
5621  * Standard auto-parser initializations
5622  */
5623 
5624 /* configure the given path as a proper output */
5625 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5626 {
5627 	struct nid_path *path;
5628 	hda_nid_t pin;
5629 
5630 	path = snd_hda_get_path_from_idx(codec, path_idx);
5631 	if (!path || !path->depth)
5632 		return;
5633 	pin = path->path[path->depth - 1];
5634 	restore_pin_ctl(codec, pin);
5635 	snd_hda_activate_path(codec, path, path->active,
5636 			      aamix_default(codec->spec));
5637 	set_pin_eapd(codec, pin, path->active);
5638 }
5639 
5640 /* initialize primary output paths */
5641 static void init_multi_out(struct hda_codec *codec)
5642 {
5643 	struct hda_gen_spec *spec = codec->spec;
5644 	int i;
5645 
5646 	for (i = 0; i < spec->autocfg.line_outs; i++)
5647 		set_output_and_unmute(codec, spec->out_paths[i]);
5648 }
5649 
5650 
5651 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5652 {
5653 	int i;
5654 
5655 	for (i = 0; i < num_outs; i++)
5656 		set_output_and_unmute(codec, paths[i]);
5657 }
5658 
5659 /* initialize hp and speaker paths */
5660 static void init_extra_out(struct hda_codec *codec)
5661 {
5662 	struct hda_gen_spec *spec = codec->spec;
5663 
5664 	if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5665 		__init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5666 	if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5667 		__init_extra_out(codec, spec->autocfg.speaker_outs,
5668 				 spec->speaker_paths);
5669 }
5670 
5671 /* initialize multi-io paths */
5672 static void init_multi_io(struct hda_codec *codec)
5673 {
5674 	struct hda_gen_spec *spec = codec->spec;
5675 	int i;
5676 
5677 	for (i = 0; i < spec->multi_ios; i++) {
5678 		hda_nid_t pin = spec->multi_io[i].pin;
5679 		struct nid_path *path;
5680 		path = get_multiio_path(codec, i);
5681 		if (!path)
5682 			continue;
5683 		if (!spec->multi_io[i].ctl_in)
5684 			spec->multi_io[i].ctl_in =
5685 				snd_hda_codec_get_pin_target(codec, pin);
5686 		snd_hda_activate_path(codec, path, path->active,
5687 				      aamix_default(spec));
5688 	}
5689 }
5690 
5691 static void init_aamix_paths(struct hda_codec *codec)
5692 {
5693 	struct hda_gen_spec *spec = codec->spec;
5694 
5695 	if (!spec->have_aamix_ctl)
5696 		return;
5697 	if (!has_aamix_out_paths(spec))
5698 		return;
5699 	update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5700 			   spec->aamix_out_paths[0],
5701 			   spec->autocfg.line_out_type);
5702 	update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5703 			   spec->aamix_out_paths[1],
5704 			   AUTO_PIN_HP_OUT);
5705 	update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5706 			   spec->aamix_out_paths[2],
5707 			   AUTO_PIN_SPEAKER_OUT);
5708 }
5709 
5710 /* set up input pins and loopback paths */
5711 static void init_analog_input(struct hda_codec *codec)
5712 {
5713 	struct hda_gen_spec *spec = codec->spec;
5714 	struct auto_pin_cfg *cfg = &spec->autocfg;
5715 	int i;
5716 
5717 	for (i = 0; i < cfg->num_inputs; i++) {
5718 		hda_nid_t nid = cfg->inputs[i].pin;
5719 		if (is_input_pin(codec, nid))
5720 			restore_pin_ctl(codec, nid);
5721 
5722 		/* init loopback inputs */
5723 		if (spec->mixer_nid) {
5724 			resume_path_from_idx(codec, spec->loopback_paths[i]);
5725 			resume_path_from_idx(codec, spec->loopback_merge_path);
5726 		}
5727 	}
5728 }
5729 
5730 /* initialize ADC paths */
5731 static void init_input_src(struct hda_codec *codec)
5732 {
5733 	struct hda_gen_spec *spec = codec->spec;
5734 	struct hda_input_mux *imux = &spec->input_mux;
5735 	struct nid_path *path;
5736 	int i, c, nums;
5737 
5738 	if (spec->dyn_adc_switch)
5739 		nums = 1;
5740 	else
5741 		nums = spec->num_adc_nids;
5742 
5743 	for (c = 0; c < nums; c++) {
5744 		for (i = 0; i < imux->num_items; i++) {
5745 			path = get_input_path(codec, c, i);
5746 			if (path) {
5747 				bool active = path->active;
5748 				if (i == spec->cur_mux[c])
5749 					active = true;
5750 				snd_hda_activate_path(codec, path, active, false);
5751 			}
5752 		}
5753 		if (spec->hp_mic)
5754 			update_hp_mic(codec, c, true);
5755 	}
5756 
5757 	if (spec->cap_sync_hook)
5758 		spec->cap_sync_hook(codec, NULL, NULL);
5759 }
5760 
5761 /* set right pin controls for digital I/O */
5762 static void init_digital(struct hda_codec *codec)
5763 {
5764 	struct hda_gen_spec *spec = codec->spec;
5765 	int i;
5766 	hda_nid_t pin;
5767 
5768 	for (i = 0; i < spec->autocfg.dig_outs; i++)
5769 		set_output_and_unmute(codec, spec->digout_paths[i]);
5770 	pin = spec->autocfg.dig_in_pin;
5771 	if (pin) {
5772 		restore_pin_ctl(codec, pin);
5773 		resume_path_from_idx(codec, spec->digin_path);
5774 	}
5775 }
5776 
5777 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5778  * invalid unsol tags by some reason
5779  */
5780 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5781 {
5782 	int i;
5783 
5784 	for (i = 0; i < codec->init_pins.used; i++) {
5785 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5786 		hda_nid_t nid = pin->nid;
5787 		if (is_jack_detectable(codec, nid) &&
5788 		    !snd_hda_jack_tbl_get(codec, nid))
5789 			snd_hda_codec_update_cache(codec, nid, 0,
5790 					AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5791 	}
5792 }
5793 
5794 /**
5795  * snd_hda_gen_init - initialize the generic spec
5796  * @codec: the HDA codec
5797  *
5798  * This can be put as patch_ops init function.
5799  */
5800 int snd_hda_gen_init(struct hda_codec *codec)
5801 {
5802 	struct hda_gen_spec *spec = codec->spec;
5803 
5804 	if (spec->init_hook)
5805 		spec->init_hook(codec);
5806 
5807 	snd_hda_apply_verbs(codec);
5808 
5809 	init_multi_out(codec);
5810 	init_extra_out(codec);
5811 	init_multi_io(codec);
5812 	init_aamix_paths(codec);
5813 	init_analog_input(codec);
5814 	init_input_src(codec);
5815 	init_digital(codec);
5816 
5817 	clear_unsol_on_unused_pins(codec);
5818 
5819 	sync_all_pin_power_ctls(codec);
5820 
5821 	/* call init functions of standard auto-mute helpers */
5822 	update_automute_all(codec);
5823 
5824 	regcache_sync(codec->core.regmap);
5825 
5826 	if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5827 		snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5828 
5829 	hda_call_check_power_status(codec, 0x01);
5830 	return 0;
5831 }
5832 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5833 
5834 /**
5835  * snd_hda_gen_free - free the generic spec
5836  * @codec: the HDA codec
5837  *
5838  * This can be put as patch_ops free function.
5839  */
5840 void snd_hda_gen_free(struct hda_codec *codec)
5841 {
5842 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5843 	snd_hda_gen_spec_free(codec->spec);
5844 	kfree(codec->spec);
5845 	codec->spec = NULL;
5846 }
5847 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
5848 
5849 #ifdef CONFIG_PM
5850 /**
5851  * snd_hda_gen_check_power_status - check the loopback power save state
5852  * @codec: the HDA codec
5853  * @nid: NID to inspect
5854  *
5855  * This can be put as patch_ops check_power_status function.
5856  */
5857 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5858 {
5859 	struct hda_gen_spec *spec = codec->spec;
5860 	return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5861 }
5862 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
5863 #endif
5864 
5865 
5866 /*
5867  * the generic codec support
5868  */
5869 
5870 static const struct hda_codec_ops generic_patch_ops = {
5871 	.build_controls = snd_hda_gen_build_controls,
5872 	.build_pcms = snd_hda_gen_build_pcms,
5873 	.init = snd_hda_gen_init,
5874 	.free = snd_hda_gen_free,
5875 	.unsol_event = snd_hda_jack_unsol_event,
5876 #ifdef CONFIG_PM
5877 	.check_power_status = snd_hda_gen_check_power_status,
5878 #endif
5879 };
5880 
5881 /*
5882  * snd_hda_parse_generic_codec - Generic codec parser
5883  * @codec: the HDA codec
5884  */
5885 static int snd_hda_parse_generic_codec(struct hda_codec *codec)
5886 {
5887 	struct hda_gen_spec *spec;
5888 	int err;
5889 
5890 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5891 	if (!spec)
5892 		return -ENOMEM;
5893 	snd_hda_gen_spec_init(spec);
5894 	codec->spec = spec;
5895 
5896 	err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5897 	if (err < 0)
5898 		return err;
5899 
5900 	err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5901 	if (err < 0)
5902 		goto error;
5903 
5904 	codec->patch_ops = generic_patch_ops;
5905 	return 0;
5906 
5907 error:
5908 	snd_hda_gen_free(codec);
5909 	return err;
5910 }
5911 
5912 static const struct hda_device_id snd_hda_id_generic[] = {
5913 	HDA_CODEC_ENTRY(HDA_CODEC_ID_GENERIC, "Generic", snd_hda_parse_generic_codec),
5914 	{} /* terminator */
5915 };
5916 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_generic);
5917 
5918 static struct hda_codec_driver generic_driver = {
5919 	.id = snd_hda_id_generic,
5920 };
5921 
5922 module_hda_codec_driver(generic_driver);
5923 
5924 MODULE_LICENSE("GPL");
5925 MODULE_DESCRIPTION("Generic HD-audio codec parser");
5926