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