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