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/ctype.h>
28 #include <linux/string.h>
29 #include <linux/bitops.h>
30 #include <sound/core.h>
31 #include <sound/jack.h>
32 #include "hda_codec.h"
33 #include "hda_local.h"
34 #include "hda_auto_parser.h"
36 #include "hda_generic.h"
39 /* initialize hda_gen_spec struct */
40 int snd_hda_gen_spec_init(struct hda_gen_spec
*spec
)
42 snd_array_init(&spec
->kctls
, sizeof(struct snd_kcontrol_new
), 32);
43 snd_array_init(&spec
->paths
, sizeof(struct nid_path
), 8);
44 mutex_init(&spec
->pcm_mutex
);
47 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init
);
49 struct snd_kcontrol_new
*
50 snd_hda_gen_add_kctl(struct hda_gen_spec
*spec
, const char *name
,
51 const struct snd_kcontrol_new
*temp
)
53 struct snd_kcontrol_new
*knew
= snd_array_new(&spec
->kctls
);
58 knew
->name
= kstrdup(name
, GFP_KERNEL
);
60 knew
->name
= kstrdup(knew
->name
, GFP_KERNEL
);
65 EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl
);
67 static void free_kctls(struct hda_gen_spec
*spec
)
69 if (spec
->kctls
.list
) {
70 struct snd_kcontrol_new
*kctl
= spec
->kctls
.list
;
72 for (i
= 0; i
< spec
->kctls
.used
; i
++)
75 snd_array_free(&spec
->kctls
);
78 void snd_hda_gen_spec_free(struct hda_gen_spec
*spec
)
83 snd_array_free(&spec
->paths
);
85 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free
);
90 static void parse_user_hints(struct hda_codec
*codec
)
92 struct hda_gen_spec
*spec
= codec
->spec
;
95 val
= snd_hda_get_bool_hint(codec
, "jack_detect");
97 codec
->no_jack_detect
= !val
;
98 val
= snd_hda_get_bool_hint(codec
, "inv_jack_detect");
100 codec
->inv_jack_detect
= !!val
;
101 val
= snd_hda_get_bool_hint(codec
, "trigger_sense");
103 codec
->no_trigger_sense
= !val
;
104 val
= snd_hda_get_bool_hint(codec
, "inv_eapd");
106 codec
->inv_eapd
= !!val
;
107 val
= snd_hda_get_bool_hint(codec
, "pcm_format_first");
109 codec
->pcm_format_first
= !!val
;
110 val
= snd_hda_get_bool_hint(codec
, "sticky_stream");
112 codec
->no_sticky_stream
= !val
;
113 val
= snd_hda_get_bool_hint(codec
, "spdif_status_reset");
115 codec
->spdif_status_reset
= !!val
;
116 val
= snd_hda_get_bool_hint(codec
, "pin_amp_workaround");
118 codec
->pin_amp_workaround
= !!val
;
119 val
= snd_hda_get_bool_hint(codec
, "single_adc_amp");
121 codec
->single_adc_amp
= !!val
;
123 val
= snd_hda_get_bool_hint(codec
, "auto_mute");
125 spec
->suppress_auto_mute
= !val
;
126 val
= snd_hda_get_bool_hint(codec
, "auto_mic");
128 spec
->suppress_auto_mic
= !val
;
129 val
= snd_hda_get_bool_hint(codec
, "line_in_auto_switch");
131 spec
->line_in_auto_switch
= !!val
;
132 val
= snd_hda_get_bool_hint(codec
, "need_dac_fix");
134 spec
->need_dac_fix
= !!val
;
135 val
= snd_hda_get_bool_hint(codec
, "primary_hp");
137 spec
->no_primary_hp
= !val
;
138 val
= snd_hda_get_bool_hint(codec
, "multi_cap_vol");
140 spec
->multi_cap_vol
= !!val
;
141 val
= snd_hda_get_bool_hint(codec
, "inv_dmic_split");
143 spec
->inv_dmic_split
= !!val
;
144 val
= snd_hda_get_bool_hint(codec
, "indep_hp");
146 spec
->indep_hp
= !!val
;
147 val
= snd_hda_get_bool_hint(codec
, "add_stereo_mix_input");
149 spec
->add_stereo_mix_input
= !!val
;
150 val
= snd_hda_get_bool_hint(codec
, "add_out_jack_modes");
152 spec
->add_out_jack_modes
= !!val
;
153 val
= snd_hda_get_bool_hint(codec
, "add_in_jack_modes");
155 spec
->add_in_jack_modes
= !!val
;
157 if (!snd_hda_get_int_hint(codec
, "mixer_nid", &val
))
158 spec
->mixer_nid
= val
;
162 * pin control value accesses
165 #define update_pin_ctl(codec, pin, val) \
166 snd_hda_codec_update_cache(codec, pin, 0, \
167 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
169 /* restore the pinctl based on the cached value */
170 static inline void restore_pin_ctl(struct hda_codec
*codec
, hda_nid_t pin
)
172 update_pin_ctl(codec
, pin
, snd_hda_codec_get_pin_target(codec
, pin
));
175 /* set the pinctl target value and write it if requested */
176 static void set_pin_target(struct hda_codec
*codec
, hda_nid_t pin
,
177 unsigned int val
, bool do_write
)
181 val
= snd_hda_correct_pin_ctl(codec
, pin
, val
);
182 snd_hda_codec_set_pin_target(codec
, pin
, val
);
184 update_pin_ctl(codec
, pin
, val
);
187 /* set pinctl target values for all given pins */
188 static void set_pin_targets(struct hda_codec
*codec
, int num_pins
,
189 hda_nid_t
*pins
, unsigned int val
)
192 for (i
= 0; i
< num_pins
; i
++)
193 set_pin_target(codec
, pins
[i
], val
, false);
200 /* return the position of NID in the list, or -1 if not found */
201 static int find_idx_in_nid_list(hda_nid_t nid
, const hda_nid_t
*list
, int nums
)
204 for (i
= 0; i
< nums
; i
++)
210 /* return true if the given NID is contained in the path */
211 static bool is_nid_contained(struct nid_path
*path
, hda_nid_t nid
)
213 return find_idx_in_nid_list(nid
, path
->path
, path
->depth
) >= 0;
216 static struct nid_path
*get_nid_path(struct hda_codec
*codec
,
217 hda_nid_t from_nid
, hda_nid_t to_nid
,
220 struct hda_gen_spec
*spec
= codec
->spec
;
223 for (i
= 0; i
< spec
->paths
.used
; i
++) {
224 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
225 if (path
->depth
<= 0)
227 if ((!from_nid
|| path
->path
[0] == from_nid
) &&
228 (!to_nid
|| path
->path
[path
->depth
- 1] == to_nid
)) {
230 (anchor_nid
> 0 && is_nid_contained(path
, anchor_nid
)) ||
231 (anchor_nid
< 0 && !is_nid_contained(path
, anchor_nid
)))
238 /* get the path between the given NIDs;
239 * passing 0 to either @pin or @dac behaves as a wildcard
241 struct nid_path
*snd_hda_get_nid_path(struct hda_codec
*codec
,
242 hda_nid_t from_nid
, hda_nid_t to_nid
)
244 return get_nid_path(codec
, from_nid
, to_nid
, 0);
246 EXPORT_SYMBOL_HDA(snd_hda_get_nid_path
);
248 /* get the index number corresponding to the path instance;
249 * the index starts from 1, for easier checking the invalid value
251 int snd_hda_get_path_idx(struct hda_codec
*codec
, struct nid_path
*path
)
253 struct hda_gen_spec
*spec
= codec
->spec
;
254 struct nid_path
*array
= spec
->paths
.list
;
257 if (!spec
->paths
.used
)
260 if (idx
< 0 || idx
>= spec
->paths
.used
)
265 /* get the path instance corresponding to the given index number */
266 struct nid_path
*snd_hda_get_path_from_idx(struct hda_codec
*codec
, int idx
)
268 struct hda_gen_spec
*spec
= codec
->spec
;
270 if (idx
<= 0 || idx
> spec
->paths
.used
)
272 return snd_array_elem(&spec
->paths
, idx
- 1);
275 /* check whether the given DAC is already found in any existing paths */
276 static bool is_dac_already_used(struct hda_codec
*codec
, hda_nid_t nid
)
278 struct hda_gen_spec
*spec
= codec
->spec
;
281 for (i
= 0; i
< spec
->paths
.used
; i
++) {
282 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
283 if (path
->path
[0] == nid
)
289 /* check whether the given two widgets can be connected */
290 static bool is_reachable_path(struct hda_codec
*codec
,
291 hda_nid_t from_nid
, hda_nid_t to_nid
)
293 if (!from_nid
|| !to_nid
)
295 return snd_hda_get_conn_index(codec
, to_nid
, from_nid
, true) >= 0;
298 /* nid, dir and idx */
299 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
301 /* check whether the given ctl is already assigned in any path elements */
302 static bool is_ctl_used(struct hda_codec
*codec
, unsigned int val
, int type
)
304 struct hda_gen_spec
*spec
= codec
->spec
;
307 val
&= AMP_VAL_COMPARE_MASK
;
308 for (i
= 0; i
< spec
->paths
.used
; i
++) {
309 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
310 if ((path
->ctls
[type
] & AMP_VAL_COMPARE_MASK
) == val
)
316 /* check whether a control with the given (nid, dir, idx) was assigned */
317 static bool is_ctl_associated(struct hda_codec
*codec
, hda_nid_t nid
,
318 int dir
, int idx
, int type
)
320 unsigned int val
= HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, dir
);
321 return is_ctl_used(codec
, val
, type
);
324 static void print_nid_path(const char *pfx
, struct nid_path
*path
)
331 for (i
= 0; i
< path
->depth
; i
++) {
333 sprintf(tmp
, ":%02x", path
->path
[i
]);
334 strlcat(buf
, tmp
, sizeof(buf
));
336 snd_printdd("%s path: depth=%d %s\n", pfx
, path
->depth
, buf
);
339 /* called recursively */
340 static bool __parse_nid_path(struct hda_codec
*codec
,
341 hda_nid_t from_nid
, hda_nid_t to_nid
,
342 int anchor_nid
, struct nid_path
*path
,
345 const hda_nid_t
*conn
;
348 if (to_nid
== anchor_nid
)
349 anchor_nid
= 0; /* anchor passed */
350 else if (to_nid
== (hda_nid_t
)(-anchor_nid
))
351 return false; /* hit the exclusive nid */
353 nums
= snd_hda_get_conn_list(codec
, to_nid
, &conn
);
354 for (i
= 0; i
< nums
; i
++) {
355 if (conn
[i
] != from_nid
) {
356 /* special case: when from_nid is 0,
357 * try to find an empty DAC
360 get_wcaps_type(get_wcaps(codec
, conn
[i
])) != AC_WID_AUD_OUT
||
361 is_dac_already_used(codec
, conn
[i
]))
364 /* anchor is not requested or already passed? */
368 if (depth
>= MAX_NID_PATH_DEPTH
)
370 for (i
= 0; i
< nums
; i
++) {
372 type
= get_wcaps_type(get_wcaps(codec
, conn
[i
]));
373 if (type
== AC_WID_AUD_OUT
|| type
== AC_WID_AUD_IN
||
376 if (__parse_nid_path(codec
, from_nid
, conn
[i
],
377 anchor_nid
, path
, depth
+ 1))
383 path
->path
[path
->depth
] = conn
[i
];
384 path
->idx
[path
->depth
+ 1] = i
;
385 if (nums
> 1 && get_wcaps_type(get_wcaps(codec
, to_nid
)) != AC_WID_AUD_MIX
)
386 path
->multi
[path
->depth
+ 1] = 1;
391 /* parse the widget path from the given nid to the target nid;
392 * when @from_nid is 0, try to find an empty DAC;
393 * when @anchor_nid is set to a positive value, only paths through the widget
394 * with the given value are evaluated.
395 * when @anchor_nid is set to a negative value, paths through the widget
396 * with the negative of given value are excluded, only other paths are chosen.
397 * when @anchor_nid is zero, no special handling about path selection.
399 bool snd_hda_parse_nid_path(struct hda_codec
*codec
, hda_nid_t from_nid
,
400 hda_nid_t to_nid
, int anchor_nid
,
401 struct nid_path
*path
)
403 if (__parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
, 1)) {
404 path
->path
[path
->depth
] = to_nid
;
410 EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path
);
413 * parse the path between the given NIDs and add to the path list.
414 * if no valid path is found, return NULL
417 snd_hda_add_new_path(struct hda_codec
*codec
, hda_nid_t from_nid
,
418 hda_nid_t to_nid
, int anchor_nid
)
420 struct hda_gen_spec
*spec
= codec
->spec
;
421 struct nid_path
*path
;
423 if (from_nid
&& to_nid
&& !is_reachable_path(codec
, from_nid
, to_nid
))
426 /* check whether the path has been already added */
427 path
= get_nid_path(codec
, from_nid
, to_nid
, anchor_nid
);
431 path
= snd_array_new(&spec
->paths
);
434 memset(path
, 0, sizeof(*path
));
435 if (snd_hda_parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
))
441 EXPORT_SYMBOL_HDA(snd_hda_add_new_path
);
443 /* clear the given path as invalid so that it won't be picked up later */
444 static void invalidate_nid_path(struct hda_codec
*codec
, int idx
)
446 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, idx
);
449 memset(path
, 0, sizeof(*path
));
452 /* look for an empty DAC slot */
453 static hda_nid_t
look_for_dac(struct hda_codec
*codec
, hda_nid_t pin
,
456 struct hda_gen_spec
*spec
= codec
->spec
;
460 for (i
= 0; i
< spec
->num_all_dacs
; i
++) {
461 hda_nid_t nid
= spec
->all_dacs
[i
];
462 if (!nid
|| is_dac_already_used(codec
, nid
))
464 cap_digital
= !!(get_wcaps(codec
, nid
) & AC_WCAP_DIGITAL
);
465 if (is_digital
!= cap_digital
)
467 if (is_reachable_path(codec
, nid
, pin
))
473 /* replace the channels in the composed amp value with the given number */
474 static unsigned int amp_val_replace_channels(unsigned int val
, unsigned int chs
)
476 val
&= ~(0x3U
<< 16);
481 /* check whether the widget has the given amp capability for the direction */
482 static bool check_amp_caps(struct hda_codec
*codec
, hda_nid_t nid
,
483 int dir
, unsigned int bits
)
487 if (get_wcaps(codec
, nid
) & (1 << (dir
+ 1)))
488 if (query_amp_caps(codec
, nid
, dir
) & bits
)
493 static bool same_amp_caps(struct hda_codec
*codec
, hda_nid_t nid1
,
494 hda_nid_t nid2
, int dir
)
496 if (!(get_wcaps(codec
, nid1
) & (1 << (dir
+ 1))))
497 return !(get_wcaps(codec
, nid2
) & (1 << (dir
+ 1)));
498 return (query_amp_caps(codec
, nid1
, dir
) ==
499 query_amp_caps(codec
, nid2
, dir
));
502 #define nid_has_mute(codec, nid, dir) \
503 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE)
504 #define nid_has_volume(codec, nid, dir) \
505 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
507 /* look for a widget suitable for assigning a mute switch in the path */
508 static hda_nid_t
look_for_out_mute_nid(struct hda_codec
*codec
,
509 struct nid_path
*path
)
513 for (i
= path
->depth
- 1; i
>= 0; i
--) {
514 if (nid_has_mute(codec
, path
->path
[i
], HDA_OUTPUT
))
515 return path
->path
[i
];
516 if (i
!= path
->depth
- 1 && i
!= 0 &&
517 nid_has_mute(codec
, path
->path
[i
], HDA_INPUT
))
518 return path
->path
[i
];
523 /* look for a widget suitable for assigning a volume ctl in the path */
524 static hda_nid_t
look_for_out_vol_nid(struct hda_codec
*codec
,
525 struct nid_path
*path
)
529 for (i
= path
->depth
- 1; i
>= 0; i
--) {
530 if (nid_has_volume(codec
, path
->path
[i
], HDA_OUTPUT
))
531 return path
->path
[i
];
537 * path activation / deactivation
540 /* can have the amp-in capability? */
541 static bool has_amp_in(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
543 hda_nid_t nid
= path
->path
[idx
];
544 unsigned int caps
= get_wcaps(codec
, nid
);
545 unsigned int type
= get_wcaps_type(caps
);
547 if (!(caps
& AC_WCAP_IN_AMP
))
549 if (type
== AC_WID_PIN
&& idx
> 0) /* only for input pins */
554 /* can have the amp-out capability? */
555 static bool has_amp_out(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
557 hda_nid_t nid
= path
->path
[idx
];
558 unsigned int caps
= get_wcaps(codec
, nid
);
559 unsigned int type
= get_wcaps_type(caps
);
561 if (!(caps
& AC_WCAP_OUT_AMP
))
563 if (type
== AC_WID_PIN
&& !idx
) /* only for output pins */
568 /* check whether the given (nid,dir,idx) is active */
569 static bool is_active_nid(struct hda_codec
*codec
, hda_nid_t nid
,
570 unsigned int idx
, unsigned int dir
)
572 struct hda_gen_spec
*spec
= codec
->spec
;
575 for (n
= 0; n
< spec
->paths
.used
; n
++) {
576 struct nid_path
*path
= snd_array_elem(&spec
->paths
, n
);
579 for (i
= 0; i
< path
->depth
; i
++) {
580 if (path
->path
[i
] == nid
) {
581 if (dir
== HDA_OUTPUT
|| path
->idx
[i
] == idx
)
590 /* get the default amp value for the target state */
591 static int get_amp_val_to_activate(struct hda_codec
*codec
, hda_nid_t nid
,
592 int dir
, unsigned int caps
, bool enable
)
594 unsigned int val
= 0;
596 if (caps
& AC_AMPCAP_NUM_STEPS
) {
599 val
= (caps
& AC_AMPCAP_OFFSET
) >> AC_AMPCAP_OFFSET_SHIFT
;
601 if (caps
& AC_AMPCAP_MUTE
) {
608 /* initialize the amp value (only at the first time) */
609 static void init_amp(struct hda_codec
*codec
, hda_nid_t nid
, int dir
, int idx
)
611 unsigned int caps
= query_amp_caps(codec
, nid
, dir
);
612 int val
= get_amp_val_to_activate(codec
, nid
, dir
, caps
, false);
613 snd_hda_codec_amp_init_stereo(codec
, nid
, dir
, idx
, 0xff, val
);
616 /* calculate amp value mask we can modify;
617 * if the given amp is controlled by mixers, don't touch it
619 static unsigned int get_amp_mask_to_modify(struct hda_codec
*codec
,
620 hda_nid_t nid
, int dir
, int idx
,
623 unsigned int mask
= 0xff;
625 if (caps
& AC_AMPCAP_MUTE
) {
626 if (is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_MUTE_CTL
))
629 if (caps
& AC_AMPCAP_NUM_STEPS
) {
630 if (is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_VOL_CTL
) ||
631 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_BOOST_CTL
))
637 static void activate_amp(struct hda_codec
*codec
, hda_nid_t nid
, int dir
,
638 int idx
, int idx_to_check
, bool enable
)
641 unsigned int mask
, val
;
643 if (!enable
&& is_active_nid(codec
, nid
, dir
, idx
))
646 caps
= query_amp_caps(codec
, nid
, dir
);
647 val
= get_amp_val_to_activate(codec
, nid
, dir
, caps
, enable
);
648 mask
= get_amp_mask_to_modify(codec
, nid
, dir
, idx_to_check
, caps
);
653 snd_hda_codec_amp_stereo(codec
, nid
, dir
, idx
, mask
, val
);
656 static void activate_amp_out(struct hda_codec
*codec
, struct nid_path
*path
,
659 hda_nid_t nid
= path
->path
[i
];
660 init_amp(codec
, nid
, HDA_OUTPUT
, 0);
661 activate_amp(codec
, nid
, HDA_OUTPUT
, 0, 0, enable
);
664 static void activate_amp_in(struct hda_codec
*codec
, struct nid_path
*path
,
665 int i
, bool enable
, bool add_aamix
)
667 struct hda_gen_spec
*spec
= codec
->spec
;
668 const hda_nid_t
*conn
;
671 hda_nid_t nid
= path
->path
[i
];
673 nums
= snd_hda_get_conn_list(codec
, nid
, &conn
);
674 type
= get_wcaps_type(get_wcaps(codec
, nid
));
675 if (type
== AC_WID_PIN
||
676 (type
== AC_WID_AUD_IN
&& codec
->single_adc_amp
)) {
682 for (n
= 0; n
< nums
; n
++)
683 init_amp(codec
, nid
, HDA_INPUT
, n
);
685 /* here is a little bit tricky in comparison with activate_amp_out();
686 * when aa-mixer is available, we need to enable the path as well
688 for (n
= 0; n
< nums
; n
++) {
689 if (n
!= idx
&& (!add_aamix
|| conn
[n
] != spec
->mixer_nid
))
691 activate_amp(codec
, nid
, HDA_INPUT
, n
, idx
, enable
);
695 /* activate or deactivate the given path
696 * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
698 void snd_hda_activate_path(struct hda_codec
*codec
, struct nid_path
*path
,
699 bool enable
, bool add_aamix
)
704 path
->active
= false;
706 for (i
= path
->depth
- 1; i
>= 0; i
--) {
707 if (enable
&& path
->multi
[i
])
708 snd_hda_codec_write_cache(codec
, path
->path
[i
], 0,
709 AC_VERB_SET_CONNECT_SEL
,
711 if (has_amp_in(codec
, path
, i
))
712 activate_amp_in(codec
, path
, i
, enable
, add_aamix
);
713 if (has_amp_out(codec
, path
, i
))
714 activate_amp_out(codec
, path
, i
, enable
);
720 EXPORT_SYMBOL_HDA(snd_hda_activate_path
);
722 /* turn on/off EAPD on the given pin */
723 static void set_pin_eapd(struct hda_codec
*codec
, hda_nid_t pin
, bool enable
)
725 struct hda_gen_spec
*spec
= codec
->spec
;
726 if (spec
->own_eapd_ctl
||
727 !(snd_hda_query_pin_caps(codec
, pin
) & AC_PINCAP_EAPD
))
731 snd_hda_codec_update_cache(codec
, pin
, 0,
732 AC_VERB_SET_EAPD_BTLENABLE
,
733 enable
? 0x02 : 0x00);
738 * Helper functions for creating mixer ctl elements
746 static const struct snd_kcontrol_new control_templates
[] = {
747 HDA_CODEC_VOLUME(NULL
, 0, 0, 0),
748 HDA_CODEC_MUTE(NULL
, 0, 0, 0),
749 HDA_BIND_MUTE(NULL
, 0, 0, 0),
752 /* add dynamic controls from template */
753 static struct snd_kcontrol_new
*
754 add_control(struct hda_gen_spec
*spec
, int type
, const char *name
,
755 int cidx
, unsigned long val
)
757 struct snd_kcontrol_new
*knew
;
759 knew
= snd_hda_gen_add_kctl(spec
, name
, &control_templates
[type
]);
763 if (get_amp_nid_(val
))
764 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
765 knew
->private_value
= val
;
769 static int add_control_with_pfx(struct hda_gen_spec
*spec
, int type
,
770 const char *pfx
, const char *dir
,
771 const char *sfx
, int cidx
, unsigned long val
)
774 snprintf(name
, sizeof(name
), "%s %s %s", pfx
, dir
, sfx
);
775 if (!add_control(spec
, type
, name
, cidx
, val
))
780 #define add_pb_vol_ctrl(spec, type, pfx, val) \
781 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
782 #define add_pb_sw_ctrl(spec, type, pfx, val) \
783 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
784 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
785 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
786 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
787 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
789 static int add_vol_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
790 unsigned int chs
, struct nid_path
*path
)
795 val
= path
->ctls
[NID_PATH_VOL_CTL
];
798 val
= amp_val_replace_channels(val
, chs
);
799 return __add_pb_vol_ctrl(codec
->spec
, HDA_CTL_WIDGET_VOL
, pfx
, cidx
, val
);
802 /* return the channel bits suitable for the given path->ctls[] */
803 static int get_default_ch_nums(struct hda_codec
*codec
, struct nid_path
*path
,
806 int chs
= 1; /* mono (left only) */
808 hda_nid_t nid
= get_amp_nid_(path
->ctls
[type
]);
809 if (nid
&& (get_wcaps(codec
, nid
) & AC_WCAP_STEREO
))
810 chs
= 3; /* stereo */
815 static int add_stereo_vol(struct hda_codec
*codec
, const char *pfx
, int cidx
,
816 struct nid_path
*path
)
818 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_VOL_CTL
);
819 return add_vol_ctl(codec
, pfx
, cidx
, chs
, path
);
822 /* create a mute-switch for the given mixer widget;
823 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
825 static int add_sw_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
826 unsigned int chs
, struct nid_path
*path
)
829 int type
= HDA_CTL_WIDGET_MUTE
;
833 val
= path
->ctls
[NID_PATH_MUTE_CTL
];
836 val
= amp_val_replace_channels(val
, chs
);
837 if (get_amp_direction_(val
) == HDA_INPUT
) {
838 hda_nid_t nid
= get_amp_nid_(val
);
839 int nums
= snd_hda_get_num_conns(codec
, nid
);
841 type
= HDA_CTL_BIND_MUTE
;
845 return __add_pb_sw_ctrl(codec
->spec
, type
, pfx
, cidx
, val
);
848 static int add_stereo_sw(struct hda_codec
*codec
, const char *pfx
,
849 int cidx
, struct nid_path
*path
)
851 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_MUTE_CTL
);
852 return add_sw_ctl(codec
, pfx
, cidx
, chs
, path
);
855 /* any ctl assigned to the path with the given index? */
856 static bool path_has_mixer(struct hda_codec
*codec
, int path_idx
, int ctl_type
)
858 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, path_idx
);
859 return path
&& path
->ctls
[ctl_type
];
862 static const char * const channel_name
[4] = {
863 "Front", "Surround", "CLFE", "Side"
866 /* give some appropriate ctl name prefix for the given line out channel */
867 static const char *get_line_out_pfx(struct hda_codec
*codec
, int ch
,
868 int *index
, int ctl_type
)
870 struct hda_gen_spec
*spec
= codec
->spec
;
871 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
874 if (cfg
->line_outs
== 1 && !spec
->multi_ios
&&
875 !cfg
->hp_outs
&& !cfg
->speaker_outs
)
876 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
878 /* if there is really a single DAC used in the whole output paths,
879 * use it master (or "PCM" if a vmaster hook is present)
881 if (spec
->multiout
.num_dacs
== 1 && !spec
->mixer_nid
&&
882 !spec
->multiout
.hp_out_nid
[0] && !spec
->multiout
.extra_out_nid
[0])
883 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
885 /* multi-io channels */
886 if (ch
>= cfg
->line_outs
)
887 return channel_name
[ch
];
889 switch (cfg
->line_out_type
) {
890 case AUTO_PIN_SPEAKER_OUT
:
891 /* if the primary channel vol/mute is shared with HP volume,
892 * don't name it as Speaker
894 if (!ch
&& cfg
->hp_outs
&&
895 !path_has_mixer(codec
, spec
->hp_paths
[0], ctl_type
))
897 if (cfg
->line_outs
== 1)
899 if (cfg
->line_outs
== 2)
900 return ch
? "Bass Speaker" : "Speaker";
902 case AUTO_PIN_HP_OUT
:
903 /* if the primary channel vol/mute is shared with spk volume,
904 * don't name it as Headphone
906 if (!ch
&& cfg
->speaker_outs
&&
907 !path_has_mixer(codec
, spec
->speaker_paths
[0], ctl_type
))
909 /* for multi-io case, only the primary out */
910 if (ch
&& spec
->multi_ios
)
916 /* for a single channel output, we don't have to name the channel */
917 if (cfg
->line_outs
== 1 && !spec
->multi_ios
)
920 if (ch
>= ARRAY_SIZE(channel_name
)) {
925 return channel_name
[ch
];
932 /* badness definition */
934 /* No primary DAC is found for the main output */
935 BAD_NO_PRIMARY_DAC
= 0x10000,
936 /* No DAC is found for the extra output */
938 /* No possible multi-ios */
939 BAD_MULTI_IO
= 0x103,
940 /* No individual DAC for extra output */
941 BAD_NO_EXTRA_DAC
= 0x102,
942 /* No individual DAC for extra surrounds */
943 BAD_NO_EXTRA_SURR_DAC
= 0x101,
944 /* Primary DAC shared with main surrounds */
945 BAD_SHARED_SURROUND
= 0x100,
946 /* Primary DAC shared with main CLFE */
947 BAD_SHARED_CLFE
= 0x10,
948 /* Primary DAC shared with extra surrounds */
949 BAD_SHARED_EXTRA_SURROUND
= 0x10,
950 /* Volume widget is shared */
951 BAD_SHARED_VOL
= 0x10,
954 /* look for widgets in the given path which are appropriate for
955 * volume and mute controls, and assign the values to ctls[].
957 * When no appropriate widget is found in the path, the badness value
958 * is incremented depending on the situation. The function returns the
959 * total badness for both volume and mute controls.
961 static int assign_out_path_ctls(struct hda_codec
*codec
, struct nid_path
*path
)
968 return BAD_SHARED_VOL
* 2;
970 if (path
->ctls
[NID_PATH_VOL_CTL
] ||
971 path
->ctls
[NID_PATH_MUTE_CTL
])
972 return 0; /* already evaluated */
974 nid
= look_for_out_vol_nid(codec
, path
);
976 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
977 if (is_ctl_used(codec
, val
, NID_PATH_VOL_CTL
))
978 badness
+= BAD_SHARED_VOL
;
980 path
->ctls
[NID_PATH_VOL_CTL
] = val
;
982 badness
+= BAD_SHARED_VOL
;
983 nid
= look_for_out_mute_nid(codec
, path
);
985 unsigned int wid_type
= get_wcaps_type(get_wcaps(codec
, nid
));
986 if (wid_type
== AC_WID_PIN
|| wid_type
== AC_WID_AUD_OUT
||
987 nid_has_mute(codec
, nid
, HDA_OUTPUT
))
988 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
990 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_INPUT
);
991 if (is_ctl_used(codec
, val
, NID_PATH_MUTE_CTL
))
992 badness
+= BAD_SHARED_VOL
;
994 path
->ctls
[NID_PATH_MUTE_CTL
] = val
;
996 badness
+= BAD_SHARED_VOL
;
1000 struct badness_table
{
1001 int no_primary_dac
; /* no primary DAC */
1002 int no_dac
; /* no secondary DACs */
1003 int shared_primary
; /* primary DAC is shared with main output */
1004 int shared_surr
; /* secondary DAC shared with main or primary */
1005 int shared_clfe
; /* third DAC shared with main or primary */
1006 int shared_surr_main
; /* secondary DAC sahred with main/DAC0 */
1009 static struct badness_table main_out_badness
= {
1010 .no_primary_dac
= BAD_NO_PRIMARY_DAC
,
1011 .no_dac
= BAD_NO_DAC
,
1012 .shared_primary
= BAD_NO_PRIMARY_DAC
,
1013 .shared_surr
= BAD_SHARED_SURROUND
,
1014 .shared_clfe
= BAD_SHARED_CLFE
,
1015 .shared_surr_main
= BAD_SHARED_SURROUND
,
1018 static struct badness_table extra_out_badness
= {
1019 .no_primary_dac
= BAD_NO_DAC
,
1020 .no_dac
= BAD_NO_DAC
,
1021 .shared_primary
= BAD_NO_EXTRA_DAC
,
1022 .shared_surr
= BAD_SHARED_EXTRA_SURROUND
,
1023 .shared_clfe
= BAD_SHARED_EXTRA_SURROUND
,
1024 .shared_surr_main
= BAD_NO_EXTRA_SURR_DAC
,
1027 /* get the DAC of the primary output corresponding to the given array index */
1028 static hda_nid_t
get_primary_out(struct hda_codec
*codec
, int idx
)
1030 struct hda_gen_spec
*spec
= codec
->spec
;
1031 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1033 if (cfg
->line_outs
> idx
)
1034 return spec
->private_dac_nids
[idx
];
1035 idx
-= cfg
->line_outs
;
1036 if (spec
->multi_ios
> idx
)
1037 return spec
->multi_io
[idx
].dac
;
1041 /* return the DAC if it's reachable, otherwise zero */
1042 static inline hda_nid_t
try_dac(struct hda_codec
*codec
,
1043 hda_nid_t dac
, hda_nid_t pin
)
1045 return is_reachable_path(codec
, dac
, pin
) ? dac
: 0;
1048 /* try to assign DACs to pins and return the resultant badness */
1049 static int try_assign_dacs(struct hda_codec
*codec
, int num_outs
,
1050 const hda_nid_t
*pins
, hda_nid_t
*dacs
,
1052 const struct badness_table
*bad
)
1054 struct hda_gen_spec
*spec
= codec
->spec
;
1062 for (i
= 0; i
< num_outs
; i
++) {
1063 struct nid_path
*path
;
1064 hda_nid_t pin
= pins
[i
];
1066 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1068 badness
+= assign_out_path_ctls(codec
, path
);
1072 dacs
[i
] = look_for_dac(codec
, pin
, false);
1073 if (!dacs
[i
] && !i
) {
1074 /* try to steal the DAC of surrounds for the front */
1075 for (j
= 1; j
< num_outs
; j
++) {
1076 if (is_reachable_path(codec
, dacs
[j
], pin
)) {
1079 invalidate_nid_path(codec
, path_idx
[j
]);
1088 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1090 dac
= try_dac(codec
, dacs
[0], pin
);
1092 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1095 badness
+= bad
->shared_primary
;
1097 badness
+= bad
->shared_surr
;
1099 badness
+= bad
->shared_clfe
;
1100 } else if (is_reachable_path(codec
, spec
->private_dac_nids
[0], pin
)) {
1101 dac
= spec
->private_dac_nids
[0];
1102 badness
+= bad
->shared_surr_main
;
1104 badness
+= bad
->no_primary_dac
;
1106 badness
+= bad
->no_dac
;
1108 path
= snd_hda_add_new_path(codec
, dac
, pin
, -spec
->mixer_nid
);
1109 if (!path
&& !i
&& spec
->mixer_nid
) {
1110 /* try with aamix */
1111 path
= snd_hda_add_new_path(codec
, dac
, pin
, 0);
1116 /* print_nid_path("output", path); */
1117 path
->active
= true;
1118 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1119 badness
+= assign_out_path_ctls(codec
, path
);
1126 /* return NID if the given pin has only a single connection to a certain DAC */
1127 static hda_nid_t
get_dac_if_single(struct hda_codec
*codec
, hda_nid_t pin
)
1129 struct hda_gen_spec
*spec
= codec
->spec
;
1131 hda_nid_t nid_found
= 0;
1133 for (i
= 0; i
< spec
->num_all_dacs
; i
++) {
1134 hda_nid_t nid
= spec
->all_dacs
[i
];
1135 if (!nid
|| is_dac_already_used(codec
, nid
))
1137 if (is_reachable_path(codec
, nid
, pin
)) {
1146 /* check whether the given pin can be a multi-io pin */
1147 static bool can_be_multiio_pin(struct hda_codec
*codec
,
1148 unsigned int location
, hda_nid_t nid
)
1150 unsigned int defcfg
, caps
;
1152 defcfg
= snd_hda_codec_get_pincfg(codec
, nid
);
1153 if (get_defcfg_connect(defcfg
) != AC_JACK_PORT_COMPLEX
)
1155 if (location
&& get_defcfg_location(defcfg
) != location
)
1157 caps
= snd_hda_query_pin_caps(codec
, nid
);
1158 if (!(caps
& AC_PINCAP_OUT
))
1163 /* count the number of input pins that are capable to be multi-io */
1164 static int count_multiio_pins(struct hda_codec
*codec
, hda_nid_t reference_pin
)
1166 struct hda_gen_spec
*spec
= codec
->spec
;
1167 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1168 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1169 unsigned int location
= get_defcfg_location(defcfg
);
1173 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1174 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1175 if (cfg
->inputs
[i
].type
!= type
)
1177 if (can_be_multiio_pin(codec
, location
,
1178 cfg
->inputs
[i
].pin
))
1188 * When hardwired is set, try to fill ony hardwired pins, and returns
1189 * zero if any pins are filled, non-zero if nothing found.
1190 * When hardwired is off, try to fill possible input pins, and returns
1191 * the badness value.
1193 static int fill_multi_ios(struct hda_codec
*codec
,
1194 hda_nid_t reference_pin
,
1197 struct hda_gen_spec
*spec
= codec
->spec
;
1198 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1199 int type
, i
, j
, num_pins
, old_pins
;
1200 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1201 unsigned int location
= get_defcfg_location(defcfg
);
1203 struct nid_path
*path
;
1205 old_pins
= spec
->multi_ios
;
1209 num_pins
= count_multiio_pins(codec
, reference_pin
);
1213 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1214 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1215 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
1218 if (cfg
->inputs
[i
].type
!= type
)
1220 if (!can_be_multiio_pin(codec
, location
, nid
))
1222 for (j
= 0; j
< spec
->multi_ios
; j
++) {
1223 if (nid
== spec
->multi_io
[j
].pin
)
1226 if (j
< spec
->multi_ios
)
1230 dac
= get_dac_if_single(codec
, nid
);
1232 dac
= look_for_dac(codec
, nid
, false);
1237 path
= snd_hda_add_new_path(codec
, dac
, nid
,
1243 /* print_nid_path("multiio", path); */
1244 spec
->multi_io
[spec
->multi_ios
].pin
= nid
;
1245 spec
->multi_io
[spec
->multi_ios
].dac
= dac
;
1246 spec
->out_paths
[cfg
->line_outs
+ spec
->multi_ios
] =
1247 snd_hda_get_path_idx(codec
, path
);
1249 if (spec
->multi_ios
>= 2)
1255 badness
= BAD_MULTI_IO
;
1256 if (old_pins
== spec
->multi_ios
) {
1258 return 1; /* nothing found */
1260 return badness
; /* no badness if nothing found */
1262 if (!hardwired
&& spec
->multi_ios
< 2) {
1263 /* cancel newly assigned paths */
1264 spec
->paths
.used
-= spec
->multi_ios
- old_pins
;
1265 spec
->multi_ios
= old_pins
;
1269 /* assign volume and mute controls */
1270 for (i
= old_pins
; i
< spec
->multi_ios
; i
++) {
1271 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[cfg
->line_outs
+ i
]);
1272 badness
+= assign_out_path_ctls(codec
, path
);
1278 /* map DACs for all pins in the list if they are single connections */
1279 static bool map_singles(struct hda_codec
*codec
, int outs
,
1280 const hda_nid_t
*pins
, hda_nid_t
*dacs
, int *path_idx
)
1282 struct hda_gen_spec
*spec
= codec
->spec
;
1285 for (i
= 0; i
< outs
; i
++) {
1286 struct nid_path
*path
;
1290 dac
= get_dac_if_single(codec
, pins
[i
]);
1293 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
],
1295 if (!path
&& !i
&& spec
->mixer_nid
)
1296 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
], 0);
1300 /* print_nid_path("output", path); */
1301 path
->active
= true;
1302 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1308 /* create a new path including aamix if available, and return its index */
1309 static int check_aamix_out_path(struct hda_codec
*codec
, int path_idx
)
1311 struct hda_gen_spec
*spec
= codec
->spec
;
1312 struct nid_path
*path
;
1314 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1315 if (!path
|| !path
->depth
||
1316 is_nid_contained(path
, spec
->mixer_nid
))
1318 path
= snd_hda_add_new_path(codec
, path
->path
[0],
1319 path
->path
[path
->depth
- 1],
1323 /* print_nid_path("output-aamix", path); */
1324 path
->active
= false; /* unused as default */
1325 return snd_hda_get_path_idx(codec
, path
);
1328 /* fill the empty entries in the dac array for speaker/hp with the
1329 * shared dac pointed by the paths
1331 static void refill_shared_dacs(struct hda_codec
*codec
, int num_outs
,
1332 hda_nid_t
*dacs
, int *path_idx
)
1334 struct nid_path
*path
;
1337 for (i
= 0; i
< num_outs
; i
++) {
1340 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1343 dacs
[i
] = path
->path
[0];
1347 /* fill in the dac_nids table from the parsed pin configuration */
1348 static int fill_and_eval_dacs(struct hda_codec
*codec
,
1349 bool fill_hardwired
,
1350 bool fill_mio_first
)
1352 struct hda_gen_spec
*spec
= codec
->spec
;
1353 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1354 int i
, err
, badness
;
1356 /* set num_dacs once to full for look_for_dac() */
1357 spec
->multiout
.num_dacs
= cfg
->line_outs
;
1358 spec
->multiout
.dac_nids
= spec
->private_dac_nids
;
1359 memset(spec
->private_dac_nids
, 0, sizeof(spec
->private_dac_nids
));
1360 memset(spec
->multiout
.hp_out_nid
, 0, sizeof(spec
->multiout
.hp_out_nid
));
1361 memset(spec
->multiout
.extra_out_nid
, 0, sizeof(spec
->multiout
.extra_out_nid
));
1362 spec
->multi_ios
= 0;
1363 snd_array_free(&spec
->paths
);
1365 /* clear path indices */
1366 memset(spec
->out_paths
, 0, sizeof(spec
->out_paths
));
1367 memset(spec
->hp_paths
, 0, sizeof(spec
->hp_paths
));
1368 memset(spec
->speaker_paths
, 0, sizeof(spec
->speaker_paths
));
1369 memset(spec
->aamix_out_paths
, 0, sizeof(spec
->aamix_out_paths
));
1370 memset(spec
->digout_paths
, 0, sizeof(spec
->digout_paths
));
1371 memset(spec
->input_paths
, 0, sizeof(spec
->input_paths
));
1372 memset(spec
->loopback_paths
, 0, sizeof(spec
->loopback_paths
));
1373 memset(&spec
->digin_path
, 0, sizeof(spec
->digin_path
));
1377 /* fill hard-wired DACs first */
1378 if (fill_hardwired
) {
1381 mapped
= map_singles(codec
, cfg
->line_outs
,
1383 spec
->private_dac_nids
,
1385 mapped
|= map_singles(codec
, cfg
->hp_outs
,
1387 spec
->multiout
.hp_out_nid
,
1389 mapped
|= map_singles(codec
, cfg
->speaker_outs
,
1391 spec
->multiout
.extra_out_nid
,
1392 spec
->speaker_paths
);
1393 if (fill_mio_first
&& cfg
->line_outs
== 1 &&
1394 cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1395 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], true);
1402 badness
+= try_assign_dacs(codec
, cfg
->line_outs
, cfg
->line_out_pins
,
1403 spec
->private_dac_nids
, spec
->out_paths
,
1406 if (fill_mio_first
&&
1407 cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1408 /* try to fill multi-io first */
1409 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1412 /* we don't count badness at this stage yet */
1415 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
1416 err
= try_assign_dacs(codec
, cfg
->hp_outs
, cfg
->hp_pins
,
1417 spec
->multiout
.hp_out_nid
,
1419 &extra_out_badness
);
1424 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1425 err
= try_assign_dacs(codec
, cfg
->speaker_outs
,
1427 spec
->multiout
.extra_out_nid
,
1428 spec
->speaker_paths
,
1429 &extra_out_badness
);
1434 if (cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1435 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1441 if (spec
->mixer_nid
) {
1442 spec
->aamix_out_paths
[0] =
1443 check_aamix_out_path(codec
, spec
->out_paths
[0]);
1444 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1445 spec
->aamix_out_paths
[1] =
1446 check_aamix_out_path(codec
, spec
->hp_paths
[0]);
1447 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1448 spec
->aamix_out_paths
[2] =
1449 check_aamix_out_path(codec
, spec
->speaker_paths
[0]);
1452 if (cfg
->hp_outs
&& cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
)
1453 if (count_multiio_pins(codec
, cfg
->hp_pins
[0]) >= 2)
1454 spec
->multi_ios
= 1; /* give badness */
1456 /* re-count num_dacs and squash invalid entries */
1457 spec
->multiout
.num_dacs
= 0;
1458 for (i
= 0; i
< cfg
->line_outs
; i
++) {
1459 if (spec
->private_dac_nids
[i
])
1460 spec
->multiout
.num_dacs
++;
1462 memmove(spec
->private_dac_nids
+ i
,
1463 spec
->private_dac_nids
+ i
+ 1,
1464 sizeof(hda_nid_t
) * (cfg
->line_outs
- i
- 1));
1465 spec
->private_dac_nids
[cfg
->line_outs
- 1] = 0;
1469 spec
->ext_channel_count
= spec
->min_channel_count
=
1470 spec
->multiout
.num_dacs
* 2;
1472 if (spec
->multi_ios
== 2) {
1473 for (i
= 0; i
< 2; i
++)
1474 spec
->private_dac_nids
[spec
->multiout
.num_dacs
++] =
1475 spec
->multi_io
[i
].dac
;
1476 } else if (spec
->multi_ios
) {
1477 spec
->multi_ios
= 0;
1478 badness
+= BAD_MULTI_IO
;
1481 /* re-fill the shared DAC for speaker / headphone */
1482 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1483 refill_shared_dacs(codec
, cfg
->hp_outs
,
1484 spec
->multiout
.hp_out_nid
,
1486 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1487 refill_shared_dacs(codec
, cfg
->speaker_outs
,
1488 spec
->multiout
.extra_out_nid
,
1489 spec
->speaker_paths
);
1494 #define DEBUG_BADNESS
1496 #ifdef DEBUG_BADNESS
1497 #define debug_badness snd_printdd
1499 #define debug_badness(...)
1502 #ifdef DEBUG_BADNESS
1503 static inline void print_nid_path_idx(struct hda_codec
*codec
,
1504 const char *pfx
, int idx
)
1506 struct nid_path
*path
;
1508 path
= snd_hda_get_path_from_idx(codec
, idx
);
1510 print_nid_path(pfx
, path
);
1513 static void debug_show_configs(struct hda_codec
*codec
,
1514 struct auto_pin_cfg
*cfg
)
1516 struct hda_gen_spec
*spec
= codec
->spec
;
1517 #ifdef CONFIG_SND_DEBUG_VERBOSE
1518 static const char * const lo_type
[3] = { "LO", "SP", "HP" };
1522 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1523 cfg
->line_out_pins
[0], cfg
->line_out_pins
[1],
1524 cfg
->line_out_pins
[2], cfg
->line_out_pins
[3],
1525 spec
->multiout
.dac_nids
[0],
1526 spec
->multiout
.dac_nids
[1],
1527 spec
->multiout
.dac_nids
[2],
1528 spec
->multiout
.dac_nids
[3],
1529 lo_type
[cfg
->line_out_type
]);
1530 for (i
= 0; i
< cfg
->line_outs
; i
++)
1531 print_nid_path_idx(codec
, " out", spec
->out_paths
[i
]);
1532 if (spec
->multi_ios
> 0)
1533 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1535 spec
->multi_io
[0].pin
, spec
->multi_io
[1].pin
,
1536 spec
->multi_io
[0].dac
, spec
->multi_io
[1].dac
);
1537 for (i
= 0; i
< spec
->multi_ios
; i
++)
1538 print_nid_path_idx(codec
, " mio",
1539 spec
->out_paths
[cfg
->line_outs
+ i
]);
1541 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1542 cfg
->hp_pins
[0], cfg
->hp_pins
[1],
1543 cfg
->hp_pins
[2], cfg
->hp_pins
[3],
1544 spec
->multiout
.hp_out_nid
[0],
1545 spec
->multiout
.hp_out_nid
[1],
1546 spec
->multiout
.hp_out_nid
[2],
1547 spec
->multiout
.hp_out_nid
[3]);
1548 for (i
= 0; i
< cfg
->hp_outs
; i
++)
1549 print_nid_path_idx(codec
, " hp ", spec
->hp_paths
[i
]);
1550 if (cfg
->speaker_outs
)
1551 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1552 cfg
->speaker_pins
[0], cfg
->speaker_pins
[1],
1553 cfg
->speaker_pins
[2], cfg
->speaker_pins
[3],
1554 spec
->multiout
.extra_out_nid
[0],
1555 spec
->multiout
.extra_out_nid
[1],
1556 spec
->multiout
.extra_out_nid
[2],
1557 spec
->multiout
.extra_out_nid
[3]);
1558 for (i
= 0; i
< cfg
->speaker_outs
; i
++)
1559 print_nid_path_idx(codec
, " spk", spec
->speaker_paths
[i
]);
1560 for (i
= 0; i
< 3; i
++)
1561 print_nid_path_idx(codec
, " mix", spec
->aamix_out_paths
[i
]);
1564 #define debug_show_configs(codec, cfg) /* NOP */
1567 /* find all available DACs of the codec */
1568 static void fill_all_dac_nids(struct hda_codec
*codec
)
1570 struct hda_gen_spec
*spec
= codec
->spec
;
1572 hda_nid_t nid
= codec
->start_nid
;
1574 spec
->num_all_dacs
= 0;
1575 memset(spec
->all_dacs
, 0, sizeof(spec
->all_dacs
));
1576 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
1577 if (get_wcaps_type(get_wcaps(codec
, nid
)) != AC_WID_AUD_OUT
)
1579 if (spec
->num_all_dacs
>= ARRAY_SIZE(spec
->all_dacs
)) {
1580 snd_printk(KERN_ERR
"hda: Too many DACs!\n");
1583 spec
->all_dacs
[spec
->num_all_dacs
++] = nid
;
1587 static int parse_output_paths(struct hda_codec
*codec
)
1589 struct hda_gen_spec
*spec
= codec
->spec
;
1590 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1591 struct auto_pin_cfg
*best_cfg
;
1593 int best_badness
= INT_MAX
;
1595 bool fill_hardwired
= true, fill_mio_first
= true;
1596 bool best_wired
= true, best_mio
= true;
1597 bool hp_spk_swapped
= false;
1599 best_cfg
= kmalloc(sizeof(*best_cfg
), GFP_KERNEL
);
1605 badness
= fill_and_eval_dacs(codec
, fill_hardwired
,
1611 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1612 cfg
->line_out_type
, fill_hardwired
, fill_mio_first
,
1614 debug_show_configs(codec
, cfg
);
1615 if (badness
< best_badness
) {
1616 best_badness
= badness
;
1618 best_wired
= fill_hardwired
;
1619 best_mio
= fill_mio_first
;
1623 fill_mio_first
= !fill_mio_first
;
1624 if (!fill_mio_first
)
1626 fill_hardwired
= !fill_hardwired
;
1627 if (!fill_hardwired
)
1631 hp_spk_swapped
= true;
1632 if (cfg
->speaker_outs
> 0 &&
1633 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
1634 cfg
->hp_outs
= cfg
->line_outs
;
1635 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
1636 sizeof(cfg
->hp_pins
));
1637 cfg
->line_outs
= cfg
->speaker_outs
;
1638 memcpy(cfg
->line_out_pins
, cfg
->speaker_pins
,
1639 sizeof(cfg
->speaker_pins
));
1640 cfg
->speaker_outs
= 0;
1641 memset(cfg
->speaker_pins
, 0, sizeof(cfg
->speaker_pins
));
1642 cfg
->line_out_type
= AUTO_PIN_SPEAKER_OUT
;
1643 fill_hardwired
= true;
1646 if (cfg
->hp_outs
> 0 &&
1647 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
1648 cfg
->speaker_outs
= cfg
->line_outs
;
1649 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
1650 sizeof(cfg
->speaker_pins
));
1651 cfg
->line_outs
= cfg
->hp_outs
;
1652 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
,
1653 sizeof(cfg
->hp_pins
));
1655 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
1656 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
1657 fill_hardwired
= true;
1664 debug_badness("==> restoring best_cfg\n");
1666 fill_and_eval_dacs(codec
, best_wired
, best_mio
);
1668 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1669 cfg
->line_out_type
, best_wired
, best_mio
);
1670 debug_show_configs(codec
, cfg
);
1672 if (cfg
->line_out_pins
[0]) {
1673 struct nid_path
*path
;
1674 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[0]);
1676 spec
->vmaster_nid
= look_for_out_vol_nid(codec
, path
);
1677 if (spec
->vmaster_nid
)
1678 snd_hda_set_vmaster_tlv(codec
, spec
->vmaster_nid
,
1679 HDA_OUTPUT
, spec
->vmaster_tlv
);
1682 /* set initial pinctl targets */
1683 if (spec
->prefer_hp_amp
|| cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
1687 set_pin_targets(codec
, cfg
->line_outs
, cfg
->line_out_pins
, val
);
1688 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1689 set_pin_targets(codec
, cfg
->hp_outs
, cfg
->hp_pins
, PIN_HP
);
1690 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1691 val
= spec
->prefer_hp_amp
? PIN_HP
: PIN_OUT
;
1692 set_pin_targets(codec
, cfg
->speaker_outs
,
1693 cfg
->speaker_pins
, val
);
1700 /* add playback controls from the parsed DAC table */
1701 static int create_multi_out_ctls(struct hda_codec
*codec
,
1702 const struct auto_pin_cfg
*cfg
)
1704 struct hda_gen_spec
*spec
= codec
->spec
;
1705 int i
, err
, noutputs
;
1707 noutputs
= cfg
->line_outs
;
1708 if (spec
->multi_ios
> 0 && cfg
->line_outs
< 3)
1709 noutputs
+= spec
->multi_ios
;
1711 for (i
= 0; i
< noutputs
; i
++) {
1714 struct nid_path
*path
;
1716 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[i
]);
1720 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_VOL_CTL
);
1721 if (!name
|| !strcmp(name
, "CLFE")) {
1723 err
= add_vol_ctl(codec
, "Center", 0, 1, path
);
1726 err
= add_vol_ctl(codec
, "LFE", 0, 2, path
);
1730 err
= add_stereo_vol(codec
, name
, index
, path
);
1735 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_MUTE_CTL
);
1736 if (!name
|| !strcmp(name
, "CLFE")) {
1737 err
= add_sw_ctl(codec
, "Center", 0, 1, path
);
1740 err
= add_sw_ctl(codec
, "LFE", 0, 2, path
);
1744 err
= add_stereo_sw(codec
, name
, index
, path
);
1752 static int create_extra_out(struct hda_codec
*codec
, int path_idx
,
1753 const char *pfx
, int cidx
)
1755 struct nid_path
*path
;
1758 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1761 err
= add_stereo_vol(codec
, pfx
, cidx
, path
);
1764 err
= add_stereo_sw(codec
, pfx
, cidx
, path
);
1770 /* add playback controls for speaker and HP outputs */
1771 static int create_extra_outs(struct hda_codec
*codec
, int num_pins
,
1772 const int *paths
, const char *pfx
)
1776 for (i
= 0; i
< num_pins
; i
++) {
1781 if (num_pins
== 2 && i
== 1 && !strcmp(pfx
, "Speaker"))
1782 name
= "Bass Speaker";
1783 else if (num_pins
>= 3) {
1784 snprintf(tmp
, sizeof(tmp
), "%s %s",
1785 pfx
, channel_name
[i
]);
1791 err
= create_extra_out(codec
, paths
[i
], name
, idx
);
1798 static int create_hp_out_ctls(struct hda_codec
*codec
)
1800 struct hda_gen_spec
*spec
= codec
->spec
;
1801 return create_extra_outs(codec
, spec
->autocfg
.hp_outs
,
1806 static int create_speaker_out_ctls(struct hda_codec
*codec
)
1808 struct hda_gen_spec
*spec
= codec
->spec
;
1809 return create_extra_outs(codec
, spec
->autocfg
.speaker_outs
,
1810 spec
->speaker_paths
,
1815 * independent HP controls
1818 static int indep_hp_info(struct snd_kcontrol
*kcontrol
,
1819 struct snd_ctl_elem_info
*uinfo
)
1821 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
1824 static int indep_hp_get(struct snd_kcontrol
*kcontrol
,
1825 struct snd_ctl_elem_value
*ucontrol
)
1827 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1828 struct hda_gen_spec
*spec
= codec
->spec
;
1829 ucontrol
->value
.enumerated
.item
[0] = spec
->indep_hp_enabled
;
1833 static int indep_hp_put(struct snd_kcontrol
*kcontrol
,
1834 struct snd_ctl_elem_value
*ucontrol
)
1836 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1837 struct hda_gen_spec
*spec
= codec
->spec
;
1838 unsigned int select
= ucontrol
->value
.enumerated
.item
[0];
1841 mutex_lock(&spec
->pcm_mutex
);
1842 if (spec
->active_streams
) {
1847 if (spec
->indep_hp_enabled
!= select
) {
1848 spec
->indep_hp_enabled
= select
;
1849 if (spec
->indep_hp_enabled
)
1850 spec
->multiout
.hp_out_nid
[0] = 0;
1852 spec
->multiout
.hp_out_nid
[0] = spec
->alt_dac_nid
;
1856 mutex_unlock(&spec
->pcm_mutex
);
1860 static const struct snd_kcontrol_new indep_hp_ctl
= {
1861 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1862 .name
= "Independent HP",
1863 .info
= indep_hp_info
,
1864 .get
= indep_hp_get
,
1865 .put
= indep_hp_put
,
1869 static int create_indep_hp_ctls(struct hda_codec
*codec
)
1871 struct hda_gen_spec
*spec
= codec
->spec
;
1873 if (!spec
->indep_hp
)
1875 if (!spec
->multiout
.hp_out_nid
[0]) {
1880 spec
->indep_hp_enabled
= false;
1881 spec
->alt_dac_nid
= spec
->multiout
.hp_out_nid
[0];
1882 if (!snd_hda_gen_add_kctl(spec
, NULL
, &indep_hp_ctl
))
1888 * channel mode enum control
1891 static int ch_mode_info(struct snd_kcontrol
*kcontrol
,
1892 struct snd_ctl_elem_info
*uinfo
)
1894 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1895 struct hda_gen_spec
*spec
= codec
->spec
;
1898 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
1900 uinfo
->value
.enumerated
.items
= spec
->multi_ios
+ 1;
1901 if (uinfo
->value
.enumerated
.item
> spec
->multi_ios
)
1902 uinfo
->value
.enumerated
.item
= spec
->multi_ios
;
1903 chs
= uinfo
->value
.enumerated
.item
* 2 + spec
->min_channel_count
;
1904 sprintf(uinfo
->value
.enumerated
.name
, "%dch", chs
);
1908 static int ch_mode_get(struct snd_kcontrol
*kcontrol
,
1909 struct snd_ctl_elem_value
*ucontrol
)
1911 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1912 struct hda_gen_spec
*spec
= codec
->spec
;
1913 ucontrol
->value
.enumerated
.item
[0] =
1914 (spec
->ext_channel_count
- spec
->min_channel_count
) / 2;
1918 static inline struct nid_path
*
1919 get_multiio_path(struct hda_codec
*codec
, int idx
)
1921 struct hda_gen_spec
*spec
= codec
->spec
;
1922 return snd_hda_get_path_from_idx(codec
,
1923 spec
->out_paths
[spec
->autocfg
.line_outs
+ idx
]);
1926 static void update_automute_all(struct hda_codec
*codec
);
1928 static int set_multi_io(struct hda_codec
*codec
, int idx
, bool output
)
1930 struct hda_gen_spec
*spec
= codec
->spec
;
1931 hda_nid_t nid
= spec
->multi_io
[idx
].pin
;
1932 struct nid_path
*path
;
1934 path
= get_multiio_path(codec
, idx
);
1938 if (path
->active
== output
)
1942 set_pin_target(codec
, nid
, PIN_OUT
, true);
1943 snd_hda_activate_path(codec
, path
, true, true);
1944 set_pin_eapd(codec
, nid
, true);
1946 set_pin_eapd(codec
, nid
, false);
1947 snd_hda_activate_path(codec
, path
, false, true);
1948 set_pin_target(codec
, nid
, spec
->multi_io
[idx
].ctl_in
, true);
1951 /* update jack retasking in case it modifies any of them */
1952 update_automute_all(codec
);
1957 static int ch_mode_put(struct snd_kcontrol
*kcontrol
,
1958 struct snd_ctl_elem_value
*ucontrol
)
1960 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1961 struct hda_gen_spec
*spec
= codec
->spec
;
1964 ch
= ucontrol
->value
.enumerated
.item
[0];
1965 if (ch
< 0 || ch
> spec
->multi_ios
)
1967 if (ch
== (spec
->ext_channel_count
- spec
->min_channel_count
) / 2)
1969 spec
->ext_channel_count
= ch
* 2 + spec
->min_channel_count
;
1970 for (i
= 0; i
< spec
->multi_ios
; i
++)
1971 set_multi_io(codec
, i
, i
< ch
);
1972 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
1973 spec
->const_channel_count
);
1974 if (spec
->need_dac_fix
)
1975 spec
->multiout
.num_dacs
= spec
->multiout
.max_channels
/ 2;
1979 static const struct snd_kcontrol_new channel_mode_enum
= {
1980 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1981 .name
= "Channel Mode",
1982 .info
= ch_mode_info
,
1987 static int create_multi_channel_mode(struct hda_codec
*codec
)
1989 struct hda_gen_spec
*spec
= codec
->spec
;
1991 if (spec
->multi_ios
> 0) {
1992 if (!snd_hda_gen_add_kctl(spec
, NULL
, &channel_mode_enum
))
1999 * aamix loopback enable/disable switch
2002 #define loopback_mixing_info indep_hp_info
2004 static int loopback_mixing_get(struct snd_kcontrol
*kcontrol
,
2005 struct snd_ctl_elem_value
*ucontrol
)
2007 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2008 struct hda_gen_spec
*spec
= codec
->spec
;
2009 ucontrol
->value
.enumerated
.item
[0] = spec
->aamix_mode
;
2013 static void update_aamix_paths(struct hda_codec
*codec
, bool do_mix
,
2014 int nomix_path_idx
, int mix_path_idx
)
2016 struct nid_path
*nomix_path
, *mix_path
;
2018 nomix_path
= snd_hda_get_path_from_idx(codec
, nomix_path_idx
);
2019 mix_path
= snd_hda_get_path_from_idx(codec
, mix_path_idx
);
2020 if (!nomix_path
|| !mix_path
)
2023 snd_hda_activate_path(codec
, nomix_path
, false, true);
2024 snd_hda_activate_path(codec
, mix_path
, true, true);
2026 snd_hda_activate_path(codec
, mix_path
, false, true);
2027 snd_hda_activate_path(codec
, nomix_path
, true, true);
2031 static int loopback_mixing_put(struct snd_kcontrol
*kcontrol
,
2032 struct snd_ctl_elem_value
*ucontrol
)
2034 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2035 struct hda_gen_spec
*spec
= codec
->spec
;
2036 unsigned int val
= ucontrol
->value
.enumerated
.item
[0];
2038 if (val
== spec
->aamix_mode
)
2040 spec
->aamix_mode
= val
;
2041 update_aamix_paths(codec
, val
, spec
->out_paths
[0],
2042 spec
->aamix_out_paths
[0]);
2043 update_aamix_paths(codec
, val
, spec
->hp_paths
[0],
2044 spec
->aamix_out_paths
[1]);
2045 update_aamix_paths(codec
, val
, spec
->speaker_paths
[0],
2046 spec
->aamix_out_paths
[2]);
2050 static const struct snd_kcontrol_new loopback_mixing_enum
= {
2051 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2052 .name
= "Loopback Mixing",
2053 .info
= loopback_mixing_info
,
2054 .get
= loopback_mixing_get
,
2055 .put
= loopback_mixing_put
,
2058 static int create_loopback_mixing_ctl(struct hda_codec
*codec
)
2060 struct hda_gen_spec
*spec
= codec
->spec
;
2062 if (!spec
->mixer_nid
)
2064 if (!(spec
->aamix_out_paths
[0] || spec
->aamix_out_paths
[1] ||
2065 spec
->aamix_out_paths
[2]))
2067 if (!snd_hda_gen_add_kctl(spec
, NULL
, &loopback_mixing_enum
))
2073 * shared headphone/mic handling
2076 static void call_update_outputs(struct hda_codec
*codec
);
2078 /* for shared I/O, change the pin-control accordingly */
2079 static void update_shared_mic_hp(struct hda_codec
*codec
, bool set_as_mic
)
2081 struct hda_gen_spec
*spec
= codec
->spec
;
2083 hda_nid_t pin
= spec
->autocfg
.inputs
[1].pin
;
2084 /* NOTE: this assumes that there are only two inputs, the
2085 * first is the real internal mic and the second is HP/mic jack.
2088 val
= snd_hda_get_default_vref(codec
, pin
);
2090 /* This pin does not have vref caps - let's enable vref on pin 0x18
2091 instead, as suggested by Realtek */
2092 if (val
== AC_PINCTL_VREF_HIZ
&& spec
->shared_mic_vref_pin
) {
2093 const hda_nid_t vref_pin
= spec
->shared_mic_vref_pin
;
2094 unsigned int vref_val
= snd_hda_get_default_vref(codec
, vref_pin
);
2095 if (vref_val
!= AC_PINCTL_VREF_HIZ
)
2096 snd_hda_set_pin_ctl_cache(codec
, vref_pin
,
2097 PIN_IN
| (set_as_mic
? vref_val
: 0));
2100 val
= set_as_mic
? val
| PIN_IN
: PIN_HP
;
2101 set_pin_target(codec
, pin
, val
, true);
2103 spec
->automute_speaker
= !set_as_mic
;
2104 call_update_outputs(codec
);
2107 /* create a shared input with the headphone out */
2108 static int create_shared_input(struct hda_codec
*codec
)
2110 struct hda_gen_spec
*spec
= codec
->spec
;
2111 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2112 unsigned int defcfg
;
2115 /* only one internal input pin? */
2116 if (cfg
->num_inputs
!= 1)
2118 defcfg
= snd_hda_codec_get_pincfg(codec
, cfg
->inputs
[0].pin
);
2119 if (snd_hda_get_input_pin_attr(defcfg
) != INPUT_PIN_ATTR_INT
)
2122 if (cfg
->hp_outs
== 1 && cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
)
2123 nid
= cfg
->hp_pins
[0]; /* OK, we have a single HP-out */
2124 else if (cfg
->line_outs
== 1 && cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
2125 nid
= cfg
->line_out_pins
[0]; /* OK, we have a single line-out */
2127 return 0; /* both not available */
2129 if (!(snd_hda_query_pin_caps(codec
, nid
) & AC_PINCAP_IN
))
2130 return 0; /* no input */
2132 cfg
->inputs
[1].pin
= nid
;
2133 cfg
->inputs
[1].type
= AUTO_PIN_MIC
;
2134 cfg
->num_inputs
= 2;
2135 spec
->shared_mic_hp
= 1;
2136 snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid
);
2143 static int out_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2144 struct snd_ctl_elem_info
*uinfo
)
2146 static const char * const texts
[] = {
2147 "Line Out", "Headphone Out",
2149 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 2, texts
);
2152 static int out_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2153 struct snd_ctl_elem_value
*ucontrol
)
2155 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2156 hda_nid_t nid
= kcontrol
->private_value
;
2157 if (snd_hda_codec_get_pin_target(codec
, nid
) == PIN_HP
)
2158 ucontrol
->value
.enumerated
.item
[0] = 1;
2160 ucontrol
->value
.enumerated
.item
[0] = 0;
2164 static int out_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2165 struct snd_ctl_elem_value
*ucontrol
)
2167 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2168 hda_nid_t nid
= kcontrol
->private_value
;
2171 val
= ucontrol
->value
.enumerated
.item
[0] ? PIN_HP
: PIN_OUT
;
2172 if (snd_hda_codec_get_pin_target(codec
, nid
) == val
)
2174 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2178 static const struct snd_kcontrol_new out_jack_mode_enum
= {
2179 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2180 .info
= out_jack_mode_info
,
2181 .get
= out_jack_mode_get
,
2182 .put
= out_jack_mode_put
,
2185 static bool find_kctl_name(struct hda_codec
*codec
, const char *name
, int idx
)
2187 struct hda_gen_spec
*spec
= codec
->spec
;
2190 for (i
= 0; i
< spec
->kctls
.used
; i
++) {
2191 struct snd_kcontrol_new
*kctl
= snd_array_elem(&spec
->kctls
, i
);
2192 if (!strcmp(kctl
->name
, name
) && kctl
->index
== idx
)
2198 static void get_jack_mode_name(struct hda_codec
*codec
, hda_nid_t pin
,
2199 char *name
, size_t name_len
)
2201 struct hda_gen_spec
*spec
= codec
->spec
;
2204 snd_hda_get_pin_label(codec
, pin
, &spec
->autocfg
, name
, name_len
, &idx
);
2205 strlcat(name
, " Jack Mode", name_len
);
2207 for (; find_kctl_name(codec
, name
, idx
); idx
++)
2211 static int create_out_jack_modes(struct hda_codec
*codec
, int num_pins
,
2214 struct hda_gen_spec
*spec
= codec
->spec
;
2217 for (i
= 0; i
< num_pins
; i
++) {
2218 hda_nid_t pin
= pins
[i
];
2219 unsigned int pincap
= snd_hda_query_pin_caps(codec
, pin
);
2220 if ((pincap
& AC_PINCAP_OUT
) && (pincap
& AC_PINCAP_HP_DRV
)) {
2221 struct snd_kcontrol_new
*knew
;
2223 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2224 knew
= snd_hda_gen_add_kctl(spec
, name
,
2225 &out_jack_mode_enum
);
2228 knew
->private_value
= pin
;
2239 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2242 static const char * const vref_texts
[NUM_VREFS
] = {
2243 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2244 "", "Mic 80pc Bias", "Mic 100pc Bias"
2247 static unsigned int get_vref_caps(struct hda_codec
*codec
, hda_nid_t pin
)
2249 unsigned int pincap
;
2251 pincap
= snd_hda_query_pin_caps(codec
, pin
);
2252 pincap
= (pincap
& AC_PINCAP_VREF
) >> AC_PINCAP_VREF_SHIFT
;
2253 /* filter out unusual vrefs */
2254 pincap
&= ~(AC_PINCAP_VREF_GRD
| AC_PINCAP_VREF_100
);
2258 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2259 static int get_vref_idx(unsigned int vref_caps
, unsigned int item_idx
)
2261 unsigned int i
, n
= 0;
2263 for (i
= 0; i
< NUM_VREFS
; i
++) {
2264 if (vref_caps
& (1 << i
)) {
2273 /* convert back from the vref ctl index to the enum item index */
2274 static int cvt_from_vref_idx(unsigned int vref_caps
, unsigned int idx
)
2276 unsigned int i
, n
= 0;
2278 for (i
= 0; i
< NUM_VREFS
; i
++) {
2281 if (vref_caps
& (1 << i
))
2287 static int in_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2288 struct snd_ctl_elem_info
*uinfo
)
2290 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2291 hda_nid_t nid
= kcontrol
->private_value
;
2292 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2294 snd_hda_enum_helper_info(kcontrol
, uinfo
, hweight32(vref_caps
),
2296 /* set the right text */
2297 strcpy(uinfo
->value
.enumerated
.name
,
2298 vref_texts
[get_vref_idx(vref_caps
, uinfo
->value
.enumerated
.item
)]);
2302 static int in_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2303 struct snd_ctl_elem_value
*ucontrol
)
2305 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2306 hda_nid_t nid
= kcontrol
->private_value
;
2307 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2310 idx
= snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_VREFEN
;
2311 ucontrol
->value
.enumerated
.item
[0] = cvt_from_vref_idx(vref_caps
, idx
);
2315 static int in_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2316 struct snd_ctl_elem_value
*ucontrol
)
2318 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2319 hda_nid_t nid
= kcontrol
->private_value
;
2320 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2321 unsigned int val
, idx
;
2323 val
= snd_hda_codec_get_pin_target(codec
, nid
);
2324 idx
= cvt_from_vref_idx(vref_caps
, val
& AC_PINCTL_VREFEN
);
2325 if (idx
== ucontrol
->value
.enumerated
.item
[0])
2328 val
&= ~AC_PINCTL_VREFEN
;
2329 val
|= get_vref_idx(vref_caps
, ucontrol
->value
.enumerated
.item
[0]);
2330 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2334 static const struct snd_kcontrol_new in_jack_mode_enum
= {
2335 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2336 .info
= in_jack_mode_info
,
2337 .get
= in_jack_mode_get
,
2338 .put
= in_jack_mode_put
,
2341 static int create_in_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
)
2343 struct hda_gen_spec
*spec
= codec
->spec
;
2344 unsigned int defcfg
;
2345 struct snd_kcontrol_new
*knew
;
2348 /* no jack mode for fixed pins */
2349 defcfg
= snd_hda_codec_get_pincfg(codec
, pin
);
2350 if (snd_hda_get_input_pin_attr(defcfg
) == INPUT_PIN_ATTR_INT
)
2353 /* no multiple vref caps? */
2354 if (hweight32(get_vref_caps(codec
, pin
)) <= 1)
2357 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2358 knew
= snd_hda_gen_add_kctl(spec
, name
, &in_jack_mode_enum
);
2361 knew
->private_value
= pin
;
2371 /* add the powersave loopback-list entry */
2372 static void add_loopback_list(struct hda_gen_spec
*spec
, hda_nid_t mix
, int idx
)
2374 struct hda_amp_list
*list
;
2376 if (spec
->num_loopbacks
>= ARRAY_SIZE(spec
->loopback_list
) - 1)
2378 list
= spec
->loopback_list
+ spec
->num_loopbacks
;
2380 list
->dir
= HDA_INPUT
;
2382 spec
->num_loopbacks
++;
2383 spec
->loopback
.amplist
= spec
->loopback_list
;
2386 #define add_loopback_list(spec, mix, idx) /* NOP */
2389 /* create input playback/capture controls for the given pin */
2390 static int new_analog_input(struct hda_codec
*codec
, int input_idx
,
2391 hda_nid_t pin
, const char *ctlname
, int ctlidx
,
2394 struct hda_gen_spec
*spec
= codec
->spec
;
2395 struct nid_path
*path
;
2399 if (!nid_has_volume(codec
, mix_nid
, HDA_INPUT
) &&
2400 !nid_has_mute(codec
, mix_nid
, HDA_INPUT
))
2401 return 0; /* no need for analog loopback */
2403 path
= snd_hda_add_new_path(codec
, pin
, mix_nid
, 0);
2406 print_nid_path("loopback", path
);
2407 spec
->loopback_paths
[input_idx
] = snd_hda_get_path_idx(codec
, path
);
2409 idx
= path
->idx
[path
->depth
- 1];
2410 if (nid_has_volume(codec
, mix_nid
, HDA_INPUT
)) {
2411 val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
2412 err
= __add_pb_vol_ctrl(spec
, HDA_CTL_WIDGET_VOL
, ctlname
, ctlidx
, val
);
2415 path
->ctls
[NID_PATH_VOL_CTL
] = val
;
2418 if (nid_has_mute(codec
, mix_nid
, HDA_INPUT
)) {
2419 val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
2420 err
= __add_pb_sw_ctrl(spec
, HDA_CTL_WIDGET_MUTE
, ctlname
, ctlidx
, val
);
2423 path
->ctls
[NID_PATH_MUTE_CTL
] = val
;
2426 path
->active
= true;
2427 add_loopback_list(spec
, mix_nid
, idx
);
2431 static int is_input_pin(struct hda_codec
*codec
, hda_nid_t nid
)
2433 unsigned int pincap
= snd_hda_query_pin_caps(codec
, nid
);
2434 return (pincap
& AC_PINCAP_IN
) != 0;
2437 /* Parse the codec tree and retrieve ADCs */
2438 static int fill_adc_nids(struct hda_codec
*codec
)
2440 struct hda_gen_spec
*spec
= codec
->spec
;
2442 hda_nid_t
*adc_nids
= spec
->adc_nids
;
2443 int max_nums
= ARRAY_SIZE(spec
->adc_nids
);
2446 nid
= codec
->start_nid
;
2447 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
2448 unsigned int caps
= get_wcaps(codec
, nid
);
2449 int type
= get_wcaps_type(caps
);
2451 if (type
!= AC_WID_AUD_IN
|| (caps
& AC_WCAP_DIGITAL
))
2453 adc_nids
[nums
] = nid
;
2454 if (++nums
>= max_nums
)
2457 spec
->num_adc_nids
= nums
;
2459 /* copy the detected ADCs to all_adcs[] */
2460 spec
->num_all_adcs
= nums
;
2461 memcpy(spec
->all_adcs
, spec
->adc_nids
, nums
* sizeof(hda_nid_t
));
2466 /* filter out invalid adc_nids that don't give all active input pins;
2467 * if needed, check whether dynamic ADC-switching is available
2469 static int check_dyn_adc_switch(struct hda_codec
*codec
)
2471 struct hda_gen_spec
*spec
= codec
->spec
;
2472 struct hda_input_mux
*imux
= &spec
->input_mux
;
2473 unsigned int ok_bits
;
2479 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
2480 for (i
= 0; i
< imux
->num_items
; i
++) {
2481 if (!spec
->input_paths
[i
][n
])
2484 if (i
>= imux
->num_items
) {
2485 ok_bits
|= (1 << n
);
2491 if (spec
->shared_mic_hp
) {
2492 spec
->shared_mic_hp
= 0;
2493 imux
->num_items
= 1;
2497 /* check whether ADC-switch is possible */
2498 for (i
= 0; i
< imux
->num_items
; i
++) {
2499 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
2500 if (spec
->input_paths
[i
][n
]) {
2501 spec
->dyn_adc_idx
[i
] = n
;
2507 snd_printdd("hda-codec: enabling ADC switching\n");
2508 spec
->dyn_adc_switch
= 1;
2509 } else if (nums
!= spec
->num_adc_nids
) {
2510 /* shrink the invalid adcs and input paths */
2512 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
2513 if (!(ok_bits
& (1 << n
)))
2516 spec
->adc_nids
[nums
] = spec
->adc_nids
[n
];
2517 for (i
= 0; i
< imux
->num_items
; i
++) {
2518 invalidate_nid_path(codec
,
2519 spec
->input_paths
[i
][nums
]);
2520 spec
->input_paths
[i
][nums
] =
2521 spec
->input_paths
[i
][n
];
2526 spec
->num_adc_nids
= nums
;
2529 if (imux
->num_items
== 1 || spec
->shared_mic_hp
) {
2530 snd_printdd("hda-codec: reducing to a single ADC\n");
2531 spec
->num_adc_nids
= 1; /* reduce to a single ADC */
2534 /* single index for individual volumes ctls */
2535 if (!spec
->dyn_adc_switch
&& spec
->multi_cap_vol
)
2536 spec
->num_adc_nids
= 1;
2541 /* parse capture source paths from the given pin and create imux items */
2542 static int parse_capture_source(struct hda_codec
*codec
, hda_nid_t pin
,
2543 int cfg_idx
, int num_adcs
,
2544 const char *label
, int anchor
)
2546 struct hda_gen_spec
*spec
= codec
->spec
;
2547 struct hda_input_mux
*imux
= &spec
->input_mux
;
2548 int imux_idx
= imux
->num_items
;
2549 bool imux_added
= false;
2552 for (c
= 0; c
< num_adcs
; c
++) {
2553 struct nid_path
*path
;
2554 hda_nid_t adc
= spec
->adc_nids
[c
];
2556 if (!is_reachable_path(codec
, pin
, adc
))
2558 path
= snd_hda_add_new_path(codec
, pin
, adc
, anchor
);
2561 print_nid_path("input", path
);
2562 spec
->input_paths
[imux_idx
][c
] =
2563 snd_hda_get_path_idx(codec
, path
);
2566 spec
->imux_pins
[imux
->num_items
] = pin
;
2567 snd_hda_add_imux_item(imux
, label
, cfg_idx
, NULL
);
2576 * create playback/capture controls for input pins
2579 /* fill the label for each input at first */
2580 static int fill_input_pin_labels(struct hda_codec
*codec
)
2582 struct hda_gen_spec
*spec
= codec
->spec
;
2583 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2586 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
2587 hda_nid_t pin
= cfg
->inputs
[i
].pin
;
2591 if (!is_input_pin(codec
, pin
))
2594 label
= hda_get_autocfg_input_label(codec
, cfg
, i
);
2596 for (j
= i
- 1; j
>= 0; j
--) {
2597 if (spec
->input_labels
[j
] &&
2598 !strcmp(spec
->input_labels
[j
], label
)) {
2599 idx
= spec
->input_label_idxs
[j
] + 1;
2604 spec
->input_labels
[i
] = label
;
2605 spec
->input_label_idxs
[i
] = idx
;
2611 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
2613 static int create_input_ctls(struct hda_codec
*codec
)
2615 struct hda_gen_spec
*spec
= codec
->spec
;
2616 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2617 hda_nid_t mixer
= spec
->mixer_nid
;
2622 num_adcs
= fill_adc_nids(codec
);
2626 err
= fill_input_pin_labels(codec
);
2630 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
2633 pin
= cfg
->inputs
[i
].pin
;
2634 if (!is_input_pin(codec
, pin
))
2638 if (cfg
->inputs
[i
].type
== AUTO_PIN_MIC
)
2639 val
|= snd_hda_get_default_vref(codec
, pin
);
2640 set_pin_target(codec
, pin
, val
, false);
2643 if (is_reachable_path(codec
, pin
, mixer
)) {
2644 err
= new_analog_input(codec
, i
, pin
,
2645 spec
->input_labels
[i
],
2646 spec
->input_label_idxs
[i
],
2653 err
= parse_capture_source(codec
, pin
, i
, num_adcs
,
2654 spec
->input_labels
[i
], -mixer
);
2658 if (spec
->add_in_jack_modes
) {
2659 err
= create_in_jack_mode(codec
, pin
);
2665 if (mixer
&& spec
->add_stereo_mix_input
) {
2666 err
= parse_capture_source(codec
, mixer
, CFG_IDX_MIX
, num_adcs
,
2680 /* get the input path specified by the given adc and imux indices */
2681 static struct nid_path
*get_input_path(struct hda_codec
*codec
, int adc_idx
, int imux_idx
)
2683 struct hda_gen_spec
*spec
= codec
->spec
;
2684 if (imux_idx
< 0 || imux_idx
>= HDA_MAX_NUM_INPUTS
) {
2688 if (spec
->dyn_adc_switch
)
2689 adc_idx
= spec
->dyn_adc_idx
[imux_idx
];
2690 if (adc_idx
< 0 || adc_idx
>= AUTO_CFG_MAX_INS
) {
2694 return snd_hda_get_path_from_idx(codec
, spec
->input_paths
[imux_idx
][adc_idx
]);
2697 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
2700 static int mux_enum_info(struct snd_kcontrol
*kcontrol
,
2701 struct snd_ctl_elem_info
*uinfo
)
2703 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2704 struct hda_gen_spec
*spec
= codec
->spec
;
2705 return snd_hda_input_mux_info(&spec
->input_mux
, uinfo
);
2708 static int mux_enum_get(struct snd_kcontrol
*kcontrol
,
2709 struct snd_ctl_elem_value
*ucontrol
)
2711 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2712 struct hda_gen_spec
*spec
= codec
->spec
;
2713 /* the ctls are created at once with multiple counts */
2714 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
2716 ucontrol
->value
.enumerated
.item
[0] = spec
->cur_mux
[adc_idx
];
2720 static int mux_enum_put(struct snd_kcontrol
*kcontrol
,
2721 struct snd_ctl_elem_value
*ucontrol
)
2723 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2724 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
2725 return mux_select(codec
, adc_idx
,
2726 ucontrol
->value
.enumerated
.item
[0]);
2729 static const struct snd_kcontrol_new cap_src_temp
= {
2730 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2731 .name
= "Input Source",
2732 .info
= mux_enum_info
,
2733 .get
= mux_enum_get
,
2734 .put
= mux_enum_put
,
2738 * capture volume and capture switch ctls
2741 typedef int (*put_call_t
)(struct snd_kcontrol
*kcontrol
,
2742 struct snd_ctl_elem_value
*ucontrol
);
2744 /* call the given amp update function for all amps in the imux list at once */
2745 static int cap_put_caller(struct snd_kcontrol
*kcontrol
,
2746 struct snd_ctl_elem_value
*ucontrol
,
2747 put_call_t func
, int type
)
2749 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2750 struct hda_gen_spec
*spec
= codec
->spec
;
2751 const struct hda_input_mux
*imux
;
2752 struct nid_path
*path
;
2753 int i
, adc_idx
, err
= 0;
2755 imux
= &spec
->input_mux
;
2756 adc_idx
= kcontrol
->id
.index
;
2757 mutex_lock(&codec
->control_mutex
);
2758 /* we use the cache-only update at first since multiple input paths
2759 * may shared the same amp; by updating only caches, the redundant
2760 * writes to hardware can be reduced.
2762 codec
->cached_write
= 1;
2763 for (i
= 0; i
< imux
->num_items
; i
++) {
2764 path
= get_input_path(codec
, adc_idx
, i
);
2765 if (!path
|| !path
->ctls
[type
])
2767 kcontrol
->private_value
= path
->ctls
[type
];
2768 err
= func(kcontrol
, ucontrol
);
2773 codec
->cached_write
= 0;
2774 mutex_unlock(&codec
->control_mutex
);
2775 snd_hda_codec_flush_amp_cache(codec
); /* flush the updates */
2776 if (err
>= 0 && spec
->cap_sync_hook
)
2777 spec
->cap_sync_hook(codec
, ucontrol
);
2781 /* capture volume ctl callbacks */
2782 #define cap_vol_info snd_hda_mixer_amp_volume_info
2783 #define cap_vol_get snd_hda_mixer_amp_volume_get
2784 #define cap_vol_tlv snd_hda_mixer_amp_tlv
2786 static int cap_vol_put(struct snd_kcontrol
*kcontrol
,
2787 struct snd_ctl_elem_value
*ucontrol
)
2789 return cap_put_caller(kcontrol
, ucontrol
,
2790 snd_hda_mixer_amp_volume_put
,
2794 static const struct snd_kcontrol_new cap_vol_temp
= {
2795 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2796 .name
= "Capture Volume",
2797 .access
= (SNDRV_CTL_ELEM_ACCESS_READWRITE
|
2798 SNDRV_CTL_ELEM_ACCESS_TLV_READ
|
2799 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK
),
2800 .info
= cap_vol_info
,
2803 .tlv
= { .c
= cap_vol_tlv
},
2806 /* capture switch ctl callbacks */
2807 #define cap_sw_info snd_ctl_boolean_stereo_info
2808 #define cap_sw_get snd_hda_mixer_amp_switch_get
2810 static int cap_sw_put(struct snd_kcontrol
*kcontrol
,
2811 struct snd_ctl_elem_value
*ucontrol
)
2813 return cap_put_caller(kcontrol
, ucontrol
,
2814 snd_hda_mixer_amp_switch_put
,
2818 static const struct snd_kcontrol_new cap_sw_temp
= {
2819 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2820 .name
= "Capture Switch",
2821 .info
= cap_sw_info
,
2826 static int parse_capvol_in_path(struct hda_codec
*codec
, struct nid_path
*path
)
2831 path
->ctls
[NID_PATH_VOL_CTL
] = path
->ctls
[NID_PATH_MUTE_CTL
] = 0;
2832 for (depth
= 0; depth
< 3; depth
++) {
2833 if (depth
>= path
->depth
)
2835 i
= path
->depth
- depth
- 1;
2836 nid
= path
->path
[i
];
2837 if (!path
->ctls
[NID_PATH_VOL_CTL
]) {
2838 if (nid_has_volume(codec
, nid
, HDA_OUTPUT
))
2839 path
->ctls
[NID_PATH_VOL_CTL
] =
2840 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
2841 else if (nid_has_volume(codec
, nid
, HDA_INPUT
)) {
2842 int idx
= path
->idx
[i
];
2843 if (!depth
&& codec
->single_adc_amp
)
2845 path
->ctls
[NID_PATH_VOL_CTL
] =
2846 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
2849 if (!path
->ctls
[NID_PATH_MUTE_CTL
]) {
2850 if (nid_has_mute(codec
, nid
, HDA_OUTPUT
))
2851 path
->ctls
[NID_PATH_MUTE_CTL
] =
2852 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
2853 else if (nid_has_mute(codec
, nid
, HDA_INPUT
)) {
2854 int idx
= path
->idx
[i
];
2855 if (!depth
&& codec
->single_adc_amp
)
2857 path
->ctls
[NID_PATH_MUTE_CTL
] =
2858 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
2865 static bool is_inv_dmic_pin(struct hda_codec
*codec
, hda_nid_t nid
)
2867 struct hda_gen_spec
*spec
= codec
->spec
;
2868 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2872 if (!spec
->inv_dmic_split
)
2874 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
2875 if (cfg
->inputs
[i
].pin
!= nid
)
2877 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
2879 val
= snd_hda_codec_get_pincfg(codec
, nid
);
2880 return snd_hda_get_input_pin_attr(val
) == INPUT_PIN_ATTR_INT
;
2885 /* capture switch put callback for a single control with hook call */
2886 static int cap_single_sw_put(struct snd_kcontrol
*kcontrol
,
2887 struct snd_ctl_elem_value
*ucontrol
)
2889 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2890 struct hda_gen_spec
*spec
= codec
->spec
;
2893 ret
= snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
2897 if (spec
->cap_sync_hook
)
2898 spec
->cap_sync_hook(codec
, ucontrol
);
2903 static int add_single_cap_ctl(struct hda_codec
*codec
, const char *label
,
2904 int idx
, bool is_switch
, unsigned int ctl
,
2907 struct hda_gen_spec
*spec
= codec
->spec
;
2909 int type
= is_switch
? HDA_CTL_WIDGET_MUTE
: HDA_CTL_WIDGET_VOL
;
2910 const char *sfx
= is_switch
? "Switch" : "Volume";
2911 unsigned int chs
= inv_dmic
? 1 : 3;
2912 struct snd_kcontrol_new
*knew
;
2918 snprintf(tmpname
, sizeof(tmpname
),
2919 "%s Capture %s", label
, sfx
);
2921 snprintf(tmpname
, sizeof(tmpname
),
2923 knew
= add_control(spec
, type
, tmpname
, idx
,
2924 amp_val_replace_channels(ctl
, chs
));
2928 knew
->put
= cap_single_sw_put
;
2932 /* Make independent right kcontrol */
2934 snprintf(tmpname
, sizeof(tmpname
),
2935 "Inverted %s Capture %s", label
, sfx
);
2937 snprintf(tmpname
, sizeof(tmpname
),
2938 "Inverted Capture %s", sfx
);
2939 knew
= add_control(spec
, type
, tmpname
, idx
,
2940 amp_val_replace_channels(ctl
, 2));
2944 knew
->put
= cap_single_sw_put
;
2948 /* create single (and simple) capture volume and switch controls */
2949 static int create_single_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
2950 unsigned int vol_ctl
, unsigned int sw_ctl
,
2954 err
= add_single_cap_ctl(codec
, NULL
, idx
, false, vol_ctl
, inv_dmic
);
2957 err
= add_single_cap_ctl(codec
, NULL
, idx
, true, sw_ctl
, inv_dmic
);
2963 /* create bound capture volume and switch controls */
2964 static int create_bind_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
2965 unsigned int vol_ctl
, unsigned int sw_ctl
)
2967 struct hda_gen_spec
*spec
= codec
->spec
;
2968 struct snd_kcontrol_new
*knew
;
2971 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_vol_temp
);
2975 knew
->private_value
= vol_ctl
;
2976 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
2979 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_sw_temp
);
2983 knew
->private_value
= sw_ctl
;
2984 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
2989 /* return the vol ctl when used first in the imux list */
2990 static unsigned int get_first_cap_ctl(struct hda_codec
*codec
, int idx
, int type
)
2992 struct nid_path
*path
;
2996 path
= get_input_path(codec
, 0, idx
);
2999 ctl
= path
->ctls
[type
];
3002 for (i
= 0; i
< idx
- 1; i
++) {
3003 path
= get_input_path(codec
, 0, i
);
3004 if (path
&& path
->ctls
[type
] == ctl
)
3010 /* create individual capture volume and switch controls per input */
3011 static int create_multi_cap_vol_ctl(struct hda_codec
*codec
)
3013 struct hda_gen_spec
*spec
= codec
->spec
;
3014 struct hda_input_mux
*imux
= &spec
->input_mux
;
3017 for (i
= 0; i
< imux
->num_items
; i
++) {
3021 idx
= imux
->items
[i
].index
;
3022 if (idx
>= spec
->autocfg
.num_inputs
)
3024 inv_dmic
= is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]);
3026 for (type
= 0; type
< 2; type
++) {
3027 err
= add_single_cap_ctl(codec
,
3028 spec
->input_labels
[idx
],
3029 spec
->input_label_idxs
[idx
],
3031 get_first_cap_ctl(codec
, i
, type
),
3040 static int create_capture_mixers(struct hda_codec
*codec
)
3042 struct hda_gen_spec
*spec
= codec
->spec
;
3043 struct hda_input_mux
*imux
= &spec
->input_mux
;
3044 int i
, n
, nums
, err
;
3046 if (spec
->dyn_adc_switch
)
3049 nums
= spec
->num_adc_nids
;
3051 if (!spec
->auto_mic
&& imux
->num_items
> 1) {
3052 struct snd_kcontrol_new
*knew
;
3054 name
= nums
> 1 ? "Input Source" : "Capture Source";
3055 knew
= snd_hda_gen_add_kctl(spec
, name
, &cap_src_temp
);
3061 for (n
= 0; n
< nums
; n
++) {
3063 bool multi_cap_vol
= spec
->multi_cap_vol
;
3064 bool inv_dmic
= false;
3068 for (i
= 0; i
< imux
->num_items
; i
++) {
3069 struct nid_path
*path
;
3070 path
= get_input_path(codec
, n
, i
);
3073 parse_capvol_in_path(codec
, path
);
3075 vol
= path
->ctls
[NID_PATH_VOL_CTL
];
3076 else if (vol
!= path
->ctls
[NID_PATH_VOL_CTL
]) {
3078 if (!same_amp_caps(codec
, vol
,
3079 path
->ctls
[NID_PATH_VOL_CTL
], HDA_INPUT
))
3080 multi_cap_vol
= true;
3083 sw
= path
->ctls
[NID_PATH_MUTE_CTL
];
3084 else if (sw
!= path
->ctls
[NID_PATH_MUTE_CTL
]) {
3086 if (!same_amp_caps(codec
, sw
,
3087 path
->ctls
[NID_PATH_MUTE_CTL
], HDA_INPUT
))
3088 multi_cap_vol
= true;
3090 if (is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]))
3095 err
= create_single_cap_vol_ctl(codec
, n
, vol
, sw
,
3097 else if (!multi_cap_vol
)
3098 err
= create_bind_cap_vol_ctl(codec
, n
, vol
, sw
);
3100 err
= create_multi_cap_vol_ctl(codec
);
3109 * add mic boosts if needed
3112 /* check whether the given amp is feasible as a boost volume */
3113 static bool check_boost_vol(struct hda_codec
*codec
, hda_nid_t nid
,
3118 if (!nid_has_volume(codec
, nid
, dir
) ||
3119 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_VOL_CTL
) ||
3120 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_BOOST_CTL
))
3123 step
= (query_amp_caps(codec
, nid
, dir
) & AC_AMPCAP_STEP_SIZE
)
3124 >> AC_AMPCAP_STEP_SIZE_SHIFT
;
3130 /* look for a boost amp in a widget close to the pin */
3131 static unsigned int look_for_boost_amp(struct hda_codec
*codec
,
3132 struct nid_path
*path
)
3134 unsigned int val
= 0;
3138 for (depth
= 0; depth
< 3; depth
++) {
3139 if (depth
>= path
->depth
- 1)
3141 nid
= path
->path
[depth
];
3142 if (depth
&& check_boost_vol(codec
, nid
, HDA_OUTPUT
, 0)) {
3143 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3145 } else if (check_boost_vol(codec
, nid
, HDA_INPUT
,
3146 path
->idx
[depth
])) {
3147 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, path
->idx
[depth
],
3156 static int parse_mic_boost(struct hda_codec
*codec
)
3158 struct hda_gen_spec
*spec
= codec
->spec
;
3159 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3160 struct hda_input_mux
*imux
= &spec
->input_mux
;
3163 if (!spec
->num_adc_nids
)
3166 for (i
= 0; i
< imux
->num_items
; i
++) {
3167 struct nid_path
*path
;
3170 char boost_label
[44];
3172 idx
= imux
->items
[i
].index
;
3173 if (idx
>= imux
->num_items
)
3176 /* check only line-in and mic pins */
3177 if (cfg
->inputs
[idx
].type
> AUTO_PIN_LINE_IN
)
3180 path
= get_input_path(codec
, 0, i
);
3184 val
= look_for_boost_amp(codec
, path
);
3188 /* create a boost control */
3189 snprintf(boost_label
, sizeof(boost_label
),
3190 "%s Boost Volume", spec
->input_labels
[idx
]);
3191 if (!add_control(spec
, HDA_CTL_WIDGET_VOL
, boost_label
,
3192 spec
->input_label_idxs
[idx
], val
))
3195 path
->ctls
[NID_PATH_BOOST_CTL
] = val
;
3201 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3203 static void parse_digital(struct hda_codec
*codec
)
3205 struct hda_gen_spec
*spec
= codec
->spec
;
3206 struct nid_path
*path
;
3208 hda_nid_t dig_nid
, pin
;
3210 /* support multiple SPDIFs; the secondary is set up as a slave */
3212 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++) {
3213 pin
= spec
->autocfg
.dig_out_pins
[i
];
3214 dig_nid
= look_for_dac(codec
, pin
, true);
3217 path
= snd_hda_add_new_path(codec
, dig_nid
, pin
, 0);
3220 print_nid_path("digout", path
);
3221 path
->active
= true;
3222 spec
->digout_paths
[i
] = snd_hda_get_path_idx(codec
, path
);
3223 set_pin_target(codec
, pin
, PIN_OUT
, false);
3225 spec
->multiout
.dig_out_nid
= dig_nid
;
3226 spec
->dig_out_type
= spec
->autocfg
.dig_out_type
[0];
3228 spec
->multiout
.slave_dig_outs
= spec
->slave_dig_outs
;
3229 if (nums
>= ARRAY_SIZE(spec
->slave_dig_outs
) - 1)
3231 spec
->slave_dig_outs
[nums
- 1] = dig_nid
;
3236 if (spec
->autocfg
.dig_in_pin
) {
3237 pin
= spec
->autocfg
.dig_in_pin
;
3238 dig_nid
= codec
->start_nid
;
3239 for (i
= 0; i
< codec
->num_nodes
; i
++, dig_nid
++) {
3240 unsigned int wcaps
= get_wcaps(codec
, dig_nid
);
3241 if (get_wcaps_type(wcaps
) != AC_WID_AUD_IN
)
3243 if (!(wcaps
& AC_WCAP_DIGITAL
))
3245 path
= snd_hda_add_new_path(codec
, pin
, dig_nid
, 0);
3247 print_nid_path("digin", path
);
3248 path
->active
= true;
3249 spec
->dig_in_nid
= dig_nid
;
3250 spec
->digin_path
= snd_hda_get_path_idx(codec
, path
);
3251 set_pin_target(codec
, pin
, PIN_IN
, false);
3260 * input MUX handling
3263 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
);
3265 /* select the given imux item; either unmute exclusively or select the route */
3266 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
3269 struct hda_gen_spec
*spec
= codec
->spec
;
3270 const struct hda_input_mux
*imux
;
3271 struct nid_path
*path
;
3273 imux
= &spec
->input_mux
;
3274 if (!imux
->num_items
)
3277 if (idx
>= imux
->num_items
)
3278 idx
= imux
->num_items
- 1;
3279 if (spec
->cur_mux
[adc_idx
] == idx
)
3282 path
= get_input_path(codec
, adc_idx
, spec
->cur_mux
[adc_idx
]);
3286 snd_hda_activate_path(codec
, path
, false, false);
3288 spec
->cur_mux
[adc_idx
] = idx
;
3290 if (spec
->shared_mic_hp
)
3291 update_shared_mic_hp(codec
, spec
->cur_mux
[adc_idx
]);
3293 if (spec
->dyn_adc_switch
)
3294 dyn_adc_pcm_resetup(codec
, idx
);
3296 path
= get_input_path(codec
, adc_idx
, idx
);
3301 snd_hda_activate_path(codec
, path
, true, false);
3302 if (spec
->cap_sync_hook
)
3303 spec
->cap_sync_hook(codec
, NULL
);
3309 * Jack detections for HP auto-mute and mic-switch
3312 /* check each pin in the given array; returns true if any of them is plugged */
3313 static bool detect_jacks(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
)
3317 for (i
= 0; i
< num_pins
; i
++) {
3318 hda_nid_t nid
= pins
[i
];
3321 /* don't detect pins retasked as inputs */
3322 if (snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_IN_EN
)
3324 present
|= snd_hda_jack_detect(codec
, nid
);
3329 /* standard HP/line-out auto-mute helper */
3330 static void do_automute(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
,
3333 struct hda_gen_spec
*spec
= codec
->spec
;
3336 for (i
= 0; i
< num_pins
; i
++) {
3337 hda_nid_t nid
= pins
[i
];
3341 /* don't reset VREF value in case it's controlling
3342 * the amp (see alc861_fixup_asus_amp_vref_0f())
3344 if (spec
->keep_vref_in_automute
)
3345 val
= snd_hda_codec_get_pin_target(codec
, nid
) & ~PIN_HP
;
3349 val
|= snd_hda_codec_get_pin_target(codec
, nid
);
3350 /* here we call update_pin_ctl() so that the pinctl is changed
3351 * without changing the pinctl target value;
3352 * the original target value will be still referred at the
3353 * init / resume again
3355 update_pin_ctl(codec
, nid
, val
);
3356 set_pin_eapd(codec
, nid
, !mute
);
3360 /* Toggle outputs muting */
3361 void snd_hda_gen_update_outputs(struct hda_codec
*codec
)
3363 struct hda_gen_spec
*spec
= codec
->spec
;
3366 /* Control HP pins/amps depending on master_mute state;
3367 * in general, HP pins/amps control should be enabled in all cases,
3368 * but currently set only for master_mute, just to be safe
3370 if (!spec
->shared_mic_hp
) /* don't change HP-pin when shared with mic */
3371 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.hp_pins
),
3372 spec
->autocfg
.hp_pins
, spec
->master_mute
);
3374 if (!spec
->automute_speaker
)
3377 on
= spec
->hp_jack_present
| spec
->line_jack_present
;
3378 on
|= spec
->master_mute
;
3379 spec
->speaker_muted
= on
;
3380 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.speaker_pins
),
3381 spec
->autocfg
.speaker_pins
, on
);
3383 /* toggle line-out mutes if needed, too */
3384 /* if LO is a copy of either HP or Speaker, don't need to handle it */
3385 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0] ||
3386 spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.speaker_pins
[0])
3388 if (!spec
->automute_lo
)
3391 on
= spec
->hp_jack_present
;
3392 on
|= spec
->master_mute
;
3393 spec
->line_out_muted
= on
;
3394 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
3395 spec
->autocfg
.line_out_pins
, on
);
3397 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs
);
3399 static void call_update_outputs(struct hda_codec
*codec
)
3401 struct hda_gen_spec
*spec
= codec
->spec
;
3402 if (spec
->automute_hook
)
3403 spec
->automute_hook(codec
);
3405 snd_hda_gen_update_outputs(codec
);
3408 /* standard HP-automute helper */
3409 void snd_hda_gen_hp_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3411 struct hda_gen_spec
*spec
= codec
->spec
;
3413 spec
->hp_jack_present
=
3414 detect_jacks(codec
, ARRAY_SIZE(spec
->autocfg
.hp_pins
),
3415 spec
->autocfg
.hp_pins
);
3416 if (!spec
->detect_hp
|| (!spec
->automute_speaker
&& !spec
->automute_lo
))
3418 call_update_outputs(codec
);
3420 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute
);
3422 /* standard line-out-automute helper */
3423 void snd_hda_gen_line_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3425 struct hda_gen_spec
*spec
= codec
->spec
;
3427 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
)
3429 /* check LO jack only when it's different from HP */
3430 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0])
3433 spec
->line_jack_present
=
3434 detect_jacks(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
3435 spec
->autocfg
.line_out_pins
);
3436 if (!spec
->automute_speaker
|| !spec
->detect_lo
)
3438 call_update_outputs(codec
);
3440 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute
);
3442 /* standard mic auto-switch helper */
3443 void snd_hda_gen_mic_autoswitch(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3445 struct hda_gen_spec
*spec
= codec
->spec
;
3448 if (!spec
->auto_mic
)
3451 for (i
= spec
->am_num_entries
- 1; i
> 0; i
--) {
3452 hda_nid_t pin
= spec
->am_entry
[i
].pin
;
3453 /* don't detect pins retasked as outputs */
3454 if (snd_hda_codec_get_pin_target(codec
, pin
) & AC_PINCTL_OUT_EN
)
3456 if (snd_hda_jack_detect(codec
, pin
)) {
3457 mux_select(codec
, 0, spec
->am_entry
[i
].idx
);
3461 mux_select(codec
, 0, spec
->am_entry
[0].idx
);
3463 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch
);
3465 /* update jack retasking */
3466 static void update_automute_all(struct hda_codec
*codec
)
3468 struct hda_gen_spec
*spec
= codec
->spec
;
3470 if (spec
->hp_automute_hook
)
3471 spec
->hp_automute_hook(codec
, NULL
);
3473 snd_hda_gen_hp_automute(codec
, NULL
);
3474 if (spec
->line_automute_hook
)
3475 spec
->line_automute_hook(codec
, NULL
);
3477 snd_hda_gen_line_automute(codec
, NULL
);
3478 if (spec
->mic_autoswitch_hook
)
3479 spec
->mic_autoswitch_hook(codec
, NULL
);
3481 snd_hda_gen_mic_autoswitch(codec
, NULL
);
3485 * Auto-Mute mode mixer enum support
3487 static int automute_mode_info(struct snd_kcontrol
*kcontrol
,
3488 struct snd_ctl_elem_info
*uinfo
)
3490 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3491 struct hda_gen_spec
*spec
= codec
->spec
;
3492 static const char * const texts3
[] = {
3493 "Disabled", "Speaker Only", "Line Out+Speaker"
3496 if (spec
->automute_speaker_possible
&& spec
->automute_lo_possible
)
3497 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 3, texts3
);
3498 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
3501 static int automute_mode_get(struct snd_kcontrol
*kcontrol
,
3502 struct snd_ctl_elem_value
*ucontrol
)
3504 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3505 struct hda_gen_spec
*spec
= codec
->spec
;
3506 unsigned int val
= 0;
3507 if (spec
->automute_speaker
)
3509 if (spec
->automute_lo
)
3512 ucontrol
->value
.enumerated
.item
[0] = val
;
3516 static int automute_mode_put(struct snd_kcontrol
*kcontrol
,
3517 struct snd_ctl_elem_value
*ucontrol
)
3519 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3520 struct hda_gen_spec
*spec
= codec
->spec
;
3522 switch (ucontrol
->value
.enumerated
.item
[0]) {
3524 if (!spec
->automute_speaker
&& !spec
->automute_lo
)
3526 spec
->automute_speaker
= 0;
3527 spec
->automute_lo
= 0;
3530 if (spec
->automute_speaker_possible
) {
3531 if (!spec
->automute_lo
&& spec
->automute_speaker
)
3533 spec
->automute_speaker
= 1;
3534 spec
->automute_lo
= 0;
3535 } else if (spec
->automute_lo_possible
) {
3536 if (spec
->automute_lo
)
3538 spec
->automute_lo
= 1;
3543 if (!spec
->automute_lo_possible
|| !spec
->automute_speaker_possible
)
3545 if (spec
->automute_speaker
&& spec
->automute_lo
)
3547 spec
->automute_speaker
= 1;
3548 spec
->automute_lo
= 1;
3553 call_update_outputs(codec
);
3557 static const struct snd_kcontrol_new automute_mode_enum
= {
3558 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3559 .name
= "Auto-Mute Mode",
3560 .info
= automute_mode_info
,
3561 .get
= automute_mode_get
,
3562 .put
= automute_mode_put
,
3565 static int add_automute_mode_enum(struct hda_codec
*codec
)
3567 struct hda_gen_spec
*spec
= codec
->spec
;
3569 if (!snd_hda_gen_add_kctl(spec
, NULL
, &automute_mode_enum
))
3575 * Check the availability of HP/line-out auto-mute;
3576 * Set up appropriately if really supported
3578 static int check_auto_mute_availability(struct hda_codec
*codec
)
3580 struct hda_gen_spec
*spec
= codec
->spec
;
3581 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3585 if (spec
->suppress_auto_mute
)
3588 if (cfg
->hp_pins
[0])
3590 if (cfg
->line_out_pins
[0])
3592 if (cfg
->speaker_pins
[0])
3594 if (present
< 2) /* need two different output types */
3597 if (!cfg
->speaker_pins
[0] &&
3598 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
3599 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
3600 sizeof(cfg
->speaker_pins
));
3601 cfg
->speaker_outs
= cfg
->line_outs
;
3604 if (!cfg
->hp_pins
[0] &&
3605 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
3606 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
3607 sizeof(cfg
->hp_pins
));
3608 cfg
->hp_outs
= cfg
->line_outs
;
3611 for (i
= 0; i
< cfg
->hp_outs
; i
++) {
3612 hda_nid_t nid
= cfg
->hp_pins
[i
];
3613 if (!is_jack_detectable(codec
, nid
))
3615 snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
3617 snd_hda_jack_detect_enable_callback(codec
, nid
, HDA_GEN_HP_EVENT
,
3618 spec
->hp_automute_hook
?
3619 spec
->hp_automute_hook
:
3620 snd_hda_gen_hp_automute
);
3621 spec
->detect_hp
= 1;
3624 if (cfg
->line_out_type
== AUTO_PIN_LINE_OUT
&& cfg
->line_outs
) {
3625 if (cfg
->speaker_outs
)
3626 for (i
= 0; i
< cfg
->line_outs
; i
++) {
3627 hda_nid_t nid
= cfg
->line_out_pins
[i
];
3628 if (!is_jack_detectable(codec
, nid
))
3630 snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid
);
3631 snd_hda_jack_detect_enable_callback(codec
, nid
,
3632 HDA_GEN_FRONT_EVENT
,
3633 spec
->line_automute_hook
?
3634 spec
->line_automute_hook
:
3635 snd_hda_gen_line_automute
);
3636 spec
->detect_lo
= 1;
3638 spec
->automute_lo_possible
= spec
->detect_hp
;
3641 spec
->automute_speaker_possible
= cfg
->speaker_outs
&&
3642 (spec
->detect_hp
|| spec
->detect_lo
);
3644 spec
->automute_lo
= spec
->automute_lo_possible
;
3645 spec
->automute_speaker
= spec
->automute_speaker_possible
;
3647 if (spec
->automute_speaker_possible
|| spec
->automute_lo_possible
) {
3648 /* create a control for automute mode */
3649 err
= add_automute_mode_enum(codec
);
3656 /* check whether all auto-mic pins are valid; setup indices if OK */
3657 static bool auto_mic_check_imux(struct hda_codec
*codec
)
3659 struct hda_gen_spec
*spec
= codec
->spec
;
3660 const struct hda_input_mux
*imux
;
3663 imux
= &spec
->input_mux
;
3664 for (i
= 0; i
< spec
->am_num_entries
; i
++) {
3665 spec
->am_entry
[i
].idx
=
3666 find_idx_in_nid_list(spec
->am_entry
[i
].pin
,
3667 spec
->imux_pins
, imux
->num_items
);
3668 if (spec
->am_entry
[i
].idx
< 0)
3669 return false; /* no corresponding imux */
3672 /* we don't need the jack detection for the first pin */
3673 for (i
= 1; i
< spec
->am_num_entries
; i
++)
3674 snd_hda_jack_detect_enable_callback(codec
,
3675 spec
->am_entry
[i
].pin
,
3677 spec
->mic_autoswitch_hook
?
3678 spec
->mic_autoswitch_hook
:
3679 snd_hda_gen_mic_autoswitch
);
3683 static int compare_attr(const void *ap
, const void *bp
)
3685 const struct automic_entry
*a
= ap
;
3686 const struct automic_entry
*b
= bp
;
3687 return (int)(a
->attr
- b
->attr
);
3691 * Check the availability of auto-mic switch;
3692 * Set up if really supported
3694 static int check_auto_mic_availability(struct hda_codec
*codec
)
3696 struct hda_gen_spec
*spec
= codec
->spec
;
3697 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3701 if (spec
->suppress_auto_mic
)
3706 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3707 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
3709 attr
= snd_hda_codec_get_pincfg(codec
, nid
);
3710 attr
= snd_hda_get_input_pin_attr(attr
);
3711 if (types
& (1 << attr
))
3712 return 0; /* already occupied */
3714 case INPUT_PIN_ATTR_INT
:
3715 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
3716 return 0; /* invalid type */
3718 case INPUT_PIN_ATTR_UNUSED
:
3719 return 0; /* invalid entry */
3721 if (cfg
->inputs
[i
].type
> AUTO_PIN_LINE_IN
)
3722 return 0; /* invalid type */
3723 if (!spec
->line_in_auto_switch
&&
3724 cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
3725 return 0; /* only mic is allowed */
3726 if (!is_jack_detectable(codec
, nid
))
3727 return 0; /* no unsol support */
3730 if (num_pins
>= MAX_AUTO_MIC_PINS
)
3732 types
|= (1 << attr
);
3733 spec
->am_entry
[num_pins
].pin
= nid
;
3734 spec
->am_entry
[num_pins
].attr
= attr
;
3741 spec
->am_num_entries
= num_pins
;
3742 /* sort the am_entry in the order of attr so that the pin with a
3743 * higher attr will be selected when the jack is plugged.
3745 sort(spec
->am_entry
, num_pins
, sizeof(spec
->am_entry
[0]),
3746 compare_attr
, NULL
);
3748 if (!auto_mic_check_imux(codec
))
3752 spec
->num_adc_nids
= 1;
3753 spec
->cur_mux
[0] = spec
->am_entry
[0].idx
;
3754 snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
3755 spec
->am_entry
[0].pin
,
3756 spec
->am_entry
[1].pin
,
3757 spec
->am_entry
[2].pin
);
3764 * Parse the given BIOS configuration and set up the hda_gen_spec
3766 * return 1 if successful, 0 if the proper config is not found,
3767 * or a negative error code
3769 int snd_hda_gen_parse_auto_config(struct hda_codec
*codec
,
3770 struct auto_pin_cfg
*cfg
)
3772 struct hda_gen_spec
*spec
= codec
->spec
;
3775 parse_user_hints(codec
);
3777 if (cfg
!= &spec
->autocfg
) {
3778 spec
->autocfg
= *cfg
;
3779 cfg
= &spec
->autocfg
;
3782 fill_all_dac_nids(codec
);
3784 if (!cfg
->line_outs
) {
3785 if (cfg
->dig_outs
|| cfg
->dig_in_pin
) {
3786 spec
->multiout
.max_channels
= 2;
3787 spec
->no_analog
= 1;
3790 return 0; /* can't find valid BIOS pin config */
3793 if (!spec
->no_primary_hp
&&
3794 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
3795 cfg
->line_outs
<= cfg
->hp_outs
) {
3796 /* use HP as primary out */
3797 cfg
->speaker_outs
= cfg
->line_outs
;
3798 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
3799 sizeof(cfg
->speaker_pins
));
3800 cfg
->line_outs
= cfg
->hp_outs
;
3801 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
, sizeof(cfg
->hp_pins
));
3803 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
3804 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
3807 err
= parse_output_paths(codec
);
3810 err
= create_multi_channel_mode(codec
);
3813 err
= create_multi_out_ctls(codec
, cfg
);
3816 err
= create_hp_out_ctls(codec
);
3819 err
= create_speaker_out_ctls(codec
);
3822 err
= create_indep_hp_ctls(codec
);
3825 err
= create_loopback_mixing_ctl(codec
);
3828 err
= create_shared_input(codec
);
3831 err
= create_input_ctls(codec
);
3835 spec
->const_channel_count
= spec
->ext_channel_count
;
3836 /* check the multiple speaker and headphone pins */
3837 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
3838 spec
->const_channel_count
= max(spec
->const_channel_count
,
3839 cfg
->speaker_outs
* 2);
3840 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
3841 spec
->const_channel_count
= max(spec
->const_channel_count
,
3843 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
3844 spec
->const_channel_count
);
3846 err
= check_auto_mute_availability(codec
);
3850 err
= check_dyn_adc_switch(codec
);
3854 if (!spec
->shared_mic_hp
) {
3855 err
= check_auto_mic_availability(codec
);
3860 err
= create_capture_mixers(codec
);
3864 err
= parse_mic_boost(codec
);
3868 if (spec
->add_out_jack_modes
) {
3869 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
3870 err
= create_out_jack_modes(codec
, cfg
->line_outs
,
3871 cfg
->line_out_pins
);
3875 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
3876 err
= create_out_jack_modes(codec
, cfg
->hp_outs
,
3884 parse_digital(codec
);
3888 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config
);
3892 * Build control elements
3895 /* slave controls for virtual master */
3896 static const char * const slave_pfxs
[] = {
3897 "Front", "Surround", "Center", "LFE", "Side",
3898 "Headphone", "Speaker", "Mono", "Line Out",
3899 "CLFE", "Bass Speaker", "PCM",
3900 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
3901 "Headphone Front", "Headphone Surround", "Headphone CLFE",
3906 int snd_hda_gen_build_controls(struct hda_codec
*codec
)
3908 struct hda_gen_spec
*spec
= codec
->spec
;
3911 if (spec
->kctls
.used
) {
3912 err
= snd_hda_add_new_ctls(codec
, spec
->kctls
.list
);
3917 if (spec
->multiout
.dig_out_nid
) {
3918 err
= snd_hda_create_dig_out_ctls(codec
,
3919 spec
->multiout
.dig_out_nid
,
3920 spec
->multiout
.dig_out_nid
,
3921 spec
->pcm_rec
[1].pcm_type
);
3924 if (!spec
->no_analog
) {
3925 err
= snd_hda_create_spdif_share_sw(codec
,
3929 spec
->multiout
.share_spdif
= 1;
3932 if (spec
->dig_in_nid
) {
3933 err
= snd_hda_create_spdif_in_ctls(codec
, spec
->dig_in_nid
);
3938 /* if we have no master control, let's create it */
3939 if (!spec
->no_analog
&&
3940 !snd_hda_find_mixer_ctl(codec
, "Master Playback Volume")) {
3941 err
= snd_hda_add_vmaster(codec
, "Master Playback Volume",
3942 spec
->vmaster_tlv
, slave_pfxs
,
3947 if (!spec
->no_analog
&&
3948 !snd_hda_find_mixer_ctl(codec
, "Master Playback Switch")) {
3949 err
= __snd_hda_add_vmaster(codec
, "Master Playback Switch",
3952 true, &spec
->vmaster_mute
.sw_kctl
);
3955 if (spec
->vmaster_mute
.hook
)
3956 snd_hda_add_vmaster_hook(codec
, &spec
->vmaster_mute
,
3957 spec
->vmaster_mute_enum
);
3960 free_kctls(spec
); /* no longer needed */
3962 if (spec
->shared_mic_hp
) {
3964 int nid
= spec
->autocfg
.inputs
[1].pin
;
3965 err
= snd_hda_jack_add_kctl(codec
, nid
, "Headphone Mic", 0);
3968 err
= snd_hda_jack_detect_enable(codec
, nid
, 0);
3973 err
= snd_hda_jack_add_kctls(codec
, &spec
->autocfg
);
3979 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls
);
3986 static void call_pcm_playback_hook(struct hda_pcm_stream
*hinfo
,
3987 struct hda_codec
*codec
,
3988 struct snd_pcm_substream
*substream
,
3991 struct hda_gen_spec
*spec
= codec
->spec
;
3992 if (spec
->pcm_playback_hook
)
3993 spec
->pcm_playback_hook(hinfo
, codec
, substream
, action
);
3996 static void call_pcm_capture_hook(struct hda_pcm_stream
*hinfo
,
3997 struct hda_codec
*codec
,
3998 struct snd_pcm_substream
*substream
,
4001 struct hda_gen_spec
*spec
= codec
->spec
;
4002 if (spec
->pcm_capture_hook
)
4003 spec
->pcm_capture_hook(hinfo
, codec
, substream
, action
);
4007 * Analog playback callbacks
4009 static int playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4010 struct hda_codec
*codec
,
4011 struct snd_pcm_substream
*substream
)
4013 struct hda_gen_spec
*spec
= codec
->spec
;
4016 mutex_lock(&spec
->pcm_mutex
);
4017 err
= snd_hda_multi_out_analog_open(codec
,
4018 &spec
->multiout
, substream
,
4021 spec
->active_streams
|= 1 << STREAM_MULTI_OUT
;
4022 call_pcm_playback_hook(hinfo
, codec
, substream
,
4023 HDA_GEN_PCM_ACT_OPEN
);
4025 mutex_unlock(&spec
->pcm_mutex
);
4029 static int playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4030 struct hda_codec
*codec
,
4031 unsigned int stream_tag
,
4032 unsigned int format
,
4033 struct snd_pcm_substream
*substream
)
4035 struct hda_gen_spec
*spec
= codec
->spec
;
4038 err
= snd_hda_multi_out_analog_prepare(codec
, &spec
->multiout
,
4039 stream_tag
, format
, substream
);
4041 call_pcm_playback_hook(hinfo
, codec
, substream
,
4042 HDA_GEN_PCM_ACT_PREPARE
);
4046 static int playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4047 struct hda_codec
*codec
,
4048 struct snd_pcm_substream
*substream
)
4050 struct hda_gen_spec
*spec
= codec
->spec
;
4053 err
= snd_hda_multi_out_analog_cleanup(codec
, &spec
->multiout
);
4055 call_pcm_playback_hook(hinfo
, codec
, substream
,
4056 HDA_GEN_PCM_ACT_CLEANUP
);
4060 static int playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4061 struct hda_codec
*codec
,
4062 struct snd_pcm_substream
*substream
)
4064 struct hda_gen_spec
*spec
= codec
->spec
;
4065 mutex_lock(&spec
->pcm_mutex
);
4066 spec
->active_streams
&= ~(1 << STREAM_MULTI_OUT
);
4067 call_pcm_playback_hook(hinfo
, codec
, substream
,
4068 HDA_GEN_PCM_ACT_CLOSE
);
4069 mutex_unlock(&spec
->pcm_mutex
);
4073 static int capture_pcm_open(struct hda_pcm_stream
*hinfo
,
4074 struct hda_codec
*codec
,
4075 struct snd_pcm_substream
*substream
)
4077 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_OPEN
);
4081 static int capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4082 struct hda_codec
*codec
,
4083 unsigned int stream_tag
,
4084 unsigned int format
,
4085 struct snd_pcm_substream
*substream
)
4087 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
4088 call_pcm_capture_hook(hinfo
, codec
, substream
,
4089 HDA_GEN_PCM_ACT_PREPARE
);
4093 static int capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4094 struct hda_codec
*codec
,
4095 struct snd_pcm_substream
*substream
)
4097 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
4098 call_pcm_capture_hook(hinfo
, codec
, substream
,
4099 HDA_GEN_PCM_ACT_CLEANUP
);
4103 static int capture_pcm_close(struct hda_pcm_stream
*hinfo
,
4104 struct hda_codec
*codec
,
4105 struct snd_pcm_substream
*substream
)
4107 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_CLOSE
);
4111 static int alt_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4112 struct hda_codec
*codec
,
4113 struct snd_pcm_substream
*substream
)
4115 struct hda_gen_spec
*spec
= codec
->spec
;
4118 mutex_lock(&spec
->pcm_mutex
);
4119 if (!spec
->indep_hp_enabled
)
4122 spec
->active_streams
|= 1 << STREAM_INDEP_HP
;
4123 call_pcm_playback_hook(hinfo
, codec
, substream
,
4124 HDA_GEN_PCM_ACT_OPEN
);
4125 mutex_unlock(&spec
->pcm_mutex
);
4129 static int alt_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4130 struct hda_codec
*codec
,
4131 struct snd_pcm_substream
*substream
)
4133 struct hda_gen_spec
*spec
= codec
->spec
;
4134 mutex_lock(&spec
->pcm_mutex
);
4135 spec
->active_streams
&= ~(1 << STREAM_INDEP_HP
);
4136 call_pcm_playback_hook(hinfo
, codec
, substream
,
4137 HDA_GEN_PCM_ACT_CLOSE
);
4138 mutex_unlock(&spec
->pcm_mutex
);
4142 static int alt_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4143 struct hda_codec
*codec
,
4144 unsigned int stream_tag
,
4145 unsigned int format
,
4146 struct snd_pcm_substream
*substream
)
4148 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
4149 call_pcm_playback_hook(hinfo
, codec
, substream
,
4150 HDA_GEN_PCM_ACT_PREPARE
);
4154 static int alt_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4155 struct hda_codec
*codec
,
4156 struct snd_pcm_substream
*substream
)
4158 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
4159 call_pcm_playback_hook(hinfo
, codec
, substream
,
4160 HDA_GEN_PCM_ACT_CLEANUP
);
4167 static int dig_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4168 struct hda_codec
*codec
,
4169 struct snd_pcm_substream
*substream
)
4171 struct hda_gen_spec
*spec
= codec
->spec
;
4172 return snd_hda_multi_out_dig_open(codec
, &spec
->multiout
);
4175 static int dig_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4176 struct hda_codec
*codec
,
4177 unsigned int stream_tag
,
4178 unsigned int format
,
4179 struct snd_pcm_substream
*substream
)
4181 struct hda_gen_spec
*spec
= codec
->spec
;
4182 return snd_hda_multi_out_dig_prepare(codec
, &spec
->multiout
,
4183 stream_tag
, format
, substream
);
4186 static int dig_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4187 struct hda_codec
*codec
,
4188 struct snd_pcm_substream
*substream
)
4190 struct hda_gen_spec
*spec
= codec
->spec
;
4191 return snd_hda_multi_out_dig_cleanup(codec
, &spec
->multiout
);
4194 static int dig_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4195 struct hda_codec
*codec
,
4196 struct snd_pcm_substream
*substream
)
4198 struct hda_gen_spec
*spec
= codec
->spec
;
4199 return snd_hda_multi_out_dig_close(codec
, &spec
->multiout
);
4205 #define alt_capture_pcm_open capture_pcm_open
4206 #define alt_capture_pcm_close capture_pcm_close
4208 static int alt_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4209 struct hda_codec
*codec
,
4210 unsigned int stream_tag
,
4211 unsigned int format
,
4212 struct snd_pcm_substream
*substream
)
4214 struct hda_gen_spec
*spec
= codec
->spec
;
4216 snd_hda_codec_setup_stream(codec
, spec
->adc_nids
[substream
->number
+ 1],
4217 stream_tag
, 0, format
);
4218 call_pcm_capture_hook(hinfo
, codec
, substream
,
4219 HDA_GEN_PCM_ACT_PREPARE
);
4223 static int alt_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4224 struct hda_codec
*codec
,
4225 struct snd_pcm_substream
*substream
)
4227 struct hda_gen_spec
*spec
= codec
->spec
;
4229 snd_hda_codec_cleanup_stream(codec
,
4230 spec
->adc_nids
[substream
->number
+ 1]);
4231 call_pcm_capture_hook(hinfo
, codec
, substream
,
4232 HDA_GEN_PCM_ACT_CLEANUP
);
4238 static const struct hda_pcm_stream pcm_analog_playback
= {
4242 /* NID is set in build_pcms */
4244 .open
= playback_pcm_open
,
4245 .close
= playback_pcm_close
,
4246 .prepare
= playback_pcm_prepare
,
4247 .cleanup
= playback_pcm_cleanup
4251 static const struct hda_pcm_stream pcm_analog_capture
= {
4255 /* NID is set in build_pcms */
4257 .open
= capture_pcm_open
,
4258 .close
= capture_pcm_close
,
4259 .prepare
= capture_pcm_prepare
,
4260 .cleanup
= capture_pcm_cleanup
4264 static const struct hda_pcm_stream pcm_analog_alt_playback
= {
4268 /* NID is set in build_pcms */
4270 .open
= alt_playback_pcm_open
,
4271 .close
= alt_playback_pcm_close
,
4272 .prepare
= alt_playback_pcm_prepare
,
4273 .cleanup
= alt_playback_pcm_cleanup
4277 static const struct hda_pcm_stream pcm_analog_alt_capture
= {
4278 .substreams
= 2, /* can be overridden */
4281 /* NID is set in build_pcms */
4283 .open
= alt_capture_pcm_open
,
4284 .close
= alt_capture_pcm_close
,
4285 .prepare
= alt_capture_pcm_prepare
,
4286 .cleanup
= alt_capture_pcm_cleanup
4290 static const struct hda_pcm_stream pcm_digital_playback
= {
4294 /* NID is set in build_pcms */
4296 .open
= dig_playback_pcm_open
,
4297 .close
= dig_playback_pcm_close
,
4298 .prepare
= dig_playback_pcm_prepare
,
4299 .cleanup
= dig_playback_pcm_cleanup
4303 static const struct hda_pcm_stream pcm_digital_capture
= {
4307 /* NID is set in build_pcms */
4310 /* Used by build_pcms to flag that a PCM has no playback stream */
4311 static const struct hda_pcm_stream pcm_null_stream
= {
4318 * dynamic changing ADC PCM streams
4320 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
)
4322 struct hda_gen_spec
*spec
= codec
->spec
;
4323 hda_nid_t new_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[cur
]];
4325 if (spec
->cur_adc
&& spec
->cur_adc
!= new_adc
) {
4326 /* stream is running, let's swap the current ADC */
4327 __snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
, 1);
4328 spec
->cur_adc
= new_adc
;
4329 snd_hda_codec_setup_stream(codec
, new_adc
,
4330 spec
->cur_adc_stream_tag
, 0,
4331 spec
->cur_adc_format
);
4337 /* analog capture with dynamic dual-adc changes */
4338 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4339 struct hda_codec
*codec
,
4340 unsigned int stream_tag
,
4341 unsigned int format
,
4342 struct snd_pcm_substream
*substream
)
4344 struct hda_gen_spec
*spec
= codec
->spec
;
4345 spec
->cur_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[spec
->cur_mux
[0]]];
4346 spec
->cur_adc_stream_tag
= stream_tag
;
4347 spec
->cur_adc_format
= format
;
4348 snd_hda_codec_setup_stream(codec
, spec
->cur_adc
, stream_tag
, 0, format
);
4352 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4353 struct hda_codec
*codec
,
4354 struct snd_pcm_substream
*substream
)
4356 struct hda_gen_spec
*spec
= codec
->spec
;
4357 snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
);
4362 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture
= {
4366 .nid
= 0, /* fill later */
4368 .prepare
= dyn_adc_capture_pcm_prepare
,
4369 .cleanup
= dyn_adc_capture_pcm_cleanup
4373 static void fill_pcm_stream_name(char *str
, size_t len
, const char *sfx
,
4374 const char *chip_name
)
4380 strlcpy(str
, chip_name
, len
);
4382 /* drop non-alnum chars after a space */
4383 for (p
= strchr(str
, ' '); p
; p
= strchr(p
+ 1, ' ')) {
4384 if (!isalnum(p
[1])) {
4389 strlcat(str
, sfx
, len
);
4392 /* build PCM streams based on the parsed results */
4393 int snd_hda_gen_build_pcms(struct hda_codec
*codec
)
4395 struct hda_gen_spec
*spec
= codec
->spec
;
4396 struct hda_pcm
*info
= spec
->pcm_rec
;
4397 const struct hda_pcm_stream
*p
;
4398 bool have_multi_adcs
;
4400 codec
->num_pcms
= 1;
4401 codec
->pcm_info
= info
;
4403 if (spec
->no_analog
)
4406 fill_pcm_stream_name(spec
->stream_name_analog
,
4407 sizeof(spec
->stream_name_analog
),
4408 " Analog", codec
->chip_name
);
4409 info
->name
= spec
->stream_name_analog
;
4411 if (spec
->multiout
.num_dacs
> 0) {
4412 p
= spec
->stream_analog_playback
;
4414 p
= &pcm_analog_playback
;
4415 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
4416 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= spec
->multiout
.dac_nids
[0];
4417 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].channels_max
=
4418 spec
->multiout
.max_channels
;
4419 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
4420 spec
->autocfg
.line_outs
== 2)
4421 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].chmap
=
4424 if (spec
->num_adc_nids
) {
4425 p
= spec
->stream_analog_capture
;
4427 if (spec
->dyn_adc_switch
)
4428 p
= &dyn_adc_pcm_analog_capture
;
4430 p
= &pcm_analog_capture
;
4432 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
4433 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= spec
->adc_nids
[0];
4437 /* SPDIF for stream index #1 */
4438 if (spec
->multiout
.dig_out_nid
|| spec
->dig_in_nid
) {
4439 fill_pcm_stream_name(spec
->stream_name_digital
,
4440 sizeof(spec
->stream_name_digital
),
4441 " Digital", codec
->chip_name
);
4442 codec
->num_pcms
= 2;
4443 codec
->slave_dig_outs
= spec
->multiout
.slave_dig_outs
;
4444 info
= spec
->pcm_rec
+ 1;
4445 info
->name
= spec
->stream_name_digital
;
4446 if (spec
->dig_out_type
)
4447 info
->pcm_type
= spec
->dig_out_type
;
4449 info
->pcm_type
= HDA_PCM_TYPE_SPDIF
;
4450 if (spec
->multiout
.dig_out_nid
) {
4451 p
= spec
->stream_digital_playback
;
4453 p
= &pcm_digital_playback
;
4454 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
4455 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= spec
->multiout
.dig_out_nid
;
4457 if (spec
->dig_in_nid
) {
4458 p
= spec
->stream_digital_capture
;
4460 p
= &pcm_digital_capture
;
4461 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
4462 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= spec
->dig_in_nid
;
4466 if (spec
->no_analog
)
4469 /* If the use of more than one ADC is requested for the current
4470 * model, configure a second analog capture-only PCM.
4472 have_multi_adcs
= (spec
->num_adc_nids
> 1) &&
4473 !spec
->dyn_adc_switch
&& !spec
->auto_mic
;
4474 /* Additional Analaog capture for index #2 */
4475 if (spec
->alt_dac_nid
|| have_multi_adcs
) {
4476 codec
->num_pcms
= 3;
4477 info
= spec
->pcm_rec
+ 2;
4478 info
->name
= spec
->stream_name_analog
;
4479 if (spec
->alt_dac_nid
) {
4480 p
= spec
->stream_analog_alt_playback
;
4482 p
= &pcm_analog_alt_playback
;
4483 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
4484 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
=
4487 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] =
4489 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= 0;
4491 if (have_multi_adcs
) {
4492 p
= spec
->stream_analog_alt_capture
;
4494 p
= &pcm_analog_alt_capture
;
4495 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
4496 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
=
4498 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
=
4499 spec
->num_adc_nids
- 1;
4501 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] =
4503 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= 0;
4509 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms
);
4513 * Standard auto-parser initializations
4516 /* configure the given path as a proper output */
4517 static void set_output_and_unmute(struct hda_codec
*codec
, int path_idx
)
4519 struct nid_path
*path
;
4522 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
4523 if (!path
|| !path
->depth
)
4525 pin
= path
->path
[path
->depth
- 1];
4526 restore_pin_ctl(codec
, pin
);
4527 snd_hda_activate_path(codec
, path
, path
->active
, true);
4528 set_pin_eapd(codec
, pin
, path
->active
);
4531 /* initialize primary output paths */
4532 static void init_multi_out(struct hda_codec
*codec
)
4534 struct hda_gen_spec
*spec
= codec
->spec
;
4537 for (i
= 0; i
< spec
->autocfg
.line_outs
; i
++)
4538 set_output_and_unmute(codec
, spec
->out_paths
[i
]);
4542 static void __init_extra_out(struct hda_codec
*codec
, int num_outs
, int *paths
)
4546 for (i
= 0; i
< num_outs
; i
++)
4547 set_output_and_unmute(codec
, paths
[i
]);
4550 /* initialize hp and speaker paths */
4551 static void init_extra_out(struct hda_codec
*codec
)
4553 struct hda_gen_spec
*spec
= codec
->spec
;
4555 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_HP_OUT
)
4556 __init_extra_out(codec
, spec
->autocfg
.hp_outs
, spec
->hp_paths
);
4557 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
4558 __init_extra_out(codec
, spec
->autocfg
.speaker_outs
,
4559 spec
->speaker_paths
);
4562 /* initialize multi-io paths */
4563 static void init_multi_io(struct hda_codec
*codec
)
4565 struct hda_gen_spec
*spec
= codec
->spec
;
4568 for (i
= 0; i
< spec
->multi_ios
; i
++) {
4569 hda_nid_t pin
= spec
->multi_io
[i
].pin
;
4570 struct nid_path
*path
;
4571 path
= get_multiio_path(codec
, i
);
4574 if (!spec
->multi_io
[i
].ctl_in
)
4575 spec
->multi_io
[i
].ctl_in
=
4576 snd_hda_codec_get_pin_target(codec
, pin
);
4577 snd_hda_activate_path(codec
, path
, path
->active
, true);
4581 /* set up input pins and loopback paths */
4582 static void init_analog_input(struct hda_codec
*codec
)
4584 struct hda_gen_spec
*spec
= codec
->spec
;
4585 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4588 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
4589 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
4590 if (is_input_pin(codec
, nid
))
4591 restore_pin_ctl(codec
, nid
);
4593 /* init loopback inputs */
4594 if (spec
->mixer_nid
) {
4595 struct nid_path
*path
;
4596 path
= snd_hda_get_path_from_idx(codec
, spec
->loopback_paths
[i
]);
4598 snd_hda_activate_path(codec
, path
,
4599 path
->active
, false);
4604 /* initialize ADC paths */
4605 static void init_input_src(struct hda_codec
*codec
)
4607 struct hda_gen_spec
*spec
= codec
->spec
;
4608 struct hda_input_mux
*imux
= &spec
->input_mux
;
4609 struct nid_path
*path
;
4612 if (spec
->dyn_adc_switch
)
4615 nums
= spec
->num_adc_nids
;
4617 for (c
= 0; c
< nums
; c
++) {
4618 for (i
= 0; i
< imux
->num_items
; i
++) {
4619 path
= get_input_path(codec
, c
, i
);
4621 bool active
= path
->active
;
4622 if (i
== spec
->cur_mux
[c
])
4624 snd_hda_activate_path(codec
, path
, active
, false);
4629 if (spec
->shared_mic_hp
)
4630 update_shared_mic_hp(codec
, spec
->cur_mux
[0]);
4632 if (spec
->cap_sync_hook
)
4633 spec
->cap_sync_hook(codec
, NULL
);
4636 /* set right pin controls for digital I/O */
4637 static void init_digital(struct hda_codec
*codec
)
4639 struct hda_gen_spec
*spec
= codec
->spec
;
4643 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++)
4644 set_output_and_unmute(codec
, spec
->digout_paths
[i
]);
4645 pin
= spec
->autocfg
.dig_in_pin
;
4647 struct nid_path
*path
;
4648 restore_pin_ctl(codec
, pin
);
4649 path
= snd_hda_get_path_from_idx(codec
, spec
->digin_path
);
4651 snd_hda_activate_path(codec
, path
, path
->active
, false);
4655 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
4656 * invalid unsol tags by some reason
4658 static void clear_unsol_on_unused_pins(struct hda_codec
*codec
)
4662 for (i
= 0; i
< codec
->init_pins
.used
; i
++) {
4663 struct hda_pincfg
*pin
= snd_array_elem(&codec
->init_pins
, i
);
4664 hda_nid_t nid
= pin
->nid
;
4665 if (is_jack_detectable(codec
, nid
) &&
4666 !snd_hda_jack_tbl_get(codec
, nid
))
4667 snd_hda_codec_update_cache(codec
, nid
, 0,
4668 AC_VERB_SET_UNSOLICITED_ENABLE
, 0);
4673 * initialize the generic spec;
4674 * this can be put as patch_ops.init function
4676 int snd_hda_gen_init(struct hda_codec
*codec
)
4678 struct hda_gen_spec
*spec
= codec
->spec
;
4680 if (spec
->init_hook
)
4681 spec
->init_hook(codec
);
4683 snd_hda_apply_verbs(codec
);
4685 codec
->cached_write
= 1;
4687 init_multi_out(codec
);
4688 init_extra_out(codec
);
4689 init_multi_io(codec
);
4690 init_analog_input(codec
);
4691 init_input_src(codec
);
4692 init_digital(codec
);
4694 clear_unsol_on_unused_pins(codec
);
4696 /* call init functions of standard auto-mute helpers */
4697 update_automute_all(codec
);
4699 snd_hda_codec_flush_amp_cache(codec
);
4700 snd_hda_codec_flush_cmd_cache(codec
);
4702 if (spec
->vmaster_mute
.sw_kctl
&& spec
->vmaster_mute
.hook
)
4703 snd_hda_sync_vmaster_hook(&spec
->vmaster_mute
);
4705 hda_call_check_power_status(codec
, 0x01);
4708 EXPORT_SYMBOL_HDA(snd_hda_gen_init
);
4711 * free the generic spec;
4712 * this can be put as patch_ops.free function
4714 void snd_hda_gen_free(struct hda_codec
*codec
)
4716 snd_hda_gen_spec_free(codec
->spec
);
4720 EXPORT_SYMBOL_HDA(snd_hda_gen_free
);
4724 * check the loopback power save state;
4725 * this can be put as patch_ops.check_power_status function
4727 int snd_hda_gen_check_power_status(struct hda_codec
*codec
, hda_nid_t nid
)
4729 struct hda_gen_spec
*spec
= codec
->spec
;
4730 return snd_hda_check_amp_list_power(codec
, &spec
->loopback
, nid
);
4732 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status
);
4737 * the generic codec support
4740 static const struct hda_codec_ops generic_patch_ops
= {
4741 .build_controls
= snd_hda_gen_build_controls
,
4742 .build_pcms
= snd_hda_gen_build_pcms
,
4743 .init
= snd_hda_gen_init
,
4744 .free
= snd_hda_gen_free
,
4745 .unsol_event
= snd_hda_jack_unsol_event
,
4747 .check_power_status
= snd_hda_gen_check_power_status
,
4751 int snd_hda_parse_generic_codec(struct hda_codec
*codec
)
4753 struct hda_gen_spec
*spec
;
4756 spec
= kzalloc(sizeof(*spec
), GFP_KERNEL
);
4759 snd_hda_gen_spec_init(spec
);
4762 err
= snd_hda_parse_pin_defcfg(codec
, &spec
->autocfg
, NULL
, 0);
4766 err
= snd_hda_gen_parse_auto_config(codec
, &spec
->autocfg
);
4770 codec
->patch_ops
= generic_patch_ops
;
4774 snd_hda_gen_free(codec
);
4777 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec
);