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