2 * Universal Interface for Intel High Definition Audio Codec
4 * Generic widget tree parser
6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
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.
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.
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
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"
40 #include "hda_generic.h"
44 * snd_hda_gen_spec_init - initialize hda_gen_spec struct
45 * @spec: hda_gen_spec object to initialize
47 * Initialize the given hda_gen_spec object.
49 int snd_hda_gen_spec_init(struct hda_gen_spec
*spec
)
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
);
57 EXPORT_SYMBOL_GPL(snd_hda_gen_spec_init
);
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
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.
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
)
74 struct snd_kcontrol_new
*knew
= snd_array_new(&spec
->kctls
);
79 knew
->name
= kstrdup(name
, GFP_KERNEL
);
81 knew
->name
= kstrdup(knew
->name
, GFP_KERNEL
);
86 EXPORT_SYMBOL_GPL(snd_hda_gen_add_kctl
);
88 static void free_kctls(struct hda_gen_spec
*spec
)
90 if (spec
->kctls
.list
) {
91 struct snd_kcontrol_new
*kctl
= spec
->kctls
.list
;
93 for (i
= 0; i
< spec
->kctls
.used
; i
++)
96 snd_array_free(&spec
->kctls
);
99 static void snd_hda_gen_spec_free(struct hda_gen_spec
*spec
)
104 snd_array_free(&spec
->paths
);
105 snd_array_free(&spec
->loopback_list
);
111 static void parse_user_hints(struct hda_codec
*codec
)
113 struct hda_gen_spec
*spec
= codec
->spec
;
116 val
= snd_hda_get_bool_hint(codec
, "jack_detect");
118 codec
->no_jack_detect
= !val
;
119 val
= snd_hda_get_bool_hint(codec
, "inv_jack_detect");
121 codec
->inv_jack_detect
= !!val
;
122 val
= snd_hda_get_bool_hint(codec
, "trigger_sense");
124 codec
->no_trigger_sense
= !val
;
125 val
= snd_hda_get_bool_hint(codec
, "inv_eapd");
127 codec
->inv_eapd
= !!val
;
128 val
= snd_hda_get_bool_hint(codec
, "pcm_format_first");
130 codec
->pcm_format_first
= !!val
;
131 val
= snd_hda_get_bool_hint(codec
, "sticky_stream");
133 codec
->no_sticky_stream
= !val
;
134 val
= snd_hda_get_bool_hint(codec
, "spdif_status_reset");
136 codec
->spdif_status_reset
= !!val
;
137 val
= snd_hda_get_bool_hint(codec
, "pin_amp_workaround");
139 codec
->pin_amp_workaround
= !!val
;
140 val
= snd_hda_get_bool_hint(codec
, "single_adc_amp");
142 codec
->single_adc_amp
= !!val
;
143 val
= snd_hda_get_bool_hint(codec
, "power_save_node");
145 codec
->power_save_node
= !!val
;
147 val
= snd_hda_get_bool_hint(codec
, "auto_mute");
149 spec
->suppress_auto_mute
= !val
;
150 val
= snd_hda_get_bool_hint(codec
, "auto_mic");
152 spec
->suppress_auto_mic
= !val
;
153 val
= snd_hda_get_bool_hint(codec
, "line_in_auto_switch");
155 spec
->line_in_auto_switch
= !!val
;
156 val
= snd_hda_get_bool_hint(codec
, "auto_mute_via_amp");
158 spec
->auto_mute_via_amp
= !!val
;
159 val
= snd_hda_get_bool_hint(codec
, "need_dac_fix");
161 spec
->need_dac_fix
= !!val
;
162 val
= snd_hda_get_bool_hint(codec
, "primary_hp");
164 spec
->no_primary_hp
= !val
;
165 val
= snd_hda_get_bool_hint(codec
, "multi_io");
167 spec
->no_multi_io
= !val
;
168 val
= snd_hda_get_bool_hint(codec
, "multi_cap_vol");
170 spec
->multi_cap_vol
= !!val
;
171 val
= snd_hda_get_bool_hint(codec
, "inv_dmic_split");
173 spec
->inv_dmic_split
= !!val
;
174 val
= snd_hda_get_bool_hint(codec
, "indep_hp");
176 spec
->indep_hp
= !!val
;
177 val
= snd_hda_get_bool_hint(codec
, "add_stereo_mix_input");
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");
183 spec
->add_jack_modes
= !!val
;
184 val
= snd_hda_get_bool_hint(codec
, "add_in_jack_modes");
186 spec
->add_jack_modes
= !!val
;
187 val
= snd_hda_get_bool_hint(codec
, "add_jack_modes");
189 spec
->add_jack_modes
= !!val
;
190 val
= snd_hda_get_bool_hint(codec
, "power_down_unused");
192 spec
->power_down_unused
= !!val
;
193 val
= snd_hda_get_bool_hint(codec
, "add_hp_mic");
195 spec
->hp_mic
= !!val
;
196 val
= snd_hda_get_bool_hint(codec
, "hp_mic_detect");
198 spec
->suppress_hp_mic_detect
= !val
;
199 val
= snd_hda_get_bool_hint(codec
, "vmaster");
201 spec
->suppress_vmaster
= !val
;
203 if (!snd_hda_get_int_hint(codec
, "mixer_nid", &val
))
204 spec
->mixer_nid
= val
;
208 * pin control value accesses
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)
215 /* restore the pinctl based on the cached value */
216 static inline void restore_pin_ctl(struct hda_codec
*codec
, hda_nid_t pin
)
218 update_pin_ctl(codec
, pin
, snd_hda_codec_get_pin_target(codec
, pin
));
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
)
227 val
= snd_hda_correct_pin_ctl(codec
, pin
, val
);
228 snd_hda_codec_set_pin_target(codec
, pin
, val
);
230 update_pin_ctl(codec
, pin
, val
);
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
)
238 for (i
= 0; i
< num_pins
; i
++)
239 set_pin_target(codec
, pins
[i
], val
, false);
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
)
250 for (i
= 0; i
< nums
; i
++)
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
)
259 return find_idx_in_nid_list(nid
, path
->path
, path
->depth
) >= 0;
262 static struct nid_path
*get_nid_path(struct hda_codec
*codec
,
263 hda_nid_t from_nid
, hda_nid_t to_nid
,
266 struct hda_gen_spec
*spec
= codec
->spec
;
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)
273 if ((!from_nid
|| path
->path
[0] == from_nid
) &&
274 (!to_nid
|| path
->path
[path
->depth
- 1] == to_nid
)) {
276 (anchor_nid
> 0 && is_nid_contained(path
, anchor_nid
)) ||
277 (anchor_nid
< 0 && !is_nid_contained(path
, anchor_nid
)))
285 * snd_hda_get_path_idx - get the index number corresponding to the path
287 * @codec: the HDA codec
288 * @path: nid_path object
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
293 int snd_hda_get_path_idx(struct hda_codec
*codec
, struct nid_path
*path
)
295 struct hda_gen_spec
*spec
= codec
->spec
;
296 struct nid_path
*array
= spec
->paths
.list
;
299 if (!spec
->paths
.used
)
302 if (idx
< 0 || idx
>= spec
->paths
.used
)
306 EXPORT_SYMBOL_GPL(snd_hda_get_path_idx
);
309 * snd_hda_get_path_from_idx - get the path instance corresponding to the
311 * @codec: the HDA codec
312 * @idx: the path index
314 struct nid_path
*snd_hda_get_path_from_idx(struct hda_codec
*codec
, int idx
)
316 struct hda_gen_spec
*spec
= codec
->spec
;
318 if (idx
<= 0 || idx
> spec
->paths
.used
)
320 return snd_array_elem(&spec
->paths
, idx
- 1);
322 EXPORT_SYMBOL_GPL(snd_hda_get_path_from_idx
);
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
)
327 struct hda_gen_spec
*spec
= codec
->spec
;
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
)
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
)
342 if (!from_nid
|| !to_nid
)
344 return snd_hda_get_conn_index(codec
, to_nid
, from_nid
, true) >= 0;
347 /* nid, dir and idx */
348 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
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
)
353 struct hda_gen_spec
*spec
= codec
->spec
;
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
)
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
)
369 unsigned int val
= HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, dir
);
370 return is_ctl_used(codec
, val
, type
);
373 static void print_nid_path(struct hda_codec
*codec
,
374 const char *pfx
, struct nid_path
*path
)
381 for (i
= 0; i
< path
->depth
; i
++)
382 pos
+= scnprintf(pos
, sizeof(buf
) - (pos
- buf
), "%s%02x",
383 pos
!= buf
? ":" : "",
386 codec_dbg(codec
, "%s path: depth=%d '%s'\n", pfx
, path
->depth
, buf
);
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
,
395 const hda_nid_t
*conn
;
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 */
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
410 get_wcaps_type(get_wcaps(codec
, conn
[i
])) != AC_WID_AUD_OUT
||
411 is_dac_already_used(codec
, conn
[i
]))
414 /* anchor is not requested or already passed? */
418 if (depth
>= MAX_NID_PATH_DEPTH
)
420 for (i
= 0; i
< nums
; i
++) {
422 type
= get_wcaps_type(get_wcaps(codec
, conn
[i
]));
423 if (type
== AC_WID_AUD_OUT
|| type
== AC_WID_AUD_IN
||
426 if (__parse_nid_path(codec
, from_nid
, conn
[i
],
427 anchor_nid
, path
, depth
+ 1))
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;
442 * snd_hda_parse_nid_path - parse the widget path from the given nid to
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
450 * Returns true if a matching path is found.
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.
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
)
464 if (__parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
, 1)) {
465 path
->path
[path
->depth
] = to_nid
;
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()
480 * If no valid path is found, returns NULL.
483 snd_hda_add_new_path(struct hda_codec
*codec
, hda_nid_t from_nid
,
484 hda_nid_t to_nid
, int anchor_nid
)
486 struct hda_gen_spec
*spec
= codec
->spec
;
487 struct nid_path
*path
;
489 if (from_nid
&& to_nid
&& !is_reachable_path(codec
, from_nid
, to_nid
))
492 /* check whether the path has been already added */
493 path
= get_nid_path(codec
, from_nid
, to_nid
, anchor_nid
);
497 path
= snd_array_new(&spec
->paths
);
500 memset(path
, 0, sizeof(*path
));
501 if (snd_hda_parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
))
507 EXPORT_SYMBOL_GPL(snd_hda_add_new_path
);
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
)
512 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, idx
);
515 memset(path
, 0, sizeof(*path
));
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
)
521 struct hda_gen_spec
*spec
= codec
->spec
;
522 const hda_nid_t
*list
= spec
->preferred_dacs
;
526 for (; *list
; list
+= 2)
532 /* look for an empty DAC slot */
533 static hda_nid_t
look_for_dac(struct hda_codec
*codec
, hda_nid_t pin
,
536 struct hda_gen_spec
*spec
= codec
->spec
;
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
))
544 cap_digital
= !!(get_wcaps(codec
, nid
) & AC_WCAP_DIGITAL
);
545 if (is_digital
!= cap_digital
)
547 if (is_reachable_path(codec
, nid
, pin
))
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
)
556 val
&= ~(0x3U
<< 16);
561 static bool same_amp_caps(struct hda_codec
*codec
, hda_nid_t nid1
,
562 hda_nid_t nid2
, int dir
)
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
));
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
)
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
];
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
)
590 struct hda_gen_spec
*spec
= codec
->spec
;
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)
597 if (nid_has_volume(codec
, nid
, HDA_OUTPUT
))
604 * path activation / deactivation
607 /* can have the amp-in capability? */
608 static bool has_amp_in(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
610 hda_nid_t nid
= path
->path
[idx
];
611 unsigned int caps
= get_wcaps(codec
, nid
);
612 unsigned int type
= get_wcaps_type(caps
);
614 if (!(caps
& AC_WCAP_IN_AMP
))
616 if (type
== AC_WID_PIN
&& idx
> 0) /* only for input pins */
621 /* can have the amp-out capability? */
622 static bool has_amp_out(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
624 hda_nid_t nid
= path
->path
[idx
];
625 unsigned int caps
= get_wcaps(codec
, nid
);
626 unsigned int type
= get_wcaps_type(caps
);
628 if (!(caps
& AC_WCAP_OUT_AMP
))
630 if (type
== AC_WID_PIN
&& !idx
) /* only for output pins */
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
)
639 struct hda_gen_spec
*spec
= codec
->spec
;
640 int type
= get_wcaps_type(get_wcaps(codec
, nid
));
643 if (nid
== codec
->core
.afg
)
646 for (n
= 0; n
< spec
->paths
.used
; n
++) {
647 struct nid_path
*path
= snd_array_elem(&spec
->paths
, n
);
650 if (codec
->power_save_node
) {
651 if (!path
->stream_enabled
)
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
)
658 for (i
= 0; i
< path
->depth
; i
++) {
659 if (path
->path
[i
] == nid
) {
660 if (dir
== HDA_OUTPUT
|| idx
== -1 ||
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)
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
)
678 unsigned int val
= 0;
680 if (caps
& AC_AMPCAP_NUM_STEPS
) {
683 val
= (caps
& AC_AMPCAP_OFFSET
) >> AC_AMPCAP_OFFSET_SHIFT
;
685 if (caps
& (AC_AMPCAP_MUTE
| AC_AMPCAP_MIN_MUTE
)) {
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
)
695 unsigned int wcaps
= get_wcaps(codec
, nid
);
698 if (wcaps
& AC_WCAP_STEREO
)
700 if (dir
!= HDA_INPUT
|| get_wcaps_type(wcaps
) != AC_WID_AUD_MIX
)
702 if (snd_hda_get_num_conns(codec
, nid
) != 1)
704 if (snd_hda_get_connections(codec
, nid
, &conn
, 1) < 0)
706 return !!(get_wcaps(codec
, conn
) & AC_WCAP_STEREO
);
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
)
712 unsigned int caps
= query_amp_caps(codec
, nid
, dir
);
713 int val
= get_amp_val_to_activate(codec
, nid
, dir
, caps
, false);
715 if (is_stereo_amps(codec
, nid
, dir
))
716 snd_hda_codec_amp_init_stereo(codec
, nid
, dir
, idx
, 0xff, val
);
718 snd_hda_codec_amp_init(codec
, nid
, 0, dir
, idx
, 0xff, val
);
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
)
725 if (is_stereo_amps(codec
, nid
, dir
))
726 return snd_hda_codec_amp_stereo(codec
, nid
, dir
, idx
,
729 return snd_hda_codec_amp_update(codec
, nid
, 0, dir
, idx
,
733 /* calculate amp value mask we can modify;
734 * if the given amp is controlled by mixers, don't touch it
736 static unsigned int get_amp_mask_to_modify(struct hda_codec
*codec
,
737 hda_nid_t nid
, int dir
, int idx
,
740 unsigned int mask
= 0xff;
742 if (caps
& (AC_AMPCAP_MUTE
| AC_AMPCAP_MIN_MUTE
)) {
743 if (is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_MUTE_CTL
))
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
))
754 static void activate_amp(struct hda_codec
*codec
, hda_nid_t nid
, int dir
,
755 int idx
, int idx_to_check
, bool enable
)
758 unsigned int mask
, val
;
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
);
767 update_amp(codec
, nid
, dir
, idx
, mask
, val
);
770 static void check_and_activate_amp(struct hda_codec
*codec
, hda_nid_t nid
,
771 int dir
, int idx
, int idx_to_check
,
774 /* check whether the given amp is still used by others */
775 if (!enable
&& is_active_nid(codec
, nid
, dir
, idx_to_check
))
777 activate_amp(codec
, nid
, dir
, idx
, idx_to_check
, enable
);
780 static void activate_amp_out(struct hda_codec
*codec
, struct nid_path
*path
,
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
);
788 static void activate_amp_in(struct hda_codec
*codec
, struct nid_path
*path
,
789 int i
, bool enable
, bool add_aamix
)
791 struct hda_gen_spec
*spec
= codec
->spec
;
792 const hda_nid_t
*conn
;
795 hda_nid_t nid
= path
->path
[i
];
797 nums
= snd_hda_get_conn_list(codec
, nid
, &conn
);
800 type
= get_wcaps_type(get_wcaps(codec
, nid
));
801 if (type
== AC_WID_PIN
||
802 (type
== AC_WID_AUD_IN
&& codec
->single_adc_amp
)) {
808 for (n
= 0; n
< nums
; n
++)
809 init_amp(codec
, nid
, HDA_INPUT
, n
);
811 /* here is a little bit tricky in comparison with activate_amp_out();
812 * when aa-mixer is available, we need to enable the path as well
814 for (n
= 0; n
< nums
; n
++) {
816 if (conn
[n
] != spec
->mixer_merge_nid
)
818 /* when aamix is disabled, force to off */
820 activate_amp(codec
, nid
, HDA_INPUT
, n
, n
, false);
824 check_and_activate_amp(codec
, nid
, HDA_INPUT
, n
, idx
, enable
);
828 /* sync power of each widget in the the given path */
829 static hda_nid_t
path_power_update(struct hda_codec
*codec
,
830 struct nid_path
*path
,
831 bool allow_powerdown
)
833 hda_nid_t nid
, changed
= 0;
836 for (i
= 0; i
< path
->depth
; i
++) {
838 if (!(get_wcaps(codec
, nid
) & AC_WCAP_POWER
))
840 if (nid
== codec
->core
.afg
)
842 if (!allow_powerdown
|| is_active_nid_for_any(codec
, nid
))
846 power
= snd_hda_codec_read(codec
, nid
, 0,
847 AC_VERB_GET_POWER_STATE
, 0);
848 if (power
!= (state
| (state
<< 4))) {
849 snd_hda_codec_write(codec
, nid
, 0,
850 AC_VERB_SET_POWER_STATE
, state
);
852 /* all known codecs seem to be capable to handl
853 * widgets state even in D3, so far.
854 * if any new codecs need to restore the widget
855 * states after D0 transition, call the function
859 if (state
== AC_PWRST_D0
)
860 snd_hdac_regmap_sync_node(&codec
->core
, nid
);
867 /* do sync with the last power state change */
868 static void sync_power_state_change(struct hda_codec
*codec
, hda_nid_t nid
)
872 snd_hda_codec_read(codec
, nid
, 0, AC_VERB_GET_POWER_STATE
, 0);
877 * snd_hda_activate_path - activate or deactivate the given path
878 * @codec: the HDA codec
879 * @path: the path to activate/deactivate
880 * @enable: flag to activate or not
881 * @add_aamix: enable the input from aamix NID
883 * If @add_aamix is set, enable the input from aa-mix NID as well (if any).
885 void snd_hda_activate_path(struct hda_codec
*codec
, struct nid_path
*path
,
886 bool enable
, bool add_aamix
)
888 struct hda_gen_spec
*spec
= codec
->spec
;
891 path
->active
= enable
;
893 /* make sure the widget is powered up */
894 if (enable
&& (spec
->power_down_unused
|| codec
->power_save_node
))
895 path_power_update(codec
, path
, codec
->power_save_node
);
897 for (i
= path
->depth
- 1; i
>= 0; i
--) {
898 hda_nid_t nid
= path
->path
[i
];
900 if (enable
&& path
->multi
[i
])
901 snd_hda_codec_update_cache(codec
, nid
, 0,
902 AC_VERB_SET_CONNECT_SEL
,
904 if (has_amp_in(codec
, path
, i
))
905 activate_amp_in(codec
, path
, i
, enable
, add_aamix
);
906 if (has_amp_out(codec
, path
, i
))
907 activate_amp_out(codec
, path
, i
, enable
);
910 EXPORT_SYMBOL_GPL(snd_hda_activate_path
);
912 /* if the given path is inactive, put widgets into D3 (only if suitable) */
913 static void path_power_down_sync(struct hda_codec
*codec
, struct nid_path
*path
)
915 struct hda_gen_spec
*spec
= codec
->spec
;
917 if (!(spec
->power_down_unused
|| codec
->power_save_node
) || path
->active
)
919 sync_power_state_change(codec
, path_power_update(codec
, path
, true));
922 /* turn on/off EAPD on the given pin */
923 static void set_pin_eapd(struct hda_codec
*codec
, hda_nid_t pin
, bool enable
)
925 struct hda_gen_spec
*spec
= codec
->spec
;
926 if (spec
->own_eapd_ctl
||
927 !(snd_hda_query_pin_caps(codec
, pin
) & AC_PINCAP_EAPD
))
929 if (spec
->keep_eapd_on
&& !enable
)
933 snd_hda_codec_update_cache(codec
, pin
, 0,
934 AC_VERB_SET_EAPD_BTLENABLE
,
935 enable
? 0x02 : 0x00);
938 /* re-initialize the path specified by the given path index */
939 static void resume_path_from_idx(struct hda_codec
*codec
, int path_idx
)
941 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, path_idx
);
943 snd_hda_activate_path(codec
, path
, path
->active
, false);
948 * Helper functions for creating mixer ctl elements
951 static int hda_gen_mixer_mute_put(struct snd_kcontrol
*kcontrol
,
952 struct snd_ctl_elem_value
*ucontrol
);
953 static int hda_gen_bind_mute_get(struct snd_kcontrol
*kcontrol
,
954 struct snd_ctl_elem_value
*ucontrol
);
955 static int hda_gen_bind_mute_put(struct snd_kcontrol
*kcontrol
,
956 struct snd_ctl_elem_value
*ucontrol
);
963 static const struct snd_kcontrol_new control_templates
[] = {
964 HDA_CODEC_VOLUME(NULL
, 0, 0, 0),
965 /* only the put callback is replaced for handling the special mute */
967 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
968 .subdevice
= HDA_SUBDEV_AMP_FLAG
,
969 .info
= snd_hda_mixer_amp_switch_info
,
970 .get
= snd_hda_mixer_amp_switch_get
,
971 .put
= hda_gen_mixer_mute_put
, /* replaced */
972 .private_value
= HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
975 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
976 .info
= snd_hda_mixer_amp_switch_info
,
977 .get
= hda_gen_bind_mute_get
,
978 .put
= hda_gen_bind_mute_put
, /* replaced */
979 .private_value
= HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
983 /* add dynamic controls from template */
984 static struct snd_kcontrol_new
*
985 add_control(struct hda_gen_spec
*spec
, int type
, const char *name
,
986 int cidx
, unsigned long val
)
988 struct snd_kcontrol_new
*knew
;
990 knew
= snd_hda_gen_add_kctl(spec
, name
, &control_templates
[type
]);
994 if (get_amp_nid_(val
))
995 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
996 knew
->private_value
= val
;
1000 static int add_control_with_pfx(struct hda_gen_spec
*spec
, int type
,
1001 const char *pfx
, const char *dir
,
1002 const char *sfx
, int cidx
, unsigned long val
)
1004 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
1005 snprintf(name
, sizeof(name
), "%s %s %s", pfx
, dir
, sfx
);
1006 if (!add_control(spec
, type
, name
, cidx
, val
))
1011 #define add_pb_vol_ctrl(spec, type, pfx, val) \
1012 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1013 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1014 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1015 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1016 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1017 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1018 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1020 static int add_vol_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
1021 unsigned int chs
, struct nid_path
*path
)
1026 val
= path
->ctls
[NID_PATH_VOL_CTL
];
1029 val
= amp_val_replace_channels(val
, chs
);
1030 return __add_pb_vol_ctrl(codec
->spec
, HDA_CTL_WIDGET_VOL
, pfx
, cidx
, val
);
1033 /* return the channel bits suitable for the given path->ctls[] */
1034 static int get_default_ch_nums(struct hda_codec
*codec
, struct nid_path
*path
,
1037 int chs
= 1; /* mono (left only) */
1039 hda_nid_t nid
= get_amp_nid_(path
->ctls
[type
]);
1040 if (nid
&& (get_wcaps(codec
, nid
) & AC_WCAP_STEREO
))
1041 chs
= 3; /* stereo */
1046 static int add_stereo_vol(struct hda_codec
*codec
, const char *pfx
, int cidx
,
1047 struct nid_path
*path
)
1049 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_VOL_CTL
);
1050 return add_vol_ctl(codec
, pfx
, cidx
, chs
, path
);
1053 /* create a mute-switch for the given mixer widget;
1054 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
1056 static int add_sw_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
1057 unsigned int chs
, struct nid_path
*path
)
1060 int type
= HDA_CTL_WIDGET_MUTE
;
1064 val
= path
->ctls
[NID_PATH_MUTE_CTL
];
1067 val
= amp_val_replace_channels(val
, chs
);
1068 if (get_amp_direction_(val
) == HDA_INPUT
) {
1069 hda_nid_t nid
= get_amp_nid_(val
);
1070 int nums
= snd_hda_get_num_conns(codec
, nid
);
1072 type
= HDA_CTL_BIND_MUTE
;
1076 return __add_pb_sw_ctrl(codec
->spec
, type
, pfx
, cidx
, val
);
1079 static int add_stereo_sw(struct hda_codec
*codec
, const char *pfx
,
1080 int cidx
, struct nid_path
*path
)
1082 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_MUTE_CTL
);
1083 return add_sw_ctl(codec
, pfx
, cidx
, chs
, path
);
1086 /* playback mute control with the software mute bit check */
1087 static void sync_auto_mute_bits(struct snd_kcontrol
*kcontrol
,
1088 struct snd_ctl_elem_value
*ucontrol
)
1090 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1091 struct hda_gen_spec
*spec
= codec
->spec
;
1093 if (spec
->auto_mute_via_amp
) {
1094 hda_nid_t nid
= get_amp_nid(kcontrol
);
1095 bool enabled
= !((spec
->mute_bits
>> nid
) & 1);
1096 ucontrol
->value
.integer
.value
[0] &= enabled
;
1097 ucontrol
->value
.integer
.value
[1] &= enabled
;
1101 static int hda_gen_mixer_mute_put(struct snd_kcontrol
*kcontrol
,
1102 struct snd_ctl_elem_value
*ucontrol
)
1104 sync_auto_mute_bits(kcontrol
, ucontrol
);
1105 return snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
1109 * Bound mute controls
1111 #define AMP_VAL_IDX_SHIFT 19
1112 #define AMP_VAL_IDX_MASK (0x0f<<19)
1114 static int hda_gen_bind_mute_get(struct snd_kcontrol
*kcontrol
,
1115 struct snd_ctl_elem_value
*ucontrol
)
1117 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1121 mutex_lock(&codec
->control_mutex
);
1122 pval
= kcontrol
->private_value
;
1123 kcontrol
->private_value
= pval
& ~AMP_VAL_IDX_MASK
; /* index 0 */
1124 err
= snd_hda_mixer_amp_switch_get(kcontrol
, ucontrol
);
1125 kcontrol
->private_value
= pval
;
1126 mutex_unlock(&codec
->control_mutex
);
1130 static int hda_gen_bind_mute_put(struct snd_kcontrol
*kcontrol
,
1131 struct snd_ctl_elem_value
*ucontrol
)
1133 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1135 int i
, indices
, err
= 0, change
= 0;
1137 sync_auto_mute_bits(kcontrol
, ucontrol
);
1139 mutex_lock(&codec
->control_mutex
);
1140 pval
= kcontrol
->private_value
;
1141 indices
= (pval
& AMP_VAL_IDX_MASK
) >> AMP_VAL_IDX_SHIFT
;
1142 for (i
= 0; i
< indices
; i
++) {
1143 kcontrol
->private_value
= (pval
& ~AMP_VAL_IDX_MASK
) |
1144 (i
<< AMP_VAL_IDX_SHIFT
);
1145 err
= snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
1150 kcontrol
->private_value
= pval
;
1151 mutex_unlock(&codec
->control_mutex
);
1152 return err
< 0 ? err
: change
;
1155 /* any ctl assigned to the path with the given index? */
1156 static bool path_has_mixer(struct hda_codec
*codec
, int path_idx
, int ctl_type
)
1158 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1159 return path
&& path
->ctls
[ctl_type
];
1162 static const char * const channel_name
[4] = {
1163 "Front", "Surround", "CLFE", "Side"
1166 /* give some appropriate ctl name prefix for the given line out channel */
1167 static const char *get_line_out_pfx(struct hda_codec
*codec
, int ch
,
1168 int *index
, int ctl_type
)
1170 struct hda_gen_spec
*spec
= codec
->spec
;
1171 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1174 if (cfg
->line_outs
== 1 && !spec
->multi_ios
&&
1175 !codec
->force_pin_prefix
&&
1176 !cfg
->hp_outs
&& !cfg
->speaker_outs
)
1177 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
1179 /* if there is really a single DAC used in the whole output paths,
1180 * use it master (or "PCM" if a vmaster hook is present)
1182 if (spec
->multiout
.num_dacs
== 1 && !spec
->mixer_nid
&&
1183 !codec
->force_pin_prefix
&&
1184 !spec
->multiout
.hp_out_nid
[0] && !spec
->multiout
.extra_out_nid
[0])
1185 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
1187 /* multi-io channels */
1188 if (ch
>= cfg
->line_outs
)
1189 return channel_name
[ch
];
1191 switch (cfg
->line_out_type
) {
1192 case AUTO_PIN_SPEAKER_OUT
:
1193 /* if the primary channel vol/mute is shared with HP volume,
1194 * don't name it as Speaker
1196 if (!ch
&& cfg
->hp_outs
&&
1197 !path_has_mixer(codec
, spec
->hp_paths
[0], ctl_type
))
1199 if (cfg
->line_outs
== 1)
1201 if (cfg
->line_outs
== 2)
1202 return ch
? "Bass Speaker" : "Speaker";
1204 case AUTO_PIN_HP_OUT
:
1205 /* if the primary channel vol/mute is shared with spk volume,
1206 * don't name it as Headphone
1208 if (!ch
&& cfg
->speaker_outs
&&
1209 !path_has_mixer(codec
, spec
->speaker_paths
[0], ctl_type
))
1211 /* for multi-io case, only the primary out */
1212 if (ch
&& spec
->multi_ios
)
1216 case AUTO_PIN_LINE_OUT
:
1217 /* This deals with the case where we have two DACs and
1218 * one LO, one HP and one Speaker */
1219 if (!ch
&& cfg
->speaker_outs
&& cfg
->hp_outs
) {
1220 bool hp_lo_shared
= !path_has_mixer(codec
, spec
->hp_paths
[0], ctl_type
);
1221 bool spk_lo_shared
= !path_has_mixer(codec
, spec
->speaker_paths
[0], ctl_type
);
1222 if (hp_lo_shared
&& spk_lo_shared
)
1223 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
1225 return "Headphone+LO";
1227 return "Speaker+LO";
1231 /* for a single channel output, we don't have to name the channel */
1232 if (cfg
->line_outs
== 1 && !spec
->multi_ios
)
1235 if (ch
>= ARRAY_SIZE(channel_name
)) {
1240 return channel_name
[ch
];
1244 * Parse output paths
1247 /* badness definition */
1249 /* No primary DAC is found for the main output */
1250 BAD_NO_PRIMARY_DAC
= 0x10000,
1251 /* No DAC is found for the extra output */
1252 BAD_NO_DAC
= 0x4000,
1253 /* No possible multi-ios */
1254 BAD_MULTI_IO
= 0x120,
1255 /* No individual DAC for extra output */
1256 BAD_NO_EXTRA_DAC
= 0x102,
1257 /* No individual DAC for extra surrounds */
1258 BAD_NO_EXTRA_SURR_DAC
= 0x101,
1259 /* Primary DAC shared with main surrounds */
1260 BAD_SHARED_SURROUND
= 0x100,
1261 /* No independent HP possible */
1262 BAD_NO_INDEP_HP
= 0x10,
1263 /* Primary DAC shared with main CLFE */
1264 BAD_SHARED_CLFE
= 0x10,
1265 /* Primary DAC shared with extra surrounds */
1266 BAD_SHARED_EXTRA_SURROUND
= 0x10,
1267 /* Volume widget is shared */
1268 BAD_SHARED_VOL
= 0x10,
1271 /* look for widgets in the given path which are appropriate for
1272 * volume and mute controls, and assign the values to ctls[].
1274 * When no appropriate widget is found in the path, the badness value
1275 * is incremented depending on the situation. The function returns the
1276 * total badness for both volume and mute controls.
1278 static int assign_out_path_ctls(struct hda_codec
*codec
, struct nid_path
*path
)
1280 struct hda_gen_spec
*spec
= codec
->spec
;
1286 return BAD_SHARED_VOL
* 2;
1288 if (path
->ctls
[NID_PATH_VOL_CTL
] ||
1289 path
->ctls
[NID_PATH_MUTE_CTL
])
1290 return 0; /* already evaluated */
1292 nid
= look_for_out_vol_nid(codec
, path
);
1294 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
1295 if (spec
->dac_min_mute
)
1296 val
|= HDA_AMP_VAL_MIN_MUTE
;
1297 if (is_ctl_used(codec
, val
, NID_PATH_VOL_CTL
))
1298 badness
+= BAD_SHARED_VOL
;
1300 path
->ctls
[NID_PATH_VOL_CTL
] = val
;
1302 badness
+= BAD_SHARED_VOL
;
1303 nid
= look_for_out_mute_nid(codec
, path
);
1305 unsigned int wid_type
= get_wcaps_type(get_wcaps(codec
, nid
));
1306 if (wid_type
== AC_WID_PIN
|| wid_type
== AC_WID_AUD_OUT
||
1307 nid_has_mute(codec
, nid
, HDA_OUTPUT
))
1308 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
1310 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_INPUT
);
1311 if (is_ctl_used(codec
, val
, NID_PATH_MUTE_CTL
))
1312 badness
+= BAD_SHARED_VOL
;
1314 path
->ctls
[NID_PATH_MUTE_CTL
] = val
;
1316 badness
+= BAD_SHARED_VOL
;
1320 const struct badness_table hda_main_out_badness
= {
1321 .no_primary_dac
= BAD_NO_PRIMARY_DAC
,
1322 .no_dac
= BAD_NO_DAC
,
1323 .shared_primary
= BAD_NO_PRIMARY_DAC
,
1324 .shared_surr
= BAD_SHARED_SURROUND
,
1325 .shared_clfe
= BAD_SHARED_CLFE
,
1326 .shared_surr_main
= BAD_SHARED_SURROUND
,
1328 EXPORT_SYMBOL_GPL(hda_main_out_badness
);
1330 const struct badness_table hda_extra_out_badness
= {
1331 .no_primary_dac
= BAD_NO_DAC
,
1332 .no_dac
= BAD_NO_DAC
,
1333 .shared_primary
= BAD_NO_EXTRA_DAC
,
1334 .shared_surr
= BAD_SHARED_EXTRA_SURROUND
,
1335 .shared_clfe
= BAD_SHARED_EXTRA_SURROUND
,
1336 .shared_surr_main
= BAD_NO_EXTRA_SURR_DAC
,
1338 EXPORT_SYMBOL_GPL(hda_extra_out_badness
);
1340 /* get the DAC of the primary output corresponding to the given array index */
1341 static hda_nid_t
get_primary_out(struct hda_codec
*codec
, int idx
)
1343 struct hda_gen_spec
*spec
= codec
->spec
;
1344 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1346 if (cfg
->line_outs
> idx
)
1347 return spec
->private_dac_nids
[idx
];
1348 idx
-= cfg
->line_outs
;
1349 if (spec
->multi_ios
> idx
)
1350 return spec
->multi_io
[idx
].dac
;
1354 /* return the DAC if it's reachable, otherwise zero */
1355 static inline hda_nid_t
try_dac(struct hda_codec
*codec
,
1356 hda_nid_t dac
, hda_nid_t pin
)
1358 return is_reachable_path(codec
, dac
, pin
) ? dac
: 0;
1361 /* try to assign DACs to pins and return the resultant badness */
1362 static int try_assign_dacs(struct hda_codec
*codec
, int num_outs
,
1363 const hda_nid_t
*pins
, hda_nid_t
*dacs
,
1365 const struct badness_table
*bad
)
1367 struct hda_gen_spec
*spec
= codec
->spec
;
1375 for (i
= 0; i
< num_outs
; i
++) {
1376 struct nid_path
*path
;
1377 hda_nid_t pin
= pins
[i
];
1379 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1381 badness
+= assign_out_path_ctls(codec
, path
);
1385 dacs
[i
] = get_preferred_dac(codec
, pin
);
1387 if (is_dac_already_used(codec
, dacs
[i
]))
1388 badness
+= bad
->shared_primary
;
1392 dacs
[i
] = look_for_dac(codec
, pin
, false);
1393 if (!dacs
[i
] && !i
) {
1394 /* try to steal the DAC of surrounds for the front */
1395 for (j
= 1; j
< num_outs
; j
++) {
1396 if (is_reachable_path(codec
, dacs
[j
], pin
)) {
1399 invalidate_nid_path(codec
, path_idx
[j
]);
1408 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1410 dac
= try_dac(codec
, dacs
[0], pin
);
1412 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1415 badness
+= bad
->shared_primary
;
1417 badness
+= bad
->shared_surr
;
1419 badness
+= bad
->shared_clfe
;
1420 } else if (is_reachable_path(codec
, spec
->private_dac_nids
[0], pin
)) {
1421 dac
= spec
->private_dac_nids
[0];
1422 badness
+= bad
->shared_surr_main
;
1424 badness
+= bad
->no_primary_dac
;
1426 badness
+= bad
->no_dac
;
1430 path
= snd_hda_add_new_path(codec
, dac
, pin
, -spec
->mixer_nid
);
1431 if (!path
&& !i
&& spec
->mixer_nid
) {
1432 /* try with aamix */
1433 path
= snd_hda_add_new_path(codec
, dac
, pin
, 0);
1437 badness
+= bad
->no_dac
;
1439 /* print_nid_path(codec, "output", path); */
1440 path
->active
= true;
1441 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1442 badness
+= assign_out_path_ctls(codec
, path
);
1449 /* return NID if the given pin has only a single connection to a certain DAC */
1450 static hda_nid_t
get_dac_if_single(struct hda_codec
*codec
, hda_nid_t pin
)
1452 struct hda_gen_spec
*spec
= codec
->spec
;
1454 hda_nid_t nid_found
= 0;
1456 for (i
= 0; i
< spec
->num_all_dacs
; i
++) {
1457 hda_nid_t nid
= spec
->all_dacs
[i
];
1458 if (!nid
|| is_dac_already_used(codec
, nid
))
1460 if (is_reachable_path(codec
, nid
, pin
)) {
1469 /* check whether the given pin can be a multi-io pin */
1470 static bool can_be_multiio_pin(struct hda_codec
*codec
,
1471 unsigned int location
, hda_nid_t nid
)
1473 unsigned int defcfg
, caps
;
1475 defcfg
= snd_hda_codec_get_pincfg(codec
, nid
);
1476 if (get_defcfg_connect(defcfg
) != AC_JACK_PORT_COMPLEX
)
1478 if (location
&& get_defcfg_location(defcfg
) != location
)
1480 caps
= snd_hda_query_pin_caps(codec
, nid
);
1481 if (!(caps
& AC_PINCAP_OUT
))
1486 /* count the number of input pins that are capable to be multi-io */
1487 static int count_multiio_pins(struct hda_codec
*codec
, hda_nid_t reference_pin
)
1489 struct hda_gen_spec
*spec
= codec
->spec
;
1490 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1491 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1492 unsigned int location
= get_defcfg_location(defcfg
);
1496 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1497 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1498 if (cfg
->inputs
[i
].type
!= type
)
1500 if (can_be_multiio_pin(codec
, location
,
1501 cfg
->inputs
[i
].pin
))
1511 * When hardwired is set, try to fill ony hardwired pins, and returns
1512 * zero if any pins are filled, non-zero if nothing found.
1513 * When hardwired is off, try to fill possible input pins, and returns
1514 * the badness value.
1516 static int fill_multi_ios(struct hda_codec
*codec
,
1517 hda_nid_t reference_pin
,
1520 struct hda_gen_spec
*spec
= codec
->spec
;
1521 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1522 int type
, i
, j
, num_pins
, old_pins
;
1523 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1524 unsigned int location
= get_defcfg_location(defcfg
);
1526 struct nid_path
*path
;
1528 old_pins
= spec
->multi_ios
;
1532 num_pins
= count_multiio_pins(codec
, reference_pin
);
1536 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1537 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1538 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
1541 if (cfg
->inputs
[i
].type
!= type
)
1543 if (!can_be_multiio_pin(codec
, location
, nid
))
1545 for (j
= 0; j
< spec
->multi_ios
; j
++) {
1546 if (nid
== spec
->multi_io
[j
].pin
)
1549 if (j
< spec
->multi_ios
)
1553 dac
= get_dac_if_single(codec
, nid
);
1555 dac
= look_for_dac(codec
, nid
, false);
1560 path
= snd_hda_add_new_path(codec
, dac
, nid
,
1566 /* print_nid_path(codec, "multiio", path); */
1567 spec
->multi_io
[spec
->multi_ios
].pin
= nid
;
1568 spec
->multi_io
[spec
->multi_ios
].dac
= dac
;
1569 spec
->out_paths
[cfg
->line_outs
+ spec
->multi_ios
] =
1570 snd_hda_get_path_idx(codec
, path
);
1572 if (spec
->multi_ios
>= 2)
1578 badness
= BAD_MULTI_IO
;
1579 if (old_pins
== spec
->multi_ios
) {
1581 return 1; /* nothing found */
1583 return badness
; /* no badness if nothing found */
1585 if (!hardwired
&& spec
->multi_ios
< 2) {
1586 /* cancel newly assigned paths */
1587 spec
->paths
.used
-= spec
->multi_ios
- old_pins
;
1588 spec
->multi_ios
= old_pins
;
1592 /* assign volume and mute controls */
1593 for (i
= old_pins
; i
< spec
->multi_ios
; i
++) {
1594 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[cfg
->line_outs
+ i
]);
1595 badness
+= assign_out_path_ctls(codec
, path
);
1601 /* map DACs for all pins in the list if they are single connections */
1602 static bool map_singles(struct hda_codec
*codec
, int outs
,
1603 const hda_nid_t
*pins
, hda_nid_t
*dacs
, int *path_idx
)
1605 struct hda_gen_spec
*spec
= codec
->spec
;
1608 for (i
= 0; i
< outs
; i
++) {
1609 struct nid_path
*path
;
1613 dac
= get_dac_if_single(codec
, pins
[i
]);
1616 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
],
1618 if (!path
&& !i
&& spec
->mixer_nid
)
1619 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
], 0);
1623 /* print_nid_path(codec, "output", path); */
1624 path
->active
= true;
1625 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1631 static inline bool has_aamix_out_paths(struct hda_gen_spec
*spec
)
1633 return spec
->aamix_out_paths
[0] || spec
->aamix_out_paths
[1] ||
1634 spec
->aamix_out_paths
[2];
1637 /* create a new path including aamix if available, and return its index */
1638 static int check_aamix_out_path(struct hda_codec
*codec
, int path_idx
)
1640 struct hda_gen_spec
*spec
= codec
->spec
;
1641 struct nid_path
*path
;
1642 hda_nid_t path_dac
, dac
, pin
;
1644 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1645 if (!path
|| !path
->depth
||
1646 is_nid_contained(path
, spec
->mixer_nid
))
1648 path_dac
= path
->path
[0];
1649 dac
= spec
->private_dac_nids
[0];
1650 pin
= path
->path
[path
->depth
- 1];
1651 path
= snd_hda_add_new_path(codec
, dac
, pin
, spec
->mixer_nid
);
1653 if (dac
!= path_dac
)
1655 else if (spec
->multiout
.hp_out_nid
[0])
1656 dac
= spec
->multiout
.hp_out_nid
[0];
1657 else if (spec
->multiout
.extra_out_nid
[0])
1658 dac
= spec
->multiout
.extra_out_nid
[0];
1662 path
= snd_hda_add_new_path(codec
, dac
, pin
,
1667 /* print_nid_path(codec, "output-aamix", path); */
1668 path
->active
= false; /* unused as default */
1669 path
->pin_fixed
= true; /* static route */
1670 return snd_hda_get_path_idx(codec
, path
);
1673 /* check whether the independent HP is available with the current config */
1674 static bool indep_hp_possible(struct hda_codec
*codec
)
1676 struct hda_gen_spec
*spec
= codec
->spec
;
1677 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1678 struct nid_path
*path
;
1681 if (cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
1682 idx
= spec
->out_paths
[0];
1684 idx
= spec
->hp_paths
[0];
1685 path
= snd_hda_get_path_from_idx(codec
, idx
);
1689 /* assume no path conflicts unless aamix is involved */
1690 if (!spec
->mixer_nid
|| !is_nid_contained(path
, spec
->mixer_nid
))
1693 /* check whether output paths contain aamix */
1694 for (i
= 0; i
< cfg
->line_outs
; i
++) {
1695 if (spec
->out_paths
[i
] == idx
)
1697 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[i
]);
1698 if (path
&& is_nid_contained(path
, spec
->mixer_nid
))
1701 for (i
= 0; i
< cfg
->speaker_outs
; i
++) {
1702 path
= snd_hda_get_path_from_idx(codec
, spec
->speaker_paths
[i
]);
1703 if (path
&& is_nid_contained(path
, spec
->mixer_nid
))
1710 /* fill the empty entries in the dac array for speaker/hp with the
1711 * shared dac pointed by the paths
1713 static void refill_shared_dacs(struct hda_codec
*codec
, int num_outs
,
1714 hda_nid_t
*dacs
, int *path_idx
)
1716 struct nid_path
*path
;
1719 for (i
= 0; i
< num_outs
; i
++) {
1722 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1725 dacs
[i
] = path
->path
[0];
1729 /* fill in the dac_nids table from the parsed pin configuration */
1730 static int fill_and_eval_dacs(struct hda_codec
*codec
,
1731 bool fill_hardwired
,
1732 bool fill_mio_first
)
1734 struct hda_gen_spec
*spec
= codec
->spec
;
1735 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1736 int i
, err
, badness
;
1738 /* set num_dacs once to full for look_for_dac() */
1739 spec
->multiout
.num_dacs
= cfg
->line_outs
;
1740 spec
->multiout
.dac_nids
= spec
->private_dac_nids
;
1741 memset(spec
->private_dac_nids
, 0, sizeof(spec
->private_dac_nids
));
1742 memset(spec
->multiout
.hp_out_nid
, 0, sizeof(spec
->multiout
.hp_out_nid
));
1743 memset(spec
->multiout
.extra_out_nid
, 0, sizeof(spec
->multiout
.extra_out_nid
));
1744 spec
->multi_ios
= 0;
1745 snd_array_free(&spec
->paths
);
1747 /* clear path indices */
1748 memset(spec
->out_paths
, 0, sizeof(spec
->out_paths
));
1749 memset(spec
->hp_paths
, 0, sizeof(spec
->hp_paths
));
1750 memset(spec
->speaker_paths
, 0, sizeof(spec
->speaker_paths
));
1751 memset(spec
->aamix_out_paths
, 0, sizeof(spec
->aamix_out_paths
));
1752 memset(spec
->digout_paths
, 0, sizeof(spec
->digout_paths
));
1753 memset(spec
->input_paths
, 0, sizeof(spec
->input_paths
));
1754 memset(spec
->loopback_paths
, 0, sizeof(spec
->loopback_paths
));
1755 memset(&spec
->digin_path
, 0, sizeof(spec
->digin_path
));
1759 /* fill hard-wired DACs first */
1760 if (fill_hardwired
) {
1763 mapped
= map_singles(codec
, cfg
->line_outs
,
1765 spec
->private_dac_nids
,
1767 mapped
|= map_singles(codec
, cfg
->hp_outs
,
1769 spec
->multiout
.hp_out_nid
,
1771 mapped
|= map_singles(codec
, cfg
->speaker_outs
,
1773 spec
->multiout
.extra_out_nid
,
1774 spec
->speaker_paths
);
1775 if (!spec
->no_multi_io
&&
1776 fill_mio_first
&& cfg
->line_outs
== 1 &&
1777 cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1778 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], true);
1785 badness
+= try_assign_dacs(codec
, cfg
->line_outs
, cfg
->line_out_pins
,
1786 spec
->private_dac_nids
, spec
->out_paths
,
1787 spec
->main_out_badness
);
1789 if (!spec
->no_multi_io
&& fill_mio_first
&&
1790 cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1791 /* try to fill multi-io first */
1792 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1795 /* we don't count badness at this stage yet */
1798 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
1799 err
= try_assign_dacs(codec
, cfg
->hp_outs
, cfg
->hp_pins
,
1800 spec
->multiout
.hp_out_nid
,
1802 spec
->extra_out_badness
);
1807 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1808 err
= try_assign_dacs(codec
, cfg
->speaker_outs
,
1810 spec
->multiout
.extra_out_nid
,
1811 spec
->speaker_paths
,
1812 spec
->extra_out_badness
);
1817 if (!spec
->no_multi_io
&&
1818 cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1819 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1825 if (spec
->mixer_nid
) {
1826 spec
->aamix_out_paths
[0] =
1827 check_aamix_out_path(codec
, spec
->out_paths
[0]);
1828 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1829 spec
->aamix_out_paths
[1] =
1830 check_aamix_out_path(codec
, spec
->hp_paths
[0]);
1831 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1832 spec
->aamix_out_paths
[2] =
1833 check_aamix_out_path(codec
, spec
->speaker_paths
[0]);
1836 if (!spec
->no_multi_io
&&
1837 cfg
->hp_outs
&& cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
)
1838 if (count_multiio_pins(codec
, cfg
->hp_pins
[0]) >= 2)
1839 spec
->multi_ios
= 1; /* give badness */
1841 /* re-count num_dacs and squash invalid entries */
1842 spec
->multiout
.num_dacs
= 0;
1843 for (i
= 0; i
< cfg
->line_outs
; i
++) {
1844 if (spec
->private_dac_nids
[i
])
1845 spec
->multiout
.num_dacs
++;
1847 memmove(spec
->private_dac_nids
+ i
,
1848 spec
->private_dac_nids
+ i
+ 1,
1849 sizeof(hda_nid_t
) * (cfg
->line_outs
- i
- 1));
1850 spec
->private_dac_nids
[cfg
->line_outs
- 1] = 0;
1854 spec
->ext_channel_count
= spec
->min_channel_count
=
1855 spec
->multiout
.num_dacs
* 2;
1857 if (spec
->multi_ios
== 2) {
1858 for (i
= 0; i
< 2; i
++)
1859 spec
->private_dac_nids
[spec
->multiout
.num_dacs
++] =
1860 spec
->multi_io
[i
].dac
;
1861 } else if (spec
->multi_ios
) {
1862 spec
->multi_ios
= 0;
1863 badness
+= BAD_MULTI_IO
;
1866 if (spec
->indep_hp
&& !indep_hp_possible(codec
))
1867 badness
+= BAD_NO_INDEP_HP
;
1869 /* re-fill the shared DAC for speaker / headphone */
1870 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1871 refill_shared_dacs(codec
, cfg
->hp_outs
,
1872 spec
->multiout
.hp_out_nid
,
1874 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1875 refill_shared_dacs(codec
, cfg
->speaker_outs
,
1876 spec
->multiout
.extra_out_nid
,
1877 spec
->speaker_paths
);
1882 #define DEBUG_BADNESS
1884 #ifdef DEBUG_BADNESS
1885 #define debug_badness(fmt, ...) \
1886 codec_dbg(codec, fmt, ##__VA_ARGS__)
1888 #define debug_badness(fmt, ...) \
1889 do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0)
1892 #ifdef DEBUG_BADNESS
1893 static inline void print_nid_path_idx(struct hda_codec
*codec
,
1894 const char *pfx
, int idx
)
1896 struct nid_path
*path
;
1898 path
= snd_hda_get_path_from_idx(codec
, idx
);
1900 print_nid_path(codec
, pfx
, path
);
1903 static void debug_show_configs(struct hda_codec
*codec
,
1904 struct auto_pin_cfg
*cfg
)
1906 struct hda_gen_spec
*spec
= codec
->spec
;
1907 static const char * const lo_type
[3] = { "LO", "SP", "HP" };
1910 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1911 cfg
->line_out_pins
[0], cfg
->line_out_pins
[1],
1912 cfg
->line_out_pins
[2], cfg
->line_out_pins
[3],
1913 spec
->multiout
.dac_nids
[0],
1914 spec
->multiout
.dac_nids
[1],
1915 spec
->multiout
.dac_nids
[2],
1916 spec
->multiout
.dac_nids
[3],
1917 lo_type
[cfg
->line_out_type
]);
1918 for (i
= 0; i
< cfg
->line_outs
; i
++)
1919 print_nid_path_idx(codec
, " out", spec
->out_paths
[i
]);
1920 if (spec
->multi_ios
> 0)
1921 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1923 spec
->multi_io
[0].pin
, spec
->multi_io
[1].pin
,
1924 spec
->multi_io
[0].dac
, spec
->multi_io
[1].dac
);
1925 for (i
= 0; i
< spec
->multi_ios
; i
++)
1926 print_nid_path_idx(codec
, " mio",
1927 spec
->out_paths
[cfg
->line_outs
+ i
]);
1929 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1930 cfg
->hp_pins
[0], cfg
->hp_pins
[1],
1931 cfg
->hp_pins
[2], cfg
->hp_pins
[3],
1932 spec
->multiout
.hp_out_nid
[0],
1933 spec
->multiout
.hp_out_nid
[1],
1934 spec
->multiout
.hp_out_nid
[2],
1935 spec
->multiout
.hp_out_nid
[3]);
1936 for (i
= 0; i
< cfg
->hp_outs
; i
++)
1937 print_nid_path_idx(codec
, " hp ", spec
->hp_paths
[i
]);
1938 if (cfg
->speaker_outs
)
1939 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1940 cfg
->speaker_pins
[0], cfg
->speaker_pins
[1],
1941 cfg
->speaker_pins
[2], cfg
->speaker_pins
[3],
1942 spec
->multiout
.extra_out_nid
[0],
1943 spec
->multiout
.extra_out_nid
[1],
1944 spec
->multiout
.extra_out_nid
[2],
1945 spec
->multiout
.extra_out_nid
[3]);
1946 for (i
= 0; i
< cfg
->speaker_outs
; i
++)
1947 print_nid_path_idx(codec
, " spk", spec
->speaker_paths
[i
]);
1948 for (i
= 0; i
< 3; i
++)
1949 print_nid_path_idx(codec
, " mix", spec
->aamix_out_paths
[i
]);
1952 #define debug_show_configs(codec, cfg) /* NOP */
1955 /* find all available DACs of the codec */
1956 static void fill_all_dac_nids(struct hda_codec
*codec
)
1958 struct hda_gen_spec
*spec
= codec
->spec
;
1961 spec
->num_all_dacs
= 0;
1962 memset(spec
->all_dacs
, 0, sizeof(spec
->all_dacs
));
1963 for_each_hda_codec_node(nid
, codec
) {
1964 if (get_wcaps_type(get_wcaps(codec
, nid
)) != AC_WID_AUD_OUT
)
1966 if (spec
->num_all_dacs
>= ARRAY_SIZE(spec
->all_dacs
)) {
1967 codec_err(codec
, "Too many DACs!\n");
1970 spec
->all_dacs
[spec
->num_all_dacs
++] = nid
;
1974 static int parse_output_paths(struct hda_codec
*codec
)
1976 struct hda_gen_spec
*spec
= codec
->spec
;
1977 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1978 struct auto_pin_cfg
*best_cfg
;
1980 int best_badness
= INT_MAX
;
1982 bool fill_hardwired
= true, fill_mio_first
= true;
1983 bool best_wired
= true, best_mio
= true;
1984 bool hp_spk_swapped
= false;
1986 best_cfg
= kmalloc(sizeof(*best_cfg
), GFP_KERNEL
);
1992 badness
= fill_and_eval_dacs(codec
, fill_hardwired
,
1998 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1999 cfg
->line_out_type
, fill_hardwired
, fill_mio_first
,
2001 debug_show_configs(codec
, cfg
);
2002 if (badness
< best_badness
) {
2003 best_badness
= badness
;
2005 best_wired
= fill_hardwired
;
2006 best_mio
= fill_mio_first
;
2010 fill_mio_first
= !fill_mio_first
;
2011 if (!fill_mio_first
)
2013 fill_hardwired
= !fill_hardwired
;
2014 if (!fill_hardwired
)
2018 hp_spk_swapped
= true;
2019 if (cfg
->speaker_outs
> 0 &&
2020 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
2021 cfg
->hp_outs
= cfg
->line_outs
;
2022 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
2023 sizeof(cfg
->hp_pins
));
2024 cfg
->line_outs
= cfg
->speaker_outs
;
2025 memcpy(cfg
->line_out_pins
, cfg
->speaker_pins
,
2026 sizeof(cfg
->speaker_pins
));
2027 cfg
->speaker_outs
= 0;
2028 memset(cfg
->speaker_pins
, 0, sizeof(cfg
->speaker_pins
));
2029 cfg
->line_out_type
= AUTO_PIN_SPEAKER_OUT
;
2030 fill_hardwired
= true;
2033 if (cfg
->hp_outs
> 0 &&
2034 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
2035 cfg
->speaker_outs
= cfg
->line_outs
;
2036 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
2037 sizeof(cfg
->speaker_pins
));
2038 cfg
->line_outs
= cfg
->hp_outs
;
2039 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
,
2040 sizeof(cfg
->hp_pins
));
2042 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
2043 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
2044 fill_hardwired
= true;
2051 debug_badness("==> restoring best_cfg\n");
2053 fill_and_eval_dacs(codec
, best_wired
, best_mio
);
2055 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
2056 cfg
->line_out_type
, best_wired
, best_mio
);
2057 debug_show_configs(codec
, cfg
);
2059 if (cfg
->line_out_pins
[0]) {
2060 struct nid_path
*path
;
2061 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[0]);
2063 spec
->vmaster_nid
= look_for_out_vol_nid(codec
, path
);
2064 if (spec
->vmaster_nid
) {
2065 snd_hda_set_vmaster_tlv(codec
, spec
->vmaster_nid
,
2066 HDA_OUTPUT
, spec
->vmaster_tlv
);
2067 if (spec
->dac_min_mute
)
2068 spec
->vmaster_tlv
[3] |= TLV_DB_SCALE_MUTE
;
2072 /* set initial pinctl targets */
2073 if (spec
->prefer_hp_amp
|| cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
2077 set_pin_targets(codec
, cfg
->line_outs
, cfg
->line_out_pins
, val
);
2078 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
2079 set_pin_targets(codec
, cfg
->hp_outs
, cfg
->hp_pins
, PIN_HP
);
2080 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
2081 val
= spec
->prefer_hp_amp
? PIN_HP
: PIN_OUT
;
2082 set_pin_targets(codec
, cfg
->speaker_outs
,
2083 cfg
->speaker_pins
, val
);
2086 /* clear indep_hp flag if not available */
2087 if (spec
->indep_hp
&& !indep_hp_possible(codec
))
2094 /* add playback controls from the parsed DAC table */
2095 static int create_multi_out_ctls(struct hda_codec
*codec
,
2096 const struct auto_pin_cfg
*cfg
)
2098 struct hda_gen_spec
*spec
= codec
->spec
;
2099 int i
, err
, noutputs
;
2101 noutputs
= cfg
->line_outs
;
2102 if (spec
->multi_ios
> 0 && cfg
->line_outs
< 3)
2103 noutputs
+= spec
->multi_ios
;
2105 for (i
= 0; i
< noutputs
; i
++) {
2108 struct nid_path
*path
;
2110 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[i
]);
2114 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_VOL_CTL
);
2115 if (!name
|| !strcmp(name
, "CLFE")) {
2117 err
= add_vol_ctl(codec
, "Center", 0, 1, path
);
2120 err
= add_vol_ctl(codec
, "LFE", 0, 2, path
);
2124 err
= add_stereo_vol(codec
, name
, index
, path
);
2129 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_MUTE_CTL
);
2130 if (!name
|| !strcmp(name
, "CLFE")) {
2131 err
= add_sw_ctl(codec
, "Center", 0, 1, path
);
2134 err
= add_sw_ctl(codec
, "LFE", 0, 2, path
);
2138 err
= add_stereo_sw(codec
, name
, index
, path
);
2146 static int create_extra_out(struct hda_codec
*codec
, int path_idx
,
2147 const char *pfx
, int cidx
)
2149 struct nid_path
*path
;
2152 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
2155 err
= add_stereo_vol(codec
, pfx
, cidx
, path
);
2158 err
= add_stereo_sw(codec
, pfx
, cidx
, path
);
2164 /* add playback controls for speaker and HP outputs */
2165 static int create_extra_outs(struct hda_codec
*codec
, int num_pins
,
2166 const int *paths
, const char *pfx
)
2170 for (i
= 0; i
< num_pins
; i
++) {
2172 char tmp
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
2175 if (num_pins
== 2 && i
== 1 && !strcmp(pfx
, "Speaker"))
2176 name
= "Bass Speaker";
2177 else if (num_pins
>= 3) {
2178 snprintf(tmp
, sizeof(tmp
), "%s %s",
2179 pfx
, channel_name
[i
]);
2185 err
= create_extra_out(codec
, paths
[i
], name
, idx
);
2192 static int create_hp_out_ctls(struct hda_codec
*codec
)
2194 struct hda_gen_spec
*spec
= codec
->spec
;
2195 return create_extra_outs(codec
, spec
->autocfg
.hp_outs
,
2200 static int create_speaker_out_ctls(struct hda_codec
*codec
)
2202 struct hda_gen_spec
*spec
= codec
->spec
;
2203 return create_extra_outs(codec
, spec
->autocfg
.speaker_outs
,
2204 spec
->speaker_paths
,
2209 * independent HP controls
2212 static void call_hp_automute(struct hda_codec
*codec
,
2213 struct hda_jack_callback
*jack
);
2214 static int indep_hp_info(struct snd_kcontrol
*kcontrol
,
2215 struct snd_ctl_elem_info
*uinfo
)
2217 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
2220 static int indep_hp_get(struct snd_kcontrol
*kcontrol
,
2221 struct snd_ctl_elem_value
*ucontrol
)
2223 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2224 struct hda_gen_spec
*spec
= codec
->spec
;
2225 ucontrol
->value
.enumerated
.item
[0] = spec
->indep_hp_enabled
;
2229 static void update_aamix_paths(struct hda_codec
*codec
, bool do_mix
,
2230 int nomix_path_idx
, int mix_path_idx
,
2233 static int indep_hp_put(struct snd_kcontrol
*kcontrol
,
2234 struct snd_ctl_elem_value
*ucontrol
)
2236 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2237 struct hda_gen_spec
*spec
= codec
->spec
;
2238 unsigned int select
= ucontrol
->value
.enumerated
.item
[0];
2241 mutex_lock(&spec
->pcm_mutex
);
2242 if (spec
->active_streams
) {
2247 if (spec
->indep_hp_enabled
!= select
) {
2249 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2250 dacp
= &spec
->private_dac_nids
[0];
2252 dacp
= &spec
->multiout
.hp_out_nid
[0];
2254 /* update HP aamix paths in case it conflicts with indep HP */
2255 if (spec
->have_aamix_ctl
) {
2256 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2257 update_aamix_paths(codec
, spec
->aamix_mode
,
2259 spec
->aamix_out_paths
[0],
2260 spec
->autocfg
.line_out_type
);
2262 update_aamix_paths(codec
, spec
->aamix_mode
,
2264 spec
->aamix_out_paths
[1],
2268 spec
->indep_hp_enabled
= select
;
2269 if (spec
->indep_hp_enabled
)
2272 *dacp
= spec
->alt_dac_nid
;
2274 call_hp_automute(codec
, NULL
);
2278 mutex_unlock(&spec
->pcm_mutex
);
2282 static const struct snd_kcontrol_new indep_hp_ctl
= {
2283 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2284 .name
= "Independent HP",
2285 .info
= indep_hp_info
,
2286 .get
= indep_hp_get
,
2287 .put
= indep_hp_put
,
2291 static int create_indep_hp_ctls(struct hda_codec
*codec
)
2293 struct hda_gen_spec
*spec
= codec
->spec
;
2296 if (!spec
->indep_hp
)
2298 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2299 dac
= spec
->multiout
.dac_nids
[0];
2301 dac
= spec
->multiout
.hp_out_nid
[0];
2307 spec
->indep_hp_enabled
= false;
2308 spec
->alt_dac_nid
= dac
;
2309 if (!snd_hda_gen_add_kctl(spec
, NULL
, &indep_hp_ctl
))
2315 * channel mode enum control
2318 static int ch_mode_info(struct snd_kcontrol
*kcontrol
,
2319 struct snd_ctl_elem_info
*uinfo
)
2321 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2322 struct hda_gen_spec
*spec
= codec
->spec
;
2325 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
2327 uinfo
->value
.enumerated
.items
= spec
->multi_ios
+ 1;
2328 if (uinfo
->value
.enumerated
.item
> spec
->multi_ios
)
2329 uinfo
->value
.enumerated
.item
= spec
->multi_ios
;
2330 chs
= uinfo
->value
.enumerated
.item
* 2 + spec
->min_channel_count
;
2331 sprintf(uinfo
->value
.enumerated
.name
, "%dch", chs
);
2335 static int ch_mode_get(struct snd_kcontrol
*kcontrol
,
2336 struct snd_ctl_elem_value
*ucontrol
)
2338 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2339 struct hda_gen_spec
*spec
= codec
->spec
;
2340 ucontrol
->value
.enumerated
.item
[0] =
2341 (spec
->ext_channel_count
- spec
->min_channel_count
) / 2;
2345 static inline struct nid_path
*
2346 get_multiio_path(struct hda_codec
*codec
, int idx
)
2348 struct hda_gen_spec
*spec
= codec
->spec
;
2349 return snd_hda_get_path_from_idx(codec
,
2350 spec
->out_paths
[spec
->autocfg
.line_outs
+ idx
]);
2353 static void update_automute_all(struct hda_codec
*codec
);
2355 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2356 * used for output paths
2358 static bool aamix_default(struct hda_gen_spec
*spec
)
2360 return !spec
->have_aamix_ctl
|| spec
->aamix_mode
;
2363 static int set_multi_io(struct hda_codec
*codec
, int idx
, bool output
)
2365 struct hda_gen_spec
*spec
= codec
->spec
;
2366 hda_nid_t nid
= spec
->multi_io
[idx
].pin
;
2367 struct nid_path
*path
;
2369 path
= get_multiio_path(codec
, idx
);
2373 if (path
->active
== output
)
2377 set_pin_target(codec
, nid
, PIN_OUT
, true);
2378 snd_hda_activate_path(codec
, path
, true, aamix_default(spec
));
2379 set_pin_eapd(codec
, nid
, true);
2381 set_pin_eapd(codec
, nid
, false);
2382 snd_hda_activate_path(codec
, path
, false, aamix_default(spec
));
2383 set_pin_target(codec
, nid
, spec
->multi_io
[idx
].ctl_in
, true);
2384 path_power_down_sync(codec
, path
);
2387 /* update jack retasking in case it modifies any of them */
2388 update_automute_all(codec
);
2393 static int ch_mode_put(struct snd_kcontrol
*kcontrol
,
2394 struct snd_ctl_elem_value
*ucontrol
)
2396 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2397 struct hda_gen_spec
*spec
= codec
->spec
;
2400 ch
= ucontrol
->value
.enumerated
.item
[0];
2401 if (ch
< 0 || ch
> spec
->multi_ios
)
2403 if (ch
== (spec
->ext_channel_count
- spec
->min_channel_count
) / 2)
2405 spec
->ext_channel_count
= ch
* 2 + spec
->min_channel_count
;
2406 for (i
= 0; i
< spec
->multi_ios
; i
++)
2407 set_multi_io(codec
, i
, i
< ch
);
2408 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
2409 spec
->const_channel_count
);
2410 if (spec
->need_dac_fix
)
2411 spec
->multiout
.num_dacs
= spec
->multiout
.max_channels
/ 2;
2415 static const struct snd_kcontrol_new channel_mode_enum
= {
2416 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2417 .name
= "Channel Mode",
2418 .info
= ch_mode_info
,
2423 static int create_multi_channel_mode(struct hda_codec
*codec
)
2425 struct hda_gen_spec
*spec
= codec
->spec
;
2427 if (spec
->multi_ios
> 0) {
2428 if (!snd_hda_gen_add_kctl(spec
, NULL
, &channel_mode_enum
))
2435 * aamix loopback enable/disable switch
2438 #define loopback_mixing_info indep_hp_info
2440 static int loopback_mixing_get(struct snd_kcontrol
*kcontrol
,
2441 struct snd_ctl_elem_value
*ucontrol
)
2443 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2444 struct hda_gen_spec
*spec
= codec
->spec
;
2445 ucontrol
->value
.enumerated
.item
[0] = spec
->aamix_mode
;
2449 static void update_aamix_paths(struct hda_codec
*codec
, bool do_mix
,
2450 int nomix_path_idx
, int mix_path_idx
,
2453 struct hda_gen_spec
*spec
= codec
->spec
;
2454 struct nid_path
*nomix_path
, *mix_path
;
2456 nomix_path
= snd_hda_get_path_from_idx(codec
, nomix_path_idx
);
2457 mix_path
= snd_hda_get_path_from_idx(codec
, mix_path_idx
);
2458 if (!nomix_path
|| !mix_path
)
2461 /* if HP aamix path is driven from a different DAC and the
2462 * independent HP mode is ON, can't turn on aamix path
2464 if (out_type
== AUTO_PIN_HP_OUT
&& spec
->indep_hp_enabled
&&
2465 mix_path
->path
[0] != spec
->alt_dac_nid
)
2469 snd_hda_activate_path(codec
, nomix_path
, false, true);
2470 snd_hda_activate_path(codec
, mix_path
, true, true);
2471 path_power_down_sync(codec
, nomix_path
);
2473 snd_hda_activate_path(codec
, mix_path
, false, false);
2474 snd_hda_activate_path(codec
, nomix_path
, true, false);
2475 path_power_down_sync(codec
, mix_path
);
2479 /* re-initialize the output paths; only called from loopback_mixing_put() */
2480 static void update_output_paths(struct hda_codec
*codec
, int num_outs
,
2483 struct hda_gen_spec
*spec
= codec
->spec
;
2484 struct nid_path
*path
;
2487 for (i
= 0; i
< num_outs
; i
++) {
2488 path
= snd_hda_get_path_from_idx(codec
, paths
[i
]);
2490 snd_hda_activate_path(codec
, path
, path
->active
,
2495 static int loopback_mixing_put(struct snd_kcontrol
*kcontrol
,
2496 struct snd_ctl_elem_value
*ucontrol
)
2498 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2499 struct hda_gen_spec
*spec
= codec
->spec
;
2500 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2501 unsigned int val
= ucontrol
->value
.enumerated
.item
[0];
2503 if (val
== spec
->aamix_mode
)
2505 spec
->aamix_mode
= val
;
2506 if (has_aamix_out_paths(spec
)) {
2507 update_aamix_paths(codec
, val
, spec
->out_paths
[0],
2508 spec
->aamix_out_paths
[0],
2509 cfg
->line_out_type
);
2510 update_aamix_paths(codec
, val
, spec
->hp_paths
[0],
2511 spec
->aamix_out_paths
[1],
2513 update_aamix_paths(codec
, val
, spec
->speaker_paths
[0],
2514 spec
->aamix_out_paths
[2],
2515 AUTO_PIN_SPEAKER_OUT
);
2517 update_output_paths(codec
, cfg
->line_outs
, spec
->out_paths
);
2518 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
2519 update_output_paths(codec
, cfg
->hp_outs
, spec
->hp_paths
);
2520 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
2521 update_output_paths(codec
, cfg
->speaker_outs
,
2522 spec
->speaker_paths
);
2527 static const struct snd_kcontrol_new loopback_mixing_enum
= {
2528 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2529 .name
= "Loopback Mixing",
2530 .info
= loopback_mixing_info
,
2531 .get
= loopback_mixing_get
,
2532 .put
= loopback_mixing_put
,
2535 static int create_loopback_mixing_ctl(struct hda_codec
*codec
)
2537 struct hda_gen_spec
*spec
= codec
->spec
;
2539 if (!spec
->mixer_nid
)
2541 if (!snd_hda_gen_add_kctl(spec
, NULL
, &loopback_mixing_enum
))
2543 spec
->have_aamix_ctl
= 1;
2548 * shared headphone/mic handling
2551 static void call_update_outputs(struct hda_codec
*codec
);
2553 /* for shared I/O, change the pin-control accordingly */
2554 static void update_hp_mic(struct hda_codec
*codec
, int adc_mux
, bool force
)
2556 struct hda_gen_spec
*spec
= codec
->spec
;
2561 pin
= spec
->hp_mic_pin
;
2562 as_mic
= spec
->cur_mux
[adc_mux
] == spec
->hp_mic_mux_idx
;
2565 val
= snd_hda_codec_get_pin_target(codec
, pin
);
2575 val
= snd_hda_get_default_vref(codec
, pin
);
2576 /* if the HP pin doesn't support VREF and the codec driver gives an
2577 * alternative pin, set up the VREF on that pin instead
2579 if (val
== AC_PINCTL_VREF_HIZ
&& spec
->shared_mic_vref_pin
) {
2580 const hda_nid_t vref_pin
= spec
->shared_mic_vref_pin
;
2581 unsigned int vref_val
= snd_hda_get_default_vref(codec
, vref_pin
);
2582 if (vref_val
!= AC_PINCTL_VREF_HIZ
)
2583 snd_hda_set_pin_ctl_cache(codec
, vref_pin
,
2584 PIN_IN
| (as_mic
? vref_val
: 0));
2587 if (!spec
->hp_mic_jack_modes
) {
2592 set_pin_target(codec
, pin
, val
, true);
2593 call_hp_automute(codec
, NULL
);
2597 /* create a shared input with the headphone out */
2598 static int create_hp_mic(struct hda_codec
*codec
)
2600 struct hda_gen_spec
*spec
= codec
->spec
;
2601 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2602 unsigned int defcfg
;
2605 if (!spec
->hp_mic
) {
2606 if (spec
->suppress_hp_mic_detect
)
2608 /* automatic detection: only if no input or a single internal
2609 * input pin is found, try to detect the shared hp/mic
2611 if (cfg
->num_inputs
> 1)
2613 else if (cfg
->num_inputs
== 1) {
2614 defcfg
= snd_hda_codec_get_pincfg(codec
, cfg
->inputs
[0].pin
);
2615 if (snd_hda_get_input_pin_attr(defcfg
) != INPUT_PIN_ATTR_INT
)
2620 spec
->hp_mic
= 0; /* clear once */
2621 if (cfg
->num_inputs
>= AUTO_CFG_MAX_INS
)
2625 if (cfg
->line_out_type
== AUTO_PIN_HP_OUT
&& cfg
->line_outs
> 0)
2626 nid
= cfg
->line_out_pins
[0];
2627 else if (cfg
->hp_outs
> 0)
2628 nid
= cfg
->hp_pins
[0];
2632 if (!(snd_hda_query_pin_caps(codec
, nid
) & AC_PINCAP_IN
))
2633 return 0; /* no input */
2635 cfg
->inputs
[cfg
->num_inputs
].pin
= nid
;
2636 cfg
->inputs
[cfg
->num_inputs
].type
= AUTO_PIN_MIC
;
2637 cfg
->inputs
[cfg
->num_inputs
].is_headphone_mic
= 1;
2640 spec
->hp_mic_pin
= nid
;
2641 /* we can't handle auto-mic together with HP-mic */
2642 spec
->suppress_auto_mic
= 1;
2643 codec_dbg(codec
, "Enable shared I/O jack on NID 0x%x\n", nid
);
2651 static int create_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
);
2653 static const char * const out_jack_texts
[] = {
2654 "Line Out", "Headphone Out",
2657 static int out_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2658 struct snd_ctl_elem_info
*uinfo
)
2660 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 2, out_jack_texts
);
2663 static int out_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2664 struct snd_ctl_elem_value
*ucontrol
)
2666 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2667 hda_nid_t nid
= kcontrol
->private_value
;
2668 if (snd_hda_codec_get_pin_target(codec
, nid
) == PIN_HP
)
2669 ucontrol
->value
.enumerated
.item
[0] = 1;
2671 ucontrol
->value
.enumerated
.item
[0] = 0;
2675 static int out_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2676 struct snd_ctl_elem_value
*ucontrol
)
2678 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2679 hda_nid_t nid
= kcontrol
->private_value
;
2682 val
= ucontrol
->value
.enumerated
.item
[0] ? PIN_HP
: PIN_OUT
;
2683 if (snd_hda_codec_get_pin_target(codec
, nid
) == val
)
2685 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2689 static const struct snd_kcontrol_new out_jack_mode_enum
= {
2690 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2691 .info
= out_jack_mode_info
,
2692 .get
= out_jack_mode_get
,
2693 .put
= out_jack_mode_put
,
2696 static bool find_kctl_name(struct hda_codec
*codec
, const char *name
, int idx
)
2698 struct hda_gen_spec
*spec
= codec
->spec
;
2701 for (i
= 0; i
< spec
->kctls
.used
; i
++) {
2702 struct snd_kcontrol_new
*kctl
= snd_array_elem(&spec
->kctls
, i
);
2703 if (!strcmp(kctl
->name
, name
) && kctl
->index
== idx
)
2709 static void get_jack_mode_name(struct hda_codec
*codec
, hda_nid_t pin
,
2710 char *name
, size_t name_len
)
2712 struct hda_gen_spec
*spec
= codec
->spec
;
2715 snd_hda_get_pin_label(codec
, pin
, &spec
->autocfg
, name
, name_len
, &idx
);
2716 strlcat(name
, " Jack Mode", name_len
);
2718 for (; find_kctl_name(codec
, name
, idx
); idx
++)
2722 static int get_out_jack_num_items(struct hda_codec
*codec
, hda_nid_t pin
)
2724 struct hda_gen_spec
*spec
= codec
->spec
;
2725 if (spec
->add_jack_modes
) {
2726 unsigned int pincap
= snd_hda_query_pin_caps(codec
, pin
);
2727 if ((pincap
& AC_PINCAP_OUT
) && (pincap
& AC_PINCAP_HP_DRV
))
2733 static int create_out_jack_modes(struct hda_codec
*codec
, int num_pins
,
2736 struct hda_gen_spec
*spec
= codec
->spec
;
2739 for (i
= 0; i
< num_pins
; i
++) {
2740 hda_nid_t pin
= pins
[i
];
2741 if (pin
== spec
->hp_mic_pin
)
2743 if (get_out_jack_num_items(codec
, pin
) > 1) {
2744 struct snd_kcontrol_new
*knew
;
2745 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
2746 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2747 knew
= snd_hda_gen_add_kctl(spec
, name
,
2748 &out_jack_mode_enum
);
2751 knew
->private_value
= pin
;
2762 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2765 static const char * const vref_texts
[NUM_VREFS
] = {
2766 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2767 "", "Mic 80pc Bias", "Mic 100pc Bias"
2770 static unsigned int get_vref_caps(struct hda_codec
*codec
, hda_nid_t pin
)
2772 unsigned int pincap
;
2774 pincap
= snd_hda_query_pin_caps(codec
, pin
);
2775 pincap
= (pincap
& AC_PINCAP_VREF
) >> AC_PINCAP_VREF_SHIFT
;
2776 /* filter out unusual vrefs */
2777 pincap
&= ~(AC_PINCAP_VREF_GRD
| AC_PINCAP_VREF_100
);
2781 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2782 static int get_vref_idx(unsigned int vref_caps
, unsigned int item_idx
)
2784 unsigned int i
, n
= 0;
2786 for (i
= 0; i
< NUM_VREFS
; i
++) {
2787 if (vref_caps
& (1 << i
)) {
2796 /* convert back from the vref ctl index to the enum item index */
2797 static int cvt_from_vref_idx(unsigned int vref_caps
, unsigned int idx
)
2799 unsigned int i
, n
= 0;
2801 for (i
= 0; i
< NUM_VREFS
; i
++) {
2804 if (vref_caps
& (1 << i
))
2810 static int in_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2811 struct snd_ctl_elem_info
*uinfo
)
2813 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2814 hda_nid_t nid
= kcontrol
->private_value
;
2815 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2817 snd_hda_enum_helper_info(kcontrol
, uinfo
, hweight32(vref_caps
),
2819 /* set the right text */
2820 strcpy(uinfo
->value
.enumerated
.name
,
2821 vref_texts
[get_vref_idx(vref_caps
, uinfo
->value
.enumerated
.item
)]);
2825 static int in_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2826 struct snd_ctl_elem_value
*ucontrol
)
2828 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2829 hda_nid_t nid
= kcontrol
->private_value
;
2830 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2833 idx
= snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_VREFEN
;
2834 ucontrol
->value
.enumerated
.item
[0] = cvt_from_vref_idx(vref_caps
, idx
);
2838 static int in_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2839 struct snd_ctl_elem_value
*ucontrol
)
2841 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2842 hda_nid_t nid
= kcontrol
->private_value
;
2843 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2844 unsigned int val
, idx
;
2846 val
= snd_hda_codec_get_pin_target(codec
, nid
);
2847 idx
= cvt_from_vref_idx(vref_caps
, val
& AC_PINCTL_VREFEN
);
2848 if (idx
== ucontrol
->value
.enumerated
.item
[0])
2851 val
&= ~AC_PINCTL_VREFEN
;
2852 val
|= get_vref_idx(vref_caps
, ucontrol
->value
.enumerated
.item
[0]);
2853 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2857 static const struct snd_kcontrol_new in_jack_mode_enum
= {
2858 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2859 .info
= in_jack_mode_info
,
2860 .get
= in_jack_mode_get
,
2861 .put
= in_jack_mode_put
,
2864 static int get_in_jack_num_items(struct hda_codec
*codec
, hda_nid_t pin
)
2866 struct hda_gen_spec
*spec
= codec
->spec
;
2868 if (spec
->add_jack_modes
)
2869 nitems
= hweight32(get_vref_caps(codec
, pin
));
2870 return nitems
? nitems
: 1;
2873 static int create_in_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
)
2875 struct hda_gen_spec
*spec
= codec
->spec
;
2876 struct snd_kcontrol_new
*knew
;
2877 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
2878 unsigned int defcfg
;
2880 if (pin
== spec
->hp_mic_pin
)
2881 return 0; /* already done in create_out_jack_mode() */
2883 /* no jack mode for fixed pins */
2884 defcfg
= snd_hda_codec_get_pincfg(codec
, pin
);
2885 if (snd_hda_get_input_pin_attr(defcfg
) == INPUT_PIN_ATTR_INT
)
2888 /* no multiple vref caps? */
2889 if (get_in_jack_num_items(codec
, pin
) <= 1)
2892 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2893 knew
= snd_hda_gen_add_kctl(spec
, name
, &in_jack_mode_enum
);
2896 knew
->private_value
= pin
;
2901 * HP/mic shared jack mode
2903 static int hp_mic_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2904 struct snd_ctl_elem_info
*uinfo
)
2906 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2907 hda_nid_t nid
= kcontrol
->private_value
;
2908 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2909 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2910 const char *text
= NULL
;
2913 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
2915 uinfo
->value
.enumerated
.items
= out_jacks
+ in_jacks
;
2916 if (uinfo
->value
.enumerated
.item
>= uinfo
->value
.enumerated
.items
)
2917 uinfo
->value
.enumerated
.item
= uinfo
->value
.enumerated
.items
- 1;
2918 idx
= uinfo
->value
.enumerated
.item
;
2919 if (idx
< out_jacks
) {
2921 text
= out_jack_texts
[idx
];
2923 text
= "Headphone Out";
2927 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2928 text
= vref_texts
[get_vref_idx(vref_caps
, idx
)];
2933 strcpy(uinfo
->value
.enumerated
.name
, text
);
2937 static int get_cur_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t nid
)
2939 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2940 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2941 unsigned int val
= snd_hda_codec_get_pin_target(codec
, nid
);
2944 if (val
& PIN_OUT
) {
2945 if (out_jacks
> 1 && val
== PIN_HP
)
2947 } else if (val
& PIN_IN
) {
2950 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2951 val
&= AC_PINCTL_VREFEN
;
2952 idx
+= cvt_from_vref_idx(vref_caps
, val
);
2958 static int hp_mic_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2959 struct snd_ctl_elem_value
*ucontrol
)
2961 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2962 hda_nid_t nid
= kcontrol
->private_value
;
2963 ucontrol
->value
.enumerated
.item
[0] =
2964 get_cur_hp_mic_jack_mode(codec
, nid
);
2968 static int hp_mic_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2969 struct snd_ctl_elem_value
*ucontrol
)
2971 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2972 hda_nid_t nid
= kcontrol
->private_value
;
2973 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2974 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2975 unsigned int val
, oldval
, idx
;
2977 oldval
= get_cur_hp_mic_jack_mode(codec
, nid
);
2978 idx
= ucontrol
->value
.enumerated
.item
[0];
2982 if (idx
< out_jacks
) {
2984 val
= idx
? PIN_HP
: PIN_OUT
;
2990 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2991 val
= snd_hda_codec_get_pin_target(codec
, nid
);
2992 val
&= ~(AC_PINCTL_VREFEN
| PIN_HP
);
2993 val
|= get_vref_idx(vref_caps
, idx
) | PIN_IN
;
2995 val
= snd_hda_get_default_vref(codec
, nid
) | PIN_IN
;
2997 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2998 call_hp_automute(codec
, NULL
);
3003 static const struct snd_kcontrol_new hp_mic_jack_mode_enum
= {
3004 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3005 .info
= hp_mic_jack_mode_info
,
3006 .get
= hp_mic_jack_mode_get
,
3007 .put
= hp_mic_jack_mode_put
,
3010 static int create_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
)
3012 struct hda_gen_spec
*spec
= codec
->spec
;
3013 struct snd_kcontrol_new
*knew
;
3015 knew
= snd_hda_gen_add_kctl(spec
, "Headphone Mic Jack Mode",
3016 &hp_mic_jack_mode_enum
);
3019 knew
->private_value
= pin
;
3020 spec
->hp_mic_jack_modes
= 1;
3028 /* add the powersave loopback-list entry */
3029 static int add_loopback_list(struct hda_gen_spec
*spec
, hda_nid_t mix
, int idx
)
3031 struct hda_amp_list
*list
;
3033 list
= snd_array_new(&spec
->loopback_list
);
3037 list
->dir
= HDA_INPUT
;
3039 spec
->loopback
.amplist
= spec
->loopback_list
.list
;
3043 /* return true if either a volume or a mute amp is found for the given
3044 * aamix path; the amp has to be either in the mixer node or its direct leaf
3046 static bool look_for_mix_leaf_ctls(struct hda_codec
*codec
, hda_nid_t mix_nid
,
3047 hda_nid_t pin
, unsigned int *mix_val
,
3048 unsigned int *mute_val
)
3051 const hda_nid_t
*list
;
3054 idx
= snd_hda_get_conn_index(codec
, mix_nid
, pin
, true);
3058 *mix_val
= *mute_val
= 0;
3059 if (nid_has_volume(codec
, mix_nid
, HDA_INPUT
))
3060 *mix_val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
3061 if (nid_has_mute(codec
, mix_nid
, HDA_INPUT
))
3062 *mute_val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
3063 if (*mix_val
&& *mute_val
)
3066 /* check leaf node */
3067 num_conns
= snd_hda_get_conn_list(codec
, mix_nid
, &list
);
3068 if (num_conns
< idx
)
3071 if (!*mix_val
&& nid_has_volume(codec
, nid
, HDA_OUTPUT
) &&
3072 !is_ctl_associated(codec
, nid
, HDA_OUTPUT
, 0, NID_PATH_VOL_CTL
))
3073 *mix_val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3074 if (!*mute_val
&& nid_has_mute(codec
, nid
, HDA_OUTPUT
) &&
3075 !is_ctl_associated(codec
, nid
, HDA_OUTPUT
, 0, NID_PATH_MUTE_CTL
))
3076 *mute_val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3078 return *mix_val
|| *mute_val
;
3081 /* create input playback/capture controls for the given pin */
3082 static int new_analog_input(struct hda_codec
*codec
, int input_idx
,
3083 hda_nid_t pin
, const char *ctlname
, int ctlidx
,
3086 struct hda_gen_spec
*spec
= codec
->spec
;
3087 struct nid_path
*path
;
3088 unsigned int mix_val
, mute_val
;
3091 if (!look_for_mix_leaf_ctls(codec
, mix_nid
, pin
, &mix_val
, &mute_val
))
3094 path
= snd_hda_add_new_path(codec
, pin
, mix_nid
, 0);
3097 print_nid_path(codec
, "loopback", path
);
3098 spec
->loopback_paths
[input_idx
] = snd_hda_get_path_idx(codec
, path
);
3100 idx
= path
->idx
[path
->depth
- 1];
3102 err
= __add_pb_vol_ctrl(spec
, HDA_CTL_WIDGET_VOL
, ctlname
, ctlidx
, mix_val
);
3105 path
->ctls
[NID_PATH_VOL_CTL
] = mix_val
;
3109 err
= __add_pb_sw_ctrl(spec
, HDA_CTL_WIDGET_MUTE
, ctlname
, ctlidx
, mute_val
);
3112 path
->ctls
[NID_PATH_MUTE_CTL
] = mute_val
;
3115 path
->active
= true;
3116 path
->stream_enabled
= true; /* no DAC/ADC involved */
3117 err
= add_loopback_list(spec
, mix_nid
, idx
);
3121 if (spec
->mixer_nid
!= spec
->mixer_merge_nid
&&
3122 !spec
->loopback_merge_path
) {
3123 path
= snd_hda_add_new_path(codec
, spec
->mixer_nid
,
3124 spec
->mixer_merge_nid
, 0);
3126 print_nid_path(codec
, "loopback-merge", path
);
3127 path
->active
= true;
3128 path
->pin_fixed
= true; /* static route */
3129 path
->stream_enabled
= true; /* no DAC/ADC involved */
3130 spec
->loopback_merge_path
=
3131 snd_hda_get_path_idx(codec
, path
);
3138 static int is_input_pin(struct hda_codec
*codec
, hda_nid_t nid
)
3140 unsigned int pincap
= snd_hda_query_pin_caps(codec
, nid
);
3141 return (pincap
& AC_PINCAP_IN
) != 0;
3144 /* Parse the codec tree and retrieve ADCs */
3145 static int fill_adc_nids(struct hda_codec
*codec
)
3147 struct hda_gen_spec
*spec
= codec
->spec
;
3149 hda_nid_t
*adc_nids
= spec
->adc_nids
;
3150 int max_nums
= ARRAY_SIZE(spec
->adc_nids
);
3153 for_each_hda_codec_node(nid
, codec
) {
3154 unsigned int caps
= get_wcaps(codec
, nid
);
3155 int type
= get_wcaps_type(caps
);
3157 if (type
!= AC_WID_AUD_IN
|| (caps
& AC_WCAP_DIGITAL
))
3159 adc_nids
[nums
] = nid
;
3160 if (++nums
>= max_nums
)
3163 spec
->num_adc_nids
= nums
;
3165 /* copy the detected ADCs to all_adcs[] */
3166 spec
->num_all_adcs
= nums
;
3167 memcpy(spec
->all_adcs
, spec
->adc_nids
, nums
* sizeof(hda_nid_t
));
3172 /* filter out invalid adc_nids that don't give all active input pins;
3173 * if needed, check whether dynamic ADC-switching is available
3175 static int check_dyn_adc_switch(struct hda_codec
*codec
)
3177 struct hda_gen_spec
*spec
= codec
->spec
;
3178 struct hda_input_mux
*imux
= &spec
->input_mux
;
3179 unsigned int ok_bits
;
3184 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
3185 for (i
= 0; i
< imux
->num_items
; i
++) {
3186 if (!spec
->input_paths
[i
][n
])
3189 if (i
>= imux
->num_items
) {
3190 ok_bits
|= (1 << n
);
3196 /* check whether ADC-switch is possible */
3197 for (i
= 0; i
< imux
->num_items
; i
++) {
3198 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
3199 if (spec
->input_paths
[i
][n
]) {
3200 spec
->dyn_adc_idx
[i
] = n
;
3206 codec_dbg(codec
, "enabling ADC switching\n");
3207 spec
->dyn_adc_switch
= 1;
3208 } else if (nums
!= spec
->num_adc_nids
) {
3209 /* shrink the invalid adcs and input paths */
3211 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
3212 if (!(ok_bits
& (1 << n
)))
3215 spec
->adc_nids
[nums
] = spec
->adc_nids
[n
];
3216 for (i
= 0; i
< imux
->num_items
; i
++) {
3217 invalidate_nid_path(codec
,
3218 spec
->input_paths
[i
][nums
]);
3219 spec
->input_paths
[i
][nums
] =
3220 spec
->input_paths
[i
][n
];
3221 spec
->input_paths
[i
][n
] = 0;
3226 spec
->num_adc_nids
= nums
;
3229 if (imux
->num_items
== 1 ||
3230 (imux
->num_items
== 2 && spec
->hp_mic
)) {
3231 codec_dbg(codec
, "reducing to a single ADC\n");
3232 spec
->num_adc_nids
= 1; /* reduce to a single ADC */
3235 /* single index for individual volumes ctls */
3236 if (!spec
->dyn_adc_switch
&& spec
->multi_cap_vol
)
3237 spec
->num_adc_nids
= 1;
3242 /* parse capture source paths from the given pin and create imux items */
3243 static int parse_capture_source(struct hda_codec
*codec
, hda_nid_t pin
,
3244 int cfg_idx
, int num_adcs
,
3245 const char *label
, int anchor
)
3247 struct hda_gen_spec
*spec
= codec
->spec
;
3248 struct hda_input_mux
*imux
= &spec
->input_mux
;
3249 int imux_idx
= imux
->num_items
;
3250 bool imux_added
= false;
3253 for (c
= 0; c
< num_adcs
; c
++) {
3254 struct nid_path
*path
;
3255 hda_nid_t adc
= spec
->adc_nids
[c
];
3257 if (!is_reachable_path(codec
, pin
, adc
))
3259 path
= snd_hda_add_new_path(codec
, pin
, adc
, anchor
);
3262 print_nid_path(codec
, "input", path
);
3263 spec
->input_paths
[imux_idx
][c
] =
3264 snd_hda_get_path_idx(codec
, path
);
3267 if (spec
->hp_mic_pin
== pin
)
3268 spec
->hp_mic_mux_idx
= imux
->num_items
;
3269 spec
->imux_pins
[imux
->num_items
] = pin
;
3270 snd_hda_add_imux_item(codec
, imux
, label
, cfg_idx
, NULL
);
3272 if (spec
->dyn_adc_switch
)
3273 spec
->dyn_adc_idx
[imux_idx
] = c
;
3281 * create playback/capture controls for input pins
3284 /* fill the label for each input at first */
3285 static int fill_input_pin_labels(struct hda_codec
*codec
)
3287 struct hda_gen_spec
*spec
= codec
->spec
;
3288 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3291 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3292 hda_nid_t pin
= cfg
->inputs
[i
].pin
;
3296 if (!is_input_pin(codec
, pin
))
3299 label
= hda_get_autocfg_input_label(codec
, cfg
, i
);
3301 for (j
= i
- 1; j
>= 0; j
--) {
3302 if (spec
->input_labels
[j
] &&
3303 !strcmp(spec
->input_labels
[j
], label
)) {
3304 idx
= spec
->input_label_idxs
[j
] + 1;
3309 spec
->input_labels
[i
] = label
;
3310 spec
->input_label_idxs
[i
] = idx
;
3316 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
3318 static int create_input_ctls(struct hda_codec
*codec
)
3320 struct hda_gen_spec
*spec
= codec
->spec
;
3321 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3322 hda_nid_t mixer
= spec
->mixer_nid
;
3327 num_adcs
= fill_adc_nids(codec
);
3331 err
= fill_input_pin_labels(codec
);
3335 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3338 pin
= cfg
->inputs
[i
].pin
;
3339 if (!is_input_pin(codec
, pin
))
3343 if (cfg
->inputs
[i
].type
== AUTO_PIN_MIC
)
3344 val
|= snd_hda_get_default_vref(codec
, pin
);
3345 if (pin
!= spec
->hp_mic_pin
&&
3346 !snd_hda_codec_get_pin_target(codec
, pin
))
3347 set_pin_target(codec
, pin
, val
, false);
3350 if (is_reachable_path(codec
, pin
, mixer
)) {
3351 err
= new_analog_input(codec
, i
, pin
,
3352 spec
->input_labels
[i
],
3353 spec
->input_label_idxs
[i
],
3360 err
= parse_capture_source(codec
, pin
, i
, num_adcs
,
3361 spec
->input_labels
[i
], -mixer
);
3365 if (spec
->add_jack_modes
) {
3366 err
= create_in_jack_mode(codec
, pin
);
3372 /* add stereo mix when explicitly enabled via hint */
3373 if (mixer
&& spec
->add_stereo_mix_input
== HDA_HINT_STEREO_MIX_ENABLE
) {
3374 err
= parse_capture_source(codec
, mixer
, CFG_IDX_MIX
, num_adcs
,
3379 spec
->suppress_auto_mic
= 1;
3390 /* get the input path specified by the given adc and imux indices */
3391 static struct nid_path
*get_input_path(struct hda_codec
*codec
, int adc_idx
, int imux_idx
)
3393 struct hda_gen_spec
*spec
= codec
->spec
;
3394 if (imux_idx
< 0 || imux_idx
>= HDA_MAX_NUM_INPUTS
) {
3398 if (spec
->dyn_adc_switch
)
3399 adc_idx
= spec
->dyn_adc_idx
[imux_idx
];
3400 if (adc_idx
< 0 || adc_idx
>= AUTO_CFG_MAX_INS
) {
3404 return snd_hda_get_path_from_idx(codec
, spec
->input_paths
[imux_idx
][adc_idx
]);
3407 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
3410 static int mux_enum_info(struct snd_kcontrol
*kcontrol
,
3411 struct snd_ctl_elem_info
*uinfo
)
3413 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3414 struct hda_gen_spec
*spec
= codec
->spec
;
3415 return snd_hda_input_mux_info(&spec
->input_mux
, uinfo
);
3418 static int mux_enum_get(struct snd_kcontrol
*kcontrol
,
3419 struct snd_ctl_elem_value
*ucontrol
)
3421 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3422 struct hda_gen_spec
*spec
= codec
->spec
;
3423 /* the ctls are created at once with multiple counts */
3424 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
3426 ucontrol
->value
.enumerated
.item
[0] = spec
->cur_mux
[adc_idx
];
3430 static int mux_enum_put(struct snd_kcontrol
*kcontrol
,
3431 struct snd_ctl_elem_value
*ucontrol
)
3433 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3434 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
3435 return mux_select(codec
, adc_idx
,
3436 ucontrol
->value
.enumerated
.item
[0]);
3439 static const struct snd_kcontrol_new cap_src_temp
= {
3440 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3441 .name
= "Input Source",
3442 .info
= mux_enum_info
,
3443 .get
= mux_enum_get
,
3444 .put
= mux_enum_put
,
3448 * capture volume and capture switch ctls
3451 typedef int (*put_call_t
)(struct snd_kcontrol
*kcontrol
,
3452 struct snd_ctl_elem_value
*ucontrol
);
3454 /* call the given amp update function for all amps in the imux list at once */
3455 static int cap_put_caller(struct snd_kcontrol
*kcontrol
,
3456 struct snd_ctl_elem_value
*ucontrol
,
3457 put_call_t func
, int type
)
3459 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3460 struct hda_gen_spec
*spec
= codec
->spec
;
3461 const struct hda_input_mux
*imux
;
3462 struct nid_path
*path
;
3463 int i
, adc_idx
, err
= 0;
3465 imux
= &spec
->input_mux
;
3466 adc_idx
= kcontrol
->id
.index
;
3467 mutex_lock(&codec
->control_mutex
);
3468 for (i
= 0; i
< imux
->num_items
; i
++) {
3469 path
= get_input_path(codec
, adc_idx
, i
);
3470 if (!path
|| !path
->ctls
[type
])
3472 kcontrol
->private_value
= path
->ctls
[type
];
3473 err
= func(kcontrol
, ucontrol
);
3477 mutex_unlock(&codec
->control_mutex
);
3478 if (err
>= 0 && spec
->cap_sync_hook
)
3479 spec
->cap_sync_hook(codec
, kcontrol
, ucontrol
);
3483 /* capture volume ctl callbacks */
3484 #define cap_vol_info snd_hda_mixer_amp_volume_info
3485 #define cap_vol_get snd_hda_mixer_amp_volume_get
3486 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3488 static int cap_vol_put(struct snd_kcontrol
*kcontrol
,
3489 struct snd_ctl_elem_value
*ucontrol
)
3491 return cap_put_caller(kcontrol
, ucontrol
,
3492 snd_hda_mixer_amp_volume_put
,
3496 static const struct snd_kcontrol_new cap_vol_temp
= {
3497 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3498 .name
= "Capture Volume",
3499 .access
= (SNDRV_CTL_ELEM_ACCESS_READWRITE
|
3500 SNDRV_CTL_ELEM_ACCESS_TLV_READ
|
3501 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK
),
3502 .info
= cap_vol_info
,
3505 .tlv
= { .c
= cap_vol_tlv
},
3508 /* capture switch ctl callbacks */
3509 #define cap_sw_info snd_ctl_boolean_stereo_info
3510 #define cap_sw_get snd_hda_mixer_amp_switch_get
3512 static int cap_sw_put(struct snd_kcontrol
*kcontrol
,
3513 struct snd_ctl_elem_value
*ucontrol
)
3515 return cap_put_caller(kcontrol
, ucontrol
,
3516 snd_hda_mixer_amp_switch_put
,
3520 static const struct snd_kcontrol_new cap_sw_temp
= {
3521 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3522 .name
= "Capture Switch",
3523 .info
= cap_sw_info
,
3528 static int parse_capvol_in_path(struct hda_codec
*codec
, struct nid_path
*path
)
3533 path
->ctls
[NID_PATH_VOL_CTL
] = path
->ctls
[NID_PATH_MUTE_CTL
] = 0;
3534 for (depth
= 0; depth
< 3; depth
++) {
3535 if (depth
>= path
->depth
)
3537 i
= path
->depth
- depth
- 1;
3538 nid
= path
->path
[i
];
3539 if (!path
->ctls
[NID_PATH_VOL_CTL
]) {
3540 if (nid_has_volume(codec
, nid
, HDA_OUTPUT
))
3541 path
->ctls
[NID_PATH_VOL_CTL
] =
3542 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3543 else if (nid_has_volume(codec
, nid
, HDA_INPUT
)) {
3544 int idx
= path
->idx
[i
];
3545 if (!depth
&& codec
->single_adc_amp
)
3547 path
->ctls
[NID_PATH_VOL_CTL
] =
3548 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
3551 if (!path
->ctls
[NID_PATH_MUTE_CTL
]) {
3552 if (nid_has_mute(codec
, nid
, HDA_OUTPUT
))
3553 path
->ctls
[NID_PATH_MUTE_CTL
] =
3554 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3555 else if (nid_has_mute(codec
, nid
, HDA_INPUT
)) {
3556 int idx
= path
->idx
[i
];
3557 if (!depth
&& codec
->single_adc_amp
)
3559 path
->ctls
[NID_PATH_MUTE_CTL
] =
3560 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
3567 static bool is_inv_dmic_pin(struct hda_codec
*codec
, hda_nid_t nid
)
3569 struct hda_gen_spec
*spec
= codec
->spec
;
3570 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3574 if (!spec
->inv_dmic_split
)
3576 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3577 if (cfg
->inputs
[i
].pin
!= nid
)
3579 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
3581 val
= snd_hda_codec_get_pincfg(codec
, nid
);
3582 return snd_hda_get_input_pin_attr(val
) == INPUT_PIN_ATTR_INT
;
3587 /* capture switch put callback for a single control with hook call */
3588 static int cap_single_sw_put(struct snd_kcontrol
*kcontrol
,
3589 struct snd_ctl_elem_value
*ucontrol
)
3591 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3592 struct hda_gen_spec
*spec
= codec
->spec
;
3595 ret
= snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
3599 if (spec
->cap_sync_hook
)
3600 spec
->cap_sync_hook(codec
, kcontrol
, ucontrol
);
3605 static int add_single_cap_ctl(struct hda_codec
*codec
, const char *label
,
3606 int idx
, bool is_switch
, unsigned int ctl
,
3609 struct hda_gen_spec
*spec
= codec
->spec
;
3610 char tmpname
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
3611 int type
= is_switch
? HDA_CTL_WIDGET_MUTE
: HDA_CTL_WIDGET_VOL
;
3612 const char *sfx
= is_switch
? "Switch" : "Volume";
3613 unsigned int chs
= inv_dmic
? 1 : 3;
3614 struct snd_kcontrol_new
*knew
;
3620 snprintf(tmpname
, sizeof(tmpname
),
3621 "%s Capture %s", label
, sfx
);
3623 snprintf(tmpname
, sizeof(tmpname
),
3625 knew
= add_control(spec
, type
, tmpname
, idx
,
3626 amp_val_replace_channels(ctl
, chs
));
3630 knew
->put
= cap_single_sw_put
;
3634 /* Make independent right kcontrol */
3636 snprintf(tmpname
, sizeof(tmpname
),
3637 "Inverted %s Capture %s", label
, sfx
);
3639 snprintf(tmpname
, sizeof(tmpname
),
3640 "Inverted Capture %s", sfx
);
3641 knew
= add_control(spec
, type
, tmpname
, idx
,
3642 amp_val_replace_channels(ctl
, 2));
3646 knew
->put
= cap_single_sw_put
;
3650 /* create single (and simple) capture volume and switch controls */
3651 static int create_single_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
3652 unsigned int vol_ctl
, unsigned int sw_ctl
,
3656 err
= add_single_cap_ctl(codec
, NULL
, idx
, false, vol_ctl
, inv_dmic
);
3659 err
= add_single_cap_ctl(codec
, NULL
, idx
, true, sw_ctl
, inv_dmic
);
3665 /* create bound capture volume and switch controls */
3666 static int create_bind_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
3667 unsigned int vol_ctl
, unsigned int sw_ctl
)
3669 struct hda_gen_spec
*spec
= codec
->spec
;
3670 struct snd_kcontrol_new
*knew
;
3673 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_vol_temp
);
3677 knew
->private_value
= vol_ctl
;
3678 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
3681 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_sw_temp
);
3685 knew
->private_value
= sw_ctl
;
3686 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
3691 /* return the vol ctl when used first in the imux list */
3692 static unsigned int get_first_cap_ctl(struct hda_codec
*codec
, int idx
, int type
)
3694 struct nid_path
*path
;
3698 path
= get_input_path(codec
, 0, idx
);
3701 ctl
= path
->ctls
[type
];
3704 for (i
= 0; i
< idx
- 1; i
++) {
3705 path
= get_input_path(codec
, 0, i
);
3706 if (path
&& path
->ctls
[type
] == ctl
)
3712 /* create individual capture volume and switch controls per input */
3713 static int create_multi_cap_vol_ctl(struct hda_codec
*codec
)
3715 struct hda_gen_spec
*spec
= codec
->spec
;
3716 struct hda_input_mux
*imux
= &spec
->input_mux
;
3719 for (i
= 0; i
< imux
->num_items
; i
++) {
3723 idx
= imux
->items
[i
].index
;
3724 if (idx
>= spec
->autocfg
.num_inputs
)
3726 inv_dmic
= is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]);
3728 for (type
= 0; type
< 2; type
++) {
3729 err
= add_single_cap_ctl(codec
,
3730 spec
->input_labels
[idx
],
3731 spec
->input_label_idxs
[idx
],
3733 get_first_cap_ctl(codec
, i
, type
),
3742 static int create_capture_mixers(struct hda_codec
*codec
)
3744 struct hda_gen_spec
*spec
= codec
->spec
;
3745 struct hda_input_mux
*imux
= &spec
->input_mux
;
3746 int i
, n
, nums
, err
;
3748 if (spec
->dyn_adc_switch
)
3751 nums
= spec
->num_adc_nids
;
3753 if (!spec
->auto_mic
&& imux
->num_items
> 1) {
3754 struct snd_kcontrol_new
*knew
;
3756 name
= nums
> 1 ? "Input Source" : "Capture Source";
3757 knew
= snd_hda_gen_add_kctl(spec
, name
, &cap_src_temp
);
3763 for (n
= 0; n
< nums
; n
++) {
3765 bool multi_cap_vol
= spec
->multi_cap_vol
;
3766 bool inv_dmic
= false;
3770 for (i
= 0; i
< imux
->num_items
; i
++) {
3771 struct nid_path
*path
;
3772 path
= get_input_path(codec
, n
, i
);
3775 parse_capvol_in_path(codec
, path
);
3777 vol
= path
->ctls
[NID_PATH_VOL_CTL
];
3778 else if (vol
!= path
->ctls
[NID_PATH_VOL_CTL
]) {
3780 if (!same_amp_caps(codec
, vol
,
3781 path
->ctls
[NID_PATH_VOL_CTL
], HDA_INPUT
))
3782 multi_cap_vol
= true;
3785 sw
= path
->ctls
[NID_PATH_MUTE_CTL
];
3786 else if (sw
!= path
->ctls
[NID_PATH_MUTE_CTL
]) {
3788 if (!same_amp_caps(codec
, sw
,
3789 path
->ctls
[NID_PATH_MUTE_CTL
], HDA_INPUT
))
3790 multi_cap_vol
= true;
3792 if (is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]))
3797 err
= create_single_cap_vol_ctl(codec
, n
, vol
, sw
,
3799 else if (!multi_cap_vol
&& !inv_dmic
)
3800 err
= create_bind_cap_vol_ctl(codec
, n
, vol
, sw
);
3802 err
= create_multi_cap_vol_ctl(codec
);
3811 * add mic boosts if needed
3814 /* check whether the given amp is feasible as a boost volume */
3815 static bool check_boost_vol(struct hda_codec
*codec
, hda_nid_t nid
,
3820 if (!nid_has_volume(codec
, nid
, dir
) ||
3821 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_VOL_CTL
) ||
3822 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_BOOST_CTL
))
3825 step
= (query_amp_caps(codec
, nid
, dir
) & AC_AMPCAP_STEP_SIZE
)
3826 >> AC_AMPCAP_STEP_SIZE_SHIFT
;
3832 /* look for a boost amp in a widget close to the pin */
3833 static unsigned int look_for_boost_amp(struct hda_codec
*codec
,
3834 struct nid_path
*path
)
3836 unsigned int val
= 0;
3840 for (depth
= 0; depth
< 3; depth
++) {
3841 if (depth
>= path
->depth
- 1)
3843 nid
= path
->path
[depth
];
3844 if (depth
&& check_boost_vol(codec
, nid
, HDA_OUTPUT
, 0)) {
3845 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3847 } else if (check_boost_vol(codec
, nid
, HDA_INPUT
,
3848 path
->idx
[depth
])) {
3849 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, path
->idx
[depth
],
3858 static int parse_mic_boost(struct hda_codec
*codec
)
3860 struct hda_gen_spec
*spec
= codec
->spec
;
3861 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3862 struct hda_input_mux
*imux
= &spec
->input_mux
;
3865 if (!spec
->num_adc_nids
)
3868 for (i
= 0; i
< imux
->num_items
; i
++) {
3869 struct nid_path
*path
;
3872 char boost_label
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
3874 idx
= imux
->items
[i
].index
;
3875 if (idx
>= imux
->num_items
)
3878 /* check only line-in and mic pins */
3879 if (cfg
->inputs
[idx
].type
> AUTO_PIN_LINE_IN
)
3882 path
= get_input_path(codec
, 0, i
);
3886 val
= look_for_boost_amp(codec
, path
);
3890 /* create a boost control */
3891 snprintf(boost_label
, sizeof(boost_label
),
3892 "%s Boost Volume", spec
->input_labels
[idx
]);
3893 if (!add_control(spec
, HDA_CTL_WIDGET_VOL
, boost_label
,
3894 spec
->input_label_idxs
[idx
], val
))
3897 path
->ctls
[NID_PATH_BOOST_CTL
] = val
;
3903 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3905 static void parse_digital(struct hda_codec
*codec
)
3907 struct hda_gen_spec
*spec
= codec
->spec
;
3908 struct nid_path
*path
;
3910 hda_nid_t dig_nid
, pin
;
3912 /* support multiple SPDIFs; the secondary is set up as a slave */
3914 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++) {
3915 pin
= spec
->autocfg
.dig_out_pins
[i
];
3916 dig_nid
= look_for_dac(codec
, pin
, true);
3919 path
= snd_hda_add_new_path(codec
, dig_nid
, pin
, 0);
3922 print_nid_path(codec
, "digout", path
);
3923 path
->active
= true;
3924 path
->pin_fixed
= true; /* no jack detection */
3925 spec
->digout_paths
[i
] = snd_hda_get_path_idx(codec
, path
);
3926 set_pin_target(codec
, pin
, PIN_OUT
, false);
3928 spec
->multiout
.dig_out_nid
= dig_nid
;
3929 spec
->dig_out_type
= spec
->autocfg
.dig_out_type
[0];
3931 spec
->multiout
.slave_dig_outs
= spec
->slave_dig_outs
;
3932 if (nums
>= ARRAY_SIZE(spec
->slave_dig_outs
) - 1)
3934 spec
->slave_dig_outs
[nums
- 1] = dig_nid
;
3939 if (spec
->autocfg
.dig_in_pin
) {
3940 pin
= spec
->autocfg
.dig_in_pin
;
3941 for_each_hda_codec_node(dig_nid
, codec
) {
3942 unsigned int wcaps
= get_wcaps(codec
, dig_nid
);
3943 if (get_wcaps_type(wcaps
) != AC_WID_AUD_IN
)
3945 if (!(wcaps
& AC_WCAP_DIGITAL
))
3947 path
= snd_hda_add_new_path(codec
, pin
, dig_nid
, 0);
3949 print_nid_path(codec
, "digin", path
);
3950 path
->active
= true;
3951 path
->pin_fixed
= true; /* no jack */
3952 spec
->dig_in_nid
= dig_nid
;
3953 spec
->digin_path
= snd_hda_get_path_idx(codec
, path
);
3954 set_pin_target(codec
, pin
, PIN_IN
, false);
3963 * input MUX handling
3966 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
);
3968 /* select the given imux item; either unmute exclusively or select the route */
3969 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
3972 struct hda_gen_spec
*spec
= codec
->spec
;
3973 const struct hda_input_mux
*imux
;
3974 struct nid_path
*old_path
, *path
;
3976 imux
= &spec
->input_mux
;
3977 if (!imux
->num_items
)
3980 if (idx
>= imux
->num_items
)
3981 idx
= imux
->num_items
- 1;
3982 if (spec
->cur_mux
[adc_idx
] == idx
)
3985 old_path
= get_input_path(codec
, adc_idx
, spec
->cur_mux
[adc_idx
]);
3988 if (old_path
->active
)
3989 snd_hda_activate_path(codec
, old_path
, false, false);
3991 spec
->cur_mux
[adc_idx
] = idx
;
3994 update_hp_mic(codec
, adc_idx
, false);
3996 if (spec
->dyn_adc_switch
)
3997 dyn_adc_pcm_resetup(codec
, idx
);
3999 path
= get_input_path(codec
, adc_idx
, idx
);
4004 snd_hda_activate_path(codec
, path
, true, false);
4005 if (spec
->cap_sync_hook
)
4006 spec
->cap_sync_hook(codec
, NULL
, NULL
);
4007 path_power_down_sync(codec
, old_path
);
4011 /* power up/down widgets in the all paths that match with the given NID
4012 * as terminals (either start- or endpoint)
4014 * returns the last changed NID, or zero if unchanged.
4016 static hda_nid_t
set_path_power(struct hda_codec
*codec
, hda_nid_t nid
,
4017 int pin_state
, int stream_state
)
4019 struct hda_gen_spec
*spec
= codec
->spec
;
4020 hda_nid_t last
, changed
= 0;
4021 struct nid_path
*path
;
4024 for (n
= 0; n
< spec
->paths
.used
; n
++) {
4025 path
= snd_array_elem(&spec
->paths
, n
);
4028 if (path
->path
[0] == nid
||
4029 path
->path
[path
->depth
- 1] == nid
) {
4030 bool pin_old
= path
->pin_enabled
;
4031 bool stream_old
= path
->stream_enabled
;
4034 path
->pin_enabled
= pin_state
;
4035 if (stream_state
>= 0)
4036 path
->stream_enabled
= stream_state
;
4037 if ((!path
->pin_fixed
&& path
->pin_enabled
!= pin_old
)
4038 || path
->stream_enabled
!= stream_old
) {
4039 last
= path_power_update(codec
, path
, true);
4048 /* check the jack status for power control */
4049 static bool detect_pin_state(struct hda_codec
*codec
, hda_nid_t pin
)
4051 if (!is_jack_detectable(codec
, pin
))
4053 return snd_hda_jack_detect_state(codec
, pin
) != HDA_JACK_NOT_PRESENT
;
4056 /* power up/down the paths of the given pin according to the jack state;
4057 * power = 0/1 : only power up/down if it matches with the jack state,
4058 * < 0 : force power up/down to follow the jack sate
4060 * returns the last changed NID, or zero if unchanged.
4062 static hda_nid_t
set_pin_power_jack(struct hda_codec
*codec
, hda_nid_t pin
,
4067 if (!codec
->power_save_node
)
4070 on
= detect_pin_state(codec
, pin
);
4072 if (power
>= 0 && on
!= power
)
4074 return set_path_power(codec
, pin
, on
, -1);
4077 static void pin_power_callback(struct hda_codec
*codec
,
4078 struct hda_jack_callback
*jack
,
4081 if (jack
&& jack
->nid
)
4082 sync_power_state_change(codec
,
4083 set_pin_power_jack(codec
, jack
->nid
, on
));
4086 /* callback only doing power up -- called at first */
4087 static void pin_power_up_callback(struct hda_codec
*codec
,
4088 struct hda_jack_callback
*jack
)
4090 pin_power_callback(codec
, jack
, true);
4093 /* callback only doing power down -- called at last */
4094 static void pin_power_down_callback(struct hda_codec
*codec
,
4095 struct hda_jack_callback
*jack
)
4097 pin_power_callback(codec
, jack
, false);
4100 /* set up the power up/down callbacks */
4101 static void add_pin_power_ctls(struct hda_codec
*codec
, int num_pins
,
4102 const hda_nid_t
*pins
, bool on
)
4105 hda_jack_callback_fn cb
=
4106 on
? pin_power_up_callback
: pin_power_down_callback
;
4108 for (i
= 0; i
< num_pins
&& pins
[i
]; i
++) {
4109 if (is_jack_detectable(codec
, pins
[i
]))
4110 snd_hda_jack_detect_enable_callback(codec
, pins
[i
], cb
);
4112 set_path_power(codec
, pins
[i
], true, -1);
4116 /* enabled power callback to each available I/O pin with jack detections;
4117 * the digital I/O pins are excluded because of the unreliable detectsion
4119 static void add_all_pin_power_ctls(struct hda_codec
*codec
, bool on
)
4121 struct hda_gen_spec
*spec
= codec
->spec
;
4122 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4125 if (!codec
->power_save_node
)
4127 add_pin_power_ctls(codec
, cfg
->line_outs
, cfg
->line_out_pins
, on
);
4128 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
4129 add_pin_power_ctls(codec
, cfg
->hp_outs
, cfg
->hp_pins
, on
);
4130 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
4131 add_pin_power_ctls(codec
, cfg
->speaker_outs
, cfg
->speaker_pins
, on
);
4132 for (i
= 0; i
< cfg
->num_inputs
; i
++)
4133 add_pin_power_ctls(codec
, 1, &cfg
->inputs
[i
].pin
, on
);
4136 /* sync path power up/down with the jack states of given pins */
4137 static void sync_pin_power_ctls(struct hda_codec
*codec
, int num_pins
,
4138 const hda_nid_t
*pins
)
4142 for (i
= 0; i
< num_pins
&& pins
[i
]; i
++)
4143 if (is_jack_detectable(codec
, pins
[i
]))
4144 set_pin_power_jack(codec
, pins
[i
], -1);
4147 /* sync path power up/down with pins; called at init and resume */
4148 static void sync_all_pin_power_ctls(struct hda_codec
*codec
)
4150 struct hda_gen_spec
*spec
= codec
->spec
;
4151 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4154 if (!codec
->power_save_node
)
4156 sync_pin_power_ctls(codec
, cfg
->line_outs
, cfg
->line_out_pins
);
4157 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
4158 sync_pin_power_ctls(codec
, cfg
->hp_outs
, cfg
->hp_pins
);
4159 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
4160 sync_pin_power_ctls(codec
, cfg
->speaker_outs
, cfg
->speaker_pins
);
4161 for (i
= 0; i
< cfg
->num_inputs
; i
++)
4162 sync_pin_power_ctls(codec
, 1, &cfg
->inputs
[i
].pin
);
4165 /* add fake paths if not present yet */
4166 static int add_fake_paths(struct hda_codec
*codec
, hda_nid_t nid
,
4167 int num_pins
, const hda_nid_t
*pins
)
4169 struct hda_gen_spec
*spec
= codec
->spec
;
4170 struct nid_path
*path
;
4173 for (i
= 0; i
< num_pins
; i
++) {
4176 if (get_nid_path(codec
, nid
, pins
[i
], 0))
4178 path
= snd_array_new(&spec
->paths
);
4181 memset(path
, 0, sizeof(*path
));
4183 path
->path
[0] = nid
;
4184 path
->path
[1] = pins
[i
];
4185 path
->active
= true;
4190 /* create fake paths to all outputs from beep */
4191 static int add_fake_beep_paths(struct hda_codec
*codec
)
4193 struct hda_gen_spec
*spec
= codec
->spec
;
4194 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4195 hda_nid_t nid
= spec
->beep_nid
;
4198 if (!codec
->power_save_node
|| !nid
)
4200 err
= add_fake_paths(codec
, nid
, cfg
->line_outs
, cfg
->line_out_pins
);
4203 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
4204 err
= add_fake_paths(codec
, nid
, cfg
->hp_outs
, cfg
->hp_pins
);
4208 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
4209 err
= add_fake_paths(codec
, nid
, cfg
->speaker_outs
,
4217 /* power up/down beep widget and its output paths */
4218 static void beep_power_hook(struct hda_beep
*beep
, bool on
)
4220 set_path_power(beep
->codec
, beep
->nid
, -1, on
);
4224 * snd_hda_gen_fix_pin_power - Fix the power of the given pin widget to D0
4225 * @codec: the HDA codec
4226 * @pin: NID of pin to fix
4228 int snd_hda_gen_fix_pin_power(struct hda_codec
*codec
, hda_nid_t pin
)
4230 struct hda_gen_spec
*spec
= codec
->spec
;
4231 struct nid_path
*path
;
4233 path
= snd_array_new(&spec
->paths
);
4236 memset(path
, 0, sizeof(*path
));
4238 path
->path
[0] = pin
;
4239 path
->active
= true;
4240 path
->pin_fixed
= true;
4241 path
->stream_enabled
= true;
4244 EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power
);
4247 * Jack detections for HP auto-mute and mic-switch
4250 /* check each pin in the given array; returns true if any of them is plugged */
4251 static bool detect_jacks(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
)
4254 bool present
= false;
4256 for (i
= 0; i
< num_pins
; i
++) {
4257 hda_nid_t nid
= pins
[i
];
4260 /* don't detect pins retasked as inputs */
4261 if (snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_IN_EN
)
4263 if (snd_hda_jack_detect_state(codec
, nid
) == HDA_JACK_PRESENT
)
4269 /* standard HP/line-out auto-mute helper */
4270 static void do_automute(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
,
4271 int *paths
, bool mute
)
4273 struct hda_gen_spec
*spec
= codec
->spec
;
4276 for (i
= 0; i
< num_pins
; i
++) {
4277 hda_nid_t nid
= pins
[i
];
4278 unsigned int val
, oldval
;
4282 oldval
= snd_hda_codec_get_pin_target(codec
, nid
);
4283 if (oldval
& PIN_IN
)
4284 continue; /* no mute for inputs */
4286 if (spec
->auto_mute_via_amp
) {
4287 struct nid_path
*path
;
4290 path
= snd_hda_get_path_from_idx(codec
, paths
[i
]);
4293 mute_nid
= get_amp_nid_(path
->ctls
[NID_PATH_MUTE_CTL
]);
4297 spec
->mute_bits
|= (1ULL << mute_nid
);
4299 spec
->mute_bits
&= ~(1ULL << mute_nid
);
4302 /* don't reset VREF value in case it's controlling
4303 * the amp (see alc861_fixup_asus_amp_vref_0f())
4305 if (spec
->keep_vref_in_automute
)
4306 val
= oldval
& ~PIN_HP
;
4311 /* here we call update_pin_ctl() so that the pinctl is
4312 * changed without changing the pinctl target value;
4313 * the original target value will be still referred at
4314 * the init / resume again
4316 update_pin_ctl(codec
, nid
, val
);
4319 set_pin_eapd(codec
, nid
, !mute
);
4320 if (codec
->power_save_node
) {
4323 on
= detect_pin_state(codec
, nid
);
4324 set_path_power(codec
, nid
, on
, -1);
4330 * snd_hda_gen_update_outputs - Toggle outputs muting
4331 * @codec: the HDA codec
4333 * Update the mute status of all outputs based on the current jack states.
4335 void snd_hda_gen_update_outputs(struct hda_codec
*codec
)
4337 struct hda_gen_spec
*spec
= codec
->spec
;
4341 /* Control HP pins/amps depending on master_mute state;
4342 * in general, HP pins/amps control should be enabled in all cases,
4343 * but currently set only for master_mute, just to be safe
4345 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
4346 paths
= spec
->out_paths
;
4348 paths
= spec
->hp_paths
;
4349 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.hp_pins
),
4350 spec
->autocfg
.hp_pins
, paths
, spec
->master_mute
);
4352 if (!spec
->automute_speaker
)
4355 on
= spec
->hp_jack_present
| spec
->line_jack_present
;
4356 on
|= spec
->master_mute
;
4357 spec
->speaker_muted
= on
;
4358 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
)
4359 paths
= spec
->out_paths
;
4361 paths
= spec
->speaker_paths
;
4362 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.speaker_pins
),
4363 spec
->autocfg
.speaker_pins
, paths
, on
);
4365 /* toggle line-out mutes if needed, too */
4366 /* if LO is a copy of either HP or Speaker, don't need to handle it */
4367 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0] ||
4368 spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.speaker_pins
[0])
4370 if (!spec
->automute_lo
)
4373 on
= spec
->hp_jack_present
;
4374 on
|= spec
->master_mute
;
4375 spec
->line_out_muted
= on
;
4376 paths
= spec
->out_paths
;
4377 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
4378 spec
->autocfg
.line_out_pins
, paths
, on
);
4380 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs
);
4382 static void call_update_outputs(struct hda_codec
*codec
)
4384 struct hda_gen_spec
*spec
= codec
->spec
;
4385 if (spec
->automute_hook
)
4386 spec
->automute_hook(codec
);
4388 snd_hda_gen_update_outputs(codec
);
4390 /* sync the whole vmaster slaves to reflect the new auto-mute status */
4391 if (spec
->auto_mute_via_amp
&& !codec
->bus
->shutdown
)
4392 snd_ctl_sync_vmaster(spec
->vmaster_mute
.sw_kctl
, false);
4396 * snd_hda_gen_hp_automute - standard HP-automute helper
4397 * @codec: the HDA codec
4398 * @jack: jack object, NULL for the whole
4400 void snd_hda_gen_hp_automute(struct hda_codec
*codec
,
4401 struct hda_jack_callback
*jack
)
4403 struct hda_gen_spec
*spec
= codec
->spec
;
4404 hda_nid_t
*pins
= spec
->autocfg
.hp_pins
;
4405 int num_pins
= ARRAY_SIZE(spec
->autocfg
.hp_pins
);
4407 /* No detection for the first HP jack during indep-HP mode */
4408 if (spec
->indep_hp_enabled
) {
4413 spec
->hp_jack_present
= detect_jacks(codec
, num_pins
, pins
);
4414 if (!spec
->detect_hp
|| (!spec
->automute_speaker
&& !spec
->automute_lo
))
4416 call_update_outputs(codec
);
4418 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute
);
4421 * snd_hda_gen_line_automute - standard line-out-automute helper
4422 * @codec: the HDA codec
4423 * @jack: jack object, NULL for the whole
4425 void snd_hda_gen_line_automute(struct hda_codec
*codec
,
4426 struct hda_jack_callback
*jack
)
4428 struct hda_gen_spec
*spec
= codec
->spec
;
4430 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
)
4432 /* check LO jack only when it's different from HP */
4433 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0])
4436 spec
->line_jack_present
=
4437 detect_jacks(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
4438 spec
->autocfg
.line_out_pins
);
4439 if (!spec
->automute_speaker
|| !spec
->detect_lo
)
4441 call_update_outputs(codec
);
4443 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute
);
4446 * snd_hda_gen_mic_autoswitch - standard mic auto-switch helper
4447 * @codec: the HDA codec
4448 * @jack: jack object, NULL for the whole
4450 void snd_hda_gen_mic_autoswitch(struct hda_codec
*codec
,
4451 struct hda_jack_callback
*jack
)
4453 struct hda_gen_spec
*spec
= codec
->spec
;
4456 if (!spec
->auto_mic
)
4459 for (i
= spec
->am_num_entries
- 1; i
> 0; i
--) {
4460 hda_nid_t pin
= spec
->am_entry
[i
].pin
;
4461 /* don't detect pins retasked as outputs */
4462 if (snd_hda_codec_get_pin_target(codec
, pin
) & AC_PINCTL_OUT_EN
)
4464 if (snd_hda_jack_detect_state(codec
, pin
) == HDA_JACK_PRESENT
) {
4465 mux_select(codec
, 0, spec
->am_entry
[i
].idx
);
4469 mux_select(codec
, 0, spec
->am_entry
[0].idx
);
4471 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch
);
4473 /* call appropriate hooks */
4474 static void call_hp_automute(struct hda_codec
*codec
,
4475 struct hda_jack_callback
*jack
)
4477 struct hda_gen_spec
*spec
= codec
->spec
;
4478 if (spec
->hp_automute_hook
)
4479 spec
->hp_automute_hook(codec
, jack
);
4481 snd_hda_gen_hp_automute(codec
, jack
);
4484 static void call_line_automute(struct hda_codec
*codec
,
4485 struct hda_jack_callback
*jack
)
4487 struct hda_gen_spec
*spec
= codec
->spec
;
4488 if (spec
->line_automute_hook
)
4489 spec
->line_automute_hook(codec
, jack
);
4491 snd_hda_gen_line_automute(codec
, jack
);
4494 static void call_mic_autoswitch(struct hda_codec
*codec
,
4495 struct hda_jack_callback
*jack
)
4497 struct hda_gen_spec
*spec
= codec
->spec
;
4498 if (spec
->mic_autoswitch_hook
)
4499 spec
->mic_autoswitch_hook(codec
, jack
);
4501 snd_hda_gen_mic_autoswitch(codec
, jack
);
4504 /* update jack retasking */
4505 static void update_automute_all(struct hda_codec
*codec
)
4507 call_hp_automute(codec
, NULL
);
4508 call_line_automute(codec
, NULL
);
4509 call_mic_autoswitch(codec
, NULL
);
4513 * Auto-Mute mode mixer enum support
4515 static int automute_mode_info(struct snd_kcontrol
*kcontrol
,
4516 struct snd_ctl_elem_info
*uinfo
)
4518 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4519 struct hda_gen_spec
*spec
= codec
->spec
;
4520 static const char * const texts3
[] = {
4521 "Disabled", "Speaker Only", "Line Out+Speaker"
4524 if (spec
->automute_speaker_possible
&& spec
->automute_lo_possible
)
4525 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 3, texts3
);
4526 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
4529 static int automute_mode_get(struct snd_kcontrol
*kcontrol
,
4530 struct snd_ctl_elem_value
*ucontrol
)
4532 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4533 struct hda_gen_spec
*spec
= codec
->spec
;
4534 unsigned int val
= 0;
4535 if (spec
->automute_speaker
)
4537 if (spec
->automute_lo
)
4540 ucontrol
->value
.enumerated
.item
[0] = val
;
4544 static int automute_mode_put(struct snd_kcontrol
*kcontrol
,
4545 struct snd_ctl_elem_value
*ucontrol
)
4547 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4548 struct hda_gen_spec
*spec
= codec
->spec
;
4550 switch (ucontrol
->value
.enumerated
.item
[0]) {
4552 if (!spec
->automute_speaker
&& !spec
->automute_lo
)
4554 spec
->automute_speaker
= 0;
4555 spec
->automute_lo
= 0;
4558 if (spec
->automute_speaker_possible
) {
4559 if (!spec
->automute_lo
&& spec
->automute_speaker
)
4561 spec
->automute_speaker
= 1;
4562 spec
->automute_lo
= 0;
4563 } else if (spec
->automute_lo_possible
) {
4564 if (spec
->automute_lo
)
4566 spec
->automute_lo
= 1;
4571 if (!spec
->automute_lo_possible
|| !spec
->automute_speaker_possible
)
4573 if (spec
->automute_speaker
&& spec
->automute_lo
)
4575 spec
->automute_speaker
= 1;
4576 spec
->automute_lo
= 1;
4581 call_update_outputs(codec
);
4585 static const struct snd_kcontrol_new automute_mode_enum
= {
4586 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
4587 .name
= "Auto-Mute Mode",
4588 .info
= automute_mode_info
,
4589 .get
= automute_mode_get
,
4590 .put
= automute_mode_put
,
4593 static int add_automute_mode_enum(struct hda_codec
*codec
)
4595 struct hda_gen_spec
*spec
= codec
->spec
;
4597 if (!snd_hda_gen_add_kctl(spec
, NULL
, &automute_mode_enum
))
4603 * Check the availability of HP/line-out auto-mute;
4604 * Set up appropriately if really supported
4606 static int check_auto_mute_availability(struct hda_codec
*codec
)
4608 struct hda_gen_spec
*spec
= codec
->spec
;
4609 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4613 if (spec
->suppress_auto_mute
)
4616 if (cfg
->hp_pins
[0])
4618 if (cfg
->line_out_pins
[0])
4620 if (cfg
->speaker_pins
[0])
4622 if (present
< 2) /* need two different output types */
4625 if (!cfg
->speaker_pins
[0] &&
4626 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
4627 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
4628 sizeof(cfg
->speaker_pins
));
4629 cfg
->speaker_outs
= cfg
->line_outs
;
4632 if (!cfg
->hp_pins
[0] &&
4633 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
4634 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
4635 sizeof(cfg
->hp_pins
));
4636 cfg
->hp_outs
= cfg
->line_outs
;
4639 for (i
= 0; i
< cfg
->hp_outs
; i
++) {
4640 hda_nid_t nid
= cfg
->hp_pins
[i
];
4641 if (!is_jack_detectable(codec
, nid
))
4643 codec_dbg(codec
, "Enable HP auto-muting on NID 0x%x\n", nid
);
4644 snd_hda_jack_detect_enable_callback(codec
, nid
,
4646 spec
->detect_hp
= 1;
4649 if (cfg
->line_out_type
== AUTO_PIN_LINE_OUT
&& cfg
->line_outs
) {
4650 if (cfg
->speaker_outs
)
4651 for (i
= 0; i
< cfg
->line_outs
; i
++) {
4652 hda_nid_t nid
= cfg
->line_out_pins
[i
];
4653 if (!is_jack_detectable(codec
, nid
))
4655 codec_dbg(codec
, "Enable Line-Out auto-muting on NID 0x%x\n", nid
);
4656 snd_hda_jack_detect_enable_callback(codec
, nid
,
4657 call_line_automute
);
4658 spec
->detect_lo
= 1;
4660 spec
->automute_lo_possible
= spec
->detect_hp
;
4663 spec
->automute_speaker_possible
= cfg
->speaker_outs
&&
4664 (spec
->detect_hp
|| spec
->detect_lo
);
4666 spec
->automute_lo
= spec
->automute_lo_possible
;
4667 spec
->automute_speaker
= spec
->automute_speaker_possible
;
4669 if (spec
->automute_speaker_possible
|| spec
->automute_lo_possible
) {
4670 /* create a control for automute mode */
4671 err
= add_automute_mode_enum(codec
);
4678 /* check whether all auto-mic pins are valid; setup indices if OK */
4679 static bool auto_mic_check_imux(struct hda_codec
*codec
)
4681 struct hda_gen_spec
*spec
= codec
->spec
;
4682 const struct hda_input_mux
*imux
;
4685 imux
= &spec
->input_mux
;
4686 for (i
= 0; i
< spec
->am_num_entries
; i
++) {
4687 spec
->am_entry
[i
].idx
=
4688 find_idx_in_nid_list(spec
->am_entry
[i
].pin
,
4689 spec
->imux_pins
, imux
->num_items
);
4690 if (spec
->am_entry
[i
].idx
< 0)
4691 return false; /* no corresponding imux */
4694 /* we don't need the jack detection for the first pin */
4695 for (i
= 1; i
< spec
->am_num_entries
; i
++)
4696 snd_hda_jack_detect_enable_callback(codec
,
4697 spec
->am_entry
[i
].pin
,
4698 call_mic_autoswitch
);
4702 static int compare_attr(const void *ap
, const void *bp
)
4704 const struct automic_entry
*a
= ap
;
4705 const struct automic_entry
*b
= bp
;
4706 return (int)(a
->attr
- b
->attr
);
4710 * Check the availability of auto-mic switch;
4711 * Set up if really supported
4713 static int check_auto_mic_availability(struct hda_codec
*codec
)
4715 struct hda_gen_spec
*spec
= codec
->spec
;
4716 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4720 if (spec
->suppress_auto_mic
)
4725 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
4726 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
4728 attr
= snd_hda_codec_get_pincfg(codec
, nid
);
4729 attr
= snd_hda_get_input_pin_attr(attr
);
4730 if (types
& (1 << attr
))
4731 return 0; /* already occupied */
4733 case INPUT_PIN_ATTR_INT
:
4734 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
4735 return 0; /* invalid type */
4737 case INPUT_PIN_ATTR_UNUSED
:
4738 return 0; /* invalid entry */
4740 if (cfg
->inputs
[i
].type
> AUTO_PIN_LINE_IN
)
4741 return 0; /* invalid type */
4742 if (!spec
->line_in_auto_switch
&&
4743 cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
4744 return 0; /* only mic is allowed */
4745 if (!is_jack_detectable(codec
, nid
))
4746 return 0; /* no unsol support */
4749 if (num_pins
>= MAX_AUTO_MIC_PINS
)
4751 types
|= (1 << attr
);
4752 spec
->am_entry
[num_pins
].pin
= nid
;
4753 spec
->am_entry
[num_pins
].attr
= attr
;
4760 spec
->am_num_entries
= num_pins
;
4761 /* sort the am_entry in the order of attr so that the pin with a
4762 * higher attr will be selected when the jack is plugged.
4764 sort(spec
->am_entry
, num_pins
, sizeof(spec
->am_entry
[0]),
4765 compare_attr
, NULL
);
4767 if (!auto_mic_check_imux(codec
))
4771 spec
->num_adc_nids
= 1;
4772 spec
->cur_mux
[0] = spec
->am_entry
[0].idx
;
4773 codec_dbg(codec
, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4774 spec
->am_entry
[0].pin
,
4775 spec
->am_entry
[1].pin
,
4776 spec
->am_entry
[2].pin
);
4782 * snd_hda_gen_path_power_filter - power_filter hook to make inactive widgets
4784 * @codec: the HDA codec
4785 * @nid: NID to evalute
4786 * @power_state: target power state
4788 unsigned int snd_hda_gen_path_power_filter(struct hda_codec
*codec
,
4790 unsigned int power_state
)
4792 struct hda_gen_spec
*spec
= codec
->spec
;
4794 if (!spec
->power_down_unused
&& !codec
->power_save_node
)
4796 if (power_state
!= AC_PWRST_D0
|| nid
== codec
->core
.afg
)
4798 if (get_wcaps_type(get_wcaps(codec
, nid
)) >= AC_WID_POWER
)
4800 if (is_active_nid_for_any(codec
, nid
))
4804 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter
);
4806 /* mute all aamix inputs initially; parse up to the first leaves */
4807 static void mute_all_mixer_nid(struct hda_codec
*codec
, hda_nid_t mix
)
4810 const hda_nid_t
*conn
;
4813 nums
= snd_hda_get_conn_list(codec
, mix
, &conn
);
4814 has_amp
= nid_has_mute(codec
, mix
, HDA_INPUT
);
4815 for (i
= 0; i
< nums
; i
++) {
4817 update_amp(codec
, mix
, HDA_INPUT
, i
,
4818 0xff, HDA_AMP_MUTE
);
4819 else if (nid_has_volume(codec
, conn
[i
], HDA_OUTPUT
))
4820 update_amp(codec
, conn
[i
], HDA_OUTPUT
, 0,
4821 0xff, HDA_AMP_MUTE
);
4826 * snd_hda_gen_stream_pm - Stream power management callback
4827 * @codec: the HDA codec
4828 * @nid: audio widget
4829 * @on: power on/off flag
4831 * Set this in patch_ops.stream_pm. Only valid with power_save_node flag.
4833 void snd_hda_gen_stream_pm(struct hda_codec
*codec
, hda_nid_t nid
, bool on
)
4835 if (codec
->power_save_node
)
4836 set_path_power(codec
, nid
, -1, on
);
4838 EXPORT_SYMBOL_GPL(snd_hda_gen_stream_pm
);
4841 * snd_hda_gen_parse_auto_config - Parse the given BIOS configuration and
4842 * set up the hda_gen_spec
4843 * @codec: the HDA codec
4844 * @cfg: Parsed pin configuration
4846 * return 1 if successful, 0 if the proper config is not found,
4847 * or a negative error code
4849 int snd_hda_gen_parse_auto_config(struct hda_codec
*codec
,
4850 struct auto_pin_cfg
*cfg
)
4852 struct hda_gen_spec
*spec
= codec
->spec
;
4855 parse_user_hints(codec
);
4857 if (spec
->mixer_nid
&& !spec
->mixer_merge_nid
)
4858 spec
->mixer_merge_nid
= spec
->mixer_nid
;
4860 if (cfg
!= &spec
->autocfg
) {
4861 spec
->autocfg
= *cfg
;
4862 cfg
= &spec
->autocfg
;
4865 if (!spec
->main_out_badness
)
4866 spec
->main_out_badness
= &hda_main_out_badness
;
4867 if (!spec
->extra_out_badness
)
4868 spec
->extra_out_badness
= &hda_extra_out_badness
;
4870 fill_all_dac_nids(codec
);
4872 if (!cfg
->line_outs
) {
4873 if (cfg
->dig_outs
|| cfg
->dig_in_pin
) {
4874 spec
->multiout
.max_channels
= 2;
4875 spec
->no_analog
= 1;
4878 if (!cfg
->num_inputs
&& !cfg
->dig_in_pin
)
4879 return 0; /* can't find valid BIOS pin config */
4882 if (!spec
->no_primary_hp
&&
4883 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
4884 cfg
->line_outs
<= cfg
->hp_outs
) {
4885 /* use HP as primary out */
4886 cfg
->speaker_outs
= cfg
->line_outs
;
4887 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
4888 sizeof(cfg
->speaker_pins
));
4889 cfg
->line_outs
= cfg
->hp_outs
;
4890 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
, sizeof(cfg
->hp_pins
));
4892 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
4893 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
4896 err
= parse_output_paths(codec
);
4899 err
= create_multi_channel_mode(codec
);
4902 err
= create_multi_out_ctls(codec
, cfg
);
4905 err
= create_hp_out_ctls(codec
);
4908 err
= create_speaker_out_ctls(codec
);
4911 err
= create_indep_hp_ctls(codec
);
4914 err
= create_loopback_mixing_ctl(codec
);
4917 err
= create_hp_mic(codec
);
4920 err
= create_input_ctls(codec
);
4924 /* add power-down pin callbacks at first */
4925 add_all_pin_power_ctls(codec
, false);
4927 spec
->const_channel_count
= spec
->ext_channel_count
;
4928 /* check the multiple speaker and headphone pins */
4929 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
4930 spec
->const_channel_count
= max(spec
->const_channel_count
,
4931 cfg
->speaker_outs
* 2);
4932 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
4933 spec
->const_channel_count
= max(spec
->const_channel_count
,
4935 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
4936 spec
->const_channel_count
);
4938 err
= check_auto_mute_availability(codec
);
4942 err
= check_dyn_adc_switch(codec
);
4946 err
= check_auto_mic_availability(codec
);
4950 /* add stereo mix if available and not enabled yet */
4951 if (!spec
->auto_mic
&& spec
->mixer_nid
&&
4952 spec
->add_stereo_mix_input
== HDA_HINT_STEREO_MIX_AUTO
&&
4953 spec
->input_mux
.num_items
> 1) {
4954 err
= parse_capture_source(codec
, spec
->mixer_nid
,
4955 CFG_IDX_MIX
, spec
->num_all_adcs
,
4962 err
= create_capture_mixers(codec
);
4966 err
= parse_mic_boost(codec
);
4970 /* create "Headphone Mic Jack Mode" if no input selection is
4971 * available (or user specifies add_jack_modes hint)
4973 if (spec
->hp_mic_pin
&&
4974 (spec
->auto_mic
|| spec
->input_mux
.num_items
== 1 ||
4975 spec
->add_jack_modes
)) {
4976 err
= create_hp_mic_jack_mode(codec
, spec
->hp_mic_pin
);
4981 if (spec
->add_jack_modes
) {
4982 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
4983 err
= create_out_jack_modes(codec
, cfg
->line_outs
,
4984 cfg
->line_out_pins
);
4988 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
4989 err
= create_out_jack_modes(codec
, cfg
->hp_outs
,
4996 /* add power-up pin callbacks at last */
4997 add_all_pin_power_ctls(codec
, true);
4999 /* mute all aamix input initially */
5000 if (spec
->mixer_nid
)
5001 mute_all_mixer_nid(codec
, spec
->mixer_nid
);
5004 parse_digital(codec
);
5006 if (spec
->power_down_unused
|| codec
->power_save_node
) {
5007 if (!codec
->power_filter
)
5008 codec
->power_filter
= snd_hda_gen_path_power_filter
;
5009 if (!codec
->patch_ops
.stream_pm
)
5010 codec
->patch_ops
.stream_pm
= snd_hda_gen_stream_pm
;
5013 if (!spec
->no_analog
&& spec
->beep_nid
) {
5014 err
= snd_hda_attach_beep_device(codec
, spec
->beep_nid
);
5017 if (codec
->beep
&& codec
->power_save_node
) {
5018 err
= add_fake_beep_paths(codec
);
5021 codec
->beep
->power_hook
= beep_power_hook
;
5027 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config
);
5031 * Build control elements
5034 /* slave controls for virtual master */
5035 static const char * const slave_pfxs
[] = {
5036 "Front", "Surround", "Center", "LFE", "Side",
5037 "Headphone", "Speaker", "Mono", "Line Out",
5038 "CLFE", "Bass Speaker", "PCM",
5039 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
5040 "Headphone Front", "Headphone Surround", "Headphone CLFE",
5041 "Headphone Side", "Headphone+LO", "Speaker+LO",
5046 * snd_hda_gen_build_controls - Build controls from the parsed results
5047 * @codec: the HDA codec
5049 * Pass this to build_controls patch_ops.
5051 int snd_hda_gen_build_controls(struct hda_codec
*codec
)
5053 struct hda_gen_spec
*spec
= codec
->spec
;
5056 if (spec
->kctls
.used
) {
5057 err
= snd_hda_add_new_ctls(codec
, spec
->kctls
.list
);
5062 if (spec
->multiout
.dig_out_nid
) {
5063 err
= snd_hda_create_dig_out_ctls(codec
,
5064 spec
->multiout
.dig_out_nid
,
5065 spec
->multiout
.dig_out_nid
,
5066 spec
->pcm_rec
[1]->pcm_type
);
5069 if (!spec
->no_analog
) {
5070 err
= snd_hda_create_spdif_share_sw(codec
,
5074 spec
->multiout
.share_spdif
= 1;
5077 if (spec
->dig_in_nid
) {
5078 err
= snd_hda_create_spdif_in_ctls(codec
, spec
->dig_in_nid
);
5083 /* if we have no master control, let's create it */
5084 if (!spec
->no_analog
&& !spec
->suppress_vmaster
&&
5085 !snd_hda_find_mixer_ctl(codec
, "Master Playback Volume")) {
5086 err
= snd_hda_add_vmaster(codec
, "Master Playback Volume",
5087 spec
->vmaster_tlv
, slave_pfxs
,
5092 if (!spec
->no_analog
&& !spec
->suppress_vmaster
&&
5093 !snd_hda_find_mixer_ctl(codec
, "Master Playback Switch")) {
5094 err
= __snd_hda_add_vmaster(codec
, "Master Playback Switch",
5097 true, &spec
->vmaster_mute
.sw_kctl
);
5100 if (spec
->vmaster_mute
.hook
) {
5101 snd_hda_add_vmaster_hook(codec
, &spec
->vmaster_mute
,
5102 spec
->vmaster_mute_enum
);
5103 snd_hda_sync_vmaster_hook(&spec
->vmaster_mute
);
5107 free_kctls(spec
); /* no longer needed */
5109 err
= snd_hda_jack_add_kctls(codec
, &spec
->autocfg
);
5115 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls
);
5122 static void call_pcm_playback_hook(struct hda_pcm_stream
*hinfo
,
5123 struct hda_codec
*codec
,
5124 struct snd_pcm_substream
*substream
,
5127 struct hda_gen_spec
*spec
= codec
->spec
;
5128 if (spec
->pcm_playback_hook
)
5129 spec
->pcm_playback_hook(hinfo
, codec
, substream
, action
);
5132 static void call_pcm_capture_hook(struct hda_pcm_stream
*hinfo
,
5133 struct hda_codec
*codec
,
5134 struct snd_pcm_substream
*substream
,
5137 struct hda_gen_spec
*spec
= codec
->spec
;
5138 if (spec
->pcm_capture_hook
)
5139 spec
->pcm_capture_hook(hinfo
, codec
, substream
, action
);
5143 * Analog playback callbacks
5145 static int playback_pcm_open(struct hda_pcm_stream
*hinfo
,
5146 struct hda_codec
*codec
,
5147 struct snd_pcm_substream
*substream
)
5149 struct hda_gen_spec
*spec
= codec
->spec
;
5152 mutex_lock(&spec
->pcm_mutex
);
5153 err
= snd_hda_multi_out_analog_open(codec
,
5154 &spec
->multiout
, substream
,
5157 spec
->active_streams
|= 1 << STREAM_MULTI_OUT
;
5158 call_pcm_playback_hook(hinfo
, codec
, substream
,
5159 HDA_GEN_PCM_ACT_OPEN
);
5161 mutex_unlock(&spec
->pcm_mutex
);
5165 static int playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5166 struct hda_codec
*codec
,
5167 unsigned int stream_tag
,
5168 unsigned int format
,
5169 struct snd_pcm_substream
*substream
)
5171 struct hda_gen_spec
*spec
= codec
->spec
;
5174 err
= snd_hda_multi_out_analog_prepare(codec
, &spec
->multiout
,
5175 stream_tag
, format
, substream
);
5177 call_pcm_playback_hook(hinfo
, codec
, substream
,
5178 HDA_GEN_PCM_ACT_PREPARE
);
5182 static int playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5183 struct hda_codec
*codec
,
5184 struct snd_pcm_substream
*substream
)
5186 struct hda_gen_spec
*spec
= codec
->spec
;
5189 err
= snd_hda_multi_out_analog_cleanup(codec
, &spec
->multiout
);
5191 call_pcm_playback_hook(hinfo
, codec
, substream
,
5192 HDA_GEN_PCM_ACT_CLEANUP
);
5196 static int playback_pcm_close(struct hda_pcm_stream
*hinfo
,
5197 struct hda_codec
*codec
,
5198 struct snd_pcm_substream
*substream
)
5200 struct hda_gen_spec
*spec
= codec
->spec
;
5201 mutex_lock(&spec
->pcm_mutex
);
5202 spec
->active_streams
&= ~(1 << STREAM_MULTI_OUT
);
5203 call_pcm_playback_hook(hinfo
, codec
, substream
,
5204 HDA_GEN_PCM_ACT_CLOSE
);
5205 mutex_unlock(&spec
->pcm_mutex
);
5209 static int capture_pcm_open(struct hda_pcm_stream
*hinfo
,
5210 struct hda_codec
*codec
,
5211 struct snd_pcm_substream
*substream
)
5213 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_OPEN
);
5217 static int capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5218 struct hda_codec
*codec
,
5219 unsigned int stream_tag
,
5220 unsigned int format
,
5221 struct snd_pcm_substream
*substream
)
5223 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
5224 call_pcm_capture_hook(hinfo
, codec
, substream
,
5225 HDA_GEN_PCM_ACT_PREPARE
);
5229 static int capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5230 struct hda_codec
*codec
,
5231 struct snd_pcm_substream
*substream
)
5233 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
5234 call_pcm_capture_hook(hinfo
, codec
, substream
,
5235 HDA_GEN_PCM_ACT_CLEANUP
);
5239 static int capture_pcm_close(struct hda_pcm_stream
*hinfo
,
5240 struct hda_codec
*codec
,
5241 struct snd_pcm_substream
*substream
)
5243 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_CLOSE
);
5247 static int alt_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
5248 struct hda_codec
*codec
,
5249 struct snd_pcm_substream
*substream
)
5251 struct hda_gen_spec
*spec
= codec
->spec
;
5254 mutex_lock(&spec
->pcm_mutex
);
5255 if (spec
->indep_hp
&& !spec
->indep_hp_enabled
)
5258 spec
->active_streams
|= 1 << STREAM_INDEP_HP
;
5259 call_pcm_playback_hook(hinfo
, codec
, substream
,
5260 HDA_GEN_PCM_ACT_OPEN
);
5261 mutex_unlock(&spec
->pcm_mutex
);
5265 static int alt_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
5266 struct hda_codec
*codec
,
5267 struct snd_pcm_substream
*substream
)
5269 struct hda_gen_spec
*spec
= codec
->spec
;
5270 mutex_lock(&spec
->pcm_mutex
);
5271 spec
->active_streams
&= ~(1 << STREAM_INDEP_HP
);
5272 call_pcm_playback_hook(hinfo
, codec
, substream
,
5273 HDA_GEN_PCM_ACT_CLOSE
);
5274 mutex_unlock(&spec
->pcm_mutex
);
5278 static int alt_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5279 struct hda_codec
*codec
,
5280 unsigned int stream_tag
,
5281 unsigned int format
,
5282 struct snd_pcm_substream
*substream
)
5284 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
5285 call_pcm_playback_hook(hinfo
, codec
, substream
,
5286 HDA_GEN_PCM_ACT_PREPARE
);
5290 static int alt_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5291 struct hda_codec
*codec
,
5292 struct snd_pcm_substream
*substream
)
5294 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
5295 call_pcm_playback_hook(hinfo
, codec
, substream
,
5296 HDA_GEN_PCM_ACT_CLEANUP
);
5303 static int dig_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
5304 struct hda_codec
*codec
,
5305 struct snd_pcm_substream
*substream
)
5307 struct hda_gen_spec
*spec
= codec
->spec
;
5308 return snd_hda_multi_out_dig_open(codec
, &spec
->multiout
);
5311 static int dig_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5312 struct hda_codec
*codec
,
5313 unsigned int stream_tag
,
5314 unsigned int format
,
5315 struct snd_pcm_substream
*substream
)
5317 struct hda_gen_spec
*spec
= codec
->spec
;
5318 return snd_hda_multi_out_dig_prepare(codec
, &spec
->multiout
,
5319 stream_tag
, format
, substream
);
5322 static int dig_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5323 struct hda_codec
*codec
,
5324 struct snd_pcm_substream
*substream
)
5326 struct hda_gen_spec
*spec
= codec
->spec
;
5327 return snd_hda_multi_out_dig_cleanup(codec
, &spec
->multiout
);
5330 static int dig_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
5331 struct hda_codec
*codec
,
5332 struct snd_pcm_substream
*substream
)
5334 struct hda_gen_spec
*spec
= codec
->spec
;
5335 return snd_hda_multi_out_dig_close(codec
, &spec
->multiout
);
5341 #define alt_capture_pcm_open capture_pcm_open
5342 #define alt_capture_pcm_close capture_pcm_close
5344 static int alt_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5345 struct hda_codec
*codec
,
5346 unsigned int stream_tag
,
5347 unsigned int format
,
5348 struct snd_pcm_substream
*substream
)
5350 struct hda_gen_spec
*spec
= codec
->spec
;
5352 snd_hda_codec_setup_stream(codec
, spec
->adc_nids
[substream
->number
+ 1],
5353 stream_tag
, 0, format
);
5354 call_pcm_capture_hook(hinfo
, codec
, substream
,
5355 HDA_GEN_PCM_ACT_PREPARE
);
5359 static int alt_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5360 struct hda_codec
*codec
,
5361 struct snd_pcm_substream
*substream
)
5363 struct hda_gen_spec
*spec
= codec
->spec
;
5365 snd_hda_codec_cleanup_stream(codec
,
5366 spec
->adc_nids
[substream
->number
+ 1]);
5367 call_pcm_capture_hook(hinfo
, codec
, substream
,
5368 HDA_GEN_PCM_ACT_CLEANUP
);
5374 static const struct hda_pcm_stream pcm_analog_playback
= {
5378 /* NID is set in build_pcms */
5380 .open
= playback_pcm_open
,
5381 .close
= playback_pcm_close
,
5382 .prepare
= playback_pcm_prepare
,
5383 .cleanup
= playback_pcm_cleanup
5387 static const struct hda_pcm_stream pcm_analog_capture
= {
5391 /* NID is set in build_pcms */
5393 .open
= capture_pcm_open
,
5394 .close
= capture_pcm_close
,
5395 .prepare
= capture_pcm_prepare
,
5396 .cleanup
= capture_pcm_cleanup
5400 static const struct hda_pcm_stream pcm_analog_alt_playback
= {
5404 /* NID is set in build_pcms */
5406 .open
= alt_playback_pcm_open
,
5407 .close
= alt_playback_pcm_close
,
5408 .prepare
= alt_playback_pcm_prepare
,
5409 .cleanup
= alt_playback_pcm_cleanup
5413 static const struct hda_pcm_stream pcm_analog_alt_capture
= {
5414 .substreams
= 2, /* can be overridden */
5417 /* NID is set in build_pcms */
5419 .open
= alt_capture_pcm_open
,
5420 .close
= alt_capture_pcm_close
,
5421 .prepare
= alt_capture_pcm_prepare
,
5422 .cleanup
= alt_capture_pcm_cleanup
5426 static const struct hda_pcm_stream pcm_digital_playback
= {
5430 /* NID is set in build_pcms */
5432 .open
= dig_playback_pcm_open
,
5433 .close
= dig_playback_pcm_close
,
5434 .prepare
= dig_playback_pcm_prepare
,
5435 .cleanup
= dig_playback_pcm_cleanup
5439 static const struct hda_pcm_stream pcm_digital_capture
= {
5443 /* NID is set in build_pcms */
5446 /* Used by build_pcms to flag that a PCM has no playback stream */
5447 static const struct hda_pcm_stream pcm_null_stream
= {
5454 * dynamic changing ADC PCM streams
5456 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
)
5458 struct hda_gen_spec
*spec
= codec
->spec
;
5459 hda_nid_t new_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[cur
]];
5461 if (spec
->cur_adc
&& spec
->cur_adc
!= new_adc
) {
5462 /* stream is running, let's swap the current ADC */
5463 __snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
, 1);
5464 spec
->cur_adc
= new_adc
;
5465 snd_hda_codec_setup_stream(codec
, new_adc
,
5466 spec
->cur_adc_stream_tag
, 0,
5467 spec
->cur_adc_format
);
5473 /* analog capture with dynamic dual-adc changes */
5474 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
5475 struct hda_codec
*codec
,
5476 unsigned int stream_tag
,
5477 unsigned int format
,
5478 struct snd_pcm_substream
*substream
)
5480 struct hda_gen_spec
*spec
= codec
->spec
;
5481 spec
->cur_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[spec
->cur_mux
[0]]];
5482 spec
->cur_adc_stream_tag
= stream_tag
;
5483 spec
->cur_adc_format
= format
;
5484 snd_hda_codec_setup_stream(codec
, spec
->cur_adc
, stream_tag
, 0, format
);
5485 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_PREPARE
);
5489 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
5490 struct hda_codec
*codec
,
5491 struct snd_pcm_substream
*substream
)
5493 struct hda_gen_spec
*spec
= codec
->spec
;
5494 snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
);
5496 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_CLEANUP
);
5500 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture
= {
5504 .nid
= 0, /* fill later */
5506 .prepare
= dyn_adc_capture_pcm_prepare
,
5507 .cleanup
= dyn_adc_capture_pcm_cleanup
5511 static void fill_pcm_stream_name(char *str
, size_t len
, const char *sfx
,
5512 const char *chip_name
)
5518 strlcpy(str
, chip_name
, len
);
5520 /* drop non-alnum chars after a space */
5521 for (p
= strchr(str
, ' '); p
; p
= strchr(p
+ 1, ' ')) {
5522 if (!isalnum(p
[1])) {
5527 strlcat(str
, sfx
, len
);
5530 /* copy PCM stream info from @default_str, and override non-NULL entries
5531 * from @spec_str and @nid
5533 static void setup_pcm_stream(struct hda_pcm_stream
*str
,
5534 const struct hda_pcm_stream
*default_str
,
5535 const struct hda_pcm_stream
*spec_str
,
5538 *str
= *default_str
;
5542 if (spec_str
->substreams
)
5543 str
->substreams
= spec_str
->substreams
;
5544 if (spec_str
->channels_min
)
5545 str
->channels_min
= spec_str
->channels_min
;
5546 if (spec_str
->channels_max
)
5547 str
->channels_max
= spec_str
->channels_max
;
5548 if (spec_str
->rates
)
5549 str
->rates
= spec_str
->rates
;
5550 if (spec_str
->formats
)
5551 str
->formats
= spec_str
->formats
;
5552 if (spec_str
->maxbps
)
5553 str
->maxbps
= spec_str
->maxbps
;
5558 * snd_hda_gen_build_pcms - build PCM streams based on the parsed results
5559 * @codec: the HDA codec
5561 * Pass this to build_pcms patch_ops.
5563 int snd_hda_gen_build_pcms(struct hda_codec
*codec
)
5565 struct hda_gen_spec
*spec
= codec
->spec
;
5566 struct hda_pcm
*info
;
5567 bool have_multi_adcs
;
5569 if (spec
->no_analog
)
5572 fill_pcm_stream_name(spec
->stream_name_analog
,
5573 sizeof(spec
->stream_name_analog
),
5574 " Analog", codec
->core
.chip_name
);
5575 info
= snd_hda_codec_pcm_new(codec
, "%s", spec
->stream_name_analog
);
5578 spec
->pcm_rec
[0] = info
;
5580 if (spec
->multiout
.num_dacs
> 0) {
5581 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
],
5582 &pcm_analog_playback
,
5583 spec
->stream_analog_playback
,
5584 spec
->multiout
.dac_nids
[0]);
5585 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].channels_max
=
5586 spec
->multiout
.max_channels
;
5587 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
5588 spec
->autocfg
.line_outs
== 2)
5589 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].chmap
=
5592 if (spec
->num_adc_nids
) {
5593 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_CAPTURE
],
5594 (spec
->dyn_adc_switch
?
5595 &dyn_adc_pcm_analog_capture
: &pcm_analog_capture
),
5596 spec
->stream_analog_capture
,
5601 /* SPDIF for stream index #1 */
5602 if (spec
->multiout
.dig_out_nid
|| spec
->dig_in_nid
) {
5603 fill_pcm_stream_name(spec
->stream_name_digital
,
5604 sizeof(spec
->stream_name_digital
),
5605 " Digital", codec
->core
.chip_name
);
5606 info
= snd_hda_codec_pcm_new(codec
, "%s",
5607 spec
->stream_name_digital
);
5610 codec
->slave_dig_outs
= spec
->multiout
.slave_dig_outs
;
5611 spec
->pcm_rec
[1] = info
;
5612 if (spec
->dig_out_type
)
5613 info
->pcm_type
= spec
->dig_out_type
;
5615 info
->pcm_type
= HDA_PCM_TYPE_SPDIF
;
5616 if (spec
->multiout
.dig_out_nid
)
5617 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
],
5618 &pcm_digital_playback
,
5619 spec
->stream_digital_playback
,
5620 spec
->multiout
.dig_out_nid
);
5621 if (spec
->dig_in_nid
)
5622 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_CAPTURE
],
5623 &pcm_digital_capture
,
5624 spec
->stream_digital_capture
,
5628 if (spec
->no_analog
)
5631 /* If the use of more than one ADC is requested for the current
5632 * model, configure a second analog capture-only PCM.
5634 have_multi_adcs
= (spec
->num_adc_nids
> 1) &&
5635 !spec
->dyn_adc_switch
&& !spec
->auto_mic
;
5636 /* Additional Analaog capture for index #2 */
5637 if (spec
->alt_dac_nid
|| have_multi_adcs
) {
5638 fill_pcm_stream_name(spec
->stream_name_alt_analog
,
5639 sizeof(spec
->stream_name_alt_analog
),
5640 " Alt Analog", codec
->core
.chip_name
);
5641 info
= snd_hda_codec_pcm_new(codec
, "%s",
5642 spec
->stream_name_alt_analog
);
5645 spec
->pcm_rec
[2] = info
;
5646 if (spec
->alt_dac_nid
)
5647 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
],
5648 &pcm_analog_alt_playback
,
5649 spec
->stream_analog_alt_playback
,
5652 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
],
5653 &pcm_null_stream
, NULL
, 0);
5654 if (have_multi_adcs
) {
5655 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_CAPTURE
],
5656 &pcm_analog_alt_capture
,
5657 spec
->stream_analog_alt_capture
,
5659 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
=
5660 spec
->num_adc_nids
- 1;
5662 setup_pcm_stream(&info
->stream
[SNDRV_PCM_STREAM_CAPTURE
],
5663 &pcm_null_stream
, NULL
, 0);
5669 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms
);
5673 * Standard auto-parser initializations
5676 /* configure the given path as a proper output */
5677 static void set_output_and_unmute(struct hda_codec
*codec
, int path_idx
)
5679 struct nid_path
*path
;
5682 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
5683 if (!path
|| !path
->depth
)
5685 pin
= path
->path
[path
->depth
- 1];
5686 restore_pin_ctl(codec
, pin
);
5687 snd_hda_activate_path(codec
, path
, path
->active
,
5688 aamix_default(codec
->spec
));
5689 set_pin_eapd(codec
, pin
, path
->active
);
5692 /* initialize primary output paths */
5693 static void init_multi_out(struct hda_codec
*codec
)
5695 struct hda_gen_spec
*spec
= codec
->spec
;
5698 for (i
= 0; i
< spec
->autocfg
.line_outs
; i
++)
5699 set_output_and_unmute(codec
, spec
->out_paths
[i
]);
5703 static void __init_extra_out(struct hda_codec
*codec
, int num_outs
, int *paths
)
5707 for (i
= 0; i
< num_outs
; i
++)
5708 set_output_and_unmute(codec
, paths
[i
]);
5711 /* initialize hp and speaker paths */
5712 static void init_extra_out(struct hda_codec
*codec
)
5714 struct hda_gen_spec
*spec
= codec
->spec
;
5716 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_HP_OUT
)
5717 __init_extra_out(codec
, spec
->autocfg
.hp_outs
, spec
->hp_paths
);
5718 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
5719 __init_extra_out(codec
, spec
->autocfg
.speaker_outs
,
5720 spec
->speaker_paths
);
5723 /* initialize multi-io paths */
5724 static void init_multi_io(struct hda_codec
*codec
)
5726 struct hda_gen_spec
*spec
= codec
->spec
;
5729 for (i
= 0; i
< spec
->multi_ios
; i
++) {
5730 hda_nid_t pin
= spec
->multi_io
[i
].pin
;
5731 struct nid_path
*path
;
5732 path
= get_multiio_path(codec
, i
);
5735 if (!spec
->multi_io
[i
].ctl_in
)
5736 spec
->multi_io
[i
].ctl_in
=
5737 snd_hda_codec_get_pin_target(codec
, pin
);
5738 snd_hda_activate_path(codec
, path
, path
->active
,
5739 aamix_default(spec
));
5743 static void init_aamix_paths(struct hda_codec
*codec
)
5745 struct hda_gen_spec
*spec
= codec
->spec
;
5747 if (!spec
->have_aamix_ctl
)
5749 if (!has_aamix_out_paths(spec
))
5751 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->out_paths
[0],
5752 spec
->aamix_out_paths
[0],
5753 spec
->autocfg
.line_out_type
);
5754 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->hp_paths
[0],
5755 spec
->aamix_out_paths
[1],
5757 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->speaker_paths
[0],
5758 spec
->aamix_out_paths
[2],
5759 AUTO_PIN_SPEAKER_OUT
);
5762 /* set up input pins and loopback paths */
5763 static void init_analog_input(struct hda_codec
*codec
)
5765 struct hda_gen_spec
*spec
= codec
->spec
;
5766 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
5769 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
5770 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
5771 if (is_input_pin(codec
, nid
))
5772 restore_pin_ctl(codec
, nid
);
5774 /* init loopback inputs */
5775 if (spec
->mixer_nid
) {
5776 resume_path_from_idx(codec
, spec
->loopback_paths
[i
]);
5777 resume_path_from_idx(codec
, spec
->loopback_merge_path
);
5782 /* initialize ADC paths */
5783 static void init_input_src(struct hda_codec
*codec
)
5785 struct hda_gen_spec
*spec
= codec
->spec
;
5786 struct hda_input_mux
*imux
= &spec
->input_mux
;
5787 struct nid_path
*path
;
5790 if (spec
->dyn_adc_switch
)
5793 nums
= spec
->num_adc_nids
;
5795 for (c
= 0; c
< nums
; c
++) {
5796 for (i
= 0; i
< imux
->num_items
; i
++) {
5797 path
= get_input_path(codec
, c
, i
);
5799 bool active
= path
->active
;
5800 if (i
== spec
->cur_mux
[c
])
5802 snd_hda_activate_path(codec
, path
, active
, false);
5806 update_hp_mic(codec
, c
, true);
5809 if (spec
->cap_sync_hook
)
5810 spec
->cap_sync_hook(codec
, NULL
, NULL
);
5813 /* set right pin controls for digital I/O */
5814 static void init_digital(struct hda_codec
*codec
)
5816 struct hda_gen_spec
*spec
= codec
->spec
;
5820 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++)
5821 set_output_and_unmute(codec
, spec
->digout_paths
[i
]);
5822 pin
= spec
->autocfg
.dig_in_pin
;
5824 restore_pin_ctl(codec
, pin
);
5825 resume_path_from_idx(codec
, spec
->digin_path
);
5829 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5830 * invalid unsol tags by some reason
5832 static void clear_unsol_on_unused_pins(struct hda_codec
*codec
)
5836 for (i
= 0; i
< codec
->init_pins
.used
; i
++) {
5837 struct hda_pincfg
*pin
= snd_array_elem(&codec
->init_pins
, i
);
5838 hda_nid_t nid
= pin
->nid
;
5839 if (is_jack_detectable(codec
, nid
) &&
5840 !snd_hda_jack_tbl_get(codec
, nid
))
5841 snd_hda_codec_update_cache(codec
, nid
, 0,
5842 AC_VERB_SET_UNSOLICITED_ENABLE
, 0);
5847 * snd_hda_gen_init - initialize the generic spec
5848 * @codec: the HDA codec
5850 * This can be put as patch_ops init function.
5852 int snd_hda_gen_init(struct hda_codec
*codec
)
5854 struct hda_gen_spec
*spec
= codec
->spec
;
5856 if (spec
->init_hook
)
5857 spec
->init_hook(codec
);
5859 snd_hda_apply_verbs(codec
);
5861 init_multi_out(codec
);
5862 init_extra_out(codec
);
5863 init_multi_io(codec
);
5864 init_aamix_paths(codec
);
5865 init_analog_input(codec
);
5866 init_input_src(codec
);
5867 init_digital(codec
);
5869 clear_unsol_on_unused_pins(codec
);
5871 sync_all_pin_power_ctls(codec
);
5873 /* call init functions of standard auto-mute helpers */
5874 update_automute_all(codec
);
5876 regcache_sync(codec
->core
.regmap
);
5878 if (spec
->vmaster_mute
.sw_kctl
&& spec
->vmaster_mute
.hook
)
5879 snd_hda_sync_vmaster_hook(&spec
->vmaster_mute
);
5881 hda_call_check_power_status(codec
, 0x01);
5884 EXPORT_SYMBOL_GPL(snd_hda_gen_init
);
5887 * snd_hda_gen_free - free the generic spec
5888 * @codec: the HDA codec
5890 * This can be put as patch_ops free function.
5892 void snd_hda_gen_free(struct hda_codec
*codec
)
5894 snd_hda_apply_fixup(codec
, HDA_FIXUP_ACT_FREE
);
5895 snd_hda_gen_spec_free(codec
->spec
);
5899 EXPORT_SYMBOL_GPL(snd_hda_gen_free
);
5903 * snd_hda_gen_check_power_status - check the loopback power save state
5904 * @codec: the HDA codec
5905 * @nid: NID to inspect
5907 * This can be put as patch_ops check_power_status function.
5909 int snd_hda_gen_check_power_status(struct hda_codec
*codec
, hda_nid_t nid
)
5911 struct hda_gen_spec
*spec
= codec
->spec
;
5912 return snd_hda_check_amp_list_power(codec
, &spec
->loopback
, nid
);
5914 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status
);
5919 * the generic codec support
5922 static const struct hda_codec_ops generic_patch_ops
= {
5923 .build_controls
= snd_hda_gen_build_controls
,
5924 .build_pcms
= snd_hda_gen_build_pcms
,
5925 .init
= snd_hda_gen_init
,
5926 .free
= snd_hda_gen_free
,
5927 .unsol_event
= snd_hda_jack_unsol_event
,
5929 .check_power_status
= snd_hda_gen_check_power_status
,
5934 * snd_hda_parse_generic_codec - Generic codec parser
5935 * @codec: the HDA codec
5937 static int snd_hda_parse_generic_codec(struct hda_codec
*codec
)
5939 struct hda_gen_spec
*spec
;
5942 spec
= kzalloc(sizeof(*spec
), GFP_KERNEL
);
5945 snd_hda_gen_spec_init(spec
);
5948 err
= snd_hda_parse_pin_defcfg(codec
, &spec
->autocfg
, NULL
, 0);
5952 err
= snd_hda_gen_parse_auto_config(codec
, &spec
->autocfg
);
5956 codec
->patch_ops
= generic_patch_ops
;
5960 snd_hda_gen_free(codec
);
5964 static const struct hda_device_id snd_hda_id_generic
[] = {
5965 HDA_CODEC_ENTRY(HDA_CODEC_ID_GENERIC
, "Generic", snd_hda_parse_generic_codec
),
5968 MODULE_DEVICE_TABLE(hdaudio
, snd_hda_id_generic
);
5970 static struct hda_codec_driver generic_driver
= {
5971 .id
= snd_hda_id_generic
,
5974 module_hda_codec_driver(generic_driver
);
5976 MODULE_LICENSE("GPL");
5977 MODULE_DESCRIPTION("Generic HD-audio codec parser");