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