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