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