xref: /openbmc/linux/sound/pci/hda/hda_generic.c (revision 275876e2)
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 static 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 
91 /*
92  * store user hints
93  */
94 static void parse_user_hints(struct hda_codec *codec)
95 {
96 	struct hda_gen_spec *spec = codec->spec;
97 	int val;
98 
99 	val = snd_hda_get_bool_hint(codec, "jack_detect");
100 	if (val >= 0)
101 		codec->no_jack_detect = !val;
102 	val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
103 	if (val >= 0)
104 		codec->inv_jack_detect = !!val;
105 	val = snd_hda_get_bool_hint(codec, "trigger_sense");
106 	if (val >= 0)
107 		codec->no_trigger_sense = !val;
108 	val = snd_hda_get_bool_hint(codec, "inv_eapd");
109 	if (val >= 0)
110 		codec->inv_eapd = !!val;
111 	val = snd_hda_get_bool_hint(codec, "pcm_format_first");
112 	if (val >= 0)
113 		codec->pcm_format_first = !!val;
114 	val = snd_hda_get_bool_hint(codec, "sticky_stream");
115 	if (val >= 0)
116 		codec->no_sticky_stream = !val;
117 	val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
118 	if (val >= 0)
119 		codec->spdif_status_reset = !!val;
120 	val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
121 	if (val >= 0)
122 		codec->pin_amp_workaround = !!val;
123 	val = snd_hda_get_bool_hint(codec, "single_adc_amp");
124 	if (val >= 0)
125 		codec->single_adc_amp = !!val;
126 
127 	val = snd_hda_get_bool_hint(codec, "auto_mute");
128 	if (val >= 0)
129 		spec->suppress_auto_mute = !val;
130 	val = snd_hda_get_bool_hint(codec, "auto_mic");
131 	if (val >= 0)
132 		spec->suppress_auto_mic = !val;
133 	val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
134 	if (val >= 0)
135 		spec->line_in_auto_switch = !!val;
136 	val = snd_hda_get_bool_hint(codec, "auto_mute_via_amp");
137 	if (val >= 0)
138 		spec->auto_mute_via_amp = !!val;
139 	val = snd_hda_get_bool_hint(codec, "need_dac_fix");
140 	if (val >= 0)
141 		spec->need_dac_fix = !!val;
142 	val = snd_hda_get_bool_hint(codec, "primary_hp");
143 	if (val >= 0)
144 		spec->no_primary_hp = !val;
145 	val = snd_hda_get_bool_hint(codec, "multi_io");
146 	if (val >= 0)
147 		spec->no_multi_io = !val;
148 	val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
149 	if (val >= 0)
150 		spec->multi_cap_vol = !!val;
151 	val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
152 	if (val >= 0)
153 		spec->inv_dmic_split = !!val;
154 	val = snd_hda_get_bool_hint(codec, "indep_hp");
155 	if (val >= 0)
156 		spec->indep_hp = !!val;
157 	val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
158 	if (val >= 0)
159 		spec->add_stereo_mix_input = !!val;
160 	/* the following two are just for compatibility */
161 	val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
162 	if (val >= 0)
163 		spec->add_jack_modes = !!val;
164 	val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
165 	if (val >= 0)
166 		spec->add_jack_modes = !!val;
167 	val = snd_hda_get_bool_hint(codec, "add_jack_modes");
168 	if (val >= 0)
169 		spec->add_jack_modes = !!val;
170 	val = snd_hda_get_bool_hint(codec, "power_down_unused");
171 	if (val >= 0)
172 		spec->power_down_unused = !!val;
173 	val = snd_hda_get_bool_hint(codec, "add_hp_mic");
174 	if (val >= 0)
175 		spec->hp_mic = !!val;
176 	val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
177 	if (val >= 0)
178 		spec->suppress_hp_mic_detect = !val;
179 
180 	if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
181 		spec->mixer_nid = val;
182 }
183 
184 /*
185  * pin control value accesses
186  */
187 
188 #define update_pin_ctl(codec, pin, val) \
189 	snd_hda_codec_update_cache(codec, pin, 0, \
190 				   AC_VERB_SET_PIN_WIDGET_CONTROL, val)
191 
192 /* restore the pinctl based on the cached value */
193 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
194 {
195 	update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
196 }
197 
198 /* set the pinctl target value and write it if requested */
199 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
200 			   unsigned int val, bool do_write)
201 {
202 	if (!pin)
203 		return;
204 	val = snd_hda_correct_pin_ctl(codec, pin, val);
205 	snd_hda_codec_set_pin_target(codec, pin, val);
206 	if (do_write)
207 		update_pin_ctl(codec, pin, val);
208 }
209 
210 /* set pinctl target values for all given pins */
211 static void set_pin_targets(struct hda_codec *codec, int num_pins,
212 			    hda_nid_t *pins, unsigned int val)
213 {
214 	int i;
215 	for (i = 0; i < num_pins; i++)
216 		set_pin_target(codec, pins[i], val, false);
217 }
218 
219 /*
220  * parsing paths
221  */
222 
223 /* return the position of NID in the list, or -1 if not found */
224 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
225 {
226 	int i;
227 	for (i = 0; i < nums; i++)
228 		if (list[i] == nid)
229 			return i;
230 	return -1;
231 }
232 
233 /* return true if the given NID is contained in the path */
234 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
235 {
236 	return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
237 }
238 
239 static struct nid_path *get_nid_path(struct hda_codec *codec,
240 				     hda_nid_t from_nid, hda_nid_t to_nid,
241 				     int anchor_nid)
242 {
243 	struct hda_gen_spec *spec = codec->spec;
244 	int i;
245 
246 	for (i = 0; i < spec->paths.used; i++) {
247 		struct nid_path *path = snd_array_elem(&spec->paths, i);
248 		if (path->depth <= 0)
249 			continue;
250 		if ((!from_nid || path->path[0] == from_nid) &&
251 		    (!to_nid || path->path[path->depth - 1] == to_nid)) {
252 			if (!anchor_nid ||
253 			    (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
254 			    (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
255 				return path;
256 		}
257 	}
258 	return NULL;
259 }
260 
261 /* get the path between the given NIDs;
262  * passing 0 to either @pin or @dac behaves as a wildcard
263  */
264 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
265 				      hda_nid_t from_nid, hda_nid_t to_nid)
266 {
267 	return get_nid_path(codec, from_nid, to_nid, 0);
268 }
269 EXPORT_SYMBOL_GPL(snd_hda_get_nid_path);
270 
271 /* get the index number corresponding to the path instance;
272  * the index starts from 1, for easier checking the invalid value
273  */
274 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
275 {
276 	struct hda_gen_spec *spec = codec->spec;
277 	struct nid_path *array = spec->paths.list;
278 	ssize_t idx;
279 
280 	if (!spec->paths.used)
281 		return 0;
282 	idx = path - array;
283 	if (idx < 0 || idx >= spec->paths.used)
284 		return 0;
285 	return idx + 1;
286 }
287 EXPORT_SYMBOL_GPL(snd_hda_get_path_idx);
288 
289 /* get the path instance corresponding to the given index number */
290 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
291 {
292 	struct hda_gen_spec *spec = codec->spec;
293 
294 	if (idx <= 0 || idx > spec->paths.used)
295 		return NULL;
296 	return snd_array_elem(&spec->paths, idx - 1);
297 }
298 EXPORT_SYMBOL_GPL(snd_hda_get_path_from_idx);
299 
300 /* check whether the given DAC is already found in any existing paths */
301 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
302 {
303 	struct hda_gen_spec *spec = codec->spec;
304 	int i;
305 
306 	for (i = 0; i < spec->paths.used; i++) {
307 		struct nid_path *path = snd_array_elem(&spec->paths, i);
308 		if (path->path[0] == nid)
309 			return true;
310 	}
311 	return false;
312 }
313 
314 /* check whether the given two widgets can be connected */
315 static bool is_reachable_path(struct hda_codec *codec,
316 			      hda_nid_t from_nid, hda_nid_t to_nid)
317 {
318 	if (!from_nid || !to_nid)
319 		return false;
320 	return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
321 }
322 
323 /* nid, dir and idx */
324 #define AMP_VAL_COMPARE_MASK	(0xffff | (1U << 18) | (0x0f << 19))
325 
326 /* check whether the given ctl is already assigned in any path elements */
327 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
328 {
329 	struct hda_gen_spec *spec = codec->spec;
330 	int i;
331 
332 	val &= AMP_VAL_COMPARE_MASK;
333 	for (i = 0; i < spec->paths.used; i++) {
334 		struct nid_path *path = snd_array_elem(&spec->paths, i);
335 		if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
336 			return true;
337 	}
338 	return false;
339 }
340 
341 /* check whether a control with the given (nid, dir, idx) was assigned */
342 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
343 			      int dir, int idx, int type)
344 {
345 	unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
346 	return is_ctl_used(codec, val, type);
347 }
348 
349 static void print_nid_path(struct hda_codec *codec,
350 			   const char *pfx, struct nid_path *path)
351 {
352 	char buf[40];
353 	char *pos = buf;
354 	int i;
355 
356 	*pos = 0;
357 	for (i = 0; i < path->depth; i++)
358 		pos += scnprintf(pos, sizeof(buf) - (pos - buf), "%s%02x",
359 				 pos != buf ? ":" : "",
360 				 path->path[i]);
361 
362 	codec_dbg(codec, "%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_update_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(codec, "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(codec, "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(codec, "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(codec, "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(fmt, ...)						\
1704 	codec_dbg(codec, fmt, ##__VA_ARGS__)
1705 #else
1706 #define debug_badness(fmt, ...)						\
1707 	do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1708 #endif
1709 
1710 #ifdef DEBUG_BADNESS
1711 static inline void print_nid_path_idx(struct hda_codec *codec,
1712 				      const char *pfx, int idx)
1713 {
1714 	struct nid_path *path;
1715 
1716 	path = snd_hda_get_path_from_idx(codec, idx);
1717 	if (path)
1718 		print_nid_path(codec, pfx, path);
1719 }
1720 
1721 static void debug_show_configs(struct hda_codec *codec,
1722 			       struct auto_pin_cfg *cfg)
1723 {
1724 	struct hda_gen_spec *spec = codec->spec;
1725 	static const char * const lo_type[3] = { "LO", "SP", "HP" };
1726 	int i;
1727 
1728 	debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1729 		      cfg->line_out_pins[0], cfg->line_out_pins[1],
1730 		      cfg->line_out_pins[2], cfg->line_out_pins[3],
1731 		      spec->multiout.dac_nids[0],
1732 		      spec->multiout.dac_nids[1],
1733 		      spec->multiout.dac_nids[2],
1734 		      spec->multiout.dac_nids[3],
1735 		      lo_type[cfg->line_out_type]);
1736 	for (i = 0; i < cfg->line_outs; i++)
1737 		print_nid_path_idx(codec, "  out", spec->out_paths[i]);
1738 	if (spec->multi_ios > 0)
1739 		debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1740 			      spec->multi_ios,
1741 			      spec->multi_io[0].pin, spec->multi_io[1].pin,
1742 			      spec->multi_io[0].dac, spec->multi_io[1].dac);
1743 	for (i = 0; i < spec->multi_ios; i++)
1744 		print_nid_path_idx(codec, "  mio",
1745 				   spec->out_paths[cfg->line_outs + i]);
1746 	if (cfg->hp_outs)
1747 		debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1748 		      cfg->hp_pins[0], cfg->hp_pins[1],
1749 		      cfg->hp_pins[2], cfg->hp_pins[3],
1750 		      spec->multiout.hp_out_nid[0],
1751 		      spec->multiout.hp_out_nid[1],
1752 		      spec->multiout.hp_out_nid[2],
1753 		      spec->multiout.hp_out_nid[3]);
1754 	for (i = 0; i < cfg->hp_outs; i++)
1755 		print_nid_path_idx(codec, "  hp ", spec->hp_paths[i]);
1756 	if (cfg->speaker_outs)
1757 		debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1758 		      cfg->speaker_pins[0], cfg->speaker_pins[1],
1759 		      cfg->speaker_pins[2], cfg->speaker_pins[3],
1760 		      spec->multiout.extra_out_nid[0],
1761 		      spec->multiout.extra_out_nid[1],
1762 		      spec->multiout.extra_out_nid[2],
1763 		      spec->multiout.extra_out_nid[3]);
1764 	for (i = 0; i < cfg->speaker_outs; i++)
1765 		print_nid_path_idx(codec, "  spk", spec->speaker_paths[i]);
1766 	for (i = 0; i < 3; i++)
1767 		print_nid_path_idx(codec, "  mix", spec->aamix_out_paths[i]);
1768 }
1769 #else
1770 #define debug_show_configs(codec, cfg) /* NOP */
1771 #endif
1772 
1773 /* find all available DACs of the codec */
1774 static void fill_all_dac_nids(struct hda_codec *codec)
1775 {
1776 	struct hda_gen_spec *spec = codec->spec;
1777 	int i;
1778 	hda_nid_t nid = codec->start_nid;
1779 
1780 	spec->num_all_dacs = 0;
1781 	memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1782 	for (i = 0; i < codec->num_nodes; i++, nid++) {
1783 		if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1784 			continue;
1785 		if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1786 			codec_err(codec, "Too many DACs!\n");
1787 			break;
1788 		}
1789 		spec->all_dacs[spec->num_all_dacs++] = nid;
1790 	}
1791 }
1792 
1793 static int parse_output_paths(struct hda_codec *codec)
1794 {
1795 	struct hda_gen_spec *spec = codec->spec;
1796 	struct auto_pin_cfg *cfg = &spec->autocfg;
1797 	struct auto_pin_cfg *best_cfg;
1798 	unsigned int val;
1799 	int best_badness = INT_MAX;
1800 	int badness;
1801 	bool fill_hardwired = true, fill_mio_first = true;
1802 	bool best_wired = true, best_mio = true;
1803 	bool hp_spk_swapped = false;
1804 
1805 	best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1806 	if (!best_cfg)
1807 		return -ENOMEM;
1808 	*best_cfg = *cfg;
1809 
1810 	for (;;) {
1811 		badness = fill_and_eval_dacs(codec, fill_hardwired,
1812 					     fill_mio_first);
1813 		if (badness < 0) {
1814 			kfree(best_cfg);
1815 			return badness;
1816 		}
1817 		debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1818 			      cfg->line_out_type, fill_hardwired, fill_mio_first,
1819 			      badness);
1820 		debug_show_configs(codec, cfg);
1821 		if (badness < best_badness) {
1822 			best_badness = badness;
1823 			*best_cfg = *cfg;
1824 			best_wired = fill_hardwired;
1825 			best_mio = fill_mio_first;
1826 		}
1827 		if (!badness)
1828 			break;
1829 		fill_mio_first = !fill_mio_first;
1830 		if (!fill_mio_first)
1831 			continue;
1832 		fill_hardwired = !fill_hardwired;
1833 		if (!fill_hardwired)
1834 			continue;
1835 		if (hp_spk_swapped)
1836 			break;
1837 		hp_spk_swapped = true;
1838 		if (cfg->speaker_outs > 0 &&
1839 		    cfg->line_out_type == AUTO_PIN_HP_OUT) {
1840 			cfg->hp_outs = cfg->line_outs;
1841 			memcpy(cfg->hp_pins, cfg->line_out_pins,
1842 			       sizeof(cfg->hp_pins));
1843 			cfg->line_outs = cfg->speaker_outs;
1844 			memcpy(cfg->line_out_pins, cfg->speaker_pins,
1845 			       sizeof(cfg->speaker_pins));
1846 			cfg->speaker_outs = 0;
1847 			memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1848 			cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1849 			fill_hardwired = true;
1850 			continue;
1851 		}
1852 		if (cfg->hp_outs > 0 &&
1853 		    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1854 			cfg->speaker_outs = cfg->line_outs;
1855 			memcpy(cfg->speaker_pins, cfg->line_out_pins,
1856 			       sizeof(cfg->speaker_pins));
1857 			cfg->line_outs = cfg->hp_outs;
1858 			memcpy(cfg->line_out_pins, cfg->hp_pins,
1859 			       sizeof(cfg->hp_pins));
1860 			cfg->hp_outs = 0;
1861 			memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1862 			cfg->line_out_type = AUTO_PIN_HP_OUT;
1863 			fill_hardwired = true;
1864 			continue;
1865 		}
1866 		break;
1867 	}
1868 
1869 	if (badness) {
1870 		debug_badness("==> restoring best_cfg\n");
1871 		*cfg = *best_cfg;
1872 		fill_and_eval_dacs(codec, best_wired, best_mio);
1873 	}
1874 	debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1875 		      cfg->line_out_type, best_wired, best_mio);
1876 	debug_show_configs(codec, cfg);
1877 
1878 	if (cfg->line_out_pins[0]) {
1879 		struct nid_path *path;
1880 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
1881 		if (path)
1882 			spec->vmaster_nid = look_for_out_vol_nid(codec, path);
1883 		if (spec->vmaster_nid)
1884 			snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1885 						HDA_OUTPUT, spec->vmaster_tlv);
1886 	}
1887 
1888 	/* set initial pinctl targets */
1889 	if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
1890 		val = PIN_HP;
1891 	else
1892 		val = PIN_OUT;
1893 	set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
1894 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1895 		set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
1896 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1897 		val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
1898 		set_pin_targets(codec, cfg->speaker_outs,
1899 				cfg->speaker_pins, val);
1900 	}
1901 
1902 	/* clear indep_hp flag if not available */
1903 	if (spec->indep_hp && !indep_hp_possible(codec))
1904 		spec->indep_hp = 0;
1905 
1906 	kfree(best_cfg);
1907 	return 0;
1908 }
1909 
1910 /* add playback controls from the parsed DAC table */
1911 static int create_multi_out_ctls(struct hda_codec *codec,
1912 				 const struct auto_pin_cfg *cfg)
1913 {
1914 	struct hda_gen_spec *spec = codec->spec;
1915 	int i, err, noutputs;
1916 
1917 	noutputs = cfg->line_outs;
1918 	if (spec->multi_ios > 0 && cfg->line_outs < 3)
1919 		noutputs += spec->multi_ios;
1920 
1921 	for (i = 0; i < noutputs; i++) {
1922 		const char *name;
1923 		int index;
1924 		struct nid_path *path;
1925 
1926 		path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1927 		if (!path)
1928 			continue;
1929 
1930 		name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
1931 		if (!name || !strcmp(name, "CLFE")) {
1932 			/* Center/LFE */
1933 			err = add_vol_ctl(codec, "Center", 0, 1, path);
1934 			if (err < 0)
1935 				return err;
1936 			err = add_vol_ctl(codec, "LFE", 0, 2, path);
1937 			if (err < 0)
1938 				return err;
1939 		} else {
1940 			err = add_stereo_vol(codec, name, index, path);
1941 			if (err < 0)
1942 				return err;
1943 		}
1944 
1945 		name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
1946 		if (!name || !strcmp(name, "CLFE")) {
1947 			err = add_sw_ctl(codec, "Center", 0, 1, path);
1948 			if (err < 0)
1949 				return err;
1950 			err = add_sw_ctl(codec, "LFE", 0, 2, path);
1951 			if (err < 0)
1952 				return err;
1953 		} else {
1954 			err = add_stereo_sw(codec, name, index, path);
1955 			if (err < 0)
1956 				return err;
1957 		}
1958 	}
1959 	return 0;
1960 }
1961 
1962 static int create_extra_out(struct hda_codec *codec, int path_idx,
1963 			    const char *pfx, int cidx)
1964 {
1965 	struct nid_path *path;
1966 	int err;
1967 
1968 	path = snd_hda_get_path_from_idx(codec, path_idx);
1969 	if (!path)
1970 		return 0;
1971 	err = add_stereo_vol(codec, pfx, cidx, path);
1972 	if (err < 0)
1973 		return err;
1974 	err = add_stereo_sw(codec, pfx, cidx, path);
1975 	if (err < 0)
1976 		return err;
1977 	return 0;
1978 }
1979 
1980 /* add playback controls for speaker and HP outputs */
1981 static int create_extra_outs(struct hda_codec *codec, int num_pins,
1982 			     const int *paths, const char *pfx)
1983 {
1984 	int i;
1985 
1986 	for (i = 0; i < num_pins; i++) {
1987 		const char *name;
1988 		char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1989 		int err, idx = 0;
1990 
1991 		if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
1992 			name = "Bass Speaker";
1993 		else if (num_pins >= 3) {
1994 			snprintf(tmp, sizeof(tmp), "%s %s",
1995 				 pfx, channel_name[i]);
1996 			name = tmp;
1997 		} else {
1998 			name = pfx;
1999 			idx = i;
2000 		}
2001 		err = create_extra_out(codec, paths[i], name, idx);
2002 		if (err < 0)
2003 			return err;
2004 	}
2005 	return 0;
2006 }
2007 
2008 static int create_hp_out_ctls(struct hda_codec *codec)
2009 {
2010 	struct hda_gen_spec *spec = codec->spec;
2011 	return create_extra_outs(codec, spec->autocfg.hp_outs,
2012 				 spec->hp_paths,
2013 				 "Headphone");
2014 }
2015 
2016 static int create_speaker_out_ctls(struct hda_codec *codec)
2017 {
2018 	struct hda_gen_spec *spec = codec->spec;
2019 	return create_extra_outs(codec, spec->autocfg.speaker_outs,
2020 				 spec->speaker_paths,
2021 				 "Speaker");
2022 }
2023 
2024 /*
2025  * independent HP controls
2026  */
2027 
2028 static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack);
2029 static int indep_hp_info(struct snd_kcontrol *kcontrol,
2030 			 struct snd_ctl_elem_info *uinfo)
2031 {
2032 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
2033 }
2034 
2035 static int indep_hp_get(struct snd_kcontrol *kcontrol,
2036 			struct snd_ctl_elem_value *ucontrol)
2037 {
2038 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2039 	struct hda_gen_spec *spec = codec->spec;
2040 	ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2041 	return 0;
2042 }
2043 
2044 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2045 			       int nomix_path_idx, int mix_path_idx,
2046 			       int out_type);
2047 
2048 static int indep_hp_put(struct snd_kcontrol *kcontrol,
2049 			struct snd_ctl_elem_value *ucontrol)
2050 {
2051 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2052 	struct hda_gen_spec *spec = codec->spec;
2053 	unsigned int select = ucontrol->value.enumerated.item[0];
2054 	int ret = 0;
2055 
2056 	mutex_lock(&spec->pcm_mutex);
2057 	if (spec->active_streams) {
2058 		ret = -EBUSY;
2059 		goto unlock;
2060 	}
2061 
2062 	if (spec->indep_hp_enabled != select) {
2063 		hda_nid_t *dacp;
2064 		if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2065 			dacp = &spec->private_dac_nids[0];
2066 		else
2067 			dacp = &spec->multiout.hp_out_nid[0];
2068 
2069 		/* update HP aamix paths in case it conflicts with indep HP */
2070 		if (spec->have_aamix_ctl) {
2071 			if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2072 				update_aamix_paths(codec, spec->aamix_mode,
2073 						   spec->out_paths[0],
2074 						   spec->aamix_out_paths[0],
2075 						   spec->autocfg.line_out_type);
2076 			else
2077 				update_aamix_paths(codec, spec->aamix_mode,
2078 						   spec->hp_paths[0],
2079 						   spec->aamix_out_paths[1],
2080 						   AUTO_PIN_HP_OUT);
2081 		}
2082 
2083 		spec->indep_hp_enabled = select;
2084 		if (spec->indep_hp_enabled)
2085 			*dacp = 0;
2086 		else
2087 			*dacp = spec->alt_dac_nid;
2088 
2089 		call_hp_automute(codec, NULL);
2090 		ret = 1;
2091 	}
2092  unlock:
2093 	mutex_unlock(&spec->pcm_mutex);
2094 	return ret;
2095 }
2096 
2097 static const struct snd_kcontrol_new indep_hp_ctl = {
2098 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2099 	.name = "Independent HP",
2100 	.info = indep_hp_info,
2101 	.get = indep_hp_get,
2102 	.put = indep_hp_put,
2103 };
2104 
2105 
2106 static int create_indep_hp_ctls(struct hda_codec *codec)
2107 {
2108 	struct hda_gen_spec *spec = codec->spec;
2109 	hda_nid_t dac;
2110 
2111 	if (!spec->indep_hp)
2112 		return 0;
2113 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2114 		dac = spec->multiout.dac_nids[0];
2115 	else
2116 		dac = spec->multiout.hp_out_nid[0];
2117 	if (!dac) {
2118 		spec->indep_hp = 0;
2119 		return 0;
2120 	}
2121 
2122 	spec->indep_hp_enabled = false;
2123 	spec->alt_dac_nid = dac;
2124 	if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2125 		return -ENOMEM;
2126 	return 0;
2127 }
2128 
2129 /*
2130  * channel mode enum control
2131  */
2132 
2133 static int ch_mode_info(struct snd_kcontrol *kcontrol,
2134 			struct snd_ctl_elem_info *uinfo)
2135 {
2136 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2137 	struct hda_gen_spec *spec = codec->spec;
2138 	int chs;
2139 
2140 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2141 	uinfo->count = 1;
2142 	uinfo->value.enumerated.items = spec->multi_ios + 1;
2143 	if (uinfo->value.enumerated.item > spec->multi_ios)
2144 		uinfo->value.enumerated.item = spec->multi_ios;
2145 	chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2146 	sprintf(uinfo->value.enumerated.name, "%dch", chs);
2147 	return 0;
2148 }
2149 
2150 static int ch_mode_get(struct snd_kcontrol *kcontrol,
2151 		       struct snd_ctl_elem_value *ucontrol)
2152 {
2153 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2154 	struct hda_gen_spec *spec = codec->spec;
2155 	ucontrol->value.enumerated.item[0] =
2156 		(spec->ext_channel_count - spec->min_channel_count) / 2;
2157 	return 0;
2158 }
2159 
2160 static inline struct nid_path *
2161 get_multiio_path(struct hda_codec *codec, int idx)
2162 {
2163 	struct hda_gen_spec *spec = codec->spec;
2164 	return snd_hda_get_path_from_idx(codec,
2165 		spec->out_paths[spec->autocfg.line_outs + idx]);
2166 }
2167 
2168 static void update_automute_all(struct hda_codec *codec);
2169 
2170 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2171  * used for output paths
2172  */
2173 static bool aamix_default(struct hda_gen_spec *spec)
2174 {
2175 	return !spec->have_aamix_ctl || spec->aamix_mode;
2176 }
2177 
2178 static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2179 {
2180 	struct hda_gen_spec *spec = codec->spec;
2181 	hda_nid_t nid = spec->multi_io[idx].pin;
2182 	struct nid_path *path;
2183 
2184 	path = get_multiio_path(codec, idx);
2185 	if (!path)
2186 		return -EINVAL;
2187 
2188 	if (path->active == output)
2189 		return 0;
2190 
2191 	if (output) {
2192 		set_pin_target(codec, nid, PIN_OUT, true);
2193 		snd_hda_activate_path(codec, path, true, aamix_default(spec));
2194 		set_pin_eapd(codec, nid, true);
2195 	} else {
2196 		set_pin_eapd(codec, nid, false);
2197 		snd_hda_activate_path(codec, path, false, aamix_default(spec));
2198 		set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2199 		path_power_down_sync(codec, path);
2200 	}
2201 
2202 	/* update jack retasking in case it modifies any of them */
2203 	update_automute_all(codec);
2204 
2205 	return 0;
2206 }
2207 
2208 static int ch_mode_put(struct snd_kcontrol *kcontrol,
2209 		       struct snd_ctl_elem_value *ucontrol)
2210 {
2211 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2212 	struct hda_gen_spec *spec = codec->spec;
2213 	int i, ch;
2214 
2215 	ch = ucontrol->value.enumerated.item[0];
2216 	if (ch < 0 || ch > spec->multi_ios)
2217 		return -EINVAL;
2218 	if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2219 		return 0;
2220 	spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2221 	for (i = 0; i < spec->multi_ios; i++)
2222 		set_multi_io(codec, i, i < ch);
2223 	spec->multiout.max_channels = max(spec->ext_channel_count,
2224 					  spec->const_channel_count);
2225 	if (spec->need_dac_fix)
2226 		spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2227 	return 1;
2228 }
2229 
2230 static const struct snd_kcontrol_new channel_mode_enum = {
2231 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2232 	.name = "Channel Mode",
2233 	.info = ch_mode_info,
2234 	.get = ch_mode_get,
2235 	.put = ch_mode_put,
2236 };
2237 
2238 static int create_multi_channel_mode(struct hda_codec *codec)
2239 {
2240 	struct hda_gen_spec *spec = codec->spec;
2241 
2242 	if (spec->multi_ios > 0) {
2243 		if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2244 			return -ENOMEM;
2245 	}
2246 	return 0;
2247 }
2248 
2249 /*
2250  * aamix loopback enable/disable switch
2251  */
2252 
2253 #define loopback_mixing_info	indep_hp_info
2254 
2255 static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2256 			       struct snd_ctl_elem_value *ucontrol)
2257 {
2258 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2259 	struct hda_gen_spec *spec = codec->spec;
2260 	ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2261 	return 0;
2262 }
2263 
2264 static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2265 			       int nomix_path_idx, int mix_path_idx,
2266 			       int out_type)
2267 {
2268 	struct hda_gen_spec *spec = codec->spec;
2269 	struct nid_path *nomix_path, *mix_path;
2270 
2271 	nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2272 	mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2273 	if (!nomix_path || !mix_path)
2274 		return;
2275 
2276 	/* if HP aamix path is driven from a different DAC and the
2277 	 * independent HP mode is ON, can't turn on aamix path
2278 	 */
2279 	if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2280 	    mix_path->path[0] != spec->alt_dac_nid)
2281 		do_mix = false;
2282 
2283 	if (do_mix) {
2284 		snd_hda_activate_path(codec, nomix_path, false, true);
2285 		snd_hda_activate_path(codec, mix_path, true, true);
2286 		path_power_down_sync(codec, nomix_path);
2287 	} else {
2288 		snd_hda_activate_path(codec, mix_path, false, false);
2289 		snd_hda_activate_path(codec, nomix_path, true, false);
2290 		path_power_down_sync(codec, mix_path);
2291 	}
2292 }
2293 
2294 static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2295 			       struct snd_ctl_elem_value *ucontrol)
2296 {
2297 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2298 	struct hda_gen_spec *spec = codec->spec;
2299 	unsigned int val = ucontrol->value.enumerated.item[0];
2300 
2301 	if (val == spec->aamix_mode)
2302 		return 0;
2303 	spec->aamix_mode = val;
2304 	update_aamix_paths(codec, val, spec->out_paths[0],
2305 			   spec->aamix_out_paths[0],
2306 			   spec->autocfg.line_out_type);
2307 	update_aamix_paths(codec, val, spec->hp_paths[0],
2308 			   spec->aamix_out_paths[1],
2309 			   AUTO_PIN_HP_OUT);
2310 	update_aamix_paths(codec, val, spec->speaker_paths[0],
2311 			   spec->aamix_out_paths[2],
2312 			   AUTO_PIN_SPEAKER_OUT);
2313 	return 1;
2314 }
2315 
2316 static const struct snd_kcontrol_new loopback_mixing_enum = {
2317 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2318 	.name = "Loopback Mixing",
2319 	.info = loopback_mixing_info,
2320 	.get = loopback_mixing_get,
2321 	.put = loopback_mixing_put,
2322 };
2323 
2324 static int create_loopback_mixing_ctl(struct hda_codec *codec)
2325 {
2326 	struct hda_gen_spec *spec = codec->spec;
2327 
2328 	if (!spec->mixer_nid)
2329 		return 0;
2330 	if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2331 	      spec->aamix_out_paths[2]))
2332 		return 0;
2333 	if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2334 		return -ENOMEM;
2335 	spec->have_aamix_ctl = 1;
2336 	return 0;
2337 }
2338 
2339 /*
2340  * shared headphone/mic handling
2341  */
2342 
2343 static void call_update_outputs(struct hda_codec *codec);
2344 
2345 /* for shared I/O, change the pin-control accordingly */
2346 static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2347 {
2348 	struct hda_gen_spec *spec = codec->spec;
2349 	bool as_mic;
2350 	unsigned int val;
2351 	hda_nid_t pin;
2352 
2353 	pin = spec->hp_mic_pin;
2354 	as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2355 
2356 	if (!force) {
2357 		val = snd_hda_codec_get_pin_target(codec, pin);
2358 		if (as_mic) {
2359 			if (val & PIN_IN)
2360 				return;
2361 		} else {
2362 			if (val & PIN_OUT)
2363 				return;
2364 		}
2365 	}
2366 
2367 	val = snd_hda_get_default_vref(codec, pin);
2368 	/* if the HP pin doesn't support VREF and the codec driver gives an
2369 	 * alternative pin, set up the VREF on that pin instead
2370 	 */
2371 	if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2372 		const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2373 		unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2374 		if (vref_val != AC_PINCTL_VREF_HIZ)
2375 			snd_hda_set_pin_ctl_cache(codec, vref_pin,
2376 						  PIN_IN | (as_mic ? vref_val : 0));
2377 	}
2378 
2379 	if (!spec->hp_mic_jack_modes) {
2380 		if (as_mic)
2381 			val |= PIN_IN;
2382 		else
2383 			val = PIN_HP;
2384 		set_pin_target(codec, pin, val, true);
2385 		call_hp_automute(codec, NULL);
2386 	}
2387 }
2388 
2389 /* create a shared input with the headphone out */
2390 static int create_hp_mic(struct hda_codec *codec)
2391 {
2392 	struct hda_gen_spec *spec = codec->spec;
2393 	struct auto_pin_cfg *cfg = &spec->autocfg;
2394 	unsigned int defcfg;
2395 	hda_nid_t nid;
2396 
2397 	if (!spec->hp_mic) {
2398 		if (spec->suppress_hp_mic_detect)
2399 			return 0;
2400 		/* automatic detection: only if no input or a single internal
2401 		 * input pin is found, try to detect the shared hp/mic
2402 		 */
2403 		if (cfg->num_inputs > 1)
2404 			return 0;
2405 		else if (cfg->num_inputs == 1) {
2406 			defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2407 			if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2408 				return 0;
2409 		}
2410 	}
2411 
2412 	spec->hp_mic = 0; /* clear once */
2413 	if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2414 		return 0;
2415 
2416 	nid = 0;
2417 	if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2418 		nid = cfg->line_out_pins[0];
2419 	else if (cfg->hp_outs > 0)
2420 		nid = cfg->hp_pins[0];
2421 	if (!nid)
2422 		return 0;
2423 
2424 	if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2425 		return 0; /* no input */
2426 
2427 	cfg->inputs[cfg->num_inputs].pin = nid;
2428 	cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2429 	cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2430 	cfg->num_inputs++;
2431 	spec->hp_mic = 1;
2432 	spec->hp_mic_pin = nid;
2433 	/* we can't handle auto-mic together with HP-mic */
2434 	spec->suppress_auto_mic = 1;
2435 	codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid);
2436 	return 0;
2437 }
2438 
2439 /*
2440  * output jack mode
2441  */
2442 
2443 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2444 
2445 static const char * const out_jack_texts[] = {
2446 	"Line Out", "Headphone Out",
2447 };
2448 
2449 static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2450 			      struct snd_ctl_elem_info *uinfo)
2451 {
2452 	return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2453 }
2454 
2455 static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2456 			     struct snd_ctl_elem_value *ucontrol)
2457 {
2458 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2459 	hda_nid_t nid = kcontrol->private_value;
2460 	if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2461 		ucontrol->value.enumerated.item[0] = 1;
2462 	else
2463 		ucontrol->value.enumerated.item[0] = 0;
2464 	return 0;
2465 }
2466 
2467 static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2468 			     struct snd_ctl_elem_value *ucontrol)
2469 {
2470 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2471 	hda_nid_t nid = kcontrol->private_value;
2472 	unsigned int val;
2473 
2474 	val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2475 	if (snd_hda_codec_get_pin_target(codec, nid) == val)
2476 		return 0;
2477 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2478 	return 1;
2479 }
2480 
2481 static const struct snd_kcontrol_new out_jack_mode_enum = {
2482 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2483 	.info = out_jack_mode_info,
2484 	.get = out_jack_mode_get,
2485 	.put = out_jack_mode_put,
2486 };
2487 
2488 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2489 {
2490 	struct hda_gen_spec *spec = codec->spec;
2491 	int i;
2492 
2493 	for (i = 0; i < spec->kctls.used; i++) {
2494 		struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2495 		if (!strcmp(kctl->name, name) && kctl->index == idx)
2496 			return true;
2497 	}
2498 	return false;
2499 }
2500 
2501 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2502 			       char *name, size_t name_len)
2503 {
2504 	struct hda_gen_spec *spec = codec->spec;
2505 	int idx = 0;
2506 
2507 	snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2508 	strlcat(name, " Jack Mode", name_len);
2509 
2510 	for (; find_kctl_name(codec, name, idx); idx++)
2511 		;
2512 }
2513 
2514 static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2515 {
2516 	struct hda_gen_spec *spec = codec->spec;
2517 	if (spec->add_jack_modes) {
2518 		unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2519 		if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2520 			return 2;
2521 	}
2522 	return 1;
2523 }
2524 
2525 static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2526 				 hda_nid_t *pins)
2527 {
2528 	struct hda_gen_spec *spec = codec->spec;
2529 	int i;
2530 
2531 	for (i = 0; i < num_pins; i++) {
2532 		hda_nid_t pin = pins[i];
2533 		if (pin == spec->hp_mic_pin)
2534 			continue;
2535 		if (get_out_jack_num_items(codec, pin) > 1) {
2536 			struct snd_kcontrol_new *knew;
2537 			char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2538 			get_jack_mode_name(codec, pin, name, sizeof(name));
2539 			knew = snd_hda_gen_add_kctl(spec, name,
2540 						    &out_jack_mode_enum);
2541 			if (!knew)
2542 				return -ENOMEM;
2543 			knew->private_value = pin;
2544 		}
2545 	}
2546 
2547 	return 0;
2548 }
2549 
2550 /*
2551  * input jack mode
2552  */
2553 
2554 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2555 #define NUM_VREFS	6
2556 
2557 static const char * const vref_texts[NUM_VREFS] = {
2558 	"Line In", "Mic 50pc Bias", "Mic 0V Bias",
2559 	"", "Mic 80pc Bias", "Mic 100pc Bias"
2560 };
2561 
2562 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2563 {
2564 	unsigned int pincap;
2565 
2566 	pincap = snd_hda_query_pin_caps(codec, pin);
2567 	pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2568 	/* filter out unusual vrefs */
2569 	pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2570 	return pincap;
2571 }
2572 
2573 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2574 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2575 {
2576 	unsigned int i, n = 0;
2577 
2578 	for (i = 0; i < NUM_VREFS; i++) {
2579 		if (vref_caps & (1 << i)) {
2580 			if (n == item_idx)
2581 				return i;
2582 			n++;
2583 		}
2584 	}
2585 	return 0;
2586 }
2587 
2588 /* convert back from the vref ctl index to the enum item index */
2589 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2590 {
2591 	unsigned int i, n = 0;
2592 
2593 	for (i = 0; i < NUM_VREFS; i++) {
2594 		if (i == idx)
2595 			return n;
2596 		if (vref_caps & (1 << i))
2597 			n++;
2598 	}
2599 	return 0;
2600 }
2601 
2602 static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2603 			     struct snd_ctl_elem_info *uinfo)
2604 {
2605 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2606 	hda_nid_t nid = kcontrol->private_value;
2607 	unsigned int vref_caps = get_vref_caps(codec, nid);
2608 
2609 	snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2610 				 vref_texts);
2611 	/* set the right text */
2612 	strcpy(uinfo->value.enumerated.name,
2613 	       vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2614 	return 0;
2615 }
2616 
2617 static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2618 			    struct snd_ctl_elem_value *ucontrol)
2619 {
2620 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2621 	hda_nid_t nid = kcontrol->private_value;
2622 	unsigned int vref_caps = get_vref_caps(codec, nid);
2623 	unsigned int idx;
2624 
2625 	idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2626 	ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2627 	return 0;
2628 }
2629 
2630 static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2631 			    struct snd_ctl_elem_value *ucontrol)
2632 {
2633 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2634 	hda_nid_t nid = kcontrol->private_value;
2635 	unsigned int vref_caps = get_vref_caps(codec, nid);
2636 	unsigned int val, idx;
2637 
2638 	val = snd_hda_codec_get_pin_target(codec, nid);
2639 	idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2640 	if (idx == ucontrol->value.enumerated.item[0])
2641 		return 0;
2642 
2643 	val &= ~AC_PINCTL_VREFEN;
2644 	val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2645 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2646 	return 1;
2647 }
2648 
2649 static const struct snd_kcontrol_new in_jack_mode_enum = {
2650 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2651 	.info = in_jack_mode_info,
2652 	.get = in_jack_mode_get,
2653 	.put = in_jack_mode_put,
2654 };
2655 
2656 static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2657 {
2658 	struct hda_gen_spec *spec = codec->spec;
2659 	int nitems = 0;
2660 	if (spec->add_jack_modes)
2661 		nitems = hweight32(get_vref_caps(codec, pin));
2662 	return nitems ? nitems : 1;
2663 }
2664 
2665 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2666 {
2667 	struct hda_gen_spec *spec = codec->spec;
2668 	struct snd_kcontrol_new *knew;
2669 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2670 	unsigned int defcfg;
2671 
2672 	if (pin == spec->hp_mic_pin)
2673 		return 0; /* already done in create_out_jack_mode() */
2674 
2675 	/* no jack mode for fixed pins */
2676 	defcfg = snd_hda_codec_get_pincfg(codec, pin);
2677 	if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2678 		return 0;
2679 
2680 	/* no multiple vref caps? */
2681 	if (get_in_jack_num_items(codec, pin) <= 1)
2682 		return 0;
2683 
2684 	get_jack_mode_name(codec, pin, name, sizeof(name));
2685 	knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2686 	if (!knew)
2687 		return -ENOMEM;
2688 	knew->private_value = pin;
2689 	return 0;
2690 }
2691 
2692 /*
2693  * HP/mic shared jack mode
2694  */
2695 static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2696 				 struct snd_ctl_elem_info *uinfo)
2697 {
2698 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2699 	hda_nid_t nid = kcontrol->private_value;
2700 	int out_jacks = get_out_jack_num_items(codec, nid);
2701 	int in_jacks = get_in_jack_num_items(codec, nid);
2702 	const char *text = NULL;
2703 	int idx;
2704 
2705 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2706 	uinfo->count = 1;
2707 	uinfo->value.enumerated.items = out_jacks + in_jacks;
2708 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2709 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2710 	idx = uinfo->value.enumerated.item;
2711 	if (idx < out_jacks) {
2712 		if (out_jacks > 1)
2713 			text = out_jack_texts[idx];
2714 		else
2715 			text = "Headphone Out";
2716 	} else {
2717 		idx -= out_jacks;
2718 		if (in_jacks > 1) {
2719 			unsigned int vref_caps = get_vref_caps(codec, nid);
2720 			text = vref_texts[get_vref_idx(vref_caps, idx)];
2721 		} else
2722 			text = "Mic In";
2723 	}
2724 
2725 	strcpy(uinfo->value.enumerated.name, text);
2726 	return 0;
2727 }
2728 
2729 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2730 {
2731 	int out_jacks = get_out_jack_num_items(codec, nid);
2732 	int in_jacks = get_in_jack_num_items(codec, nid);
2733 	unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2734 	int idx = 0;
2735 
2736 	if (val & PIN_OUT) {
2737 		if (out_jacks > 1 && val == PIN_HP)
2738 			idx = 1;
2739 	} else if (val & PIN_IN) {
2740 		idx = out_jacks;
2741 		if (in_jacks > 1) {
2742 			unsigned int vref_caps = get_vref_caps(codec, nid);
2743 			val &= AC_PINCTL_VREFEN;
2744 			idx += cvt_from_vref_idx(vref_caps, val);
2745 		}
2746 	}
2747 	return idx;
2748 }
2749 
2750 static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2751 				struct snd_ctl_elem_value *ucontrol)
2752 {
2753 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2754 	hda_nid_t nid = kcontrol->private_value;
2755 	ucontrol->value.enumerated.item[0] =
2756 		get_cur_hp_mic_jack_mode(codec, nid);
2757 	return 0;
2758 }
2759 
2760 static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2761 				struct snd_ctl_elem_value *ucontrol)
2762 {
2763 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2764 	hda_nid_t nid = kcontrol->private_value;
2765 	int out_jacks = get_out_jack_num_items(codec, nid);
2766 	int in_jacks = get_in_jack_num_items(codec, nid);
2767 	unsigned int val, oldval, idx;
2768 
2769 	oldval = get_cur_hp_mic_jack_mode(codec, nid);
2770 	idx = ucontrol->value.enumerated.item[0];
2771 	if (oldval == idx)
2772 		return 0;
2773 
2774 	if (idx < out_jacks) {
2775 		if (out_jacks > 1)
2776 			val = idx ? PIN_HP : PIN_OUT;
2777 		else
2778 			val = PIN_HP;
2779 	} else {
2780 		idx -= out_jacks;
2781 		if (in_jacks > 1) {
2782 			unsigned int vref_caps = get_vref_caps(codec, nid);
2783 			val = snd_hda_codec_get_pin_target(codec, nid);
2784 			val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2785 			val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2786 		} else
2787 			val = snd_hda_get_default_vref(codec, nid) | PIN_IN;
2788 	}
2789 	snd_hda_set_pin_ctl_cache(codec, nid, val);
2790 	call_hp_automute(codec, NULL);
2791 
2792 	return 1;
2793 }
2794 
2795 static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2796 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2797 	.info = hp_mic_jack_mode_info,
2798 	.get = hp_mic_jack_mode_get,
2799 	.put = hp_mic_jack_mode_put,
2800 };
2801 
2802 static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2803 {
2804 	struct hda_gen_spec *spec = codec->spec;
2805 	struct snd_kcontrol_new *knew;
2806 
2807 	knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2808 				    &hp_mic_jack_mode_enum);
2809 	if (!knew)
2810 		return -ENOMEM;
2811 	knew->private_value = pin;
2812 	spec->hp_mic_jack_modes = 1;
2813 	return 0;
2814 }
2815 
2816 /*
2817  * Parse input paths
2818  */
2819 
2820 /* add the powersave loopback-list entry */
2821 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2822 {
2823 	struct hda_amp_list *list;
2824 
2825 	list = snd_array_new(&spec->loopback_list);
2826 	if (!list)
2827 		return -ENOMEM;
2828 	list->nid = mix;
2829 	list->dir = HDA_INPUT;
2830 	list->idx = idx;
2831 	spec->loopback.amplist = spec->loopback_list.list;
2832 	return 0;
2833 }
2834 
2835 /* return true if either a volume or a mute amp is found for the given
2836  * aamix path; the amp has to be either in the mixer node or its direct leaf
2837  */
2838 static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
2839 				   hda_nid_t pin, unsigned int *mix_val,
2840 				   unsigned int *mute_val)
2841 {
2842 	int idx, num_conns;
2843 	const hda_nid_t *list;
2844 	hda_nid_t nid;
2845 
2846 	idx = snd_hda_get_conn_index(codec, mix_nid, pin, true);
2847 	if (idx < 0)
2848 		return false;
2849 
2850 	*mix_val = *mute_val = 0;
2851 	if (nid_has_volume(codec, mix_nid, HDA_INPUT))
2852 		*mix_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2853 	if (nid_has_mute(codec, mix_nid, HDA_INPUT))
2854 		*mute_val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2855 	if (*mix_val && *mute_val)
2856 		return true;
2857 
2858 	/* check leaf node */
2859 	num_conns = snd_hda_get_conn_list(codec, mix_nid, &list);
2860 	if (num_conns < idx)
2861 		return false;
2862 	nid = list[idx];
2863 	if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
2864 	    !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
2865 		*mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2866 	if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
2867 	    !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
2868 		*mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
2869 
2870 	return *mix_val || *mute_val;
2871 }
2872 
2873 /* create input playback/capture controls for the given pin */
2874 static int new_analog_input(struct hda_codec *codec, int input_idx,
2875 			    hda_nid_t pin, const char *ctlname, int ctlidx,
2876 			    hda_nid_t mix_nid)
2877 {
2878 	struct hda_gen_spec *spec = codec->spec;
2879 	struct nid_path *path;
2880 	unsigned int mix_val, mute_val;
2881 	int err, idx;
2882 
2883 	if (!look_for_mix_leaf_ctls(codec, mix_nid, pin, &mix_val, &mute_val))
2884 		return 0;
2885 
2886 	path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2887 	if (!path)
2888 		return -EINVAL;
2889 	print_nid_path(codec, "loopback", path);
2890 	spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2891 
2892 	idx = path->idx[path->depth - 1];
2893 	if (mix_val) {
2894 		err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
2895 		if (err < 0)
2896 			return err;
2897 		path->ctls[NID_PATH_VOL_CTL] = mix_val;
2898 	}
2899 
2900 	if (mute_val) {
2901 		err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
2902 		if (err < 0)
2903 			return err;
2904 		path->ctls[NID_PATH_MUTE_CTL] = mute_val;
2905 	}
2906 
2907 	path->active = true;
2908 	err = add_loopback_list(spec, mix_nid, idx);
2909 	if (err < 0)
2910 		return err;
2911 
2912 	if (spec->mixer_nid != spec->mixer_merge_nid &&
2913 	    !spec->loopback_merge_path) {
2914 		path = snd_hda_add_new_path(codec, spec->mixer_nid,
2915 					    spec->mixer_merge_nid, 0);
2916 		if (path) {
2917 			print_nid_path(codec, "loopback-merge", path);
2918 			path->active = true;
2919 			spec->loopback_merge_path =
2920 				snd_hda_get_path_idx(codec, path);
2921 		}
2922 	}
2923 
2924 	return 0;
2925 }
2926 
2927 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2928 {
2929 	unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2930 	return (pincap & AC_PINCAP_IN) != 0;
2931 }
2932 
2933 /* Parse the codec tree and retrieve ADCs */
2934 static int fill_adc_nids(struct hda_codec *codec)
2935 {
2936 	struct hda_gen_spec *spec = codec->spec;
2937 	hda_nid_t nid;
2938 	hda_nid_t *adc_nids = spec->adc_nids;
2939 	int max_nums = ARRAY_SIZE(spec->adc_nids);
2940 	int i, nums = 0;
2941 
2942 	nid = codec->start_nid;
2943 	for (i = 0; i < codec->num_nodes; i++, nid++) {
2944 		unsigned int caps = get_wcaps(codec, nid);
2945 		int type = get_wcaps_type(caps);
2946 
2947 		if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2948 			continue;
2949 		adc_nids[nums] = nid;
2950 		if (++nums >= max_nums)
2951 			break;
2952 	}
2953 	spec->num_adc_nids = nums;
2954 
2955 	/* copy the detected ADCs to all_adcs[] */
2956 	spec->num_all_adcs = nums;
2957 	memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
2958 
2959 	return nums;
2960 }
2961 
2962 /* filter out invalid adc_nids that don't give all active input pins;
2963  * if needed, check whether dynamic ADC-switching is available
2964  */
2965 static int check_dyn_adc_switch(struct hda_codec *codec)
2966 {
2967 	struct hda_gen_spec *spec = codec->spec;
2968 	struct hda_input_mux *imux = &spec->input_mux;
2969 	unsigned int ok_bits;
2970 	int i, n, nums;
2971 
2972 	nums = 0;
2973 	ok_bits = 0;
2974 	for (n = 0; n < spec->num_adc_nids; n++) {
2975 		for (i = 0; i < imux->num_items; i++) {
2976 			if (!spec->input_paths[i][n])
2977 				break;
2978 		}
2979 		if (i >= imux->num_items) {
2980 			ok_bits |= (1 << n);
2981 			nums++;
2982 		}
2983 	}
2984 
2985 	if (!ok_bits) {
2986 		/* check whether ADC-switch is possible */
2987 		for (i = 0; i < imux->num_items; i++) {
2988 			for (n = 0; n < spec->num_adc_nids; n++) {
2989 				if (spec->input_paths[i][n]) {
2990 					spec->dyn_adc_idx[i] = n;
2991 					break;
2992 				}
2993 			}
2994 		}
2995 
2996 		codec_dbg(codec, "enabling ADC switching\n");
2997 		spec->dyn_adc_switch = 1;
2998 	} else if (nums != spec->num_adc_nids) {
2999 		/* shrink the invalid adcs and input paths */
3000 		nums = 0;
3001 		for (n = 0; n < spec->num_adc_nids; n++) {
3002 			if (!(ok_bits & (1 << n)))
3003 				continue;
3004 			if (n != nums) {
3005 				spec->adc_nids[nums] = spec->adc_nids[n];
3006 				for (i = 0; i < imux->num_items; i++) {
3007 					invalidate_nid_path(codec,
3008 						spec->input_paths[i][nums]);
3009 					spec->input_paths[i][nums] =
3010 						spec->input_paths[i][n];
3011 				}
3012 			}
3013 			nums++;
3014 		}
3015 		spec->num_adc_nids = nums;
3016 	}
3017 
3018 	if (imux->num_items == 1 ||
3019 	    (imux->num_items == 2 && spec->hp_mic)) {
3020 		codec_dbg(codec, "reducing to a single ADC\n");
3021 		spec->num_adc_nids = 1; /* reduce to a single ADC */
3022 	}
3023 
3024 	/* single index for individual volumes ctls */
3025 	if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3026 		spec->num_adc_nids = 1;
3027 
3028 	return 0;
3029 }
3030 
3031 /* parse capture source paths from the given pin and create imux items */
3032 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
3033 				int cfg_idx, int num_adcs,
3034 				const char *label, int anchor)
3035 {
3036 	struct hda_gen_spec *spec = codec->spec;
3037 	struct hda_input_mux *imux = &spec->input_mux;
3038 	int imux_idx = imux->num_items;
3039 	bool imux_added = false;
3040 	int c;
3041 
3042 	for (c = 0; c < num_adcs; c++) {
3043 		struct nid_path *path;
3044 		hda_nid_t adc = spec->adc_nids[c];
3045 
3046 		if (!is_reachable_path(codec, pin, adc))
3047 			continue;
3048 		path = snd_hda_add_new_path(codec, pin, adc, anchor);
3049 		if (!path)
3050 			continue;
3051 		print_nid_path(codec, "input", path);
3052 		spec->input_paths[imux_idx][c] =
3053 			snd_hda_get_path_idx(codec, path);
3054 
3055 		if (!imux_added) {
3056 			if (spec->hp_mic_pin == pin)
3057 				spec->hp_mic_mux_idx = imux->num_items;
3058 			spec->imux_pins[imux->num_items] = pin;
3059 			snd_hda_add_imux_item(codec, imux, label, cfg_idx, NULL);
3060 			imux_added = true;
3061 			if (spec->dyn_adc_switch)
3062 				spec->dyn_adc_idx[imux_idx] = c;
3063 		}
3064 	}
3065 
3066 	return 0;
3067 }
3068 
3069 /*
3070  * create playback/capture controls for input pins
3071  */
3072 
3073 /* fill the label for each input at first */
3074 static int fill_input_pin_labels(struct hda_codec *codec)
3075 {
3076 	struct hda_gen_spec *spec = codec->spec;
3077 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3078 	int i;
3079 
3080 	for (i = 0; i < cfg->num_inputs; i++) {
3081 		hda_nid_t pin = cfg->inputs[i].pin;
3082 		const char *label;
3083 		int j, idx;
3084 
3085 		if (!is_input_pin(codec, pin))
3086 			continue;
3087 
3088 		label = hda_get_autocfg_input_label(codec, cfg, i);
3089 		idx = 0;
3090 		for (j = i - 1; j >= 0; j--) {
3091 			if (spec->input_labels[j] &&
3092 			    !strcmp(spec->input_labels[j], label)) {
3093 				idx = spec->input_label_idxs[j] + 1;
3094 				break;
3095 			}
3096 		}
3097 
3098 		spec->input_labels[i] = label;
3099 		spec->input_label_idxs[i] = idx;
3100 	}
3101 
3102 	return 0;
3103 }
3104 
3105 #define CFG_IDX_MIX	99	/* a dummy cfg->input idx for stereo mix */
3106 
3107 static int create_input_ctls(struct hda_codec *codec)
3108 {
3109 	struct hda_gen_spec *spec = codec->spec;
3110 	const struct auto_pin_cfg *cfg = &spec->autocfg;
3111 	hda_nid_t mixer = spec->mixer_nid;
3112 	int num_adcs;
3113 	int i, err;
3114 	unsigned int val;
3115 
3116 	num_adcs = fill_adc_nids(codec);
3117 	if (num_adcs < 0)
3118 		return 0;
3119 
3120 	err = fill_input_pin_labels(codec);
3121 	if (err < 0)
3122 		return err;
3123 
3124 	for (i = 0; i < cfg->num_inputs; i++) {
3125 		hda_nid_t pin;
3126 
3127 		pin = cfg->inputs[i].pin;
3128 		if (!is_input_pin(codec, pin))
3129 			continue;
3130 
3131 		val = PIN_IN;
3132 		if (cfg->inputs[i].type == AUTO_PIN_MIC)
3133 			val |= snd_hda_get_default_vref(codec, pin);
3134 		if (pin != spec->hp_mic_pin)
3135 			set_pin_target(codec, pin, val, false);
3136 
3137 		if (mixer) {
3138 			if (is_reachable_path(codec, pin, mixer)) {
3139 				err = new_analog_input(codec, i, pin,
3140 						       spec->input_labels[i],
3141 						       spec->input_label_idxs[i],
3142 						       mixer);
3143 				if (err < 0)
3144 					return err;
3145 			}
3146 		}
3147 
3148 		err = parse_capture_source(codec, pin, i, num_adcs,
3149 					   spec->input_labels[i], -mixer);
3150 		if (err < 0)
3151 			return err;
3152 
3153 		if (spec->add_jack_modes) {
3154 			err = create_in_jack_mode(codec, pin);
3155 			if (err < 0)
3156 				return err;
3157 		}
3158 	}
3159 
3160 	/* add stereo mix when explicitly enabled via hint */
3161 	if (mixer && spec->add_stereo_mix_input &&
3162 	    snd_hda_get_bool_hint(codec, "add_stereo_mix_input") > 0) {
3163 		err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3164 					   "Stereo Mix", 0);
3165 		if (err < 0)
3166 			return err;
3167 	}
3168 
3169 	return 0;
3170 }
3171 
3172 
3173 /*
3174  * input source mux
3175  */
3176 
3177 /* get the input path specified by the given adc and imux indices */
3178 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3179 {
3180 	struct hda_gen_spec *spec = codec->spec;
3181 	if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3182 		snd_BUG();
3183 		return NULL;
3184 	}
3185 	if (spec->dyn_adc_switch)
3186 		adc_idx = spec->dyn_adc_idx[imux_idx];
3187 	if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3188 		snd_BUG();
3189 		return NULL;
3190 	}
3191 	return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3192 }
3193 
3194 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3195 		      unsigned int idx);
3196 
3197 static int mux_enum_info(struct snd_kcontrol *kcontrol,
3198 			 struct snd_ctl_elem_info *uinfo)
3199 {
3200 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3201 	struct hda_gen_spec *spec = codec->spec;
3202 	return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3203 }
3204 
3205 static int mux_enum_get(struct snd_kcontrol *kcontrol,
3206 			struct snd_ctl_elem_value *ucontrol)
3207 {
3208 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3209 	struct hda_gen_spec *spec = codec->spec;
3210 	/* the ctls are created at once with multiple counts */
3211 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3212 
3213 	ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3214 	return 0;
3215 }
3216 
3217 static int mux_enum_put(struct snd_kcontrol *kcontrol,
3218 			    struct snd_ctl_elem_value *ucontrol)
3219 {
3220 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3221 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3222 	return mux_select(codec, adc_idx,
3223 			  ucontrol->value.enumerated.item[0]);
3224 }
3225 
3226 static const struct snd_kcontrol_new cap_src_temp = {
3227 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3228 	.name = "Input Source",
3229 	.info = mux_enum_info,
3230 	.get = mux_enum_get,
3231 	.put = mux_enum_put,
3232 };
3233 
3234 /*
3235  * capture volume and capture switch ctls
3236  */
3237 
3238 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3239 			  struct snd_ctl_elem_value *ucontrol);
3240 
3241 /* call the given amp update function for all amps in the imux list at once */
3242 static int cap_put_caller(struct snd_kcontrol *kcontrol,
3243 			  struct snd_ctl_elem_value *ucontrol,
3244 			  put_call_t func, int type)
3245 {
3246 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3247 	struct hda_gen_spec *spec = codec->spec;
3248 	const struct hda_input_mux *imux;
3249 	struct nid_path *path;
3250 	int i, adc_idx, err = 0;
3251 
3252 	imux = &spec->input_mux;
3253 	adc_idx = kcontrol->id.index;
3254 	mutex_lock(&codec->control_mutex);
3255 	/* we use the cache-only update at first since multiple input paths
3256 	 * may shared the same amp; by updating only caches, the redundant
3257 	 * writes to hardware can be reduced.
3258 	 */
3259 	codec->cached_write = 1;
3260 	for (i = 0; i < imux->num_items; i++) {
3261 		path = get_input_path(codec, adc_idx, i);
3262 		if (!path || !path->ctls[type])
3263 			continue;
3264 		kcontrol->private_value = path->ctls[type];
3265 		err = func(kcontrol, ucontrol);
3266 		if (err < 0)
3267 			goto error;
3268 	}
3269  error:
3270 	codec->cached_write = 0;
3271 	mutex_unlock(&codec->control_mutex);
3272 	snd_hda_codec_flush_cache(codec); /* flush the updates */
3273 	if (err >= 0 && spec->cap_sync_hook)
3274 		spec->cap_sync_hook(codec, kcontrol, ucontrol);
3275 	return err;
3276 }
3277 
3278 /* capture volume ctl callbacks */
3279 #define cap_vol_info		snd_hda_mixer_amp_volume_info
3280 #define cap_vol_get		snd_hda_mixer_amp_volume_get
3281 #define cap_vol_tlv		snd_hda_mixer_amp_tlv
3282 
3283 static int cap_vol_put(struct snd_kcontrol *kcontrol,
3284 		       struct snd_ctl_elem_value *ucontrol)
3285 {
3286 	return cap_put_caller(kcontrol, ucontrol,
3287 			      snd_hda_mixer_amp_volume_put,
3288 			      NID_PATH_VOL_CTL);
3289 }
3290 
3291 static const struct snd_kcontrol_new cap_vol_temp = {
3292 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3293 	.name = "Capture Volume",
3294 	.access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3295 		   SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3296 		   SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3297 	.info = cap_vol_info,
3298 	.get = cap_vol_get,
3299 	.put = cap_vol_put,
3300 	.tlv = { .c = cap_vol_tlv },
3301 };
3302 
3303 /* capture switch ctl callbacks */
3304 #define cap_sw_info		snd_ctl_boolean_stereo_info
3305 #define cap_sw_get		snd_hda_mixer_amp_switch_get
3306 
3307 static int cap_sw_put(struct snd_kcontrol *kcontrol,
3308 		      struct snd_ctl_elem_value *ucontrol)
3309 {
3310 	return cap_put_caller(kcontrol, ucontrol,
3311 			      snd_hda_mixer_amp_switch_put,
3312 			      NID_PATH_MUTE_CTL);
3313 }
3314 
3315 static const struct snd_kcontrol_new cap_sw_temp = {
3316 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3317 	.name = "Capture Switch",
3318 	.info = cap_sw_info,
3319 	.get = cap_sw_get,
3320 	.put = cap_sw_put,
3321 };
3322 
3323 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3324 {
3325 	hda_nid_t nid;
3326 	int i, depth;
3327 
3328 	path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3329 	for (depth = 0; depth < 3; depth++) {
3330 		if (depth >= path->depth)
3331 			return -EINVAL;
3332 		i = path->depth - depth - 1;
3333 		nid = path->path[i];
3334 		if (!path->ctls[NID_PATH_VOL_CTL]) {
3335 			if (nid_has_volume(codec, nid, HDA_OUTPUT))
3336 				path->ctls[NID_PATH_VOL_CTL] =
3337 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3338 			else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3339 				int idx = path->idx[i];
3340 				if (!depth && codec->single_adc_amp)
3341 					idx = 0;
3342 				path->ctls[NID_PATH_VOL_CTL] =
3343 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3344 			}
3345 		}
3346 		if (!path->ctls[NID_PATH_MUTE_CTL]) {
3347 			if (nid_has_mute(codec, nid, HDA_OUTPUT))
3348 				path->ctls[NID_PATH_MUTE_CTL] =
3349 					HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3350 			else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3351 				int idx = path->idx[i];
3352 				if (!depth && codec->single_adc_amp)
3353 					idx = 0;
3354 				path->ctls[NID_PATH_MUTE_CTL] =
3355 					HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3356 			}
3357 		}
3358 	}
3359 	return 0;
3360 }
3361 
3362 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3363 {
3364 	struct hda_gen_spec *spec = codec->spec;
3365 	struct auto_pin_cfg *cfg = &spec->autocfg;
3366 	unsigned int val;
3367 	int i;
3368 
3369 	if (!spec->inv_dmic_split)
3370 		return false;
3371 	for (i = 0; i < cfg->num_inputs; i++) {
3372 		if (cfg->inputs[i].pin != nid)
3373 			continue;
3374 		if (cfg->inputs[i].type != AUTO_PIN_MIC)
3375 			return false;
3376 		val = snd_hda_codec_get_pincfg(codec, nid);
3377 		return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3378 	}
3379 	return false;
3380 }
3381 
3382 /* capture switch put callback for a single control with hook call */
3383 static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3384 			     struct snd_ctl_elem_value *ucontrol)
3385 {
3386 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3387 	struct hda_gen_spec *spec = codec->spec;
3388 	int ret;
3389 
3390 	ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3391 	if (ret < 0)
3392 		return ret;
3393 
3394 	if (spec->cap_sync_hook)
3395 		spec->cap_sync_hook(codec, kcontrol, ucontrol);
3396 
3397 	return ret;
3398 }
3399 
3400 static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3401 			      int idx, bool is_switch, unsigned int ctl,
3402 			      bool inv_dmic)
3403 {
3404 	struct hda_gen_spec *spec = codec->spec;
3405 	char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3406 	int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3407 	const char *sfx = is_switch ? "Switch" : "Volume";
3408 	unsigned int chs = inv_dmic ? 1 : 3;
3409 	struct snd_kcontrol_new *knew;
3410 
3411 	if (!ctl)
3412 		return 0;
3413 
3414 	if (label)
3415 		snprintf(tmpname, sizeof(tmpname),
3416 			 "%s Capture %s", label, sfx);
3417 	else
3418 		snprintf(tmpname, sizeof(tmpname),
3419 			 "Capture %s", sfx);
3420 	knew = add_control(spec, type, tmpname, idx,
3421 			   amp_val_replace_channels(ctl, chs));
3422 	if (!knew)
3423 		return -ENOMEM;
3424 	if (is_switch)
3425 		knew->put = cap_single_sw_put;
3426 	if (!inv_dmic)
3427 		return 0;
3428 
3429 	/* Make independent right kcontrol */
3430 	if (label)
3431 		snprintf(tmpname, sizeof(tmpname),
3432 			 "Inverted %s Capture %s", label, sfx);
3433 	else
3434 		snprintf(tmpname, sizeof(tmpname),
3435 			 "Inverted Capture %s", sfx);
3436 	knew = add_control(spec, type, tmpname, idx,
3437 			   amp_val_replace_channels(ctl, 2));
3438 	if (!knew)
3439 		return -ENOMEM;
3440 	if (is_switch)
3441 		knew->put = cap_single_sw_put;
3442 	return 0;
3443 }
3444 
3445 /* create single (and simple) capture volume and switch controls */
3446 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3447 				     unsigned int vol_ctl, unsigned int sw_ctl,
3448 				     bool inv_dmic)
3449 {
3450 	int err;
3451 	err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3452 	if (err < 0)
3453 		return err;
3454 	err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3455 	if (err < 0)
3456 		return err;
3457 	return 0;
3458 }
3459 
3460 /* create bound capture volume and switch controls */
3461 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3462 				   unsigned int vol_ctl, unsigned int sw_ctl)
3463 {
3464 	struct hda_gen_spec *spec = codec->spec;
3465 	struct snd_kcontrol_new *knew;
3466 
3467 	if (vol_ctl) {
3468 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3469 		if (!knew)
3470 			return -ENOMEM;
3471 		knew->index = idx;
3472 		knew->private_value = vol_ctl;
3473 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3474 	}
3475 	if (sw_ctl) {
3476 		knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3477 		if (!knew)
3478 			return -ENOMEM;
3479 		knew->index = idx;
3480 		knew->private_value = sw_ctl;
3481 		knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3482 	}
3483 	return 0;
3484 }
3485 
3486 /* return the vol ctl when used first in the imux list */
3487 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3488 {
3489 	struct nid_path *path;
3490 	unsigned int ctl;
3491 	int i;
3492 
3493 	path = get_input_path(codec, 0, idx);
3494 	if (!path)
3495 		return 0;
3496 	ctl = path->ctls[type];
3497 	if (!ctl)
3498 		return 0;
3499 	for (i = 0; i < idx - 1; i++) {
3500 		path = get_input_path(codec, 0, i);
3501 		if (path && path->ctls[type] == ctl)
3502 			return 0;
3503 	}
3504 	return ctl;
3505 }
3506 
3507 /* create individual capture volume and switch controls per input */
3508 static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3509 {
3510 	struct hda_gen_spec *spec = codec->spec;
3511 	struct hda_input_mux *imux = &spec->input_mux;
3512 	int i, err, type;
3513 
3514 	for (i = 0; i < imux->num_items; i++) {
3515 		bool inv_dmic;
3516 		int idx;
3517 
3518 		idx = imux->items[i].index;
3519 		if (idx >= spec->autocfg.num_inputs)
3520 			continue;
3521 		inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3522 
3523 		for (type = 0; type < 2; type++) {
3524 			err = add_single_cap_ctl(codec,
3525 						 spec->input_labels[idx],
3526 						 spec->input_label_idxs[idx],
3527 						 type,
3528 						 get_first_cap_ctl(codec, i, type),
3529 						 inv_dmic);
3530 			if (err < 0)
3531 				return err;
3532 		}
3533 	}
3534 	return 0;
3535 }
3536 
3537 static int create_capture_mixers(struct hda_codec *codec)
3538 {
3539 	struct hda_gen_spec *spec = codec->spec;
3540 	struct hda_input_mux *imux = &spec->input_mux;
3541 	int i, n, nums, err;
3542 
3543 	if (spec->dyn_adc_switch)
3544 		nums = 1;
3545 	else
3546 		nums = spec->num_adc_nids;
3547 
3548 	if (!spec->auto_mic && imux->num_items > 1) {
3549 		struct snd_kcontrol_new *knew;
3550 		const char *name;
3551 		name = nums > 1 ? "Input Source" : "Capture Source";
3552 		knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3553 		if (!knew)
3554 			return -ENOMEM;
3555 		knew->count = nums;
3556 	}
3557 
3558 	for (n = 0; n < nums; n++) {
3559 		bool multi = false;
3560 		bool multi_cap_vol = spec->multi_cap_vol;
3561 		bool inv_dmic = false;
3562 		int vol, sw;
3563 
3564 		vol = sw = 0;
3565 		for (i = 0; i < imux->num_items; i++) {
3566 			struct nid_path *path;
3567 			path = get_input_path(codec, n, i);
3568 			if (!path)
3569 				continue;
3570 			parse_capvol_in_path(codec, path);
3571 			if (!vol)
3572 				vol = path->ctls[NID_PATH_VOL_CTL];
3573 			else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3574 				multi = true;
3575 				if (!same_amp_caps(codec, vol,
3576 				    path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3577 					multi_cap_vol = true;
3578 			}
3579 			if (!sw)
3580 				sw = path->ctls[NID_PATH_MUTE_CTL];
3581 			else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3582 				multi = true;
3583 				if (!same_amp_caps(codec, sw,
3584 				    path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3585 					multi_cap_vol = true;
3586 			}
3587 			if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3588 				inv_dmic = true;
3589 		}
3590 
3591 		if (!multi)
3592 			err = create_single_cap_vol_ctl(codec, n, vol, sw,
3593 							inv_dmic);
3594 		else if (!multi_cap_vol && !inv_dmic)
3595 			err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3596 		else
3597 			err = create_multi_cap_vol_ctl(codec);
3598 		if (err < 0)
3599 			return err;
3600 	}
3601 
3602 	return 0;
3603 }
3604 
3605 /*
3606  * add mic boosts if needed
3607  */
3608 
3609 /* check whether the given amp is feasible as a boost volume */
3610 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3611 			    int dir, int idx)
3612 {
3613 	unsigned int step;
3614 
3615 	if (!nid_has_volume(codec, nid, dir) ||
3616 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3617 	    is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3618 		return false;
3619 
3620 	step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3621 		>> AC_AMPCAP_STEP_SIZE_SHIFT;
3622 	if (step < 0x20)
3623 		return false;
3624 	return true;
3625 }
3626 
3627 /* look for a boost amp in a widget close to the pin */
3628 static unsigned int look_for_boost_amp(struct hda_codec *codec,
3629 				       struct nid_path *path)
3630 {
3631 	unsigned int val = 0;
3632 	hda_nid_t nid;
3633 	int depth;
3634 
3635 	for (depth = 0; depth < 3; depth++) {
3636 		if (depth >= path->depth - 1)
3637 			break;
3638 		nid = path->path[depth];
3639 		if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3640 			val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3641 			break;
3642 		} else if (check_boost_vol(codec, nid, HDA_INPUT,
3643 					   path->idx[depth])) {
3644 			val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3645 						  HDA_INPUT);
3646 			break;
3647 		}
3648 	}
3649 
3650 	return val;
3651 }
3652 
3653 static int parse_mic_boost(struct hda_codec *codec)
3654 {
3655 	struct hda_gen_spec *spec = codec->spec;
3656 	struct auto_pin_cfg *cfg = &spec->autocfg;
3657 	struct hda_input_mux *imux = &spec->input_mux;
3658 	int i;
3659 
3660 	if (!spec->num_adc_nids)
3661 		return 0;
3662 
3663 	for (i = 0; i < imux->num_items; i++) {
3664 		struct nid_path *path;
3665 		unsigned int val;
3666 		int idx;
3667 		char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3668 
3669 		idx = imux->items[i].index;
3670 		if (idx >= imux->num_items)
3671 			continue;
3672 
3673 		/* check only line-in and mic pins */
3674 		if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3675 			continue;
3676 
3677 		path = get_input_path(codec, 0, i);
3678 		if (!path)
3679 			continue;
3680 
3681 		val = look_for_boost_amp(codec, path);
3682 		if (!val)
3683 			continue;
3684 
3685 		/* create a boost control */
3686 		snprintf(boost_label, sizeof(boost_label),
3687 			 "%s Boost Volume", spec->input_labels[idx]);
3688 		if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3689 				 spec->input_label_idxs[idx], val))
3690 			return -ENOMEM;
3691 
3692 		path->ctls[NID_PATH_BOOST_CTL] = val;
3693 	}
3694 	return 0;
3695 }
3696 
3697 /*
3698  * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3699  */
3700 static void parse_digital(struct hda_codec *codec)
3701 {
3702 	struct hda_gen_spec *spec = codec->spec;
3703 	struct nid_path *path;
3704 	int i, nums;
3705 	hda_nid_t dig_nid, pin;
3706 
3707 	/* support multiple SPDIFs; the secondary is set up as a slave */
3708 	nums = 0;
3709 	for (i = 0; i < spec->autocfg.dig_outs; i++) {
3710 		pin = spec->autocfg.dig_out_pins[i];
3711 		dig_nid = look_for_dac(codec, pin, true);
3712 		if (!dig_nid)
3713 			continue;
3714 		path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3715 		if (!path)
3716 			continue;
3717 		print_nid_path(codec, "digout", path);
3718 		path->active = true;
3719 		spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3720 		set_pin_target(codec, pin, PIN_OUT, false);
3721 		if (!nums) {
3722 			spec->multiout.dig_out_nid = dig_nid;
3723 			spec->dig_out_type = spec->autocfg.dig_out_type[0];
3724 		} else {
3725 			spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3726 			if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3727 				break;
3728 			spec->slave_dig_outs[nums - 1] = dig_nid;
3729 		}
3730 		nums++;
3731 	}
3732 
3733 	if (spec->autocfg.dig_in_pin) {
3734 		pin = spec->autocfg.dig_in_pin;
3735 		dig_nid = codec->start_nid;
3736 		for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3737 			unsigned int wcaps = get_wcaps(codec, dig_nid);
3738 			if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3739 				continue;
3740 			if (!(wcaps & AC_WCAP_DIGITAL))
3741 				continue;
3742 			path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3743 			if (path) {
3744 				print_nid_path(codec, "digin", path);
3745 				path->active = true;
3746 				spec->dig_in_nid = dig_nid;
3747 				spec->digin_path = snd_hda_get_path_idx(codec, path);
3748 				set_pin_target(codec, pin, PIN_IN, false);
3749 				break;
3750 			}
3751 		}
3752 	}
3753 }
3754 
3755 
3756 /*
3757  * input MUX handling
3758  */
3759 
3760 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3761 
3762 /* select the given imux item; either unmute exclusively or select the route */
3763 static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3764 		      unsigned int idx)
3765 {
3766 	struct hda_gen_spec *spec = codec->spec;
3767 	const struct hda_input_mux *imux;
3768 	struct nid_path *old_path, *path;
3769 
3770 	imux = &spec->input_mux;
3771 	if (!imux->num_items)
3772 		return 0;
3773 
3774 	if (idx >= imux->num_items)
3775 		idx = imux->num_items - 1;
3776 	if (spec->cur_mux[adc_idx] == idx)
3777 		return 0;
3778 
3779 	old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3780 	if (!old_path)
3781 		return 0;
3782 	if (old_path->active)
3783 		snd_hda_activate_path(codec, old_path, false, false);
3784 
3785 	spec->cur_mux[adc_idx] = idx;
3786 
3787 	if (spec->hp_mic)
3788 		update_hp_mic(codec, adc_idx, false);
3789 
3790 	if (spec->dyn_adc_switch)
3791 		dyn_adc_pcm_resetup(codec, idx);
3792 
3793 	path = get_input_path(codec, adc_idx, idx);
3794 	if (!path)
3795 		return 0;
3796 	if (path->active)
3797 		return 0;
3798 	snd_hda_activate_path(codec, path, true, false);
3799 	if (spec->cap_sync_hook)
3800 		spec->cap_sync_hook(codec, NULL, NULL);
3801 	path_power_down_sync(codec, old_path);
3802 	return 1;
3803 }
3804 
3805 
3806 /*
3807  * Jack detections for HP auto-mute and mic-switch
3808  */
3809 
3810 /* check each pin in the given array; returns true if any of them is plugged */
3811 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
3812 {
3813 	int i;
3814 	bool present = false;
3815 
3816 	for (i = 0; i < num_pins; i++) {
3817 		hda_nid_t nid = pins[i];
3818 		if (!nid)
3819 			break;
3820 		/* don't detect pins retasked as inputs */
3821 		if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
3822 			continue;
3823 		if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT)
3824 			present = true;
3825 	}
3826 	return present;
3827 }
3828 
3829 /* standard HP/line-out auto-mute helper */
3830 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3831 			int *paths, bool mute)
3832 {
3833 	struct hda_gen_spec *spec = codec->spec;
3834 	int i;
3835 
3836 	for (i = 0; i < num_pins; i++) {
3837 		hda_nid_t nid = pins[i];
3838 		unsigned int val, oldval;
3839 		if (!nid)
3840 			break;
3841 
3842 		if (spec->auto_mute_via_amp) {
3843 			struct nid_path *path;
3844 			hda_nid_t mute_nid;
3845 
3846 			path = snd_hda_get_path_from_idx(codec, paths[i]);
3847 			if (!path)
3848 				continue;
3849 			mute_nid = get_amp_nid_(path->ctls[NID_PATH_MUTE_CTL]);
3850 			if (!mute_nid)
3851 				continue;
3852 			if (mute)
3853 				spec->mute_bits |= (1ULL << mute_nid);
3854 			else
3855 				spec->mute_bits &= ~(1ULL << mute_nid);
3856 			set_pin_eapd(codec, nid, !mute);
3857 			continue;
3858 		}
3859 
3860 		oldval = snd_hda_codec_get_pin_target(codec, nid);
3861 		if (oldval & PIN_IN)
3862 			continue; /* no mute for inputs */
3863 		/* don't reset VREF value in case it's controlling
3864 		 * the amp (see alc861_fixup_asus_amp_vref_0f())
3865 		 */
3866 		if (spec->keep_vref_in_automute)
3867 			val = oldval & ~PIN_HP;
3868 		else
3869 			val = 0;
3870 		if (!mute)
3871 			val |= oldval;
3872 		/* here we call update_pin_ctl() so that the pinctl is changed
3873 		 * without changing the pinctl target value;
3874 		 * the original target value will be still referred at the
3875 		 * init / resume again
3876 		 */
3877 		update_pin_ctl(codec, nid, val);
3878 		set_pin_eapd(codec, nid, !mute);
3879 	}
3880 }
3881 
3882 /* Toggle outputs muting */
3883 void snd_hda_gen_update_outputs(struct hda_codec *codec)
3884 {
3885 	struct hda_gen_spec *spec = codec->spec;
3886 	int *paths;
3887 	int on;
3888 
3889 	/* Control HP pins/amps depending on master_mute state;
3890 	 * in general, HP pins/amps control should be enabled in all cases,
3891 	 * but currently set only for master_mute, just to be safe
3892 	 */
3893 	if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
3894 		paths = spec->out_paths;
3895 	else
3896 		paths = spec->hp_paths;
3897 	do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3898 		    spec->autocfg.hp_pins, paths, spec->master_mute);
3899 
3900 	if (!spec->automute_speaker)
3901 		on = 0;
3902 	else
3903 		on = spec->hp_jack_present | spec->line_jack_present;
3904 	on |= spec->master_mute;
3905 	spec->speaker_muted = on;
3906 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3907 		paths = spec->out_paths;
3908 	else
3909 		paths = spec->speaker_paths;
3910 	do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3911 		    spec->autocfg.speaker_pins, paths, on);
3912 
3913 	/* toggle line-out mutes if needed, too */
3914 	/* if LO is a copy of either HP or Speaker, don't need to handle it */
3915 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3916 	    spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3917 		return;
3918 	if (!spec->automute_lo)
3919 		on = 0;
3920 	else
3921 		on = spec->hp_jack_present;
3922 	on |= spec->master_mute;
3923 	spec->line_out_muted = on;
3924 	paths = spec->out_paths;
3925 	do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3926 		    spec->autocfg.line_out_pins, paths, on);
3927 }
3928 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs);
3929 
3930 static void call_update_outputs(struct hda_codec *codec)
3931 {
3932 	struct hda_gen_spec *spec = codec->spec;
3933 	if (spec->automute_hook)
3934 		spec->automute_hook(codec);
3935 	else
3936 		snd_hda_gen_update_outputs(codec);
3937 
3938 	/* sync the whole vmaster slaves to reflect the new auto-mute status */
3939 	if (spec->auto_mute_via_amp && !codec->bus->shutdown)
3940 		snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
3941 }
3942 
3943 /* standard HP-automute helper */
3944 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3945 {
3946 	struct hda_gen_spec *spec = codec->spec;
3947 	hda_nid_t *pins = spec->autocfg.hp_pins;
3948 	int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
3949 
3950 	/* No detection for the first HP jack during indep-HP mode */
3951 	if (spec->indep_hp_enabled) {
3952 		pins++;
3953 		num_pins--;
3954 	}
3955 
3956 	spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
3957 	if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3958 		return;
3959 	call_update_outputs(codec);
3960 }
3961 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute);
3962 
3963 /* standard line-out-automute helper */
3964 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3965 {
3966 	struct hda_gen_spec *spec = codec->spec;
3967 
3968 	if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3969 		return;
3970 	/* check LO jack only when it's different from HP */
3971 	if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3972 		return;
3973 
3974 	spec->line_jack_present =
3975 		detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3976 			     spec->autocfg.line_out_pins);
3977 	if (!spec->automute_speaker || !spec->detect_lo)
3978 		return;
3979 	call_update_outputs(codec);
3980 }
3981 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute);
3982 
3983 /* standard mic auto-switch helper */
3984 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3985 {
3986 	struct hda_gen_spec *spec = codec->spec;
3987 	int i;
3988 
3989 	if (!spec->auto_mic)
3990 		return;
3991 
3992 	for (i = spec->am_num_entries - 1; i > 0; i--) {
3993 		hda_nid_t pin = spec->am_entry[i].pin;
3994 		/* don't detect pins retasked as outputs */
3995 		if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3996 			continue;
3997 		if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
3998 			mux_select(codec, 0, spec->am_entry[i].idx);
3999 			return;
4000 		}
4001 	}
4002 	mux_select(codec, 0, spec->am_entry[0].idx);
4003 }
4004 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch);
4005 
4006 /* call appropriate hooks */
4007 static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
4008 {
4009 	struct hda_gen_spec *spec = codec->spec;
4010 	if (spec->hp_automute_hook)
4011 		spec->hp_automute_hook(codec, jack);
4012 	else
4013 		snd_hda_gen_hp_automute(codec, jack);
4014 }
4015 
4016 static void call_line_automute(struct hda_codec *codec,
4017 			       struct hda_jack_tbl *jack)
4018 {
4019 	struct hda_gen_spec *spec = codec->spec;
4020 	if (spec->line_automute_hook)
4021 		spec->line_automute_hook(codec, jack);
4022 	else
4023 		snd_hda_gen_line_automute(codec, jack);
4024 }
4025 
4026 static void call_mic_autoswitch(struct hda_codec *codec,
4027 				struct hda_jack_tbl *jack)
4028 {
4029 	struct hda_gen_spec *spec = codec->spec;
4030 	if (spec->mic_autoswitch_hook)
4031 		spec->mic_autoswitch_hook(codec, jack);
4032 	else
4033 		snd_hda_gen_mic_autoswitch(codec, jack);
4034 }
4035 
4036 /* update jack retasking */
4037 static void update_automute_all(struct hda_codec *codec)
4038 {
4039 	call_hp_automute(codec, NULL);
4040 	call_line_automute(codec, NULL);
4041 	call_mic_autoswitch(codec, NULL);
4042 }
4043 
4044 /*
4045  * Auto-Mute mode mixer enum support
4046  */
4047 static int automute_mode_info(struct snd_kcontrol *kcontrol,
4048 			      struct snd_ctl_elem_info *uinfo)
4049 {
4050 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4051 	struct hda_gen_spec *spec = codec->spec;
4052 	static const char * const texts3[] = {
4053 		"Disabled", "Speaker Only", "Line Out+Speaker"
4054 	};
4055 
4056 	if (spec->automute_speaker_possible && spec->automute_lo_possible)
4057 		return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
4058 	return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
4059 }
4060 
4061 static int automute_mode_get(struct snd_kcontrol *kcontrol,
4062 			     struct snd_ctl_elem_value *ucontrol)
4063 {
4064 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4065 	struct hda_gen_spec *spec = codec->spec;
4066 	unsigned int val = 0;
4067 	if (spec->automute_speaker)
4068 		val++;
4069 	if (spec->automute_lo)
4070 		val++;
4071 
4072 	ucontrol->value.enumerated.item[0] = val;
4073 	return 0;
4074 }
4075 
4076 static int automute_mode_put(struct snd_kcontrol *kcontrol,
4077 			     struct snd_ctl_elem_value *ucontrol)
4078 {
4079 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
4080 	struct hda_gen_spec *spec = codec->spec;
4081 
4082 	switch (ucontrol->value.enumerated.item[0]) {
4083 	case 0:
4084 		if (!spec->automute_speaker && !spec->automute_lo)
4085 			return 0;
4086 		spec->automute_speaker = 0;
4087 		spec->automute_lo = 0;
4088 		break;
4089 	case 1:
4090 		if (spec->automute_speaker_possible) {
4091 			if (!spec->automute_lo && spec->automute_speaker)
4092 				return 0;
4093 			spec->automute_speaker = 1;
4094 			spec->automute_lo = 0;
4095 		} else if (spec->automute_lo_possible) {
4096 			if (spec->automute_lo)
4097 				return 0;
4098 			spec->automute_lo = 1;
4099 		} else
4100 			return -EINVAL;
4101 		break;
4102 	case 2:
4103 		if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4104 			return -EINVAL;
4105 		if (spec->automute_speaker && spec->automute_lo)
4106 			return 0;
4107 		spec->automute_speaker = 1;
4108 		spec->automute_lo = 1;
4109 		break;
4110 	default:
4111 		return -EINVAL;
4112 	}
4113 	call_update_outputs(codec);
4114 	return 1;
4115 }
4116 
4117 static const struct snd_kcontrol_new automute_mode_enum = {
4118 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4119 	.name = "Auto-Mute Mode",
4120 	.info = automute_mode_info,
4121 	.get = automute_mode_get,
4122 	.put = automute_mode_put,
4123 };
4124 
4125 static int add_automute_mode_enum(struct hda_codec *codec)
4126 {
4127 	struct hda_gen_spec *spec = codec->spec;
4128 
4129 	if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4130 		return -ENOMEM;
4131 	return 0;
4132 }
4133 
4134 /*
4135  * Check the availability of HP/line-out auto-mute;
4136  * Set up appropriately if really supported
4137  */
4138 static int check_auto_mute_availability(struct hda_codec *codec)
4139 {
4140 	struct hda_gen_spec *spec = codec->spec;
4141 	struct auto_pin_cfg *cfg = &spec->autocfg;
4142 	int present = 0;
4143 	int i, err;
4144 
4145 	if (spec->suppress_auto_mute)
4146 		return 0;
4147 
4148 	if (cfg->hp_pins[0])
4149 		present++;
4150 	if (cfg->line_out_pins[0])
4151 		present++;
4152 	if (cfg->speaker_pins[0])
4153 		present++;
4154 	if (present < 2) /* need two different output types */
4155 		return 0;
4156 
4157 	if (!cfg->speaker_pins[0] &&
4158 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4159 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4160 		       sizeof(cfg->speaker_pins));
4161 		cfg->speaker_outs = cfg->line_outs;
4162 	}
4163 
4164 	if (!cfg->hp_pins[0] &&
4165 	    cfg->line_out_type == AUTO_PIN_HP_OUT) {
4166 		memcpy(cfg->hp_pins, cfg->line_out_pins,
4167 		       sizeof(cfg->hp_pins));
4168 		cfg->hp_outs = cfg->line_outs;
4169 	}
4170 
4171 	for (i = 0; i < cfg->hp_outs; i++) {
4172 		hda_nid_t nid = cfg->hp_pins[i];
4173 		if (!is_jack_detectable(codec, nid))
4174 			continue;
4175 		codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid);
4176 		snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
4177 						    call_hp_automute);
4178 		spec->detect_hp = 1;
4179 	}
4180 
4181 	if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4182 		if (cfg->speaker_outs)
4183 			for (i = 0; i < cfg->line_outs; i++) {
4184 				hda_nid_t nid = cfg->line_out_pins[i];
4185 				if (!is_jack_detectable(codec, nid))
4186 					continue;
4187 				codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid);
4188 				snd_hda_jack_detect_enable_callback(codec, nid,
4189 								    HDA_GEN_FRONT_EVENT,
4190 								    call_line_automute);
4191 				spec->detect_lo = 1;
4192 			}
4193 		spec->automute_lo_possible = spec->detect_hp;
4194 	}
4195 
4196 	spec->automute_speaker_possible = cfg->speaker_outs &&
4197 		(spec->detect_hp || spec->detect_lo);
4198 
4199 	spec->automute_lo = spec->automute_lo_possible;
4200 	spec->automute_speaker = spec->automute_speaker_possible;
4201 
4202 	if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4203 		/* create a control for automute mode */
4204 		err = add_automute_mode_enum(codec);
4205 		if (err < 0)
4206 			return err;
4207 	}
4208 	return 0;
4209 }
4210 
4211 /* check whether all auto-mic pins are valid; setup indices if OK */
4212 static bool auto_mic_check_imux(struct hda_codec *codec)
4213 {
4214 	struct hda_gen_spec *spec = codec->spec;
4215 	const struct hda_input_mux *imux;
4216 	int i;
4217 
4218 	imux = &spec->input_mux;
4219 	for (i = 0; i < spec->am_num_entries; i++) {
4220 		spec->am_entry[i].idx =
4221 			find_idx_in_nid_list(spec->am_entry[i].pin,
4222 					     spec->imux_pins, imux->num_items);
4223 		if (spec->am_entry[i].idx < 0)
4224 			return false; /* no corresponding imux */
4225 	}
4226 
4227 	/* we don't need the jack detection for the first pin */
4228 	for (i = 1; i < spec->am_num_entries; i++)
4229 		snd_hda_jack_detect_enable_callback(codec,
4230 						    spec->am_entry[i].pin,
4231 						    HDA_GEN_MIC_EVENT,
4232 						    call_mic_autoswitch);
4233 	return true;
4234 }
4235 
4236 static int compare_attr(const void *ap, const void *bp)
4237 {
4238 	const struct automic_entry *a = ap;
4239 	const struct automic_entry *b = bp;
4240 	return (int)(a->attr - b->attr);
4241 }
4242 
4243 /*
4244  * Check the availability of auto-mic switch;
4245  * Set up if really supported
4246  */
4247 static int check_auto_mic_availability(struct hda_codec *codec)
4248 {
4249 	struct hda_gen_spec *spec = codec->spec;
4250 	struct auto_pin_cfg *cfg = &spec->autocfg;
4251 	unsigned int types;
4252 	int i, num_pins;
4253 
4254 	if (spec->suppress_auto_mic)
4255 		return 0;
4256 
4257 	types = 0;
4258 	num_pins = 0;
4259 	for (i = 0; i < cfg->num_inputs; i++) {
4260 		hda_nid_t nid = cfg->inputs[i].pin;
4261 		unsigned int attr;
4262 		attr = snd_hda_codec_get_pincfg(codec, nid);
4263 		attr = snd_hda_get_input_pin_attr(attr);
4264 		if (types & (1 << attr))
4265 			return 0; /* already occupied */
4266 		switch (attr) {
4267 		case INPUT_PIN_ATTR_INT:
4268 			if (cfg->inputs[i].type != AUTO_PIN_MIC)
4269 				return 0; /* invalid type */
4270 			break;
4271 		case INPUT_PIN_ATTR_UNUSED:
4272 			return 0; /* invalid entry */
4273 		default:
4274 			if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4275 				return 0; /* invalid type */
4276 			if (!spec->line_in_auto_switch &&
4277 			    cfg->inputs[i].type != AUTO_PIN_MIC)
4278 				return 0; /* only mic is allowed */
4279 			if (!is_jack_detectable(codec, nid))
4280 				return 0; /* no unsol support */
4281 			break;
4282 		}
4283 		if (num_pins >= MAX_AUTO_MIC_PINS)
4284 			return 0;
4285 		types |= (1 << attr);
4286 		spec->am_entry[num_pins].pin = nid;
4287 		spec->am_entry[num_pins].attr = attr;
4288 		num_pins++;
4289 	}
4290 
4291 	if (num_pins < 2)
4292 		return 0;
4293 
4294 	spec->am_num_entries = num_pins;
4295 	/* sort the am_entry in the order of attr so that the pin with a
4296 	 * higher attr will be selected when the jack is plugged.
4297 	 */
4298 	sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4299 	     compare_attr, NULL);
4300 
4301 	if (!auto_mic_check_imux(codec))
4302 		return 0;
4303 
4304 	spec->auto_mic = 1;
4305 	spec->num_adc_nids = 1;
4306 	spec->cur_mux[0] = spec->am_entry[0].idx;
4307 	codec_dbg(codec, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4308 		    spec->am_entry[0].pin,
4309 		    spec->am_entry[1].pin,
4310 		    spec->am_entry[2].pin);
4311 
4312 	return 0;
4313 }
4314 
4315 /* power_filter hook; make inactive widgets into power down */
4316 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4317 						  hda_nid_t nid,
4318 						  unsigned int power_state)
4319 {
4320 	if (power_state != AC_PWRST_D0 || nid == codec->afg)
4321 		return power_state;
4322 	if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4323 		return power_state;
4324 	if (is_active_nid_for_any(codec, nid))
4325 		return power_state;
4326 	return AC_PWRST_D3;
4327 }
4328 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter);
4329 
4330 /* mute all aamix inputs initially; parse up to the first leaves */
4331 static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
4332 {
4333 	int i, nums;
4334 	const hda_nid_t *conn;
4335 	bool has_amp;
4336 
4337 	nums = snd_hda_get_conn_list(codec, mix, &conn);
4338 	has_amp = nid_has_mute(codec, mix, HDA_INPUT);
4339 	for (i = 0; i < nums; i++) {
4340 		if (has_amp)
4341 			snd_hda_codec_amp_stereo(codec, mix,
4342 						 HDA_INPUT, i,
4343 						 0xff, HDA_AMP_MUTE);
4344 		else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
4345 			snd_hda_codec_amp_stereo(codec, conn[i],
4346 						 HDA_OUTPUT, 0,
4347 						 0xff, HDA_AMP_MUTE);
4348 	}
4349 }
4350 
4351 /*
4352  * Parse the given BIOS configuration and set up the hda_gen_spec
4353  *
4354  * return 1 if successful, 0 if the proper config is not found,
4355  * or a negative error code
4356  */
4357 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4358 				  struct auto_pin_cfg *cfg)
4359 {
4360 	struct hda_gen_spec *spec = codec->spec;
4361 	int err;
4362 
4363 	parse_user_hints(codec);
4364 
4365 	if (spec->mixer_nid && !spec->mixer_merge_nid)
4366 		spec->mixer_merge_nid = spec->mixer_nid;
4367 
4368 	if (cfg != &spec->autocfg) {
4369 		spec->autocfg = *cfg;
4370 		cfg = &spec->autocfg;
4371 	}
4372 
4373 	if (!spec->main_out_badness)
4374 		spec->main_out_badness = &hda_main_out_badness;
4375 	if (!spec->extra_out_badness)
4376 		spec->extra_out_badness = &hda_extra_out_badness;
4377 
4378 	fill_all_dac_nids(codec);
4379 
4380 	if (!cfg->line_outs) {
4381 		if (cfg->dig_outs || cfg->dig_in_pin) {
4382 			spec->multiout.max_channels = 2;
4383 			spec->no_analog = 1;
4384 			goto dig_only;
4385 		}
4386 		if (!cfg->num_inputs && !cfg->dig_in_pin)
4387 			return 0; /* can't find valid BIOS pin config */
4388 	}
4389 
4390 	if (!spec->no_primary_hp &&
4391 	    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4392 	    cfg->line_outs <= cfg->hp_outs) {
4393 		/* use HP as primary out */
4394 		cfg->speaker_outs = cfg->line_outs;
4395 		memcpy(cfg->speaker_pins, cfg->line_out_pins,
4396 		       sizeof(cfg->speaker_pins));
4397 		cfg->line_outs = cfg->hp_outs;
4398 		memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4399 		cfg->hp_outs = 0;
4400 		memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4401 		cfg->line_out_type = AUTO_PIN_HP_OUT;
4402 	}
4403 
4404 	err = parse_output_paths(codec);
4405 	if (err < 0)
4406 		return err;
4407 	err = create_multi_channel_mode(codec);
4408 	if (err < 0)
4409 		return err;
4410 	err = create_multi_out_ctls(codec, cfg);
4411 	if (err < 0)
4412 		return err;
4413 	err = create_hp_out_ctls(codec);
4414 	if (err < 0)
4415 		return err;
4416 	err = create_speaker_out_ctls(codec);
4417 	if (err < 0)
4418 		return err;
4419 	err = create_indep_hp_ctls(codec);
4420 	if (err < 0)
4421 		return err;
4422 	err = create_loopback_mixing_ctl(codec);
4423 	if (err < 0)
4424 		return err;
4425 	err = create_hp_mic(codec);
4426 	if (err < 0)
4427 		return err;
4428 	err = create_input_ctls(codec);
4429 	if (err < 0)
4430 		return err;
4431 
4432 	spec->const_channel_count = spec->ext_channel_count;
4433 	/* check the multiple speaker and headphone pins */
4434 	if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4435 		spec->const_channel_count = max(spec->const_channel_count,
4436 						cfg->speaker_outs * 2);
4437 	if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4438 		spec->const_channel_count = max(spec->const_channel_count,
4439 						cfg->hp_outs * 2);
4440 	spec->multiout.max_channels = max(spec->ext_channel_count,
4441 					  spec->const_channel_count);
4442 
4443 	err = check_auto_mute_availability(codec);
4444 	if (err < 0)
4445 		return err;
4446 
4447 	err = check_dyn_adc_switch(codec);
4448 	if (err < 0)
4449 		return err;
4450 
4451 	err = check_auto_mic_availability(codec);
4452 	if (err < 0)
4453 		return err;
4454 
4455 	/* add stereo mix if available and not enabled yet */
4456 	if (!spec->auto_mic && spec->mixer_nid &&
4457 	    spec->add_stereo_mix_input &&
4458 	    spec->input_mux.num_items > 1 &&
4459 	    snd_hda_get_bool_hint(codec, "add_stereo_mix_input") < 0) {
4460 		err = parse_capture_source(codec, spec->mixer_nid,
4461 					   CFG_IDX_MIX, spec->num_all_adcs,
4462 					   "Stereo Mix", 0);
4463 		if (err < 0)
4464 			return err;
4465 	}
4466 
4467 
4468 	err = create_capture_mixers(codec);
4469 	if (err < 0)
4470 		return err;
4471 
4472 	err = parse_mic_boost(codec);
4473 	if (err < 0)
4474 		return err;
4475 
4476 	/* create "Headphone Mic Jack Mode" if no input selection is
4477 	 * available (or user specifies add_jack_modes hint)
4478 	 */
4479 	if (spec->hp_mic_pin &&
4480 	    (spec->auto_mic || spec->input_mux.num_items == 1 ||
4481 	     spec->add_jack_modes)) {
4482 		err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
4483 		if (err < 0)
4484 			return err;
4485 	}
4486 
4487 	if (spec->add_jack_modes) {
4488 		if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4489 			err = create_out_jack_modes(codec, cfg->line_outs,
4490 						    cfg->line_out_pins);
4491 			if (err < 0)
4492 				return err;
4493 		}
4494 		if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4495 			err = create_out_jack_modes(codec, cfg->hp_outs,
4496 						    cfg->hp_pins);
4497 			if (err < 0)
4498 				return err;
4499 		}
4500 	}
4501 
4502 	/* mute all aamix input initially */
4503 	if (spec->mixer_nid)
4504 		mute_all_mixer_nid(codec, spec->mixer_nid);
4505 
4506  dig_only:
4507 	parse_digital(codec);
4508 
4509 	if (spec->power_down_unused)
4510 		codec->power_filter = snd_hda_gen_path_power_filter;
4511 
4512 	if (!spec->no_analog && spec->beep_nid) {
4513 		err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4514 		if (err < 0)
4515 			return err;
4516 	}
4517 
4518 	return 1;
4519 }
4520 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config);
4521 
4522 
4523 /*
4524  * Build control elements
4525  */
4526 
4527 /* slave controls for virtual master */
4528 static const char * const slave_pfxs[] = {
4529 	"Front", "Surround", "Center", "LFE", "Side",
4530 	"Headphone", "Speaker", "Mono", "Line Out",
4531 	"CLFE", "Bass Speaker", "PCM",
4532 	"Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4533 	"Headphone Front", "Headphone Surround", "Headphone CLFE",
4534 	"Headphone Side",
4535 	NULL,
4536 };
4537 
4538 int snd_hda_gen_build_controls(struct hda_codec *codec)
4539 {
4540 	struct hda_gen_spec *spec = codec->spec;
4541 	int err;
4542 
4543 	if (spec->kctls.used) {
4544 		err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4545 		if (err < 0)
4546 			return err;
4547 	}
4548 
4549 	if (spec->multiout.dig_out_nid) {
4550 		err = snd_hda_create_dig_out_ctls(codec,
4551 						  spec->multiout.dig_out_nid,
4552 						  spec->multiout.dig_out_nid,
4553 						  spec->pcm_rec[1].pcm_type);
4554 		if (err < 0)
4555 			return err;
4556 		if (!spec->no_analog) {
4557 			err = snd_hda_create_spdif_share_sw(codec,
4558 							    &spec->multiout);
4559 			if (err < 0)
4560 				return err;
4561 			spec->multiout.share_spdif = 1;
4562 		}
4563 	}
4564 	if (spec->dig_in_nid) {
4565 		err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4566 		if (err < 0)
4567 			return err;
4568 	}
4569 
4570 	/* if we have no master control, let's create it */
4571 	if (!spec->no_analog &&
4572 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4573 		err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4574 					  spec->vmaster_tlv, slave_pfxs,
4575 					  "Playback Volume");
4576 		if (err < 0)
4577 			return err;
4578 	}
4579 	if (!spec->no_analog &&
4580 	    !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4581 		err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4582 					    NULL, slave_pfxs,
4583 					    "Playback Switch",
4584 					    true, &spec->vmaster_mute.sw_kctl);
4585 		if (err < 0)
4586 			return err;
4587 		if (spec->vmaster_mute.hook) {
4588 			snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4589 						 spec->vmaster_mute_enum);
4590 			snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
4591 		}
4592 	}
4593 
4594 	free_kctls(spec); /* no longer needed */
4595 
4596 	err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
4597 	if (err < 0)
4598 		return err;
4599 
4600 	return 0;
4601 }
4602 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls);
4603 
4604 
4605 /*
4606  * PCM definitions
4607  */
4608 
4609 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
4610 				   struct hda_codec *codec,
4611 				   struct snd_pcm_substream *substream,
4612 				   int action)
4613 {
4614 	struct hda_gen_spec *spec = codec->spec;
4615 	if (spec->pcm_playback_hook)
4616 		spec->pcm_playback_hook(hinfo, codec, substream, action);
4617 }
4618 
4619 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
4620 				  struct hda_codec *codec,
4621 				  struct snd_pcm_substream *substream,
4622 				  int action)
4623 {
4624 	struct hda_gen_spec *spec = codec->spec;
4625 	if (spec->pcm_capture_hook)
4626 		spec->pcm_capture_hook(hinfo, codec, substream, action);
4627 }
4628 
4629 /*
4630  * Analog playback callbacks
4631  */
4632 static int playback_pcm_open(struct hda_pcm_stream *hinfo,
4633 			     struct hda_codec *codec,
4634 			     struct snd_pcm_substream *substream)
4635 {
4636 	struct hda_gen_spec *spec = codec->spec;
4637 	int err;
4638 
4639 	mutex_lock(&spec->pcm_mutex);
4640 	err = snd_hda_multi_out_analog_open(codec,
4641 					    &spec->multiout, substream,
4642 					     hinfo);
4643 	if (!err) {
4644 		spec->active_streams |= 1 << STREAM_MULTI_OUT;
4645 		call_pcm_playback_hook(hinfo, codec, substream,
4646 				       HDA_GEN_PCM_ACT_OPEN);
4647 	}
4648 	mutex_unlock(&spec->pcm_mutex);
4649 	return err;
4650 }
4651 
4652 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4653 				struct hda_codec *codec,
4654 				unsigned int stream_tag,
4655 				unsigned int format,
4656 				struct snd_pcm_substream *substream)
4657 {
4658 	struct hda_gen_spec *spec = codec->spec;
4659 	int err;
4660 
4661 	err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
4662 					       stream_tag, format, substream);
4663 	if (!err)
4664 		call_pcm_playback_hook(hinfo, codec, substream,
4665 				       HDA_GEN_PCM_ACT_PREPARE);
4666 	return err;
4667 }
4668 
4669 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4670 				struct hda_codec *codec,
4671 				struct snd_pcm_substream *substream)
4672 {
4673 	struct hda_gen_spec *spec = codec->spec;
4674 	int err;
4675 
4676 	err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
4677 	if (!err)
4678 		call_pcm_playback_hook(hinfo, codec, substream,
4679 				       HDA_GEN_PCM_ACT_CLEANUP);
4680 	return err;
4681 }
4682 
4683 static int playback_pcm_close(struct hda_pcm_stream *hinfo,
4684 			      struct hda_codec *codec,
4685 			      struct snd_pcm_substream *substream)
4686 {
4687 	struct hda_gen_spec *spec = codec->spec;
4688 	mutex_lock(&spec->pcm_mutex);
4689 	spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
4690 	call_pcm_playback_hook(hinfo, codec, substream,
4691 			       HDA_GEN_PCM_ACT_CLOSE);
4692 	mutex_unlock(&spec->pcm_mutex);
4693 	return 0;
4694 }
4695 
4696 static int capture_pcm_open(struct hda_pcm_stream *hinfo,
4697 			    struct hda_codec *codec,
4698 			    struct snd_pcm_substream *substream)
4699 {
4700 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
4701 	return 0;
4702 }
4703 
4704 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4705 			       struct hda_codec *codec,
4706 			       unsigned int stream_tag,
4707 			       unsigned int format,
4708 			       struct snd_pcm_substream *substream)
4709 {
4710 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4711 	call_pcm_capture_hook(hinfo, codec, substream,
4712 			      HDA_GEN_PCM_ACT_PREPARE);
4713 	return 0;
4714 }
4715 
4716 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4717 			       struct hda_codec *codec,
4718 			       struct snd_pcm_substream *substream)
4719 {
4720 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4721 	call_pcm_capture_hook(hinfo, codec, substream,
4722 			      HDA_GEN_PCM_ACT_CLEANUP);
4723 	return 0;
4724 }
4725 
4726 static int capture_pcm_close(struct hda_pcm_stream *hinfo,
4727 			     struct hda_codec *codec,
4728 			     struct snd_pcm_substream *substream)
4729 {
4730 	call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
4731 	return 0;
4732 }
4733 
4734 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
4735 				 struct hda_codec *codec,
4736 				 struct snd_pcm_substream *substream)
4737 {
4738 	struct hda_gen_spec *spec = codec->spec;
4739 	int err = 0;
4740 
4741 	mutex_lock(&spec->pcm_mutex);
4742 	if (!spec->indep_hp_enabled)
4743 		err = -EBUSY;
4744 	else
4745 		spec->active_streams |= 1 << STREAM_INDEP_HP;
4746 	call_pcm_playback_hook(hinfo, codec, substream,
4747 			       HDA_GEN_PCM_ACT_OPEN);
4748 	mutex_unlock(&spec->pcm_mutex);
4749 	return err;
4750 }
4751 
4752 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
4753 				  struct hda_codec *codec,
4754 				  struct snd_pcm_substream *substream)
4755 {
4756 	struct hda_gen_spec *spec = codec->spec;
4757 	mutex_lock(&spec->pcm_mutex);
4758 	spec->active_streams &= ~(1 << STREAM_INDEP_HP);
4759 	call_pcm_playback_hook(hinfo, codec, substream,
4760 			       HDA_GEN_PCM_ACT_CLOSE);
4761 	mutex_unlock(&spec->pcm_mutex);
4762 	return 0;
4763 }
4764 
4765 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4766 				    struct hda_codec *codec,
4767 				    unsigned int stream_tag,
4768 				    unsigned int format,
4769 				    struct snd_pcm_substream *substream)
4770 {
4771 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4772 	call_pcm_playback_hook(hinfo, codec, substream,
4773 			       HDA_GEN_PCM_ACT_PREPARE);
4774 	return 0;
4775 }
4776 
4777 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4778 				    struct hda_codec *codec,
4779 				    struct snd_pcm_substream *substream)
4780 {
4781 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4782 	call_pcm_playback_hook(hinfo, codec, substream,
4783 			       HDA_GEN_PCM_ACT_CLEANUP);
4784 	return 0;
4785 }
4786 
4787 /*
4788  * Digital out
4789  */
4790 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
4791 				 struct hda_codec *codec,
4792 				 struct snd_pcm_substream *substream)
4793 {
4794 	struct hda_gen_spec *spec = codec->spec;
4795 	return snd_hda_multi_out_dig_open(codec, &spec->multiout);
4796 }
4797 
4798 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4799 				    struct hda_codec *codec,
4800 				    unsigned int stream_tag,
4801 				    unsigned int format,
4802 				    struct snd_pcm_substream *substream)
4803 {
4804 	struct hda_gen_spec *spec = codec->spec;
4805 	return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
4806 					     stream_tag, format, substream);
4807 }
4808 
4809 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4810 				    struct hda_codec *codec,
4811 				    struct snd_pcm_substream *substream)
4812 {
4813 	struct hda_gen_spec *spec = codec->spec;
4814 	return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
4815 }
4816 
4817 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
4818 				  struct hda_codec *codec,
4819 				  struct snd_pcm_substream *substream)
4820 {
4821 	struct hda_gen_spec *spec = codec->spec;
4822 	return snd_hda_multi_out_dig_close(codec, &spec->multiout);
4823 }
4824 
4825 /*
4826  * Analog capture
4827  */
4828 #define alt_capture_pcm_open	capture_pcm_open
4829 #define alt_capture_pcm_close	capture_pcm_close
4830 
4831 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4832 				   struct hda_codec *codec,
4833 				   unsigned int stream_tag,
4834 				   unsigned int format,
4835 				   struct snd_pcm_substream *substream)
4836 {
4837 	struct hda_gen_spec *spec = codec->spec;
4838 
4839 	snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
4840 				   stream_tag, 0, format);
4841 	call_pcm_capture_hook(hinfo, codec, substream,
4842 			      HDA_GEN_PCM_ACT_PREPARE);
4843 	return 0;
4844 }
4845 
4846 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4847 				   struct hda_codec *codec,
4848 				   struct snd_pcm_substream *substream)
4849 {
4850 	struct hda_gen_spec *spec = codec->spec;
4851 
4852 	snd_hda_codec_cleanup_stream(codec,
4853 				     spec->adc_nids[substream->number + 1]);
4854 	call_pcm_capture_hook(hinfo, codec, substream,
4855 			      HDA_GEN_PCM_ACT_CLEANUP);
4856 	return 0;
4857 }
4858 
4859 /*
4860  */
4861 static const struct hda_pcm_stream pcm_analog_playback = {
4862 	.substreams = 1,
4863 	.channels_min = 2,
4864 	.channels_max = 8,
4865 	/* NID is set in build_pcms */
4866 	.ops = {
4867 		.open = playback_pcm_open,
4868 		.close = playback_pcm_close,
4869 		.prepare = playback_pcm_prepare,
4870 		.cleanup = playback_pcm_cleanup
4871 	},
4872 };
4873 
4874 static const struct hda_pcm_stream pcm_analog_capture = {
4875 	.substreams = 1,
4876 	.channels_min = 2,
4877 	.channels_max = 2,
4878 	/* NID is set in build_pcms */
4879 	.ops = {
4880 		.open = capture_pcm_open,
4881 		.close = capture_pcm_close,
4882 		.prepare = capture_pcm_prepare,
4883 		.cleanup = capture_pcm_cleanup
4884 	},
4885 };
4886 
4887 static const struct hda_pcm_stream pcm_analog_alt_playback = {
4888 	.substreams = 1,
4889 	.channels_min = 2,
4890 	.channels_max = 2,
4891 	/* NID is set in build_pcms */
4892 	.ops = {
4893 		.open = alt_playback_pcm_open,
4894 		.close = alt_playback_pcm_close,
4895 		.prepare = alt_playback_pcm_prepare,
4896 		.cleanup = alt_playback_pcm_cleanup
4897 	},
4898 };
4899 
4900 static const struct hda_pcm_stream pcm_analog_alt_capture = {
4901 	.substreams = 2, /* can be overridden */
4902 	.channels_min = 2,
4903 	.channels_max = 2,
4904 	/* NID is set in build_pcms */
4905 	.ops = {
4906 		.open = alt_capture_pcm_open,
4907 		.close = alt_capture_pcm_close,
4908 		.prepare = alt_capture_pcm_prepare,
4909 		.cleanup = alt_capture_pcm_cleanup
4910 	},
4911 };
4912 
4913 static const struct hda_pcm_stream pcm_digital_playback = {
4914 	.substreams = 1,
4915 	.channels_min = 2,
4916 	.channels_max = 2,
4917 	/* NID is set in build_pcms */
4918 	.ops = {
4919 		.open = dig_playback_pcm_open,
4920 		.close = dig_playback_pcm_close,
4921 		.prepare = dig_playback_pcm_prepare,
4922 		.cleanup = dig_playback_pcm_cleanup
4923 	},
4924 };
4925 
4926 static const struct hda_pcm_stream pcm_digital_capture = {
4927 	.substreams = 1,
4928 	.channels_min = 2,
4929 	.channels_max = 2,
4930 	/* NID is set in build_pcms */
4931 };
4932 
4933 /* Used by build_pcms to flag that a PCM has no playback stream */
4934 static const struct hda_pcm_stream pcm_null_stream = {
4935 	.substreams = 0,
4936 	.channels_min = 0,
4937 	.channels_max = 0,
4938 };
4939 
4940 /*
4941  * dynamic changing ADC PCM streams
4942  */
4943 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
4944 {
4945 	struct hda_gen_spec *spec = codec->spec;
4946 	hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
4947 
4948 	if (spec->cur_adc && spec->cur_adc != new_adc) {
4949 		/* stream is running, let's swap the current ADC */
4950 		__snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
4951 		spec->cur_adc = new_adc;
4952 		snd_hda_codec_setup_stream(codec, new_adc,
4953 					   spec->cur_adc_stream_tag, 0,
4954 					   spec->cur_adc_format);
4955 		return true;
4956 	}
4957 	return false;
4958 }
4959 
4960 /* analog capture with dynamic dual-adc changes */
4961 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4962 				       struct hda_codec *codec,
4963 				       unsigned int stream_tag,
4964 				       unsigned int format,
4965 				       struct snd_pcm_substream *substream)
4966 {
4967 	struct hda_gen_spec *spec = codec->spec;
4968 	spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
4969 	spec->cur_adc_stream_tag = stream_tag;
4970 	spec->cur_adc_format = format;
4971 	snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
4972 	return 0;
4973 }
4974 
4975 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4976 				       struct hda_codec *codec,
4977 				       struct snd_pcm_substream *substream)
4978 {
4979 	struct hda_gen_spec *spec = codec->spec;
4980 	snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
4981 	spec->cur_adc = 0;
4982 	return 0;
4983 }
4984 
4985 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
4986 	.substreams = 1,
4987 	.channels_min = 2,
4988 	.channels_max = 2,
4989 	.nid = 0, /* fill later */
4990 	.ops = {
4991 		.prepare = dyn_adc_capture_pcm_prepare,
4992 		.cleanup = dyn_adc_capture_pcm_cleanup
4993 	},
4994 };
4995 
4996 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
4997 				 const char *chip_name)
4998 {
4999 	char *p;
5000 
5001 	if (*str)
5002 		return;
5003 	strlcpy(str, chip_name, len);
5004 
5005 	/* drop non-alnum chars after a space */
5006 	for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
5007 		if (!isalnum(p[1])) {
5008 			*p = 0;
5009 			break;
5010 		}
5011 	}
5012 	strlcat(str, sfx, len);
5013 }
5014 
5015 /* build PCM streams based on the parsed results */
5016 int snd_hda_gen_build_pcms(struct hda_codec *codec)
5017 {
5018 	struct hda_gen_spec *spec = codec->spec;
5019 	struct hda_pcm *info = spec->pcm_rec;
5020 	const struct hda_pcm_stream *p;
5021 	bool have_multi_adcs;
5022 
5023 	codec->num_pcms = 1;
5024 	codec->pcm_info = info;
5025 
5026 	if (spec->no_analog)
5027 		goto skip_analog;
5028 
5029 	fill_pcm_stream_name(spec->stream_name_analog,
5030 			     sizeof(spec->stream_name_analog),
5031 			     " Analog", codec->chip_name);
5032 	info->name = spec->stream_name_analog;
5033 
5034 	if (spec->multiout.num_dacs > 0) {
5035 		p = spec->stream_analog_playback;
5036 		if (!p)
5037 			p = &pcm_analog_playback;
5038 		info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5039 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
5040 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
5041 			spec->multiout.max_channels;
5042 		if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5043 		    spec->autocfg.line_outs == 2)
5044 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
5045 				snd_pcm_2_1_chmaps;
5046 	}
5047 	if (spec->num_adc_nids) {
5048 		p = spec->stream_analog_capture;
5049 		if (!p) {
5050 			if (spec->dyn_adc_switch)
5051 				p = &dyn_adc_pcm_analog_capture;
5052 			else
5053 				p = &pcm_analog_capture;
5054 		}
5055 		info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5056 		info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
5057 	}
5058 
5059  skip_analog:
5060 	/* SPDIF for stream index #1 */
5061 	if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5062 		fill_pcm_stream_name(spec->stream_name_digital,
5063 				     sizeof(spec->stream_name_digital),
5064 				     " Digital", codec->chip_name);
5065 		codec->num_pcms = 2;
5066 		codec->slave_dig_outs = spec->multiout.slave_dig_outs;
5067 		info = spec->pcm_rec + 1;
5068 		info->name = spec->stream_name_digital;
5069 		if (spec->dig_out_type)
5070 			info->pcm_type = spec->dig_out_type;
5071 		else
5072 			info->pcm_type = HDA_PCM_TYPE_SPDIF;
5073 		if (spec->multiout.dig_out_nid) {
5074 			p = spec->stream_digital_playback;
5075 			if (!p)
5076 				p = &pcm_digital_playback;
5077 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5078 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
5079 		}
5080 		if (spec->dig_in_nid) {
5081 			p = spec->stream_digital_capture;
5082 			if (!p)
5083 				p = &pcm_digital_capture;
5084 			info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5085 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
5086 		}
5087 	}
5088 
5089 	if (spec->no_analog)
5090 		return 0;
5091 
5092 	/* If the use of more than one ADC is requested for the current
5093 	 * model, configure a second analog capture-only PCM.
5094 	 */
5095 	have_multi_adcs = (spec->num_adc_nids > 1) &&
5096 		!spec->dyn_adc_switch && !spec->auto_mic;
5097 	/* Additional Analaog capture for index #2 */
5098 	if (spec->alt_dac_nid || have_multi_adcs) {
5099 		fill_pcm_stream_name(spec->stream_name_alt_analog,
5100 				     sizeof(spec->stream_name_alt_analog),
5101 			     " Alt Analog", codec->chip_name);
5102 		codec->num_pcms = 3;
5103 		info = spec->pcm_rec + 2;
5104 		info->name = spec->stream_name_alt_analog;
5105 		if (spec->alt_dac_nid) {
5106 			p = spec->stream_analog_alt_playback;
5107 			if (!p)
5108 				p = &pcm_analog_alt_playback;
5109 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
5110 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
5111 				spec->alt_dac_nid;
5112 		} else {
5113 			info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
5114 				pcm_null_stream;
5115 			info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
5116 		}
5117 		if (have_multi_adcs) {
5118 			p = spec->stream_analog_alt_capture;
5119 			if (!p)
5120 				p = &pcm_analog_alt_capture;
5121 			info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
5122 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
5123 				spec->adc_nids[1];
5124 			info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
5125 				spec->num_adc_nids - 1;
5126 		} else {
5127 			info->stream[SNDRV_PCM_STREAM_CAPTURE] =
5128 				pcm_null_stream;
5129 			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
5130 		}
5131 	}
5132 
5133 	return 0;
5134 }
5135 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms);
5136 
5137 
5138 /*
5139  * Standard auto-parser initializations
5140  */
5141 
5142 /* configure the given path as a proper output */
5143 static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
5144 {
5145 	struct nid_path *path;
5146 	hda_nid_t pin;
5147 
5148 	path = snd_hda_get_path_from_idx(codec, path_idx);
5149 	if (!path || !path->depth)
5150 		return;
5151 	pin = path->path[path->depth - 1];
5152 	restore_pin_ctl(codec, pin);
5153 	snd_hda_activate_path(codec, path, path->active,
5154 			      aamix_default(codec->spec));
5155 	set_pin_eapd(codec, pin, path->active);
5156 }
5157 
5158 /* initialize primary output paths */
5159 static void init_multi_out(struct hda_codec *codec)
5160 {
5161 	struct hda_gen_spec *spec = codec->spec;
5162 	int i;
5163 
5164 	for (i = 0; i < spec->autocfg.line_outs; i++)
5165 		set_output_and_unmute(codec, spec->out_paths[i]);
5166 }
5167 
5168 
5169 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5170 {
5171 	int i;
5172 
5173 	for (i = 0; i < num_outs; i++)
5174 		set_output_and_unmute(codec, paths[i]);
5175 }
5176 
5177 /* initialize hp and speaker paths */
5178 static void init_extra_out(struct hda_codec *codec)
5179 {
5180 	struct hda_gen_spec *spec = codec->spec;
5181 
5182 	if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5183 		__init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5184 	if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5185 		__init_extra_out(codec, spec->autocfg.speaker_outs,
5186 				 spec->speaker_paths);
5187 }
5188 
5189 /* initialize multi-io paths */
5190 static void init_multi_io(struct hda_codec *codec)
5191 {
5192 	struct hda_gen_spec *spec = codec->spec;
5193 	int i;
5194 
5195 	for (i = 0; i < spec->multi_ios; i++) {
5196 		hda_nid_t pin = spec->multi_io[i].pin;
5197 		struct nid_path *path;
5198 		path = get_multiio_path(codec, i);
5199 		if (!path)
5200 			continue;
5201 		if (!spec->multi_io[i].ctl_in)
5202 			spec->multi_io[i].ctl_in =
5203 				snd_hda_codec_get_pin_target(codec, pin);
5204 		snd_hda_activate_path(codec, path, path->active,
5205 				      aamix_default(spec));
5206 	}
5207 }
5208 
5209 static void init_aamix_paths(struct hda_codec *codec)
5210 {
5211 	struct hda_gen_spec *spec = codec->spec;
5212 
5213 	if (!spec->have_aamix_ctl)
5214 		return;
5215 	update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5216 			   spec->aamix_out_paths[0],
5217 			   spec->autocfg.line_out_type);
5218 	update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5219 			   spec->aamix_out_paths[1],
5220 			   AUTO_PIN_HP_OUT);
5221 	update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5222 			   spec->aamix_out_paths[2],
5223 			   AUTO_PIN_SPEAKER_OUT);
5224 }
5225 
5226 /* set up input pins and loopback paths */
5227 static void init_analog_input(struct hda_codec *codec)
5228 {
5229 	struct hda_gen_spec *spec = codec->spec;
5230 	struct auto_pin_cfg *cfg = &spec->autocfg;
5231 	int i;
5232 
5233 	for (i = 0; i < cfg->num_inputs; i++) {
5234 		hda_nid_t nid = cfg->inputs[i].pin;
5235 		if (is_input_pin(codec, nid))
5236 			restore_pin_ctl(codec, nid);
5237 
5238 		/* init loopback inputs */
5239 		if (spec->mixer_nid) {
5240 			resume_path_from_idx(codec, spec->loopback_paths[i]);
5241 			resume_path_from_idx(codec, spec->loopback_merge_path);
5242 		}
5243 	}
5244 }
5245 
5246 /* initialize ADC paths */
5247 static void init_input_src(struct hda_codec *codec)
5248 {
5249 	struct hda_gen_spec *spec = codec->spec;
5250 	struct hda_input_mux *imux = &spec->input_mux;
5251 	struct nid_path *path;
5252 	int i, c, nums;
5253 
5254 	if (spec->dyn_adc_switch)
5255 		nums = 1;
5256 	else
5257 		nums = spec->num_adc_nids;
5258 
5259 	for (c = 0; c < nums; c++) {
5260 		for (i = 0; i < imux->num_items; i++) {
5261 			path = get_input_path(codec, c, i);
5262 			if (path) {
5263 				bool active = path->active;
5264 				if (i == spec->cur_mux[c])
5265 					active = true;
5266 				snd_hda_activate_path(codec, path, active, false);
5267 			}
5268 		}
5269 		if (spec->hp_mic)
5270 			update_hp_mic(codec, c, true);
5271 	}
5272 
5273 	if (spec->cap_sync_hook)
5274 		spec->cap_sync_hook(codec, NULL, NULL);
5275 }
5276 
5277 /* set right pin controls for digital I/O */
5278 static void init_digital(struct hda_codec *codec)
5279 {
5280 	struct hda_gen_spec *spec = codec->spec;
5281 	int i;
5282 	hda_nid_t pin;
5283 
5284 	for (i = 0; i < spec->autocfg.dig_outs; i++)
5285 		set_output_and_unmute(codec, spec->digout_paths[i]);
5286 	pin = spec->autocfg.dig_in_pin;
5287 	if (pin) {
5288 		restore_pin_ctl(codec, pin);
5289 		resume_path_from_idx(codec, spec->digin_path);
5290 	}
5291 }
5292 
5293 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5294  * invalid unsol tags by some reason
5295  */
5296 static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5297 {
5298 	int i;
5299 
5300 	for (i = 0; i < codec->init_pins.used; i++) {
5301 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5302 		hda_nid_t nid = pin->nid;
5303 		if (is_jack_detectable(codec, nid) &&
5304 		    !snd_hda_jack_tbl_get(codec, nid))
5305 			snd_hda_codec_update_cache(codec, nid, 0,
5306 					AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5307 	}
5308 }
5309 
5310 /*
5311  * initialize the generic spec;
5312  * this can be put as patch_ops.init function
5313  */
5314 int snd_hda_gen_init(struct hda_codec *codec)
5315 {
5316 	struct hda_gen_spec *spec = codec->spec;
5317 
5318 	if (spec->init_hook)
5319 		spec->init_hook(codec);
5320 
5321 	snd_hda_apply_verbs(codec);
5322 
5323 	codec->cached_write = 1;
5324 
5325 	init_multi_out(codec);
5326 	init_extra_out(codec);
5327 	init_multi_io(codec);
5328 	init_aamix_paths(codec);
5329 	init_analog_input(codec);
5330 	init_input_src(codec);
5331 	init_digital(codec);
5332 
5333 	clear_unsol_on_unused_pins(codec);
5334 
5335 	/* call init functions of standard auto-mute helpers */
5336 	update_automute_all(codec);
5337 
5338 	snd_hda_codec_flush_cache(codec);
5339 
5340 	if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5341 		snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5342 
5343 	hda_call_check_power_status(codec, 0x01);
5344 	return 0;
5345 }
5346 EXPORT_SYMBOL_GPL(snd_hda_gen_init);
5347 
5348 /*
5349  * free the generic spec;
5350  * this can be put as patch_ops.free function
5351  */
5352 void snd_hda_gen_free(struct hda_codec *codec)
5353 {
5354 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_FREE);
5355 	snd_hda_gen_spec_free(codec->spec);
5356 	kfree(codec->spec);
5357 	codec->spec = NULL;
5358 }
5359 EXPORT_SYMBOL_GPL(snd_hda_gen_free);
5360 
5361 #ifdef CONFIG_PM
5362 /*
5363  * check the loopback power save state;
5364  * this can be put as patch_ops.check_power_status function
5365  */
5366 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5367 {
5368 	struct hda_gen_spec *spec = codec->spec;
5369 	return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5370 }
5371 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status);
5372 #endif
5373 
5374 
5375 /*
5376  * the generic codec support
5377  */
5378 
5379 static const struct hda_codec_ops generic_patch_ops = {
5380 	.build_controls = snd_hda_gen_build_controls,
5381 	.build_pcms = snd_hda_gen_build_pcms,
5382 	.init = snd_hda_gen_init,
5383 	.free = snd_hda_gen_free,
5384 	.unsol_event = snd_hda_jack_unsol_event,
5385 #ifdef CONFIG_PM
5386 	.check_power_status = snd_hda_gen_check_power_status,
5387 #endif
5388 };
5389 
5390 int snd_hda_parse_generic_codec(struct hda_codec *codec)
5391 {
5392 	struct hda_gen_spec *spec;
5393 	int err;
5394 
5395 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5396 	if (!spec)
5397 		return -ENOMEM;
5398 	snd_hda_gen_spec_init(spec);
5399 	codec->spec = spec;
5400 
5401 	err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5402 	if (err < 0)
5403 		return err;
5404 
5405 	err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5406 	if (err < 0)
5407 		goto error;
5408 
5409 	codec->patch_ops = generic_patch_ops;
5410 	return 0;
5411 
5412 error:
5413 	snd_hda_gen_free(codec);
5414 	return err;
5415 }
5416 EXPORT_SYMBOL_GPL(snd_hda_parse_generic_codec);
5417 
5418 MODULE_LICENSE("GPL");
5419 MODULE_DESCRIPTION("Generic HD-audio codec parser");
5420