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