2 * Universal Interface for Intel High Definition Audio Codec
4 * Generic widget tree parser
6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
8 * This driver is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This driver is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/export.h>
26 #include <linux/sort.h>
27 #include <linux/delay.h>
28 #include <linux/ctype.h>
29 #include <linux/string.h>
30 #include <linux/bitops.h>
31 #include <linux/module.h>
32 #include <sound/core.h>
33 #include <sound/jack.h>
34 #include "hda_codec.h"
35 #include "hda_local.h"
36 #include "hda_auto_parser.h"
39 #include "hda_generic.h"
42 /* initialize hda_gen_spec struct */
43 int snd_hda_gen_spec_init(struct hda_gen_spec
*spec
)
45 snd_array_init(&spec
->kctls
, sizeof(struct snd_kcontrol_new
), 32);
46 snd_array_init(&spec
->paths
, sizeof(struct nid_path
), 8);
47 snd_array_init(&spec
->loopback_list
, sizeof(struct hda_amp_list
), 8);
48 mutex_init(&spec
->pcm_mutex
);
51 EXPORT_SYMBOL_GPL(snd_hda_gen_spec_init
);
53 struct snd_kcontrol_new
*
54 snd_hda_gen_add_kctl(struct hda_gen_spec
*spec
, const char *name
,
55 const struct snd_kcontrol_new
*temp
)
57 struct snd_kcontrol_new
*knew
= snd_array_new(&spec
->kctls
);
62 knew
->name
= kstrdup(name
, GFP_KERNEL
);
64 knew
->name
= kstrdup(knew
->name
, GFP_KERNEL
);
69 EXPORT_SYMBOL_GPL(snd_hda_gen_add_kctl
);
71 static void free_kctls(struct hda_gen_spec
*spec
)
73 if (spec
->kctls
.list
) {
74 struct snd_kcontrol_new
*kctl
= spec
->kctls
.list
;
76 for (i
= 0; i
< spec
->kctls
.used
; i
++)
79 snd_array_free(&spec
->kctls
);
82 static void snd_hda_gen_spec_free(struct hda_gen_spec
*spec
)
87 snd_array_free(&spec
->paths
);
88 snd_array_free(&spec
->loopback_list
);
94 static void parse_user_hints(struct hda_codec
*codec
)
96 struct hda_gen_spec
*spec
= codec
->spec
;
99 val
= snd_hda_get_bool_hint(codec
, "jack_detect");
101 codec
->no_jack_detect
= !val
;
102 val
= snd_hda_get_bool_hint(codec
, "inv_jack_detect");
104 codec
->inv_jack_detect
= !!val
;
105 val
= snd_hda_get_bool_hint(codec
, "trigger_sense");
107 codec
->no_trigger_sense
= !val
;
108 val
= snd_hda_get_bool_hint(codec
, "inv_eapd");
110 codec
->inv_eapd
= !!val
;
111 val
= snd_hda_get_bool_hint(codec
, "pcm_format_first");
113 codec
->pcm_format_first
= !!val
;
114 val
= snd_hda_get_bool_hint(codec
, "sticky_stream");
116 codec
->no_sticky_stream
= !val
;
117 val
= snd_hda_get_bool_hint(codec
, "spdif_status_reset");
119 codec
->spdif_status_reset
= !!val
;
120 val
= snd_hda_get_bool_hint(codec
, "pin_amp_workaround");
122 codec
->pin_amp_workaround
= !!val
;
123 val
= snd_hda_get_bool_hint(codec
, "single_adc_amp");
125 codec
->single_adc_amp
= !!val
;
127 val
= snd_hda_get_bool_hint(codec
, "auto_mute");
129 spec
->suppress_auto_mute
= !val
;
130 val
= snd_hda_get_bool_hint(codec
, "auto_mic");
132 spec
->suppress_auto_mic
= !val
;
133 val
= snd_hda_get_bool_hint(codec
, "line_in_auto_switch");
135 spec
->line_in_auto_switch
= !!val
;
136 val
= snd_hda_get_bool_hint(codec
, "auto_mute_via_amp");
138 spec
->auto_mute_via_amp
= !!val
;
139 val
= snd_hda_get_bool_hint(codec
, "need_dac_fix");
141 spec
->need_dac_fix
= !!val
;
142 val
= snd_hda_get_bool_hint(codec
, "primary_hp");
144 spec
->no_primary_hp
= !val
;
145 val
= snd_hda_get_bool_hint(codec
, "multi_io");
147 spec
->no_multi_io
= !val
;
148 val
= snd_hda_get_bool_hint(codec
, "multi_cap_vol");
150 spec
->multi_cap_vol
= !!val
;
151 val
= snd_hda_get_bool_hint(codec
, "inv_dmic_split");
153 spec
->inv_dmic_split
= !!val
;
154 val
= snd_hda_get_bool_hint(codec
, "indep_hp");
156 spec
->indep_hp
= !!val
;
157 val
= snd_hda_get_bool_hint(codec
, "add_stereo_mix_input");
159 spec
->add_stereo_mix_input
= !!val
;
160 /* the following two are just for compatibility */
161 val
= snd_hda_get_bool_hint(codec
, "add_out_jack_modes");
163 spec
->add_jack_modes
= !!val
;
164 val
= snd_hda_get_bool_hint(codec
, "add_in_jack_modes");
166 spec
->add_jack_modes
= !!val
;
167 val
= snd_hda_get_bool_hint(codec
, "add_jack_modes");
169 spec
->add_jack_modes
= !!val
;
170 val
= snd_hda_get_bool_hint(codec
, "power_down_unused");
172 spec
->power_down_unused
= !!val
;
173 val
= snd_hda_get_bool_hint(codec
, "add_hp_mic");
175 spec
->hp_mic
= !!val
;
176 val
= snd_hda_get_bool_hint(codec
, "hp_mic_detect");
178 spec
->suppress_hp_mic_detect
= !val
;
180 if (!snd_hda_get_int_hint(codec
, "mixer_nid", &val
))
181 spec
->mixer_nid
= val
;
185 * pin control value accesses
188 #define update_pin_ctl(codec, pin, val) \
189 snd_hda_codec_update_cache(codec, pin, 0, \
190 AC_VERB_SET_PIN_WIDGET_CONTROL, val)
192 /* restore the pinctl based on the cached value */
193 static inline void restore_pin_ctl(struct hda_codec
*codec
, hda_nid_t pin
)
195 update_pin_ctl(codec
, pin
, snd_hda_codec_get_pin_target(codec
, pin
));
198 /* set the pinctl target value and write it if requested */
199 static void set_pin_target(struct hda_codec
*codec
, hda_nid_t pin
,
200 unsigned int val
, bool do_write
)
204 val
= snd_hda_correct_pin_ctl(codec
, pin
, val
);
205 snd_hda_codec_set_pin_target(codec
, pin
, val
);
207 update_pin_ctl(codec
, pin
, val
);
210 /* set pinctl target values for all given pins */
211 static void set_pin_targets(struct hda_codec
*codec
, int num_pins
,
212 hda_nid_t
*pins
, unsigned int val
)
215 for (i
= 0; i
< num_pins
; i
++)
216 set_pin_target(codec
, pins
[i
], val
, false);
223 /* return the position of NID in the list, or -1 if not found */
224 static int find_idx_in_nid_list(hda_nid_t nid
, const hda_nid_t
*list
, int nums
)
227 for (i
= 0; i
< nums
; i
++)
233 /* return true if the given NID is contained in the path */
234 static bool is_nid_contained(struct nid_path
*path
, hda_nid_t nid
)
236 return find_idx_in_nid_list(nid
, path
->path
, path
->depth
) >= 0;
239 static struct nid_path
*get_nid_path(struct hda_codec
*codec
,
240 hda_nid_t from_nid
, hda_nid_t to_nid
,
243 struct hda_gen_spec
*spec
= codec
->spec
;
246 for (i
= 0; i
< spec
->paths
.used
; i
++) {
247 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
248 if (path
->depth
<= 0)
250 if ((!from_nid
|| path
->path
[0] == from_nid
) &&
251 (!to_nid
|| path
->path
[path
->depth
- 1] == to_nid
)) {
253 (anchor_nid
> 0 && is_nid_contained(path
, anchor_nid
)) ||
254 (anchor_nid
< 0 && !is_nid_contained(path
, anchor_nid
)))
261 /* get the path between the given NIDs;
262 * passing 0 to either @pin or @dac behaves as a wildcard
264 struct nid_path
*snd_hda_get_nid_path(struct hda_codec
*codec
,
265 hda_nid_t from_nid
, hda_nid_t to_nid
)
267 return get_nid_path(codec
, from_nid
, to_nid
, 0);
269 EXPORT_SYMBOL_GPL(snd_hda_get_nid_path
);
271 /* get the index number corresponding to the path instance;
272 * the index starts from 1, for easier checking the invalid value
274 int snd_hda_get_path_idx(struct hda_codec
*codec
, struct nid_path
*path
)
276 struct hda_gen_spec
*spec
= codec
->spec
;
277 struct nid_path
*array
= spec
->paths
.list
;
280 if (!spec
->paths
.used
)
283 if (idx
< 0 || idx
>= spec
->paths
.used
)
287 EXPORT_SYMBOL_GPL(snd_hda_get_path_idx
);
289 /* get the path instance corresponding to the given index number */
290 struct nid_path
*snd_hda_get_path_from_idx(struct hda_codec
*codec
, int idx
)
292 struct hda_gen_spec
*spec
= codec
->spec
;
294 if (idx
<= 0 || idx
> spec
->paths
.used
)
296 return snd_array_elem(&spec
->paths
, idx
- 1);
298 EXPORT_SYMBOL_GPL(snd_hda_get_path_from_idx
);
300 /* check whether the given DAC is already found in any existing paths */
301 static bool is_dac_already_used(struct hda_codec
*codec
, hda_nid_t nid
)
303 struct hda_gen_spec
*spec
= codec
->spec
;
306 for (i
= 0; i
< spec
->paths
.used
; i
++) {
307 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
308 if (path
->path
[0] == nid
)
314 /* check whether the given two widgets can be connected */
315 static bool is_reachable_path(struct hda_codec
*codec
,
316 hda_nid_t from_nid
, hda_nid_t to_nid
)
318 if (!from_nid
|| !to_nid
)
320 return snd_hda_get_conn_index(codec
, to_nid
, from_nid
, true) >= 0;
323 /* nid, dir and idx */
324 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19))
326 /* check whether the given ctl is already assigned in any path elements */
327 static bool is_ctl_used(struct hda_codec
*codec
, unsigned int val
, int type
)
329 struct hda_gen_spec
*spec
= codec
->spec
;
332 val
&= AMP_VAL_COMPARE_MASK
;
333 for (i
= 0; i
< spec
->paths
.used
; i
++) {
334 struct nid_path
*path
= snd_array_elem(&spec
->paths
, i
);
335 if ((path
->ctls
[type
] & AMP_VAL_COMPARE_MASK
) == val
)
341 /* check whether a control with the given (nid, dir, idx) was assigned */
342 static bool is_ctl_associated(struct hda_codec
*codec
, hda_nid_t nid
,
343 int dir
, int idx
, int type
)
345 unsigned int val
= HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, dir
);
346 return is_ctl_used(codec
, val
, type
);
349 static void print_nid_path(struct hda_codec
*codec
,
350 const char *pfx
, struct nid_path
*path
)
357 for (i
= 0; i
< path
->depth
; i
++) {
359 sprintf(tmp
, ":%02x", path
->path
[i
]);
360 strlcat(buf
, tmp
, sizeof(buf
));
362 codec_dbg(codec
, "%s path: depth=%d %s\n", pfx
, path
->depth
, buf
);
365 /* called recursively */
366 static bool __parse_nid_path(struct hda_codec
*codec
,
367 hda_nid_t from_nid
, hda_nid_t to_nid
,
368 int anchor_nid
, struct nid_path
*path
,
371 const hda_nid_t
*conn
;
374 if (to_nid
== anchor_nid
)
375 anchor_nid
= 0; /* anchor passed */
376 else if (to_nid
== (hda_nid_t
)(-anchor_nid
))
377 return false; /* hit the exclusive nid */
379 nums
= snd_hda_get_conn_list(codec
, to_nid
, &conn
);
380 for (i
= 0; i
< nums
; i
++) {
381 if (conn
[i
] != from_nid
) {
382 /* special case: when from_nid is 0,
383 * try to find an empty DAC
386 get_wcaps_type(get_wcaps(codec
, conn
[i
])) != AC_WID_AUD_OUT
||
387 is_dac_already_used(codec
, conn
[i
]))
390 /* anchor is not requested or already passed? */
394 if (depth
>= MAX_NID_PATH_DEPTH
)
396 for (i
= 0; i
< nums
; i
++) {
398 type
= get_wcaps_type(get_wcaps(codec
, conn
[i
]));
399 if (type
== AC_WID_AUD_OUT
|| type
== AC_WID_AUD_IN
||
402 if (__parse_nid_path(codec
, from_nid
, conn
[i
],
403 anchor_nid
, path
, depth
+ 1))
409 path
->path
[path
->depth
] = conn
[i
];
410 path
->idx
[path
->depth
+ 1] = i
;
411 if (nums
> 1 && get_wcaps_type(get_wcaps(codec
, to_nid
)) != AC_WID_AUD_MIX
)
412 path
->multi
[path
->depth
+ 1] = 1;
417 /* parse the widget path from the given nid to the target nid;
418 * when @from_nid is 0, try to find an empty DAC;
419 * when @anchor_nid is set to a positive value, only paths through the widget
420 * with the given value are evaluated.
421 * when @anchor_nid is set to a negative value, paths through the widget
422 * with the negative of given value are excluded, only other paths are chosen.
423 * when @anchor_nid is zero, no special handling about path selection.
425 bool snd_hda_parse_nid_path(struct hda_codec
*codec
, hda_nid_t from_nid
,
426 hda_nid_t to_nid
, int anchor_nid
,
427 struct nid_path
*path
)
429 if (__parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
, 1)) {
430 path
->path
[path
->depth
] = to_nid
;
436 EXPORT_SYMBOL_GPL(snd_hda_parse_nid_path
);
439 * parse the path between the given NIDs and add to the path list.
440 * if no valid path is found, return NULL
443 snd_hda_add_new_path(struct hda_codec
*codec
, hda_nid_t from_nid
,
444 hda_nid_t to_nid
, int anchor_nid
)
446 struct hda_gen_spec
*spec
= codec
->spec
;
447 struct nid_path
*path
;
449 if (from_nid
&& to_nid
&& !is_reachable_path(codec
, from_nid
, to_nid
))
452 /* check whether the path has been already added */
453 path
= get_nid_path(codec
, from_nid
, to_nid
, anchor_nid
);
457 path
= snd_array_new(&spec
->paths
);
460 memset(path
, 0, sizeof(*path
));
461 if (snd_hda_parse_nid_path(codec
, from_nid
, to_nid
, anchor_nid
, path
))
467 EXPORT_SYMBOL_GPL(snd_hda_add_new_path
);
469 /* clear the given path as invalid so that it won't be picked up later */
470 static void invalidate_nid_path(struct hda_codec
*codec
, int idx
)
472 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, idx
);
475 memset(path
, 0, sizeof(*path
));
478 /* return a DAC if paired to the given pin by codec driver */
479 static hda_nid_t
get_preferred_dac(struct hda_codec
*codec
, hda_nid_t pin
)
481 struct hda_gen_spec
*spec
= codec
->spec
;
482 const hda_nid_t
*list
= spec
->preferred_dacs
;
486 for (; *list
; list
+= 2)
492 /* look for an empty DAC slot */
493 static hda_nid_t
look_for_dac(struct hda_codec
*codec
, hda_nid_t pin
,
496 struct hda_gen_spec
*spec
= codec
->spec
;
500 for (i
= 0; i
< spec
->num_all_dacs
; i
++) {
501 hda_nid_t nid
= spec
->all_dacs
[i
];
502 if (!nid
|| is_dac_already_used(codec
, nid
))
504 cap_digital
= !!(get_wcaps(codec
, nid
) & AC_WCAP_DIGITAL
);
505 if (is_digital
!= cap_digital
)
507 if (is_reachable_path(codec
, nid
, pin
))
513 /* replace the channels in the composed amp value with the given number */
514 static unsigned int amp_val_replace_channels(unsigned int val
, unsigned int chs
)
516 val
&= ~(0x3U
<< 16);
521 /* check whether the widget has the given amp capability for the direction */
522 static bool check_amp_caps(struct hda_codec
*codec
, hda_nid_t nid
,
523 int dir
, unsigned int bits
)
527 if (get_wcaps(codec
, nid
) & (1 << (dir
+ 1)))
528 if (query_amp_caps(codec
, nid
, dir
) & bits
)
533 static bool same_amp_caps(struct hda_codec
*codec
, hda_nid_t nid1
,
534 hda_nid_t nid2
, int dir
)
536 if (!(get_wcaps(codec
, nid1
) & (1 << (dir
+ 1))))
537 return !(get_wcaps(codec
, nid2
) & (1 << (dir
+ 1)));
538 return (query_amp_caps(codec
, nid1
, dir
) ==
539 query_amp_caps(codec
, nid2
, dir
));
542 #define nid_has_mute(codec, nid, dir) \
543 check_amp_caps(codec, nid, dir, (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE))
544 #define nid_has_volume(codec, nid, dir) \
545 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
547 /* look for a widget suitable for assigning a mute switch in the path */
548 static hda_nid_t
look_for_out_mute_nid(struct hda_codec
*codec
,
549 struct nid_path
*path
)
553 for (i
= path
->depth
- 1; i
>= 0; i
--) {
554 if (nid_has_mute(codec
, path
->path
[i
], HDA_OUTPUT
))
555 return path
->path
[i
];
556 if (i
!= path
->depth
- 1 && i
!= 0 &&
557 nid_has_mute(codec
, path
->path
[i
], HDA_INPUT
))
558 return path
->path
[i
];
563 /* look for a widget suitable for assigning a volume ctl in the path */
564 static hda_nid_t
look_for_out_vol_nid(struct hda_codec
*codec
,
565 struct nid_path
*path
)
567 struct hda_gen_spec
*spec
= codec
->spec
;
570 for (i
= path
->depth
- 1; i
>= 0; i
--) {
571 hda_nid_t nid
= path
->path
[i
];
572 if ((spec
->out_vol_mask
>> nid
) & 1)
574 if (nid_has_volume(codec
, nid
, HDA_OUTPUT
))
581 * path activation / deactivation
584 /* can have the amp-in capability? */
585 static bool has_amp_in(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
587 hda_nid_t nid
= path
->path
[idx
];
588 unsigned int caps
= get_wcaps(codec
, nid
);
589 unsigned int type
= get_wcaps_type(caps
);
591 if (!(caps
& AC_WCAP_IN_AMP
))
593 if (type
== AC_WID_PIN
&& idx
> 0) /* only for input pins */
598 /* can have the amp-out capability? */
599 static bool has_amp_out(struct hda_codec
*codec
, struct nid_path
*path
, int idx
)
601 hda_nid_t nid
= path
->path
[idx
];
602 unsigned int caps
= get_wcaps(codec
, nid
);
603 unsigned int type
= get_wcaps_type(caps
);
605 if (!(caps
& AC_WCAP_OUT_AMP
))
607 if (type
== AC_WID_PIN
&& !idx
) /* only for output pins */
612 /* check whether the given (nid,dir,idx) is active */
613 static bool is_active_nid(struct hda_codec
*codec
, hda_nid_t nid
,
614 unsigned int dir
, unsigned int idx
)
616 struct hda_gen_spec
*spec
= codec
->spec
;
619 for (n
= 0; n
< spec
->paths
.used
; n
++) {
620 struct nid_path
*path
= snd_array_elem(&spec
->paths
, n
);
623 for (i
= 0; i
< path
->depth
; i
++) {
624 if (path
->path
[i
] == nid
) {
625 if (dir
== HDA_OUTPUT
|| path
->idx
[i
] == idx
)
634 /* check whether the NID is referred by any active paths */
635 #define is_active_nid_for_any(codec, nid) \
636 is_active_nid(codec, nid, HDA_OUTPUT, 0)
638 /* get the default amp value for the target state */
639 static int get_amp_val_to_activate(struct hda_codec
*codec
, hda_nid_t nid
,
640 int dir
, unsigned int caps
, bool enable
)
642 unsigned int val
= 0;
644 if (caps
& AC_AMPCAP_NUM_STEPS
) {
647 val
= (caps
& AC_AMPCAP_OFFSET
) >> AC_AMPCAP_OFFSET_SHIFT
;
649 if (caps
& (AC_AMPCAP_MUTE
| AC_AMPCAP_MIN_MUTE
)) {
656 /* initialize the amp value (only at the first time) */
657 static void init_amp(struct hda_codec
*codec
, hda_nid_t nid
, int dir
, int idx
)
659 unsigned int caps
= query_amp_caps(codec
, nid
, dir
);
660 int val
= get_amp_val_to_activate(codec
, nid
, dir
, caps
, false);
661 snd_hda_codec_amp_init_stereo(codec
, nid
, dir
, idx
, 0xff, val
);
664 /* calculate amp value mask we can modify;
665 * if the given amp is controlled by mixers, don't touch it
667 static unsigned int get_amp_mask_to_modify(struct hda_codec
*codec
,
668 hda_nid_t nid
, int dir
, int idx
,
671 unsigned int mask
= 0xff;
673 if (caps
& (AC_AMPCAP_MUTE
| AC_AMPCAP_MIN_MUTE
)) {
674 if (is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_MUTE_CTL
))
677 if (caps
& AC_AMPCAP_NUM_STEPS
) {
678 if (is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_VOL_CTL
) ||
679 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_BOOST_CTL
))
685 static void activate_amp(struct hda_codec
*codec
, hda_nid_t nid
, int dir
,
686 int idx
, int idx_to_check
, bool enable
)
689 unsigned int mask
, val
;
691 if (!enable
&& is_active_nid(codec
, nid
, dir
, idx_to_check
))
694 caps
= query_amp_caps(codec
, nid
, dir
);
695 val
= get_amp_val_to_activate(codec
, nid
, dir
, caps
, enable
);
696 mask
= get_amp_mask_to_modify(codec
, nid
, dir
, idx_to_check
, caps
);
701 snd_hda_codec_amp_stereo(codec
, nid
, dir
, idx
, mask
, val
);
704 static void activate_amp_out(struct hda_codec
*codec
, struct nid_path
*path
,
707 hda_nid_t nid
= path
->path
[i
];
708 init_amp(codec
, nid
, HDA_OUTPUT
, 0);
709 activate_amp(codec
, nid
, HDA_OUTPUT
, 0, 0, enable
);
712 static void activate_amp_in(struct hda_codec
*codec
, struct nid_path
*path
,
713 int i
, bool enable
, bool add_aamix
)
715 struct hda_gen_spec
*spec
= codec
->spec
;
716 const hda_nid_t
*conn
;
719 hda_nid_t nid
= path
->path
[i
];
721 nums
= snd_hda_get_conn_list(codec
, nid
, &conn
);
722 type
= get_wcaps_type(get_wcaps(codec
, nid
));
723 if (type
== AC_WID_PIN
||
724 (type
== AC_WID_AUD_IN
&& codec
->single_adc_amp
)) {
730 for (n
= 0; n
< nums
; n
++)
731 init_amp(codec
, nid
, HDA_INPUT
, n
);
733 /* here is a little bit tricky in comparison with activate_amp_out();
734 * when aa-mixer is available, we need to enable the path as well
736 for (n
= 0; n
< nums
; n
++) {
737 if (n
!= idx
&& (!add_aamix
|| conn
[n
] != spec
->mixer_merge_nid
))
739 activate_amp(codec
, nid
, HDA_INPUT
, n
, idx
, enable
);
743 /* activate or deactivate the given path
744 * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
746 void snd_hda_activate_path(struct hda_codec
*codec
, struct nid_path
*path
,
747 bool enable
, bool add_aamix
)
749 struct hda_gen_spec
*spec
= codec
->spec
;
753 path
->active
= false;
755 for (i
= path
->depth
- 1; i
>= 0; i
--) {
756 hda_nid_t nid
= path
->path
[i
];
757 if (enable
&& spec
->power_down_unused
) {
758 /* make sure the widget is powered up */
759 if (!snd_hda_check_power_state(codec
, nid
, AC_PWRST_D0
))
760 snd_hda_codec_write(codec
, nid
, 0,
761 AC_VERB_SET_POWER_STATE
,
764 if (enable
&& path
->multi
[i
])
765 snd_hda_codec_update_cache(codec
, nid
, 0,
766 AC_VERB_SET_CONNECT_SEL
,
768 if (has_amp_in(codec
, path
, i
))
769 activate_amp_in(codec
, path
, i
, enable
, add_aamix
);
770 if (has_amp_out(codec
, path
, i
))
771 activate_amp_out(codec
, path
, i
, enable
);
777 EXPORT_SYMBOL_GPL(snd_hda_activate_path
);
779 /* if the given path is inactive, put widgets into D3 (only if suitable) */
780 static void path_power_down_sync(struct hda_codec
*codec
, struct nid_path
*path
)
782 struct hda_gen_spec
*spec
= codec
->spec
;
783 bool changed
= false;
786 if (!spec
->power_down_unused
|| path
->active
)
789 for (i
= 0; i
< path
->depth
; i
++) {
790 hda_nid_t nid
= path
->path
[i
];
791 if (!snd_hda_check_power_state(codec
, nid
, AC_PWRST_D3
) &&
792 !is_active_nid_for_any(codec
, nid
)) {
793 snd_hda_codec_write(codec
, nid
, 0,
794 AC_VERB_SET_POWER_STATE
,
802 snd_hda_codec_read(codec
, path
->path
[0], 0,
803 AC_VERB_GET_POWER_STATE
, 0);
807 /* turn on/off EAPD on the given pin */
808 static void set_pin_eapd(struct hda_codec
*codec
, hda_nid_t pin
, bool enable
)
810 struct hda_gen_spec
*spec
= codec
->spec
;
811 if (spec
->own_eapd_ctl
||
812 !(snd_hda_query_pin_caps(codec
, pin
) & AC_PINCAP_EAPD
))
814 if (spec
->keep_eapd_on
&& !enable
)
818 snd_hda_codec_update_cache(codec
, pin
, 0,
819 AC_VERB_SET_EAPD_BTLENABLE
,
820 enable
? 0x02 : 0x00);
823 /* re-initialize the path specified by the given path index */
824 static void resume_path_from_idx(struct hda_codec
*codec
, int path_idx
)
826 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, path_idx
);
828 snd_hda_activate_path(codec
, path
, path
->active
, false);
833 * Helper functions for creating mixer ctl elements
836 static int hda_gen_mixer_mute_put(struct snd_kcontrol
*kcontrol
,
837 struct snd_ctl_elem_value
*ucontrol
);
838 static int hda_gen_bind_mute_put(struct snd_kcontrol
*kcontrol
,
839 struct snd_ctl_elem_value
*ucontrol
);
846 static const struct snd_kcontrol_new control_templates
[] = {
847 HDA_CODEC_VOLUME(NULL
, 0, 0, 0),
848 /* only the put callback is replaced for handling the special mute */
850 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
851 .subdevice
= HDA_SUBDEV_AMP_FLAG
,
852 .info
= snd_hda_mixer_amp_switch_info
,
853 .get
= snd_hda_mixer_amp_switch_get
,
854 .put
= hda_gen_mixer_mute_put
, /* replaced */
855 .private_value
= HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
858 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
859 .info
= snd_hda_mixer_amp_switch_info
,
860 .get
= snd_hda_mixer_bind_switch_get
,
861 .put
= hda_gen_bind_mute_put
, /* replaced */
862 .private_value
= HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
866 /* add dynamic controls from template */
867 static struct snd_kcontrol_new
*
868 add_control(struct hda_gen_spec
*spec
, int type
, const char *name
,
869 int cidx
, unsigned long val
)
871 struct snd_kcontrol_new
*knew
;
873 knew
= snd_hda_gen_add_kctl(spec
, name
, &control_templates
[type
]);
877 if (get_amp_nid_(val
))
878 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
879 knew
->private_value
= val
;
883 static int add_control_with_pfx(struct hda_gen_spec
*spec
, int type
,
884 const char *pfx
, const char *dir
,
885 const char *sfx
, int cidx
, unsigned long val
)
887 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
888 snprintf(name
, sizeof(name
), "%s %s %s", pfx
, dir
, sfx
);
889 if (!add_control(spec
, type
, name
, cidx
, val
))
894 #define add_pb_vol_ctrl(spec, type, pfx, val) \
895 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
896 #define add_pb_sw_ctrl(spec, type, pfx, val) \
897 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
898 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
899 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
900 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
901 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
903 static int add_vol_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
904 unsigned int chs
, struct nid_path
*path
)
909 val
= path
->ctls
[NID_PATH_VOL_CTL
];
912 val
= amp_val_replace_channels(val
, chs
);
913 return __add_pb_vol_ctrl(codec
->spec
, HDA_CTL_WIDGET_VOL
, pfx
, cidx
, val
);
916 /* return the channel bits suitable for the given path->ctls[] */
917 static int get_default_ch_nums(struct hda_codec
*codec
, struct nid_path
*path
,
920 int chs
= 1; /* mono (left only) */
922 hda_nid_t nid
= get_amp_nid_(path
->ctls
[type
]);
923 if (nid
&& (get_wcaps(codec
, nid
) & AC_WCAP_STEREO
))
924 chs
= 3; /* stereo */
929 static int add_stereo_vol(struct hda_codec
*codec
, const char *pfx
, int cidx
,
930 struct nid_path
*path
)
932 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_VOL_CTL
);
933 return add_vol_ctl(codec
, pfx
, cidx
, chs
, path
);
936 /* create a mute-switch for the given mixer widget;
937 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
939 static int add_sw_ctl(struct hda_codec
*codec
, const char *pfx
, int cidx
,
940 unsigned int chs
, struct nid_path
*path
)
943 int type
= HDA_CTL_WIDGET_MUTE
;
947 val
= path
->ctls
[NID_PATH_MUTE_CTL
];
950 val
= amp_val_replace_channels(val
, chs
);
951 if (get_amp_direction_(val
) == HDA_INPUT
) {
952 hda_nid_t nid
= get_amp_nid_(val
);
953 int nums
= snd_hda_get_num_conns(codec
, nid
);
955 type
= HDA_CTL_BIND_MUTE
;
959 return __add_pb_sw_ctrl(codec
->spec
, type
, pfx
, cidx
, val
);
962 static int add_stereo_sw(struct hda_codec
*codec
, const char *pfx
,
963 int cidx
, struct nid_path
*path
)
965 int chs
= get_default_ch_nums(codec
, path
, NID_PATH_MUTE_CTL
);
966 return add_sw_ctl(codec
, pfx
, cidx
, chs
, path
);
969 /* playback mute control with the software mute bit check */
970 static void sync_auto_mute_bits(struct snd_kcontrol
*kcontrol
,
971 struct snd_ctl_elem_value
*ucontrol
)
973 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
974 struct hda_gen_spec
*spec
= codec
->spec
;
976 if (spec
->auto_mute_via_amp
) {
977 hda_nid_t nid
= get_amp_nid(kcontrol
);
978 bool enabled
= !((spec
->mute_bits
>> nid
) & 1);
979 ucontrol
->value
.integer
.value
[0] &= enabled
;
980 ucontrol
->value
.integer
.value
[1] &= enabled
;
984 static int hda_gen_mixer_mute_put(struct snd_kcontrol
*kcontrol
,
985 struct snd_ctl_elem_value
*ucontrol
)
987 sync_auto_mute_bits(kcontrol
, ucontrol
);
988 return snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
991 static int hda_gen_bind_mute_put(struct snd_kcontrol
*kcontrol
,
992 struct snd_ctl_elem_value
*ucontrol
)
994 sync_auto_mute_bits(kcontrol
, ucontrol
);
995 return snd_hda_mixer_bind_switch_put(kcontrol
, ucontrol
);
998 /* any ctl assigned to the path with the given index? */
999 static bool path_has_mixer(struct hda_codec
*codec
, int path_idx
, int ctl_type
)
1001 struct nid_path
*path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1002 return path
&& path
->ctls
[ctl_type
];
1005 static const char * const channel_name
[4] = {
1006 "Front", "Surround", "CLFE", "Side"
1009 /* give some appropriate ctl name prefix for the given line out channel */
1010 static const char *get_line_out_pfx(struct hda_codec
*codec
, int ch
,
1011 int *index
, int ctl_type
)
1013 struct hda_gen_spec
*spec
= codec
->spec
;
1014 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1017 if (cfg
->line_outs
== 1 && !spec
->multi_ios
&&
1018 !cfg
->hp_outs
&& !cfg
->speaker_outs
)
1019 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
1021 /* if there is really a single DAC used in the whole output paths,
1022 * use it master (or "PCM" if a vmaster hook is present)
1024 if (spec
->multiout
.num_dacs
== 1 && !spec
->mixer_nid
&&
1025 !spec
->multiout
.hp_out_nid
[0] && !spec
->multiout
.extra_out_nid
[0])
1026 return spec
->vmaster_mute
.hook
? "PCM" : "Master";
1028 /* multi-io channels */
1029 if (ch
>= cfg
->line_outs
)
1030 return channel_name
[ch
];
1032 switch (cfg
->line_out_type
) {
1033 case AUTO_PIN_SPEAKER_OUT
:
1034 /* if the primary channel vol/mute is shared with HP volume,
1035 * don't name it as Speaker
1037 if (!ch
&& cfg
->hp_outs
&&
1038 !path_has_mixer(codec
, spec
->hp_paths
[0], ctl_type
))
1040 if (cfg
->line_outs
== 1)
1042 if (cfg
->line_outs
== 2)
1043 return ch
? "Bass Speaker" : "Speaker";
1045 case AUTO_PIN_HP_OUT
:
1046 /* if the primary channel vol/mute is shared with spk volume,
1047 * don't name it as Headphone
1049 if (!ch
&& cfg
->speaker_outs
&&
1050 !path_has_mixer(codec
, spec
->speaker_paths
[0], ctl_type
))
1052 /* for multi-io case, only the primary out */
1053 if (ch
&& spec
->multi_ios
)
1059 /* for a single channel output, we don't have to name the channel */
1060 if (cfg
->line_outs
== 1 && !spec
->multi_ios
)
1063 if (ch
>= ARRAY_SIZE(channel_name
)) {
1068 return channel_name
[ch
];
1072 * Parse output paths
1075 /* badness definition */
1077 /* No primary DAC is found for the main output */
1078 BAD_NO_PRIMARY_DAC
= 0x10000,
1079 /* No DAC is found for the extra output */
1080 BAD_NO_DAC
= 0x4000,
1081 /* No possible multi-ios */
1082 BAD_MULTI_IO
= 0x120,
1083 /* No individual DAC for extra output */
1084 BAD_NO_EXTRA_DAC
= 0x102,
1085 /* No individual DAC for extra surrounds */
1086 BAD_NO_EXTRA_SURR_DAC
= 0x101,
1087 /* Primary DAC shared with main surrounds */
1088 BAD_SHARED_SURROUND
= 0x100,
1089 /* No independent HP possible */
1090 BAD_NO_INDEP_HP
= 0x10,
1091 /* Primary DAC shared with main CLFE */
1092 BAD_SHARED_CLFE
= 0x10,
1093 /* Primary DAC shared with extra surrounds */
1094 BAD_SHARED_EXTRA_SURROUND
= 0x10,
1095 /* Volume widget is shared */
1096 BAD_SHARED_VOL
= 0x10,
1099 /* look for widgets in the given path which are appropriate for
1100 * volume and mute controls, and assign the values to ctls[].
1102 * When no appropriate widget is found in the path, the badness value
1103 * is incremented depending on the situation. The function returns the
1104 * total badness for both volume and mute controls.
1106 static int assign_out_path_ctls(struct hda_codec
*codec
, struct nid_path
*path
)
1113 return BAD_SHARED_VOL
* 2;
1115 if (path
->ctls
[NID_PATH_VOL_CTL
] ||
1116 path
->ctls
[NID_PATH_MUTE_CTL
])
1117 return 0; /* already evaluated */
1119 nid
= look_for_out_vol_nid(codec
, path
);
1121 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
1122 if (is_ctl_used(codec
, val
, NID_PATH_VOL_CTL
))
1123 badness
+= BAD_SHARED_VOL
;
1125 path
->ctls
[NID_PATH_VOL_CTL
] = val
;
1127 badness
+= BAD_SHARED_VOL
;
1128 nid
= look_for_out_mute_nid(codec
, path
);
1130 unsigned int wid_type
= get_wcaps_type(get_wcaps(codec
, nid
));
1131 if (wid_type
== AC_WID_PIN
|| wid_type
== AC_WID_AUD_OUT
||
1132 nid_has_mute(codec
, nid
, HDA_OUTPUT
))
1133 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
1135 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_INPUT
);
1136 if (is_ctl_used(codec
, val
, NID_PATH_MUTE_CTL
))
1137 badness
+= BAD_SHARED_VOL
;
1139 path
->ctls
[NID_PATH_MUTE_CTL
] = val
;
1141 badness
+= BAD_SHARED_VOL
;
1145 const struct badness_table hda_main_out_badness
= {
1146 .no_primary_dac
= BAD_NO_PRIMARY_DAC
,
1147 .no_dac
= BAD_NO_DAC
,
1148 .shared_primary
= BAD_NO_PRIMARY_DAC
,
1149 .shared_surr
= BAD_SHARED_SURROUND
,
1150 .shared_clfe
= BAD_SHARED_CLFE
,
1151 .shared_surr_main
= BAD_SHARED_SURROUND
,
1153 EXPORT_SYMBOL_GPL(hda_main_out_badness
);
1155 const struct badness_table hda_extra_out_badness
= {
1156 .no_primary_dac
= BAD_NO_DAC
,
1157 .no_dac
= BAD_NO_DAC
,
1158 .shared_primary
= BAD_NO_EXTRA_DAC
,
1159 .shared_surr
= BAD_SHARED_EXTRA_SURROUND
,
1160 .shared_clfe
= BAD_SHARED_EXTRA_SURROUND
,
1161 .shared_surr_main
= BAD_NO_EXTRA_SURR_DAC
,
1163 EXPORT_SYMBOL_GPL(hda_extra_out_badness
);
1165 /* get the DAC of the primary output corresponding to the given array index */
1166 static hda_nid_t
get_primary_out(struct hda_codec
*codec
, int idx
)
1168 struct hda_gen_spec
*spec
= codec
->spec
;
1169 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1171 if (cfg
->line_outs
> idx
)
1172 return spec
->private_dac_nids
[idx
];
1173 idx
-= cfg
->line_outs
;
1174 if (spec
->multi_ios
> idx
)
1175 return spec
->multi_io
[idx
].dac
;
1179 /* return the DAC if it's reachable, otherwise zero */
1180 static inline hda_nid_t
try_dac(struct hda_codec
*codec
,
1181 hda_nid_t dac
, hda_nid_t pin
)
1183 return is_reachable_path(codec
, dac
, pin
) ? dac
: 0;
1186 /* try to assign DACs to pins and return the resultant badness */
1187 static int try_assign_dacs(struct hda_codec
*codec
, int num_outs
,
1188 const hda_nid_t
*pins
, hda_nid_t
*dacs
,
1190 const struct badness_table
*bad
)
1192 struct hda_gen_spec
*spec
= codec
->spec
;
1200 for (i
= 0; i
< num_outs
; i
++) {
1201 struct nid_path
*path
;
1202 hda_nid_t pin
= pins
[i
];
1204 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1206 badness
+= assign_out_path_ctls(codec
, path
);
1210 dacs
[i
] = get_preferred_dac(codec
, pin
);
1212 if (is_dac_already_used(codec
, dacs
[i
]))
1213 badness
+= bad
->shared_primary
;
1217 dacs
[i
] = look_for_dac(codec
, pin
, false);
1218 if (!dacs
[i
] && !i
) {
1219 /* try to steal the DAC of surrounds for the front */
1220 for (j
= 1; j
< num_outs
; j
++) {
1221 if (is_reachable_path(codec
, dacs
[j
], pin
)) {
1224 invalidate_nid_path(codec
, path_idx
[j
]);
1233 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1235 dac
= try_dac(codec
, dacs
[0], pin
);
1237 dac
= try_dac(codec
, get_primary_out(codec
, i
), pin
);
1240 badness
+= bad
->shared_primary
;
1242 badness
+= bad
->shared_surr
;
1244 badness
+= bad
->shared_clfe
;
1245 } else if (is_reachable_path(codec
, spec
->private_dac_nids
[0], pin
)) {
1246 dac
= spec
->private_dac_nids
[0];
1247 badness
+= bad
->shared_surr_main
;
1249 badness
+= bad
->no_primary_dac
;
1251 badness
+= bad
->no_dac
;
1255 path
= snd_hda_add_new_path(codec
, dac
, pin
, -spec
->mixer_nid
);
1256 if (!path
&& !i
&& spec
->mixer_nid
) {
1257 /* try with aamix */
1258 path
= snd_hda_add_new_path(codec
, dac
, pin
, 0);
1262 badness
+= bad
->no_dac
;
1264 /* print_nid_path(codec, "output", path); */
1265 path
->active
= true;
1266 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1267 badness
+= assign_out_path_ctls(codec
, path
);
1274 /* return NID if the given pin has only a single connection to a certain DAC */
1275 static hda_nid_t
get_dac_if_single(struct hda_codec
*codec
, hda_nid_t pin
)
1277 struct hda_gen_spec
*spec
= codec
->spec
;
1279 hda_nid_t nid_found
= 0;
1281 for (i
= 0; i
< spec
->num_all_dacs
; i
++) {
1282 hda_nid_t nid
= spec
->all_dacs
[i
];
1283 if (!nid
|| is_dac_already_used(codec
, nid
))
1285 if (is_reachable_path(codec
, nid
, pin
)) {
1294 /* check whether the given pin can be a multi-io pin */
1295 static bool can_be_multiio_pin(struct hda_codec
*codec
,
1296 unsigned int location
, hda_nid_t nid
)
1298 unsigned int defcfg
, caps
;
1300 defcfg
= snd_hda_codec_get_pincfg(codec
, nid
);
1301 if (get_defcfg_connect(defcfg
) != AC_JACK_PORT_COMPLEX
)
1303 if (location
&& get_defcfg_location(defcfg
) != location
)
1305 caps
= snd_hda_query_pin_caps(codec
, nid
);
1306 if (!(caps
& AC_PINCAP_OUT
))
1311 /* count the number of input pins that are capable to be multi-io */
1312 static int count_multiio_pins(struct hda_codec
*codec
, hda_nid_t reference_pin
)
1314 struct hda_gen_spec
*spec
= codec
->spec
;
1315 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1316 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1317 unsigned int location
= get_defcfg_location(defcfg
);
1321 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1322 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1323 if (cfg
->inputs
[i
].type
!= type
)
1325 if (can_be_multiio_pin(codec
, location
,
1326 cfg
->inputs
[i
].pin
))
1336 * When hardwired is set, try to fill ony hardwired pins, and returns
1337 * zero if any pins are filled, non-zero if nothing found.
1338 * When hardwired is off, try to fill possible input pins, and returns
1339 * the badness value.
1341 static int fill_multi_ios(struct hda_codec
*codec
,
1342 hda_nid_t reference_pin
,
1345 struct hda_gen_spec
*spec
= codec
->spec
;
1346 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1347 int type
, i
, j
, num_pins
, old_pins
;
1348 unsigned int defcfg
= snd_hda_codec_get_pincfg(codec
, reference_pin
);
1349 unsigned int location
= get_defcfg_location(defcfg
);
1351 struct nid_path
*path
;
1353 old_pins
= spec
->multi_ios
;
1357 num_pins
= count_multiio_pins(codec
, reference_pin
);
1361 for (type
= AUTO_PIN_LINE_IN
; type
>= AUTO_PIN_MIC
; type
--) {
1362 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
1363 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
1366 if (cfg
->inputs
[i
].type
!= type
)
1368 if (!can_be_multiio_pin(codec
, location
, nid
))
1370 for (j
= 0; j
< spec
->multi_ios
; j
++) {
1371 if (nid
== spec
->multi_io
[j
].pin
)
1374 if (j
< spec
->multi_ios
)
1378 dac
= get_dac_if_single(codec
, nid
);
1380 dac
= look_for_dac(codec
, nid
, false);
1385 path
= snd_hda_add_new_path(codec
, dac
, nid
,
1391 /* print_nid_path(codec, "multiio", path); */
1392 spec
->multi_io
[spec
->multi_ios
].pin
= nid
;
1393 spec
->multi_io
[spec
->multi_ios
].dac
= dac
;
1394 spec
->out_paths
[cfg
->line_outs
+ spec
->multi_ios
] =
1395 snd_hda_get_path_idx(codec
, path
);
1397 if (spec
->multi_ios
>= 2)
1403 badness
= BAD_MULTI_IO
;
1404 if (old_pins
== spec
->multi_ios
) {
1406 return 1; /* nothing found */
1408 return badness
; /* no badness if nothing found */
1410 if (!hardwired
&& spec
->multi_ios
< 2) {
1411 /* cancel newly assigned paths */
1412 spec
->paths
.used
-= spec
->multi_ios
- old_pins
;
1413 spec
->multi_ios
= old_pins
;
1417 /* assign volume and mute controls */
1418 for (i
= old_pins
; i
< spec
->multi_ios
; i
++) {
1419 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[cfg
->line_outs
+ i
]);
1420 badness
+= assign_out_path_ctls(codec
, path
);
1426 /* map DACs for all pins in the list if they are single connections */
1427 static bool map_singles(struct hda_codec
*codec
, int outs
,
1428 const hda_nid_t
*pins
, hda_nid_t
*dacs
, int *path_idx
)
1430 struct hda_gen_spec
*spec
= codec
->spec
;
1433 for (i
= 0; i
< outs
; i
++) {
1434 struct nid_path
*path
;
1438 dac
= get_dac_if_single(codec
, pins
[i
]);
1441 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
],
1443 if (!path
&& !i
&& spec
->mixer_nid
)
1444 path
= snd_hda_add_new_path(codec
, dac
, pins
[i
], 0);
1448 /* print_nid_path(codec, "output", path); */
1449 path
->active
= true;
1450 path_idx
[i
] = snd_hda_get_path_idx(codec
, path
);
1456 /* create a new path including aamix if available, and return its index */
1457 static int check_aamix_out_path(struct hda_codec
*codec
, int path_idx
)
1459 struct hda_gen_spec
*spec
= codec
->spec
;
1460 struct nid_path
*path
;
1461 hda_nid_t path_dac
, dac
, pin
;
1463 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1464 if (!path
|| !path
->depth
||
1465 is_nid_contained(path
, spec
->mixer_nid
))
1467 path_dac
= path
->path
[0];
1468 dac
= spec
->private_dac_nids
[0];
1469 pin
= path
->path
[path
->depth
- 1];
1470 path
= snd_hda_add_new_path(codec
, dac
, pin
, spec
->mixer_nid
);
1472 if (dac
!= path_dac
)
1474 else if (spec
->multiout
.hp_out_nid
[0])
1475 dac
= spec
->multiout
.hp_out_nid
[0];
1476 else if (spec
->multiout
.extra_out_nid
[0])
1477 dac
= spec
->multiout
.extra_out_nid
[0];
1481 path
= snd_hda_add_new_path(codec
, dac
, pin
,
1486 /* print_nid_path(codec, "output-aamix", path); */
1487 path
->active
= false; /* unused as default */
1488 return snd_hda_get_path_idx(codec
, path
);
1491 /* check whether the independent HP is available with the current config */
1492 static bool indep_hp_possible(struct hda_codec
*codec
)
1494 struct hda_gen_spec
*spec
= codec
->spec
;
1495 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1496 struct nid_path
*path
;
1499 if (cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
1500 idx
= spec
->out_paths
[0];
1502 idx
= spec
->hp_paths
[0];
1503 path
= snd_hda_get_path_from_idx(codec
, idx
);
1507 /* assume no path conflicts unless aamix is involved */
1508 if (!spec
->mixer_nid
|| !is_nid_contained(path
, spec
->mixer_nid
))
1511 /* check whether output paths contain aamix */
1512 for (i
= 0; i
< cfg
->line_outs
; i
++) {
1513 if (spec
->out_paths
[i
] == idx
)
1515 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[i
]);
1516 if (path
&& is_nid_contained(path
, spec
->mixer_nid
))
1519 for (i
= 0; i
< cfg
->speaker_outs
; i
++) {
1520 path
= snd_hda_get_path_from_idx(codec
, spec
->speaker_paths
[i
]);
1521 if (path
&& is_nid_contained(path
, spec
->mixer_nid
))
1528 /* fill the empty entries in the dac array for speaker/hp with the
1529 * shared dac pointed by the paths
1531 static void refill_shared_dacs(struct hda_codec
*codec
, int num_outs
,
1532 hda_nid_t
*dacs
, int *path_idx
)
1534 struct nid_path
*path
;
1537 for (i
= 0; i
< num_outs
; i
++) {
1540 path
= snd_hda_get_path_from_idx(codec
, path_idx
[i
]);
1543 dacs
[i
] = path
->path
[0];
1547 /* fill in the dac_nids table from the parsed pin configuration */
1548 static int fill_and_eval_dacs(struct hda_codec
*codec
,
1549 bool fill_hardwired
,
1550 bool fill_mio_first
)
1552 struct hda_gen_spec
*spec
= codec
->spec
;
1553 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1554 int i
, err
, badness
;
1556 /* set num_dacs once to full for look_for_dac() */
1557 spec
->multiout
.num_dacs
= cfg
->line_outs
;
1558 spec
->multiout
.dac_nids
= spec
->private_dac_nids
;
1559 memset(spec
->private_dac_nids
, 0, sizeof(spec
->private_dac_nids
));
1560 memset(spec
->multiout
.hp_out_nid
, 0, sizeof(spec
->multiout
.hp_out_nid
));
1561 memset(spec
->multiout
.extra_out_nid
, 0, sizeof(spec
->multiout
.extra_out_nid
));
1562 spec
->multi_ios
= 0;
1563 snd_array_free(&spec
->paths
);
1565 /* clear path indices */
1566 memset(spec
->out_paths
, 0, sizeof(spec
->out_paths
));
1567 memset(spec
->hp_paths
, 0, sizeof(spec
->hp_paths
));
1568 memset(spec
->speaker_paths
, 0, sizeof(spec
->speaker_paths
));
1569 memset(spec
->aamix_out_paths
, 0, sizeof(spec
->aamix_out_paths
));
1570 memset(spec
->digout_paths
, 0, sizeof(spec
->digout_paths
));
1571 memset(spec
->input_paths
, 0, sizeof(spec
->input_paths
));
1572 memset(spec
->loopback_paths
, 0, sizeof(spec
->loopback_paths
));
1573 memset(&spec
->digin_path
, 0, sizeof(spec
->digin_path
));
1577 /* fill hard-wired DACs first */
1578 if (fill_hardwired
) {
1581 mapped
= map_singles(codec
, cfg
->line_outs
,
1583 spec
->private_dac_nids
,
1585 mapped
|= map_singles(codec
, cfg
->hp_outs
,
1587 spec
->multiout
.hp_out_nid
,
1589 mapped
|= map_singles(codec
, cfg
->speaker_outs
,
1591 spec
->multiout
.extra_out_nid
,
1592 spec
->speaker_paths
);
1593 if (!spec
->no_multi_io
&&
1594 fill_mio_first
&& cfg
->line_outs
== 1 &&
1595 cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1596 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], true);
1603 badness
+= try_assign_dacs(codec
, cfg
->line_outs
, cfg
->line_out_pins
,
1604 spec
->private_dac_nids
, spec
->out_paths
,
1605 spec
->main_out_badness
);
1607 if (!spec
->no_multi_io
&& fill_mio_first
&&
1608 cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1609 /* try to fill multi-io first */
1610 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1613 /* we don't count badness at this stage yet */
1616 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
1617 err
= try_assign_dacs(codec
, cfg
->hp_outs
, cfg
->hp_pins
,
1618 spec
->multiout
.hp_out_nid
,
1620 spec
->extra_out_badness
);
1625 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1626 err
= try_assign_dacs(codec
, cfg
->speaker_outs
,
1628 spec
->multiout
.extra_out_nid
,
1629 spec
->speaker_paths
,
1630 spec
->extra_out_badness
);
1635 if (!spec
->no_multi_io
&&
1636 cfg
->line_outs
== 1 && cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1637 err
= fill_multi_ios(codec
, cfg
->line_out_pins
[0], false);
1643 if (spec
->mixer_nid
) {
1644 spec
->aamix_out_paths
[0] =
1645 check_aamix_out_path(codec
, spec
->out_paths
[0]);
1646 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1647 spec
->aamix_out_paths
[1] =
1648 check_aamix_out_path(codec
, spec
->hp_paths
[0]);
1649 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1650 spec
->aamix_out_paths
[2] =
1651 check_aamix_out_path(codec
, spec
->speaker_paths
[0]);
1654 if (!spec
->no_multi_io
&&
1655 cfg
->hp_outs
&& cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
)
1656 if (count_multiio_pins(codec
, cfg
->hp_pins
[0]) >= 2)
1657 spec
->multi_ios
= 1; /* give badness */
1659 /* re-count num_dacs and squash invalid entries */
1660 spec
->multiout
.num_dacs
= 0;
1661 for (i
= 0; i
< cfg
->line_outs
; i
++) {
1662 if (spec
->private_dac_nids
[i
])
1663 spec
->multiout
.num_dacs
++;
1665 memmove(spec
->private_dac_nids
+ i
,
1666 spec
->private_dac_nids
+ i
+ 1,
1667 sizeof(hda_nid_t
) * (cfg
->line_outs
- i
- 1));
1668 spec
->private_dac_nids
[cfg
->line_outs
- 1] = 0;
1672 spec
->ext_channel_count
= spec
->min_channel_count
=
1673 spec
->multiout
.num_dacs
* 2;
1675 if (spec
->multi_ios
== 2) {
1676 for (i
= 0; i
< 2; i
++)
1677 spec
->private_dac_nids
[spec
->multiout
.num_dacs
++] =
1678 spec
->multi_io
[i
].dac
;
1679 } else if (spec
->multi_ios
) {
1680 spec
->multi_ios
= 0;
1681 badness
+= BAD_MULTI_IO
;
1684 if (spec
->indep_hp
&& !indep_hp_possible(codec
))
1685 badness
+= BAD_NO_INDEP_HP
;
1687 /* re-fill the shared DAC for speaker / headphone */
1688 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1689 refill_shared_dacs(codec
, cfg
->hp_outs
,
1690 spec
->multiout
.hp_out_nid
,
1692 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
1693 refill_shared_dacs(codec
, cfg
->speaker_outs
,
1694 spec
->multiout
.extra_out_nid
,
1695 spec
->speaker_paths
);
1700 #define DEBUG_BADNESS
1702 #ifdef DEBUG_BADNESS
1703 #define debug_badness(fmt, args...) codec_dbg(codec, fmt, ##args)
1705 #define debug_badness(...)
1708 #ifdef DEBUG_BADNESS
1709 static inline void print_nid_path_idx(struct hda_codec
*codec
,
1710 const char *pfx
, int idx
)
1712 struct nid_path
*path
;
1714 path
= snd_hda_get_path_from_idx(codec
, idx
);
1716 print_nid_path(codec
, pfx
, path
);
1719 static void debug_show_configs(struct hda_codec
*codec
,
1720 struct auto_pin_cfg
*cfg
)
1722 struct hda_gen_spec
*spec
= codec
->spec
;
1723 static const char * const lo_type
[3] = { "LO", "SP", "HP" };
1726 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1727 cfg
->line_out_pins
[0], cfg
->line_out_pins
[1],
1728 cfg
->line_out_pins
[2], cfg
->line_out_pins
[3],
1729 spec
->multiout
.dac_nids
[0],
1730 spec
->multiout
.dac_nids
[1],
1731 spec
->multiout
.dac_nids
[2],
1732 spec
->multiout
.dac_nids
[3],
1733 lo_type
[cfg
->line_out_type
]);
1734 for (i
= 0; i
< cfg
->line_outs
; i
++)
1735 print_nid_path_idx(codec
, " out", spec
->out_paths
[i
]);
1736 if (spec
->multi_ios
> 0)
1737 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1739 spec
->multi_io
[0].pin
, spec
->multi_io
[1].pin
,
1740 spec
->multi_io
[0].dac
, spec
->multi_io
[1].dac
);
1741 for (i
= 0; i
< spec
->multi_ios
; i
++)
1742 print_nid_path_idx(codec
, " mio",
1743 spec
->out_paths
[cfg
->line_outs
+ i
]);
1745 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1746 cfg
->hp_pins
[0], cfg
->hp_pins
[1],
1747 cfg
->hp_pins
[2], cfg
->hp_pins
[3],
1748 spec
->multiout
.hp_out_nid
[0],
1749 spec
->multiout
.hp_out_nid
[1],
1750 spec
->multiout
.hp_out_nid
[2],
1751 spec
->multiout
.hp_out_nid
[3]);
1752 for (i
= 0; i
< cfg
->hp_outs
; i
++)
1753 print_nid_path_idx(codec
, " hp ", spec
->hp_paths
[i
]);
1754 if (cfg
->speaker_outs
)
1755 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1756 cfg
->speaker_pins
[0], cfg
->speaker_pins
[1],
1757 cfg
->speaker_pins
[2], cfg
->speaker_pins
[3],
1758 spec
->multiout
.extra_out_nid
[0],
1759 spec
->multiout
.extra_out_nid
[1],
1760 spec
->multiout
.extra_out_nid
[2],
1761 spec
->multiout
.extra_out_nid
[3]);
1762 for (i
= 0; i
< cfg
->speaker_outs
; i
++)
1763 print_nid_path_idx(codec
, " spk", spec
->speaker_paths
[i
]);
1764 for (i
= 0; i
< 3; i
++)
1765 print_nid_path_idx(codec
, " mix", spec
->aamix_out_paths
[i
]);
1768 #define debug_show_configs(codec, cfg) /* NOP */
1771 /* find all available DACs of the codec */
1772 static void fill_all_dac_nids(struct hda_codec
*codec
)
1774 struct hda_gen_spec
*spec
= codec
->spec
;
1776 hda_nid_t nid
= codec
->start_nid
;
1778 spec
->num_all_dacs
= 0;
1779 memset(spec
->all_dacs
, 0, sizeof(spec
->all_dacs
));
1780 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
1781 if (get_wcaps_type(get_wcaps(codec
, nid
)) != AC_WID_AUD_OUT
)
1783 if (spec
->num_all_dacs
>= ARRAY_SIZE(spec
->all_dacs
)) {
1784 codec_err(codec
, "Too many DACs!\n");
1787 spec
->all_dacs
[spec
->num_all_dacs
++] = nid
;
1791 static int parse_output_paths(struct hda_codec
*codec
)
1793 struct hda_gen_spec
*spec
= codec
->spec
;
1794 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
1795 struct auto_pin_cfg
*best_cfg
;
1797 int best_badness
= INT_MAX
;
1799 bool fill_hardwired
= true, fill_mio_first
= true;
1800 bool best_wired
= true, best_mio
= true;
1801 bool hp_spk_swapped
= false;
1803 best_cfg
= kmalloc(sizeof(*best_cfg
), GFP_KERNEL
);
1809 badness
= fill_and_eval_dacs(codec
, fill_hardwired
,
1815 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1816 cfg
->line_out_type
, fill_hardwired
, fill_mio_first
,
1818 debug_show_configs(codec
, cfg
);
1819 if (badness
< best_badness
) {
1820 best_badness
= badness
;
1822 best_wired
= fill_hardwired
;
1823 best_mio
= fill_mio_first
;
1827 fill_mio_first
= !fill_mio_first
;
1828 if (!fill_mio_first
)
1830 fill_hardwired
= !fill_hardwired
;
1831 if (!fill_hardwired
)
1835 hp_spk_swapped
= true;
1836 if (cfg
->speaker_outs
> 0 &&
1837 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
1838 cfg
->hp_outs
= cfg
->line_outs
;
1839 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
1840 sizeof(cfg
->hp_pins
));
1841 cfg
->line_outs
= cfg
->speaker_outs
;
1842 memcpy(cfg
->line_out_pins
, cfg
->speaker_pins
,
1843 sizeof(cfg
->speaker_pins
));
1844 cfg
->speaker_outs
= 0;
1845 memset(cfg
->speaker_pins
, 0, sizeof(cfg
->speaker_pins
));
1846 cfg
->line_out_type
= AUTO_PIN_SPEAKER_OUT
;
1847 fill_hardwired
= true;
1850 if (cfg
->hp_outs
> 0 &&
1851 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
1852 cfg
->speaker_outs
= cfg
->line_outs
;
1853 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
1854 sizeof(cfg
->speaker_pins
));
1855 cfg
->line_outs
= cfg
->hp_outs
;
1856 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
,
1857 sizeof(cfg
->hp_pins
));
1859 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
1860 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
1861 fill_hardwired
= true;
1868 debug_badness("==> restoring best_cfg\n");
1870 fill_and_eval_dacs(codec
, best_wired
, best_mio
);
1872 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1873 cfg
->line_out_type
, best_wired
, best_mio
);
1874 debug_show_configs(codec
, cfg
);
1876 if (cfg
->line_out_pins
[0]) {
1877 struct nid_path
*path
;
1878 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[0]);
1880 spec
->vmaster_nid
= look_for_out_vol_nid(codec
, path
);
1881 if (spec
->vmaster_nid
)
1882 snd_hda_set_vmaster_tlv(codec
, spec
->vmaster_nid
,
1883 HDA_OUTPUT
, spec
->vmaster_tlv
);
1886 /* set initial pinctl targets */
1887 if (spec
->prefer_hp_amp
|| cfg
->line_out_type
== AUTO_PIN_HP_OUT
)
1891 set_pin_targets(codec
, cfg
->line_outs
, cfg
->line_out_pins
, val
);
1892 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
1893 set_pin_targets(codec
, cfg
->hp_outs
, cfg
->hp_pins
, PIN_HP
);
1894 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
1895 val
= spec
->prefer_hp_amp
? PIN_HP
: PIN_OUT
;
1896 set_pin_targets(codec
, cfg
->speaker_outs
,
1897 cfg
->speaker_pins
, val
);
1900 /* clear indep_hp flag if not available */
1901 if (spec
->indep_hp
&& !indep_hp_possible(codec
))
1908 /* add playback controls from the parsed DAC table */
1909 static int create_multi_out_ctls(struct hda_codec
*codec
,
1910 const struct auto_pin_cfg
*cfg
)
1912 struct hda_gen_spec
*spec
= codec
->spec
;
1913 int i
, err
, noutputs
;
1915 noutputs
= cfg
->line_outs
;
1916 if (spec
->multi_ios
> 0 && cfg
->line_outs
< 3)
1917 noutputs
+= spec
->multi_ios
;
1919 for (i
= 0; i
< noutputs
; i
++) {
1922 struct nid_path
*path
;
1924 path
= snd_hda_get_path_from_idx(codec
, spec
->out_paths
[i
]);
1928 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_VOL_CTL
);
1929 if (!name
|| !strcmp(name
, "CLFE")) {
1931 err
= add_vol_ctl(codec
, "Center", 0, 1, path
);
1934 err
= add_vol_ctl(codec
, "LFE", 0, 2, path
);
1938 err
= add_stereo_vol(codec
, name
, index
, path
);
1943 name
= get_line_out_pfx(codec
, i
, &index
, NID_PATH_MUTE_CTL
);
1944 if (!name
|| !strcmp(name
, "CLFE")) {
1945 err
= add_sw_ctl(codec
, "Center", 0, 1, path
);
1948 err
= add_sw_ctl(codec
, "LFE", 0, 2, path
);
1952 err
= add_stereo_sw(codec
, name
, index
, path
);
1960 static int create_extra_out(struct hda_codec
*codec
, int path_idx
,
1961 const char *pfx
, int cidx
)
1963 struct nid_path
*path
;
1966 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
1969 err
= add_stereo_vol(codec
, pfx
, cidx
, path
);
1972 err
= add_stereo_sw(codec
, pfx
, cidx
, path
);
1978 /* add playback controls for speaker and HP outputs */
1979 static int create_extra_outs(struct hda_codec
*codec
, int num_pins
,
1980 const int *paths
, const char *pfx
)
1984 for (i
= 0; i
< num_pins
; i
++) {
1986 char tmp
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
1989 if (num_pins
== 2 && i
== 1 && !strcmp(pfx
, "Speaker"))
1990 name
= "Bass Speaker";
1991 else if (num_pins
>= 3) {
1992 snprintf(tmp
, sizeof(tmp
), "%s %s",
1993 pfx
, channel_name
[i
]);
1999 err
= create_extra_out(codec
, paths
[i
], name
, idx
);
2006 static int create_hp_out_ctls(struct hda_codec
*codec
)
2008 struct hda_gen_spec
*spec
= codec
->spec
;
2009 return create_extra_outs(codec
, spec
->autocfg
.hp_outs
,
2014 static int create_speaker_out_ctls(struct hda_codec
*codec
)
2016 struct hda_gen_spec
*spec
= codec
->spec
;
2017 return create_extra_outs(codec
, spec
->autocfg
.speaker_outs
,
2018 spec
->speaker_paths
,
2023 * independent HP controls
2026 static void call_hp_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
);
2027 static int indep_hp_info(struct snd_kcontrol
*kcontrol
,
2028 struct snd_ctl_elem_info
*uinfo
)
2030 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
2033 static int indep_hp_get(struct snd_kcontrol
*kcontrol
,
2034 struct snd_ctl_elem_value
*ucontrol
)
2036 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2037 struct hda_gen_spec
*spec
= codec
->spec
;
2038 ucontrol
->value
.enumerated
.item
[0] = spec
->indep_hp_enabled
;
2042 static void update_aamix_paths(struct hda_codec
*codec
, bool do_mix
,
2043 int nomix_path_idx
, int mix_path_idx
,
2046 static int indep_hp_put(struct snd_kcontrol
*kcontrol
,
2047 struct snd_ctl_elem_value
*ucontrol
)
2049 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2050 struct hda_gen_spec
*spec
= codec
->spec
;
2051 unsigned int select
= ucontrol
->value
.enumerated
.item
[0];
2054 mutex_lock(&spec
->pcm_mutex
);
2055 if (spec
->active_streams
) {
2060 if (spec
->indep_hp_enabled
!= select
) {
2062 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2063 dacp
= &spec
->private_dac_nids
[0];
2065 dacp
= &spec
->multiout
.hp_out_nid
[0];
2067 /* update HP aamix paths in case it conflicts with indep HP */
2068 if (spec
->have_aamix_ctl
) {
2069 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2070 update_aamix_paths(codec
, spec
->aamix_mode
,
2072 spec
->aamix_out_paths
[0],
2073 spec
->autocfg
.line_out_type
);
2075 update_aamix_paths(codec
, spec
->aamix_mode
,
2077 spec
->aamix_out_paths
[1],
2081 spec
->indep_hp_enabled
= select
;
2082 if (spec
->indep_hp_enabled
)
2085 *dacp
= spec
->alt_dac_nid
;
2087 call_hp_automute(codec
, NULL
);
2091 mutex_unlock(&spec
->pcm_mutex
);
2095 static const struct snd_kcontrol_new indep_hp_ctl
= {
2096 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2097 .name
= "Independent HP",
2098 .info
= indep_hp_info
,
2099 .get
= indep_hp_get
,
2100 .put
= indep_hp_put
,
2104 static int create_indep_hp_ctls(struct hda_codec
*codec
)
2106 struct hda_gen_spec
*spec
= codec
->spec
;
2109 if (!spec
->indep_hp
)
2111 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
2112 dac
= spec
->multiout
.dac_nids
[0];
2114 dac
= spec
->multiout
.hp_out_nid
[0];
2120 spec
->indep_hp_enabled
= false;
2121 spec
->alt_dac_nid
= dac
;
2122 if (!snd_hda_gen_add_kctl(spec
, NULL
, &indep_hp_ctl
))
2128 * channel mode enum control
2131 static int ch_mode_info(struct snd_kcontrol
*kcontrol
,
2132 struct snd_ctl_elem_info
*uinfo
)
2134 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2135 struct hda_gen_spec
*spec
= codec
->spec
;
2138 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
2140 uinfo
->value
.enumerated
.items
= spec
->multi_ios
+ 1;
2141 if (uinfo
->value
.enumerated
.item
> spec
->multi_ios
)
2142 uinfo
->value
.enumerated
.item
= spec
->multi_ios
;
2143 chs
= uinfo
->value
.enumerated
.item
* 2 + spec
->min_channel_count
;
2144 sprintf(uinfo
->value
.enumerated
.name
, "%dch", chs
);
2148 static int ch_mode_get(struct snd_kcontrol
*kcontrol
,
2149 struct snd_ctl_elem_value
*ucontrol
)
2151 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2152 struct hda_gen_spec
*spec
= codec
->spec
;
2153 ucontrol
->value
.enumerated
.item
[0] =
2154 (spec
->ext_channel_count
- spec
->min_channel_count
) / 2;
2158 static inline struct nid_path
*
2159 get_multiio_path(struct hda_codec
*codec
, int idx
)
2161 struct hda_gen_spec
*spec
= codec
->spec
;
2162 return snd_hda_get_path_from_idx(codec
,
2163 spec
->out_paths
[spec
->autocfg
.line_outs
+ idx
]);
2166 static void update_automute_all(struct hda_codec
*codec
);
2168 /* Default value to be passed as aamix argument for snd_hda_activate_path();
2169 * used for output paths
2171 static bool aamix_default(struct hda_gen_spec
*spec
)
2173 return !spec
->have_aamix_ctl
|| spec
->aamix_mode
;
2176 static int set_multi_io(struct hda_codec
*codec
, int idx
, bool output
)
2178 struct hda_gen_spec
*spec
= codec
->spec
;
2179 hda_nid_t nid
= spec
->multi_io
[idx
].pin
;
2180 struct nid_path
*path
;
2182 path
= get_multiio_path(codec
, idx
);
2186 if (path
->active
== output
)
2190 set_pin_target(codec
, nid
, PIN_OUT
, true);
2191 snd_hda_activate_path(codec
, path
, true, aamix_default(spec
));
2192 set_pin_eapd(codec
, nid
, true);
2194 set_pin_eapd(codec
, nid
, false);
2195 snd_hda_activate_path(codec
, path
, false, aamix_default(spec
));
2196 set_pin_target(codec
, nid
, spec
->multi_io
[idx
].ctl_in
, true);
2197 path_power_down_sync(codec
, path
);
2200 /* update jack retasking in case it modifies any of them */
2201 update_automute_all(codec
);
2206 static int ch_mode_put(struct snd_kcontrol
*kcontrol
,
2207 struct snd_ctl_elem_value
*ucontrol
)
2209 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2210 struct hda_gen_spec
*spec
= codec
->spec
;
2213 ch
= ucontrol
->value
.enumerated
.item
[0];
2214 if (ch
< 0 || ch
> spec
->multi_ios
)
2216 if (ch
== (spec
->ext_channel_count
- spec
->min_channel_count
) / 2)
2218 spec
->ext_channel_count
= ch
* 2 + spec
->min_channel_count
;
2219 for (i
= 0; i
< spec
->multi_ios
; i
++)
2220 set_multi_io(codec
, i
, i
< ch
);
2221 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
2222 spec
->const_channel_count
);
2223 if (spec
->need_dac_fix
)
2224 spec
->multiout
.num_dacs
= spec
->multiout
.max_channels
/ 2;
2228 static const struct snd_kcontrol_new channel_mode_enum
= {
2229 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2230 .name
= "Channel Mode",
2231 .info
= ch_mode_info
,
2236 static int create_multi_channel_mode(struct hda_codec
*codec
)
2238 struct hda_gen_spec
*spec
= codec
->spec
;
2240 if (spec
->multi_ios
> 0) {
2241 if (!snd_hda_gen_add_kctl(spec
, NULL
, &channel_mode_enum
))
2248 * aamix loopback enable/disable switch
2251 #define loopback_mixing_info indep_hp_info
2253 static int loopback_mixing_get(struct snd_kcontrol
*kcontrol
,
2254 struct snd_ctl_elem_value
*ucontrol
)
2256 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2257 struct hda_gen_spec
*spec
= codec
->spec
;
2258 ucontrol
->value
.enumerated
.item
[0] = spec
->aamix_mode
;
2262 static void update_aamix_paths(struct hda_codec
*codec
, bool do_mix
,
2263 int nomix_path_idx
, int mix_path_idx
,
2266 struct hda_gen_spec
*spec
= codec
->spec
;
2267 struct nid_path
*nomix_path
, *mix_path
;
2269 nomix_path
= snd_hda_get_path_from_idx(codec
, nomix_path_idx
);
2270 mix_path
= snd_hda_get_path_from_idx(codec
, mix_path_idx
);
2271 if (!nomix_path
|| !mix_path
)
2274 /* if HP aamix path is driven from a different DAC and the
2275 * independent HP mode is ON, can't turn on aamix path
2277 if (out_type
== AUTO_PIN_HP_OUT
&& spec
->indep_hp_enabled
&&
2278 mix_path
->path
[0] != spec
->alt_dac_nid
)
2282 snd_hda_activate_path(codec
, nomix_path
, false, true);
2283 snd_hda_activate_path(codec
, mix_path
, true, true);
2284 path_power_down_sync(codec
, nomix_path
);
2286 snd_hda_activate_path(codec
, mix_path
, false, false);
2287 snd_hda_activate_path(codec
, nomix_path
, true, false);
2288 path_power_down_sync(codec
, mix_path
);
2292 static int loopback_mixing_put(struct snd_kcontrol
*kcontrol
,
2293 struct snd_ctl_elem_value
*ucontrol
)
2295 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2296 struct hda_gen_spec
*spec
= codec
->spec
;
2297 unsigned int val
= ucontrol
->value
.enumerated
.item
[0];
2299 if (val
== spec
->aamix_mode
)
2301 spec
->aamix_mode
= val
;
2302 update_aamix_paths(codec
, val
, spec
->out_paths
[0],
2303 spec
->aamix_out_paths
[0],
2304 spec
->autocfg
.line_out_type
);
2305 update_aamix_paths(codec
, val
, spec
->hp_paths
[0],
2306 spec
->aamix_out_paths
[1],
2308 update_aamix_paths(codec
, val
, spec
->speaker_paths
[0],
2309 spec
->aamix_out_paths
[2],
2310 AUTO_PIN_SPEAKER_OUT
);
2314 static const struct snd_kcontrol_new loopback_mixing_enum
= {
2315 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2316 .name
= "Loopback Mixing",
2317 .info
= loopback_mixing_info
,
2318 .get
= loopback_mixing_get
,
2319 .put
= loopback_mixing_put
,
2322 static int create_loopback_mixing_ctl(struct hda_codec
*codec
)
2324 struct hda_gen_spec
*spec
= codec
->spec
;
2326 if (!spec
->mixer_nid
)
2328 if (!(spec
->aamix_out_paths
[0] || spec
->aamix_out_paths
[1] ||
2329 spec
->aamix_out_paths
[2]))
2331 if (!snd_hda_gen_add_kctl(spec
, NULL
, &loopback_mixing_enum
))
2333 spec
->have_aamix_ctl
= 1;
2338 * shared headphone/mic handling
2341 static void call_update_outputs(struct hda_codec
*codec
);
2343 /* for shared I/O, change the pin-control accordingly */
2344 static void update_hp_mic(struct hda_codec
*codec
, int adc_mux
, bool force
)
2346 struct hda_gen_spec
*spec
= codec
->spec
;
2351 pin
= spec
->hp_mic_pin
;
2352 as_mic
= spec
->cur_mux
[adc_mux
] == spec
->hp_mic_mux_idx
;
2355 val
= snd_hda_codec_get_pin_target(codec
, pin
);
2365 val
= snd_hda_get_default_vref(codec
, pin
);
2366 /* if the HP pin doesn't support VREF and the codec driver gives an
2367 * alternative pin, set up the VREF on that pin instead
2369 if (val
== AC_PINCTL_VREF_HIZ
&& spec
->shared_mic_vref_pin
) {
2370 const hda_nid_t vref_pin
= spec
->shared_mic_vref_pin
;
2371 unsigned int vref_val
= snd_hda_get_default_vref(codec
, vref_pin
);
2372 if (vref_val
!= AC_PINCTL_VREF_HIZ
)
2373 snd_hda_set_pin_ctl_cache(codec
, vref_pin
,
2374 PIN_IN
| (as_mic
? vref_val
: 0));
2377 if (!spec
->hp_mic_jack_modes
) {
2382 set_pin_target(codec
, pin
, val
, true);
2383 call_hp_automute(codec
, NULL
);
2387 /* create a shared input with the headphone out */
2388 static int create_hp_mic(struct hda_codec
*codec
)
2390 struct hda_gen_spec
*spec
= codec
->spec
;
2391 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
2392 unsigned int defcfg
;
2395 if (!spec
->hp_mic
) {
2396 if (spec
->suppress_hp_mic_detect
)
2398 /* automatic detection: only if no input or a single internal
2399 * input pin is found, try to detect the shared hp/mic
2401 if (cfg
->num_inputs
> 1)
2403 else if (cfg
->num_inputs
== 1) {
2404 defcfg
= snd_hda_codec_get_pincfg(codec
, cfg
->inputs
[0].pin
);
2405 if (snd_hda_get_input_pin_attr(defcfg
) != INPUT_PIN_ATTR_INT
)
2410 spec
->hp_mic
= 0; /* clear once */
2411 if (cfg
->num_inputs
>= AUTO_CFG_MAX_INS
)
2415 if (cfg
->line_out_type
== AUTO_PIN_HP_OUT
&& cfg
->line_outs
> 0)
2416 nid
= cfg
->line_out_pins
[0];
2417 else if (cfg
->hp_outs
> 0)
2418 nid
= cfg
->hp_pins
[0];
2422 if (!(snd_hda_query_pin_caps(codec
, nid
) & AC_PINCAP_IN
))
2423 return 0; /* no input */
2425 cfg
->inputs
[cfg
->num_inputs
].pin
= nid
;
2426 cfg
->inputs
[cfg
->num_inputs
].type
= AUTO_PIN_MIC
;
2427 cfg
->inputs
[cfg
->num_inputs
].is_headphone_mic
= 1;
2430 spec
->hp_mic_pin
= nid
;
2431 /* we can't handle auto-mic together with HP-mic */
2432 spec
->suppress_auto_mic
= 1;
2433 codec_dbg(codec
, "Enable shared I/O jack on NID 0x%x\n", nid
);
2441 static int create_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
);
2443 static const char * const out_jack_texts
[] = {
2444 "Line Out", "Headphone Out",
2447 static int out_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2448 struct snd_ctl_elem_info
*uinfo
)
2450 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 2, out_jack_texts
);
2453 static int out_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2454 struct snd_ctl_elem_value
*ucontrol
)
2456 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2457 hda_nid_t nid
= kcontrol
->private_value
;
2458 if (snd_hda_codec_get_pin_target(codec
, nid
) == PIN_HP
)
2459 ucontrol
->value
.enumerated
.item
[0] = 1;
2461 ucontrol
->value
.enumerated
.item
[0] = 0;
2465 static int out_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2466 struct snd_ctl_elem_value
*ucontrol
)
2468 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2469 hda_nid_t nid
= kcontrol
->private_value
;
2472 val
= ucontrol
->value
.enumerated
.item
[0] ? PIN_HP
: PIN_OUT
;
2473 if (snd_hda_codec_get_pin_target(codec
, nid
) == val
)
2475 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2479 static const struct snd_kcontrol_new out_jack_mode_enum
= {
2480 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2481 .info
= out_jack_mode_info
,
2482 .get
= out_jack_mode_get
,
2483 .put
= out_jack_mode_put
,
2486 static bool find_kctl_name(struct hda_codec
*codec
, const char *name
, int idx
)
2488 struct hda_gen_spec
*spec
= codec
->spec
;
2491 for (i
= 0; i
< spec
->kctls
.used
; i
++) {
2492 struct snd_kcontrol_new
*kctl
= snd_array_elem(&spec
->kctls
, i
);
2493 if (!strcmp(kctl
->name
, name
) && kctl
->index
== idx
)
2499 static void get_jack_mode_name(struct hda_codec
*codec
, hda_nid_t pin
,
2500 char *name
, size_t name_len
)
2502 struct hda_gen_spec
*spec
= codec
->spec
;
2505 snd_hda_get_pin_label(codec
, pin
, &spec
->autocfg
, name
, name_len
, &idx
);
2506 strlcat(name
, " Jack Mode", name_len
);
2508 for (; find_kctl_name(codec
, name
, idx
); idx
++)
2512 static int get_out_jack_num_items(struct hda_codec
*codec
, hda_nid_t pin
)
2514 struct hda_gen_spec
*spec
= codec
->spec
;
2515 if (spec
->add_jack_modes
) {
2516 unsigned int pincap
= snd_hda_query_pin_caps(codec
, pin
);
2517 if ((pincap
& AC_PINCAP_OUT
) && (pincap
& AC_PINCAP_HP_DRV
))
2523 static int create_out_jack_modes(struct hda_codec
*codec
, int num_pins
,
2526 struct hda_gen_spec
*spec
= codec
->spec
;
2529 for (i
= 0; i
< num_pins
; i
++) {
2530 hda_nid_t pin
= pins
[i
];
2531 if (pin
== spec
->hp_mic_pin
)
2533 if (get_out_jack_num_items(codec
, pin
) > 1) {
2534 struct snd_kcontrol_new
*knew
;
2535 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
2536 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2537 knew
= snd_hda_gen_add_kctl(spec
, name
,
2538 &out_jack_mode_enum
);
2541 knew
->private_value
= pin
;
2552 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2555 static const char * const vref_texts
[NUM_VREFS
] = {
2556 "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2557 "", "Mic 80pc Bias", "Mic 100pc Bias"
2560 static unsigned int get_vref_caps(struct hda_codec
*codec
, hda_nid_t pin
)
2562 unsigned int pincap
;
2564 pincap
= snd_hda_query_pin_caps(codec
, pin
);
2565 pincap
= (pincap
& AC_PINCAP_VREF
) >> AC_PINCAP_VREF_SHIFT
;
2566 /* filter out unusual vrefs */
2567 pincap
&= ~(AC_PINCAP_VREF_GRD
| AC_PINCAP_VREF_100
);
2571 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2572 static int get_vref_idx(unsigned int vref_caps
, unsigned int item_idx
)
2574 unsigned int i
, n
= 0;
2576 for (i
= 0; i
< NUM_VREFS
; i
++) {
2577 if (vref_caps
& (1 << i
)) {
2586 /* convert back from the vref ctl index to the enum item index */
2587 static int cvt_from_vref_idx(unsigned int vref_caps
, unsigned int idx
)
2589 unsigned int i
, n
= 0;
2591 for (i
= 0; i
< NUM_VREFS
; i
++) {
2594 if (vref_caps
& (1 << i
))
2600 static int in_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2601 struct snd_ctl_elem_info
*uinfo
)
2603 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2604 hda_nid_t nid
= kcontrol
->private_value
;
2605 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2607 snd_hda_enum_helper_info(kcontrol
, uinfo
, hweight32(vref_caps
),
2609 /* set the right text */
2610 strcpy(uinfo
->value
.enumerated
.name
,
2611 vref_texts
[get_vref_idx(vref_caps
, uinfo
->value
.enumerated
.item
)]);
2615 static int in_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2616 struct snd_ctl_elem_value
*ucontrol
)
2618 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2619 hda_nid_t nid
= kcontrol
->private_value
;
2620 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2623 idx
= snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_VREFEN
;
2624 ucontrol
->value
.enumerated
.item
[0] = cvt_from_vref_idx(vref_caps
, idx
);
2628 static int in_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2629 struct snd_ctl_elem_value
*ucontrol
)
2631 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2632 hda_nid_t nid
= kcontrol
->private_value
;
2633 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2634 unsigned int val
, idx
;
2636 val
= snd_hda_codec_get_pin_target(codec
, nid
);
2637 idx
= cvt_from_vref_idx(vref_caps
, val
& AC_PINCTL_VREFEN
);
2638 if (idx
== ucontrol
->value
.enumerated
.item
[0])
2641 val
&= ~AC_PINCTL_VREFEN
;
2642 val
|= get_vref_idx(vref_caps
, ucontrol
->value
.enumerated
.item
[0]);
2643 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2647 static const struct snd_kcontrol_new in_jack_mode_enum
= {
2648 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2649 .info
= in_jack_mode_info
,
2650 .get
= in_jack_mode_get
,
2651 .put
= in_jack_mode_put
,
2654 static int get_in_jack_num_items(struct hda_codec
*codec
, hda_nid_t pin
)
2656 struct hda_gen_spec
*spec
= codec
->spec
;
2658 if (spec
->add_jack_modes
)
2659 nitems
= hweight32(get_vref_caps(codec
, pin
));
2660 return nitems
? nitems
: 1;
2663 static int create_in_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
)
2665 struct hda_gen_spec
*spec
= codec
->spec
;
2666 struct snd_kcontrol_new
*knew
;
2667 char name
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
2668 unsigned int defcfg
;
2670 if (pin
== spec
->hp_mic_pin
)
2671 return 0; /* already done in create_out_jack_mode() */
2673 /* no jack mode for fixed pins */
2674 defcfg
= snd_hda_codec_get_pincfg(codec
, pin
);
2675 if (snd_hda_get_input_pin_attr(defcfg
) == INPUT_PIN_ATTR_INT
)
2678 /* no multiple vref caps? */
2679 if (get_in_jack_num_items(codec
, pin
) <= 1)
2682 get_jack_mode_name(codec
, pin
, name
, sizeof(name
));
2683 knew
= snd_hda_gen_add_kctl(spec
, name
, &in_jack_mode_enum
);
2686 knew
->private_value
= pin
;
2691 * HP/mic shared jack mode
2693 static int hp_mic_jack_mode_info(struct snd_kcontrol
*kcontrol
,
2694 struct snd_ctl_elem_info
*uinfo
)
2696 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2697 hda_nid_t nid
= kcontrol
->private_value
;
2698 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2699 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2700 const char *text
= NULL
;
2703 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
2705 uinfo
->value
.enumerated
.items
= out_jacks
+ in_jacks
;
2706 if (uinfo
->value
.enumerated
.item
>= uinfo
->value
.enumerated
.items
)
2707 uinfo
->value
.enumerated
.item
= uinfo
->value
.enumerated
.items
- 1;
2708 idx
= uinfo
->value
.enumerated
.item
;
2709 if (idx
< out_jacks
) {
2711 text
= out_jack_texts
[idx
];
2713 text
= "Headphone Out";
2717 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2718 text
= vref_texts
[get_vref_idx(vref_caps
, idx
)];
2723 strcpy(uinfo
->value
.enumerated
.name
, text
);
2727 static int get_cur_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t nid
)
2729 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2730 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2731 unsigned int val
= snd_hda_codec_get_pin_target(codec
, nid
);
2734 if (val
& PIN_OUT
) {
2735 if (out_jacks
> 1 && val
== PIN_HP
)
2737 } else if (val
& PIN_IN
) {
2740 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2741 val
&= AC_PINCTL_VREFEN
;
2742 idx
+= cvt_from_vref_idx(vref_caps
, val
);
2748 static int hp_mic_jack_mode_get(struct snd_kcontrol
*kcontrol
,
2749 struct snd_ctl_elem_value
*ucontrol
)
2751 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2752 hda_nid_t nid
= kcontrol
->private_value
;
2753 ucontrol
->value
.enumerated
.item
[0] =
2754 get_cur_hp_mic_jack_mode(codec
, nid
);
2758 static int hp_mic_jack_mode_put(struct snd_kcontrol
*kcontrol
,
2759 struct snd_ctl_elem_value
*ucontrol
)
2761 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2762 hda_nid_t nid
= kcontrol
->private_value
;
2763 int out_jacks
= get_out_jack_num_items(codec
, nid
);
2764 int in_jacks
= get_in_jack_num_items(codec
, nid
);
2765 unsigned int val
, oldval
, idx
;
2767 oldval
= get_cur_hp_mic_jack_mode(codec
, nid
);
2768 idx
= ucontrol
->value
.enumerated
.item
[0];
2772 if (idx
< out_jacks
) {
2774 val
= idx
? PIN_HP
: PIN_OUT
;
2780 unsigned int vref_caps
= get_vref_caps(codec
, nid
);
2781 val
= snd_hda_codec_get_pin_target(codec
, nid
);
2782 val
&= ~(AC_PINCTL_VREFEN
| PIN_HP
);
2783 val
|= get_vref_idx(vref_caps
, idx
) | PIN_IN
;
2785 val
= snd_hda_get_default_vref(codec
, nid
) | PIN_IN
;
2787 snd_hda_set_pin_ctl_cache(codec
, nid
, val
);
2788 call_hp_automute(codec
, NULL
);
2793 static const struct snd_kcontrol_new hp_mic_jack_mode_enum
= {
2794 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2795 .info
= hp_mic_jack_mode_info
,
2796 .get
= hp_mic_jack_mode_get
,
2797 .put
= hp_mic_jack_mode_put
,
2800 static int create_hp_mic_jack_mode(struct hda_codec
*codec
, hda_nid_t pin
)
2802 struct hda_gen_spec
*spec
= codec
->spec
;
2803 struct snd_kcontrol_new
*knew
;
2805 knew
= snd_hda_gen_add_kctl(spec
, "Headphone Mic Jack Mode",
2806 &hp_mic_jack_mode_enum
);
2809 knew
->private_value
= pin
;
2810 spec
->hp_mic_jack_modes
= 1;
2818 /* add the powersave loopback-list entry */
2819 static int add_loopback_list(struct hda_gen_spec
*spec
, hda_nid_t mix
, int idx
)
2821 struct hda_amp_list
*list
;
2823 list
= snd_array_new(&spec
->loopback_list
);
2827 list
->dir
= HDA_INPUT
;
2829 spec
->loopback
.amplist
= spec
->loopback_list
.list
;
2833 /* return true if either a volume or a mute amp is found for the given
2834 * aamix path; the amp has to be either in the mixer node or its direct leaf
2836 static bool look_for_mix_leaf_ctls(struct hda_codec
*codec
, hda_nid_t mix_nid
,
2837 hda_nid_t pin
, unsigned int *mix_val
,
2838 unsigned int *mute_val
)
2841 const hda_nid_t
*list
;
2844 idx
= snd_hda_get_conn_index(codec
, mix_nid
, pin
, true);
2848 *mix_val
= *mute_val
= 0;
2849 if (nid_has_volume(codec
, mix_nid
, HDA_INPUT
))
2850 *mix_val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
2851 if (nid_has_mute(codec
, mix_nid
, HDA_INPUT
))
2852 *mute_val
= HDA_COMPOSE_AMP_VAL(mix_nid
, 3, idx
, HDA_INPUT
);
2853 if (*mix_val
&& *mute_val
)
2856 /* check leaf node */
2857 num_conns
= snd_hda_get_conn_list(codec
, mix_nid
, &list
);
2858 if (num_conns
< idx
)
2861 if (!*mix_val
&& nid_has_volume(codec
, nid
, HDA_OUTPUT
) &&
2862 !is_ctl_associated(codec
, nid
, HDA_OUTPUT
, 0, NID_PATH_VOL_CTL
))
2863 *mix_val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
2864 if (!*mute_val
&& nid_has_mute(codec
, nid
, HDA_OUTPUT
) &&
2865 !is_ctl_associated(codec
, nid
, HDA_OUTPUT
, 0, NID_PATH_MUTE_CTL
))
2866 *mute_val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
2868 return *mix_val
|| *mute_val
;
2871 /* create input playback/capture controls for the given pin */
2872 static int new_analog_input(struct hda_codec
*codec
, int input_idx
,
2873 hda_nid_t pin
, const char *ctlname
, int ctlidx
,
2876 struct hda_gen_spec
*spec
= codec
->spec
;
2877 struct nid_path
*path
;
2878 unsigned int mix_val
, mute_val
;
2881 if (!look_for_mix_leaf_ctls(codec
, mix_nid
, pin
, &mix_val
, &mute_val
))
2884 path
= snd_hda_add_new_path(codec
, pin
, mix_nid
, 0);
2887 print_nid_path(codec
, "loopback", path
);
2888 spec
->loopback_paths
[input_idx
] = snd_hda_get_path_idx(codec
, path
);
2890 idx
= path
->idx
[path
->depth
- 1];
2892 err
= __add_pb_vol_ctrl(spec
, HDA_CTL_WIDGET_VOL
, ctlname
, ctlidx
, mix_val
);
2895 path
->ctls
[NID_PATH_VOL_CTL
] = mix_val
;
2899 err
= __add_pb_sw_ctrl(spec
, HDA_CTL_WIDGET_MUTE
, ctlname
, ctlidx
, mute_val
);
2902 path
->ctls
[NID_PATH_MUTE_CTL
] = mute_val
;
2905 path
->active
= true;
2906 err
= add_loopback_list(spec
, mix_nid
, idx
);
2910 if (spec
->mixer_nid
!= spec
->mixer_merge_nid
&&
2911 !spec
->loopback_merge_path
) {
2912 path
= snd_hda_add_new_path(codec
, spec
->mixer_nid
,
2913 spec
->mixer_merge_nid
, 0);
2915 print_nid_path(codec
, "loopback-merge", path
);
2916 path
->active
= true;
2917 spec
->loopback_merge_path
=
2918 snd_hda_get_path_idx(codec
, path
);
2925 static int is_input_pin(struct hda_codec
*codec
, hda_nid_t nid
)
2927 unsigned int pincap
= snd_hda_query_pin_caps(codec
, nid
);
2928 return (pincap
& AC_PINCAP_IN
) != 0;
2931 /* Parse the codec tree and retrieve ADCs */
2932 static int fill_adc_nids(struct hda_codec
*codec
)
2934 struct hda_gen_spec
*spec
= codec
->spec
;
2936 hda_nid_t
*adc_nids
= spec
->adc_nids
;
2937 int max_nums
= ARRAY_SIZE(spec
->adc_nids
);
2940 nid
= codec
->start_nid
;
2941 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
2942 unsigned int caps
= get_wcaps(codec
, nid
);
2943 int type
= get_wcaps_type(caps
);
2945 if (type
!= AC_WID_AUD_IN
|| (caps
& AC_WCAP_DIGITAL
))
2947 adc_nids
[nums
] = nid
;
2948 if (++nums
>= max_nums
)
2951 spec
->num_adc_nids
= nums
;
2953 /* copy the detected ADCs to all_adcs[] */
2954 spec
->num_all_adcs
= nums
;
2955 memcpy(spec
->all_adcs
, spec
->adc_nids
, nums
* sizeof(hda_nid_t
));
2960 /* filter out invalid adc_nids that don't give all active input pins;
2961 * if needed, check whether dynamic ADC-switching is available
2963 static int check_dyn_adc_switch(struct hda_codec
*codec
)
2965 struct hda_gen_spec
*spec
= codec
->spec
;
2966 struct hda_input_mux
*imux
= &spec
->input_mux
;
2967 unsigned int ok_bits
;
2972 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
2973 for (i
= 0; i
< imux
->num_items
; i
++) {
2974 if (!spec
->input_paths
[i
][n
])
2977 if (i
>= imux
->num_items
) {
2978 ok_bits
|= (1 << n
);
2984 /* check whether ADC-switch is possible */
2985 for (i
= 0; i
< imux
->num_items
; i
++) {
2986 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
2987 if (spec
->input_paths
[i
][n
]) {
2988 spec
->dyn_adc_idx
[i
] = n
;
2994 codec_dbg(codec
, "enabling ADC switching\n");
2995 spec
->dyn_adc_switch
= 1;
2996 } else if (nums
!= spec
->num_adc_nids
) {
2997 /* shrink the invalid adcs and input paths */
2999 for (n
= 0; n
< spec
->num_adc_nids
; n
++) {
3000 if (!(ok_bits
& (1 << n
)))
3003 spec
->adc_nids
[nums
] = spec
->adc_nids
[n
];
3004 for (i
= 0; i
< imux
->num_items
; i
++) {
3005 invalidate_nid_path(codec
,
3006 spec
->input_paths
[i
][nums
]);
3007 spec
->input_paths
[i
][nums
] =
3008 spec
->input_paths
[i
][n
];
3013 spec
->num_adc_nids
= nums
;
3016 if (imux
->num_items
== 1 ||
3017 (imux
->num_items
== 2 && spec
->hp_mic
)) {
3018 codec_dbg(codec
, "reducing to a single ADC\n");
3019 spec
->num_adc_nids
= 1; /* reduce to a single ADC */
3022 /* single index for individual volumes ctls */
3023 if (!spec
->dyn_adc_switch
&& spec
->multi_cap_vol
)
3024 spec
->num_adc_nids
= 1;
3029 /* parse capture source paths from the given pin and create imux items */
3030 static int parse_capture_source(struct hda_codec
*codec
, hda_nid_t pin
,
3031 int cfg_idx
, int num_adcs
,
3032 const char *label
, int anchor
)
3034 struct hda_gen_spec
*spec
= codec
->spec
;
3035 struct hda_input_mux
*imux
= &spec
->input_mux
;
3036 int imux_idx
= imux
->num_items
;
3037 bool imux_added
= false;
3040 for (c
= 0; c
< num_adcs
; c
++) {
3041 struct nid_path
*path
;
3042 hda_nid_t adc
= spec
->adc_nids
[c
];
3044 if (!is_reachable_path(codec
, pin
, adc
))
3046 path
= snd_hda_add_new_path(codec
, pin
, adc
, anchor
);
3049 print_nid_path(codec
, "input", path
);
3050 spec
->input_paths
[imux_idx
][c
] =
3051 snd_hda_get_path_idx(codec
, path
);
3054 if (spec
->hp_mic_pin
== pin
)
3055 spec
->hp_mic_mux_idx
= imux
->num_items
;
3056 spec
->imux_pins
[imux
->num_items
] = pin
;
3057 snd_hda_add_imux_item(imux
, label
, cfg_idx
, NULL
);
3059 if (spec
->dyn_adc_switch
)
3060 spec
->dyn_adc_idx
[imux_idx
] = c
;
3068 * create playback/capture controls for input pins
3071 /* fill the label for each input at first */
3072 static int fill_input_pin_labels(struct hda_codec
*codec
)
3074 struct hda_gen_spec
*spec
= codec
->spec
;
3075 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3078 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3079 hda_nid_t pin
= cfg
->inputs
[i
].pin
;
3083 if (!is_input_pin(codec
, pin
))
3086 label
= hda_get_autocfg_input_label(codec
, cfg
, i
);
3088 for (j
= i
- 1; j
>= 0; j
--) {
3089 if (spec
->input_labels
[j
] &&
3090 !strcmp(spec
->input_labels
[j
], label
)) {
3091 idx
= spec
->input_label_idxs
[j
] + 1;
3096 spec
->input_labels
[i
] = label
;
3097 spec
->input_label_idxs
[i
] = idx
;
3103 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */
3105 static int create_input_ctls(struct hda_codec
*codec
)
3107 struct hda_gen_spec
*spec
= codec
->spec
;
3108 const struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3109 hda_nid_t mixer
= spec
->mixer_nid
;
3114 num_adcs
= fill_adc_nids(codec
);
3118 err
= fill_input_pin_labels(codec
);
3122 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3125 pin
= cfg
->inputs
[i
].pin
;
3126 if (!is_input_pin(codec
, pin
))
3130 if (cfg
->inputs
[i
].type
== AUTO_PIN_MIC
)
3131 val
|= snd_hda_get_default_vref(codec
, pin
);
3132 if (pin
!= spec
->hp_mic_pin
)
3133 set_pin_target(codec
, pin
, val
, false);
3136 if (is_reachable_path(codec
, pin
, mixer
)) {
3137 err
= new_analog_input(codec
, i
, pin
,
3138 spec
->input_labels
[i
],
3139 spec
->input_label_idxs
[i
],
3146 err
= parse_capture_source(codec
, pin
, i
, num_adcs
,
3147 spec
->input_labels
[i
], -mixer
);
3151 if (spec
->add_jack_modes
) {
3152 err
= create_in_jack_mode(codec
, pin
);
3158 /* add stereo mix when explicitly enabled via hint */
3159 if (mixer
&& spec
->add_stereo_mix_input
&&
3160 snd_hda_get_bool_hint(codec
, "add_stereo_mix_input") > 0) {
3161 err
= parse_capture_source(codec
, mixer
, CFG_IDX_MIX
, num_adcs
,
3175 /* get the input path specified by the given adc and imux indices */
3176 static struct nid_path
*get_input_path(struct hda_codec
*codec
, int adc_idx
, int imux_idx
)
3178 struct hda_gen_spec
*spec
= codec
->spec
;
3179 if (imux_idx
< 0 || imux_idx
>= HDA_MAX_NUM_INPUTS
) {
3183 if (spec
->dyn_adc_switch
)
3184 adc_idx
= spec
->dyn_adc_idx
[imux_idx
];
3185 if (adc_idx
< 0 || adc_idx
>= AUTO_CFG_MAX_INS
) {
3189 return snd_hda_get_path_from_idx(codec
, spec
->input_paths
[imux_idx
][adc_idx
]);
3192 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
3195 static int mux_enum_info(struct snd_kcontrol
*kcontrol
,
3196 struct snd_ctl_elem_info
*uinfo
)
3198 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3199 struct hda_gen_spec
*spec
= codec
->spec
;
3200 return snd_hda_input_mux_info(&spec
->input_mux
, uinfo
);
3203 static int mux_enum_get(struct snd_kcontrol
*kcontrol
,
3204 struct snd_ctl_elem_value
*ucontrol
)
3206 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3207 struct hda_gen_spec
*spec
= codec
->spec
;
3208 /* the ctls are created at once with multiple counts */
3209 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
3211 ucontrol
->value
.enumerated
.item
[0] = spec
->cur_mux
[adc_idx
];
3215 static int mux_enum_put(struct snd_kcontrol
*kcontrol
,
3216 struct snd_ctl_elem_value
*ucontrol
)
3218 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3219 unsigned int adc_idx
= snd_ctl_get_ioffidx(kcontrol
, &ucontrol
->id
);
3220 return mux_select(codec
, adc_idx
,
3221 ucontrol
->value
.enumerated
.item
[0]);
3224 static const struct snd_kcontrol_new cap_src_temp
= {
3225 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3226 .name
= "Input Source",
3227 .info
= mux_enum_info
,
3228 .get
= mux_enum_get
,
3229 .put
= mux_enum_put
,
3233 * capture volume and capture switch ctls
3236 typedef int (*put_call_t
)(struct snd_kcontrol
*kcontrol
,
3237 struct snd_ctl_elem_value
*ucontrol
);
3239 /* call the given amp update function for all amps in the imux list at once */
3240 static int cap_put_caller(struct snd_kcontrol
*kcontrol
,
3241 struct snd_ctl_elem_value
*ucontrol
,
3242 put_call_t func
, int type
)
3244 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3245 struct hda_gen_spec
*spec
= codec
->spec
;
3246 const struct hda_input_mux
*imux
;
3247 struct nid_path
*path
;
3248 int i
, adc_idx
, err
= 0;
3250 imux
= &spec
->input_mux
;
3251 adc_idx
= kcontrol
->id
.index
;
3252 mutex_lock(&codec
->control_mutex
);
3253 /* we use the cache-only update at first since multiple input paths
3254 * may shared the same amp; by updating only caches, the redundant
3255 * writes to hardware can be reduced.
3257 codec
->cached_write
= 1;
3258 for (i
= 0; i
< imux
->num_items
; i
++) {
3259 path
= get_input_path(codec
, adc_idx
, i
);
3260 if (!path
|| !path
->ctls
[type
])
3262 kcontrol
->private_value
= path
->ctls
[type
];
3263 err
= func(kcontrol
, ucontrol
);
3268 codec
->cached_write
= 0;
3269 mutex_unlock(&codec
->control_mutex
);
3270 snd_hda_codec_flush_cache(codec
); /* flush the updates */
3271 if (err
>= 0 && spec
->cap_sync_hook
)
3272 spec
->cap_sync_hook(codec
, kcontrol
, ucontrol
);
3276 /* capture volume ctl callbacks */
3277 #define cap_vol_info snd_hda_mixer_amp_volume_info
3278 #define cap_vol_get snd_hda_mixer_amp_volume_get
3279 #define cap_vol_tlv snd_hda_mixer_amp_tlv
3281 static int cap_vol_put(struct snd_kcontrol
*kcontrol
,
3282 struct snd_ctl_elem_value
*ucontrol
)
3284 return cap_put_caller(kcontrol
, ucontrol
,
3285 snd_hda_mixer_amp_volume_put
,
3289 static const struct snd_kcontrol_new cap_vol_temp
= {
3290 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3291 .name
= "Capture Volume",
3292 .access
= (SNDRV_CTL_ELEM_ACCESS_READWRITE
|
3293 SNDRV_CTL_ELEM_ACCESS_TLV_READ
|
3294 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK
),
3295 .info
= cap_vol_info
,
3298 .tlv
= { .c
= cap_vol_tlv
},
3301 /* capture switch ctl callbacks */
3302 #define cap_sw_info snd_ctl_boolean_stereo_info
3303 #define cap_sw_get snd_hda_mixer_amp_switch_get
3305 static int cap_sw_put(struct snd_kcontrol
*kcontrol
,
3306 struct snd_ctl_elem_value
*ucontrol
)
3308 return cap_put_caller(kcontrol
, ucontrol
,
3309 snd_hda_mixer_amp_switch_put
,
3313 static const struct snd_kcontrol_new cap_sw_temp
= {
3314 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
3315 .name
= "Capture Switch",
3316 .info
= cap_sw_info
,
3321 static int parse_capvol_in_path(struct hda_codec
*codec
, struct nid_path
*path
)
3326 path
->ctls
[NID_PATH_VOL_CTL
] = path
->ctls
[NID_PATH_MUTE_CTL
] = 0;
3327 for (depth
= 0; depth
< 3; depth
++) {
3328 if (depth
>= path
->depth
)
3330 i
= path
->depth
- depth
- 1;
3331 nid
= path
->path
[i
];
3332 if (!path
->ctls
[NID_PATH_VOL_CTL
]) {
3333 if (nid_has_volume(codec
, nid
, HDA_OUTPUT
))
3334 path
->ctls
[NID_PATH_VOL_CTL
] =
3335 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3336 else if (nid_has_volume(codec
, nid
, HDA_INPUT
)) {
3337 int idx
= path
->idx
[i
];
3338 if (!depth
&& codec
->single_adc_amp
)
3340 path
->ctls
[NID_PATH_VOL_CTL
] =
3341 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
3344 if (!path
->ctls
[NID_PATH_MUTE_CTL
]) {
3345 if (nid_has_mute(codec
, nid
, HDA_OUTPUT
))
3346 path
->ctls
[NID_PATH_MUTE_CTL
] =
3347 HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3348 else if (nid_has_mute(codec
, nid
, HDA_INPUT
)) {
3349 int idx
= path
->idx
[i
];
3350 if (!depth
&& codec
->single_adc_amp
)
3352 path
->ctls
[NID_PATH_MUTE_CTL
] =
3353 HDA_COMPOSE_AMP_VAL(nid
, 3, idx
, HDA_INPUT
);
3360 static bool is_inv_dmic_pin(struct hda_codec
*codec
, hda_nid_t nid
)
3362 struct hda_gen_spec
*spec
= codec
->spec
;
3363 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3367 if (!spec
->inv_dmic_split
)
3369 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
3370 if (cfg
->inputs
[i
].pin
!= nid
)
3372 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
3374 val
= snd_hda_codec_get_pincfg(codec
, nid
);
3375 return snd_hda_get_input_pin_attr(val
) == INPUT_PIN_ATTR_INT
;
3380 /* capture switch put callback for a single control with hook call */
3381 static int cap_single_sw_put(struct snd_kcontrol
*kcontrol
,
3382 struct snd_ctl_elem_value
*ucontrol
)
3384 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
3385 struct hda_gen_spec
*spec
= codec
->spec
;
3388 ret
= snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
3392 if (spec
->cap_sync_hook
)
3393 spec
->cap_sync_hook(codec
, kcontrol
, ucontrol
);
3398 static int add_single_cap_ctl(struct hda_codec
*codec
, const char *label
,
3399 int idx
, bool is_switch
, unsigned int ctl
,
3402 struct hda_gen_spec
*spec
= codec
->spec
;
3403 char tmpname
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
3404 int type
= is_switch
? HDA_CTL_WIDGET_MUTE
: HDA_CTL_WIDGET_VOL
;
3405 const char *sfx
= is_switch
? "Switch" : "Volume";
3406 unsigned int chs
= inv_dmic
? 1 : 3;
3407 struct snd_kcontrol_new
*knew
;
3413 snprintf(tmpname
, sizeof(tmpname
),
3414 "%s Capture %s", label
, sfx
);
3416 snprintf(tmpname
, sizeof(tmpname
),
3418 knew
= add_control(spec
, type
, tmpname
, idx
,
3419 amp_val_replace_channels(ctl
, chs
));
3423 knew
->put
= cap_single_sw_put
;
3427 /* Make independent right kcontrol */
3429 snprintf(tmpname
, sizeof(tmpname
),
3430 "Inverted %s Capture %s", label
, sfx
);
3432 snprintf(tmpname
, sizeof(tmpname
),
3433 "Inverted Capture %s", sfx
);
3434 knew
= add_control(spec
, type
, tmpname
, idx
,
3435 amp_val_replace_channels(ctl
, 2));
3439 knew
->put
= cap_single_sw_put
;
3443 /* create single (and simple) capture volume and switch controls */
3444 static int create_single_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
3445 unsigned int vol_ctl
, unsigned int sw_ctl
,
3449 err
= add_single_cap_ctl(codec
, NULL
, idx
, false, vol_ctl
, inv_dmic
);
3452 err
= add_single_cap_ctl(codec
, NULL
, idx
, true, sw_ctl
, inv_dmic
);
3458 /* create bound capture volume and switch controls */
3459 static int create_bind_cap_vol_ctl(struct hda_codec
*codec
, int idx
,
3460 unsigned int vol_ctl
, unsigned int sw_ctl
)
3462 struct hda_gen_spec
*spec
= codec
->spec
;
3463 struct snd_kcontrol_new
*knew
;
3466 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_vol_temp
);
3470 knew
->private_value
= vol_ctl
;
3471 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
3474 knew
= snd_hda_gen_add_kctl(spec
, NULL
, &cap_sw_temp
);
3478 knew
->private_value
= sw_ctl
;
3479 knew
->subdevice
= HDA_SUBDEV_AMP_FLAG
;
3484 /* return the vol ctl when used first in the imux list */
3485 static unsigned int get_first_cap_ctl(struct hda_codec
*codec
, int idx
, int type
)
3487 struct nid_path
*path
;
3491 path
= get_input_path(codec
, 0, idx
);
3494 ctl
= path
->ctls
[type
];
3497 for (i
= 0; i
< idx
- 1; i
++) {
3498 path
= get_input_path(codec
, 0, i
);
3499 if (path
&& path
->ctls
[type
] == ctl
)
3505 /* create individual capture volume and switch controls per input */
3506 static int create_multi_cap_vol_ctl(struct hda_codec
*codec
)
3508 struct hda_gen_spec
*spec
= codec
->spec
;
3509 struct hda_input_mux
*imux
= &spec
->input_mux
;
3512 for (i
= 0; i
< imux
->num_items
; i
++) {
3516 idx
= imux
->items
[i
].index
;
3517 if (idx
>= spec
->autocfg
.num_inputs
)
3519 inv_dmic
= is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]);
3521 for (type
= 0; type
< 2; type
++) {
3522 err
= add_single_cap_ctl(codec
,
3523 spec
->input_labels
[idx
],
3524 spec
->input_label_idxs
[idx
],
3526 get_first_cap_ctl(codec
, i
, type
),
3535 static int create_capture_mixers(struct hda_codec
*codec
)
3537 struct hda_gen_spec
*spec
= codec
->spec
;
3538 struct hda_input_mux
*imux
= &spec
->input_mux
;
3539 int i
, n
, nums
, err
;
3541 if (spec
->dyn_adc_switch
)
3544 nums
= spec
->num_adc_nids
;
3546 if (!spec
->auto_mic
&& imux
->num_items
> 1) {
3547 struct snd_kcontrol_new
*knew
;
3549 name
= nums
> 1 ? "Input Source" : "Capture Source";
3550 knew
= snd_hda_gen_add_kctl(spec
, name
, &cap_src_temp
);
3556 for (n
= 0; n
< nums
; n
++) {
3558 bool multi_cap_vol
= spec
->multi_cap_vol
;
3559 bool inv_dmic
= false;
3563 for (i
= 0; i
< imux
->num_items
; i
++) {
3564 struct nid_path
*path
;
3565 path
= get_input_path(codec
, n
, i
);
3568 parse_capvol_in_path(codec
, path
);
3570 vol
= path
->ctls
[NID_PATH_VOL_CTL
];
3571 else if (vol
!= path
->ctls
[NID_PATH_VOL_CTL
]) {
3573 if (!same_amp_caps(codec
, vol
,
3574 path
->ctls
[NID_PATH_VOL_CTL
], HDA_INPUT
))
3575 multi_cap_vol
= true;
3578 sw
= path
->ctls
[NID_PATH_MUTE_CTL
];
3579 else if (sw
!= path
->ctls
[NID_PATH_MUTE_CTL
]) {
3581 if (!same_amp_caps(codec
, sw
,
3582 path
->ctls
[NID_PATH_MUTE_CTL
], HDA_INPUT
))
3583 multi_cap_vol
= true;
3585 if (is_inv_dmic_pin(codec
, spec
->imux_pins
[i
]))
3590 err
= create_single_cap_vol_ctl(codec
, n
, vol
, sw
,
3592 else if (!multi_cap_vol
&& !inv_dmic
)
3593 err
= create_bind_cap_vol_ctl(codec
, n
, vol
, sw
);
3595 err
= create_multi_cap_vol_ctl(codec
);
3604 * add mic boosts if needed
3607 /* check whether the given amp is feasible as a boost volume */
3608 static bool check_boost_vol(struct hda_codec
*codec
, hda_nid_t nid
,
3613 if (!nid_has_volume(codec
, nid
, dir
) ||
3614 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_VOL_CTL
) ||
3615 is_ctl_associated(codec
, nid
, dir
, idx
, NID_PATH_BOOST_CTL
))
3618 step
= (query_amp_caps(codec
, nid
, dir
) & AC_AMPCAP_STEP_SIZE
)
3619 >> AC_AMPCAP_STEP_SIZE_SHIFT
;
3625 /* look for a boost amp in a widget close to the pin */
3626 static unsigned int look_for_boost_amp(struct hda_codec
*codec
,
3627 struct nid_path
*path
)
3629 unsigned int val
= 0;
3633 for (depth
= 0; depth
< 3; depth
++) {
3634 if (depth
>= path
->depth
- 1)
3636 nid
= path
->path
[depth
];
3637 if (depth
&& check_boost_vol(codec
, nid
, HDA_OUTPUT
, 0)) {
3638 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, 0, HDA_OUTPUT
);
3640 } else if (check_boost_vol(codec
, nid
, HDA_INPUT
,
3641 path
->idx
[depth
])) {
3642 val
= HDA_COMPOSE_AMP_VAL(nid
, 3, path
->idx
[depth
],
3651 static int parse_mic_boost(struct hda_codec
*codec
)
3653 struct hda_gen_spec
*spec
= codec
->spec
;
3654 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
3655 struct hda_input_mux
*imux
= &spec
->input_mux
;
3658 if (!spec
->num_adc_nids
)
3661 for (i
= 0; i
< imux
->num_items
; i
++) {
3662 struct nid_path
*path
;
3665 char boost_label
[SNDRV_CTL_ELEM_ID_NAME_MAXLEN
];
3667 idx
= imux
->items
[i
].index
;
3668 if (idx
>= imux
->num_items
)
3671 /* check only line-in and mic pins */
3672 if (cfg
->inputs
[idx
].type
> AUTO_PIN_LINE_IN
)
3675 path
= get_input_path(codec
, 0, i
);
3679 val
= look_for_boost_amp(codec
, path
);
3683 /* create a boost control */
3684 snprintf(boost_label
, sizeof(boost_label
),
3685 "%s Boost Volume", spec
->input_labels
[idx
]);
3686 if (!add_control(spec
, HDA_CTL_WIDGET_VOL
, boost_label
,
3687 spec
->input_label_idxs
[idx
], val
))
3690 path
->ctls
[NID_PATH_BOOST_CTL
] = val
;
3696 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3698 static void parse_digital(struct hda_codec
*codec
)
3700 struct hda_gen_spec
*spec
= codec
->spec
;
3701 struct nid_path
*path
;
3703 hda_nid_t dig_nid
, pin
;
3705 /* support multiple SPDIFs; the secondary is set up as a slave */
3707 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++) {
3708 pin
= spec
->autocfg
.dig_out_pins
[i
];
3709 dig_nid
= look_for_dac(codec
, pin
, true);
3712 path
= snd_hda_add_new_path(codec
, dig_nid
, pin
, 0);
3715 print_nid_path(codec
, "digout", path
);
3716 path
->active
= true;
3717 spec
->digout_paths
[i
] = snd_hda_get_path_idx(codec
, path
);
3718 set_pin_target(codec
, pin
, PIN_OUT
, false);
3720 spec
->multiout
.dig_out_nid
= dig_nid
;
3721 spec
->dig_out_type
= spec
->autocfg
.dig_out_type
[0];
3723 spec
->multiout
.slave_dig_outs
= spec
->slave_dig_outs
;
3724 if (nums
>= ARRAY_SIZE(spec
->slave_dig_outs
) - 1)
3726 spec
->slave_dig_outs
[nums
- 1] = dig_nid
;
3731 if (spec
->autocfg
.dig_in_pin
) {
3732 pin
= spec
->autocfg
.dig_in_pin
;
3733 dig_nid
= codec
->start_nid
;
3734 for (i
= 0; i
< codec
->num_nodes
; i
++, dig_nid
++) {
3735 unsigned int wcaps
= get_wcaps(codec
, dig_nid
);
3736 if (get_wcaps_type(wcaps
) != AC_WID_AUD_IN
)
3738 if (!(wcaps
& AC_WCAP_DIGITAL
))
3740 path
= snd_hda_add_new_path(codec
, pin
, dig_nid
, 0);
3742 print_nid_path(codec
, "digin", path
);
3743 path
->active
= true;
3744 spec
->dig_in_nid
= dig_nid
;
3745 spec
->digin_path
= snd_hda_get_path_idx(codec
, path
);
3746 set_pin_target(codec
, pin
, PIN_IN
, false);
3755 * input MUX handling
3758 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
);
3760 /* select the given imux item; either unmute exclusively or select the route */
3761 static int mux_select(struct hda_codec
*codec
, unsigned int adc_idx
,
3764 struct hda_gen_spec
*spec
= codec
->spec
;
3765 const struct hda_input_mux
*imux
;
3766 struct nid_path
*old_path
, *path
;
3768 imux
= &spec
->input_mux
;
3769 if (!imux
->num_items
)
3772 if (idx
>= imux
->num_items
)
3773 idx
= imux
->num_items
- 1;
3774 if (spec
->cur_mux
[adc_idx
] == idx
)
3777 old_path
= get_input_path(codec
, adc_idx
, spec
->cur_mux
[adc_idx
]);
3780 if (old_path
->active
)
3781 snd_hda_activate_path(codec
, old_path
, false, false);
3783 spec
->cur_mux
[adc_idx
] = idx
;
3786 update_hp_mic(codec
, adc_idx
, false);
3788 if (spec
->dyn_adc_switch
)
3789 dyn_adc_pcm_resetup(codec
, idx
);
3791 path
= get_input_path(codec
, adc_idx
, idx
);
3796 snd_hda_activate_path(codec
, path
, true, false);
3797 if (spec
->cap_sync_hook
)
3798 spec
->cap_sync_hook(codec
, NULL
, NULL
);
3799 path_power_down_sync(codec
, old_path
);
3805 * Jack detections for HP auto-mute and mic-switch
3808 /* check each pin in the given array; returns true if any of them is plugged */
3809 static bool detect_jacks(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
)
3812 bool present
= false;
3814 for (i
= 0; i
< num_pins
; i
++) {
3815 hda_nid_t nid
= pins
[i
];
3818 /* don't detect pins retasked as inputs */
3819 if (snd_hda_codec_get_pin_target(codec
, nid
) & AC_PINCTL_IN_EN
)
3821 if (snd_hda_jack_detect_state(codec
, nid
) == HDA_JACK_PRESENT
)
3827 /* standard HP/line-out auto-mute helper */
3828 static void do_automute(struct hda_codec
*codec
, int num_pins
, hda_nid_t
*pins
,
3829 int *paths
, bool mute
)
3831 struct hda_gen_spec
*spec
= codec
->spec
;
3834 for (i
= 0; i
< num_pins
; i
++) {
3835 hda_nid_t nid
= pins
[i
];
3836 unsigned int val
, oldval
;
3840 if (spec
->auto_mute_via_amp
) {
3841 struct nid_path
*path
;
3844 path
= snd_hda_get_path_from_idx(codec
, paths
[i
]);
3847 mute_nid
= get_amp_nid_(path
->ctls
[NID_PATH_MUTE_CTL
]);
3851 spec
->mute_bits
|= (1ULL << mute_nid
);
3853 spec
->mute_bits
&= ~(1ULL << mute_nid
);
3854 set_pin_eapd(codec
, nid
, !mute
);
3858 oldval
= snd_hda_codec_get_pin_target(codec
, nid
);
3859 if (oldval
& PIN_IN
)
3860 continue; /* no mute for inputs */
3861 /* don't reset VREF value in case it's controlling
3862 * the amp (see alc861_fixup_asus_amp_vref_0f())
3864 if (spec
->keep_vref_in_automute
)
3865 val
= oldval
& ~PIN_HP
;
3870 /* here we call update_pin_ctl() so that the pinctl is changed
3871 * without changing the pinctl target value;
3872 * the original target value will be still referred at the
3873 * init / resume again
3875 update_pin_ctl(codec
, nid
, val
);
3876 set_pin_eapd(codec
, nid
, !mute
);
3880 /* Toggle outputs muting */
3881 void snd_hda_gen_update_outputs(struct hda_codec
*codec
)
3883 struct hda_gen_spec
*spec
= codec
->spec
;
3887 /* Control HP pins/amps depending on master_mute state;
3888 * in general, HP pins/amps control should be enabled in all cases,
3889 * but currently set only for master_mute, just to be safe
3891 if (spec
->autocfg
.line_out_type
== AUTO_PIN_HP_OUT
)
3892 paths
= spec
->out_paths
;
3894 paths
= spec
->hp_paths
;
3895 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.hp_pins
),
3896 spec
->autocfg
.hp_pins
, paths
, spec
->master_mute
);
3898 if (!spec
->automute_speaker
)
3901 on
= spec
->hp_jack_present
| spec
->line_jack_present
;
3902 on
|= spec
->master_mute
;
3903 spec
->speaker_muted
= on
;
3904 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
)
3905 paths
= spec
->out_paths
;
3907 paths
= spec
->speaker_paths
;
3908 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.speaker_pins
),
3909 spec
->autocfg
.speaker_pins
, paths
, on
);
3911 /* toggle line-out mutes if needed, too */
3912 /* if LO is a copy of either HP or Speaker, don't need to handle it */
3913 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0] ||
3914 spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.speaker_pins
[0])
3916 if (!spec
->automute_lo
)
3919 on
= spec
->hp_jack_present
;
3920 on
|= spec
->master_mute
;
3921 spec
->line_out_muted
= on
;
3922 paths
= spec
->out_paths
;
3923 do_automute(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
3924 spec
->autocfg
.line_out_pins
, paths
, on
);
3926 EXPORT_SYMBOL_GPL(snd_hda_gen_update_outputs
);
3928 static void call_update_outputs(struct hda_codec
*codec
)
3930 struct hda_gen_spec
*spec
= codec
->spec
;
3931 if (spec
->automute_hook
)
3932 spec
->automute_hook(codec
);
3934 snd_hda_gen_update_outputs(codec
);
3936 /* sync the whole vmaster slaves to reflect the new auto-mute status */
3937 if (spec
->auto_mute_via_amp
&& !codec
->bus
->shutdown
)
3938 snd_ctl_sync_vmaster(spec
->vmaster_mute
.sw_kctl
, false);
3941 /* standard HP-automute helper */
3942 void snd_hda_gen_hp_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3944 struct hda_gen_spec
*spec
= codec
->spec
;
3945 hda_nid_t
*pins
= spec
->autocfg
.hp_pins
;
3946 int num_pins
= ARRAY_SIZE(spec
->autocfg
.hp_pins
);
3948 /* No detection for the first HP jack during indep-HP mode */
3949 if (spec
->indep_hp_enabled
) {
3954 spec
->hp_jack_present
= detect_jacks(codec
, num_pins
, pins
);
3955 if (!spec
->detect_hp
|| (!spec
->automute_speaker
&& !spec
->automute_lo
))
3957 call_update_outputs(codec
);
3959 EXPORT_SYMBOL_GPL(snd_hda_gen_hp_automute
);
3961 /* standard line-out-automute helper */
3962 void snd_hda_gen_line_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3964 struct hda_gen_spec
*spec
= codec
->spec
;
3966 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
)
3968 /* check LO jack only when it's different from HP */
3969 if (spec
->autocfg
.line_out_pins
[0] == spec
->autocfg
.hp_pins
[0])
3972 spec
->line_jack_present
=
3973 detect_jacks(codec
, ARRAY_SIZE(spec
->autocfg
.line_out_pins
),
3974 spec
->autocfg
.line_out_pins
);
3975 if (!spec
->automute_speaker
|| !spec
->detect_lo
)
3977 call_update_outputs(codec
);
3979 EXPORT_SYMBOL_GPL(snd_hda_gen_line_automute
);
3981 /* standard mic auto-switch helper */
3982 void snd_hda_gen_mic_autoswitch(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
3984 struct hda_gen_spec
*spec
= codec
->spec
;
3987 if (!spec
->auto_mic
)
3990 for (i
= spec
->am_num_entries
- 1; i
> 0; i
--) {
3991 hda_nid_t pin
= spec
->am_entry
[i
].pin
;
3992 /* don't detect pins retasked as outputs */
3993 if (snd_hda_codec_get_pin_target(codec
, pin
) & AC_PINCTL_OUT_EN
)
3995 if (snd_hda_jack_detect_state(codec
, pin
) == HDA_JACK_PRESENT
) {
3996 mux_select(codec
, 0, spec
->am_entry
[i
].idx
);
4000 mux_select(codec
, 0, spec
->am_entry
[0].idx
);
4002 EXPORT_SYMBOL_GPL(snd_hda_gen_mic_autoswitch
);
4004 /* call appropriate hooks */
4005 static void call_hp_automute(struct hda_codec
*codec
, struct hda_jack_tbl
*jack
)
4007 struct hda_gen_spec
*spec
= codec
->spec
;
4008 if (spec
->hp_automute_hook
)
4009 spec
->hp_automute_hook(codec
, jack
);
4011 snd_hda_gen_hp_automute(codec
, jack
);
4014 static void call_line_automute(struct hda_codec
*codec
,
4015 struct hda_jack_tbl
*jack
)
4017 struct hda_gen_spec
*spec
= codec
->spec
;
4018 if (spec
->line_automute_hook
)
4019 spec
->line_automute_hook(codec
, jack
);
4021 snd_hda_gen_line_automute(codec
, jack
);
4024 static void call_mic_autoswitch(struct hda_codec
*codec
,
4025 struct hda_jack_tbl
*jack
)
4027 struct hda_gen_spec
*spec
= codec
->spec
;
4028 if (spec
->mic_autoswitch_hook
)
4029 spec
->mic_autoswitch_hook(codec
, jack
);
4031 snd_hda_gen_mic_autoswitch(codec
, jack
);
4034 /* update jack retasking */
4035 static void update_automute_all(struct hda_codec
*codec
)
4037 call_hp_automute(codec
, NULL
);
4038 call_line_automute(codec
, NULL
);
4039 call_mic_autoswitch(codec
, NULL
);
4043 * Auto-Mute mode mixer enum support
4045 static int automute_mode_info(struct snd_kcontrol
*kcontrol
,
4046 struct snd_ctl_elem_info
*uinfo
)
4048 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4049 struct hda_gen_spec
*spec
= codec
->spec
;
4050 static const char * const texts3
[] = {
4051 "Disabled", "Speaker Only", "Line Out+Speaker"
4054 if (spec
->automute_speaker_possible
&& spec
->automute_lo_possible
)
4055 return snd_hda_enum_helper_info(kcontrol
, uinfo
, 3, texts3
);
4056 return snd_hda_enum_bool_helper_info(kcontrol
, uinfo
);
4059 static int automute_mode_get(struct snd_kcontrol
*kcontrol
,
4060 struct snd_ctl_elem_value
*ucontrol
)
4062 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4063 struct hda_gen_spec
*spec
= codec
->spec
;
4064 unsigned int val
= 0;
4065 if (spec
->automute_speaker
)
4067 if (spec
->automute_lo
)
4070 ucontrol
->value
.enumerated
.item
[0] = val
;
4074 static int automute_mode_put(struct snd_kcontrol
*kcontrol
,
4075 struct snd_ctl_elem_value
*ucontrol
)
4077 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
4078 struct hda_gen_spec
*spec
= codec
->spec
;
4080 switch (ucontrol
->value
.enumerated
.item
[0]) {
4082 if (!spec
->automute_speaker
&& !spec
->automute_lo
)
4084 spec
->automute_speaker
= 0;
4085 spec
->automute_lo
= 0;
4088 if (spec
->automute_speaker_possible
) {
4089 if (!spec
->automute_lo
&& spec
->automute_speaker
)
4091 spec
->automute_speaker
= 1;
4092 spec
->automute_lo
= 0;
4093 } else if (spec
->automute_lo_possible
) {
4094 if (spec
->automute_lo
)
4096 spec
->automute_lo
= 1;
4101 if (!spec
->automute_lo_possible
|| !spec
->automute_speaker_possible
)
4103 if (spec
->automute_speaker
&& spec
->automute_lo
)
4105 spec
->automute_speaker
= 1;
4106 spec
->automute_lo
= 1;
4111 call_update_outputs(codec
);
4115 static const struct snd_kcontrol_new automute_mode_enum
= {
4116 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
4117 .name
= "Auto-Mute Mode",
4118 .info
= automute_mode_info
,
4119 .get
= automute_mode_get
,
4120 .put
= automute_mode_put
,
4123 static int add_automute_mode_enum(struct hda_codec
*codec
)
4125 struct hda_gen_spec
*spec
= codec
->spec
;
4127 if (!snd_hda_gen_add_kctl(spec
, NULL
, &automute_mode_enum
))
4133 * Check the availability of HP/line-out auto-mute;
4134 * Set up appropriately if really supported
4136 static int check_auto_mute_availability(struct hda_codec
*codec
)
4138 struct hda_gen_spec
*spec
= codec
->spec
;
4139 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4143 if (spec
->suppress_auto_mute
)
4146 if (cfg
->hp_pins
[0])
4148 if (cfg
->line_out_pins
[0])
4150 if (cfg
->speaker_pins
[0])
4152 if (present
< 2) /* need two different output types */
4155 if (!cfg
->speaker_pins
[0] &&
4156 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
) {
4157 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
4158 sizeof(cfg
->speaker_pins
));
4159 cfg
->speaker_outs
= cfg
->line_outs
;
4162 if (!cfg
->hp_pins
[0] &&
4163 cfg
->line_out_type
== AUTO_PIN_HP_OUT
) {
4164 memcpy(cfg
->hp_pins
, cfg
->line_out_pins
,
4165 sizeof(cfg
->hp_pins
));
4166 cfg
->hp_outs
= cfg
->line_outs
;
4169 for (i
= 0; i
< cfg
->hp_outs
; i
++) {
4170 hda_nid_t nid
= cfg
->hp_pins
[i
];
4171 if (!is_jack_detectable(codec
, nid
))
4173 codec_dbg(codec
, "Enable HP auto-muting on NID 0x%x\n", nid
);
4174 snd_hda_jack_detect_enable_callback(codec
, nid
, HDA_GEN_HP_EVENT
,
4176 spec
->detect_hp
= 1;
4179 if (cfg
->line_out_type
== AUTO_PIN_LINE_OUT
&& cfg
->line_outs
) {
4180 if (cfg
->speaker_outs
)
4181 for (i
= 0; i
< cfg
->line_outs
; i
++) {
4182 hda_nid_t nid
= cfg
->line_out_pins
[i
];
4183 if (!is_jack_detectable(codec
, nid
))
4185 codec_dbg(codec
, "Enable Line-Out auto-muting on NID 0x%x\n", nid
);
4186 snd_hda_jack_detect_enable_callback(codec
, nid
,
4187 HDA_GEN_FRONT_EVENT
,
4188 call_line_automute
);
4189 spec
->detect_lo
= 1;
4191 spec
->automute_lo_possible
= spec
->detect_hp
;
4194 spec
->automute_speaker_possible
= cfg
->speaker_outs
&&
4195 (spec
->detect_hp
|| spec
->detect_lo
);
4197 spec
->automute_lo
= spec
->automute_lo_possible
;
4198 spec
->automute_speaker
= spec
->automute_speaker_possible
;
4200 if (spec
->automute_speaker_possible
|| spec
->automute_lo_possible
) {
4201 /* create a control for automute mode */
4202 err
= add_automute_mode_enum(codec
);
4209 /* check whether all auto-mic pins are valid; setup indices if OK */
4210 static bool auto_mic_check_imux(struct hda_codec
*codec
)
4212 struct hda_gen_spec
*spec
= codec
->spec
;
4213 const struct hda_input_mux
*imux
;
4216 imux
= &spec
->input_mux
;
4217 for (i
= 0; i
< spec
->am_num_entries
; i
++) {
4218 spec
->am_entry
[i
].idx
=
4219 find_idx_in_nid_list(spec
->am_entry
[i
].pin
,
4220 spec
->imux_pins
, imux
->num_items
);
4221 if (spec
->am_entry
[i
].idx
< 0)
4222 return false; /* no corresponding imux */
4225 /* we don't need the jack detection for the first pin */
4226 for (i
= 1; i
< spec
->am_num_entries
; i
++)
4227 snd_hda_jack_detect_enable_callback(codec
,
4228 spec
->am_entry
[i
].pin
,
4230 call_mic_autoswitch
);
4234 static int compare_attr(const void *ap
, const void *bp
)
4236 const struct automic_entry
*a
= ap
;
4237 const struct automic_entry
*b
= bp
;
4238 return (int)(a
->attr
- b
->attr
);
4242 * Check the availability of auto-mic switch;
4243 * Set up if really supported
4245 static int check_auto_mic_availability(struct hda_codec
*codec
)
4247 struct hda_gen_spec
*spec
= codec
->spec
;
4248 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
4252 if (spec
->suppress_auto_mic
)
4257 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
4258 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
4260 attr
= snd_hda_codec_get_pincfg(codec
, nid
);
4261 attr
= snd_hda_get_input_pin_attr(attr
);
4262 if (types
& (1 << attr
))
4263 return 0; /* already occupied */
4265 case INPUT_PIN_ATTR_INT
:
4266 if (cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
4267 return 0; /* invalid type */
4269 case INPUT_PIN_ATTR_UNUSED
:
4270 return 0; /* invalid entry */
4272 if (cfg
->inputs
[i
].type
> AUTO_PIN_LINE_IN
)
4273 return 0; /* invalid type */
4274 if (!spec
->line_in_auto_switch
&&
4275 cfg
->inputs
[i
].type
!= AUTO_PIN_MIC
)
4276 return 0; /* only mic is allowed */
4277 if (!is_jack_detectable(codec
, nid
))
4278 return 0; /* no unsol support */
4281 if (num_pins
>= MAX_AUTO_MIC_PINS
)
4283 types
|= (1 << attr
);
4284 spec
->am_entry
[num_pins
].pin
= nid
;
4285 spec
->am_entry
[num_pins
].attr
= attr
;
4292 spec
->am_num_entries
= num_pins
;
4293 /* sort the am_entry in the order of attr so that the pin with a
4294 * higher attr will be selected when the jack is plugged.
4296 sort(spec
->am_entry
, num_pins
, sizeof(spec
->am_entry
[0]),
4297 compare_attr
, NULL
);
4299 if (!auto_mic_check_imux(codec
))
4303 spec
->num_adc_nids
= 1;
4304 spec
->cur_mux
[0] = spec
->am_entry
[0].idx
;
4305 codec_dbg(codec
, "Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4306 spec
->am_entry
[0].pin
,
4307 spec
->am_entry
[1].pin
,
4308 spec
->am_entry
[2].pin
);
4313 /* power_filter hook; make inactive widgets into power down */
4314 unsigned int snd_hda_gen_path_power_filter(struct hda_codec
*codec
,
4316 unsigned int power_state
)
4318 if (power_state
!= AC_PWRST_D0
|| nid
== codec
->afg
)
4320 if (get_wcaps_type(get_wcaps(codec
, nid
)) >= AC_WID_POWER
)
4322 if (is_active_nid_for_any(codec
, nid
))
4326 EXPORT_SYMBOL_GPL(snd_hda_gen_path_power_filter
);
4328 /* mute all aamix inputs initially; parse up to the first leaves */
4329 static void mute_all_mixer_nid(struct hda_codec
*codec
, hda_nid_t mix
)
4332 const hda_nid_t
*conn
;
4335 nums
= snd_hda_get_conn_list(codec
, mix
, &conn
);
4336 has_amp
= nid_has_mute(codec
, mix
, HDA_INPUT
);
4337 for (i
= 0; i
< nums
; i
++) {
4339 snd_hda_codec_amp_stereo(codec
, mix
,
4341 0xff, HDA_AMP_MUTE
);
4342 else if (nid_has_volume(codec
, conn
[i
], HDA_OUTPUT
))
4343 snd_hda_codec_amp_stereo(codec
, conn
[i
],
4345 0xff, HDA_AMP_MUTE
);
4350 * Parse the given BIOS configuration and set up the hda_gen_spec
4352 * return 1 if successful, 0 if the proper config is not found,
4353 * or a negative error code
4355 int snd_hda_gen_parse_auto_config(struct hda_codec
*codec
,
4356 struct auto_pin_cfg
*cfg
)
4358 struct hda_gen_spec
*spec
= codec
->spec
;
4361 parse_user_hints(codec
);
4363 if (spec
->mixer_nid
&& !spec
->mixer_merge_nid
)
4364 spec
->mixer_merge_nid
= spec
->mixer_nid
;
4366 if (cfg
!= &spec
->autocfg
) {
4367 spec
->autocfg
= *cfg
;
4368 cfg
= &spec
->autocfg
;
4371 if (!spec
->main_out_badness
)
4372 spec
->main_out_badness
= &hda_main_out_badness
;
4373 if (!spec
->extra_out_badness
)
4374 spec
->extra_out_badness
= &hda_extra_out_badness
;
4376 fill_all_dac_nids(codec
);
4378 if (!cfg
->line_outs
) {
4379 if (cfg
->dig_outs
|| cfg
->dig_in_pin
) {
4380 spec
->multiout
.max_channels
= 2;
4381 spec
->no_analog
= 1;
4384 if (!cfg
->num_inputs
&& !cfg
->dig_in_pin
)
4385 return 0; /* can't find valid BIOS pin config */
4388 if (!spec
->no_primary_hp
&&
4389 cfg
->line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
4390 cfg
->line_outs
<= cfg
->hp_outs
) {
4391 /* use HP as primary out */
4392 cfg
->speaker_outs
= cfg
->line_outs
;
4393 memcpy(cfg
->speaker_pins
, cfg
->line_out_pins
,
4394 sizeof(cfg
->speaker_pins
));
4395 cfg
->line_outs
= cfg
->hp_outs
;
4396 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
, sizeof(cfg
->hp_pins
));
4398 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
4399 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
4402 err
= parse_output_paths(codec
);
4405 err
= create_multi_channel_mode(codec
);
4408 err
= create_multi_out_ctls(codec
, cfg
);
4411 err
= create_hp_out_ctls(codec
);
4414 err
= create_speaker_out_ctls(codec
);
4417 err
= create_indep_hp_ctls(codec
);
4420 err
= create_loopback_mixing_ctl(codec
);
4423 err
= create_hp_mic(codec
);
4426 err
= create_input_ctls(codec
);
4430 spec
->const_channel_count
= spec
->ext_channel_count
;
4431 /* check the multiple speaker and headphone pins */
4432 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
4433 spec
->const_channel_count
= max(spec
->const_channel_count
,
4434 cfg
->speaker_outs
* 2);
4435 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
)
4436 spec
->const_channel_count
= max(spec
->const_channel_count
,
4438 spec
->multiout
.max_channels
= max(spec
->ext_channel_count
,
4439 spec
->const_channel_count
);
4441 err
= check_auto_mute_availability(codec
);
4445 err
= check_dyn_adc_switch(codec
);
4449 err
= check_auto_mic_availability(codec
);
4453 /* add stereo mix if available and not enabled yet */
4454 if (!spec
->auto_mic
&& spec
->mixer_nid
&&
4455 spec
->add_stereo_mix_input
&&
4456 spec
->input_mux
.num_items
> 1 &&
4457 snd_hda_get_bool_hint(codec
, "add_stereo_mix_input") < 0) {
4458 err
= parse_capture_source(codec
, spec
->mixer_nid
,
4459 CFG_IDX_MIX
, spec
->num_all_adcs
,
4466 err
= create_capture_mixers(codec
);
4470 err
= parse_mic_boost(codec
);
4474 /* create "Headphone Mic Jack Mode" if no input selection is
4475 * available (or user specifies add_jack_modes hint)
4477 if (spec
->hp_mic_pin
&&
4478 (spec
->auto_mic
|| spec
->input_mux
.num_items
== 1 ||
4479 spec
->add_jack_modes
)) {
4480 err
= create_hp_mic_jack_mode(codec
, spec
->hp_mic_pin
);
4485 if (spec
->add_jack_modes
) {
4486 if (cfg
->line_out_type
!= AUTO_PIN_SPEAKER_OUT
) {
4487 err
= create_out_jack_modes(codec
, cfg
->line_outs
,
4488 cfg
->line_out_pins
);
4492 if (cfg
->line_out_type
!= AUTO_PIN_HP_OUT
) {
4493 err
= create_out_jack_modes(codec
, cfg
->hp_outs
,
4500 /* mute all aamix input initially */
4501 if (spec
->mixer_nid
)
4502 mute_all_mixer_nid(codec
, spec
->mixer_nid
);
4505 parse_digital(codec
);
4507 if (spec
->power_down_unused
)
4508 codec
->power_filter
= snd_hda_gen_path_power_filter
;
4510 if (!spec
->no_analog
&& spec
->beep_nid
) {
4511 err
= snd_hda_attach_beep_device(codec
, spec
->beep_nid
);
4518 EXPORT_SYMBOL_GPL(snd_hda_gen_parse_auto_config
);
4522 * Build control elements
4525 /* slave controls for virtual master */
4526 static const char * const slave_pfxs
[] = {
4527 "Front", "Surround", "Center", "LFE", "Side",
4528 "Headphone", "Speaker", "Mono", "Line Out",
4529 "CLFE", "Bass Speaker", "PCM",
4530 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4531 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4536 int snd_hda_gen_build_controls(struct hda_codec
*codec
)
4538 struct hda_gen_spec
*spec
= codec
->spec
;
4541 if (spec
->kctls
.used
) {
4542 err
= snd_hda_add_new_ctls(codec
, spec
->kctls
.list
);
4547 if (spec
->multiout
.dig_out_nid
) {
4548 err
= snd_hda_create_dig_out_ctls(codec
,
4549 spec
->multiout
.dig_out_nid
,
4550 spec
->multiout
.dig_out_nid
,
4551 spec
->pcm_rec
[1].pcm_type
);
4554 if (!spec
->no_analog
) {
4555 err
= snd_hda_create_spdif_share_sw(codec
,
4559 spec
->multiout
.share_spdif
= 1;
4562 if (spec
->dig_in_nid
) {
4563 err
= snd_hda_create_spdif_in_ctls(codec
, spec
->dig_in_nid
);
4568 /* if we have no master control, let's create it */
4569 if (!spec
->no_analog
&&
4570 !snd_hda_find_mixer_ctl(codec
, "Master Playback Volume")) {
4571 err
= snd_hda_add_vmaster(codec
, "Master Playback Volume",
4572 spec
->vmaster_tlv
, slave_pfxs
,
4577 if (!spec
->no_analog
&&
4578 !snd_hda_find_mixer_ctl(codec
, "Master Playback Switch")) {
4579 err
= __snd_hda_add_vmaster(codec
, "Master Playback Switch",
4582 true, &spec
->vmaster_mute
.sw_kctl
);
4585 if (spec
->vmaster_mute
.hook
) {
4586 snd_hda_add_vmaster_hook(codec
, &spec
->vmaster_mute
,
4587 spec
->vmaster_mute_enum
);
4588 snd_hda_sync_vmaster_hook(&spec
->vmaster_mute
);
4592 free_kctls(spec
); /* no longer needed */
4594 err
= snd_hda_jack_add_kctls(codec
, &spec
->autocfg
);
4600 EXPORT_SYMBOL_GPL(snd_hda_gen_build_controls
);
4607 static void call_pcm_playback_hook(struct hda_pcm_stream
*hinfo
,
4608 struct hda_codec
*codec
,
4609 struct snd_pcm_substream
*substream
,
4612 struct hda_gen_spec
*spec
= codec
->spec
;
4613 if (spec
->pcm_playback_hook
)
4614 spec
->pcm_playback_hook(hinfo
, codec
, substream
, action
);
4617 static void call_pcm_capture_hook(struct hda_pcm_stream
*hinfo
,
4618 struct hda_codec
*codec
,
4619 struct snd_pcm_substream
*substream
,
4622 struct hda_gen_spec
*spec
= codec
->spec
;
4623 if (spec
->pcm_capture_hook
)
4624 spec
->pcm_capture_hook(hinfo
, codec
, substream
, action
);
4628 * Analog playback callbacks
4630 static int playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4631 struct hda_codec
*codec
,
4632 struct snd_pcm_substream
*substream
)
4634 struct hda_gen_spec
*spec
= codec
->spec
;
4637 mutex_lock(&spec
->pcm_mutex
);
4638 err
= snd_hda_multi_out_analog_open(codec
,
4639 &spec
->multiout
, substream
,
4642 spec
->active_streams
|= 1 << STREAM_MULTI_OUT
;
4643 call_pcm_playback_hook(hinfo
, codec
, substream
,
4644 HDA_GEN_PCM_ACT_OPEN
);
4646 mutex_unlock(&spec
->pcm_mutex
);
4650 static int playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4651 struct hda_codec
*codec
,
4652 unsigned int stream_tag
,
4653 unsigned int format
,
4654 struct snd_pcm_substream
*substream
)
4656 struct hda_gen_spec
*spec
= codec
->spec
;
4659 err
= snd_hda_multi_out_analog_prepare(codec
, &spec
->multiout
,
4660 stream_tag
, format
, substream
);
4662 call_pcm_playback_hook(hinfo
, codec
, substream
,
4663 HDA_GEN_PCM_ACT_PREPARE
);
4667 static int playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4668 struct hda_codec
*codec
,
4669 struct snd_pcm_substream
*substream
)
4671 struct hda_gen_spec
*spec
= codec
->spec
;
4674 err
= snd_hda_multi_out_analog_cleanup(codec
, &spec
->multiout
);
4676 call_pcm_playback_hook(hinfo
, codec
, substream
,
4677 HDA_GEN_PCM_ACT_CLEANUP
);
4681 static int playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4682 struct hda_codec
*codec
,
4683 struct snd_pcm_substream
*substream
)
4685 struct hda_gen_spec
*spec
= codec
->spec
;
4686 mutex_lock(&spec
->pcm_mutex
);
4687 spec
->active_streams
&= ~(1 << STREAM_MULTI_OUT
);
4688 call_pcm_playback_hook(hinfo
, codec
, substream
,
4689 HDA_GEN_PCM_ACT_CLOSE
);
4690 mutex_unlock(&spec
->pcm_mutex
);
4694 static int capture_pcm_open(struct hda_pcm_stream
*hinfo
,
4695 struct hda_codec
*codec
,
4696 struct snd_pcm_substream
*substream
)
4698 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_OPEN
);
4702 static int capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4703 struct hda_codec
*codec
,
4704 unsigned int stream_tag
,
4705 unsigned int format
,
4706 struct snd_pcm_substream
*substream
)
4708 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
4709 call_pcm_capture_hook(hinfo
, codec
, substream
,
4710 HDA_GEN_PCM_ACT_PREPARE
);
4714 static int capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4715 struct hda_codec
*codec
,
4716 struct snd_pcm_substream
*substream
)
4718 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
4719 call_pcm_capture_hook(hinfo
, codec
, substream
,
4720 HDA_GEN_PCM_ACT_CLEANUP
);
4724 static int capture_pcm_close(struct hda_pcm_stream
*hinfo
,
4725 struct hda_codec
*codec
,
4726 struct snd_pcm_substream
*substream
)
4728 call_pcm_capture_hook(hinfo
, codec
, substream
, HDA_GEN_PCM_ACT_CLOSE
);
4732 static int alt_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4733 struct hda_codec
*codec
,
4734 struct snd_pcm_substream
*substream
)
4736 struct hda_gen_spec
*spec
= codec
->spec
;
4739 mutex_lock(&spec
->pcm_mutex
);
4740 if (!spec
->indep_hp_enabled
)
4743 spec
->active_streams
|= 1 << STREAM_INDEP_HP
;
4744 call_pcm_playback_hook(hinfo
, codec
, substream
,
4745 HDA_GEN_PCM_ACT_OPEN
);
4746 mutex_unlock(&spec
->pcm_mutex
);
4750 static int alt_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4751 struct hda_codec
*codec
,
4752 struct snd_pcm_substream
*substream
)
4754 struct hda_gen_spec
*spec
= codec
->spec
;
4755 mutex_lock(&spec
->pcm_mutex
);
4756 spec
->active_streams
&= ~(1 << STREAM_INDEP_HP
);
4757 call_pcm_playback_hook(hinfo
, codec
, substream
,
4758 HDA_GEN_PCM_ACT_CLOSE
);
4759 mutex_unlock(&spec
->pcm_mutex
);
4763 static int alt_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4764 struct hda_codec
*codec
,
4765 unsigned int stream_tag
,
4766 unsigned int format
,
4767 struct snd_pcm_substream
*substream
)
4769 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
4770 call_pcm_playback_hook(hinfo
, codec
, substream
,
4771 HDA_GEN_PCM_ACT_PREPARE
);
4775 static int alt_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4776 struct hda_codec
*codec
,
4777 struct snd_pcm_substream
*substream
)
4779 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
4780 call_pcm_playback_hook(hinfo
, codec
, substream
,
4781 HDA_GEN_PCM_ACT_CLEANUP
);
4788 static int dig_playback_pcm_open(struct hda_pcm_stream
*hinfo
,
4789 struct hda_codec
*codec
,
4790 struct snd_pcm_substream
*substream
)
4792 struct hda_gen_spec
*spec
= codec
->spec
;
4793 return snd_hda_multi_out_dig_open(codec
, &spec
->multiout
);
4796 static int dig_playback_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4797 struct hda_codec
*codec
,
4798 unsigned int stream_tag
,
4799 unsigned int format
,
4800 struct snd_pcm_substream
*substream
)
4802 struct hda_gen_spec
*spec
= codec
->spec
;
4803 return snd_hda_multi_out_dig_prepare(codec
, &spec
->multiout
,
4804 stream_tag
, format
, substream
);
4807 static int dig_playback_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4808 struct hda_codec
*codec
,
4809 struct snd_pcm_substream
*substream
)
4811 struct hda_gen_spec
*spec
= codec
->spec
;
4812 return snd_hda_multi_out_dig_cleanup(codec
, &spec
->multiout
);
4815 static int dig_playback_pcm_close(struct hda_pcm_stream
*hinfo
,
4816 struct hda_codec
*codec
,
4817 struct snd_pcm_substream
*substream
)
4819 struct hda_gen_spec
*spec
= codec
->spec
;
4820 return snd_hda_multi_out_dig_close(codec
, &spec
->multiout
);
4826 #define alt_capture_pcm_open capture_pcm_open
4827 #define alt_capture_pcm_close capture_pcm_close
4829 static int alt_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4830 struct hda_codec
*codec
,
4831 unsigned int stream_tag
,
4832 unsigned int format
,
4833 struct snd_pcm_substream
*substream
)
4835 struct hda_gen_spec
*spec
= codec
->spec
;
4837 snd_hda_codec_setup_stream(codec
, spec
->adc_nids
[substream
->number
+ 1],
4838 stream_tag
, 0, format
);
4839 call_pcm_capture_hook(hinfo
, codec
, substream
,
4840 HDA_GEN_PCM_ACT_PREPARE
);
4844 static int alt_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4845 struct hda_codec
*codec
,
4846 struct snd_pcm_substream
*substream
)
4848 struct hda_gen_spec
*spec
= codec
->spec
;
4850 snd_hda_codec_cleanup_stream(codec
,
4851 spec
->adc_nids
[substream
->number
+ 1]);
4852 call_pcm_capture_hook(hinfo
, codec
, substream
,
4853 HDA_GEN_PCM_ACT_CLEANUP
);
4859 static const struct hda_pcm_stream pcm_analog_playback
= {
4863 /* NID is set in build_pcms */
4865 .open
= playback_pcm_open
,
4866 .close
= playback_pcm_close
,
4867 .prepare
= playback_pcm_prepare
,
4868 .cleanup
= playback_pcm_cleanup
4872 static const struct hda_pcm_stream pcm_analog_capture
= {
4876 /* NID is set in build_pcms */
4878 .open
= capture_pcm_open
,
4879 .close
= capture_pcm_close
,
4880 .prepare
= capture_pcm_prepare
,
4881 .cleanup
= capture_pcm_cleanup
4885 static const struct hda_pcm_stream pcm_analog_alt_playback
= {
4889 /* NID is set in build_pcms */
4891 .open
= alt_playback_pcm_open
,
4892 .close
= alt_playback_pcm_close
,
4893 .prepare
= alt_playback_pcm_prepare
,
4894 .cleanup
= alt_playback_pcm_cleanup
4898 static const struct hda_pcm_stream pcm_analog_alt_capture
= {
4899 .substreams
= 2, /* can be overridden */
4902 /* NID is set in build_pcms */
4904 .open
= alt_capture_pcm_open
,
4905 .close
= alt_capture_pcm_close
,
4906 .prepare
= alt_capture_pcm_prepare
,
4907 .cleanup
= alt_capture_pcm_cleanup
4911 static const struct hda_pcm_stream pcm_digital_playback
= {
4915 /* NID is set in build_pcms */
4917 .open
= dig_playback_pcm_open
,
4918 .close
= dig_playback_pcm_close
,
4919 .prepare
= dig_playback_pcm_prepare
,
4920 .cleanup
= dig_playback_pcm_cleanup
4924 static const struct hda_pcm_stream pcm_digital_capture
= {
4928 /* NID is set in build_pcms */
4931 /* Used by build_pcms to flag that a PCM has no playback stream */
4932 static const struct hda_pcm_stream pcm_null_stream
= {
4939 * dynamic changing ADC PCM streams
4941 static bool dyn_adc_pcm_resetup(struct hda_codec
*codec
, int cur
)
4943 struct hda_gen_spec
*spec
= codec
->spec
;
4944 hda_nid_t new_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[cur
]];
4946 if (spec
->cur_adc
&& spec
->cur_adc
!= new_adc
) {
4947 /* stream is running, let's swap the current ADC */
4948 __snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
, 1);
4949 spec
->cur_adc
= new_adc
;
4950 snd_hda_codec_setup_stream(codec
, new_adc
,
4951 spec
->cur_adc_stream_tag
, 0,
4952 spec
->cur_adc_format
);
4958 /* analog capture with dynamic dual-adc changes */
4959 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream
*hinfo
,
4960 struct hda_codec
*codec
,
4961 unsigned int stream_tag
,
4962 unsigned int format
,
4963 struct snd_pcm_substream
*substream
)
4965 struct hda_gen_spec
*spec
= codec
->spec
;
4966 spec
->cur_adc
= spec
->adc_nids
[spec
->dyn_adc_idx
[spec
->cur_mux
[0]]];
4967 spec
->cur_adc_stream_tag
= stream_tag
;
4968 spec
->cur_adc_format
= format
;
4969 snd_hda_codec_setup_stream(codec
, spec
->cur_adc
, stream_tag
, 0, format
);
4973 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream
*hinfo
,
4974 struct hda_codec
*codec
,
4975 struct snd_pcm_substream
*substream
)
4977 struct hda_gen_spec
*spec
= codec
->spec
;
4978 snd_hda_codec_cleanup_stream(codec
, spec
->cur_adc
);
4983 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture
= {
4987 .nid
= 0, /* fill later */
4989 .prepare
= dyn_adc_capture_pcm_prepare
,
4990 .cleanup
= dyn_adc_capture_pcm_cleanup
4994 static void fill_pcm_stream_name(char *str
, size_t len
, const char *sfx
,
4995 const char *chip_name
)
5001 strlcpy(str
, chip_name
, len
);
5003 /* drop non-alnum chars after a space */
5004 for (p
= strchr(str
, ' '); p
; p
= strchr(p
+ 1, ' ')) {
5005 if (!isalnum(p
[1])) {
5010 strlcat(str
, sfx
, len
);
5013 /* build PCM streams based on the parsed results */
5014 int snd_hda_gen_build_pcms(struct hda_codec
*codec
)
5016 struct hda_gen_spec
*spec
= codec
->spec
;
5017 struct hda_pcm
*info
= spec
->pcm_rec
;
5018 const struct hda_pcm_stream
*p
;
5019 bool have_multi_adcs
;
5021 codec
->num_pcms
= 1;
5022 codec
->pcm_info
= info
;
5024 if (spec
->no_analog
)
5027 fill_pcm_stream_name(spec
->stream_name_analog
,
5028 sizeof(spec
->stream_name_analog
),
5029 " Analog", codec
->chip_name
);
5030 info
->name
= spec
->stream_name_analog
;
5032 if (spec
->multiout
.num_dacs
> 0) {
5033 p
= spec
->stream_analog_playback
;
5035 p
= &pcm_analog_playback
;
5036 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
5037 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= spec
->multiout
.dac_nids
[0];
5038 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].channels_max
=
5039 spec
->multiout
.max_channels
;
5040 if (spec
->autocfg
.line_out_type
== AUTO_PIN_SPEAKER_OUT
&&
5041 spec
->autocfg
.line_outs
== 2)
5042 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].chmap
=
5045 if (spec
->num_adc_nids
) {
5046 p
= spec
->stream_analog_capture
;
5048 if (spec
->dyn_adc_switch
)
5049 p
= &dyn_adc_pcm_analog_capture
;
5051 p
= &pcm_analog_capture
;
5053 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
5054 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= spec
->adc_nids
[0];
5058 /* SPDIF for stream index #1 */
5059 if (spec
->multiout
.dig_out_nid
|| spec
->dig_in_nid
) {
5060 fill_pcm_stream_name(spec
->stream_name_digital
,
5061 sizeof(spec
->stream_name_digital
),
5062 " Digital", codec
->chip_name
);
5063 codec
->num_pcms
= 2;
5064 codec
->slave_dig_outs
= spec
->multiout
.slave_dig_outs
;
5065 info
= spec
->pcm_rec
+ 1;
5066 info
->name
= spec
->stream_name_digital
;
5067 if (spec
->dig_out_type
)
5068 info
->pcm_type
= spec
->dig_out_type
;
5070 info
->pcm_type
= HDA_PCM_TYPE_SPDIF
;
5071 if (spec
->multiout
.dig_out_nid
) {
5072 p
= spec
->stream_digital_playback
;
5074 p
= &pcm_digital_playback
;
5075 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
5076 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= spec
->multiout
.dig_out_nid
;
5078 if (spec
->dig_in_nid
) {
5079 p
= spec
->stream_digital_capture
;
5081 p
= &pcm_digital_capture
;
5082 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
5083 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= spec
->dig_in_nid
;
5087 if (spec
->no_analog
)
5090 /* If the use of more than one ADC is requested for the current
5091 * model, configure a second analog capture-only PCM.
5093 have_multi_adcs
= (spec
->num_adc_nids
> 1) &&
5094 !spec
->dyn_adc_switch
&& !spec
->auto_mic
;
5095 /* Additional Analaog capture for index #2 */
5096 if (spec
->alt_dac_nid
|| have_multi_adcs
) {
5097 fill_pcm_stream_name(spec
->stream_name_alt_analog
,
5098 sizeof(spec
->stream_name_alt_analog
),
5099 " Alt Analog", codec
->chip_name
);
5100 codec
->num_pcms
= 3;
5101 info
= spec
->pcm_rec
+ 2;
5102 info
->name
= spec
->stream_name_alt_analog
;
5103 if (spec
->alt_dac_nid
) {
5104 p
= spec
->stream_analog_alt_playback
;
5106 p
= &pcm_analog_alt_playback
;
5107 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] = *p
;
5108 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
=
5111 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
] =
5113 info
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].nid
= 0;
5115 if (have_multi_adcs
) {
5116 p
= spec
->stream_analog_alt_capture
;
5118 p
= &pcm_analog_alt_capture
;
5119 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] = *p
;
5120 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
=
5122 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
=
5123 spec
->num_adc_nids
- 1;
5125 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
] =
5127 info
->stream
[SNDRV_PCM_STREAM_CAPTURE
].nid
= 0;
5133 EXPORT_SYMBOL_GPL(snd_hda_gen_build_pcms
);
5137 * Standard auto-parser initializations
5140 /* configure the given path as a proper output */
5141 static void set_output_and_unmute(struct hda_codec
*codec
, int path_idx
)
5143 struct nid_path
*path
;
5146 path
= snd_hda_get_path_from_idx(codec
, path_idx
);
5147 if (!path
|| !path
->depth
)
5149 pin
= path
->path
[path
->depth
- 1];
5150 restore_pin_ctl(codec
, pin
);
5151 snd_hda_activate_path(codec
, path
, path
->active
,
5152 aamix_default(codec
->spec
));
5153 set_pin_eapd(codec
, pin
, path
->active
);
5156 /* initialize primary output paths */
5157 static void init_multi_out(struct hda_codec
*codec
)
5159 struct hda_gen_spec
*spec
= codec
->spec
;
5162 for (i
= 0; i
< spec
->autocfg
.line_outs
; i
++)
5163 set_output_and_unmute(codec
, spec
->out_paths
[i
]);
5167 static void __init_extra_out(struct hda_codec
*codec
, int num_outs
, int *paths
)
5171 for (i
= 0; i
< num_outs
; i
++)
5172 set_output_and_unmute(codec
, paths
[i
]);
5175 /* initialize hp and speaker paths */
5176 static void init_extra_out(struct hda_codec
*codec
)
5178 struct hda_gen_spec
*spec
= codec
->spec
;
5180 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_HP_OUT
)
5181 __init_extra_out(codec
, spec
->autocfg
.hp_outs
, spec
->hp_paths
);
5182 if (spec
->autocfg
.line_out_type
!= AUTO_PIN_SPEAKER_OUT
)
5183 __init_extra_out(codec
, spec
->autocfg
.speaker_outs
,
5184 spec
->speaker_paths
);
5187 /* initialize multi-io paths */
5188 static void init_multi_io(struct hda_codec
*codec
)
5190 struct hda_gen_spec
*spec
= codec
->spec
;
5193 for (i
= 0; i
< spec
->multi_ios
; i
++) {
5194 hda_nid_t pin
= spec
->multi_io
[i
].pin
;
5195 struct nid_path
*path
;
5196 path
= get_multiio_path(codec
, i
);
5199 if (!spec
->multi_io
[i
].ctl_in
)
5200 spec
->multi_io
[i
].ctl_in
=
5201 snd_hda_codec_get_pin_target(codec
, pin
);
5202 snd_hda_activate_path(codec
, path
, path
->active
,
5203 aamix_default(spec
));
5207 static void init_aamix_paths(struct hda_codec
*codec
)
5209 struct hda_gen_spec
*spec
= codec
->spec
;
5211 if (!spec
->have_aamix_ctl
)
5213 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->out_paths
[0],
5214 spec
->aamix_out_paths
[0],
5215 spec
->autocfg
.line_out_type
);
5216 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->hp_paths
[0],
5217 spec
->aamix_out_paths
[1],
5219 update_aamix_paths(codec
, spec
->aamix_mode
, spec
->speaker_paths
[0],
5220 spec
->aamix_out_paths
[2],
5221 AUTO_PIN_SPEAKER_OUT
);
5224 /* set up input pins and loopback paths */
5225 static void init_analog_input(struct hda_codec
*codec
)
5227 struct hda_gen_spec
*spec
= codec
->spec
;
5228 struct auto_pin_cfg
*cfg
= &spec
->autocfg
;
5231 for (i
= 0; i
< cfg
->num_inputs
; i
++) {
5232 hda_nid_t nid
= cfg
->inputs
[i
].pin
;
5233 if (is_input_pin(codec
, nid
))
5234 restore_pin_ctl(codec
, nid
);
5236 /* init loopback inputs */
5237 if (spec
->mixer_nid
) {
5238 resume_path_from_idx(codec
, spec
->loopback_paths
[i
]);
5239 resume_path_from_idx(codec
, spec
->loopback_merge_path
);
5244 /* initialize ADC paths */
5245 static void init_input_src(struct hda_codec
*codec
)
5247 struct hda_gen_spec
*spec
= codec
->spec
;
5248 struct hda_input_mux
*imux
= &spec
->input_mux
;
5249 struct nid_path
*path
;
5252 if (spec
->dyn_adc_switch
)
5255 nums
= spec
->num_adc_nids
;
5257 for (c
= 0; c
< nums
; c
++) {
5258 for (i
= 0; i
< imux
->num_items
; i
++) {
5259 path
= get_input_path(codec
, c
, i
);
5261 bool active
= path
->active
;
5262 if (i
== spec
->cur_mux
[c
])
5264 snd_hda_activate_path(codec
, path
, active
, false);
5268 update_hp_mic(codec
, c
, true);
5271 if (spec
->cap_sync_hook
)
5272 spec
->cap_sync_hook(codec
, NULL
, NULL
);
5275 /* set right pin controls for digital I/O */
5276 static void init_digital(struct hda_codec
*codec
)
5278 struct hda_gen_spec
*spec
= codec
->spec
;
5282 for (i
= 0; i
< spec
->autocfg
.dig_outs
; i
++)
5283 set_output_and_unmute(codec
, spec
->digout_paths
[i
]);
5284 pin
= spec
->autocfg
.dig_in_pin
;
5286 restore_pin_ctl(codec
, pin
);
5287 resume_path_from_idx(codec
, spec
->digin_path
);
5291 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5292 * invalid unsol tags by some reason
5294 static void clear_unsol_on_unused_pins(struct hda_codec
*codec
)
5298 for (i
= 0; i
< codec
->init_pins
.used
; i
++) {
5299 struct hda_pincfg
*pin
= snd_array_elem(&codec
->init_pins
, i
);
5300 hda_nid_t nid
= pin
->nid
;
5301 if (is_jack_detectable(codec
, nid
) &&
5302 !snd_hda_jack_tbl_get(codec
, nid
))
5303 snd_hda_codec_update_cache(codec
, nid
, 0,
5304 AC_VERB_SET_UNSOLICITED_ENABLE
, 0);
5309 * initialize the generic spec;
5310 * this can be put as patch_ops.init function
5312 int snd_hda_gen_init(struct hda_codec
*codec
)
5314 struct hda_gen_spec
*spec
= codec
->spec
;
5316 if (spec
->init_hook
)
5317 spec
->init_hook(codec
);
5319 snd_hda_apply_verbs(codec
);
5321 codec
->cached_write
= 1;
5323 init_multi_out(codec
);
5324 init_extra_out(codec
);
5325 init_multi_io(codec
);
5326 init_aamix_paths(codec
);
5327 init_analog_input(codec
);
5328 init_input_src(codec
);
5329 init_digital(codec
);
5331 clear_unsol_on_unused_pins(codec
);
5333 /* call init functions of standard auto-mute helpers */
5334 update_automute_all(codec
);
5336 snd_hda_codec_flush_cache(codec
);
5338 if (spec
->vmaster_mute
.sw_kctl
&& spec
->vmaster_mute
.hook
)
5339 snd_hda_sync_vmaster_hook(&spec
->vmaster_mute
);
5341 hda_call_check_power_status(codec
, 0x01);
5344 EXPORT_SYMBOL_GPL(snd_hda_gen_init
);
5347 * free the generic spec;
5348 * this can be put as patch_ops.free function
5350 void snd_hda_gen_free(struct hda_codec
*codec
)
5352 snd_hda_apply_fixup(codec
, HDA_FIXUP_ACT_FREE
);
5353 snd_hda_gen_spec_free(codec
->spec
);
5357 EXPORT_SYMBOL_GPL(snd_hda_gen_free
);
5361 * check the loopback power save state;
5362 * this can be put as patch_ops.check_power_status function
5364 int snd_hda_gen_check_power_status(struct hda_codec
*codec
, hda_nid_t nid
)
5366 struct hda_gen_spec
*spec
= codec
->spec
;
5367 return snd_hda_check_amp_list_power(codec
, &spec
->loopback
, nid
);
5369 EXPORT_SYMBOL_GPL(snd_hda_gen_check_power_status
);
5374 * the generic codec support
5377 static const struct hda_codec_ops generic_patch_ops
= {
5378 .build_controls
= snd_hda_gen_build_controls
,
5379 .build_pcms
= snd_hda_gen_build_pcms
,
5380 .init
= snd_hda_gen_init
,
5381 .free
= snd_hda_gen_free
,
5382 .unsol_event
= snd_hda_jack_unsol_event
,
5384 .check_power_status
= snd_hda_gen_check_power_status
,
5388 int snd_hda_parse_generic_codec(struct hda_codec
*codec
)
5390 struct hda_gen_spec
*spec
;
5393 spec
= kzalloc(sizeof(*spec
), GFP_KERNEL
);
5396 snd_hda_gen_spec_init(spec
);
5399 err
= snd_hda_parse_pin_defcfg(codec
, &spec
->autocfg
, NULL
, 0);
5403 err
= snd_hda_gen_parse_auto_config(codec
, &spec
->autocfg
);
5407 codec
->patch_ops
= generic_patch_ops
;
5411 snd_hda_gen_free(codec
);
5414 EXPORT_SYMBOL_GPL(snd_hda_parse_generic_codec
);
5416 MODULE_LICENSE("GPL");
5417 MODULE_DESCRIPTION("Generic HD-audio codec parser");