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