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