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