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