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