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