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