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