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