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