ALSA: hda/realtek - Fix auto-mute with HP+LO configuration
[linux-2.6.git] / sound / pci / hda / patch_realtek.c
1 /*
2  * Universal Interface for Intel High Definition Audio Codec
3  *
4  * HD audio interface patch for Realtek ALC codecs
5  *
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>
10  *
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.
15  *
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.
20  *
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
24  */
25
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"
34 #include "hda_beep.h"
35
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
41
42 /* for GPIO Poll */
43 #define GPIO_MASK       0x03
44
45 /* extra amp-initialization sequence types */
46 enum {
47         ALC_INIT_NONE,
48         ALC_INIT_DEFAULT,
49         ALC_INIT_GPIO1,
50         ALC_INIT_GPIO2,
51         ALC_INIT_GPIO3,
52 };
53
54 struct alc_customize_define {
55         unsigned int  sku_cfg;
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;
62         unsigned int  swap:1;
63         unsigned int  override:1;
64         unsigned int  fixup:1; /* Means that this sku is set by driver, not read from hw */
65 };
66
67 struct alc_fixup;
68
69 struct alc_multi_io {
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 */
73 };
74
75 enum {
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 */
79 };
80
81 struct alc_spec {
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() */
87
88         const struct hda_verb *init_verbs[10];  /* initialization verbs
89                                                  * don't forget NULL
90                                                  * termination!
91                                                  */
92         unsigned int num_init_verbs;
93
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;
99
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;
103
104         /* playback */
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
108                                          */
109         hda_nid_t alt_dac_nid;
110         hda_nid_t slave_dig_outs[3];    /* optional - for auto-parsing */
111         int dig_out_type;
112
113         /* capture */
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 */
119
120         /* capture setup for dynamic dual-adc switch */
121         hda_nid_t cur_adc;
122         unsigned int cur_adc_stream_tag;
123         unsigned int cur_adc_format;
124
125         /* capture source */
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;
132
133         /* channel model */
134         const struct hda_channel_mode *channel_mode;
135         int num_channel_mode;
136         int need_dac_fix;
137         int const_channel_count;
138         int ext_channel_count;
139
140         /* PCM information */
141         struct hda_pcm pcm_rec[3];      /* used in alc_build_pcms() */
142
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 */
154
155         /* hooks */
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);
160 #endif
161         void (*shutup)(struct hda_codec *codec);
162
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; NOP when automute_hp_lo isn't set */
172         unsigned int automute_hp_lo:1;  /* both HP and LO available */
173
174         /* other flags */
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) */
179
180         /* auto-mute control */
181         int automute_mode;
182         hda_nid_t automute_mixer_nid[AUTO_CFG_MAX_OUTS];
183
184         int init_amp;
185         int codec_variant;      /* flag for other variants */
186
187         /* for virtual master */
188         hda_nid_t vmaster_nid;
189 #ifdef CONFIG_SND_HDA_POWER_SAVE
190         struct hda_loopback_check loopback;
191 #endif
192
193         /* for PLL fix */
194         hda_nid_t pll_nid;
195         unsigned int pll_coef_idx, pll_coef_bit;
196
197         /* fix-up list */
198         int fixup_id;
199         const struct alc_fixup *fixup_list;
200         const char *fixup_name;
201
202         /* multi-io */
203         int multi_ios;
204         struct alc_multi_io multi_io[4];
205 };
206
207 #define ALC_MODEL_AUTO          0       /* common for all chips */
208
209 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
210                            int dir, unsigned int bits)
211 {
212         if (!nid)
213                 return false;
214         if (get_wcaps(codec, nid) & (1 << (dir + 1)))
215                 if (query_amp_caps(codec, nid, dir) & bits)
216                         return true;
217         return false;
218 }
219
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)
224
225 /*
226  * input MUX handling
227  */
228 static int alc_mux_enum_info(struct snd_kcontrol *kcontrol,
229                              struct snd_ctl_elem_info *uinfo)
230 {
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)
235                 mux_idx = 0;
236         if (!spec->input_mux[mux_idx].num_items && mux_idx > 0)
237                 mux_idx = 0;
238         return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo);
239 }
240
241 static int alc_mux_enum_get(struct snd_kcontrol *kcontrol,
242                             struct snd_ctl_elem_value *ucontrol)
243 {
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);
247
248         ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
249         return 0;
250 }
251
252 static bool alc_dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
253 {
254         struct alc_spec *spec = codec->spec;
255         hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
256
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);
264                 return true;
265         }
266         return false;
267 }
268
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)
272 {
273         struct alc_spec *spec = codec->spec;
274         const struct hda_input_mux *imux;
275         unsigned int mux_idx;
276         int i, type;
277         hda_nid_t nid;
278
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];
283
284         if (idx >= imux->num_items)
285                 idx = imux->num_items - 1;
286         if (spec->cur_mux[adc_idx] == idx && !force)
287                 return 0;
288         spec->cur_mux[adc_idx] = idx;
289
290         if (spec->dyn_adc_switch) {
291                 alc_dyn_adc_pcm_resetup(codec, idx);
292                 adc_idx = spec->dyn_adc_idx[idx];
293         }
294
295         nid = spec->capsrc_nids ?
296                 spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];
297
298         /* no selection? */
299         if (snd_hda_get_conn_list(codec, nid, NULL) <= 1)
300                 return 1;
301
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,
309                                                  HDA_AMP_MUTE, v);
310                 }
311         } else {
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);
316         }
317         return 1;
318 }
319
320 static int alc_mux_enum_put(struct snd_kcontrol *kcontrol,
321                             struct snd_ctl_elem_value *ucontrol)
322 {
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);
327 }
328
329 /*
330  * set up the input pin config (depending on the given auto-pin type)
331  */
332 static void alc_set_input_pin(struct hda_codec *codec, hda_nid_t nid,
333                               int auto_pin_type)
334 {
335         unsigned int val = PIN_IN;
336
337         if (auto_pin_type == AUTO_PIN_MIC) {
338                 unsigned int pincap;
339                 unsigned int oldval;
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)
346                         val = PIN_VREF80;
347                 else if (pincap & AC_PINCAP_VREF_50)
348                         val = PIN_VREF50;
349                 else if (pincap & AC_PINCAP_VREF_100)
350                         val = PIN_VREF100;
351                 else if (pincap & AC_PINCAP_VREF_GRD)
352                         val = PIN_VREFGRD;
353         }
354         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, val);
355 }
356
357 /*
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
360  * called in init().
361  */
362 static void add_mixer(struct alc_spec *spec, const struct snd_kcontrol_new *mix)
363 {
364         if (snd_BUG_ON(spec->num_mixers >= ARRAY_SIZE(spec->mixers)))
365                 return;
366         spec->mixers[spec->num_mixers++] = mix;
367 }
368
369 static void add_verb(struct alc_spec *spec, const struct hda_verb *verb)
370 {
371         if (snd_BUG_ON(spec->num_init_verbs >= ARRAY_SIZE(spec->init_verbs)))
372                 return;
373         spec->init_verbs[spec->num_init_verbs++] = verb;
374 }
375
376 /*
377  * GPIO setup tables, used in initialization
378  */
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},
384         { }
385 };
386
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},
391         { }
392 };
393
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},
398         { }
399 };
400
401 /*
402  * Fix hardware PLL issue
403  * On some codecs, the analog PLL gating control must be off while
404  * the default value is 1.
405  */
406 static void alc_fix_pll(struct hda_codec *codec)
407 {
408         struct alc_spec *spec = codec->spec;
409         unsigned int val;
410
411         if (!spec->pll_nid)
412                 return;
413         snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX,
414                             spec->pll_coef_idx);
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,
418                             spec->pll_coef_idx);
419         snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_PROC_COEF,
420                             val & ~(1 << spec->pll_coef_bit));
421 }
422
423 static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid,
424                              unsigned int coef_idx, unsigned int coef_bit)
425 {
426         struct alc_spec *spec = codec->spec;
427         spec->pll_nid = nid;
428         spec->pll_coef_idx = coef_idx;
429         spec->pll_coef_bit = coef_bit;
430         alc_fix_pll(codec);
431 }
432
433 /*
434  * Jack-reporting via input-jack layer
435  */
436
437 /* initialization of jacks; currently checks only a few known pins */
438 static int alc_init_jacks(struct hda_codec *codec)
439 {
440 #ifdef CONFIG_SND_HDA_INPUT_JACK
441         struct alc_spec *spec = codec->spec;
442         int err;
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;
446
447         if (hp_nid) {
448                 err = snd_hda_input_jack_add(codec, hp_nid,
449                                              SND_JACK_HEADPHONE, NULL);
450                 if (err < 0)
451                         return err;
452                 snd_hda_input_jack_report(codec, hp_nid);
453         }
454
455         if (mic_nid) {
456                 err = snd_hda_input_jack_add(codec, mic_nid,
457                                              SND_JACK_MICROPHONE, NULL);
458                 if (err < 0)
459                         return err;
460                 snd_hda_input_jack_report(codec, mic_nid);
461         }
462         if (dock_nid) {
463                 err = snd_hda_input_jack_add(codec, dock_nid,
464                                              SND_JACK_MICROPHONE, NULL);
465                 if (err < 0)
466                         return err;
467                 snd_hda_input_jack_report(codec, dock_nid);
468         }
469 #endif /* CONFIG_SND_HDA_INPUT_JACK */
470         return 0;
471 }
472
473 /*
474  * Jack detections for HP auto-mute and mic-switch
475  */
476
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)
479 {
480         int i, present = 0;
481
482         for (i = 0; i < num_pins; i++) {
483                 hda_nid_t nid = pins[i];
484                 if (!nid)
485                         break;
486                 snd_hda_input_jack_report(codec, nid);
487                 present |= snd_hda_jack_detect(codec, nid);
488         }
489         return present;
490 }
491
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)
495 {
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);
499         int i;
500
501         for (i = 0; i < num_pins; i++) {
502                 hda_nid_t nid = pins[i];
503                 if (!nid)
504                         break;
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,
509                                             pin_bits);
510                         break;
511                 case ALC_AUTOMUTE_AMP:
512                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
513                                                  HDA_AMP_MUTE, mute_bits);
514                         break;
515                 case ALC_AUTOMUTE_MIXER:
516                         nid = spec->automute_mixer_nid[i];
517                         if (!nid)
518                                 break;
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);
523                         break;
524                 }
525         }
526 }
527
528 /* Toggle internal speakers muting */
529 static void update_speakers(struct hda_codec *codec)
530 {
531         struct alc_spec *spec = codec->spec;
532         int on;
533
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
537          */
538         do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
539                     spec->autocfg.hp_pins, spec->master_mute, true);
540
541         if (!spec->automute)
542                 on = 0;
543         else
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);
548
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])
553                 return;
554         if (!spec->automute || (spec->automute_hp_lo && !spec->automute_lines))
555                 on = 0;
556         else
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);
561 }
562
563 /* standard HP-automute helper */
564 static void alc_hp_automute(struct hda_codec *codec)
565 {
566         struct alc_spec *spec = codec->spec;
567
568         spec->jack_present =
569                 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
570                              spec->autocfg.hp_pins);
571         if (!spec->automute)
572                 return;
573         update_speakers(codec);
574 }
575
576 /* standard line-out-automute helper */
577 static void alc_line_automute(struct hda_codec *codec)
578 {
579         struct alc_spec *spec = codec->spec;
580
581         spec->line_jack_present =
582                 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
583                              spec->autocfg.line_out_pins);
584         if (!spec->automute || !spec->detect_line)
585                 return;
586         update_speakers(codec);
587 }
588
589 #define get_connection_index(codec, mux, nid) \
590         snd_hda_get_conn_index(codec, mux, nid, 0)
591
592 /* standard mic auto-switch helper */
593 static void alc_mic_automute(struct hda_codec *codec)
594 {
595         struct alc_spec *spec = codec->spec;
596         hda_nid_t *pins = spec->imux_pins;
597
598         if (!spec->auto_mic || !spec->auto_mic_valid_imux)
599                 return;
600         if (snd_BUG_ON(!spec->adc_nids))
601                 return;
602         if (snd_BUG_ON(spec->int_mic_idx < 0 || spec->ext_mic_idx < 0))
603                 return;
604
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);
610         else
611                 alc_mux_select(codec, 0, spec->int_mic_idx, false);
612
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]);
616 }
617
618 /* unsolicited event for HP jack sensing */
619 static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
620 {
621         if (codec->vendor_id == 0x10ec0880)
622                 res >>= 28;
623         else
624                 res >>= 26;
625         switch (res) {
626         case ALC_HP_EVENT:
627                 alc_hp_automute(codec);
628                 break;
629         case ALC_FRONT_EVENT:
630                 alc_line_automute(codec);
631                 break;
632         case ALC_MIC_EVENT:
633                 alc_mic_automute(codec);
634                 break;
635         }
636 }
637
638 /* call init functions of standard auto-mute helpers */
639 static void alc_inithook(struct hda_codec *codec)
640 {
641         alc_hp_automute(codec);
642         alc_line_automute(codec);
643         alc_mic_automute(codec);
644 }
645
646 /* additional initialization for ALC888 variants */
647 static void alc888_coef_init(struct hda_codec *codec)
648 {
649         unsigned int tmp;
650
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)
655                 /* alc888S-VC */
656                 snd_hda_codec_read(codec, 0x20, 0,
657                                    AC_VERB_SET_PROC_COEF, 0x830);
658          else
659                  /* alc888-VB */
660                  snd_hda_codec_read(codec, 0x20, 0,
661                                     AC_VERB_SET_PROC_COEF, 0x3030);
662 }
663
664 /* additional initialization for ALC889 variants */
665 static void alc889_coef_init(struct hda_codec *codec)
666 {
667         unsigned int tmp;
668
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);
673 }
674
675 /* turn on/off EAPD control (only if available) */
676 static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
677 {
678         if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
679                 return;
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,
682                                     on ? 2 : 0);
683 }
684
685 /* turn on/off EAPD controls of the codec */
686 static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
687 {
688         /* We currently only handle front, HP */
689         static hda_nid_t pins[] = {
690                 0x0f, 0x10, 0x14, 0x15, 0
691         };
692         hda_nid_t *p;
693         for (p = pins; *p; p++)
694                 set_eapd(codec, *p, on);
695 }
696
697 /* generic shutup callback;
698  * just turning off EPAD and a little pause for avoiding pop-noise
699  */
700 static void alc_eapd_shutup(struct hda_codec *codec)
701 {
702         alc_auto_setup_eapd(codec, false);
703         msleep(200);
704 }
705
706 /* generic EAPD initialization */
707 static void alc_auto_init_amp(struct hda_codec *codec, int type)
708 {
709         unsigned int tmp;
710
711         alc_auto_setup_eapd(codec, true);
712         switch (type) {
713         case ALC_INIT_GPIO1:
714                 snd_hda_sequence_write(codec, alc_gpio1_init_verbs);
715                 break;
716         case ALC_INIT_GPIO2:
717                 snd_hda_sequence_write(codec, alc_gpio2_init_verbs);
718                 break;
719         case ALC_INIT_GPIO3:
720                 snd_hda_sequence_write(codec, alc_gpio3_init_verbs);
721                 break;
722         case ALC_INIT_DEFAULT:
723                 switch (codec->vendor_id) {
724                 case 0x10ec0260:
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,
733                                             tmp | 0x2010);
734                         break;
735                 case 0x10ec0262:
736                 case 0x10ec0880:
737                 case 0x10ec0882:
738                 case 0x10ec0883:
739                 case 0x10ec0885:
740                 case 0x10ec0887:
741                 /*case 0x10ec0889:*/ /* this causes an SPDIF problem */
742                         alc889_coef_init(codec);
743                         break;
744                 case 0x10ec0888:
745                         alc888_coef_init(codec);
746                         break;
747 #if 0 /* XXX: This may cause the silent output on speaker on some machines */
748                 case 0x10ec0267:
749                 case 0x10ec0268:
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,
758                                             tmp | 0x3000);
759                         break;
760 #endif /* XXX */
761                 }
762                 break;
763         }
764 }
765
766 /*
767  * Auto-Mute mode mixer enum support
768  */
769 static int alc_automute_mode_info(struct snd_kcontrol *kcontrol,
770                                   struct snd_ctl_elem_info *uinfo)
771 {
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"
776         };
777         static const char * const texts3[] = {
778                 "Disabled", "Speaker Only", "Line-Out+Speaker"
779         };
780         const char * const *texts;
781
782         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
783         uinfo->count = 1;
784         if (spec->automute_hp_lo) {
785                 uinfo->value.enumerated.items = 3;
786                 texts = texts3;
787         } else {
788                 uinfo->value.enumerated.items = 2;
789                 texts = texts2;
790         }
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]);
795         return 0;
796 }
797
798 static int alc_automute_mode_get(struct snd_kcontrol *kcontrol,
799                                  struct snd_ctl_elem_value *ucontrol)
800 {
801         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
802         struct alc_spec *spec = codec->spec;
803         unsigned int val;
804         if (!spec->automute)
805                 val = 0;
806         else if (!spec->automute_hp_lo || !spec->automute_lines)
807                 val = 1;
808         else
809                 val = 2;
810         ucontrol->value.enumerated.item[0] = val;
811         return 0;
812 }
813
814 static int alc_automute_mode_put(struct snd_kcontrol *kcontrol,
815                                  struct snd_ctl_elem_value *ucontrol)
816 {
817         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
818         struct alc_spec *spec = codec->spec;
819
820         switch (ucontrol->value.enumerated.item[0]) {
821         case 0:
822                 if (!spec->automute)
823                         return 0;
824                 spec->automute = 0;
825                 break;
826         case 1:
827                 if (spec->automute &&
828                     (!spec->automute_hp_lo || !spec->automute_lines))
829                         return 0;
830                 spec->automute = 1;
831                 spec->automute_lines = 0;
832                 break;
833         case 2:
834                 if (!spec->automute_hp_lo)
835                         return -EINVAL;
836                 if (spec->automute && spec->automute_lines)
837                         return 0;
838                 spec->automute = 1;
839                 spec->automute_lines = 1;
840                 break;
841         default:
842                 return -EINVAL;
843         }
844         update_speakers(codec);
845         return 1;
846 }
847
848 static const struct snd_kcontrol_new alc_automute_mode_enum = {
849         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
850         .name = "Auto-Mute Mode",
851         .info = alc_automute_mode_info,
852         .get = alc_automute_mode_get,
853         .put = alc_automute_mode_put,
854 };
855
856 static struct snd_kcontrol_new *alc_kcontrol_new(struct alc_spec *spec)
857 {
858         snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
859         return snd_array_new(&spec->kctls);
860 }
861
862 static int alc_add_automute_mode_enum(struct hda_codec *codec)
863 {
864         struct alc_spec *spec = codec->spec;
865         struct snd_kcontrol_new *knew;
866
867         knew = alc_kcontrol_new(spec);
868         if (!knew)
869                 return -ENOMEM;
870         *knew = alc_automute_mode_enum;
871         knew->name = kstrdup("Auto-Mute Mode", GFP_KERNEL);
872         if (!knew->name)
873                 return -ENOMEM;
874         return 0;
875 }
876
877 /*
878  * Check the availability of HP/line-out auto-mute;
879  * Set up appropriately if really supported
880  */
881 static void alc_init_auto_hp(struct hda_codec *codec)
882 {
883         struct alc_spec *spec = codec->spec;
884         struct auto_pin_cfg *cfg = &spec->autocfg;
885         int present = 0;
886         int i;
887
888         if (cfg->hp_pins[0])
889                 present++;
890         if (cfg->line_out_pins[0])
891                 present++;
892         if (cfg->speaker_pins[0])
893                 present++;
894         if (present < 2) /* need two different output types */
895                 return;
896         if (present == 3)
897                 spec->automute_hp_lo = 1; /* both HP and LO automute */
898
899         if (!cfg->speaker_pins[0] &&
900             cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
901                 memcpy(cfg->speaker_pins, cfg->line_out_pins,
902                        sizeof(cfg->speaker_pins));
903                 cfg->speaker_outs = cfg->line_outs;
904         }
905
906         if (!cfg->hp_pins[0] &&
907             cfg->line_out_type == AUTO_PIN_HP_OUT) {
908                 memcpy(cfg->hp_pins, cfg->line_out_pins,
909                        sizeof(cfg->hp_pins));
910                 cfg->hp_outs = cfg->line_outs;
911         }
912
913         for (i = 0; i < cfg->hp_outs; i++) {
914                 hda_nid_t nid = cfg->hp_pins[i];
915                 if (!is_jack_detectable(codec, nid))
916                         continue;
917                 snd_printdd("realtek: Enable HP auto-muting on NID 0x%x\n",
918                             nid);
919                 snd_hda_codec_write_cache(codec, nid, 0,
920                                   AC_VERB_SET_UNSOLICITED_ENABLE,
921                                   AC_USRSP_EN | ALC_HP_EVENT);
922                 spec->automute = 1;
923                 spec->automute_mode = ALC_AUTOMUTE_PIN;
924         }
925         if (spec->automute && cfg->line_out_pins[0] &&
926             cfg->speaker_pins[0] &&
927             cfg->line_out_pins[0] != cfg->hp_pins[0] &&
928             cfg->line_out_pins[0] != cfg->speaker_pins[0]) {
929                 for (i = 0; i < cfg->line_outs; i++) {
930                         hda_nid_t nid = cfg->line_out_pins[i];
931                         if (!is_jack_detectable(codec, nid))
932                                 continue;
933                         snd_printdd("realtek: Enable Line-Out auto-muting "
934                                     "on NID 0x%x\n", nid);
935                         snd_hda_codec_write_cache(codec, nid, 0,
936                                         AC_VERB_SET_UNSOLICITED_ENABLE,
937                                         AC_USRSP_EN | ALC_FRONT_EVENT);
938                         spec->detect_line = 1;
939                 }
940                 spec->automute_lines = spec->detect_line;
941         }
942
943         if (spec->automute) {
944                 /* create a control for automute mode */
945                 alc_add_automute_mode_enum(codec);
946                 spec->unsol_event = alc_sku_unsol_event;
947         }
948 }
949
950 /* return the position of NID in the list, or -1 if not found */
951 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
952 {
953         int i;
954         for (i = 0; i < nums; i++)
955                 if (list[i] == nid)
956                         return i;
957         return -1;
958 }
959
960 /* check whether dynamic ADC-switching is available */
961 static bool alc_check_dyn_adc_switch(struct hda_codec *codec)
962 {
963         struct alc_spec *spec = codec->spec;
964         struct hda_input_mux *imux = &spec->private_imux[0];
965         int i, n, idx;
966         hda_nid_t cap, pin;
967
968         if (imux != spec->input_mux) /* no dynamic imux? */
969                 return false;
970
971         for (n = 0; n < spec->num_adc_nids; n++) {
972                 cap = spec->private_capsrc_nids[n];
973                 for (i = 0; i < imux->num_items; i++) {
974                         pin = spec->imux_pins[i];
975                         if (!pin)
976                                 return false;
977                         if (get_connection_index(codec, cap, pin) < 0)
978                                 break;
979                 }
980                 if (i >= imux->num_items)
981                         return true; /* no ADC-switch is needed */
982         }
983
984         for (i = 0; i < imux->num_items; i++) {
985                 pin = spec->imux_pins[i];
986                 for (n = 0; n < spec->num_adc_nids; n++) {
987                         cap = spec->private_capsrc_nids[n];
988                         idx = get_connection_index(codec, cap, pin);
989                         if (idx >= 0) {
990                                 imux->items[i].index = idx;
991                                 spec->dyn_adc_idx[i] = n;
992                                 break;
993                         }
994                 }
995         }
996
997         snd_printdd("realtek: enabling ADC switching\n");
998         spec->dyn_adc_switch = 1;
999         return true;
1000 }
1001
1002 /* rebuild imux for matching with the given auto-mic pins (if not yet) */
1003 static bool alc_rebuild_imux_for_auto_mic(struct hda_codec *codec)
1004 {
1005         struct alc_spec *spec = codec->spec;
1006         struct hda_input_mux *imux;
1007         static char * const texts[3] = {
1008                 "Mic", "Internal Mic", "Dock Mic"
1009         };
1010         int i;
1011
1012         if (!spec->auto_mic)
1013                 return false;
1014         imux = &spec->private_imux[0];
1015         if (spec->input_mux == imux)
1016                 return true;
1017         spec->imux_pins[0] = spec->ext_mic_pin;
1018         spec->imux_pins[1] = spec->int_mic_pin;
1019         spec->imux_pins[2] = spec->dock_mic_pin;
1020         for (i = 0; i < 3; i++) {
1021                 strcpy(imux->items[i].label, texts[i]);
1022                 if (spec->imux_pins[i])
1023                         imux->num_items = i + 1;
1024         }
1025         spec->num_mux_defs = 1;
1026         spec->input_mux = imux;
1027         return true;
1028 }
1029
1030 /* check whether all auto-mic pins are valid; setup indices if OK */
1031 static bool alc_auto_mic_check_imux(struct hda_codec *codec)
1032 {
1033         struct alc_spec *spec = codec->spec;
1034         const struct hda_input_mux *imux;
1035
1036         if (!spec->auto_mic)
1037                 return false;
1038         if (spec->auto_mic_valid_imux)
1039                 return true; /* already checked */
1040
1041         /* fill up imux indices */
1042         if (!alc_check_dyn_adc_switch(codec)) {
1043                 spec->auto_mic = 0;
1044                 return false;
1045         }
1046
1047         imux = spec->input_mux;
1048         spec->ext_mic_idx = find_idx_in_nid_list(spec->ext_mic_pin,
1049                                         spec->imux_pins, imux->num_items);
1050         spec->int_mic_idx = find_idx_in_nid_list(spec->int_mic_pin,
1051                                         spec->imux_pins, imux->num_items);
1052         spec->dock_mic_idx = find_idx_in_nid_list(spec->dock_mic_pin,
1053                                         spec->imux_pins, imux->num_items);
1054         if (spec->ext_mic_idx < 0 || spec->int_mic_idx < 0) {
1055                 spec->auto_mic = 0;
1056                 return false; /* no corresponding imux */
1057         }
1058
1059         snd_hda_codec_write_cache(codec, spec->ext_mic_pin, 0,
1060                                   AC_VERB_SET_UNSOLICITED_ENABLE,
1061                                   AC_USRSP_EN | ALC_MIC_EVENT);
1062         if (spec->dock_mic_pin)
1063                 snd_hda_codec_write_cache(codec, spec->dock_mic_pin, 0,
1064                                   AC_VERB_SET_UNSOLICITED_ENABLE,
1065                                   AC_USRSP_EN | ALC_MIC_EVENT);
1066
1067         spec->auto_mic_valid_imux = 1;
1068         spec->auto_mic = 1;
1069         return true;
1070 }
1071
1072 /*
1073  * Check the availability of auto-mic switch;
1074  * Set up if really supported
1075  */
1076 static void alc_init_auto_mic(struct hda_codec *codec)
1077 {
1078         struct alc_spec *spec = codec->spec;
1079         struct auto_pin_cfg *cfg = &spec->autocfg;
1080         hda_nid_t fixed, ext, dock;
1081         int i;
1082
1083         spec->ext_mic_idx = spec->int_mic_idx = spec->dock_mic_idx = -1;
1084
1085         fixed = ext = dock = 0;
1086         for (i = 0; i < cfg->num_inputs; i++) {
1087                 hda_nid_t nid = cfg->inputs[i].pin;
1088                 unsigned int defcfg;
1089                 defcfg = snd_hda_codec_get_pincfg(codec, nid);
1090                 switch (snd_hda_get_input_pin_attr(defcfg)) {
1091                 case INPUT_PIN_ATTR_INT:
1092                         if (fixed)
1093                                 return; /* already occupied */
1094                         if (cfg->inputs[i].type != AUTO_PIN_MIC)
1095                                 return; /* invalid type */
1096                         fixed = nid;
1097                         break;
1098                 case INPUT_PIN_ATTR_UNUSED:
1099                         return; /* invalid entry */
1100                 case INPUT_PIN_ATTR_DOCK:
1101                         if (dock)
1102                                 return; /* already occupied */
1103                         if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
1104                                 return; /* invalid type */
1105                         dock = nid;
1106                         break;
1107                 default:
1108                         if (ext)
1109                                 return; /* already occupied */
1110                         if (cfg->inputs[i].type != AUTO_PIN_MIC)
1111                                 return; /* invalid type */
1112                         ext = nid;
1113                         break;
1114                 }
1115         }
1116         if (!ext && dock) {
1117                 ext = dock;
1118                 dock = 0;
1119         }
1120         if (!ext || !fixed)
1121                 return;
1122         if (!is_jack_detectable(codec, ext))
1123                 return; /* no unsol support */
1124         if (dock && !is_jack_detectable(codec, dock))
1125                 return; /* no unsol support */
1126
1127         /* check imux indices */
1128         spec->ext_mic_pin = ext;
1129         spec->int_mic_pin = fixed;
1130         spec->dock_mic_pin = dock;
1131
1132         spec->auto_mic = 1;
1133         if (!alc_auto_mic_check_imux(codec))
1134                 return;
1135
1136         snd_printdd("realtek: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
1137                     ext, fixed, dock);
1138         spec->unsol_event = alc_sku_unsol_event;
1139 }
1140
1141 /* check the availabilities of auto-mute and auto-mic switches */
1142 static void alc_auto_check_switches(struct hda_codec *codec)
1143 {
1144         alc_init_auto_hp(codec);
1145         alc_init_auto_mic(codec);
1146 }
1147
1148 /*
1149  * Realtek SSID verification
1150  */
1151
1152 /* Could be any non-zero and even value. When used as fixup, tells
1153  * the driver to ignore any present sku defines.
1154  */
1155 #define ALC_FIXUP_SKU_IGNORE (2)
1156
1157 static int alc_auto_parse_customize_define(struct hda_codec *codec)
1158 {
1159         unsigned int ass, tmp, i;
1160         unsigned nid = 0;
1161         struct alc_spec *spec = codec->spec;
1162
1163         spec->cdefine.enable_pcbeep = 1; /* assume always enabled */
1164
1165         if (spec->cdefine.fixup) {
1166                 ass = spec->cdefine.sku_cfg;
1167                 if (ass == ALC_FIXUP_SKU_IGNORE)
1168                         return -1;
1169                 goto do_sku;
1170         }
1171
1172         ass = codec->subsystem_id & 0xffff;
1173         if (ass != codec->bus->pci->subsystem_device && (ass & 1))
1174                 goto do_sku;
1175
1176         nid = 0x1d;
1177         if (codec->vendor_id == 0x10ec0260)
1178                 nid = 0x17;
1179         ass = snd_hda_codec_get_pincfg(codec, nid);
1180
1181         if (!(ass & 1)) {
1182                 printk(KERN_INFO "hda_codec: %s: SKU not ready 0x%08x\n",
1183                        codec->chip_name, ass);
1184                 return -1;
1185         }
1186
1187         /* check sum */
1188         tmp = 0;
1189         for (i = 1; i < 16; i++) {
1190                 if ((ass >> i) & 1)
1191                         tmp++;
1192         }
1193         if (((ass >> 16) & 0xf) != tmp)
1194                 return -1;
1195
1196         spec->cdefine.port_connectivity = ass >> 30;
1197         spec->cdefine.enable_pcbeep = (ass & 0x100000) >> 20;
1198         spec->cdefine.check_sum = (ass >> 16) & 0xf;
1199         spec->cdefine.customization = ass >> 8;
1200 do_sku:
1201         spec->cdefine.sku_cfg = ass;
1202         spec->cdefine.external_amp = (ass & 0x38) >> 3;
1203         spec->cdefine.platform_type = (ass & 0x4) >> 2;
1204         spec->cdefine.swap = (ass & 0x2) >> 1;
1205         spec->cdefine.override = ass & 0x1;
1206
1207         snd_printd("SKU: Nid=0x%x sku_cfg=0x%08x\n",
1208                    nid, spec->cdefine.sku_cfg);
1209         snd_printd("SKU: port_connectivity=0x%x\n",
1210                    spec->cdefine.port_connectivity);
1211         snd_printd("SKU: enable_pcbeep=0x%x\n", spec->cdefine.enable_pcbeep);
1212         snd_printd("SKU: check_sum=0x%08x\n", spec->cdefine.check_sum);
1213         snd_printd("SKU: customization=0x%08x\n", spec->cdefine.customization);
1214         snd_printd("SKU: external_amp=0x%x\n", spec->cdefine.external_amp);
1215         snd_printd("SKU: platform_type=0x%x\n", spec->cdefine.platform_type);
1216         snd_printd("SKU: swap=0x%x\n", spec->cdefine.swap);
1217         snd_printd("SKU: override=0x%x\n", spec->cdefine.override);
1218
1219         return 0;
1220 }
1221
1222 /* return true if the given NID is found in the list */
1223 static bool found_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
1224 {
1225         return find_idx_in_nid_list(nid, list, nums) >= 0;
1226 }
1227
1228 /* check subsystem ID and set up device-specific initialization;
1229  * return 1 if initialized, 0 if invalid SSID
1230  */
1231 /* 32-bit subsystem ID for BIOS loading in HD Audio codec.
1232  *      31 ~ 16 :       Manufacture ID
1233  *      15 ~ 8  :       SKU ID
1234  *      7  ~ 0  :       Assembly ID
1235  *      port-A --> pin 39/41, port-E --> pin 14/15, port-D --> pin 35/36
1236  */
1237 static int alc_subsystem_id(struct hda_codec *codec,
1238                             hda_nid_t porta, hda_nid_t porte,
1239                             hda_nid_t portd, hda_nid_t porti)
1240 {
1241         unsigned int ass, tmp, i;
1242         unsigned nid;
1243         struct alc_spec *spec = codec->spec;
1244
1245         if (spec->cdefine.fixup) {
1246                 ass = spec->cdefine.sku_cfg;
1247                 if (ass == ALC_FIXUP_SKU_IGNORE)
1248                         return 0;
1249                 goto do_sku;
1250         }
1251
1252         ass = codec->subsystem_id & 0xffff;
1253         if ((ass != codec->bus->pci->subsystem_device) && (ass & 1))
1254                 goto do_sku;
1255
1256         /* invalid SSID, check the special NID pin defcfg instead */
1257         /*
1258          * 31~30        : port connectivity
1259          * 29~21        : reserve
1260          * 20           : PCBEEP input
1261          * 19~16        : Check sum (15:1)
1262          * 15~1         : Custom
1263          * 0            : override
1264         */
1265         nid = 0x1d;
1266         if (codec->vendor_id == 0x10ec0260)
1267                 nid = 0x17;
1268         ass = snd_hda_codec_get_pincfg(codec, nid);
1269         snd_printd("realtek: No valid SSID, "
1270                    "checking pincfg 0x%08x for NID 0x%x\n",
1271                    ass, nid);
1272         if (!(ass & 1))
1273                 return 0;
1274         if ((ass >> 30) != 1)   /* no physical connection */
1275                 return 0;
1276
1277         /* check sum */
1278         tmp = 0;
1279         for (i = 1; i < 16; i++) {
1280                 if ((ass >> i) & 1)
1281                         tmp++;
1282         }
1283         if (((ass >> 16) & 0xf) != tmp)
1284                 return 0;
1285 do_sku:
1286         snd_printd("realtek: Enabling init ASM_ID=0x%04x CODEC_ID=%08x\n",
1287                    ass & 0xffff, codec->vendor_id);
1288         /*
1289          * 0 : override
1290          * 1 :  Swap Jack
1291          * 2 : 0 --> Desktop, 1 --> Laptop
1292          * 3~5 : External Amplifier control
1293          * 7~6 : Reserved
1294         */
1295         tmp = (ass & 0x38) >> 3;        /* external Amp control */
1296         switch (tmp) {
1297         case 1:
1298                 spec->init_amp = ALC_INIT_GPIO1;
1299                 break;
1300         case 3:
1301                 spec->init_amp = ALC_INIT_GPIO2;
1302                 break;
1303         case 7:
1304                 spec->init_amp = ALC_INIT_GPIO3;
1305                 break;
1306         case 5:
1307         default:
1308                 spec->init_amp = ALC_INIT_DEFAULT;
1309                 break;
1310         }
1311
1312         /* is laptop or Desktop and enable the function "Mute internal speaker
1313          * when the external headphone out jack is plugged"
1314          */
1315         if (!(ass & 0x8000))
1316                 return 1;
1317         /*
1318          * 10~8 : Jack location
1319          * 12~11: Headphone out -> 00: PortA, 01: PortE, 02: PortD, 03: Resvered
1320          * 14~13: Resvered
1321          * 15   : 1 --> enable the function "Mute internal speaker
1322          *              when the external headphone out jack is plugged"
1323          */
1324         if (!spec->autocfg.hp_pins[0]) {
1325                 hda_nid_t nid;
1326                 tmp = (ass >> 11) & 0x3;        /* HP to chassis */
1327                 if (tmp == 0)
1328                         nid = porta;
1329                 else if (tmp == 1)
1330                         nid = porte;
1331                 else if (tmp == 2)
1332                         nid = portd;
1333                 else if (tmp == 3)
1334                         nid = porti;
1335                 else
1336                         return 1;
1337                 if (found_in_nid_list(nid, spec->autocfg.line_out_pins,
1338                                       spec->autocfg.line_outs))
1339                         return 1;
1340                 spec->autocfg.hp_pins[0] = nid;
1341         }
1342         return 1;
1343 }
1344
1345 /* Check the validity of ALC subsystem-id
1346  * ports contains an array of 4 pin NIDs for port-A, E, D and I */
1347 static void alc_ssid_check(struct hda_codec *codec, const hda_nid_t *ports)
1348 {
1349         if (!alc_subsystem_id(codec, ports[0], ports[1], ports[2], ports[3])) {
1350                 struct alc_spec *spec = codec->spec;
1351                 snd_printd("realtek: "
1352                            "Enable default setup for auto mode as fallback\n");
1353                 spec->init_amp = ALC_INIT_DEFAULT;
1354         }
1355 }
1356
1357 /*
1358  * Fix-up pin default configurations and add default verbs
1359  */
1360
1361 struct alc_pincfg {
1362         hda_nid_t nid;
1363         u32 val;
1364 };
1365
1366 struct alc_model_fixup {
1367         const int id;
1368         const char *name;
1369 };
1370
1371 struct alc_fixup {
1372         int type;
1373         bool chained;
1374         int chain_id;
1375         union {
1376                 unsigned int sku;
1377                 const struct alc_pincfg *pins;
1378                 const struct hda_verb *verbs;
1379                 void (*func)(struct hda_codec *codec,
1380                              const struct alc_fixup *fix,
1381                              int action);
1382         } v;
1383 };
1384
1385 enum {
1386         ALC_FIXUP_INVALID,
1387         ALC_FIXUP_SKU,
1388         ALC_FIXUP_PINS,
1389         ALC_FIXUP_VERBS,
1390         ALC_FIXUP_FUNC,
1391 };
1392
1393 enum {
1394         ALC_FIXUP_ACT_PRE_PROBE,
1395         ALC_FIXUP_ACT_PROBE,
1396         ALC_FIXUP_ACT_INIT,
1397 };
1398
1399 static void alc_apply_fixup(struct hda_codec *codec, int action)
1400 {
1401         struct alc_spec *spec = codec->spec;
1402         int id = spec->fixup_id;
1403 #ifdef CONFIG_SND_DEBUG_VERBOSE
1404         const char *modelname = spec->fixup_name;
1405 #endif
1406         int depth = 0;
1407
1408         if (!spec->fixup_list)
1409                 return;
1410
1411         while (id >= 0) {
1412                 const struct alc_fixup *fix = spec->fixup_list + id;
1413                 const struct alc_pincfg *cfg;
1414
1415                 switch (fix->type) {
1416                 case ALC_FIXUP_SKU:
1417                         if (action != ALC_FIXUP_ACT_PRE_PROBE || !fix->v.sku)
1418                                 break;;
1419                         snd_printdd(KERN_INFO "hda_codec: %s: "
1420                                     "Apply sku override for %s\n",
1421                                     codec->chip_name, modelname);
1422                         spec->cdefine.sku_cfg = fix->v.sku;
1423                         spec->cdefine.fixup = 1;
1424                         break;
1425                 case ALC_FIXUP_PINS:
1426                         cfg = fix->v.pins;
1427                         if (action != ALC_FIXUP_ACT_PRE_PROBE || !cfg)
1428                                 break;
1429                         snd_printdd(KERN_INFO "hda_codec: %s: "
1430                                     "Apply pincfg for %s\n",
1431                                     codec->chip_name, modelname);
1432                         for (; cfg->nid; cfg++)
1433                                 snd_hda_codec_set_pincfg(codec, cfg->nid,
1434                                                          cfg->val);
1435                         break;
1436                 case ALC_FIXUP_VERBS:
1437                         if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs)
1438                                 break;
1439                         snd_printdd(KERN_INFO "hda_codec: %s: "
1440                                     "Apply fix-verbs for %s\n",
1441                                     codec->chip_name, modelname);
1442                         add_verb(codec->spec, fix->v.verbs);
1443                         break;
1444                 case ALC_FIXUP_FUNC:
1445                         if (!fix->v.func)
1446                                 break;
1447                         snd_printdd(KERN_INFO "hda_codec: %s: "
1448                                     "Apply fix-func for %s\n",
1449                                     codec->chip_name, modelname);
1450                         fix->v.func(codec, fix, action);
1451                         break;
1452                 default:
1453                         snd_printk(KERN_ERR "hda_codec: %s: "
1454                                    "Invalid fixup type %d\n",
1455                                    codec->chip_name, fix->type);
1456                         break;
1457                 }
1458                 if (!fix->chained)
1459                         break;
1460                 if (++depth > 10)
1461                         break;
1462                 id = fix->chain_id;
1463         }
1464 }
1465
1466 static void alc_pick_fixup(struct hda_codec *codec,
1467                            const struct alc_model_fixup *models,
1468                            const struct snd_pci_quirk *quirk,
1469                            const struct alc_fixup *fixlist)
1470 {
1471         struct alc_spec *spec = codec->spec;
1472         int id = -1;
1473         const char *name = NULL;
1474
1475         if (codec->modelname && models) {
1476                 while (models->name) {
1477                         if (!strcmp(codec->modelname, models->name)) {
1478                                 id = models->id;
1479                                 name = models->name;
1480                                 break;
1481                         }
1482                         models++;
1483                 }
1484         }
1485         if (id < 0) {
1486                 quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk);
1487                 if (quirk) {
1488                         id = quirk->value;
1489 #ifdef CONFIG_SND_DEBUG_VERBOSE
1490                         name = quirk->name;
1491 #endif
1492                 }
1493         }
1494
1495         spec->fixup_id = id;
1496         if (id >= 0) {
1497                 spec->fixup_list = fixlist;
1498                 spec->fixup_name = name;
1499         }
1500 }
1501
1502 /*
1503  * COEF access helper functions
1504  */
1505 static int alc_read_coef_idx(struct hda_codec *codec,
1506                         unsigned int coef_idx)
1507 {
1508         unsigned int val;
1509         snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX,
1510                                 coef_idx);
1511         val = snd_hda_codec_read(codec, 0x20, 0,
1512                                 AC_VERB_GET_PROC_COEF, 0);
1513         return val;
1514 }
1515
1516 static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx,
1517                                                         unsigned int coef_val)
1518 {
1519         snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX,
1520                             coef_idx);
1521         snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF,
1522                             coef_val);
1523 }
1524
1525 /*
1526  * Digital I/O handling
1527  */
1528
1529 /* set right pin controls for digital I/O */
1530 static void alc_auto_init_digital(struct hda_codec *codec)
1531 {
1532         struct alc_spec *spec = codec->spec;
1533         int i;
1534         hda_nid_t pin, dac;
1535
1536         for (i = 0; i < spec->autocfg.dig_outs; i++) {
1537                 pin = spec->autocfg.dig_out_pins[i];
1538                 if (!pin)
1539                         continue;
1540                 snd_hda_codec_write(codec, pin, 0,
1541                                     AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
1542                 if (!i)
1543                         dac = spec->multiout.dig_out_nid;
1544                 else
1545                         dac = spec->slave_dig_outs[i - 1];
1546                 if (!dac || !(get_wcaps(codec, dac) & AC_WCAP_OUT_AMP))
1547                         continue;
1548                 snd_hda_codec_write(codec, dac, 0,
1549                                     AC_VERB_SET_AMP_GAIN_MUTE,
1550                                     AMP_OUT_UNMUTE);
1551         }
1552         pin = spec->autocfg.dig_in_pin;
1553         if (pin)
1554                 snd_hda_codec_write(codec, pin, 0,
1555                                     AC_VERB_SET_PIN_WIDGET_CONTROL,
1556                                     PIN_IN);
1557 }
1558
1559 /* parse digital I/Os and set up NIDs in BIOS auto-parse mode */
1560 static void alc_auto_parse_digital(struct hda_codec *codec)
1561 {
1562         struct alc_spec *spec = codec->spec;
1563         int i, err;
1564         hda_nid_t dig_nid;
1565
1566         /* support multiple SPDIFs; the secondary is set up as a slave */
1567         for (i = 0; i < spec->autocfg.dig_outs; i++) {
1568                 hda_nid_t conn[4];
1569                 err = snd_hda_get_connections(codec,
1570                                               spec->autocfg.dig_out_pins[i],
1571                                               conn, ARRAY_SIZE(conn));
1572                 if (err < 0)
1573                         continue;
1574                 dig_nid = conn[0]; /* assume the first element is audio-out */
1575                 if (!i) {
1576                         spec->multiout.dig_out_nid = dig_nid;
1577                         spec->dig_out_type = spec->autocfg.dig_out_type[0];
1578                 } else {
1579                         spec->multiout.slave_dig_outs = spec->slave_dig_outs;
1580                         if (i >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
1581                                 break;
1582                         spec->slave_dig_outs[i - 1] = dig_nid;
1583                 }
1584         }
1585
1586         if (spec->autocfg.dig_in_pin) {
1587                 dig_nid = codec->start_nid;
1588                 for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
1589                         unsigned int wcaps = get_wcaps(codec, dig_nid);
1590                         if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
1591                                 continue;
1592                         if (!(wcaps & AC_WCAP_DIGITAL))
1593                                 continue;
1594                         if (!(wcaps & AC_WCAP_CONN_LIST))
1595                                 continue;
1596                         err = get_connection_index(codec, dig_nid,
1597                                                    spec->autocfg.dig_in_pin);
1598                         if (err >= 0) {
1599                                 spec->dig_in_nid = dig_nid;
1600                                 break;
1601                         }
1602                 }
1603         }
1604 }
1605
1606 /*
1607  * capture mixer elements
1608  */
1609 static int alc_cap_vol_info(struct snd_kcontrol *kcontrol,
1610                             struct snd_ctl_elem_info *uinfo)
1611 {
1612         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1613         struct alc_spec *spec = codec->spec;
1614         unsigned long val;
1615         int err;
1616
1617         mutex_lock(&codec->control_mutex);
1618         if (spec->vol_in_capsrc)
1619                 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT);
1620         else
1621                 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT);
1622         kcontrol->private_value = val;
1623         err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
1624         mutex_unlock(&codec->control_mutex);
1625         return err;
1626 }
1627
1628 static int alc_cap_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1629                            unsigned int size, unsigned int __user *tlv)
1630 {
1631         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1632         struct alc_spec *spec = codec->spec;
1633         unsigned long val;
1634         int err;
1635
1636         mutex_lock(&codec->control_mutex);
1637         if (spec->vol_in_capsrc)
1638                 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT);
1639         else
1640                 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT);
1641         kcontrol->private_value = val;
1642         err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
1643         mutex_unlock(&codec->control_mutex);
1644         return err;
1645 }
1646
1647 typedef int (*getput_call_t)(struct snd_kcontrol *kcontrol,
1648                              struct snd_ctl_elem_value *ucontrol);
1649
1650 static int alc_cap_getput_caller(struct snd_kcontrol *kcontrol,
1651                                  struct snd_ctl_elem_value *ucontrol,
1652                                  getput_call_t func, bool check_adc_switch)
1653 {
1654         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1655         struct alc_spec *spec = codec->spec;
1656         int i, err = 0;
1657
1658         mutex_lock(&codec->control_mutex);
1659         if (check_adc_switch && spec->dyn_adc_switch) {
1660                 for (i = 0; i < spec->num_adc_nids; i++) {
1661                         kcontrol->private_value =
1662                                 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
1663                                                     3, 0, HDA_INPUT);
1664                         err = func(kcontrol, ucontrol);
1665                         if (err < 0)
1666                                 goto error;
1667                 }
1668         } else {
1669                 i = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
1670                 if (spec->vol_in_capsrc)
1671                         kcontrol->private_value =
1672                                 HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[i],
1673                                                     3, 0, HDA_OUTPUT);
1674                 else
1675                         kcontrol->private_value =
1676                                 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
1677                                                     3, 0, HDA_INPUT);
1678                 err = func(kcontrol, ucontrol);
1679         }
1680  error:
1681         mutex_unlock(&codec->control_mutex);
1682         return err;
1683 }
1684
1685 static int alc_cap_vol_get(struct snd_kcontrol *kcontrol,
1686                            struct snd_ctl_elem_value *ucontrol)
1687 {
1688         return alc_cap_getput_caller(kcontrol, ucontrol,
1689                                      snd_hda_mixer_amp_volume_get, false);
1690 }
1691
1692 static int alc_cap_vol_put(struct snd_kcontrol *kcontrol,
1693                            struct snd_ctl_elem_value *ucontrol)
1694 {
1695         return alc_cap_getput_caller(kcontrol, ucontrol,
1696                                      snd_hda_mixer_amp_volume_put, true);
1697 }
1698
1699 /* capture mixer elements */
1700 #define alc_cap_sw_info         snd_ctl_boolean_stereo_info
1701
1702 static int alc_cap_sw_get(struct snd_kcontrol *kcontrol,
1703                           struct snd_ctl_elem_value *ucontrol)
1704 {
1705         return alc_cap_getput_caller(kcontrol, ucontrol,
1706                                      snd_hda_mixer_amp_switch_get, false);
1707 }
1708
1709 static int alc_cap_sw_put(struct snd_kcontrol *kcontrol,
1710                           struct snd_ctl_elem_value *ucontrol)
1711 {
1712         return alc_cap_getput_caller(kcontrol, ucontrol,
1713                                      snd_hda_mixer_amp_switch_put, true);
1714 }
1715
1716 #define _DEFINE_CAPMIX(num) \
1717         { \
1718                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1719                 .name = "Capture Switch", \
1720                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \
1721                 .count = num, \
1722                 .info = alc_cap_sw_info, \
1723                 .get = alc_cap_sw_get, \
1724                 .put = alc_cap_sw_put, \
1725         }, \
1726         { \
1727                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1728                 .name = "Capture Volume", \
1729                 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | \
1730                            SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
1731                            SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK), \
1732                 .count = num, \
1733                 .info = alc_cap_vol_info, \
1734                 .get = alc_cap_vol_get, \
1735                 .put = alc_cap_vol_put, \
1736                 .tlv = { .c = alc_cap_vol_tlv }, \
1737         }
1738
1739 #define _DEFINE_CAPSRC(num) \
1740         { \
1741                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1742                 /* .name = "Capture Source", */ \
1743                 .name = "Input Source", \
1744                 .count = num, \
1745                 .info = alc_mux_enum_info, \
1746                 .get = alc_mux_enum_get, \
1747                 .put = alc_mux_enum_put, \
1748         }
1749
1750 #define DEFINE_CAPMIX(num) \
1751 static const struct snd_kcontrol_new alc_capture_mixer ## num[] = { \
1752         _DEFINE_CAPMIX(num),                                  \
1753         _DEFINE_CAPSRC(num),                                  \
1754         { } /* end */                                         \
1755 }
1756
1757 #define DEFINE_CAPMIX_NOSRC(num) \
1758 static const struct snd_kcontrol_new alc_capture_mixer_nosrc ## num[] = { \
1759         _DEFINE_CAPMIX(num),                                        \
1760         { } /* end */                                               \
1761 }
1762
1763 /* up to three ADCs */
1764 DEFINE_CAPMIX(1);
1765 DEFINE_CAPMIX(2);
1766 DEFINE_CAPMIX(3);
1767 DEFINE_CAPMIX_NOSRC(1);
1768 DEFINE_CAPMIX_NOSRC(2);
1769 DEFINE_CAPMIX_NOSRC(3);
1770
1771 /*
1772  * virtual master controls
1773  */
1774
1775 /*
1776  * slave controls for virtual master
1777  */
1778 static const char * const alc_slave_vols[] = {
1779         "Front Playback Volume",
1780         "Surround Playback Volume",
1781         "Center Playback Volume",
1782         "LFE Playback Volume",
1783         "Side Playback Volume",
1784         "Headphone Playback Volume",
1785         "Speaker Playback Volume",
1786         "Mono Playback Volume",
1787         "Line-Out Playback Volume",
1788         "PCM Playback Volume",
1789         NULL,
1790 };
1791
1792 static const char * const alc_slave_sws[] = {
1793         "Front Playback Switch",
1794         "Surround Playback Switch",
1795         "Center Playback Switch",
1796         "LFE Playback Switch",
1797         "Side Playback Switch",
1798         "Headphone Playback Switch",
1799         "Speaker Playback Switch",
1800         "Mono Playback Switch",
1801         "IEC958 Playback Switch",
1802         "Line-Out Playback Switch",
1803         "PCM Playback Switch",
1804         NULL,
1805 };
1806
1807 /*
1808  * build control elements
1809  */
1810
1811 #define NID_MAPPING             (-1)
1812
1813 #define SUBDEV_SPEAKER_         (0 << 6)
1814 #define SUBDEV_HP_              (1 << 6)
1815 #define SUBDEV_LINE_            (2 << 6)
1816 #define SUBDEV_SPEAKER(x)       (SUBDEV_SPEAKER_ | ((x) & 0x3f))
1817 #define SUBDEV_HP(x)            (SUBDEV_HP_ | ((x) & 0x3f))
1818 #define SUBDEV_LINE(x)          (SUBDEV_LINE_ | ((x) & 0x3f))
1819
1820 static void alc_free_kctls(struct hda_codec *codec);
1821
1822 #ifdef CONFIG_SND_HDA_INPUT_BEEP
1823 /* additional beep mixers; the actual parameters are overwritten at build */
1824 static const struct snd_kcontrol_new alc_beep_mixer[] = {
1825         HDA_CODEC_VOLUME("Beep Playback Volume", 0, 0, HDA_INPUT),
1826         HDA_CODEC_MUTE_BEEP("Beep Playback Switch", 0, 0, HDA_INPUT),
1827         { } /* end */
1828 };
1829 #endif
1830
1831 static int alc_build_controls(struct hda_codec *codec)
1832 {
1833         struct alc_spec *spec = codec->spec;
1834         struct snd_kcontrol *kctl = NULL;
1835         const struct snd_kcontrol_new *knew;
1836         int i, j, err;
1837         unsigned int u;
1838         hda_nid_t nid;
1839
1840         for (i = 0; i < spec->num_mixers; i++) {
1841                 err = snd_hda_add_new_ctls(codec, spec->mixers[i]);
1842                 if (err < 0)
1843                         return err;
1844         }
1845         if (spec->cap_mixer) {
1846                 err = snd_hda_add_new_ctls(codec, spec->cap_mixer);
1847                 if (err < 0)
1848                         return err;
1849         }
1850         if (spec->multiout.dig_out_nid) {
1851                 err = snd_hda_create_spdif_out_ctls(codec,
1852                                                     spec->multiout.dig_out_nid,
1853                                                     spec->multiout.dig_out_nid);
1854                 if (err < 0)
1855                         return err;
1856                 if (!spec->no_analog) {
1857                         err = snd_hda_create_spdif_share_sw(codec,
1858                                                             &spec->multiout);
1859                         if (err < 0)
1860                                 return err;
1861                         spec->multiout.share_spdif = 1;
1862                 }
1863         }
1864         if (spec->dig_in_nid) {
1865                 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
1866                 if (err < 0)
1867                         return err;
1868         }
1869
1870 #ifdef CONFIG_SND_HDA_INPUT_BEEP
1871         /* create beep controls if needed */
1872         if (spec->beep_amp) {
1873                 const struct snd_kcontrol_new *knew;
1874                 for (knew = alc_beep_mixer; knew->name; knew++) {
1875                         struct snd_kcontrol *kctl;
1876                         kctl = snd_ctl_new1(knew, codec);
1877                         if (!kctl)
1878                                 return -ENOMEM;
1879                         kctl->private_value = spec->beep_amp;
1880                         err = snd_hda_ctl_add(codec, 0, kctl);
1881                         if (err < 0)
1882                                 return err;
1883                 }
1884         }
1885 #endif
1886
1887         /* if we have no master control, let's create it */
1888         if (!spec->no_analog &&
1889             !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
1890                 unsigned int vmaster_tlv[4];
1891                 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1892                                         HDA_OUTPUT, vmaster_tlv);
1893                 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
1894                                           vmaster_tlv, alc_slave_vols);
1895                 if (err < 0)
1896                         return err;
1897         }
1898         if (!spec->no_analog &&
1899             !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
1900                 err = snd_hda_add_vmaster(codec, "Master Playback Switch",
1901                                           NULL, alc_slave_sws);
1902                 if (err < 0)
1903                         return err;
1904         }
1905
1906         /* assign Capture Source enums to NID */
1907         if (spec->capsrc_nids || spec->adc_nids) {
1908                 kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
1909                 if (!kctl)
1910                         kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
1911                 for (i = 0; kctl && i < kctl->count; i++) {
1912                         const hda_nid_t *nids = spec->capsrc_nids;
1913                         if (!nids)
1914                                 nids = spec->adc_nids;
1915                         err = snd_hda_add_nid(codec, kctl, i, nids[i]);
1916                         if (err < 0)
1917                                 return err;
1918                 }
1919         }
1920         if (spec->cap_mixer && spec->adc_nids) {
1921                 const char *kname = kctl ? kctl->id.name : NULL;
1922                 for (knew = spec->cap_mixer; knew->name; knew++) {
1923                         if (kname && strcmp(knew->name, kname) == 0)
1924                                 continue;
1925                         kctl = snd_hda_find_mixer_ctl(codec, knew->name);
1926                         for (i = 0; kctl && i < kctl->count; i++) {
1927                                 err = snd_hda_add_nid(codec, kctl, i,
1928                                                       spec->adc_nids[i]);
1929                                 if (err < 0)
1930                                         return err;
1931                         }
1932                 }
1933         }
1934
1935         /* other nid->control mapping */
1936         for (i = 0; i < spec->num_mixers; i++) {
1937                 for (knew = spec->mixers[i]; knew->name; knew++) {
1938                         if (knew->iface != NID_MAPPING)
1939                                 continue;
1940                         kctl = snd_hda_find_mixer_ctl(codec, knew->name);
1941                         if (kctl == NULL)
1942                                 continue;
1943                         u = knew->subdevice;
1944                         for (j = 0; j < 4; j++, u >>= 8) {
1945                                 nid = u & 0x3f;
1946                                 if (nid == 0)
1947                                         continue;
1948                                 switch (u & 0xc0) {
1949                                 case SUBDEV_SPEAKER_:
1950                                         nid = spec->autocfg.speaker_pins[nid];
1951                                         break;
1952                                 case SUBDEV_LINE_:
1953                                         nid = spec->autocfg.line_out_pins[nid];
1954                                         break;
1955                                 case SUBDEV_HP_:
1956                                         nid = spec->autocfg.hp_pins[nid];
1957                                         break;
1958                                 default:
1959                                         continue;
1960                                 }
1961                                 err = snd_hda_add_nid(codec, kctl, 0, nid);
1962                                 if (err < 0)
1963                                         return err;
1964                         }
1965                         u = knew->private_value;
1966                         for (j = 0; j < 4; j++, u >>= 8) {
1967                                 nid = u & 0xff;
1968                                 if (nid == 0)
1969                                         continue;
1970                                 err = snd_hda_add_nid(codec, kctl, 0, nid);
1971                                 if (err < 0)
1972                                         return err;
1973                         }
1974                 }
1975         }
1976
1977         alc_free_kctls(codec); /* no longer needed */
1978
1979         return 0;
1980 }
1981
1982
1983 /*
1984  * Common callbacks
1985  */
1986
1987 static void alc_init_special_input_src(struct hda_codec *codec);
1988
1989 static int alc_init(struct hda_codec *codec)
1990 {
1991         struct alc_spec *spec = codec->spec;
1992         unsigned int i;
1993
1994         alc_fix_pll(codec);
1995         alc_auto_init_amp(codec, spec->init_amp);
1996
1997         for (i = 0; i < spec->num_init_verbs; i++)
1998                 snd_hda_sequence_write(codec, spec->init_verbs[i]);
1999         alc_init_special_input_src(codec);
2000
2001         if (spec->init_hook)
2002                 spec->init_hook(codec);
2003
2004         alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT);
2005
2006         hda_call_check_power_status(codec, 0x01);
2007         return 0;
2008 }
2009
2010 static void alc_unsol_event(struct hda_codec *codec, unsigned int res)
2011 {
2012         struct alc_spec *spec = codec->spec;
2013
2014         if (spec->unsol_event)
2015                 spec->unsol_event(codec, res);
2016 }
2017
2018 #ifdef CONFIG_SND_HDA_POWER_SAVE
2019 static int alc_check_power_status(struct hda_codec *codec, hda_nid_t nid)
2020 {
2021         struct alc_spec *spec = codec->spec;
2022         return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
2023 }
2024 #endif
2025
2026 /*
2027  * Analog playback callbacks
2028  */
2029 static int alc_playback_pcm_open(struct hda_pcm_stream *hinfo,
2030                                     struct hda_codec *codec,
2031                                     struct snd_pcm_substream *substream)
2032 {
2033         struct alc_spec *spec = codec->spec;
2034         return snd_hda_multi_out_analog_open(codec, &spec->multiout, substream,
2035                                              hinfo);
2036 }
2037
2038 static int alc_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2039                                        struct hda_codec *codec,
2040                                        unsigned int stream_tag,
2041                                        unsigned int format,
2042                                        struct snd_pcm_substream *substream)
2043 {
2044         struct alc_spec *spec = codec->spec;
2045         return snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
2046                                                 stream_tag, format, substream);
2047 }
2048
2049 static int alc_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2050                                        struct hda_codec *codec,
2051                                        struct snd_pcm_substream *substream)
2052 {
2053         struct alc_spec *spec = codec->spec;
2054         return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
2055 }
2056
2057 /*
2058  * Digital out
2059  */
2060 static int alc_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
2061                                         struct hda_codec *codec,
2062                                         struct snd_pcm_substream *substream)
2063 {
2064         struct alc_spec *spec = codec->spec;
2065         return snd_hda_multi_out_dig_open(codec, &spec->multiout);
2066 }
2067
2068 static int alc_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2069                                            struct hda_codec *codec,
2070                                            unsigned int stream_tag,
2071                                            unsigned int format,
2072                                            struct snd_pcm_substream *substream)
2073 {
2074         struct alc_spec *spec = codec->spec;
2075         return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
2076                                              stream_tag, format, substream);
2077 }
2078
2079 static int alc_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2080                                            struct hda_codec *codec,
2081                                            struct snd_pcm_substream *substream)
2082 {
2083         struct alc_spec *spec = codec->spec;
2084         return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
2085 }
2086
2087 static int alc_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
2088                                          struct hda_codec *codec,
2089                                          struct snd_pcm_substream *substream)
2090 {
2091         struct alc_spec *spec = codec->spec;
2092         return snd_hda_multi_out_dig_close(codec, &spec->multiout);
2093 }
2094
2095 /*
2096  * Analog capture
2097  */
2098 static int alc_alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
2099                                       struct hda_codec *codec,
2100                                       unsigned int stream_tag,
2101                                       unsigned int format,
2102                                       struct snd_pcm_substream *substream)
2103 {
2104         struct alc_spec *spec = codec->spec;
2105
2106         snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
2107                                    stream_tag, 0, format);
2108         return 0;
2109 }
2110
2111 static int alc_alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
2112                                       struct hda_codec *codec,
2113                                       struct snd_pcm_substream *substream)
2114 {
2115         struct alc_spec *spec = codec->spec;
2116
2117         snd_hda_codec_cleanup_stream(codec,
2118                                      spec->adc_nids[substream->number + 1]);
2119         return 0;
2120 }
2121
2122 /* analog capture with dynamic dual-adc changes */
2123 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
2124                                        struct hda_codec *codec,
2125                                        unsigned int stream_tag,
2126                                        unsigned int format,
2127                                        struct snd_pcm_substream *substream)
2128 {
2129         struct alc_spec *spec = codec->spec;
2130         spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
2131         spec->cur_adc_stream_tag = stream_tag;
2132         spec->cur_adc_format = format;
2133         snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
2134         return 0;
2135 }
2136
2137 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
2138                                        struct hda_codec *codec,
2139                                        struct snd_pcm_substream *substream)
2140 {
2141         struct alc_spec *spec = codec->spec;
2142         snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
2143         spec->cur_adc = 0;
2144         return 0;
2145 }
2146
2147 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
2148         .substreams = 1,
2149         .channels_min = 2,
2150         .channels_max = 2,
2151         .nid = 0, /* fill later */
2152         .ops = {
2153                 .prepare = dyn_adc_capture_pcm_prepare,
2154                 .cleanup = dyn_adc_capture_pcm_cleanup
2155         },
2156 };
2157
2158 /*
2159  */
2160 static const struct hda_pcm_stream alc_pcm_analog_playback = {
2161         .substreams = 1,
2162         .channels_min = 2,
2163         .channels_max = 8,
2164         /* NID is set in alc_build_pcms */
2165         .ops = {
2166                 .open = alc_playback_pcm_open,
2167                 .prepare = alc_playback_pcm_prepare,
2168                 .cleanup = alc_playback_pcm_cleanup
2169         },
2170 };
2171
2172 static const struct hda_pcm_stream alc_pcm_analog_capture = {
2173         .substreams = 1,
2174         .channels_min = 2,
2175         .channels_max = 2,
2176         /* NID is set in alc_build_pcms */
2177 };
2178
2179 static const struct hda_pcm_stream alc_pcm_analog_alt_playback = {
2180         .substreams = 1,
2181         .channels_min = 2,
2182         .channels_max = 2,
2183         /* NID is set in alc_build_pcms */
2184 };
2185
2186 static const struct hda_pcm_stream alc_pcm_analog_alt_capture = {
2187         .substreams = 2, /* can be overridden */
2188         .channels_min = 2,
2189         .channels_max = 2,
2190         /* NID is set in alc_build_pcms */
2191         .ops = {
2192                 .prepare = alc_alt_capture_pcm_prepare,
2193                 .cleanup = alc_alt_capture_pcm_cleanup
2194         },
2195 };
2196
2197 static const struct hda_pcm_stream alc_pcm_digital_playback = {
2198         .substreams = 1,
2199         .channels_min = 2,
2200         .channels_max = 2,
2201         /* NID is set in alc_build_pcms */
2202         .ops = {
2203                 .open = alc_dig_playback_pcm_open,
2204                 .close = alc_dig_playback_pcm_close,
2205                 .prepare = alc_dig_playback_pcm_prepare,
2206                 .cleanup = alc_dig_playback_pcm_cleanup
2207         },
2208 };
2209
2210 static const struct hda_pcm_stream alc_pcm_digital_capture = {
2211         .substreams = 1,
2212         .channels_min = 2,
2213         .channels_max = 2,
2214         /* NID is set in alc_build_pcms */
2215 };
2216
2217 /* Used by alc_build_pcms to flag that a PCM has no playback stream */
2218 static const struct hda_pcm_stream alc_pcm_null_stream = {
2219         .substreams = 0,
2220         .channels_min = 0,
2221         .channels_max = 0,
2222 };
2223
2224 static int alc_build_pcms(struct hda_codec *codec)
2225 {
2226         struct alc_spec *spec = codec->spec;
2227         struct hda_pcm *info = spec->pcm_rec;
2228         const struct hda_pcm_stream *p;
2229         int i;
2230
2231         codec->num_pcms = 1;
2232         codec->pcm_info = info;
2233
2234         if (spec->no_analog)
2235                 goto skip_analog;
2236
2237         snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog),
2238                  "%s Analog", codec->chip_name);
2239         info->name = spec->stream_name_analog;
2240
2241         if (spec->multiout.dac_nids > 0) {
2242                 p = spec->stream_analog_playback;
2243                 if (!p)
2244                         p = &alc_pcm_analog_playback;
2245                 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2246                 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
2247         }
2248         if (spec->adc_nids) {
2249                 p = spec->stream_analog_capture;
2250                 if (!p) {
2251                         if (spec->dyn_adc_switch)
2252                                 p = &dyn_adc_pcm_analog_capture;
2253                         else
2254                                 p = &alc_pcm_analog_capture;
2255                 }
2256                 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2257                 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
2258         }
2259
2260         if (spec->channel_mode) {
2261                 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = 0;
2262                 for (i = 0; i < spec->num_channel_mode; i++) {
2263                         if (spec->channel_mode[i].channels > info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max) {
2264                                 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = spec->channel_mode[i].channels;
2265                         }
2266                 }
2267         }
2268
2269  skip_analog:
2270         /* SPDIF for stream index #1 */
2271         if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
2272                 snprintf(spec->stream_name_digital,
2273                          sizeof(spec->stream_name_digital),
2274                          "%s Digital", codec->chip_name);
2275                 codec->num_pcms = 2;
2276                 codec->slave_dig_outs = spec->multiout.slave_dig_outs;
2277                 info = spec->pcm_rec + 1;
2278                 info->name = spec->stream_name_digital;
2279                 if (spec->dig_out_type)
2280                         info->pcm_type = spec->dig_out_type;
2281                 else
2282                         info->pcm_type = HDA_PCM_TYPE_SPDIF;
2283                 if (spec->multiout.dig_out_nid) {
2284                         p = spec->stream_digital_playback;
2285                         if (!p)
2286                                 p = &alc_pcm_digital_playback;
2287                         info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2288                         info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
2289                 }
2290                 if (spec->dig_in_nid) {
2291                         p = spec->stream_digital_capture;
2292                         if (!p)
2293                                 p = &alc_pcm_digital_capture;
2294                         info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2295                         info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
2296                 }
2297                 /* FIXME: do we need this for all Realtek codec models? */
2298                 codec->spdif_status_reset = 1;
2299         }
2300
2301         if (spec->no_analog)
2302                 return 0;
2303
2304         /* If the use of more than one ADC is requested for the current
2305          * model, configure a second analog capture-only PCM.
2306          */
2307         /* Additional Analaog capture for index #2 */
2308         if (spec->alt_dac_nid || spec->num_adc_nids > 1) {
2309                 codec->num_pcms = 3;
2310                 info = spec->pcm_rec + 2;
2311                 info->name = spec->stream_name_analog;
2312                 if (spec->alt_dac_nid) {
2313                         p = spec->stream_analog_alt_playback;
2314                         if (!p)
2315                                 p = &alc_pcm_analog_alt_playback;
2316                         info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
2317                         info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
2318                                 spec->alt_dac_nid;
2319                 } else {
2320                         info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
2321                                 alc_pcm_null_stream;
2322                         info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
2323                 }
2324                 if (spec->num_adc_nids > 1) {
2325                         p = spec->stream_analog_alt_capture;
2326                         if (!p)
2327                                 p = &alc_pcm_analog_alt_capture;
2328                         info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
2329                         info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
2330                                 spec->adc_nids[1];
2331                         info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
2332                                 spec->num_adc_nids - 1;
2333                 } else {
2334                         info->stream[SNDRV_PCM_STREAM_CAPTURE] =
2335                                 alc_pcm_null_stream;
2336                         info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
2337                 }
2338         }
2339
2340         return 0;
2341 }
2342
2343 static inline void alc_shutup(struct hda_codec *codec)
2344 {
2345         struct alc_spec *spec = codec->spec;
2346
2347         if (spec && spec->shutup)
2348                 spec->shutup(codec);
2349         snd_hda_shutup_pins(codec);
2350 }
2351
2352 static void alc_free_kctls(struct hda_codec *codec)
2353 {
2354         struct alc_spec *spec = codec->spec;
2355
2356         if (spec->kctls.list) {
2357                 struct snd_kcontrol_new *kctl = spec->kctls.list;
2358                 int i;
2359                 for (i = 0; i < spec->kctls.used; i++)
2360                         kfree(kctl[i].name);
2361         }
2362         snd_array_free(&spec->kctls);
2363 }
2364
2365 static void alc_free(struct hda_codec *codec)
2366 {
2367         struct alc_spec *spec = codec->spec;
2368
2369         if (!spec)
2370                 return;
2371
2372         alc_shutup(codec);
2373         snd_hda_input_jack_free(codec);
2374         alc_free_kctls(codec);
2375         kfree(spec);
2376         snd_hda_detach_beep_device(codec);
2377 }
2378
2379 #ifdef CONFIG_SND_HDA_POWER_SAVE
2380 static void alc_power_eapd(struct hda_codec *codec)
2381 {
2382         alc_auto_setup_eapd(codec, false);
2383 }
2384
2385 static int alc_suspend(struct hda_codec *codec, pm_message_t state)
2386 {
2387         struct alc_spec *spec = codec->spec;
2388         alc_shutup(codec);
2389         if (spec && spec->power_hook)
2390                 spec->power_hook(codec);
2391         return 0;
2392 }
2393 #endif
2394
2395 #ifdef CONFIG_PM
2396 static int alc_resume(struct hda_codec *codec)
2397 {
2398         msleep(150); /* to avoid pop noise */
2399         codec->patch_ops.init(codec);
2400         snd_hda_codec_resume_amp(codec);
2401         snd_hda_codec_resume_cache(codec);
2402         hda_call_check_power_status(codec, 0x01);
2403         return 0;
2404 }
2405 #endif
2406
2407 /*
2408  */
2409 static const struct hda_codec_ops alc_patch_ops = {
2410         .build_controls = alc_build_controls,
2411         .build_pcms = alc_build_pcms,
2412         .init = alc_init,
2413         .free = alc_free,
2414         .unsol_event = alc_unsol_event,
2415 #ifdef CONFIG_PM
2416         .resume = alc_resume,
2417 #endif
2418 #ifdef CONFIG_SND_HDA_POWER_SAVE
2419         .suspend = alc_suspend,
2420         .check_power_status = alc_check_power_status,
2421 #endif
2422         .reboot_notify = alc_shutup,
2423 };
2424
2425 /* replace the codec chip_name with the given string */
2426 static int alc_codec_rename(struct hda_codec *codec, const char *name)
2427 {
2428         kfree(codec->chip_name);
2429         codec->chip_name = kstrdup(name, GFP_KERNEL);
2430         if (!codec->chip_name) {
2431                 alc_free(codec);
2432                 return -ENOMEM;
2433         }
2434         return 0;
2435 }
2436
2437 /*
2438  * Automatic parse of I/O pins from the BIOS configuration
2439  */
2440
2441 enum {
2442         ALC_CTL_WIDGET_VOL,
2443         ALC_CTL_WIDGET_MUTE,
2444         ALC_CTL_BIND_MUTE,
2445 };
2446 static const struct snd_kcontrol_new alc_control_templates[] = {
2447         HDA_CODEC_VOLUME(NULL, 0, 0, 0),
2448         HDA_CODEC_MUTE(NULL, 0, 0, 0),
2449         HDA_BIND_MUTE(NULL, 0, 0, 0),
2450 };
2451
2452 /* add dynamic controls */
2453 static int add_control(struct alc_spec *spec, int type, const char *name,
2454                        int cidx, unsigned long val)
2455 {
2456         struct snd_kcontrol_new *knew;
2457
2458         knew = alc_kcontrol_new(spec);
2459         if (!knew)
2460                 return -ENOMEM;
2461         *knew = alc_control_templates[type];
2462         knew->name = kstrdup(name, GFP_KERNEL);
2463         if (!knew->name)
2464                 return -ENOMEM;
2465         knew->index = cidx;
2466         if (get_amp_nid_(val))
2467                 knew->subdevice = HDA_SUBDEV_AMP_FLAG;
2468         knew->private_value = val;
2469         return 0;
2470 }
2471
2472 static int add_control_with_pfx(struct alc_spec *spec, int type,
2473                                 const char *pfx, const char *dir,
2474                                 const char *sfx, int cidx, unsigned long val)
2475 {
2476         char name[32];
2477         snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
2478         return add_control(spec, type, name, cidx, val);
2479 }
2480
2481 #define add_pb_vol_ctrl(spec, type, pfx, val)                   \
2482         add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
2483 #define add_pb_sw_ctrl(spec, type, pfx, val)                    \
2484         add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
2485 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val)                   \
2486         add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
2487 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val)                    \
2488         add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
2489
2490 static const char *alc_get_line_out_pfx(struct alc_spec *spec, int ch,
2491                                         bool can_be_master, int *index)
2492 {
2493         struct auto_pin_cfg *cfg = &spec->autocfg;
2494         static const char * const chname[4] = {
2495                 "Front", "Surround", NULL /*CLFE*/, "Side"
2496         };
2497
2498         *index = 0;
2499         if (cfg->line_outs == 1 && !spec->multi_ios &&
2500             !cfg->hp_outs && !cfg->speaker_outs && can_be_master)
2501                 return "Master";
2502
2503         switch (cfg->line_out_type) {
2504         case AUTO_PIN_SPEAKER_OUT:
2505                 if (cfg->line_outs == 1)
2506                         return "Speaker";
2507                 break;
2508         case AUTO_PIN_HP_OUT:
2509                 /* for multi-io case, only the primary out */
2510                 if (ch && spec->multi_ios)
2511                         break;
2512                 *index = ch;
2513                 return "Headphone";
2514         default:
2515                 if (cfg->line_outs == 1 && !spec->multi_ios)
2516                         return "PCM";
2517                 break;
2518         }
2519         return chname[ch];
2520 }
2521
2522 /* create input playback/capture controls for the given pin */
2523 static int new_analog_input(struct alc_spec *spec, hda_nid_t pin,
2524                             const char *ctlname, int ctlidx,
2525                             int idx, hda_nid_t mix_nid)
2526 {
2527         int err;
2528
2529         err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, ctlname, ctlidx,
2530                           HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT));
2531         if (err < 0)
2532                 return err;
2533         err = __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, ctlname, ctlidx,
2534                           HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT));
2535         if (err < 0)
2536                 return err;
2537         return 0;
2538 }
2539
2540 static int alc_is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2541 {
2542         unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2543         return (pincap & AC_PINCAP_IN) != 0;
2544 }
2545
2546 /* Parse the codec tree and retrieve ADCs and corresponding capsrc MUXs */
2547 static int alc_auto_fill_adc_caps(struct hda_codec *codec)
2548 {
2549         struct alc_spec *spec = codec->spec;
2550         hda_nid_t nid;
2551         hda_nid_t *adc_nids = spec->private_adc_nids;
2552         hda_nid_t *cap_nids = spec->private_capsrc_nids;
2553         int max_nums = ARRAY_SIZE(spec->private_adc_nids);
2554         bool indep_capsrc = false;
2555         int i, nums = 0;
2556
2557         nid = codec->start_nid;
2558         for (i = 0; i < codec->num_nodes; i++, nid++) {
2559                 hda_nid_t src;
2560                 const hda_nid_t *list;
2561                 unsigned int caps = get_wcaps(codec, nid);
2562                 int type = get_wcaps_type(caps);
2563
2564                 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2565                         continue;
2566                 adc_nids[nums] = nid;
2567                 cap_nids[nums] = nid;
2568                 src = nid;
2569                 for (;;) {
2570                         int n;
2571                         type = get_wcaps_type(get_wcaps(codec, src));
2572                         if (type == AC_WID_PIN)
2573                                 break;
2574                         if (type == AC_WID_AUD_SEL) {
2575                                 cap_nids[nums] = src;
2576                                 indep_capsrc = true;
2577                                 break;
2578                         }
2579                         n = snd_hda_get_conn_list(codec, src, &list);
2580                         if (n > 1) {
2581                                 cap_nids[nums] = src;
2582                                 indep_capsrc = true;
2583                                 break;
2584                         } else if (n != 1)
2585                                 break;
2586                         src = *list;
2587                 }
2588                 if (++nums >= max_nums)
2589                         break;
2590         }
2591         spec->adc_nids = spec->private_adc_nids;
2592         spec->capsrc_nids = spec->private_capsrc_nids;
2593         spec->num_adc_nids = nums;
2594         return nums;
2595 }
2596
2597 /* create playback/capture controls for input pins */
2598 static int alc_auto_create_input_ctls(struct hda_codec *codec)
2599 {
2600         struct alc_spec *spec = codec->spec;
2601         const struct auto_pin_cfg *cfg = &spec->autocfg;
2602         hda_nid_t mixer = spec->mixer_nid;
2603         struct hda_input_mux *imux = &spec->private_imux[0];
2604         int num_adcs;
2605         int i, c, err, idx, type_idx = 0;
2606         const char *prev_label = NULL;
2607
2608         num_adcs = alc_auto_fill_adc_caps(codec);
2609         if (num_adcs < 0)
2610                 return 0;
2611
2612         for (i = 0; i < cfg->num_inputs; i++) {
2613                 hda_nid_t pin;
2614                 const char *label;
2615
2616                 pin = cfg->inputs[i].pin;
2617                 if (!alc_is_input_pin(codec, pin))
2618                         continue;
2619
2620                 label = hda_get_autocfg_input_label(codec, cfg, i);
2621                 if (prev_label && !strcmp(label, prev_label))
2622                         type_idx++;
2623                 else
2624                         type_idx = 0;
2625                 prev_label = label;
2626
2627                 if (mixer) {
2628                         idx = get_connection_index(codec, mixer, pin);
2629                         if (idx >= 0) {
2630                                 err = new_analog_input(spec, pin,
2631                                                        label, type_idx,
2632                                                        idx, mixer);
2633                                 if (err < 0)
2634                                         return err;
2635                         }
2636                 }
2637
2638                 for (c = 0; c < num_adcs; c++) {
2639                         hda_nid_t cap = spec->capsrc_nids ?
2640                                 spec->capsrc_nids[c] : spec->adc_nids[c];
2641                         idx = get_connection_index(codec, cap, pin);
2642                         if (idx >= 0) {
2643                                 spec->imux_pins[imux->num_items] = pin;
2644                                 snd_hda_add_imux_item(imux, label, idx, NULL);
2645                                 break;
2646                         }
2647                 }
2648         }
2649
2650         spec->num_mux_defs = 1;
2651         spec->input_mux = imux;
2652
2653         return 0;
2654 }
2655
2656 static void alc_set_pin_output(struct hda_codec *codec, hda_nid_t nid,
2657                                unsigned int pin_type)
2658 {
2659         snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
2660                             pin_type);
2661         /* unmute pin */
2662         if (nid_has_mute(codec, nid, HDA_OUTPUT))
2663                 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
2664                             AMP_OUT_UNMUTE);
2665 }
2666
2667 static int get_pin_type(int line_out_type)
2668 {
2669         if (line_out_type == AUTO_PIN_HP_OUT)
2670                 return PIN_HP;
2671         else
2672                 return PIN_OUT;
2673 }
2674
2675 static void alc_auto_init_analog_input(struct hda_codec *codec)
2676 {
2677         struct alc_spec *spec = codec->spec;
2678         struct auto_pin_cfg *cfg = &spec->autocfg;
2679         int i;
2680
2681         for (i = 0; i < cfg->num_inputs; i++) {
2682                 hda_nid_t nid = cfg->inputs[i].pin;
2683                 if (alc_is_input_pin(codec, nid)) {
2684                         alc_set_input_pin(codec, nid, cfg->inputs[i].type);
2685                         if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP)
2686                                 snd_hda_codec_write(codec, nid, 0,
2687                                                     AC_VERB_SET_AMP_GAIN_MUTE,
2688                                                     AMP_OUT_MUTE);
2689                 }
2690         }
2691
2692         /* mute all loopback inputs */
2693         if (spec->mixer_nid) {
2694                 int nums = snd_hda_get_conn_list(codec, spec->mixer_nid, NULL);
2695                 for (i = 0; i < nums; i++)
2696                         snd_hda_codec_write(codec, spec->mixer_nid, 0,
2697                                             AC_VERB_SET_AMP_GAIN_MUTE,
2698                                             AMP_IN_MUTE(i));
2699         }
2700 }
2701
2702 /* convert from MIX nid to DAC */
2703 static hda_nid_t alc_auto_mix_to_dac(struct hda_codec *codec, hda_nid_t nid)
2704 {
2705         hda_nid_t list[5];
2706         int i, num;
2707
2708         if (get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_AUD_OUT)
2709                 return nid;
2710         num = snd_hda_get_connections(codec, nid, list, ARRAY_SIZE(list));
2711         for (i = 0; i < num; i++) {
2712                 if (get_wcaps_type(get_wcaps(codec, list[i])) == AC_WID_AUD_OUT)
2713                         return list[i];
2714         }
2715         return 0;
2716 }
2717
2718 /* go down to the selector widget before the mixer */
2719 static hda_nid_t alc_go_down_to_selector(struct hda_codec *codec, hda_nid_t pin)
2720 {
2721         hda_nid_t srcs[5];
2722         int num = snd_hda_get_connections(codec, pin, srcs,
2723                                           ARRAY_SIZE(srcs));
2724         if (num != 1 ||
2725             get_wcaps_type(get_wcaps(codec, srcs[0])) != AC_WID_AUD_SEL)
2726                 return pin;
2727         return srcs[0];
2728 }
2729
2730 /* get MIX nid connected to the given pin targeted to DAC */
2731 static hda_nid_t alc_auto_dac_to_mix(struct hda_codec *codec, hda_nid_t pin,
2732                                    hda_nid_t dac)
2733 {
2734         hda_nid_t mix[5];
2735         int i, num;
2736
2737         pin = alc_go_down_to_selector(codec, pin);
2738         num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix));
2739         for (i = 0; i < num; i++) {
2740                 if (alc_auto_mix_to_dac(codec, mix[i]) == dac)
2741                         return mix[i];
2742         }
2743         return 0;
2744 }
2745
2746 /* select the connection from pin to DAC if needed */
2747 static int alc_auto_select_dac(struct hda_codec *codec, hda_nid_t pin,
2748                                hda_nid_t dac)
2749 {
2750         hda_nid_t mix[5];
2751         int i, num;
2752
2753         pin = alc_go_down_to_selector(codec, pin);
2754         num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix));
2755         if (num < 2)
2756                 return 0;
2757         for (i = 0; i < num; i++) {
2758                 if (alc_auto_mix_to_dac(codec, mix[i]) == dac) {
2759                         snd_hda_codec_update_cache(codec, pin, 0,
2760                                                    AC_VERB_SET_CONNECT_SEL, i);
2761                         return 0;
2762                 }
2763         }
2764         return 0;
2765 }
2766
2767 /* look for an empty DAC slot */
2768 static hda_nid_t alc_auto_look_for_dac(struct hda_codec *codec, hda_nid_t pin)
2769 {
2770         struct alc_spec *spec = codec->spec;
2771         hda_nid_t srcs[5];
2772         int i, num;
2773
2774         pin = alc_go_down_to_selector(codec, pin);
2775         num = snd_hda_get_connections(codec, pin, srcs, ARRAY_SIZE(srcs));
2776         for (i = 0; i < num; i++) {
2777                 hda_nid_t nid = alc_auto_mix_to_dac(codec, srcs[i]);
2778                 if (!nid)
2779                         continue;
2780                 if (found_in_nid_list(nid, spec->multiout.dac_nids,
2781                                       spec->multiout.num_dacs))
2782                         continue;
2783                 if (spec->multiout.hp_nid == nid)
2784                         continue;
2785                 if (found_in_nid_list(nid, spec->multiout.extra_out_nid,
2786                                       ARRAY_SIZE(spec->multiout.extra_out_nid)))
2787                     continue;
2788                 return nid;
2789         }
2790         return 0;
2791 }
2792
2793 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
2794 {
2795         hda_nid_t sel = alc_go_down_to_selector(codec, pin);
2796         if (snd_hda_get_conn_list(codec, sel, NULL) == 1)
2797                 return alc_auto_look_for_dac(codec, pin);
2798         return 0;
2799 }
2800
2801 /* fill in the dac_nids table from the parsed pin configuration */
2802 static int alc_auto_fill_dac_nids(struct hda_codec *codec)
2803 {
2804         struct alc_spec *spec = codec->spec;
2805         const struct auto_pin_cfg *cfg = &spec->autocfg;
2806         bool redone = false;
2807         int i;
2808
2809  again:
2810         /* set num_dacs once to full for alc_auto_look_for_dac() */
2811         spec->multiout.num_dacs = cfg->line_outs;
2812         spec->multiout.hp_nid = 0;
2813         spec->multiout.extra_out_nid[0] = 0;
2814         memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
2815         spec->multiout.dac_nids = spec->private_dac_nids;
2816
2817         /* fill hard-wired DACs first */
2818         if (!redone) {
2819                 for (i = 0; i < cfg->line_outs; i++)
2820                         spec->private_dac_nids[i] =
2821                                 get_dac_if_single(codec, cfg->line_out_pins[i]);
2822                 if (cfg->hp_outs)
2823                         spec->multiout.hp_nid =
2824                                 get_dac_if_single(codec, cfg->hp_pins[0]);
2825                 if (cfg->speaker_outs)
2826                         spec->multiout.extra_out_nid[0] =
2827                                 get_dac_if_single(codec, cfg->speaker_pins[0]);
2828         }
2829
2830         for (i = 0; i < cfg->line_outs; i++) {
2831                 hda_nid_t pin = cfg->line_out_pins[i];
2832                 if (spec->private_dac_nids[i])
2833                         continue;
2834                 spec->private_dac_nids[i] = alc_auto_look_for_dac(codec, pin);
2835                 if (!spec->private_dac_nids[i] && !redone) {
2836                         /* if we can't find primary DACs, re-probe without
2837                          * checking the hard-wired DACs
2838                          */
2839                         redone = true;
2840                         goto again;
2841                 }
2842         }
2843
2844         /* re-count num_dacs and squash invalid entries */
2845         spec->multiout.num_dacs = 0;
2846         for (i = 0; i < cfg->line_outs; i++) {
2847                 if (spec->private_dac_nids[i])
2848                         spec->multiout.num_dacs++;
2849                 else
2850                         memmove(spec->private_dac_nids + i,
2851                                 spec->private_dac_nids + i + 1,
2852                                 sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
2853         }
2854
2855         if (cfg->hp_outs && !spec->multiout.hp_nid)
2856                 spec->multiout.hp_nid =
2857                         alc_auto_look_for_dac(codec, cfg->hp_pins[0]);
2858         if (cfg->speaker_outs && !spec->multiout.extra_out_nid[0])
2859                 spec->multiout.extra_out_nid[0] =
2860                         alc_auto_look_for_dac(codec, cfg->speaker_pins[0]);
2861
2862         return 0;
2863 }
2864
2865 static int alc_auto_add_vol_ctl(struct hda_codec *codec,
2866                               const char *pfx, int cidx,
2867                               hda_nid_t nid, unsigned int chs)
2868 {
2869         if (!nid)
2870                 return 0;
2871         return __add_pb_vol_ctrl(codec->spec, ALC_CTL_WIDGET_VOL, pfx, cidx,
2872                                  HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT));
2873 }
2874
2875 #define alc_auto_add_stereo_vol(codec, pfx, cidx, nid)  \
2876         alc_auto_add_vol_ctl(codec, pfx, cidx, nid, 3)
2877
2878 /* create a mute-switch for the given mixer widget;
2879  * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
2880  */
2881 static int alc_auto_add_sw_ctl(struct hda_codec *codec,
2882                              const char *pfx, int cidx,
2883                              hda_nid_t nid, unsigned int chs)
2884 {
2885         int wid_type;
2886         int type;
2887         unsigned long val;
2888         if (!nid)
2889                 return 0;
2890         wid_type = get_wcaps_type(get_wcaps(codec, nid));
2891         if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT) {
2892                 type = ALC_CTL_WIDGET_MUTE;
2893                 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT);
2894         } else if (snd_hda_get_conn_list(codec, nid, NULL) == 1) {
2895                 type = ALC_CTL_WIDGET_MUTE;
2896                 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT);
2897         } else {
2898                 type = ALC_CTL_BIND_MUTE;
2899                 val = HDA_COMPOSE_AMP_VAL(nid, chs, 2, HDA_INPUT);
2900         }
2901         return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
2902 }
2903
2904 #define alc_auto_add_stereo_sw(codec, pfx, cidx, nid)   \
2905         alc_auto_add_sw_ctl(codec, pfx, cidx, nid, 3)
2906
2907 static hda_nid_t alc_look_for_out_mute_nid(struct hda_codec *codec,
2908                                            hda_nid_t pin, hda_nid_t dac)
2909 {
2910         hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac);
2911         if (nid_has_mute(codec, pin, HDA_OUTPUT))
2912                 return pin;
2913         else if (mix && nid_has_mute(codec, mix, HDA_INPUT))
2914                 return mix;
2915         else if (nid_has_mute(codec, dac, HDA_OUTPUT))
2916                 return dac;
2917         return 0;
2918 }
2919
2920 static hda_nid_t alc_look_for_out_vol_nid(struct hda_codec *codec,
2921                                           hda_nid_t pin, hda_nid_t dac)
2922 {
2923         hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac);
2924         if (nid_has_volume(codec, dac, HDA_OUTPUT))
2925                 return dac;
2926         else if (nid_has_volume(codec, mix, HDA_OUTPUT))
2927                 return mix;
2928         else if (nid_has_volume(codec, pin, HDA_OUTPUT))
2929                 return pin;
2930         return 0;
2931 }
2932
2933 /* add playback controls from the parsed DAC table */
2934 static int alc_auto_create_multi_out_ctls(struct hda_codec *codec,
2935                                              const struct auto_pin_cfg *cfg)
2936 {
2937         struct alc_spec *spec = codec->spec;
2938         int i, err, noutputs;
2939
2940         noutputs = cfg->line_outs;
2941         if (spec->multi_ios > 0)
2942                 noutputs += spec->multi_ios;
2943
2944         for (i = 0; i < noutputs; i++) {
2945                 const char *name;
2946                 int index;
2947                 hda_nid_t dac, pin;
2948                 hda_nid_t sw, vol;
2949
2950                 dac = spec->multiout.dac_nids[i];
2951                 if (!dac)
2952                         continue;
2953                 if (i >= cfg->line_outs)
2954                         pin = spec->multi_io[i - 1].pin;
2955                 else
2956                         pin = cfg->line_out_pins[i];
2957
2958                 sw = alc_look_for_out_mute_nid(codec, pin, dac);
2959                 vol = alc_look_for_out_vol_nid(codec, pin, dac);
2960                 name = alc_get_line_out_pfx(spec, i, true, &index);
2961                 if (!name) {
2962                         /* Center/LFE */
2963                         err = alc_auto_add_vol_ctl(codec, "Center", 0, vol, 1);
2964                         if (err < 0)
2965                                 return err;
2966                         err = alc_auto_add_vol_ctl(codec, "LFE", 0, vol, 2);
2967                         if (err < 0)
2968                                 return err;
2969                         err = alc_auto_add_sw_ctl(codec, "Center", 0, sw, 1);
2970                         if (err < 0)
2971                                 return err;
2972                         err = alc_auto_add_sw_ctl(codec, "LFE", 0, sw, 2);
2973                         if (err < 0)
2974                                 return err;
2975                 } else {
2976                         err = alc_auto_add_stereo_vol(codec, name, index, vol);
2977                         if (err < 0)
2978                                 return err;
2979                         err = alc_auto_add_stereo_sw(codec, name, index, sw);
2980                         if (err < 0)
2981                                 return err;
2982                 }
2983         }
2984         return 0;
2985 }
2986
2987 /* add playback controls for speaker and HP outputs */
2988 static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin,
2989                                         hda_nid_t dac, const char *pfx)
2990 {
2991         struct alc_spec *spec = codec->spec;
2992         hda_nid_t sw, vol;
2993         int err;
2994
2995         if (!pin)
2996                 return 0;
2997         if (!dac) {
2998                 /* the corresponding DAC is already occupied */
2999                 if (!(get_wcaps(codec, pin) & AC_WCAP_OUT_AMP))
3000                         return 0; /* no way */
3001                 /* create a switch only */
3002                 return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx,
3003                                    HDA_COMPOSE_AMP_VAL(pin, 3, 0, HDA_OUTPUT));
3004         }
3005
3006         sw = alc_look_for_out_mute_nid(codec, pin, dac);
3007         vol = alc_look_for_out_vol_nid(codec, pin, dac);
3008         err = alc_auto_add_stereo_vol(codec, pfx, 0, vol);
3009         if (err < 0)
3010                 return err;
3011         err = alc_auto_add_stereo_sw(codec, pfx, 0, sw);
3012         if (err < 0)
3013                 return err;
3014         return 0;
3015 }
3016
3017 static int alc_auto_create_hp_out(struct hda_codec *codec)
3018 {
3019         struct alc_spec *spec = codec->spec;
3020         return alc_auto_create_extra_out(codec, spec->autocfg.hp_pins[0],
3021                                          spec->multiout.hp_nid,
3022                                          "Headphone");
3023 }
3024
3025 static int alc_auto_create_speaker_out(struct hda_codec *codec)
3026 {
3027         struct alc_spec *spec = codec->spec;
3028         return alc_auto_create_extra_out(codec, spec->autocfg.speaker_pins[0],
3029                                          spec->multiout.extra_out_nid[0],
3030                                          "Speaker");
3031 }
3032
3033 static void alc_auto_set_output_and_unmute(struct hda_codec *codec,
3034                                               hda_nid_t pin, int pin_type,
3035                                               hda_nid_t dac)
3036 {
3037         int i, num;
3038         hda_nid_t nid, mix = 0;
3039         hda_nid_t srcs[HDA_MAX_CONNECTIONS];
3040
3041         alc_set_pin_output(codec, pin, pin_type);
3042         nid = alc_go_down_to_selector(codec, pin);
3043         num = snd_hda_get_connections(codec, nid, srcs, ARRAY_SIZE(srcs));
3044         for (i = 0; i < num; i++) {
3045                 if (alc_auto_mix_to_dac(codec, srcs[i]) != dac)
3046                         continue;
3047                 mix = srcs[i];
3048                 break;
3049         }
3050         if (!mix)
3051                 return;
3052
3053         /* need the manual connection? */
3054         if (num > 1)
3055                 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, i);
3056         /* unmute mixer widget inputs */
3057         if (nid_has_mute(codec, mix, HDA_INPUT)) {
3058                 snd_hda_codec_write(codec, mix, 0, AC_VERB_SET_AMP_GAIN_MUTE,
3059                             AMP_IN_UNMUTE(0));
3060                 snd_hda_codec_write(codec, mix, 0, AC_VERB_SET_AMP_GAIN_MUTE,
3061                             AMP_IN_UNMUTE(1));
3062         }
3063         /* initialize volume */
3064         nid = alc_look_for_out_vol_nid(codec, pin, dac);
3065         if (nid)
3066                 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
3067                                     AMP_OUT_ZERO);
3068 }
3069
3070 static void alc_auto_init_multi_out(struct hda_codec *codec)
3071 {
3072         struct alc_spec *spec = codec->spec;
3073         int pin_type = get_pin_type(spec->autocfg.line_out_type);
3074         int i;
3075
3076         for (i = 0; i <= HDA_SIDE; i++) {
3077                 hda_nid_t nid = spec->autocfg.line_out_pins[i];
3078                 if (nid)
3079                         alc_auto_set_output_and_unmute(codec, nid, pin_type,
3080                                         spec->multiout.dac_nids[i]);
3081         }
3082 }
3083
3084 static void alc_auto_init_extra_out(struct hda_codec *codec)
3085 {
3086         struct alc_spec *spec = codec->spec;
3087         hda_nid_t pin, dac;
3088
3089         pin = spec->autocfg.hp_pins[0];
3090         if (pin) {
3091                 dac = spec->multiout.hp_nid;
3092                 if (!dac)
3093                         dac = spec->multiout.dac_nids[0];
3094                 alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac);
3095         }
3096         pin = spec->autocfg.speaker_pins[0];
3097         if (pin) {
3098                 dac = spec->multiout.extra_out_nid[0];
3099                 if (!dac)
3100                         dac = spec->multiout.dac_nids[0];
3101                 alc_auto_set_output_and_unmute(codec, pin, PIN_OUT, dac);
3102         }
3103 }
3104
3105 /*
3106  * multi-io helper
3107  */
3108 static int alc_auto_fill_multi_ios(struct hda_codec *codec,
3109                                    unsigned int location)
3110 {
3111         struct alc_spec *spec = codec->spec;
3112         struct auto_pin_cfg *cfg = &spec->autocfg;
3113         int type, i, num_pins = 0;
3114
3115         for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
3116                 for (i = 0; i < cfg->num_inputs; i++) {
3117                         hda_nid_t nid = cfg->inputs[i].pin;
3118                         hda_nid_t dac;
3119                         unsigned int defcfg, caps;
3120                         if (cfg->inputs[i].type != type)
3121                                 continue;
3122                         defcfg = snd_hda_codec_get_pincfg(codec, nid);
3123                         if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
3124                                 continue;
3125                         if (location && get_defcfg_location(defcfg) != location)
3126                                 continue;
3127                         caps = snd_hda_query_pin_caps(codec, nid);
3128                         if (!(caps & AC_PINCAP_OUT))
3129                                 continue;
3130                         dac = alc_auto_look_for_dac(codec, nid);
3131                         if (!dac)
3132                                 continue;
3133                         spec->multi_io[num_pins].pin = nid;
3134                         spec->multi_io[num_pins].dac = dac;
3135                         num_pins++;
3136                         spec->private_dac_nids[spec->multiout.num_dacs++] = dac;
3137                 }
3138         }
3139         spec->multiout.num_dacs = 1;
3140         if (num_pins < 2)
3141                 return 0;
3142         return num_pins;
3143 }
3144
3145 static int alc_auto_ch_mode_info(struct snd_kcontrol *kcontrol,
3146                                  struct snd_ctl_elem_info *uinfo)
3147 {
3148         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3149         struct alc_spec *spec = codec->spec;
3150
3151         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3152         uinfo->count = 1;
3153         uinfo->value.enumerated.items = spec->multi_ios + 1;
3154         if (uinfo->value.enumerated.item > spec->multi_ios)
3155                 uinfo->value.enumerated.item = spec->multi_ios;
3156         sprintf(uinfo->value.enumerated.name, "%dch",
3157                 (uinfo->value.enumerated.item + 1) * 2);
3158         return 0;
3159 }
3160
3161 static int alc_auto_ch_mode_get(struct snd_kcontrol *kcontrol,
3162                                 struct snd_ctl_elem_value *ucontrol)
3163 {
3164         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3165         struct alc_spec *spec = codec->spec;
3166         ucontrol->value.enumerated.item[0] = (spec->ext_channel_count - 1) / 2;
3167         return 0;
3168 }
3169
3170 static int alc_set_multi_io(struct hda_codec *codec, int idx, bool output)
3171 {
3172         struct alc_spec *spec = codec->spec;
3173         hda_nid_t nid = spec->multi_io[idx].pin;
3174
3175         if (!spec->multi_io[idx].ctl_in)
3176                 spec->multi_io[idx].ctl_in =
3177                         snd_hda_codec_read(codec, nid, 0,
3178                                            AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
3179         if (output) {
3180                 snd_hda_codec_update_cache(codec, nid, 0,
3181                                            AC_VERB_SET_PIN_WIDGET_CONTROL,
3182                                            PIN_OUT);
3183                 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP)
3184                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
3185                                                  HDA_AMP_MUTE, 0);
3186                 alc_auto_select_dac(codec, nid, spec->multi_io[idx].dac);
3187         } else {
3188                 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP)
3189                         snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
3190                                                  HDA_AMP_MUTE, HDA_AMP_MUTE);
3191                 snd_hda_codec_update_cache(codec, nid, 0,
3192                                            AC_VERB_SET_PIN_WIDGET_CONTROL,
3193                                            spec->multi_io[idx].ctl_in);
3194         }
3195         return 0;
3196 }
3197
3198 static int alc_auto_ch_mode_put(struct snd_kcontrol *kcontrol,
3199                                 struct snd_ctl_elem_value *ucontrol)
3200 {
3201         struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3202         struct alc_spec *spec = codec->spec;
3203         int i, ch;
3204
3205         ch = ucontrol->value.enumerated.item[0];
3206         if (ch < 0 || ch > spec->multi_ios)
3207                 return -EINVAL;
3208         if (ch == (spec->ext_channel_count - 1) / 2)
3209                 return 0;
3210         spec->ext_channel_count = (ch + 1) * 2;
3211         for (i = 0; i < spec->multi_ios; i++)
3212                 alc_set_multi_io(codec, i, i < ch);
3213         spec->multiout.max_channels = spec->ext_channel_count;
3214         if (spec->need_dac_fix && !spec->const_channel_count)
3215                 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
3216         return 1;
3217 }
3218
3219 static const struct snd_kcontrol_new alc_auto_channel_mode_enum = {
3220         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3221         .name = "Channel Mode",
3222         .info = alc_auto_ch_mode_info,
3223         .get = alc_auto_ch_mode_get,
3224         .put = alc_auto_ch_mode_put,
3225 };
3226
3227 static int alc_auto_add_multi_channel_mode(struct hda_codec *codec,
3228                                            int (*fill_dac)(struct hda_codec *))
3229 {
3230         struct alc_spec *spec = codec->spec;
3231         struct auto_pin_cfg *cfg = &spec->autocfg;
3232         unsigned int location, defcfg;
3233         int num_pins;
3234
3235         if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT && cfg->hp_outs == 1) {
3236                 /* use HP as primary out */
3237                 cfg->speaker_outs = cfg->line_outs;
3238                 memcpy(cfg->speaker_pins, cfg->line_out_pins,
3239                        sizeof(cfg->speaker_pins));
3240                 cfg->line_outs = cfg->hp_outs;
3241                 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
3242                 cfg->hp_outs = 0;
3243                 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3244                 cfg->line_out_type = AUTO_PIN_HP_OUT;
3245                 if (fill_dac)
3246                         fill_dac(codec);
3247         }
3248         if (cfg->line_outs != 1 ||
3249             cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
3250                 return 0;
3251
3252         defcfg = snd_hda_codec_get_pincfg(codec, cfg->line_out_pins[0]);
3253         location = get_defcfg_location(defcfg);
3254
3255         num_pins = alc_auto_fill_multi_ios(codec, location);
3256         if (num_pins > 0) {
3257                 struct snd_kcontrol_new *knew;
3258
3259                 knew = alc_kcontrol_new(spec);
3260                 if (!knew)
3261                         return -ENOMEM;
3262                 *knew = alc_auto_channel_mode_enum;
3263                 knew->name = kstrdup("Channel Mode", GFP_KERNEL);
3264                 if (!knew->name)
3265                         return -ENOMEM;
3266
3267                 spec->multi_ios = num_pins;
3268                 spec->ext_channel_count = 2;
3269                 spec->multiout.num_dacs = num_pins + 1;
3270         }
3271         return 0;
3272 }
3273
3274 /* filter out invalid adc_nids (and capsrc_nids) that don't give all
3275  * active input pins
3276  */
3277 static void alc_remove_invalid_adc_nids(struct hda_codec *codec)
3278 {
3279         struct alc_spec *spec = codec->spec;
3280         const struct hda_input_mux *imux;
3281         hda_nid_t adc_nids[ARRAY_SIZE(spec->private_adc_nids)];
3282         hda_nid_t capsrc_nids[ARRAY_SIZE(spec->private_adc_nids)];
3283         int i, n, nums;
3284
3285         imux = spec->input_mux;
3286         if (!imux)
3287                 return;
3288         if (spec->dyn_adc_switch)
3289                 return;
3290
3291         nums = 0;
3292         for (n = 0; n < spec->num_adc_nids; n++) {
3293                 hda_nid_t cap = spec->private_capsrc_nids[n];
3294                 int num_conns = snd_hda_get_conn_list(codec, cap, NULL);
3295                 for (i = 0; i < imux->num_items; i++) {
3296                         hda_nid_t pin = spec->imux_pins[i];
3297                         if (pin) {
3298                                 if (get_connection_index(codec, cap, pin) < 0)
3299                                         break;
3300                         } else if (num_conns <= imux->items[i].index)
3301                                 break;
3302                 }
3303                 if (i >= imux->num_items) {
3304                         adc_nids[nums] = spec->private_adc_nids[n];
3305                         capsrc_nids[nums++] = cap;
3306                 }
3307         }
3308         if (!nums) {
3309                 /* check whether ADC-switch is possible */
3310                 if (!alc_check_dyn_adc_switch(codec)) {
3311                         printk(KERN_WARNING "hda_codec: %s: no valid ADC found;"
3312                                " using fallback 0x%x\n",
3313                                codec->chip_name, spec->private_adc_nids[0]);
3314                         spec->num_adc_nids = 1;
3315                         spec->auto_mic = 0;
3316                         return;
3317                 }
3318         } else if (nums != spec->num_adc_nids) {
3319                 memcpy(spec->private_adc_nids, adc_nids,
3320                        nums * sizeof(hda_nid_t));
3321                 memcpy(spec->private_capsrc_nids, capsrc_nids,
3322                        nums * sizeof(hda_nid_t));
3323                 spec->num_adc_nids = nums;
3324         }
3325
3326         if (spec->auto_mic)
3327                 alc_auto_mic_check_imux(codec); /* check auto-mic setups */
3328         else if (spec->input_mux->num_items == 1)
3329                 spec->num_adc_nids = 1; /* reduce to a single ADC */
3330 }
3331
3332 /*
3333  * initialize ADC paths
3334  */
3335 static void alc_auto_init_adc(struct hda_codec *codec, int adc_idx)
3336 {
3337         struct alc_spec *spec = codec->spec;
3338         hda_nid_t nid;
3339
3340         nid = spec->adc_nids[adc_idx];
3341         /* mute ADC */
3342         if (nid_has_mute(codec, nid, HDA_INPUT)) {
3343                 snd_hda_codec_write(codec, nid, 0,
3344                                     AC_VERB_SET_AMP_GAIN_MUTE,
3345                                     AMP_IN_MUTE(0));
3346                 return;
3347         }
3348         if (!spec->capsrc_nids)
3349                 return;
3350         nid = spec->capsrc_nids[adc_idx];
3351         if (nid_has_mute(codec, nid, HDA_OUTPUT))
3352                 snd_hda_codec_write(codec, nid, 0,
3353                                     AC_VERB_SET_AMP_GAIN_MUTE,
3354                                     AMP_OUT_MUTE);
3355 }
3356
3357 static void alc_auto_init_input_src(struct hda_codec *codec)
3358 {
3359         struct alc_spec *spec = codec->spec;
3360         int c, nums;
3361
3362         for (c = 0; c < spec->num_adc_nids; c++)
3363                 alc_auto_init_adc(codec, c);
3364         if (spec->dyn_adc_switch)
3365                 nums = 1;
3366         else
3367                 nums = spec->num_adc_nids;
3368         for (c = 0; c < nums; c++)
3369                 alc_mux_select(codec, 0, spec->cur_mux[c], true);
3370 }
3371
3372 /* add mic boosts if needed */
3373 static int alc_auto_add_mic_boost(struct hda_codec *codec)
3374 {
3375         struct alc_spec *spec = codec->spec;
3376         struct auto_pin_cfg *cfg = &spec->autocfg;
3377         int i, err;
3378         int type_idx = 0;
3379         hda_nid_t nid;
3380         const char *prev_label = NULL;
3381
3382         for (i = 0; i < cfg->num_inputs; i++) {
3383                 if (cfg->inputs[i].type > AUTO_PIN_MIC)
3384                         break;
3385                 nid = cfg->inputs[i].pin;
3386                 if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
3387                         const char *label;
3388                         char boost_label[32];
3389
3390                         label = hda_get_autocfg_input_label(codec, cfg, i);
3391                         if (prev_label && !strcmp(label, prev_label))
3392                                 type_idx++;
3393                         else
3394                                 type_idx = 0;
3395                         prev_label = label;
3396
3397                         snprintf(boost_label, sizeof(boost_label),
3398                                  "%s Boost Volume", label);
3399                         err = add_control(spec, ALC_CTL_WIDGET_VOL,
3400                                           boost_label, type_idx,
3401                                   HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
3402                         if (err < 0)
3403                                 return err;
3404                 }
3405         }
3406         return 0;
3407 }
3408
3409 /* select or unmute the given capsrc route */
3410 static void select_or_unmute_capsrc(struct hda_codec *codec, hda_nid_t cap,
3411                                     int idx)
3412 {
3413         if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) {
3414                 snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx,
3415                                          HDA_AMP_MUTE, 0);
3416         } else if (snd_hda_get_conn_list(codec, cap, NULL) > 1) {
3417                 snd_hda_codec_write_cache(codec, cap, 0,
3418                                           AC_VERB_SET_CONNECT_SEL, idx);
3419         }
3420 }
3421
3422 /* set the default connection to that pin */
3423 static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin)
3424 {
3425         struct alc_spec *spec = codec->spec;
3426         int i;
3427
3428         if (!pin)
3429                 return 0;
3430         for (i = 0; i < spec->num_adc_nids; i++) {
3431                 hda_nid_t cap = spec->capsrc_nids ?
3432                         spec->capsrc_nids[i] : spec->adc_nids[i];
3433                 int idx;
3434
3435                 idx = get_connection_index(codec, cap, pin);
3436                 if (idx < 0)
3437                         continue;
3438                 select_or_unmute_capsrc(codec, cap, idx);
3439                 return i; /* return the found index */
3440         }
3441         return -1; /* not found */
3442 }
3443
3444 /* initialize some special cases for input sources */
3445 static void alc_init_special_input_src(struct hda_codec *codec)
3446 {
3447         struct alc_spec *spec = codec->spec;
3448         int i;
3449
3450         for (i = 0; i < spec->autocfg.num_inputs; i++)
3451                 init_capsrc_for_pin(codec, spec->autocfg.inputs[i].pin);
3452 }
3453
3454 /* assign appropriate capture mixers */
3455 static void set_capture_mixer(struct hda_codec *codec)
3456 {
3457         struct alc_spec *spec = codec->spec;
3458         static const struct snd_kcontrol_new *caps[2][3] = {
3459                 { alc_capture_mixer_nosrc1,
3460                   alc_capture_mixer_nosrc2,
3461                   alc_capture_mixer_nosrc3 },
3462                 { alc_capture_mixer1,
3463                   alc_capture_mixer2,
3464                   alc_capture_mixer3 },
3465         };
3466
3467         /* check whether either of ADC or MUX has a volume control */
3468         if (!nid_has_volume(codec, spec->adc_nids[0], HDA_INPUT)) {
3469                 if (!spec->capsrc_nids)
3470                         return; /* no volume */
3471                 if (!nid_has_volume(codec, spec->capsrc_nids[0], HDA_OUTPUT))
3472                         return; /* no volume in capsrc, too */
3473                 spec->vol_in_capsrc = 1;
3474         }
3475
3476         if (spec->num_adc_nids > 0) {
3477                 int mux = 0;
3478                 int num_adcs = 0;
3479
3480                 if (spec->input_mux && spec->input_mux->num_items > 1)
3481                         mux = 1;
3482                 if (spec->auto_mic) {
3483                         num_adcs = 1;
3484                         mux = 0;
3485                 } else if (spec->dyn_adc_switch)
3486                         num_adcs = 1;
3487                 if (!num_adcs) {
3488                         if (spec->num_adc_nids > 3)
3489                                 spec->num_adc_nids = 3;
3490                         else if (!spec->num_adc_nids)
3491                                 return;
3492                         num_adcs = spec->num_adc_nids;
3493                 }
3494                 spec->cap_mixer = caps[mux][num_adcs - 1];
3495         }
3496 }
3497
3498 /*
3499  * standard auto-parser initializations
3500  */
3501 static void alc_auto_init_std(struct hda_codec *codec)
3502 {
3503         struct alc_spec *spec = codec->spec;
3504         alc_auto_init_multi_out(codec);
3505         alc_auto_init_extra_out(codec);
3506         alc_auto_init_analog_input(codec);
3507         alc_auto_init_input_src(codec);
3508         alc_auto_init_digital(codec);
3509         if (spec->unsol_event)
3510                 alc_inithook(codec);
3511 }
3512
3513 /*
3514  * Digital-beep handlers
3515  */
3516 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3517 #define set_beep_amp(spec, nid, idx, dir) \
3518         ((spec)->beep_amp = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir))
3519
3520 static const struct snd_pci_quirk beep_white_list[] = {
3521         SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1),
3522         SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1),
3523         SND_PCI_QUIRK(0x1043, 0x831a, "EeePC", 1),
3524         SND_PCI_QUIRK(0x1043, 0x834a, "EeePC", 1),
3525         SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1),
3526         {}
3527 };
3528
3529 static inline int has_cdefine_beep(struct hda_codec *codec)
3530 {
3531         struct alc_spec *spec = codec->spec;
3532         const struct snd_pci_quirk *q;
3533         q = snd_pci_quirk_lookup(codec->bus->pci, beep_white_list);
3534         if (q)
3535                 return q->value;
3536         return spec->cdefine.enable_pcbeep;
3537 }
3538 #else
3539 #define set_beep_amp(spec, nid, idx, dir) /* NOP */
3540 #define has_cdefine_beep(codec)         0
3541 #endif
3542
3543 /* parse the BIOS configuration and set up the alc_spec */
3544 /* return 1 if successful, 0 if the proper config is not found,
3545  * or a negative error code
3546  */
3547 static int alc_parse_auto_config(struct hda_codec *codec,
3548                                  const hda_nid_t *ignore_nids,
3549                                  const hda_nid_t *ssid_nids)
3550 {
3551         struct alc_spec *spec = codec->spec;
3552         int err;
3553
3554         err = snd_hda_parse_pin_def_config(codec, &spec->autocfg,
3555                                            ignore_nids);
3556         if (err < 0)
3557                 return err;
3558         if (!spec->autocfg.line_outs) {
3559                 if (spec->autocfg.dig_outs || spec->autocfg.dig_in_pin) {
3560                         spec->multiout.max_channels = 2;
3561                         spec->no_analog = 1;
3562                         goto dig_only;
3563                 }
3564                 return 0; /* can't find valid BIOS pin config */
3565         }
3566         err = alc_auto_fill_dac_nids(codec);
3567         if (err < 0)
3568                 return err;
3569         err = alc_auto_add_multi_channel_mode(codec, alc_auto_fill_dac_nids);
3570         if (err < 0)
3571                 return err;
3572         err = alc_auto_create_multi_out_ctls(codec, &spec->autocfg);
3573         if (err < 0)
3574                 return err;
3575         err = alc_auto_create_hp_out(codec);
3576         if (err < 0)
3577                 return err;
3578         err = alc_auto_create_speaker_out(codec);
3579         if (err < 0)
3580                 return err;
3581         err = alc_auto_create_input_ctls(codec);
3582         if (err < 0)
3583                 return err;
3584
3585         spec->multiout.max_channels = spec->multiout.num_dacs * 2;
3586
3587  dig_only:
3588         alc_auto_parse_digital(codec);
3589
3590         if (!spec->no_analog)
3591                 alc_remove_invalid_adc_nids(codec);
3592
3593         if (ssid_nids)
3594                 alc_ssid_check(codec, ssid_nids);
3595
3596         if (!spec->no_analog) {
3597                 alc_auto_check_switches(codec);
3598                 err = alc_auto_add_mic_boost(codec);
3599                 if (err < 0)
3600                         return err;
3601         }
3602
3603         if (spec->kctls.list)
3604                 add_mixer(spec, spec->kctls.list);
3605
3606         return 1;
3607 }
3608
3609 static int alc880_parse_auto_config(struct hda_codec *codec)
3610 {
3611         static const hda_nid_t alc880_ignore[] = { 0x1d, 0 };
3612         static const hda_nid_t alc880_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 
3613         return alc_parse_auto_config(codec, alc880_ignore, alc880_ssids);
3614 }
3615
3616 #ifdef CONFIG_SND_HDA_POWER_SAVE
3617 static const struct hda_amp_list alc880_loopbacks[] = {
3618         { 0x0b, HDA_INPUT, 0 },
3619         { 0x0b, HDA_INPUT, 1 },
3620         { 0x0b, HDA_INPUT, 2 },
3621         { 0x0b, HDA_INPUT, 3 },
3622         { 0x0b, HDA_INPUT, 4 },
3623         { } /* end */
3624 };
3625 #endif
3626
3627 /*
3628  * board setups
3629  */
3630 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3631 #define alc_board_config \
3632         snd_hda_check_board_config
3633 #define alc_board_codec_sid_config \
3634         snd_hda_check_board_codec_sid_config
3635 #include "alc_quirks.c"
3636 #else
3637 #define alc_board_config(codec, nums, models, tbl)      -1
3638 #define alc_board_codec_sid_config(codec, nums, models, tbl)    -1
3639 #define setup_preset(codec, x)  /* NOP */
3640 #endif
3641
3642 /*
3643  * OK, here we have finally the patch for ALC880
3644  */
3645 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3646 #include "alc880_quirks.c"
3647 #endif
3648
3649 static int patch_alc880(struct hda_codec *codec)
3650 {
3651         struct alc_spec *spec;
3652         int board_config;
3653         int err;
3654
3655         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
3656         if (spec == NULL)
3657                 return -ENOMEM;
3658
3659         codec->spec = spec;
3660
3661         spec->mixer_nid = 0x0b;
3662         spec->need_dac_fix = 1;
3663
3664         board_config = alc_board_config(codec, ALC880_MODEL_LAST,
3665                                         alc880_models, alc880_cfg_tbl);
3666         if (board_config < 0) {
3667                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
3668                        codec->chip_name);
3669                 board_config = ALC_MODEL_AUTO;
3670         }
3671
3672         if (board_config == ALC_MODEL_AUTO) {
3673                 /* automatic parse from the BIOS config */
3674                 err = alc880_parse_auto_config(codec);
3675                 if (err < 0) {
3676                         alc_free(codec);
3677                         return err;
3678                 }
3679 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3680                 else if (!err) {
3681                         printk(KERN_INFO
3682                                "hda_codec: Cannot set up configuration "
3683                                "from BIOS.  Using 3-stack mode...\n");
3684                         board_config = ALC880_3ST;
3685                 }
3686 #endif
3687         }
3688
3689         if (board_config != ALC_MODEL_AUTO)
3690                 setup_preset(codec, &alc880_presets[board_config]);
3691
3692         if (!spec->no_analog && !spec->adc_nids) {
3693                 alc_auto_fill_adc_caps(codec);
3694                 alc_rebuild_imux_for_auto_mic(codec);
3695                 alc_remove_invalid_adc_nids(codec);
3696         }
3697
3698         if (!spec->no_analog && !spec->cap_mixer)
3699                 set_capture_mixer(codec);
3700
3701         if (!spec->no_analog) {
3702                 err = snd_hda_attach_beep_device(codec, 0x1);
3703                 if (err < 0) {
3704                         alc_free(codec);
3705                         return err;
3706                 }
3707                 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
3708         }
3709
3710         spec->vmaster_nid = 0x0c;
3711
3712         codec->patch_ops = alc_patch_ops;
3713         if (board_config == ALC_MODEL_AUTO)
3714                 spec->init_hook = alc_auto_init_std;
3715 #ifdef CONFIG_SND_HDA_POWER_SAVE
3716         if (!spec->loopback.amplist)
3717                 spec->loopback.amplist = alc880_loopbacks;
3718 #endif
3719
3720         return 0;
3721 }
3722
3723
3724 /*
3725  * ALC260 support
3726  */
3727 static int alc260_parse_auto_config(struct hda_codec *codec)
3728 {
3729         static const hda_nid_t alc260_ignore[] = { 0x17, 0 };
3730         static const hda_nid_t alc260_ssids[] = { 0x10, 0x15, 0x0f, 0 };
3731         return alc_parse_auto_config(codec, alc260_ignore, alc260_ssids);
3732 }
3733
3734 #ifdef CONFIG_SND_HDA_POWER_SAVE
3735 static const struct hda_amp_list alc260_loopbacks[] = {
3736         { 0x07, HDA_INPUT, 0 },
3737         { 0x07, HDA_INPUT, 1 },
3738         { 0x07, HDA_INPUT, 2 },
3739         { 0x07, HDA_INPUT, 3 },
3740         { 0x07, HDA_INPUT, 4 },
3741         { } /* end */
3742 };
3743 #endif
3744
3745 /*
3746  * Pin config fixes
3747  */
3748 enum {
3749         PINFIX_HP_DC5750,
3750 };
3751
3752 static const struct alc_fixup alc260_fixups[] = {
3753         [PINFIX_HP_DC5750] = {
3754                 .type = ALC_FIXUP_PINS,
3755                 .v.pins = (const struct alc_pincfg[]) {
3756                         { 0x11, 0x90130110 }, /* speaker */
3757                         { }
3758                 }
3759         },
3760 };
3761
3762 static const struct snd_pci_quirk alc260_fixup_tbl[] = {
3763         SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", PINFIX_HP_DC5750),
3764         {}
3765 };
3766
3767 /*
3768  */
3769 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3770 #include "alc260_quirks.c"
3771 #endif
3772
3773 static int patch_alc260(struct hda_codec *codec)
3774 {
3775         struct alc_spec *spec;
3776         int err, board_config;
3777
3778         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
3779         if (spec == NULL)
3780                 return -ENOMEM;
3781
3782         codec->spec = spec;
3783
3784         spec->mixer_nid = 0x07;
3785
3786         board_config = alc_board_config(codec, ALC260_MODEL_LAST,
3787                                         alc260_models, alc260_cfg_tbl);
3788         if (board_config < 0) {
3789                 snd_printd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
3790                            codec->chip_name);
3791                 board_config = ALC_MODEL_AUTO;
3792         }
3793
3794         if (board_config == ALC_MODEL_AUTO) {
3795                 alc_pick_fixup(codec, NULL, alc260_fixup_tbl, alc260_fixups);
3796                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
3797         }
3798
3799         if (board_config == ALC_MODEL_AUTO) {
3800                 /* automatic parse from the BIOS config */
3801                 err = alc260_parse_auto_config(codec);
3802                 if (err < 0) {
3803                         alc_free(codec);
3804                         return err;
3805                 }
3806 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3807                 else if (!err) {
3808                         printk(KERN_INFO
3809                                "hda_codec: Cannot set up configuration "
3810                                "from BIOS.  Using base mode...\n");
3811                         board_config = ALC260_BASIC;
3812                 }
3813 #endif
3814         }
3815
3816         if (board_config != ALC_MODEL_AUTO)
3817                 setup_preset(codec, &alc260_presets[board_config]);
3818
3819         if (!spec->no_analog && !spec->adc_nids) {
3820                 alc_auto_fill_adc_caps(codec);
3821                 alc_rebuild_imux_for_auto_mic(codec);
3822                 alc_remove_invalid_adc_nids(codec);
3823         }
3824
3825         if (!spec->no_analog && !spec->cap_mixer)
3826                 set_capture_mixer(codec);
3827
3828         if (!spec->no_analog) {
3829                 err = snd_hda_attach_beep_device(codec, 0x1);
3830                 if (err < 0) {
3831                         alc_free(codec);
3832                         return err;
3833                 }
3834                 set_beep_amp(spec, 0x07, 0x05, HDA_INPUT);
3835         }
3836
3837         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
3838
3839         spec->vmaster_nid = 0x08;
3840
3841         codec->patch_ops = alc_patch_ops;
3842         if (board_config == ALC_MODEL_AUTO)
3843                 spec->init_hook = alc_auto_init_std;
3844         spec->shutup = alc_eapd_shutup;
3845 #ifdef CONFIG_SND_HDA_POWER_SAVE
3846         if (!spec->loopback.amplist)
3847                 spec->loopback.amplist = alc260_loopbacks;
3848 #endif
3849
3850         return 0;
3851 }
3852
3853
3854 /*
3855  * ALC882/883/885/888/889 support
3856  *
3857  * ALC882 is almost identical with ALC880 but has cleaner and more flexible
3858  * configuration.  Each pin widget can choose any input DACs and a mixer.
3859  * Each ADC is connected from a mixer of all inputs.  This makes possible
3860  * 6-channel independent captures.
3861  *
3862  * In addition, an independent DAC for the multi-playback (not used in this
3863  * driver yet).
3864  */
3865 #ifdef CONFIG_SND_HDA_POWER_SAVE
3866 #define alc882_loopbacks        alc880_loopbacks
3867 #endif
3868
3869 /*
3870  * Pin config fixes
3871  */
3872 enum {
3873         PINFIX_ABIT_AW9D_MAX,
3874         PINFIX_LENOVO_Y530,
3875         PINFIX_PB_M5210,
3876         PINFIX_ACER_ASPIRE_7736,
3877 };
3878
3879 static const struct alc_fixup alc882_fixups[] = {
3880         [PINFIX_ABIT_AW9D_MAX] = {
3881                 .type = ALC_FIXUP_PINS,
3882                 .v.pins = (const struct alc_pincfg[]) {
3883                         { 0x15, 0x01080104 }, /* side */
3884                         { 0x16, 0x01011012 }, /* rear */
3885                         { 0x17, 0x01016011 }, /* clfe */
3886                         { }
3887                 }
3888         },
3889         [PINFIX_LENOVO_Y530] = {
3890                 .type = ALC_FIXUP_PINS,
3891                 .v.pins = (const struct alc_pincfg[]) {
3892                         { 0x15, 0x99130112 }, /* rear int speakers */
3893                         { 0x16, 0x99130111 }, /* subwoofer */
3894                         { }
3895                 }
3896         },
3897         [PINFIX_PB_M5210] = {
3898                 .type = ALC_FIXUP_VERBS,
3899                 .v.verbs = (const struct hda_verb[]) {
3900                         { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 },
3901                         {}
3902                 }
3903         },
3904         [PINFIX_ACER_ASPIRE_7736] = {
3905                 .type = ALC_FIXUP_SKU,
3906                 .v.sku = ALC_FIXUP_SKU_IGNORE,
3907         },
3908 };
3909
3910 static const struct snd_pci_quirk alc882_fixup_tbl[] = {
3911         SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", PINFIX_PB_M5210),
3912         SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", PINFIX_LENOVO_Y530),
3913         SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX),
3914         SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", PINFIX_ACER_ASPIRE_7736),
3915         {}
3916 };
3917
3918 /*
3919  * BIOS auto configuration
3920  */
3921 /* almost identical with ALC880 parser... */
3922 static int alc882_parse_auto_config(struct hda_codec *codec)
3923 {
3924         static const hda_nid_t alc882_ignore[] = { 0x1d, 0 };
3925         static const hda_nid_t alc882_ssids[] = { 0x15, 0x1b, 0x14, 0 };
3926         return alc_parse_auto_config(codec, alc882_ignore, alc882_ssids);
3927 }
3928
3929 /*
3930  */
3931 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3932 #include "alc882_quirks.c"
3933 #endif
3934
3935 static int patch_alc882(struct hda_codec *codec)
3936 {
3937         struct alc_spec *spec;
3938         int err, board_config;
3939
3940         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
3941         if (spec == NULL)
3942                 return -ENOMEM;
3943
3944         codec->spec = spec;
3945
3946         spec->mixer_nid = 0x0b;
3947
3948         switch (codec->vendor_id) {
3949         case 0x10ec0882:
3950         case 0x10ec0885:
3951                 break;
3952         default:
3953                 /* ALC883 and variants */
3954                 alc_fix_pll_init(codec, 0x20, 0x0a, 10);
3955                 break;
3956         }
3957
3958         board_config = alc_board_config(codec, ALC882_MODEL_LAST,
3959                                         alc882_models, alc882_cfg_tbl);
3960
3961         if (board_config < 0)
3962                 board_config = alc_board_codec_sid_config(codec,
3963                         ALC882_MODEL_LAST, alc882_models, alc882_ssid_cfg_tbl);
3964
3965         if (board_config < 0) {
3966                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
3967                        codec->chip_name);
3968                 board_config = ALC_MODEL_AUTO;
3969         }
3970
3971         if (board_config == ALC_MODEL_AUTO) {
3972                 alc_pick_fixup(codec, NULL, alc882_fixup_tbl, alc882_fixups);
3973                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
3974         }
3975
3976         alc_auto_parse_customize_define(codec);
3977
3978         if (board_config == ALC_MODEL_AUTO) {
3979                 /* automatic parse from the BIOS config */
3980                 err = alc882_parse_auto_config(codec);
3981                 if (err < 0) {
3982                         alc_free(codec);
3983                         return err;
3984                 }
3985 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
3986                 else if (!err) {
3987                         printk(KERN_INFO
3988                                "hda_codec: Cannot set up configuration "
3989                                "from BIOS.  Using base mode...\n");
3990                         board_config = ALC882_3ST_DIG;
3991                 }
3992 #endif
3993         }
3994
3995         if (board_config != ALC_MODEL_AUTO)
3996                 setup_preset(codec, &alc882_presets[board_config]);
3997
3998         if (!spec->no_analog && !spec->adc_nids) {
3999                 alc_auto_fill_adc_caps(codec);
4000                 alc_rebuild_imux_for_auto_mic(codec);
4001                 alc_remove_invalid_adc_nids(codec);
4002         }
4003
4004         if (!spec->no_analog && !spec->cap_mixer)
4005                 set_capture_mixer(codec);
4006
4007         if (!spec->no_analog && has_cdefine_beep(codec)) {
4008                 err = snd_hda_attach_beep_device(codec, 0x1);
4009                 if (err < 0) {
4010                         alc_free(codec);
4011                         return err;
4012                 }
4013                 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
4014         }
4015
4016         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
4017
4018         spec->vmaster_nid = 0x0c;
4019
4020         codec->patch_ops = alc_patch_ops;
4021         if (board_config == ALC_MODEL_AUTO)
4022                 spec->init_hook = alc_auto_init_std;
4023
4024         alc_init_jacks(codec);
4025 #ifdef CONFIG_SND_HDA_POWER_SAVE
4026         if (!spec->loopback.amplist)
4027                 spec->loopback.amplist = alc882_loopbacks;
4028 #endif
4029
4030         return 0;
4031 }
4032
4033
4034 /*
4035  * ALC262 support
4036  */
4037 static int alc262_parse_auto_config(struct hda_codec *codec)
4038 {
4039         static const hda_nid_t alc262_ignore[] = { 0x1d, 0 };
4040         static const hda_nid_t alc262_ssids[] = { 0x15, 0x1b, 0x14, 0 };
4041         return alc_parse_auto_config(codec, alc262_ignore, alc262_ssids);
4042 }
4043
4044 /*
4045  * Pin config fixes
4046  */
4047 enum {
4048         PINFIX_FSC_H270,
4049         PINFIX_HP_Z200,
4050 };
4051
4052 static const struct alc_fixup alc262_fixups[] = {
4053         [PINFIX_FSC_H270] = {
4054                 .type = ALC_FIXUP_PINS,
4055                 .v.pins = (const struct alc_pincfg[]) {
4056                         { 0x14, 0x99130110 }, /* speaker */
4057                         { 0x15, 0x0221142f }, /* front HP */
4058                         { 0x1b, 0x0121141f }, /* rear HP */
4059                         { }
4060                 }
4061         },
4062         [PINFIX_HP_Z200] = {
4063                 .type = ALC_FIXUP_PINS,
4064                 .v.pins = (const struct alc_pincfg[]) {
4065                         { 0x16, 0x99130120 }, /* internal speaker */
4066                         { }
4067                 }
4068         },
4069 };
4070
4071 static const struct snd_pci_quirk alc262_fixup_tbl[] = {
4072         SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200", PINFIX_HP_Z200),
4073         SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", PINFIX_FSC_H270),
4074         {}
4075 };
4076
4077
4078 #ifdef CONFIG_SND_HDA_POWER_SAVE
4079 #define alc262_loopbacks        alc880_loopbacks
4080 #endif
4081
4082 /*
4083  */
4084 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4085 #include "alc262_quirks.c"
4086 #endif
4087
4088 static int patch_alc262(struct hda_codec *codec)
4089 {
4090         struct alc_spec *spec;
4091         int board_config;
4092         int err;
4093
4094         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4095         if (spec == NULL)
4096                 return -ENOMEM;
4097
4098         codec->spec = spec;
4099
4100         spec->mixer_nid = 0x0b;
4101
4102 #if 0
4103         /* pshou 07/11/05  set a zero PCM sample to DAC when FIFO is
4104          * under-run
4105          */
4106         {
4107         int tmp;
4108         snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_COEF_INDEX, 7);
4109         tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0);
4110         snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_COEF_INDEX, 7);
4111         snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PROC_COEF, tmp | 0x80);
4112         }
4113 #endif
4114         alc_auto_parse_customize_define(codec);
4115
4116         alc_fix_pll_init(codec, 0x20, 0x0a, 10);
4117
4118         board_config = alc_board_config(codec, ALC262_MODEL_LAST,
4119                                         alc262_models, alc262_cfg_tbl);
4120
4121         if (board_config < 0) {
4122                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
4123                        codec->chip_name);
4124                 board_config = ALC_MODEL_AUTO;
4125         }
4126
4127         if (board_config == ALC_MODEL_AUTO) {
4128                 alc_pick_fixup(codec, NULL, alc262_fixup_tbl, alc262_fixups);
4129                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
4130         }
4131
4132         if (board_config == ALC_MODEL_AUTO) {
4133                 /* automatic parse from the BIOS config */
4134                 err = alc262_parse_auto_config(codec);
4135                 if (err < 0) {
4136                         alc_free(codec);
4137                         return err;
4138                 }
4139 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4140                 else if (!err) {
4141                         printk(KERN_INFO
4142                                "hda_codec: Cannot set up configuration "
4143                                "from BIOS.  Using base mode...\n");
4144                         board_config = ALC262_BASIC;
4145                 }
4146 #endif
4147         }
4148
4149         if (board_config != ALC_MODEL_AUTO)
4150                 setup_preset(codec, &alc262_presets[board_config]);
4151
4152         if (!spec->no_analog && !spec->adc_nids) {
4153                 alc_auto_fill_adc_caps(codec);
4154                 alc_rebuild_imux_for_auto_mic(codec);
4155                 alc_remove_invalid_adc_nids(codec);
4156         }
4157
4158         if (!spec->no_analog && !spec->cap_mixer)
4159                 set_capture_mixer(codec);
4160
4161         if (!spec->no_analog && has_cdefine_beep(codec)) {
4162                 err = snd_hda_attach_beep_device(codec, 0x1);
4163                 if (err < 0) {
4164                         alc_free(codec);
4165                         return err;
4166                 }
4167                 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
4168         }
4169
4170         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
4171
4172         spec->vmaster_nid = 0x0c;
4173
4174         codec->patch_ops = alc_patch_ops;
4175         if (board_config == ALC_MODEL_AUTO)
4176                 spec->init_hook = alc_auto_init_std;
4177         spec->shutup = alc_eapd_shutup;
4178
4179         alc_init_jacks(codec);
4180 #ifdef CONFIG_SND_HDA_POWER_SAVE
4181         if (!spec->loopback.amplist)
4182                 spec->loopback.amplist = alc262_loopbacks;
4183 #endif
4184
4185         return 0;
4186 }
4187
4188 /*
4189  *  ALC268
4190  */
4191 /* bind Beep switches of both NID 0x0f and 0x10 */
4192 static const struct hda_bind_ctls alc268_bind_beep_sw = {
4193         .ops = &snd_hda_bind_sw,
4194         .values = {
4195                 HDA_COMPOSE_AMP_VAL(0x0f, 3, 1, HDA_INPUT),
4196                 HDA_COMPOSE_AMP_VAL(0x10, 3, 1, HDA_INPUT),
4197                 0
4198         },
4199 };
4200
4201 static const struct snd_kcontrol_new alc268_beep_mixer[] = {
4202         HDA_CODEC_VOLUME("Beep Playback Volume", 0x1d, 0x0, HDA_INPUT),
4203         HDA_BIND_SW("Beep Playback Switch", &alc268_bind_beep_sw),
4204         { }
4205 };
4206
4207 /* set PCBEEP vol = 0, mute connections */
4208 static const struct hda_verb alc268_beep_init_verbs[] = {
4209         {0x1d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
4210         {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
4211         {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
4212         { }
4213 };
4214
4215 /*
4216  * BIOS auto configuration
4217  */
4218 static int alc268_parse_auto_config(struct hda_codec *codec)
4219 {
4220         static const hda_nid_t alc268_ssids[] = { 0x15, 0x1b, 0x14, 0 };
4221         struct alc_spec *spec = codec->spec;
4222         int err = alc_parse_auto_config(codec, NULL, alc268_ssids);
4223         if (err > 0) {
4224                 if (!spec->no_analog && spec->autocfg.speaker_pins[0] != 0x1d) {
4225                         add_mixer(spec, alc268_beep_mixer);
4226                         add_verb(spec, alc268_beep_init_verbs);
4227                 }
4228         }
4229         return err;
4230 }
4231
4232 /*
4233  */
4234 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4235 #include "alc268_quirks.c"
4236 #endif
4237
4238 static int patch_alc268(struct hda_codec *codec)
4239 {
4240         struct alc_spec *spec;
4241         int board_config;
4242         int i, has_beep, err;
4243
4244         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4245         if (spec == NULL)
4246                 return -ENOMEM;
4247
4248         codec->spec = spec;
4249
4250         /* ALC268 has no aa-loopback mixer */
4251
4252         board_config = alc_board_config(codec, ALC268_MODEL_LAST,
4253                                         alc268_models, alc268_cfg_tbl);
4254
4255         if (board_config < 0)
4256                 board_config = alc_board_codec_sid_config(codec,
4257                         ALC268_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl);
4258
4259         if (board_config < 0) {
4260                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
4261                        codec->chip_name);
4262                 board_config = ALC_MODEL_AUTO;
4263         }
4264
4265         if (board_config == ALC_MODEL_AUTO) {
4266                 /* automatic parse from the BIOS config */
4267                 err = alc268_parse_auto_config(codec);
4268                 if (err < 0) {
4269                         alc_free(codec);
4270                         return err;
4271                 }
4272 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4273                 else if (!err) {
4274                         printk(KERN_INFO
4275                                "hda_codec: Cannot set up configuration "
4276                                "from BIOS.  Using base mode...\n");
4277                         board_config = ALC268_3ST;
4278                 }
4279 #endif
4280         }
4281
4282         if (board_config != ALC_MODEL_AUTO)
4283                 setup_preset(codec, &alc268_presets[board_config]);
4284
4285         has_beep = 0;
4286         for (i = 0; i < spec->num_mixers; i++) {
4287                 if (spec->mixers[i] == alc268_beep_mixer) {
4288                         has_beep = 1;
4289                         break;
4290                 }
4291         }
4292
4293         if (has_beep) {
4294                 err = snd_hda_attach_beep_device(codec, 0x1);
4295                 if (err < 0) {
4296                         alc_free(codec);
4297                         return err;
4298                 }
4299                 if (!query_amp_caps(codec, 0x1d, HDA_INPUT))
4300                         /* override the amp caps for beep generator */
4301                         snd_hda_override_amp_caps(codec, 0x1d, HDA_INPUT,
4302                                           (0x0c << AC_AMPCAP_OFFSET_SHIFT) |
4303                                           (0x0c << AC_AMPCAP_NUM_STEPS_SHIFT) |
4304                                           (0x07 << AC_AMPCAP_STEP_SIZE_SHIFT) |
4305                                           (0 << AC_AMPCAP_MUTE_SHIFT));
4306         }
4307
4308         if (!spec->no_analog && !spec->adc_nids) {
4309                 alc_auto_fill_adc_caps(codec);
4310                 alc_rebuild_imux_for_auto_mic(codec);
4311                 alc_remove_invalid_adc_nids(codec);
4312         }
4313
4314         if (!spec->no_analog && !spec->cap_mixer)
4315                 set_capture_mixer(codec);
4316
4317         spec->vmaster_nid = 0x02;
4318
4319         codec->patch_ops = alc_patch_ops;
4320         if (board_config == ALC_MODEL_AUTO)
4321                 spec->init_hook = alc_auto_init_std;
4322         spec->shutup = alc_eapd_shutup;
4323
4324         alc_init_jacks(codec);
4325
4326         return 0;
4327 }
4328
4329 /*
4330  * ALC269
4331  */
4332 #ifdef CONFIG_SND_HDA_POWER_SAVE
4333 #define alc269_loopbacks        alc880_loopbacks
4334 #endif
4335
4336 static const struct hda_pcm_stream alc269_44k_pcm_analog_playback = {
4337         .substreams = 1,
4338         .channels_min = 2,
4339         .channels_max = 8,
4340         .rates = SNDRV_PCM_RATE_44100, /* fixed rate */
4341         /* NID is set in alc_build_pcms */
4342         .ops = {
4343                 .open = alc_playback_pcm_open,
4344                 .prepare = alc_playback_pcm_prepare,
4345                 .cleanup = alc_playback_pcm_cleanup
4346         },
4347 };
4348
4349 static const struct hda_pcm_stream alc269_44k_pcm_analog_capture = {
4350         .substreams = 1,
4351         .channels_min = 2,
4352         .channels_max = 2,
4353         .rates = SNDRV_PCM_RATE_44100, /* fixed rate */
4354         /* NID is set in alc_build_pcms */
4355 };
4356
4357 #ifdef CONFIG_SND_HDA_POWER_SAVE
4358 static int alc269_mic2_for_mute_led(struct hda_codec *codec)
4359 {
4360         switch (codec->subsystem_id) {
4361         case 0x103c1586:
4362                 return 1;
4363         }
4364         return 0;
4365 }
4366
4367 static int alc269_mic2_mute_check_ps(struct hda_codec *codec, hda_nid_t nid)
4368 {
4369         /* update mute-LED according to the speaker mute state */
4370         if (nid == 0x01 || nid == 0x14) {
4371                 int pinval;
4372                 if (snd_hda_codec_amp_read(codec, 0x14, 0, HDA_OUTPUT, 0) &
4373                     HDA_AMP_MUTE)
4374                         pinval = 0x24;
4375                 else
4376                         pinval = 0x20;
4377                 /* mic2 vref pin is used for mute LED control */
4378                 snd_hda_codec_update_cache(codec, 0x19, 0,
4379                                            AC_VERB_SET_PIN_WIDGET_CONTROL,
4380                                            pinval);
4381         }
4382         return alc_check_power_status(codec, nid);
4383 }
4384 #endif /* CONFIG_SND_HDA_POWER_SAVE */
4385
4386 /* different alc269-variants */
4387 enum {
4388         ALC269_TYPE_ALC269VA,
4389         ALC269_TYPE_ALC269VB,
4390         ALC269_TYPE_ALC269VC,
4391 };
4392
4393 /*
4394  * BIOS auto configuration
4395  */
4396 static int alc269_parse_auto_config(struct hda_codec *codec)
4397 {
4398         static const hda_nid_t alc269_ignore[] = { 0x1d, 0 };
4399         static const hda_nid_t alc269_ssids[] = { 0, 0x1b, 0x14, 0x21 };
4400         static const hda_nid_t alc269va_ssids[] = { 0x15, 0x1b, 0x14, 0 };
4401         struct alc_spec *spec = codec->spec;
4402         const hda_nid_t *ssids = spec->codec_variant == ALC269_TYPE_ALC269VA ?
4403                 alc269va_ssids : alc269_ssids;
4404
4405         return alc_parse_auto_config(codec, alc269_ignore, ssids);
4406 }
4407
4408 static void alc269_toggle_power_output(struct hda_codec *codec, int power_up)
4409 {
4410         int val = alc_read_coef_idx(codec, 0x04);
4411         if (power_up)
4412                 val |= 1 << 11;
4413         else
4414                 val &= ~(1 << 11);
4415         alc_write_coef_idx(codec, 0x04, val);
4416 }
4417
4418 static void alc269_shutup(struct hda_codec *codec)
4419 {
4420         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017)
4421                 alc269_toggle_power_output(codec, 0);
4422         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
4423                 alc269_toggle_power_output(codec, 0);
4424                 msleep(150);
4425         }
4426 }
4427
4428 #ifdef CONFIG_PM
4429 static int alc269_resume(struct hda_codec *codec)
4430 {
4431         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
4432                 alc269_toggle_power_output(codec, 0);
4433                 msleep(150);
4434         }
4435
4436         codec->patch_ops.init(codec);
4437
4438         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) {
4439                 alc269_toggle_power_output(codec, 1);
4440                 msleep(200);
4441         }
4442
4443         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018)
4444                 alc269_toggle_power_output(codec, 1);
4445
4446         snd_hda_codec_resume_amp(codec);
4447         snd_hda_codec_resume_cache(codec);
4448         hda_call_check_power_status(codec, 0x01);
4449         return 0;
4450 }
4451 #endif /* CONFIG_PM */
4452
4453 static void alc269_fixup_hweq(struct hda_codec *codec,
4454                                const struct alc_fixup *fix, int action)
4455 {
4456         int coef;
4457
4458         if (action != ALC_FIXUP_ACT_INIT)
4459                 return;
4460         coef = alc_read_coef_idx(codec, 0x1e);
4461         alc_write_coef_idx(codec, 0x1e, coef | 0x80);
4462 }
4463
4464 static void alc271_fixup_dmic(struct hda_codec *codec,
4465                               const struct alc_fixup *fix, int action)
4466 {
4467         static const struct hda_verb verbs[] = {
4468                 {0x20, AC_VERB_SET_COEF_INDEX, 0x0d},
4469                 {0x20, AC_VERB_SET_PROC_COEF, 0x4000},
4470                 {}
4471         };
4472         unsigned int cfg;
4473
4474         if (strcmp(codec->chip_name, "ALC271X"))
4475                 return;
4476         cfg = snd_hda_codec_get_pincfg(codec, 0x12);
4477         if (get_defcfg_connect(cfg) == AC_JACK_PORT_FIXED)
4478                 snd_hda_sequence_write(codec, verbs);
4479 }
4480
4481 static void alc269_fixup_pcm_44k(struct hda_codec *codec,
4482                                  const struct alc_fixup *fix, int action)
4483 {
4484         struct alc_spec *spec = codec->spec;
4485
4486         if (action != ALC_FIXUP_ACT_PROBE)
4487                 return;
4488
4489         /* Due to a hardware problem on Lenovo Ideadpad, we need to
4490          * fix the sample rate of analog I/O to 44.1kHz
4491          */
4492         spec->stream_analog_playback = &alc269_44k_pcm_analog_playback;
4493         spec->stream_analog_capture = &alc269_44k_pcm_analog_capture;
4494 }
4495
4496 static void alc269_fixup_stereo_dmic(struct hda_codec *codec,
4497                                      const struct alc_fixup *fix, int action)
4498 {
4499         int coef;
4500
4501         if (action != ALC_FIXUP_ACT_INIT)
4502                 return;
4503         /* The digital-mic unit sends PDM (differential signal) instead of
4504          * the standard PCM, thus you can't record a valid mono stream as is.
4505          * Below is a workaround specific to ALC269 to control the dmic
4506          * signal source as mono.
4507          */
4508         coef = alc_read_coef_idx(codec, 0x07);
4509         alc_write_coef_idx(codec, 0x07, coef | 0x80);
4510 }
4511
4512 enum {
4513         ALC269_FIXUP_SONY_VAIO,
4514         ALC275_FIXUP_SONY_VAIO_GPIO2,
4515         ALC269_FIXUP_DELL_M101Z,
4516         ALC269_FIXUP_SKU_IGNORE,
4517         ALC269_FIXUP_ASUS_G73JW,
4518         ALC269_FIXUP_LENOVO_EAPD,
4519         ALC275_FIXUP_SONY_HWEQ,
4520         ALC271_FIXUP_DMIC,
4521         ALC269_FIXUP_PCM_44K,
4522         ALC269_FIXUP_STEREO_DMIC,
4523 };
4524
4525 static const struct alc_fixup alc269_fixups[] = {
4526         [ALC269_FIXUP_SONY_VAIO] = {
4527                 .type = ALC_FIXUP_VERBS,
4528                 .v.verbs = (const struct hda_verb[]) {
4529                         {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD},
4530                         {}
4531                 }
4532         },
4533         [ALC275_FIXUP_SONY_VAIO_GPIO2] = {
4534                 .type = ALC_FIXUP_VERBS,
4535                 .v.verbs = (const struct hda_verb[]) {
4536                         {0x01, AC_VERB_SET_GPIO_MASK, 0x04},
4537                         {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04},
4538                         {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
4539                         { }
4540                 },
4541                 .chained = true,
4542                 .chain_id = ALC269_FIXUP_SONY_VAIO
4543         },
4544         [ALC269_FIXUP_DELL_M101Z] = {
4545                 .type = ALC_FIXUP_VERBS,
4546                 .v.verbs = (const struct hda_verb[]) {
4547                         /* Enables internal speaker */
4548                         {0x20, AC_VERB_SET_COEF_INDEX, 13},
4549                         {0x20, AC_VERB_SET_PROC_COEF, 0x4040},
4550                         {}
4551                 }
4552         },
4553         [ALC269_FIXUP_SKU_IGNORE] = {
4554                 .type = ALC_FIXUP_SKU,
4555                 .v.sku = ALC_FIXUP_SKU_IGNORE,
4556         },
4557         [ALC269_FIXUP_ASUS_G73JW] = {
4558                 .type = ALC_FIXUP_PINS,
4559                 .v.pins = (const struct alc_pincfg[]) {
4560                         { 0x17, 0x99130111 }, /* subwoofer */
4561                         { }
4562                 }
4563         },
4564         [ALC269_FIXUP_LENOVO_EAPD] = {
4565                 .type = ALC_FIXUP_VERBS,
4566                 .v.verbs = (const struct hda_verb[]) {
4567                         {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
4568                         {}
4569                 }
4570         },
4571         [ALC275_FIXUP_SONY_HWEQ] = {
4572                 .type = ALC_FIXUP_FUNC,
4573                 .v.func = alc269_fixup_hweq,
4574                 .chained = true,
4575                 .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2
4576         },
4577         [ALC271_FIXUP_DMIC] = {
4578                 .type = ALC_FIXUP_FUNC,
4579                 .v.func = alc271_fixup_dmic,
4580         },
4581         [ALC269_FIXUP_PCM_44K] = {
4582                 .type = ALC_FIXUP_FUNC,
4583                 .v.func = alc269_fixup_pcm_44k,
4584         },
4585         [ALC269_FIXUP_STEREO_DMIC] = {
4586                 .type = ALC_FIXUP_FUNC,
4587                 .v.func = alc269_fixup_stereo_dmic,
4588         },
4589 };
4590
4591 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4592         SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
4593         SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
4594         SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
4595         SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
4596         SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
4597         SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
4598         SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
4599         SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
4600         SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
4601         SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
4602         SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
4603         SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC),
4604         SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
4605         SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
4606         SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
4607         SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
4608         SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
4609         SND_PCI_QUIRK(0x17aa, 0x3bf8, "Lenovo Ideapd", ALC269_FIXUP_PCM_44K),
4610         SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
4611         {}
4612 };
4613
4614
4615 static int alc269_fill_coef(struct hda_codec *codec)
4616 {
4617         int val;
4618
4619         if ((alc_read_coef_idx(codec, 0) & 0x00ff) < 0x015) {
4620                 alc_write_coef_idx(codec, 0xf, 0x960b);
4621                 alc_write_coef_idx(codec, 0xe, 0x8817);
4622         }
4623
4624         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x016) {
4625                 alc_write_coef_idx(codec, 0xf, 0x960b);
4626                 alc_write_coef_idx(codec, 0xe, 0x8814);
4627         }
4628
4629         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) {
4630                 val = alc_read_coef_idx(codec, 0x04);
4631                 /* Power up output pin */
4632                 alc_write_coef_idx(codec, 0x04, val | (1<<11));
4633         }
4634
4635         if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) {
4636                 val = alc_read_coef_idx(codec, 0xd);
4637                 if ((val & 0x0c00) >> 10 != 0x1) {
4638                         /* Capless ramp up clock control */
4639                         alc_write_coef_idx(codec, 0xd, val | (1<<10));
4640                 }
4641                 val = alc_read_coef_idx(codec, 0x17);
4642                 if ((val & 0x01c0) >> 6 != 0x4) {
4643                         /* Class D power on reset */
4644                         alc_write_coef_idx(codec, 0x17, val | (1<<7));
4645                 }
4646         }
4647
4648         val = alc_read_coef_idx(codec, 0xd); /* Class D */
4649         alc_write_coef_idx(codec, 0xd, val | (1<<14));
4650
4651         val = alc_read_coef_idx(codec, 0x4); /* HP */
4652         alc_write_coef_idx(codec, 0x4, val | (1<<11));
4653
4654         return 0;
4655 }
4656
4657 /*
4658  */
4659 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4660 #include "alc269_quirks.c"
4661 #endif
4662
4663 static int patch_alc269(struct hda_codec *codec)
4664 {
4665         struct alc_spec *spec;
4666         int board_config, coef;
4667         int err;
4668
4669         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4670         if (spec == NULL)
4671                 return -ENOMEM;
4672
4673         codec->spec = spec;
4674
4675         spec->mixer_nid = 0x0b;
4676
4677         alc_auto_parse_customize_define(codec);
4678
4679         if (codec->vendor_id == 0x10ec0269) {
4680                 spec->codec_variant = ALC269_TYPE_ALC269VA;
4681                 coef = alc_read_coef_idx(codec, 0);
4682                 if ((coef & 0x00f0) == 0x0010) {
4683                         if (codec->bus->pci->subsystem_vendor == 0x1025 &&
4684                             spec->cdefine.platform_type == 1) {
4685                                 alc_codec_rename(codec, "ALC271X");
4686                         } else if ((coef & 0xf000) == 0x2000) {
4687                                 alc_codec_rename(codec, "ALC259");
4688                         } else if ((coef & 0xf000) == 0x3000) {
4689                                 alc_codec_rename(codec, "ALC258");
4690                         } else if ((coef & 0xfff0) == 0x3010) {
4691                                 alc_codec_rename(codec, "ALC277");
4692                         } else {
4693                                 alc_codec_rename(codec, "ALC269VB");
4694                         }
4695                         spec->codec_variant = ALC269_TYPE_ALC269VB;
4696                 } else if ((coef & 0x00f0) == 0x0020) {
4697                         if (coef == 0xa023)
4698                                 alc_codec_rename(codec, "ALC259");
4699                         else if (coef == 0x6023)
4700                                 alc_codec_rename(codec, "ALC281X");
4701                         else if (codec->bus->pci->subsystem_vendor == 0x17aa &&
4702                                  codec->bus->pci->subsystem_device == 0x21f3)
4703                                 alc_codec_rename(codec, "ALC3202");
4704                         else
4705                                 alc_codec_rename(codec, "ALC269VC");
4706                         spec->codec_variant = ALC269_TYPE_ALC269VC;
4707                 } else
4708                         alc_fix_pll_init(codec, 0x20, 0x04, 15);
4709                 alc269_fill_coef(codec);
4710         }
4711
4712         board_config = alc_board_config(codec, ALC269_MODEL_LAST,
4713                                         alc269_models, alc269_cfg_tbl);
4714
4715         if (board_config < 0) {
4716                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
4717                        codec->chip_name);
4718                 board_config = ALC_MODEL_AUTO;
4719         }
4720
4721         if (board_config == ALC_MODEL_AUTO) {
4722                 alc_pick_fixup(codec, NULL, alc269_fixup_tbl, alc269_fixups);
4723                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
4724         }
4725
4726         if (board_config == ALC_MODEL_AUTO) {
4727                 /* automatic parse from the BIOS config */
4728                 err = alc269_parse_auto_config(codec);
4729                 if (err < 0) {
4730                         alc_free(codec);
4731                         return err;
4732                 }
4733 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4734                 else if (!err) {
4735                         printk(KERN_INFO
4736                                "hda_codec: Cannot set up configuration "
4737                                "from BIOS.  Using base mode...\n");
4738                         board_config = ALC269_BASIC;
4739                 }
4740 #endif
4741         }
4742
4743         if (board_config != ALC_MODEL_AUTO)
4744                 setup_preset(codec, &alc269_presets[board_config]);
4745
4746         if (!spec->no_analog && !spec->adc_nids) {
4747                 alc_auto_fill_adc_caps(codec);
4748                 alc_rebuild_imux_for_auto_mic(codec);
4749                 alc_remove_invalid_adc_nids(codec);
4750         }
4751
4752         if (!spec->no_analog && !spec->cap_mixer)
4753                 set_capture_mixer(codec);
4754
4755         if (!spec->no_analog && has_cdefine_beep(codec)) {
4756                 err = snd_hda_attach_beep_device(codec, 0x1);
4757                 if (err < 0) {
4758                         alc_free(codec);
4759                         return err;
4760                 }
4761                 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
4762         }
4763
4764         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
4765
4766         spec->vmaster_nid = 0x02;
4767
4768         codec->patch_ops = alc_patch_ops;
4769 #ifdef CONFIG_PM
4770         codec->patch_ops.resume = alc269_resume;
4771 #endif
4772         if (board_config == ALC_MODEL_AUTO)
4773                 spec->init_hook = alc_auto_init_std;
4774         spec->shutup = alc269_shutup;
4775
4776         alc_init_jacks(codec);
4777 #ifdef CONFIG_SND_HDA_POWER_SAVE
4778         if (!spec->loopback.amplist)
4779                 spec->loopback.amplist = alc269_loopbacks;
4780         if (alc269_mic2_for_mute_led(codec))
4781                 codec->patch_ops.check_power_status = alc269_mic2_mute_check_ps;
4782 #endif
4783
4784         return 0;
4785 }
4786
4787 /*
4788  * ALC861
4789  */
4790
4791 static int alc861_parse_auto_config(struct hda_codec *codec)
4792 {
4793         static const hda_nid_t alc861_ignore[] = { 0x1d, 0 };
4794         static const hda_nid_t alc861_ssids[] = { 0x0e, 0x0f, 0x0b, 0 };
4795         return alc_parse_auto_config(codec, alc861_ignore, alc861_ssids);
4796 }
4797
4798 #ifdef CONFIG_SND_HDA_POWER_SAVE
4799 static const struct hda_amp_list alc861_loopbacks[] = {
4800         { 0x15, HDA_INPUT, 0 },
4801         { 0x15, HDA_INPUT, 1 },
4802         { 0x15, HDA_INPUT, 2 },
4803         { 0x15, HDA_INPUT, 3 },
4804         { } /* end */
4805 };
4806 #endif
4807
4808
4809 /* Pin config fixes */
4810 enum {
4811         PINFIX_FSC_AMILO_PI1505,
4812 };
4813
4814 static const struct alc_fixup alc861_fixups[] = {
4815         [PINFIX_FSC_AMILO_PI1505] = {
4816                 .type = ALC_FIXUP_PINS,
4817                 .v.pins = (const struct alc_pincfg[]) {
4818                         { 0x0b, 0x0221101f }, /* HP */
4819                         { 0x0f, 0x90170310 }, /* speaker */
4820                         { }
4821                 }
4822         },
4823 };
4824
4825 static const struct snd_pci_quirk alc861_fixup_tbl[] = {
4826         SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505),
4827         {}
4828 };
4829
4830 /*
4831  */
4832 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4833 #include "alc861_quirks.c"
4834 #endif
4835
4836 static int patch_alc861(struct hda_codec *codec)
4837 {
4838         struct alc_spec *spec;
4839         int board_config;
4840         int err;
4841
4842         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4843         if (spec == NULL)
4844                 return -ENOMEM;
4845
4846         codec->spec = spec;
4847
4848         spec->mixer_nid = 0x15;
4849
4850         board_config = alc_board_config(codec, ALC861_MODEL_LAST,
4851                                         alc861_models, alc861_cfg_tbl);
4852
4853         if (board_config < 0) {
4854                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
4855                        codec->chip_name);
4856                 board_config = ALC_MODEL_AUTO;
4857         }
4858
4859         if (board_config == ALC_MODEL_AUTO) {
4860                 alc_pick_fixup(codec, NULL, alc861_fixup_tbl, alc861_fixups);
4861                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
4862         }
4863
4864         if (board_config == ALC_MODEL_AUTO) {
4865                 /* automatic parse from the BIOS config */
4866                 err = alc861_parse_auto_config(codec);
4867                 if (err < 0) {
4868                         alc_free(codec);
4869                         return err;
4870                 }
4871 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4872                 else if (!err) {
4873                         printk(KERN_INFO
4874                                "hda_codec: Cannot set up configuration "
4875                                "from BIOS.  Using base mode...\n");
4876                    board_config = ALC861_3ST_DIG;
4877                 }
4878 #endif
4879         }
4880
4881         if (board_config != ALC_MODEL_AUTO)
4882                 setup_preset(codec, &alc861_presets[board_config]);
4883
4884         if (!spec->no_analog && !spec->adc_nids) {
4885                 alc_auto_fill_adc_caps(codec);
4886                 alc_rebuild_imux_for_auto_mic(codec);
4887                 alc_remove_invalid_adc_nids(codec);
4888         }
4889
4890         if (!spec->no_analog && !spec->cap_mixer)
4891                 set_capture_mixer(codec);
4892
4893         if (!spec->no_analog) {
4894                 err = snd_hda_attach_beep_device(codec, 0x23);
4895                 if (err < 0) {
4896                         alc_free(codec);
4897                         return err;
4898                 }
4899                 set_beep_amp(spec, 0x23, 0, HDA_OUTPUT);
4900         }
4901
4902         spec->vmaster_nid = 0x03;
4903
4904         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
4905
4906         codec->patch_ops = alc_patch_ops;
4907         if (board_config == ALC_MODEL_AUTO) {
4908                 spec->init_hook = alc_auto_init_std;
4909 #ifdef CONFIG_SND_HDA_POWER_SAVE
4910                 spec->power_hook = alc_power_eapd;
4911 #endif
4912         }
4913 #ifdef CONFIG_SND_HDA_POWER_SAVE
4914         if (!spec->loopback.amplist)
4915                 spec->loopback.amplist = alc861_loopbacks;
4916 #endif
4917
4918         return 0;
4919 }
4920
4921 /*
4922  * ALC861-VD support
4923  *
4924  * Based on ALC882
4925  *
4926  * In addition, an independent DAC
4927  */
4928 #ifdef CONFIG_SND_HDA_POWER_SAVE
4929 #define alc861vd_loopbacks      alc880_loopbacks
4930 #endif
4931
4932 static int alc861vd_parse_auto_config(struct hda_codec *codec)
4933 {
4934         static const hda_nid_t alc861vd_ignore[] = { 0x1d, 0 };
4935         static const hda_nid_t alc861vd_ssids[] = { 0x15, 0x1b, 0x14, 0 };
4936         return alc_parse_auto_config(codec, alc861vd_ignore, alc861vd_ssids);
4937 }
4938
4939 enum {
4940         ALC660VD_FIX_ASUS_GPIO1
4941 };
4942
4943 /* reset GPIO1 */
4944 static const struct alc_fixup alc861vd_fixups[] = {
4945         [ALC660VD_FIX_ASUS_GPIO1] = {
4946                 .type = ALC_FIXUP_VERBS,
4947                 .v.verbs = (const struct hda_verb[]) {
4948                         {0x01, AC_VERB_SET_GPIO_MASK, 0x03},
4949                         {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01},
4950                         {0x01, AC_VERB_SET_GPIO_DATA, 0x01},
4951                         { }
4952                 }
4953         },
4954 };
4955
4956 static const struct snd_pci_quirk alc861vd_fixup_tbl[] = {
4957         SND_PCI_QUIRK(0x1043, 0x1339, "ASUS A7-K", ALC660VD_FIX_ASUS_GPIO1),
4958         {}
4959 };
4960
4961 static const struct hda_verb alc660vd_eapd_verbs[] = {
4962         {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
4963         {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
4964         { }
4965 };
4966
4967 /*
4968  */
4969 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
4970 #include "alc861vd_quirks.c"
4971 #endif
4972
4973 static int patch_alc861vd(struct hda_codec *codec)
4974 {
4975         struct alc_spec *spec;
4976         int err, board_config;
4977
4978         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4979         if (spec == NULL)
4980                 return -ENOMEM;
4981
4982         codec->spec = spec;
4983
4984         spec->mixer_nid = 0x0b;
4985
4986         board_config = alc_board_config(codec, ALC861VD_MODEL_LAST,
4987                                         alc861vd_models, alc861vd_cfg_tbl);
4988
4989         if (board_config < 0) {
4990                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
4991                        codec->chip_name);
4992                 board_config = ALC_MODEL_AUTO;
4993         }
4994
4995         if (board_config == ALC_MODEL_AUTO) {
4996                 alc_pick_fixup(codec, NULL, alc861vd_fixup_tbl, alc861vd_fixups);
4997                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
4998         }
4999
5000         if (board_config == ALC_MODEL_AUTO) {
5001                 /* automatic parse from the BIOS config */
5002                 err = alc861vd_parse_auto_config(codec);
5003                 if (err < 0) {
5004                         alc_free(codec);
5005                         return err;
5006                 }
5007 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5008                 else if (!err) {
5009                         printk(KERN_INFO
5010                                "hda_codec: Cannot set up configuration "
5011                                "from BIOS.  Using base mode...\n");
5012                         board_config = ALC861VD_3ST;
5013                 }
5014 #endif
5015         }
5016
5017         if (board_config != ALC_MODEL_AUTO)
5018                 setup_preset(codec, &alc861vd_presets[board_config]);
5019
5020         if (codec->vendor_id == 0x10ec0660) {
5021                 /* always turn on EAPD */
5022                 add_verb(spec, alc660vd_eapd_verbs);
5023         }
5024
5025         if (!spec->no_analog && !spec->adc_nids) {
5026                 alc_auto_fill_adc_caps(codec);
5027                 alc_rebuild_imux_for_auto_mic(codec);
5028                 alc_remove_invalid_adc_nids(codec);
5029         }
5030
5031         if (!spec->no_analog && !spec->cap_mixer)
5032                 set_capture_mixer(codec);
5033
5034         if (!spec->no_analog) {
5035                 err = snd_hda_attach_beep_device(codec, 0x23);
5036                 if (err < 0) {
5037                         alc_free(codec);
5038                         return err;
5039                 }
5040                 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
5041         }
5042
5043         spec->vmaster_nid = 0x02;
5044
5045         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
5046
5047         codec->patch_ops = alc_patch_ops;
5048
5049         if (board_config == ALC_MODEL_AUTO)
5050                 spec->init_hook = alc_auto_init_std;
5051         spec->shutup = alc_eapd_shutup;
5052 #ifdef CONFIG_SND_HDA_POWER_SAVE
5053         if (!spec->loopback.amplist)
5054                 spec->loopback.amplist = alc861vd_loopbacks;
5055 #endif
5056
5057         return 0;
5058 }
5059
5060 /*
5061  * ALC662 support
5062  *
5063  * ALC662 is almost identical with ALC880 but has cleaner and more flexible
5064  * configuration.  Each pin widget can choose any input DACs and a mixer.
5065  * Each ADC is connected from a mixer of all inputs.  This makes possible
5066  * 6-channel independent captures.
5067  *
5068  * In addition, an independent DAC for the multi-playback (not used in this
5069  * driver yet).
5070  */
5071 #ifdef CONFIG_SND_HDA_POWER_SAVE
5072 #define alc662_loopbacks        alc880_loopbacks
5073 #endif
5074
5075 /*
5076  * BIOS auto configuration
5077  */
5078
5079 static int alc662_parse_auto_config(struct hda_codec *codec)
5080 {
5081         static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
5082         static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
5083         static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
5084         const hda_nid_t *ssids;
5085
5086         if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
5087             codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670)
5088                 ssids = alc663_ssids;
5089         else
5090                 ssids = alc662_ssids;
5091         return alc_parse_auto_config(codec, alc662_ignore, ssids);
5092 }
5093
5094 static void alc272_fixup_mario(struct hda_codec *codec,
5095                                const struct alc_fixup *fix, int action)
5096 {
5097         if (action != ALC_FIXUP_ACT_PROBE)
5098                 return;
5099         if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT,
5100                                       (0x3b << AC_AMPCAP_OFFSET_SHIFT) |
5101                                       (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) |
5102                                       (0x03 << AC_AMPCAP_STEP_SIZE_SHIFT) |
5103                                       (0 << AC_AMPCAP_MUTE_SHIFT)))
5104                 printk(KERN_WARNING
5105                        "hda_codec: failed to override amp caps for NID 0x2\n");
5106 }
5107
5108 enum {
5109         ALC662_FIXUP_ASPIRE,
5110         ALC662_FIXUP_IDEAPAD,
5111         ALC272_FIXUP_MARIO,
5112         ALC662_FIXUP_CZC_P10T,
5113         ALC662_FIXUP_SKU_IGNORE,
5114         ALC662_FIXUP_HP_RP5800,
5115 };
5116
5117 static const struct alc_fixup alc662_fixups[] = {
5118         [ALC662_FIXUP_ASPIRE] = {
5119                 .type = ALC_FIXUP_PINS,
5120                 .v.pins = (const struct alc_pincfg[]) {
5121                         { 0x15, 0x99130112 }, /* subwoofer */
5122                         { }
5123                 }
5124         },
5125         [ALC662_FIXUP_IDEAPAD] = {
5126                 .type = ALC_FIXUP_PINS,
5127                 .v.pins = (const struct alc_pincfg[]) {
5128                         { 0x17, 0x99130112 }, /* subwoofer */
5129                         { }
5130                 }
5131         },
5132         [ALC272_FIXUP_MARIO] = {
5133                 .type = ALC_FIXUP_FUNC,
5134                 .v.func = alc272_fixup_mario,
5135         },
5136         [ALC662_FIXUP_CZC_P10T] = {
5137                 .type = ALC_FIXUP_VERBS,
5138                 .v.verbs = (const struct hda_verb[]) {
5139                         {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
5140                         {}
5141                 }
5142         },
5143         [ALC662_FIXUP_SKU_IGNORE] = {
5144                 .type = ALC_FIXUP_SKU,
5145                 .v.sku = ALC_FIXUP_SKU_IGNORE,
5146         },
5147         [ALC662_FIXUP_HP_RP5800] = {
5148                 .type = ALC_FIXUP_PINS,
5149                 .v.pins = (const struct alc_pincfg[]) {
5150                         { 0x14, 0x0221201f }, /* HP out */
5151                         { }
5152                 },
5153                 .chained = true,
5154                 .chain_id = ALC662_FIXUP_SKU_IGNORE
5155         },
5156 };
5157
5158 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
5159         SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
5160         SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE),
5161         SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
5162         SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
5163         SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
5164         SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
5165         SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
5166         SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
5167         {}
5168 };
5169
5170 static const struct alc_model_fixup alc662_fixup_models[] = {
5171         {.id = ALC272_FIXUP_MARIO, .name = "mario"},
5172         {}
5173 };
5174
5175
5176 /*
5177  */
5178 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5179 #include "alc662_quirks.c"
5180 #endif
5181
5182 static int patch_alc662(struct hda_codec *codec)
5183 {
5184         struct alc_spec *spec;
5185         int err, board_config;
5186         int coef;
5187
5188         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5189         if (!spec)
5190                 return -ENOMEM;
5191
5192         codec->spec = spec;
5193
5194         spec->mixer_nid = 0x0b;
5195
5196         alc_auto_parse_customize_define(codec);
5197
5198         alc_fix_pll_init(codec, 0x20, 0x04, 15);
5199
5200         coef = alc_read_coef_idx(codec, 0);
5201         if (coef == 0x8020 || coef == 0x8011)
5202                 alc_codec_rename(codec, "ALC661");
5203         else if (coef & (1 << 14) &&
5204                 codec->bus->pci->subsystem_vendor == 0x1025 &&
5205                 spec->cdefine.platform_type == 1)
5206                 alc_codec_rename(codec, "ALC272X");
5207         else if (coef == 0x4011)
5208                 alc_codec_rename(codec, "ALC656");
5209
5210         board_config = alc_board_config(codec, ALC662_MODEL_LAST,
5211                                         alc662_models, alc662_cfg_tbl);
5212         if (board_config < 0) {
5213                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
5214                        codec->chip_name);
5215                 board_config = ALC_MODEL_AUTO;
5216         }
5217
5218         if (board_config == ALC_MODEL_AUTO) {
5219                 alc_pick_fixup(codec, alc662_fixup_models,
5220                                alc662_fixup_tbl, alc662_fixups);
5221                 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
5222                 /* automatic parse from the BIOS config */
5223                 err = alc662_parse_auto_config(codec);
5224                 if (err < 0) {
5225                         alc_free(codec);
5226                         return err;
5227                 }
5228 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5229                 else if (!err) {
5230                         printk(KERN_INFO
5231                                "hda_codec: Cannot set up configuration "
5232                                "from BIOS.  Using base mode...\n");
5233                         board_config = ALC662_3ST_2ch_DIG;
5234                 }
5235 #endif
5236         }
5237
5238         if (board_config != ALC_MODEL_AUTO)
5239                 setup_preset(codec, &alc662_presets[board_config]);
5240
5241         if (!spec->no_analog && !spec->adc_nids) {
5242                 alc_auto_fill_adc_caps(codec);
5243                 alc_rebuild_imux_for_auto_mic(codec);
5244                 alc_remove_invalid_adc_nids(codec);
5245         }
5246
5247         if (!spec->no_analog && !spec->cap_mixer)
5248                 set_capture_mixer(codec);
5249
5250         if (!spec->no_analog && has_cdefine_beep(codec)) {
5251                 err = snd_hda_attach_beep_device(codec, 0x1);
5252                 if (err < 0) {
5253                         alc_free(codec);
5254                         return err;
5255                 }
5256                 switch (codec->vendor_id) {
5257                 case 0x10ec0662:
5258                         set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
5259                         break;
5260                 case 0x10ec0272:
5261                 case 0x10ec0663:
5262                 case 0x10ec0665:
5263                         set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
5264                         break;
5265                 case 0x10ec0273:
5266                         set_beep_amp(spec, 0x0b, 0x03, HDA_INPUT);
5267                         break;
5268                 }
5269         }
5270         spec->vmaster_nid = 0x02;
5271
5272         alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
5273
5274         codec->patch_ops = alc_patch_ops;
5275         if (board_config == ALC_MODEL_AUTO)
5276                 spec->init_hook = alc_auto_init_std;
5277         spec->shutup = alc_eapd_shutup;
5278
5279         alc_init_jacks(codec);
5280
5281 #ifdef CONFIG_SND_HDA_POWER_SAVE
5282         if (!spec->loopback.amplist)
5283                 spec->loopback.amplist = alc662_loopbacks;
5284 #endif
5285
5286         return 0;
5287 }
5288
5289 static int patch_alc888(struct hda_codec *codec)
5290 {
5291         if ((alc_read_coef_idx(codec, 0) & 0x00f0)==0x0030){
5292                 kfree(codec->chip_name);
5293                 if (codec->vendor_id == 0x10ec0887)
5294                         codec->chip_name = kstrdup("ALC887-VD", GFP_KERNEL);
5295                 else
5296                         codec->chip_name = kstrdup("ALC888-VD", GFP_KERNEL);
5297                 if (!codec->chip_name) {
5298                         alc_free(codec);
5299                         return -ENOMEM;
5300                 }
5301                 return patch_alc662(codec);
5302         }
5303         return patch_alc882(codec);
5304 }
5305
5306 static int patch_alc899(struct hda_codec *codec)
5307 {
5308         if ((alc_read_coef_idx(codec, 0) & 0x2000) != 0x2000) {
5309                 kfree(codec->chip_name);
5310                 codec->chip_name = kstrdup("ALC898", GFP_KERNEL);
5311         }
5312         return patch_alc882(codec);
5313 }
5314
5315 /*
5316  * ALC680 support
5317  */
5318
5319 static int alc680_parse_auto_config(struct hda_codec *codec)
5320 {
5321         return alc_parse_auto_config(codec, NULL, NULL);
5322 }
5323
5324 /*
5325  */
5326 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5327 #include "alc680_quirks.c"
5328 #endif
5329
5330 static int patch_alc680(struct hda_codec *codec)
5331 {
5332         struct alc_spec *spec;
5333         int board_config;
5334         int err;
5335
5336         spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5337         if (spec == NULL)
5338                 return -ENOMEM;
5339
5340         codec->spec = spec;
5341
5342         /* ALC680 has no aa-loopback mixer */
5343
5344         board_config = alc_board_config(codec, ALC680_MODEL_LAST,
5345                                         alc680_models, alc680_cfg_tbl);
5346
5347         if (board_config < 0) {
5348                 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
5349                        codec->chip_name);
5350                 board_config = ALC_MODEL_AUTO;
5351         }
5352
5353         if (board_config == ALC_MODEL_AUTO) {
5354                 /* automatic parse from the BIOS config */
5355                 err = alc680_parse_auto_config(codec);
5356                 if (err < 0) {
5357                         alc_free(codec);
5358                         return err;
5359                 }
5360 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5361                 else if (!err) {
5362                         printk(KERN_INFO
5363                                "hda_codec: Cannot set up configuration "
5364                                "from BIOS.  Using base mode...\n");
5365                         board_config = ALC680_BASE;
5366                 }
5367 #endif
5368         }
5369
5370         if (board_config != ALC_MODEL_AUTO) {
5371                 setup_preset(codec, &alc680_presets[board_config]);
5372 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS
5373                 spec->stream_analog_capture = &alc680_pcm_analog_auto_capture;
5374 #endif
5375         }
5376
5377         if (!spec->no_analog && !spec->adc_nids) {
5378                 alc_auto_fill_adc_caps(codec);
5379                 alc_rebuild_imux_for_auto_mic(codec);
5380                 alc_remove_invalid_adc_nids(codec);
5381         }
5382
5383         if (!spec->no_analog && !spec->cap_mixer)
5384                 set_capture_mixer(codec);
5385
5386         spec->vmaster_nid = 0x02;
5387
5388         codec->patch_ops = alc_patch_ops;
5389         if (board_config == ALC_MODEL_AUTO)
5390                 spec->init_hook = alc_auto_init_std;
5391
5392         return 0;
5393 }
5394
5395 /*
5396  * patch entries
5397  */
5398 static const struct hda_codec_preset snd_hda_preset_realtek[] = {
5399         { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 },
5400         { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
5401         { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
5402         { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
5403         { .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 },
5404         { .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 },
5405         { .id = 0x10ec0270, .name = "ALC270", .patch = patch_alc269 },
5406         { .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 },
5407         { .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 },
5408         { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 },
5409         { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
5410           .patch = patch_alc861 },
5411         { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
5412         { .id = 0x10ec0861, .name = "ALC861", .patch = patch_alc861 },
5413         { .id = 0x10ec0862, .name = "ALC861-VD", .patch = patch_alc861vd },
5414         { .id = 0x10ec0662, .rev = 0x100002, .name = "ALC662 rev2",
5415           .patch = patch_alc882 },
5416         { .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1",
5417           .patch = patch_alc662 },
5418         { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
5419         { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
5420         { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },
5421         { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 },
5422         { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
5423         { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
5424         { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 },
5425         { .id = 0x10ec0885, .rev = 0x100101, .name = "ALC889A",
5426           .patch = patch_alc882 },
5427         { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A",
5428           .patch = patch_alc882 },
5429         { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 },
5430         { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc888 },
5431         { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200",
5432           .patch = patch_alc882 },
5433         { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 },
5434         { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 },
5435         { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 },
5436         { .id = 0x10ec0899, .name = "ALC899", .patch = patch_alc899 },
5437         {} /* terminator */
5438 };
5439
5440 MODULE_ALIAS("snd-hda-codec-id:10ec*");
5441
5442 MODULE_LICENSE("GPL");
5443 MODULE_DESCRIPTION("Realtek HD-audio codec");
5444
5445 static struct hda_codec_preset_list realtek_list = {
5446         .preset = snd_hda_preset_realtek,
5447         .owner = THIS_MODULE,
5448 };
5449
5450 static int __init patch_realtek_init(void)
5451 {
5452         return snd_hda_add_codec_preset(&realtek_list);
5453 }
5454
5455 static void __exit patch_realtek_exit(void)
5456 {
5457         snd_hda_delete_codec_preset(&realtek_list);
5458 }
5459
5460 module_init(patch_realtek_init)
5461 module_exit(patch_realtek_exit)