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