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