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