2 * Universal Interface for Intel High Definition Audio Codec
4 * HD audio interface patch for Realtek ALC codecs
6 * Copyright (c) 2004 Kailang Yang <kailang@realtek.com.tw>
7 * PeiSen Hou <pshou@realtek.com.tw>
8 * Takashi Iwai <tiwai@suse.de>
9 * Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
11 * This driver is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This driver is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/slab.h>
29 #include <linux/pci.h>
30 #include <sound/core.h>
31 #include <sound/jack.h>
32 #include "hda_codec.h"
33 #include "hda_local.h"
36 /* unsol event tags */
37 #define ALC_FRONT_EVENT 0x01
38 #define ALC_DCVOL_EVENT 0x02
39 #define ALC_HP_EVENT 0x04
40 #define ALC_MIC_EVENT 0x08
43 #define GPIO_MASK 0x03
45 /* extra amp-initialization sequence types */
54 struct alc_customize_define {
56 unsigned char port_connectivity;
57 unsigned char check_sum;
58 unsigned char customization;
59 unsigned char external_amp;
60 unsigned int enable_pcbeep:1;
61 unsigned int platform_type:1;
63 unsigned int override:1;
64 unsigned int fixup:1; /* Means that this sku is set by driver, not read from hw */
70 hda_nid_t pin; /* multi-io widget pin NID */
71 hda_nid_t dac; /* DAC to be connected */
72 unsigned int ctl_in; /* cached input-pin control value */
76 ALC_AUTOMUTE_PIN, /* change the pin control */
77 ALC_AUTOMUTE_AMP, /* mute/unmute the pin AMP */
78 ALC_AUTOMUTE_MIXER, /* mute/unmute mixer widget AMP */
82 /* codec parameterization */
83 const struct snd_kcontrol_new *mixers[5]; /* mixer arrays */
84 unsigned int num_mixers;
85 const struct snd_kcontrol_new *cap_mixer; /* capture mixer */
86 unsigned int beep_amp; /* beep amp value, set via set_beep_amp() */
88 const struct hda_verb *init_verbs[10]; /* initialization verbs
92 unsigned int num_init_verbs;
94 char stream_name_analog[32]; /* analog PCM stream */
95 const struct hda_pcm_stream *stream_analog_playback;
96 const struct hda_pcm_stream *stream_analog_capture;
97 const struct hda_pcm_stream *stream_analog_alt_playback;
98 const struct hda_pcm_stream *stream_analog_alt_capture;
100 char stream_name_digital[32]; /* digital PCM stream */
101 const struct hda_pcm_stream *stream_digital_playback;
102 const struct hda_pcm_stream *stream_digital_capture;
105 struct hda_multi_out multiout; /* playback set-up
106 * max_channels, dacs must be set
107 * dig_out_nid and hp_nid are optional
109 hda_nid_t alt_dac_nid;
110 hda_nid_t slave_dig_outs[3]; /* optional - for auto-parsing */
114 unsigned int num_adc_nids;
115 const hda_nid_t *adc_nids;
116 const hda_nid_t *capsrc_nids;
117 hda_nid_t dig_in_nid; /* digital-in NID; optional */
118 hda_nid_t mixer_nid; /* analog-mixer NID */
120 /* capture setup for dynamic dual-adc switch */
122 unsigned int cur_adc_stream_tag;
123 unsigned int cur_adc_format;
126 unsigned int num_mux_defs;
127 const struct hda_input_mux *input_mux;
128 unsigned int cur_mux[3];
129 hda_nid_t ext_mic_pin;
130 hda_nid_t dock_mic_pin;
131 hda_nid_t int_mic_pin;
134 const struct hda_channel_mode *channel_mode;
135 int num_channel_mode;
137 int const_channel_count;
138 int ext_channel_count;
140 /* PCM information */
141 struct hda_pcm pcm_rec[3]; /* used in alc_build_pcms() */
143 /* dynamic controls, init_verbs and input_mux */
144 struct auto_pin_cfg autocfg;
145 struct alc_customize_define cdefine;
146 struct snd_array kctls;
147 struct hda_input_mux private_imux[3];
148 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
149 hda_nid_t private_adc_nids[AUTO_CFG_MAX_OUTS];
150 hda_nid_t private_capsrc_nids[AUTO_CFG_MAX_OUTS];
151 hda_nid_t imux_pins[HDA_MAX_NUM_INPUTS];
152 unsigned int dyn_adc_idx[HDA_MAX_NUM_INPUTS];
153 int int_mic_idx, ext_mic_idx, dock_mic_idx; /* for auto-mic */
156 void (*init_hook)(struct hda_codec *codec);
157 void (*unsol_event)(struct hda_codec *codec, unsigned int res);
158 #ifdef CONFIG_SND_HDA_POWER_SAVE
159 void (*power_hook)(struct hda_codec *codec);
161 void (*shutup)(struct hda_codec *codec);
163 /* for pin sensing */
164 unsigned int jack_present: 1;
165 unsigned int line_jack_present:1;
166 unsigned int master_mute:1;
167 unsigned int auto_mic:1;
168 unsigned int auto_mic_valid_imux:1; /* valid imux for auto-mic */
169 unsigned int automute:1; /* HP automute enabled */
170 unsigned int detect_line:1; /* Line-out detection enabled */
171 unsigned int automute_lines:1; /* automute line-out as well */
172 unsigned int automute_hp_lo:1; /* both HP and LO available */
175 unsigned int no_analog :1; /* digital I/O only */
176 unsigned int dyn_adc_switch:1; /* switch ADCs (for ALC275) */
177 unsigned int single_input_src:1;
178 unsigned int vol_in_capsrc:1; /* use capsrc volume (ADC has no vol) */
180 /* auto-mute control */
182 hda_nid_t automute_mixer_nid[AUTO_CFG_MAX_OUTS];
185 int codec_variant; /* flag for other variants */
187 /* for virtual master */
188 hda_nid_t vmaster_nid;
189 #ifdef CONFIG_SND_HDA_POWER_SAVE
190 struct hda_loopback_check loopback;
195 unsigned int pll_coef_idx, pll_coef_bit;
199 const struct alc_fixup *fixup_list;
200 const char *fixup_name;
204 struct alc_multi_io multi_io[4];
207 #define ALC_MODEL_AUTO 0 /* common for all chips */
209 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
210 int dir, unsigned int bits)
214 if (get_wcaps(codec, nid) & (1 << (dir + 1)))
215 if (query_amp_caps(codec, nid, dir) & bits)
220 #define nid_has_mute(codec, nid, dir) \
221 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE)
222 #define nid_has_volume(codec, nid, dir) \
223 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
228 static int alc_mux_enum_info(struct snd_kcontrol *kcontrol,
229 struct snd_ctl_elem_info *uinfo)
231 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
232 struct alc_spec *spec = codec->spec;
233 unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id);
234 if (mux_idx >= spec->num_mux_defs)
236 if (!spec->input_mux[mux_idx].num_items && mux_idx > 0)
238 return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo);
241 static int alc_mux_enum_get(struct snd_kcontrol *kcontrol,
242 struct snd_ctl_elem_value *ucontrol)
244 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
245 struct alc_spec *spec = codec->spec;
246 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
248 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
252 static bool alc_dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
254 struct alc_spec *spec = codec->spec;
255 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
257 if (spec->cur_adc && spec->cur_adc != new_adc) {
258 /* stream is running, let's swap the current ADC */
259 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
260 spec->cur_adc = new_adc;
261 snd_hda_codec_setup_stream(codec, new_adc,
262 spec->cur_adc_stream_tag, 0,
263 spec->cur_adc_format);
269 /* select the given imux item; either unmute exclusively or select the route */
270 static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx,
271 unsigned int idx, bool force)
273 struct alc_spec *spec = codec->spec;
274 const struct hda_input_mux *imux;
275 unsigned int mux_idx;
279 mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
280 imux = &spec->input_mux[mux_idx];
281 if (!imux->num_items && mux_idx > 0)
282 imux = &spec->input_mux[0];
284 if (idx >= imux->num_items)
285 idx = imux->num_items - 1;
286 if (spec->cur_mux[adc_idx] == idx && !force)
288 spec->cur_mux[adc_idx] = idx;
290 if (spec->dyn_adc_switch) {
291 alc_dyn_adc_pcm_resetup(codec, idx);
292 adc_idx = spec->dyn_adc_idx[idx];
295 nid = spec->capsrc_nids ?
296 spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];
299 if (snd_hda_get_conn_list(codec, nid, NULL) <= 1)
302 type = get_wcaps_type(get_wcaps(codec, nid));
303 if (type == AC_WID_AUD_MIX) {
304 /* Matrix-mixer style (e.g. ALC882) */
305 for (i = 0; i < imux->num_items; i++) {
306 unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
307 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
308 imux->items[i].index,
312 /* MUX style (e.g. ALC880) */
313 snd_hda_codec_write_cache(codec, nid, 0,
314 AC_VERB_SET_CONNECT_SEL,
315 imux->items[idx].index);
320 static int alc_mux_enum_put(struct snd_kcontrol *kcontrol,
321 struct snd_ctl_elem_value *ucontrol)
323 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
324 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
325 return alc_mux_select(codec, adc_idx,
326 ucontrol->value.enumerated.item[0], false);
330 * set up the input pin config (depending on the given auto-pin type)
332 static void alc_set_input_pin(struct hda_codec *codec, hda_nid_t nid,
335 unsigned int val = PIN_IN;
337 if (auto_pin_type == AUTO_PIN_MIC) {
340 oldval = snd_hda_codec_read(codec, nid, 0,
341 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
342 pincap = snd_hda_query_pin_caps(codec, nid);
343 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
344 /* if the default pin setup is vref50, we give it priority */
345 if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50)
347 else if (pincap & AC_PINCAP_VREF_50)
349 else if (pincap & AC_PINCAP_VREF_100)
351 else if (pincap & AC_PINCAP_VREF_GRD)
354 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, val);
358 * Append the given mixer and verb elements for the later use
359 * The mixer array is referred in build_controls(), and init_verbs are
362 static void add_mixer(struct alc_spec *spec, const struct snd_kcontrol_new *mix)
364 if (snd_BUG_ON(spec->num_mixers >= ARRAY_SIZE(spec->mixers)))
366 spec->mixers[spec->num_mixers++] = mix;
369 static void add_verb(struct alc_spec *spec, const struct hda_verb *verb)
371 if (snd_BUG_ON(spec->num_init_verbs >= ARRAY_SIZE(spec->init_verbs)))
373 spec->init_verbs[spec->num_init_verbs++] = verb;
377 * GPIO setup tables, used in initialization
379 /* Enable GPIO mask and set output */
380 static const struct hda_verb alc_gpio1_init_verbs[] = {
381 {0x01, AC_VERB_SET_GPIO_MASK, 0x01},
382 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01},
383 {0x01, AC_VERB_SET_GPIO_DATA, 0x01},
387 static const struct hda_verb alc_gpio2_init_verbs[] = {
388 {0x01, AC_VERB_SET_GPIO_MASK, 0x02},
389 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02},
390 {0x01, AC_VERB_SET_GPIO_DATA, 0x02},
394 static const struct hda_verb alc_gpio3_init_verbs[] = {
395 {0x01, AC_VERB_SET_GPIO_MASK, 0x03},
396 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x03},
397 {0x01, AC_VERB_SET_GPIO_DATA, 0x03},
402 * Fix hardware PLL issue
403 * On some codecs, the analog PLL gating control must be off while
404 * the default value is 1.
406 static void alc_fix_pll(struct hda_codec *codec)
408 struct alc_spec *spec = codec->spec;
413 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX,
415 val = snd_hda_codec_read(codec, spec->pll_nid, 0,
416 AC_VERB_GET_PROC_COEF, 0);
417 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX,
419 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_PROC_COEF,
420 val & ~(1 << spec->pll_coef_bit));
423 static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid,
424 unsigned int coef_idx, unsigned int coef_bit)
426 struct alc_spec *spec = codec->spec;
428 spec->pll_coef_idx = coef_idx;
429 spec->pll_coef_bit = coef_bit;
434 * Jack-reporting via input-jack layer
437 /* initialization of jacks; currently checks only a few known pins */
438 static int alc_init_jacks(struct hda_codec *codec)
440 #ifdef CONFIG_SND_HDA_INPUT_JACK
441 struct alc_spec *spec = codec->spec;
443 unsigned int hp_nid = spec->autocfg.hp_pins[0];
444 unsigned int mic_nid = spec->ext_mic_pin;
445 unsigned int dock_nid = spec->dock_mic_pin;
448 err = snd_hda_input_jack_add(codec, hp_nid,
449 SND_JACK_HEADPHONE, NULL);
452 snd_hda_input_jack_report(codec, hp_nid);
456 err = snd_hda_input_jack_add(codec, mic_nid,
457 SND_JACK_MICROPHONE, NULL);
460 snd_hda_input_jack_report(codec, mic_nid);
463 err = snd_hda_input_jack_add(codec, dock_nid,
464 SND_JACK_MICROPHONE, NULL);
467 snd_hda_input_jack_report(codec, dock_nid);
469 #endif /* CONFIG_SND_HDA_INPUT_JACK */
474 * Jack detections for HP auto-mute and mic-switch
477 /* check each pin in the given array; returns true if any of them is plugged */
478 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
482 for (i = 0; i < num_pins; i++) {
483 hda_nid_t nid = pins[i];
486 snd_hda_input_jack_report(codec, nid);
487 present |= snd_hda_jack_detect(codec, nid);
492 /* standard HP/line-out auto-mute helper */
493 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
494 bool mute, bool hp_out)
496 struct alc_spec *spec = codec->spec;
497 unsigned int mute_bits = mute ? HDA_AMP_MUTE : 0;
498 unsigned int pin_bits = mute ? 0 : (hp_out ? PIN_HP : PIN_OUT);
501 for (i = 0; i < num_pins; i++) {
502 hda_nid_t nid = pins[i];
505 switch (spec->automute_mode) {
506 case ALC_AUTOMUTE_PIN:
507 snd_hda_codec_write(codec, nid, 0,
508 AC_VERB_SET_PIN_WIDGET_CONTROL,
511 case ALC_AUTOMUTE_AMP:
512 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
513 HDA_AMP_MUTE, mute_bits);
515 case ALC_AUTOMUTE_MIXER:
516 nid = spec->automute_mixer_nid[i];
519 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 0,
520 HDA_AMP_MUTE, mute_bits);
521 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 1,
522 HDA_AMP_MUTE, mute_bits);
528 /* Toggle internal speakers muting */
529 static void update_speakers(struct hda_codec *codec)
531 struct alc_spec *spec = codec->spec;
534 /* Control HP pins/amps depending on master_mute state;
535 * in general, HP pins/amps control should be enabled in all cases,
536 * but currently set only for master_mute, just to be safe
538 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
539 spec->autocfg.hp_pins, spec->master_mute, true);
544 on = spec->jack_present | spec->line_jack_present;
545 on |= spec->master_mute;
546 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
547 spec->autocfg.speaker_pins, on, false);
549 /* toggle line-out mutes if needed, too */
550 /* if LO is a copy of either HP or Speaker, don't need to handle it */
551 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
552 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
554 if (!spec->automute_lines || !spec->automute)
557 on = spec->jack_present;
558 on |= spec->master_mute;
559 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
560 spec->autocfg.line_out_pins, on, false);
563 /* standard HP-automute helper */
564 static void alc_hp_automute(struct hda_codec *codec)
566 struct alc_spec *spec = codec->spec;
571 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
572 spec->autocfg.hp_pins);
573 update_speakers(codec);
576 /* standard line-out-automute helper */
577 static void alc_line_automute(struct hda_codec *codec)
579 struct alc_spec *spec = codec->spec;
581 if (!spec->automute || !spec->detect_line)
583 spec->line_jack_present =
584 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
585 spec->autocfg.line_out_pins);
586 update_speakers(codec);
589 #define get_connection_index(codec, mux, nid) \
590 snd_hda_get_conn_index(codec, mux, nid, 0)
592 /* standard mic auto-switch helper */
593 static void alc_mic_automute(struct hda_codec *codec)
595 struct alc_spec *spec = codec->spec;
596 hda_nid_t *pins = spec->imux_pins;
598 if (!spec->auto_mic || !spec->auto_mic_valid_imux)
600 if (snd_BUG_ON(!spec->adc_nids))
602 if (snd_BUG_ON(spec->int_mic_idx < 0 || spec->ext_mic_idx < 0))
605 if (snd_hda_jack_detect(codec, pins[spec->ext_mic_idx]))
606 alc_mux_select(codec, 0, spec->ext_mic_idx, false);
607 else if (spec->dock_mic_idx >= 0 &&
608 snd_hda_jack_detect(codec, pins[spec->dock_mic_idx]))
609 alc_mux_select(codec, 0, spec->dock_mic_idx, false);
611 alc_mux_select(codec, 0, spec->int_mic_idx, false);
613 snd_hda_input_jack_report(codec, pins[spec->ext_mic_idx]);
614 if (spec->dock_mic_idx >= 0)
615 snd_hda_input_jack_report(codec, pins[spec->dock_mic_idx]);
618 /* unsolicited event for HP jack sensing */
619 static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
621 if (codec->vendor_id == 0x10ec0880)
627 alc_hp_automute(codec);
629 case ALC_FRONT_EVENT:
630 alc_line_automute(codec);
633 alc_mic_automute(codec);
638 /* call init functions of standard auto-mute helpers */
639 static void alc_inithook(struct hda_codec *codec)
641 alc_hp_automute(codec);
642 alc_line_automute(codec);
643 alc_mic_automute(codec);
646 /* additional initialization for ALC888 variants */
647 static void alc888_coef_init(struct hda_codec *codec)
651 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0);
652 tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0);
653 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7);
654 if ((tmp & 0xf0) == 0x20)
656 snd_hda_codec_read(codec, 0x20, 0,
657 AC_VERB_SET_PROC_COEF, 0x830);
660 snd_hda_codec_read(codec, 0x20, 0,
661 AC_VERB_SET_PROC_COEF, 0x3030);
664 /* additional initialization for ALC889 variants */
665 static void alc889_coef_init(struct hda_codec *codec)
669 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7);
670 tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0);
671 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7);
672 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, tmp|0x2010);
675 /* turn on/off EAPD control (only if available) */
676 static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
678 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
680 if (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)
681 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_EAPD_BTLENABLE,
685 /* turn on/off EAPD controls of the codec */
686 static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
688 /* We currently only handle front, HP */
689 static hda_nid_t pins[] = {
690 0x0f, 0x10, 0x14, 0x15, 0
693 for (p = pins; *p; p++)
694 set_eapd(codec, *p, on);
697 /* generic shutup callback;
698 * just turning off EPAD and a little pause for avoiding pop-noise
700 static void alc_eapd_shutup(struct hda_codec *codec)
702 alc_auto_setup_eapd(codec, false);
706 /* generic EAPD initialization */
707 static void alc_auto_init_amp(struct hda_codec *codec, int type)
711 alc_auto_setup_eapd(codec, true);
714 snd_hda_sequence_write(codec, alc_gpio1_init_verbs);
717 snd_hda_sequence_write(codec, alc_gpio2_init_verbs);
720 snd_hda_sequence_write(codec, alc_gpio3_init_verbs);
722 case ALC_INIT_DEFAULT:
723 switch (codec->vendor_id) {
725 snd_hda_codec_write(codec, 0x1a, 0,
726 AC_VERB_SET_COEF_INDEX, 7);
727 tmp = snd_hda_codec_read(codec, 0x1a, 0,
728 AC_VERB_GET_PROC_COEF, 0);
729 snd_hda_codec_write(codec, 0x1a, 0,
730 AC_VERB_SET_COEF_INDEX, 7);
731 snd_hda_codec_write(codec, 0x1a, 0,
732 AC_VERB_SET_PROC_COEF,
741 /*case 0x10ec0889:*/ /* this causes an SPDIF problem */
742 alc889_coef_init(codec);
745 alc888_coef_init(codec);
747 #if 0 /* XXX: This may cause the silent output on speaker on some machines */
750 snd_hda_codec_write(codec, 0x20, 0,
751 AC_VERB_SET_COEF_INDEX, 7);
752 tmp = snd_hda_codec_read(codec, 0x20, 0,
753 AC_VERB_GET_PROC_COEF, 0);
754 snd_hda_codec_write(codec, 0x20, 0,
755 AC_VERB_SET_COEF_INDEX, 7);
756 snd_hda_codec_write(codec, 0x20, 0,
757 AC_VERB_SET_PROC_COEF,
767 * Auto-Mute mode mixer enum support
769 static int alc_automute_mode_info(struct snd_kcontrol *kcontrol,
770 struct snd_ctl_elem_info *uinfo)
772 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
773 struct alc_spec *spec = codec->spec;
774 static const char * const texts2[] = {
775 "Disabled", "Enabled"
777 static const char * const texts3[] = {
778 "Disabled", "Speaker Only", "Line-Out+Speaker"
780 const char * const *texts;
782 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
784 if (spec->automute_hp_lo) {
785 uinfo->value.enumerated.items = 3;
788 uinfo->value.enumerated.items = 2;
791 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
792 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
793 strcpy(uinfo->value.enumerated.name,
794 texts[uinfo->value.enumerated.item]);
798 static int alc_automute_mode_get(struct snd_kcontrol *kcontrol,
799 struct snd_ctl_elem_value *ucontrol)
801 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
802 struct alc_spec *spec = codec->spec;
806 else if (!spec->automute_lines)
810 ucontrol->value.enumerated.item[0] = val;
814 static int alc_automute_mode_put(struct snd_kcontrol *kcontrol,
815 struct snd_ctl_elem_value *ucontrol)
817 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
818 struct alc_spec *spec = codec->spec;
820 switch (ucontrol->value.enumerated.item[0]) {
827 if (spec->automute && !spec->automute_lines)
830 spec->automute_lines = 0;
833 if (!spec->automute_hp_lo)
835 if (spec->automute && spec->automute_lines)
838 spec->automute_lines = 1;
843 update_speakers(codec);
847 static const struct snd_kcontrol_new alc_automute_mode_enum = {
848 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
849 .name = "Auto-Mute Mode",
850 .info = alc_automute_mode_info,
851 .get = alc_automute_mode_get,
852 .put = alc_automute_mode_put,
855 static struct snd_kcontrol_new *alc_kcontrol_new(struct alc_spec *spec)
857 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
858 return snd_array_new(&spec->kctls);
861 static int alc_add_automute_mode_enum(struct hda_codec *codec)
863 struct alc_spec *spec = codec->spec;
864 struct snd_kcontrol_new *knew;
866 knew = alc_kcontrol_new(spec);
869 *knew = alc_automute_mode_enum;
870 knew->name = kstrdup("Auto-Mute Mode", GFP_KERNEL);
877 * Check the availability of HP/line-out auto-mute;
878 * Set up appropriately if really supported
880 static void alc_init_auto_hp(struct hda_codec *codec)
882 struct alc_spec *spec = codec->spec;
883 struct auto_pin_cfg *cfg = &spec->autocfg;
889 if (cfg->line_out_pins[0])
891 if (cfg->speaker_pins[0])
893 if (present < 2) /* need two different output types */
896 spec->automute_hp_lo = 1; /* both HP and LO automute */
898 if (!cfg->speaker_pins[0] &&
899 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
900 memcpy(cfg->speaker_pins, cfg->line_out_pins,
901 sizeof(cfg->speaker_pins));
902 cfg->speaker_outs = cfg->line_outs;
905 if (!cfg->hp_pins[0] &&
906 cfg->line_out_type == AUTO_PIN_HP_OUT) {
907 memcpy(cfg->hp_pins, cfg->line_out_pins,
908 sizeof(cfg->hp_pins));
909 cfg->hp_outs = cfg->line_outs;
912 for (i = 0; i < cfg->hp_outs; i++) {
913 hda_nid_t nid = cfg->hp_pins[i];
914 if (!is_jack_detectable(codec, nid))
916 snd_printdd("realtek: Enable HP auto-muting on NID 0x%x\n",
918 snd_hda_codec_write_cache(codec, nid, 0,
919 AC_VERB_SET_UNSOLICITED_ENABLE,
920 AC_USRSP_EN | ALC_HP_EVENT);
922 spec->automute_mode = ALC_AUTOMUTE_PIN;
924 if (spec->automute && cfg->line_out_pins[0] &&
925 cfg->speaker_pins[0] &&
926 cfg->line_out_pins[0] != cfg->hp_pins[0] &&
927 cfg->line_out_pins[0] != cfg->speaker_pins[0]) {
928 for (i = 0; i < cfg->line_outs; i++) {
929 hda_nid_t nid = cfg->line_out_pins[i];
930 if (!is_jack_detectable(codec, nid))
932 snd_printdd("realtek: Enable Line-Out auto-muting "
933 "on NID 0x%x\n", nid);
934 snd_hda_codec_write_cache(codec, nid, 0,
935 AC_VERB_SET_UNSOLICITED_ENABLE,
936 AC_USRSP_EN | ALC_FRONT_EVENT);
937 spec->detect_line = 1;
939 spec->automute_lines = spec->detect_line;
942 if (spec->automute) {
943 /* create a control for automute mode */
944 alc_add_automute_mode_enum(codec);
945 spec->unsol_event = alc_sku_unsol_event;
949 /* return the position of NID in the list, or -1 if not found */
950 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
953 for (i = 0; i < nums; i++)
959 /* check whether dynamic ADC-switching is available */
960 static bool alc_check_dyn_adc_switch(struct hda_codec *codec)
962 struct alc_spec *spec = codec->spec;
963 struct hda_input_mux *imux = &spec->private_imux[0];
967 if (imux != spec->input_mux) /* no dynamic imux? */
970 for (n = 0; n < spec->num_adc_nids; n++) {
971 cap = spec->private_capsrc_nids[n];
972 for (i = 0; i < imux->num_items; i++) {
973 pin = spec->imux_pins[i];
976 if (get_connection_index(codec, cap, pin) < 0)
979 if (i >= imux->num_items)
980 return true; /* no ADC-switch is needed */
983 for (i = 0; i < imux->num_items; i++) {
984 pin = spec->imux_pins[i];
985 for (n = 0; n < spec->num_adc_nids; n++) {
986 cap = spec->private_capsrc_nids[n];
987 idx = get_connection_index(codec, cap, pin);
989 imux->items[i].index = idx;
990 spec->dyn_adc_idx[i] = n;
996 snd_printdd("realtek: enabling ADC switching\n");
997 spec->dyn_adc_switch = 1;
1001 /* rebuild imux for matching with the given auto-mic pins (if not yet) */
1002 static bool alc_rebuild_imux_for_auto_mic(struct hda_codec *codec)
1004 struct alc_spec *spec = codec->spec;
1005 struct hda_input_mux *imux;
1006 static char * const texts[3] = {
1007 "Mic", "Internal Mic", "Dock Mic"
1011 if (!spec->auto_mic)
1013 imux = &spec->private_imux[0];
1014 if (spec->input_mux == imux)
1016 spec->imux_pins[0] = spec->ext_mic_pin;
1017 spec->imux_pins[1] = spec->int_mic_pin;
1018 spec->imux_pins[2] = spec->dock_mic_pin;
1019 for (i = 0; i < 3; i++) {
1020 strcpy(imux->items[i].label, texts[i]);
1021 if (spec->imux_pins[i])
1022 imux->num_items = i + 1;
1024 spec->num_mux_defs = 1;
1025 spec->input_mux = imux;
1029 /* check whether all auto-mic pins are valid; setup indices if OK */
1030 static bool alc_auto_mic_check_imux(struct hda_codec *codec)
1032 struct alc_spec *spec = codec->spec;
1033 const struct hda_input_mux *imux;
1035 if (!spec->auto_mic)
1037 if (spec->auto_mic_valid_imux)
1038 return true; /* already checked */
1040 /* fill up imux indices */
1041 if (!alc_check_dyn_adc_switch(codec)) {
1046 imux = spec->input_mux;
1047 spec->ext_mic_idx = find_idx_in_nid_list(spec->ext_mic_pin,
1048 spec->imux_pins, imux->num_items);
1049 spec->int_mic_idx = find_idx_in_nid_list(spec->int_mic_pin,
1050 spec->imux_pins, imux->num_items);
1051 spec->dock_mic_idx = find_idx_in_nid_list(spec->dock_mic_pin,
1052 spec->imux_pins, imux->num_items);
1053 if (spec->ext_mic_idx < 0 || spec->int_mic_idx < 0) {
1055 return false; /* no corresponding imux */
1058 snd_hda_codec_write_cache(codec, spec->ext_mic_pin, 0,
1059 AC_VERB_SET_UNSOLICITED_ENABLE,
1060 AC_USRSP_EN | ALC_MIC_EVENT);
1061 if (spec->dock_mic_pin)
1062 snd_hda_codec_write_cache(codec, spec->dock_mic_pin, 0,
1063 AC_VERB_SET_UNSOLICITED_ENABLE,
1064 AC_USRSP_EN | ALC_MIC_EVENT);
1066 spec->auto_mic_valid_imux = 1;
1072 * Check the availability of auto-mic switch;
1073 * Set up if really supported
1075 static void alc_init_auto_mic(struct hda_codec *codec)
1077 struct alc_spec *spec = codec->spec;
1078 struct auto_pin_cfg *cfg = &spec->autocfg;
1079 hda_nid_t fixed, ext, dock;
1082 spec->ext_mic_idx = spec->int_mic_idx = spec->dock_mic_idx = -1;
1084 fixed = ext = dock = 0;
1085 for (i = 0; i < cfg->num_inputs; i++) {
1086 hda_nid_t nid = cfg->inputs[i].pin;
1087 unsigned int defcfg;
1088 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1089 switch (snd_hda_get_input_pin_attr(defcfg)) {
1090 case INPUT_PIN_ATTR_INT:
1092 return; /* already occupied */
1093 if (cfg->inputs[i].type != AUTO_PIN_MIC)
1094 return; /* invalid type */
1097 case INPUT_PIN_ATTR_UNUSED:
1098 return; /* invalid entry */
1099 case INPUT_PIN_ATTR_DOCK:
1101 return; /* already occupied */
1102 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
1103 return; /* invalid type */
1108 return; /* already occupied */
1109 if (cfg->inputs[i].type != AUTO_PIN_MIC)
1110 return; /* invalid type */
1121 if (!is_jack_detectable(codec, ext))
1122 return; /* no unsol support */
1123 if (dock && !is_jack_detectable(codec, dock))
1124 return; /* no unsol support */
1126 /* check imux indices */
1127 spec->ext_mic_pin = ext;
1128 spec->int_mic_pin = fixed;
1129 spec->dock_mic_pin = dock;
1132 if (!alc_auto_mic_check_imux(codec))
1135 snd_printdd("realtek: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
1137 spec->unsol_event = alc_sku_unsol_event;
1140 /* check the availabilities of auto-mute and auto-mic switches */
1141 static void alc_auto_check_switches(struct hda_codec *codec)
1143 alc_init_auto_hp(codec);
1144 alc_init_auto_mic(codec);
1148 * Realtek SSID verification
1151 /* Could be any non-zero and even value. When used as fixup, tells
1152 * the driver to ignore any present sku defines.
1154 #define ALC_FIXUP_SKU_IGNORE (2)
1156 static int alc_auto_parse_customize_define(struct hda_codec *codec)
1158 unsigned int ass, tmp, i;
1160 struct alc_spec *spec = codec->spec;
1162 spec->cdefine.enable_pcbeep = 1; /* assume always enabled */
1164 if (spec->cdefine.fixup) {
1165 ass = spec->cdefine.sku_cfg;
1166 if (ass == ALC_FIXUP_SKU_IGNORE)
1171 ass = codec->subsystem_id & 0xffff;
1172 if (ass != codec->bus->pci->subsystem_device && (ass & 1))
1176 if (codec->vendor_id == 0x10ec0260)
1178 ass = snd_hda_codec_get_pincfg(codec, nid);
1181 printk(KERN_INFO "hda_codec: %s: SKU not ready 0x%08x\n",
1182 codec->chip_name, ass);
1188 for (i = 1; i < 16; i++) {
1192 if (((ass >> 16) & 0xf) != tmp)
1195 spec->cdefine.port_connectivity = ass >> 30;
1196 spec->cdefine.enable_pcbeep = (ass & 0x100000) >> 20;
1197 spec->cdefine.check_sum = (ass >> 16) & 0xf;
1198 spec->cdefine.customization = ass >> 8;
1200 spec->cdefine.sku_cfg = ass;
1201 spec->cdefine.external_amp = (ass & 0x38) >> 3;
1202 spec->cdefine.platform_type = (ass & 0x4) >> 2;
1203 spec->cdefine.swap = (ass & 0x2) >> 1;
1204 spec->cdefine.override = ass & 0x1;
1206 snd_printd("SKU: Nid=0x%x sku_cfg=0x%08x\n",
1207 nid, spec->cdefine.sku_cfg);
1208 snd_printd("SKU: port_connectivity=0x%x\n",
1209 spec->cdefine.port_connectivity);
1210 snd_printd("SKU: enable_pcbeep=0x%x\n", spec->cdefine.enable_pcbeep);
1211 snd_printd("SKU: check_sum=0x%08x\n", spec->cdefine.check_sum);
1212 snd_printd("SKU: customization=0x%08x\n", spec->cdefine.customization);
1213 snd_printd("SKU: external_amp=0x%x\n", spec->cdefine.external_amp);
1214 snd_printd("SKU: platform_type=0x%x\n", spec->cdefine.platform_type);
1215 snd_printd("SKU: swap=0x%x\n", spec->cdefine.swap);
1216 snd_printd("SKU: override=0x%x\n", spec->cdefine.override);
1221 /* return true if the given NID is found in the list */
1222 static bool found_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
1224 return find_idx_in_nid_list(nid, list, nums) >= 0;
1227 /* check subsystem ID and set up device-specific initialization;
1228 * return 1 if initialized, 0 if invalid SSID
1230 /* 32-bit subsystem ID for BIOS loading in HD Audio codec.
1231 * 31 ~ 16 : Manufacture ID
1233 * 7 ~ 0 : Assembly ID
1234 * port-A --> pin 39/41, port-E --> pin 14/15, port-D --> pin 35/36
1236 static int alc_subsystem_id(struct hda_codec *codec,
1237 hda_nid_t porta, hda_nid_t porte,
1238 hda_nid_t portd, hda_nid_t porti)
1240 unsigned int ass, tmp, i;
1242 struct alc_spec *spec = codec->spec;
1244 if (spec->cdefine.fixup) {
1245 ass = spec->cdefine.sku_cfg;
1246 if (ass == ALC_FIXUP_SKU_IGNORE)
1251 ass = codec->subsystem_id & 0xffff;
1252 if ((ass != codec->bus->pci->subsystem_device) && (ass & 1))
1255 /* invalid SSID, check the special NID pin defcfg instead */
1257 * 31~30 : port connectivity
1260 * 19~16 : Check sum (15:1)
1265 if (codec->vendor_id == 0x10ec0260)
1267 ass = snd_hda_codec_get_pincfg(codec, nid);
1268 snd_printd("realtek: No valid SSID, "
1269 "checking pincfg 0x%08x for NID 0x%x\n",
1273 if ((ass >> 30) != 1) /* no physical connection */
1278 for (i = 1; i < 16; i++) {
1282 if (((ass >> 16) & 0xf) != tmp)
1285 snd_printd("realtek: Enabling init ASM_ID=0x%04x CODEC_ID=%08x\n",
1286 ass & 0xffff, codec->vendor_id);
1290 * 2 : 0 --> Desktop, 1 --> Laptop
1291 * 3~5 : External Amplifier control
1294 tmp = (ass & 0x38) >> 3; /* external Amp control */
1297 spec->init_amp = ALC_INIT_GPIO1;
1300 spec->init_amp = ALC_INIT_GPIO2;
1303 spec->init_amp = ALC_INIT_GPIO3;
1307 spec->init_amp = ALC_INIT_DEFAULT;
1311 /* is laptop or Desktop and enable the function "Mute internal speaker
1312 * when the external headphone out jack is plugged"
1314 if (!(ass & 0x8000))
1317 * 10~8 : Jack location
1318 * 12~11: Headphone out -> 00: PortA, 01: PortE, 02: PortD, 03: Resvered
1320 * 15 : 1 --> enable the function "Mute internal speaker
1321 * when the external headphone out jack is plugged"
1323 if (!spec->autocfg.hp_pins[0]) {
1325 tmp = (ass >> 11) & 0x3; /* HP to chassis */
1336 if (found_in_nid_list(nid, spec->autocfg.line_out_pins,
1337 spec->autocfg.line_outs))
1339 spec->autocfg.hp_pins[0] = nid;
1344 /* Check the validity of ALC subsystem-id
1345 * ports contains an array of 4 pin NIDs for port-A, E, D and I */
1346 static void alc_ssid_check(struct hda_codec *codec, const hda_nid_t *ports)
1348 if (!alc_subsystem_id(codec, ports[0], ports[1], ports[2], ports[3])) {
1349 struct alc_spec *spec = codec->spec;
1350 snd_printd("realtek: "
1351 "Enable default setup for auto mode as fallback\n");
1352 spec->init_amp = ALC_INIT_DEFAULT;
1357 * Fix-up pin default configurations and add default verbs
1365 struct alc_model_fixup {
1376 const struct alc_pincfg *pins;
1377 const struct hda_verb *verbs;
1378 void (*func)(struct hda_codec *codec,
1379 const struct alc_fixup *fix,
1393 ALC_FIXUP_ACT_PRE_PROBE,
1394 ALC_FIXUP_ACT_PROBE,
1398 static void alc_apply_fixup(struct hda_codec *codec, int action)
1400 struct alc_spec *spec = codec->spec;
1401 int id = spec->fixup_id;
1402 #ifdef CONFIG_SND_DEBUG_VERBOSE
1403 const char *modelname = spec->fixup_name;
1407 if (!spec->fixup_list)
1411 const struct alc_fixup *fix = spec->fixup_list + id;
1412 const struct alc_pincfg *cfg;
1414 switch (fix->type) {
1416 if (action != ALC_FIXUP_ACT_PRE_PROBE || !fix->v.sku)
1418 snd_printdd(KERN_INFO "hda_codec: %s: "
1419 "Apply sku override for %s\n",
1420 codec->chip_name, modelname);
1421 spec->cdefine.sku_cfg = fix->v.sku;
1422 spec->cdefine.fixup = 1;
1424 case ALC_FIXUP_PINS:
1426 if (action != ALC_FIXUP_ACT_PRE_PROBE || !cfg)
1428 snd_printdd(KERN_INFO "hda_codec: %s: "
1429 "Apply pincfg for %s\n",
1430 codec->chip_name, modelname);
1431 for (; cfg->nid; cfg++)
1432 snd_hda_codec_set_pincfg(codec, cfg->nid,
1435 case ALC_FIXUP_VERBS:
1436 if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs)
1438 snd_printdd(KERN_INFO "hda_codec: %s: "
1439 "Apply fix-verbs for %s\n",
1440 codec->chip_name, modelname);
1441 add_verb(codec->spec, fix->v.verbs);
1443 case ALC_FIXUP_FUNC:
1446 snd_printdd(KERN_INFO "hda_codec: %s: "
1447 "Apply fix-func for %s\n",
1448 codec->chip_name, modelname);
1449 fix->v.func(codec, fix, action);
1452 snd_printk(KERN_ERR "hda_codec: %s: "
1453 "Invalid fixup type %d\n",
1454 codec->chip_name, fix->type);
1465 static void alc_pick_fixup(struct hda_codec *codec,
1466 const struct alc_model_fixup *models,
1467 const struct snd_pci_quirk *quirk,
1468 const struct alc_fixup *fixlist)
1470 struct alc_spec *spec = codec->spec;
1472 const char *name = NULL;
1474 if (codec->modelname && models) {
1475 while (models->name) {
1476 if (!strcmp(codec->modelname, models->name)) {
1478 name = models->name;
1485 quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk);
1488 #ifdef CONFIG_SND_DEBUG_VERBOSE
1494 spec->fixup_id = id;
1496 spec->fixup_list = fixlist;
1497 spec->fixup_name = name;
1502 * COEF access helper functions
1504 static int alc_read_coef_idx(struct hda_codec *codec,
1505 unsigned int coef_idx)
1508 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX,
1510 val = snd_hda_codec_read(codec, 0x20, 0,
1511 AC_VERB_GET_PROC_COEF, 0);
1515 static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx,
1516 unsigned int coef_val)
1518 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX,
1520 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF,
1525 * Digital I/O handling
1528 /* set right pin controls for digital I/O */
1529 static void alc_auto_init_digital(struct hda_codec *codec)
1531 struct alc_spec *spec = codec->spec;
1535 for (i = 0; i < spec->autocfg.dig_outs; i++) {
1536 pin = spec->autocfg.dig_out_pins[i];
1539 snd_hda_codec_write(codec, pin, 0,
1540 AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
1542 dac = spec->multiout.dig_out_nid;
1544 dac = spec->slave_dig_outs[i - 1];
1545 if (!dac || !(get_wcaps(codec, dac) & AC_WCAP_OUT_AMP))
1547 snd_hda_codec_write(codec, dac, 0,
1548 AC_VERB_SET_AMP_GAIN_MUTE,
1551 pin = spec->autocfg.dig_in_pin;
1553 snd_hda_codec_write(codec, pin, 0,
1554 AC_VERB_SET_PIN_WIDGET_CONTROL,
1558 /* parse digital I/Os and set up NIDs in BIOS auto-parse mode */
1559 static void alc_auto_parse_digital(struct hda_codec *codec)
1561 struct alc_spec *spec = codec->spec;
1565 /* support multiple SPDIFs; the secondary is set up as a slave */
1566 for (i = 0; i < spec->autocfg.dig_outs; i++) {
1568 err = snd_hda_get_connections(codec,
1569 spec->autocfg.dig_out_pins[i],
1570 conn, ARRAY_SIZE(conn));
1573 dig_nid = conn[0]; /* assume the first element is audio-out */
1575 spec->multiout.dig_out_nid = dig_nid;
1576 spec->dig_out_type = spec->autocfg.dig_out_type[0];
1578 spec->multiout.slave_dig_outs = spec->slave_dig_outs;
1579 if (i >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
1581 spec->slave_dig_outs[i - 1] = dig_nid;
1585 if (spec->autocfg.dig_in_pin) {
1586 dig_nid = codec->start_nid;
1587 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
1588 unsigned int wcaps = get_wcaps(codec, dig_nid);
1589 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
1591 if (!(wcaps & AC_WCAP_DIGITAL))
1593 if (!(wcaps & AC_WCAP_CONN_LIST))
1595 err = get_connection_index(codec, dig_nid,
1596 spec->autocfg.dig_in_pin);
1598 spec->dig_in_nid = dig_nid;
1606 * capture mixer elements
1608 static int alc_cap_vol_info(struct snd_kcontrol *kcontrol,
1609 struct snd_ctl_elem_info *uinfo)
1611 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1612 struct alc_spec *spec = codec->spec;
1616 mutex_lock(&codec->control_mutex);
1617 if (spec->vol_in_capsrc)
1618 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT);
1620 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT);
1621 kcontrol->private_value = val;
1622 err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
1623 mutex_unlock(&codec->control_mutex);
1627 static int alc_cap_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1628 unsigned int size, unsigned int __user *tlv)
1630 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1631 struct alc_spec *spec = codec->spec;
1635 mutex_lock(&codec->control_mutex);
1636 if (spec->vol_in_capsrc)
1637 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT);
1639 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT);
1640 kcontrol->private_value = val;
1641 err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
1642 mutex_unlock(&codec->control_mutex);
1646 typedef int (*getput_call_t)(struct snd_kcontrol *kcontrol,
1647 struct snd_ctl_elem_value *ucontrol);
1649 static int alc_cap_getput_caller(struct snd_kcontrol *kcontrol,
1650 struct snd_ctl_elem_value *ucontrol,
1651 getput_call_t func, bool check_adc_switch)
1653 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1654 struct alc_spec *spec = codec->spec;
1657 mutex_lock(&codec->control_mutex);
1658 if (check_adc_switch && spec->dyn_adc_switch) {
1659 for (i = 0; i < spec->num_adc_nids; i++) {
1660 kcontrol->private_value =
1661 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
1663 err = func(kcontrol, ucontrol);
1668 i = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1669 if (spec->vol_in_capsrc)
1670 kcontrol->private_value =
1671 HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[i],
1674 kcontrol->private_value =
1675 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
1677 err = func(kcontrol, ucontrol);
1680 mutex_unlock(&codec->control_mutex);
1684 static int alc_cap_vol_get(struct snd_kcontrol *kcontrol,
1685 struct snd_ctl_elem_value *ucontrol)
1687 return alc_cap_getput_caller(kcontrol, ucontrol,
1688 snd_hda_mixer_amp_volume_get, false);
1691 static int alc_cap_vol_put(struct snd_kcontrol *kcontrol,
1692 struct snd_ctl_elem_value *ucontrol)
1694 return alc_cap_getput_caller(kcontrol, ucontrol,
1695 snd_hda_mixer_amp_volume_put, true);
1698 /* capture mixer elements */
1699 #define alc_cap_sw_info snd_ctl_boolean_stereo_info
1701 static int alc_cap_sw_get(struct snd_kcontrol *kcontrol,
1702 struct snd_ctl_elem_value *ucontrol)
1704 return alc_cap_getput_caller(kcontrol, ucontrol,
1705 snd_hda_mixer_amp_switch_get, false);
1708 static int alc_cap_sw_put(struct snd_kcontrol *kcontrol,
1709 struct snd_ctl_elem_value *ucontrol)
1711 return alc_cap_getput_caller(kcontrol, ucontrol,
1712 snd_hda_mixer_amp_switch_put, true);
1715 #define _DEFINE_CAPMIX(num) \
1717 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1718 .name = "Capture Switch", \
1719 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
1721 .info = alc_cap_sw_info, \
1722 .get = alc_cap_sw_get, \
1723 .put = alc_cap_sw_put, \
1726 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1727 .name = "Capture Volume", \
1728 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | \
1729 SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
1730 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK), \
1732 .info = alc_cap_vol_info, \
1733 .get = alc_cap_vol_get, \
1734 .put = alc_cap_vol_put, \
1735 .tlv = { .c = alc_cap_vol_tlv }, \
1738 #define _DEFINE_CAPSRC(num) \
1740 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1741 /* .name = "Capture Source", */ \
1742 .name = "Input Source", \
1744 .info = alc_mux_enum_info, \
1745 .get = alc_mux_enum_get, \
1746 .put = alc_mux_enum_put, \
1749 #define DEFINE_CAPMIX(num) \
1750 static const struct snd_kcontrol_new alc_capture_mixer ## num[] = { \
1751 _DEFINE_CAPMIX(num), \
1752 _DEFINE_CAPSRC(num), \
1756 #define DEFINE_CAPMIX_NOSRC(num) \
1757 static const struct snd_kcontrol_new alc_capture_mixer_nosrc ## num[] = { \
1758 _DEFINE_CAPMIX(num), \
1762 /* up to three ADCs */
1766 DEFINE_CAPMIX_NOSRC(1);
1767 DEFINE_CAPMIX_NOSRC(2);
1768 DEFINE_CAPMIX_NOSRC(3);
1771 * virtual master controls
1775 * slave controls for virtual master
1777 static const char * const alc_slave_vols[] = {
1778 "Front Playback Volume",
1779 "Surround Playback Volume",
1780 "Center Playback Volume",
1781 "LFE Playback Volume",
1782 "Side Playback Volume",
1783 "Headphone Playback Volume",
1784 "Speaker Playback Volume",
1785 "Mono Playback Volume",
1786 "Line-Out Playback Volume",
1790 static const char * const alc_slave_sws[] = {
1791 "Front Playback Switch",
1792 "Surround Playback Switch",
1793 "Center Playback Switch",
1794 "LFE Playback Switch",
1795 "Side Playback Switch",
1796 "Headphone Playback Switch",
1797 "Speaker Playback Switch",
1798 "Mono Playback Switch",
1799 "IEC958 Playback Switch",
1800 "Line-Out Playback Switch",
1805 * build control elements
1808 #define NID_MAPPING (-1)
1810 #define SUBDEV_SPEAKER_ (0 << 6)
1811 #define SUBDEV_HP_ (1 << 6)
1812 #define SUBDEV_LINE_ (2 << 6)
1813 #define SUBDEV_SPEAKER(x) (SUBDEV_SPEAKER_ | ((x) & 0x3f))
1814 #define SUBDEV_HP(x) (SUBDEV_HP_ | ((x) & 0x3f))
1815 #define SUBDEV_LINE(x) (SUBDEV_LINE_ | ((x) & 0x3f))
1817 static void alc_free_kctls(struct hda_codec *codec);
1819 #ifdef CONFIG_SND_HDA_INPUT_BEEP
1820 /* additional beep mixers; the actual parameters are overwritten at build */
1821 static const struct snd_kcontrol_new alc_beep_mixer[] = {
1822 HDA_CODEC_VOLUME("Beep Playback Volume", 0, 0, HDA_INPUT),
1823 HDA_CODEC_MUTE_BEEP("Beep Playback Switch", 0, 0, HDA_INPUT),
1828 static int alc_build_controls(struct hda_codec *codec)
1830 struct alc_spec *spec = codec->spec;
1831 struct snd_kcontrol *kctl = NULL;
1832 const struct snd_kcontrol_new *knew;
1837 for (i = 0; i < spec->num_mixers; i++) {
1838 err = snd_hda_add_new_ctls(codec, spec->mixers[i]);
1842 if (spec->cap_mixer) {
1843 err = snd_hda_add_new_ctls(codec, spec->cap_mixer);
1847 if (spec->multiout.dig_out_nid) {
1848 err = snd_hda_create_spdif_out_ctls(codec,
1849 spec->multiout.dig_out_nid,
1850 spec->multiout.dig_out_nid);
1853 if (!spec->no_analog) {
1854 err = snd_hda_create_spdif_share_sw(codec,
1858 spec->multiout.share_spdif = 1;
1861 if (spec->dig_in_nid) {
1862 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
1867 #ifdef CONFIG_SND_HDA_INPUT_BEEP
1868 /* create beep controls if needed */
1869 if (spec->beep_amp) {
1870 const struct snd_kcontrol_new *knew;
1871 for (knew = alc_beep_mixer; knew->name; knew++) {
1872 struct snd_kcontrol *kctl;
1873 kctl = snd_ctl_new1(knew, codec);
1876 kctl->private_value = spec->beep_amp;
1877 err = snd_hda_ctl_add(codec, 0, kctl);
1884 /* if we have no master control, let's create it */
1885 if (!spec->no_analog &&
1886 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
1887 unsigned int vmaster_tlv[4];
1888 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1889 HDA_OUTPUT, vmaster_tlv);
1890 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
1891 vmaster_tlv, alc_slave_vols);
1895 if (!spec->no_analog &&
1896 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
1897 err = snd_hda_add_vmaster(codec, "Master Playback Switch",
1898 NULL, alc_slave_sws);
1903 /* assign Capture Source enums to NID */
1904 if (spec->capsrc_nids || spec->adc_nids) {
1905 kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
1907 kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
1908 for (i = 0; kctl && i < kctl->count; i++) {
1909 const hda_nid_t *nids = spec->capsrc_nids;
1911 nids = spec->adc_nids;
1912 err = snd_hda_add_nid(codec, kctl, i, nids[i]);
1917 if (spec->cap_mixer && spec->adc_nids) {
1918 const char *kname = kctl ? kctl->id.name : NULL;
1919 for (knew = spec->cap_mixer; knew->name; knew++) {
1920 if (kname && strcmp(knew->name, kname) == 0)
1922 kctl = snd_hda_find_mixer_ctl(codec, knew->name);
1923 for (i = 0; kctl && i < kctl->count; i++) {
1924 err = snd_hda_add_nid(codec, kctl, i,
1932 /* other nid->control mapping */
1933 for (i = 0; i < spec->num_mixers; i++) {
1934 for (knew = spec->mixers[i]; knew->name; knew++) {
1935 if (knew->iface != NID_MAPPING)
1937 kctl = snd_hda_find_mixer_ctl(codec, knew->name);
1940 u = knew->subdevice;
1941 for (j = 0; j < 4; j++, u >>= 8) {
1946 case SUBDEV_SPEAKER_:
1947 nid = spec->autocfg.speaker_pins[nid];
1950 nid = spec->autocfg.line_out_pins[nid];
1953 nid = spec->autocfg.hp_pins[nid];
1958 err = snd_hda_add_nid(codec, kctl, 0, nid);
1962 u = knew->private_value;
1963 for (j = 0; j < 4; j++, u >>= 8) {
1967 err = snd_hda_add_nid(codec, kctl, 0, nid);
1974 alc_free_kctls(codec); /* no longer needed */
1984 static void alc_init_special_input_src(struct hda_codec *codec);
1986 static int alc_init(struct hda_codec *codec)
1988 struct alc_spec *spec = codec->spec;
1992 alc_auto_init_amp(codec, spec->init_amp);
1994 for (i = 0; i < spec->num_init_verbs; i++)
1995 snd_hda_sequence_write(codec, spec->init_verbs[i]);
1996 alc_init_special_input_src(codec);
1998 if (spec->init_hook)
1999 spec->init_hook(codec);
2001 alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT);
2003 hda_call_check_power_status(codec, 0x01);
2007 static void alc_unsol_event(struct hda_codec *codec, unsigned int res)
2009 struct alc_spec *spec = codec->spec;
2011 if (spec->unsol_event)
2012 spec->unsol_event(codec, res);
2015 #ifdef CONFIG_SND_HDA_POWER_SAVE
2016 static int alc_check_power_status(struct hda_codec *codec, hda_nid_t nid)
2018 struct alc_spec *spec = codec->spec;
2019 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
2024 * Analog playback callbacks
2026 static int alc_playback_pcm_open(struct hda_pcm_stream *hinfo,
2027 struct hda_codec *codec,
2028 struct snd_pcm_substream *substream)
2030 struct alc_spec *spec = codec->spec;
2031 return snd_hda_multi_out_analog_open(codec, &spec->multiout, substream,
2035 static int alc_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2036 struct hda_codec *codec,
2037 unsigned int stream_tag,
2038 unsigned int format,
2039 struct snd_pcm_substream *substream)
2041 struct alc_spec *spec = codec->spec;
2042 return snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
2043 stream_tag, format, substream);
2046 static int alc_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2047 struct hda_codec *codec,
2048 struct snd_pcm_substream *substream)
2050 struct alc_spec *spec = codec->spec;
2051 return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
2057 static int alc_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
2058 struct hda_codec *codec,
2059 struct snd_pcm_substream *substream)
2061 struct alc_spec *spec = codec->spec;
2062 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
2065 static int alc_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2066 struct hda_codec *codec,
2067 unsigned int stream_tag,
2068 unsigned int format,
2069 struct snd_pcm_substream *substream)
2071 struct alc_spec *spec = codec->spec;
2072 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
2073 stream_tag, format, substream);
2076 static int alc_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2077 struct hda_codec *codec,
2078 struct snd_pcm_substream *substream)
2080 struct alc_spec *spec = codec->spec;
2081 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
2084 static int alc_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
2085 struct hda_codec *codec,
2086 struct snd_pcm_substream *substream)
2088 struct alc_spec *spec = codec->spec;
2089 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
2095 static int alc_alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
2096 struct hda_codec *codec,
2097 unsigned int stream_tag,
2098 unsigned int format,
2099 struct snd_pcm_substream *substream)
2101 struct alc_spec *spec = codec->spec;
2103 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
2104 stream_tag, 0, format);
2108 static int alc_alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
2109 struct hda_codec *codec,
2110 struct snd_pcm_substream *substream)
2112 struct alc_spec *spec = codec->spec;
2114 snd_hda_codec_cleanup_stream(codec,
2115 spec->adc_nids[substream->number + 1]);
2119 /* analog capture with dynamic dual-adc changes */
2120 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
2121 struct hda_codec *codec,
2122 unsigned int stream_tag,
2123 unsigned int format,
2124 struct snd_pcm_substream *substream)
2126 struct alc_spec *spec = codec->spec;
2127 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
2128 spec->cur_adc_stream_tag = stream_tag;
2129 spec->cur_adc_format = format;
2130 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
2134 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
2135 struct hda_codec *codec,
2136 struct snd_pcm_substream *substream)
2138 struct alc_spec *spec = codec->spec;
2139 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
2144 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
2148 .nid = 0, /* fill later */
2150 .prepare = dyn_adc_capture_pcm_prepare,
2151 .cleanup = dyn_adc_capture_pcm_cleanup
2157 static const struct hda_pcm_stream alc_pcm_analog_playback = {
2161 /* NID is set in alc_build_pcms */
2163 .open = alc_playback_pcm_open,
2164 .prepare = alc_playback_pcm_prepare,
2165 .cleanup = alc_playback_pcm_cleanup
2169 static const struct hda_pcm_stream alc_pcm_analog_capture = {
2173 /* NID is set in alc_build_pcms */
2176 static const struct hda_pcm_stream alc_pcm_analog_alt_playback = {
2180 /* NID is set in alc_build_pcms */
2183 static const struct hda_pcm_stream alc_pcm_analog_alt_capture = {
2184 .substreams = 2, /* can be overridden */
2187 /* NID is set in alc_build_pcms */
2189 .prepare = alc_alt_capture_pcm_prepare,
2190 .cleanup = alc_alt_capture_pcm_cleanup
2194 static const struct hda_pcm_stream alc_pcm_digital_playback = {
2198 /* NID is set in alc_build_pcms */
2200 .open = alc_dig_playback_pcm_open,
2201 .close = alc_dig_playback_pcm_close,
2202 .prepare = alc_dig_playback_pcm_prepare,
2203 .cleanup = alc_dig_playback_pcm_cleanup
2207 static const struct hda_pcm_stream alc_pcm_digital_capture = {
2211 /* NID is set in alc_build_pcms */
2214 /* Used by alc_build_pcms to flag that a PCM has no playback stream */
2215 static const struct hda_pcm_stream alc_pcm_null_stream = {
2221 static int alc_build_pcms(struct hda_codec *codec)
2223 struct alc_spec *spec = codec->spec;
2224 struct hda_pcm *info = spec->pcm_rec;
2225 const struct hda_pcm_stream *p;
2228 codec->num_pcms = 1;
2229 codec->pcm_info = info;
2231 if (spec->no_analog)
2234 snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog),
2235 "%s Analog", codec->chip_name);
2236 info->name = spec->stream_name_analog;
2238 if (spec->multiout.dac_nids > 0) {
2239 p = spec->stream_analog_playback;
2241 p = &alc_pcm_analog_playback;
2242 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2243 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
2245 if (spec->adc_nids) {
2246 p = spec->stream_analog_capture;
2248 if (spec->dyn_adc_switch)
2249 p = &dyn_adc_pcm_analog_capture;
2251 p = &alc_pcm_analog_capture;
2253 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2254 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
2257 if (spec->channel_mode) {
2258 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = 0;
2259 for (i = 0; i < spec->num_channel_mode; i++) {
2260 if (spec->channel_mode[i].channels > info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max) {
2261 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = spec->channel_mode[i].channels;
2267 /* SPDIF for stream index #1 */
2268 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
2269 snprintf(spec->stream_name_digital,
2270 sizeof(spec->stream_name_digital),
2271 "%s Digital", codec->chip_name);
2272 codec->num_pcms = 2;
2273 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
2274 info = spec->pcm_rec + 1;
2275 info->name = spec->stream_name_digital;
2276 if (spec->dig_out_type)
2277 info->pcm_type = spec->dig_out_type;
2279 info->pcm_type = HDA_PCM_TYPE_SPDIF;
2280 if (spec->multiout.dig_out_nid) {
2281 p = spec->stream_digital_playback;
2283 p = &alc_pcm_digital_playback;
2284 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2285 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
2287 if (spec->dig_in_nid) {
2288 p = spec->stream_digital_capture;
2290 p = &alc_pcm_digital_capture;
2291 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2292 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
2294 /* FIXME: do we need this for all Realtek codec models? */
2295 codec->spdif_status_reset = 1;
2298 if (spec->no_analog)
2301 /* If the use of more than one ADC is requested for the current
2302 * model, configure a second analog capture-only PCM.
2304 /* Additional Analaog capture for index #2 */
2305 if (spec->alt_dac_nid || spec->num_adc_nids > 1) {
2306 codec->num_pcms = 3;
2307 info = spec->pcm_rec + 2;
2308 info->name = spec->stream_name_analog;
2309 if (spec->alt_dac_nid) {
2310 p = spec->stream_analog_alt_playback;
2312 p = &alc_pcm_analog_alt_playback;
2313 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2314 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
2317 info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
2318 alc_pcm_null_stream;
2319 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
2321 if (spec->num_adc_nids > 1) {
2322 p = spec->stream_analog_alt_capture;
2324 p = &alc_pcm_analog_alt_capture;
2325 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2326 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
2328 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
2329 spec->num_adc_nids - 1;
2331 info->stream[SNDRV_PCM_STREAM_CAPTURE] =
2332 alc_pcm_null_stream;
2333 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
2340 static inline void alc_shutup(struct hda_codec *codec)
2342 struct alc_spec *spec = codec->spec;
2344 if (spec && spec->shutup)
2345 spec->shutup(codec);
2346 snd_hda_shutup_pins(codec);
2349 static void alc_free_kctls(struct hda_codec *codec)
2351 struct alc_spec *spec = codec->spec;
2353 if (spec->kctls.list) {
2354 struct snd_kcontrol_new *kctl = spec->kctls.list;
2356 for (i = 0; i < spec->kctls.used; i++)
2357 kfree(kctl[i].name);
2359 snd_array_free(&spec->kctls);
2362 static void alc_free(struct hda_codec *codec)
2364 struct alc_spec *spec = codec->spec;
2370 snd_hda_input_jack_free(codec);
2371 alc_free_kctls(codec);
2373 snd_hda_detach_beep_device(codec);
2376 #ifdef CONFIG_SND_HDA_POWER_SAVE
2377 static void alc_power_eapd(struct hda_codec *codec)
2379 alc_auto_setup_eapd(codec, false);
2382 static int alc_suspend(struct hda_codec *codec, pm_message_t state)
2384 struct alc_spec *spec = codec->spec;
2386 if (spec && spec->power_hook)
2387 spec->power_hook(codec);
2393 static int alc_resume(struct hda_codec *codec)
2395 msleep(150); /* to avoid pop noise */
2396 codec->patch_ops.init(codec);
2397 snd_hda_codec_resume_amp(codec);
2398 snd_hda_codec_resume_cache(codec);
2399 hda_call_check_power_status(codec, 0x01);
2406 static const struct hda_codec_ops alc_patch_ops = {
2407 .build_controls = alc_build_controls,
2408 .build_pcms = alc_build_pcms,
2411 .unsol_event = alc_unsol_event,
2413 .resume = alc_resume,
2415 #ifdef CONFIG_SND_HDA_POWER_SAVE
2416 .suspend = alc_suspend,
2417 .check_power_status = alc_check_power_status,
2419 .reboot_notify = alc_shutup,
2422 /* replace the codec chip_name with the given string */
2423 static int alc_codec_rename(struct hda_codec *codec, const char *name)
2425 kfree(codec->chip_name);
2426 codec->chip_name = kstrdup(name, GFP_KERNEL);
2427 if (!codec->chip_name) {
2435 * Automatic parse of I/O pins from the BIOS configuration
2440 ALC_CTL_WIDGET_MUTE,
2443 static const struct snd_kcontrol_new alc_control_templates[] = {
2444 HDA_CODEC_VOLUME(NULL, 0, 0, 0),
2445 HDA_CODEC_MUTE(NULL, 0, 0, 0),
2446 HDA_BIND_MUTE(NULL, 0, 0, 0),
2449 /* add dynamic controls */
2450 static int add_control(struct alc_spec *spec, int type, const char *name,
2451 int cidx, unsigned long val)
2453 struct snd_kcontrol_new *knew;
2455 knew = alc_kcontrol_new(spec);
2458 *knew = alc_control_templates[type];
2459 knew->name = kstrdup(name, GFP_KERNEL);
2463 if (get_amp_nid_(val))
2464 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
2465 knew->private_value = val;
2469 static int add_control_with_pfx(struct alc_spec *spec, int type,
2470 const char *pfx, const char *dir,
2471 const char *sfx, int cidx, unsigned long val)
2474 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
2475 return add_control(spec, type, name, cidx, val);
2478 #define add_pb_vol_ctrl(spec, type, pfx, val) \
2479 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
2480 #define add_pb_sw_ctrl(spec, type, pfx, val) \
2481 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
2482 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
2483 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
2484 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
2485 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
2487 static const char *alc_get_line_out_pfx(struct alc_spec *spec, int ch,
2488 bool can_be_master, int *index)
2490 struct auto_pin_cfg *cfg = &spec->autocfg;
2491 static const char * const chname[4] = {
2492 "Front", "Surround", NULL /*CLFE*/, "Side"
2496 if (cfg->line_outs == 1 && !spec->multi_ios &&
2497 !cfg->hp_outs && !cfg->speaker_outs && can_be_master)
2500 switch (cfg->line_out_type) {
2501 case AUTO_PIN_SPEAKER_OUT:
2502 if (cfg->line_outs == 1)
2505 case AUTO_PIN_HP_OUT:
2506 /* for multi-io case, only the primary out */
2507 if (ch && spec->multi_ios)
2512 if (cfg->line_outs == 1 && !spec->multi_ios)
2519 /* create input playback/capture controls for the given pin */
2520 static int new_analog_input(struct alc_spec *spec, hda_nid_t pin,
2521 const char *ctlname, int ctlidx,
2522 int idx, hda_nid_t mix_nid)
2526 err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, ctlname, ctlidx,
2527 HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT));
2530 err = __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, ctlname, ctlidx,
2531 HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT));
2537 static int alc_is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2539 unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2540 return (pincap & AC_PINCAP_IN) != 0;
2543 /* Parse the codec tree and retrieve ADCs and corresponding capsrc MUXs */
2544 static int alc_auto_fill_adc_caps(struct hda_codec *codec)
2546 struct alc_spec *spec = codec->spec;
2548 hda_nid_t *adc_nids = spec->private_adc_nids;
2549 hda_nid_t *cap_nids = spec->private_capsrc_nids;
2550 int max_nums = ARRAY_SIZE(spec->private_adc_nids);
2551 bool indep_capsrc = false;
2554 nid = codec->start_nid;
2555 for (i = 0; i < codec->num_nodes; i++, nid++) {
2557 const hda_nid_t *list;
2558 unsigned int caps = get_wcaps(codec, nid);
2559 int type = get_wcaps_type(caps);
2561 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2563 adc_nids[nums] = nid;
2564 cap_nids[nums] = nid;
2568 type = get_wcaps_type(get_wcaps(codec, src));
2569 if (type == AC_WID_PIN)
2571 if (type == AC_WID_AUD_SEL) {
2572 cap_nids[nums] = src;
2573 indep_capsrc = true;
2576 n = snd_hda_get_conn_list(codec, src, &list);
2578 cap_nids[nums] = src;
2579 indep_capsrc = true;
2585 if (++nums >= max_nums)
2588 spec->adc_nids = spec->private_adc_nids;
2589 spec->capsrc_nids = spec->private_capsrc_nids;
2590 spec->num_adc_nids = nums;
2594 /* create playback/capture controls for input pins */
2595 static int alc_auto_create_input_ctls(struct hda_codec *codec)
2597 struct alc_spec *spec = codec->spec;
2598 const struct auto_pin_cfg *cfg = &spec->autocfg;
2599 hda_nid_t mixer = spec->mixer_nid;
2600 struct hda_input_mux *imux = &spec->private_imux[0];
2602 int i, c, err, idx, type_idx = 0;
2603 const char *prev_label = NULL;
2605 num_adcs = alc_auto_fill_adc_caps(codec);
2609 for (i = 0; i < cfg->num_inputs; i++) {
2613 pin = cfg->inputs[i].pin;
2614 if (!alc_is_input_pin(codec, pin))
2617 label = hda_get_autocfg_input_label(codec, cfg, i);
2618 if (prev_label && !strcmp(label, prev_label))
2625 idx = get_connection_index(codec, mixer, pin);
2627 err = new_analog_input(spec, pin,
2635 for (c = 0; c < num_adcs; c++) {
2636 hda_nid_t cap = spec->capsrc_nids ?
2637 spec->capsrc_nids[c] : spec->adc_nids[c];
2638 idx = get_connection_index(codec, cap, pin);
2640 spec->imux_pins[imux->num_items] = pin;
2641 snd_hda_add_imux_item(imux, label, idx, NULL);
2647 spec->num_mux_defs = 1;
2648 spec->input_mux = imux;
2653 static void alc_set_pin_output(struct hda_codec *codec, hda_nid_t nid,
2654 unsigned int pin_type)
2656 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
2659 if (nid_has_mute(codec, nid, HDA_OUTPUT))
2660 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
2664 static int get_pin_type(int line_out_type)
2666 if (line_out_type == AUTO_PIN_HP_OUT)
2672 static void alc_auto_init_analog_input(struct hda_codec *codec)
2674 struct alc_spec *spec = codec->spec;
2675 struct auto_pin_cfg *cfg = &spec->autocfg;
2678 for (i = 0; i < cfg->num_inputs; i++) {
2679 hda_nid_t nid = cfg->inputs[i].pin;
2680 if (alc_is_input_pin(codec, nid)) {
2681 alc_set_input_pin(codec, nid, cfg->inputs[i].type);
2682 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP)
2683 snd_hda_codec_write(codec, nid, 0,
2684 AC_VERB_SET_AMP_GAIN_MUTE,
2689 /* mute all loopback inputs */
2690 if (spec->mixer_nid) {
2691 int nums = snd_hda_get_conn_list(codec, spec->mixer_nid, NULL);
2692 for (i = 0; i < nums; i++)
2693 snd_hda_codec_write(codec, spec->mixer_nid, 0,
2694 AC_VERB_SET_AMP_GAIN_MUTE,
2699 /* convert from MIX nid to DAC */
2700 static hda_nid_t alc_auto_mix_to_dac(struct hda_codec *codec, hda_nid_t nid)
2705 if (get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_AUD_OUT)
2707 num = snd_hda_get_connections(codec, nid, list, ARRAY_SIZE(list));
2708 for (i = 0; i < num; i++) {
2709 if (get_wcaps_type(get_wcaps(codec, list[i])) == AC_WID_AUD_OUT)
2715 /* go down to the selector widget before the mixer */
2716 static hda_nid_t alc_go_down_to_selector(struct hda_codec *codec, hda_nid_t pin)
2719 int num = snd_hda_get_connections(codec, pin, srcs,
2722 get_wcaps_type(get_wcaps(codec, srcs[0])) != AC_WID_AUD_SEL)
2727 /* get MIX nid connected to the given pin targeted to DAC */
2728 static hda_nid_t alc_auto_dac_to_mix(struct hda_codec *codec, hda_nid_t pin,
2734 pin = alc_go_down_to_selector(codec, pin);
2735 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix));
2736 for (i = 0; i < num; i++) {
2737 if (alc_auto_mix_to_dac(codec, mix[i]) == dac)
2743 /* select the connection from pin to DAC if needed */
2744 static int alc_auto_select_dac(struct hda_codec *codec, hda_nid_t pin,
2750 pin = alc_go_down_to_selector(codec, pin);
2751 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix));
2754 for (i = 0; i < num; i++) {
2755 if (alc_auto_mix_to_dac(codec, mix[i]) == dac) {
2756 snd_hda_codec_update_cache(codec, pin, 0,
2757 AC_VERB_SET_CONNECT_SEL, i);
2764 /* look for an empty DAC slot */
2765 static hda_nid_t alc_auto_look_for_dac(struct hda_codec *codec, hda_nid_t pin)
2767 struct alc_spec *spec = codec->spec;
2771 pin = alc_go_down_to_selector(codec, pin);
2772 num = snd_hda_get_connections(codec, pin, srcs, ARRAY_SIZE(srcs));
2773 for (i = 0; i < num; i++) {
2774 hda_nid_t nid = alc_auto_mix_to_dac(codec, srcs[i]);
2777 if (found_in_nid_list(nid, spec->multiout.dac_nids,
2778 spec->multiout.num_dacs))
2780 if (spec->multiout.hp_nid == nid)
2782 if (found_in_nid_list(nid, spec->multiout.extra_out_nid,
2783 ARRAY_SIZE(spec->multiout.extra_out_nid)))
2790 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
2792 hda_nid_t sel = alc_go_down_to_selector(codec, pin);
2793 if (snd_hda_get_conn_list(codec, sel, NULL) == 1)
2794 return alc_auto_look_for_dac(codec, pin);
2798 /* fill in the dac_nids table from the parsed pin configuration */
2799 static int alc_auto_fill_dac_nids(struct hda_codec *codec)
2801 struct alc_spec *spec = codec->spec;
2802 const struct auto_pin_cfg *cfg = &spec->autocfg;
2803 bool redone = false;
2807 /* set num_dacs once to full for alc_auto_look_for_dac() */
2808 spec->multiout.num_dacs = cfg->line_outs;
2809 spec->multiout.hp_nid = 0;
2810 spec->multiout.extra_out_nid[0] = 0;
2811 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
2812 spec->multiout.dac_nids = spec->private_dac_nids;
2814 /* fill hard-wired DACs first */
2816 for (i = 0; i < cfg->line_outs; i++)
2817 spec->private_dac_nids[i] =
2818 get_dac_if_single(codec, cfg->line_out_pins[i]);
2820 spec->multiout.hp_nid =
2821 get_dac_if_single(codec, cfg->hp_pins[0]);
2822 if (cfg->speaker_outs)
2823 spec->multiout.extra_out_nid[0] =
2824 get_dac_if_single(codec, cfg->speaker_pins[0]);
2827 for (i = 0; i < cfg->line_outs; i++) {
2828 hda_nid_t pin = cfg->line_out_pins[i];
2829 if (spec->private_dac_nids[i])
2831 spec->private_dac_nids[i] = alc_auto_look_for_dac(codec, pin);
2832 if (!spec->private_dac_nids[i] && !redone) {
2833 /* if we can't find primary DACs, re-probe without
2834 * checking the hard-wired DACs
2841 /* re-count num_dacs and squash invalid entries */
2842 spec->multiout.num_dacs = 0;
2843 for (i = 0; i < cfg->line_outs; i++) {
2844 if (spec->private_dac_nids[i])
2845 spec->multiout.num_dacs++;
2847 memmove(spec->private_dac_nids + i,
2848 spec->private_dac_nids + i + 1,
2849 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
2852 if (cfg->hp_outs && !spec->multiout.hp_nid)
2853 spec->multiout.hp_nid =
2854 alc_auto_look_for_dac(codec, cfg->hp_pins[0]);
2855 if (cfg->speaker_outs && !spec->multiout.extra_out_nid[0])
2856 spec->multiout.extra_out_nid[0] =
2857 alc_auto_look_for_dac(codec, cfg->speaker_pins[0]);
2862 static int alc_auto_add_vol_ctl(struct hda_codec *codec,
2863 const char *pfx, int cidx,
2864 hda_nid_t nid, unsigned int chs)
2868 return __add_pb_vol_ctrl(codec->spec, ALC_CTL_WIDGET_VOL, pfx, cidx,
2869 HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT));
2872 #define alc_auto_add_stereo_vol(codec, pfx, cidx, nid) \
2873 alc_auto_add_vol_ctl(codec, pfx, cidx, nid, 3)
2875 /* create a mute-switch for the given mixer widget;
2876 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
2878 static int alc_auto_add_sw_ctl(struct hda_codec *codec,
2879 const char *pfx, int cidx,
2880 hda_nid_t nid, unsigned int chs)
2887 wid_type = get_wcaps_type(get_wcaps(codec, nid));
2888 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT) {
2889 type = ALC_CTL_WIDGET_MUTE;
2890 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT);
2891 } else if (snd_hda_get_conn_list(codec, nid, NULL) == 1) {
2892 type = ALC_CTL_WIDGET_MUTE;
2893 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT);
2895 type = ALC_CTL_BIND_MUTE;
2896 val = HDA_COMPOSE_AMP_VAL(nid, chs, 2, HDA_INPUT);
2898 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
2901 #define alc_auto_add_stereo_sw(codec, pfx, cidx, nid) \
2902 alc_auto_add_sw_ctl(codec, pfx, cidx, nid, 3)
2904 static hda_nid_t alc_look_for_out_mute_nid(struct hda_codec *codec,
2905 hda_nid_t pin, hda_nid_t dac)
2907 hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac);
2908 if (nid_has_mute(codec, pin, HDA_OUTPUT))
2910 else if (mix && nid_has_mute(codec, mix, HDA_INPUT))
2912 else if (nid_has_mute(codec, dac, HDA_OUTPUT))
2917 static hda_nid_t alc_look_for_out_vol_nid(struct hda_codec *codec,
2918 hda_nid_t pin, hda_nid_t dac)
2920 hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac);
2921 if (nid_has_volume(codec, dac, HDA_OUTPUT))
2923 else if (nid_has_volume(codec, mix, HDA_OUTPUT))
2925 else if (nid_has_volume(codec, pin, HDA_OUTPUT))
2930 /* add playback controls from the parsed DAC table */
2931 static int alc_auto_create_multi_out_ctls(struct hda_codec *codec,
2932 const struct auto_pin_cfg *cfg)
2934 struct alc_spec *spec = codec->spec;
2935 int i, err, noutputs;
2937 noutputs = cfg->line_outs;
2938 if (spec->multi_ios > 0)
2939 noutputs += spec->multi_ios;
2941 for (i = 0; i < noutputs; i++) {
2947 dac = spec->multiout.dac_nids[i];
2950 if (i >= cfg->line_outs)
2951 pin = spec->multi_io[i - 1].pin;
2953 pin = cfg->line_out_pins[i];
2955 sw = alc_look_for_out_mute_nid(codec, pin, dac);
2956 vol = alc_look_for_out_vol_nid(codec, pin, dac);
2957 name = alc_get_line_out_pfx(spec, i, true, &index);
2960 err = alc_auto_add_vol_ctl(codec, "Center", 0, vol, 1);
2963 err = alc_auto_add_vol_ctl(codec, "LFE", 0, vol, 2);
2966 err = alc_auto_add_sw_ctl(codec, "Center", 0, sw, 1);
2969 err = alc_auto_add_sw_ctl(codec, "LFE", 0, sw, 2);
2973 err = alc_auto_add_stereo_vol(codec, name, index, vol);
2976 err = alc_auto_add_stereo_sw(codec, name, index, sw);
2984 /* add playback controls for speaker and HP outputs */
2985 static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin,
2986 hda_nid_t dac, const char *pfx)
2988 struct alc_spec *spec = codec->spec;
2995 /* the corresponding DAC is already occupied */
2996 if (!(get_wcaps(codec, pin) & AC_WCAP_OUT_AMP))
2997 return 0; /* no way */
2998 /* create a switch only */
2999 return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx,
3000 HDA_COMPOSE_AMP_VAL(pin, 3, 0, HDA_OUTPUT));
3003 sw = alc_look_for_out_mute_nid(codec, pin, dac);
3004 vol = alc_look_for_out_vol_nid(codec, pin, dac);
3005 err = alc_auto_add_stereo_vol(codec, pfx, 0, vol);
3008 err = alc_auto_add_stereo_sw(codec, pfx, 0, sw);
3014 static int alc_auto_create_hp_out(struct hda_codec *codec)
3016 struct alc_spec *spec = codec->spec;
3017 return alc_auto_create_extra_out(codec, spec->autocfg.hp_pins[0],
3018 spec->multiout.hp_nid,