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