Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[cascardo/linux.git] / sound / pci / hda / alc662_quirks.c
1 /*
2  * ALC662/ALC663/ALC665/ALC670 quirk models
3  * included by patch_realtek.c
4  */
5
6 /* ALC662 models */
7 enum {
8         ALC662_AUTO,
9         ALC662_3ST_2ch_DIG,
10         ALC662_3ST_6ch_DIG,
11         ALC662_3ST_6ch,
12         ALC662_5ST_DIG,
13         ALC662_LENOVO_101E,
14         ALC662_ASUS_EEEPC_P701,
15         ALC662_ASUS_EEEPC_EP20,
16         ALC663_ASUS_M51VA,
17         ALC663_ASUS_G71V,
18         ALC663_ASUS_H13,
19         ALC663_ASUS_G50V,
20         ALC662_ECS,
21         ALC663_ASUS_MODE1,
22         ALC662_ASUS_MODE2,
23         ALC663_ASUS_MODE3,
24         ALC663_ASUS_MODE4,
25         ALC663_ASUS_MODE5,
26         ALC663_ASUS_MODE6,
27         ALC663_ASUS_MODE7,
28         ALC663_ASUS_MODE8,
29         ALC272_DELL,
30         ALC272_DELL_ZM1,
31         ALC272_SAMSUNG_NC10,
32         ALC662_MODEL_LAST,
33 };
34
35 #define ALC662_DIGOUT_NID       0x06
36 #define ALC662_DIGIN_NID        0x0a
37
38 static const hda_nid_t alc662_dac_nids[3] = {
39         /* front, rear, clfe */
40         0x02, 0x03, 0x04
41 };
42
43 static const hda_nid_t alc272_dac_nids[2] = {
44         0x02, 0x03
45 };
46
47 static const hda_nid_t alc662_adc_nids[2] = {
48         /* ADC1-2 */
49         0x09, 0x08
50 };
51
52 static const hda_nid_t alc272_adc_nids[1] = {
53         /* ADC1-2 */
54         0x08,
55 };
56
57 static const hda_nid_t alc662_capsrc_nids[2] = { 0x22, 0x23 };
58 static const hda_nid_t alc272_capsrc_nids[1] = { 0x23 };
59
60
61 /* input MUX */
62 /* FIXME: should be a matrix-type input source selection */
63 static const struct hda_input_mux alc662_capture_source = {
64         .num_items = 4,
65         .items = {
66                 { "Mic", 0x0 },
67                 { "Front Mic", 0x1 },
68                 { "Line", 0x2 },
69                 { "CD", 0x4 },
70         },
71 };
72
73 static const struct hda_input_mux alc662_lenovo_101e_capture_source = {
74         .num_items = 2,
75         .items = {
76                 { "Mic", 0x1 },
77                 { "Line", 0x2 },
78         },
79 };
80
81 static const struct hda_input_mux alc663_capture_source = {
82         .num_items = 3,
83         .items = {
84                 { "Mic", 0x0 },
85                 { "Front Mic", 0x1 },
86                 { "Line", 0x2 },
87         },
88 };
89
90 #if 0 /* set to 1 for testing other input sources below */
91 static const struct hda_input_mux alc272_nc10_capture_source = {
92         .num_items = 16,
93         .items = {
94                 { "Autoselect Mic", 0x0 },
95                 { "Internal Mic", 0x1 },
96                 { "In-0x02", 0x2 },
97                 { "In-0x03", 0x3 },
98                 { "In-0x04", 0x4 },
99                 { "In-0x05", 0x5 },
100                 { "In-0x06", 0x6 },
101                 { "In-0x07", 0x7 },
102                 { "In-0x08", 0x8 },
103                 { "In-0x09", 0x9 },
104                 { "In-0x0a", 0x0a },
105                 { "In-0x0b", 0x0b },
106                 { "In-0x0c", 0x0c },
107                 { "In-0x0d", 0x0d },
108                 { "In-0x0e", 0x0e },
109                 { "In-0x0f", 0x0f },
110         },
111 };
112 #endif
113
114 /*
115  * 2ch mode
116  */
117 static const struct hda_channel_mode alc662_3ST_2ch_modes[1] = {
118         { 2, NULL }
119 };
120
121 /*
122  * 2ch mode
123  */
124 static const struct hda_verb alc662_3ST_ch2_init[] = {
125         { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 },
126         { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE },
127         { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN },
128         { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE },
129         { } /* end */
130 };
131
132 /*
133  * 6ch mode
134  */
135 static const struct hda_verb alc662_3ST_ch6_init[] = {
136         { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
137         { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE },
138         { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 },
139         { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
140         { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE },
141         { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 },
142         { } /* end */
143 };
144
145 static const struct hda_channel_mode alc662_3ST_6ch_modes[2] = {
146         { 2, alc662_3ST_ch2_init },
147         { 6, alc662_3ST_ch6_init },
148 };
149
150 /*
151  * 2ch mode
152  */
153 static const struct hda_verb alc662_sixstack_ch6_init[] = {
154         { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 },
155         { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 },
156         { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
157         { } /* end */
158 };
159
160 /*
161  * 6ch mode
162  */
163 static const struct hda_verb alc662_sixstack_ch8_init[] = {
164         { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
165         { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
166         { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
167         { } /* end */
168 };
169
170 static const struct hda_channel_mode alc662_5stack_modes[2] = {
171         { 2, alc662_sixstack_ch6_init },
172         { 6, alc662_sixstack_ch8_init },
173 };
174
175 /* Pin assignment: Front=0x14, Rear=0x15, CLFE=0x16, Side=0x17
176  *                 Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b
177  */
178
179 static const struct snd_kcontrol_new alc662_base_mixer[] = {
180         /* output mixer control */
181         HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT),
182         HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT),
183         HDA_CODEC_VOLUME("Surround Playback Volume", 0x3, 0x0, HDA_OUTPUT),
184         HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT),
185         HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT),
186         HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT),
187         HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT),
188         HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT),
189         HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
190
191         /*Input mixer control */
192         HDA_CODEC_VOLUME("CD Playback Volume", 0xb, 0x4, HDA_INPUT),
193         HDA_CODEC_MUTE("CD Playback Switch", 0xb, 0x4, HDA_INPUT),
194         HDA_CODEC_VOLUME("Line Playback Volume", 0xb, 0x02, HDA_INPUT),
195         HDA_CODEC_MUTE("Line Playback Switch", 0xb, 0x02, HDA_INPUT),
196         HDA_CODEC_VOLUME("Mic Playback Volume", 0xb, 0x0, HDA_INPUT),
197         HDA_CODEC_MUTE("Mic Playback Switch", 0xb, 0x0, HDA_INPUT),
198         HDA_CODEC_VOLUME("Front Mic Playback Volume", 0xb, 0x01, HDA_INPUT),
199         HDA_CODEC_MUTE("Front Mic Playback Switch", 0xb, 0x01, HDA_INPUT),
200         { } /* end */
201 };
202
203 static const struct snd_kcontrol_new alc662_3ST_2ch_mixer[] = {
204         HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT),
205         HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT),
206         HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
207         HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
208         HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
209         HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
210         HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
211         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
212         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
213         HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
214         HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
215         { } /* end */
216 };
217
218 static const struct snd_kcontrol_new alc662_3ST_6ch_mixer[] = {
219         HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT),
220         HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT),
221         HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT),
222         HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT),
223         HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT),
224         HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT),
225         HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT),
226         HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT),
227         HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
228         HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
229         HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
230         HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
231         HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
232         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
233         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
234         HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
235         HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
236         { } /* end */
237 };
238
239 static const struct snd_kcontrol_new alc662_lenovo_101e_mixer[] = {
240         HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT),
241         HDA_BIND_MUTE("Front Playback Switch", 0x02, 2, HDA_INPUT),
242         HDA_CODEC_VOLUME("Speaker Playback Volume", 0x03, 0x0, HDA_OUTPUT),
243         HDA_BIND_MUTE("Speaker Playback Switch", 0x03, 2, HDA_INPUT),
244         HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
245         HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
246         HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
247         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
248         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
249         { } /* end */
250 };
251
252 static const struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = {
253         HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT),
254         ALC262_HIPPO_MASTER_SWITCH,
255
256         HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
257         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
258         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
259
260         HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT),
261         HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
262         HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
263         { } /* end */
264 };
265
266 static const struct snd_kcontrol_new alc662_eeepc_ep20_mixer[] = {
267         ALC262_HIPPO_MASTER_SWITCH,
268         HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT),
269         HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT),
270         HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT),
271         HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT),
272         HDA_BIND_MUTE("MuteCtrl Playback Switch", 0x0c, 2, HDA_INPUT),
273         HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
274         HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
275         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
276         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
277         { } /* end */
278 };
279
280 static const struct hda_bind_ctls alc663_asus_bind_master_vol = {
281         .ops = &snd_hda_bind_vol,
282         .values = {
283                 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT),
284                 HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT),
285                 0
286         },
287 };
288
289 static const struct hda_bind_ctls alc663_asus_one_bind_switch = {
290         .ops = &snd_hda_bind_sw,
291         .values = {
292                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
293                 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT),
294                 0
295         },
296 };
297
298 static const struct snd_kcontrol_new alc663_m51va_mixer[] = {
299         HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol),
300         HDA_BIND_SW("Master Playback Switch", &alc663_asus_one_bind_switch),
301         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
302         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
303         { } /* end */
304 };
305
306 static const struct hda_bind_ctls alc663_asus_tree_bind_switch = {
307         .ops = &snd_hda_bind_sw,
308         .values = {
309                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
310                 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT),
311                 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT),
312                 0
313         },
314 };
315
316 static const struct snd_kcontrol_new alc663_two_hp_m1_mixer[] = {
317         HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol),
318         HDA_BIND_SW("Master Playback Switch", &alc663_asus_tree_bind_switch),
319         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
320         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
321         HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
322         HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
323
324         { } /* end */
325 };
326
327 static const struct hda_bind_ctls alc663_asus_four_bind_switch = {
328         .ops = &snd_hda_bind_sw,
329         .values = {
330                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
331                 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT),
332                 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT),
333                 0
334         },
335 };
336
337 static const struct snd_kcontrol_new alc663_two_hp_m2_mixer[] = {
338         HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol),
339         HDA_BIND_SW("Master Playback Switch", &alc663_asus_four_bind_switch),
340         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
341         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
342         HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
343         HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
344         { } /* end */
345 };
346
347 static const struct snd_kcontrol_new alc662_1bjd_mixer[] = {
348         HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT),
349         HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
350         HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
351         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
352         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
353         HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
354         HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
355         { } /* end */
356 };
357
358 static const struct hda_bind_ctls alc663_asus_two_bind_master_vol = {
359         .ops = &snd_hda_bind_vol,
360         .values = {
361                 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT),
362                 HDA_COMPOSE_AMP_VAL(0x04, 3, 0, HDA_OUTPUT),
363                 0
364         },
365 };
366
367 static const struct hda_bind_ctls alc663_asus_two_bind_switch = {
368         .ops = &snd_hda_bind_sw,
369         .values = {
370                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
371                 HDA_COMPOSE_AMP_VAL(0x16, 3, 0, HDA_OUTPUT),
372                 0
373         },
374 };
375
376 static const struct snd_kcontrol_new alc663_asus_21jd_clfe_mixer[] = {
377         HDA_BIND_VOL("Master Playback Volume",
378                                 &alc663_asus_two_bind_master_vol),
379         HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch),
380         HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT),
381         HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT),
382         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
383         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
384         { } /* end */
385 };
386
387 static const struct snd_kcontrol_new alc663_asus_15jd_clfe_mixer[] = {
388         HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol),
389         HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch),
390         HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT),
391         HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
392         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
393         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
394         { } /* end */
395 };
396
397 static const struct snd_kcontrol_new alc663_g71v_mixer[] = {
398         HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT),
399         HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
400         HDA_CODEC_VOLUME("Front Playback Volume", 0x03, 0x0, HDA_OUTPUT),
401         HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT),
402         HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT),
403
404         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
405         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
406         HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
407         HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
408         { } /* end */
409 };
410
411 static const struct snd_kcontrol_new alc663_g50v_mixer[] = {
412         HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT),
413         HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
414         HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT),
415
416         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
417         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
418         HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
419         HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
420         HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
421         HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
422         { } /* end */
423 };
424
425 static const struct hda_bind_ctls alc663_asus_mode7_8_all_bind_switch = {
426         .ops = &snd_hda_bind_sw,
427         .values = {
428                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
429                 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT),
430                 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT),
431                 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT),
432                 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT),
433                 0
434         },
435 };
436
437 static const struct hda_bind_ctls alc663_asus_mode7_8_sp_bind_switch = {
438         .ops = &snd_hda_bind_sw,
439         .values = {
440                 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
441                 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT),
442                 0
443         },
444 };
445
446 static const struct snd_kcontrol_new alc663_mode7_mixer[] = {
447         HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch),
448         HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol),
449         HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch),
450         HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
451         HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT),
452         HDA_CODEC_VOLUME("IntMic Playback Volume", 0x0b, 0x0, HDA_INPUT),
453         HDA_CODEC_MUTE("IntMic Playback Switch", 0x0b, 0x0, HDA_INPUT),
454         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
455         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
456         { } /* end */
457 };
458
459 static const struct snd_kcontrol_new alc663_mode8_mixer[] = {
460         HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch),
461         HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol),
462         HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch),
463         HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x15, 0x0, HDA_OUTPUT),
464         HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT),
465         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
466         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
467         { } /* end */
468 };
469
470
471 static const struct snd_kcontrol_new alc662_chmode_mixer[] = {
472         {
473                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
474                 .name = "Channel Mode",
475                 .info = alc_ch_mode_info,
476                 .get = alc_ch_mode_get,
477                 .put = alc_ch_mode_put,
478         },
479         { } /* end */
480 };
481
482 static const struct hda_verb alc662_init_verbs[] = {
483         /* ADC: mute amp left and right */
484         {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
485         {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
486
487         {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
488         {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
489         {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
490         {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
491         {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
492         {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
493
494         /* Front Pin: output 0 (0x0c) */
495         {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
496         {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
497
498         /* Rear Pin: output 1 (0x0d) */
499         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
500         {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
501
502         /* CLFE Pin: output 2 (0x0e) */
503         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
504         {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
505
506         /* Mic (rear) pin: input vref at 80% */
507         {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
508         {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
509         /* Front Mic pin: input vref at 80% */
510         {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
511         {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
512         /* Line In pin: input */
513         {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
514         {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
515         /* Line-2 In: Headphone output (output 0 - 0x0c) */
516         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
517         {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
518         {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00},
519         /* CD pin widget for input */
520         {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
521
522         /* FIXME: use matrix-type input source selection */
523         /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
524         /* Input mixer */
525         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
526         {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
527
528         { }
529 };
530
531 static const struct hda_verb alc662_eapd_init_verbs[] = {
532         /* always trun on EAPD */
533         {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
534         {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
535         { }
536 };
537
538 static const struct hda_verb alc662_sue_init_verbs[] = {
539         {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC_FRONT_EVENT},
540         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC_HP_EVENT},
541         {}
542 };
543
544 static const struct hda_verb alc662_eeepc_sue_init_verbs[] = {
545         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
546         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
547         {}
548 };
549
550 /* Set Unsolicited Event*/
551 static const struct hda_verb alc662_eeepc_ep20_sue_init_verbs[] = {
552         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
553         {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
554         {}
555 };
556
557 static const struct hda_verb alc663_m51va_init_verbs[] = {
558         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
559         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
560         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
561         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
562         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
563         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
564         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
565         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
566         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
567         {}
568 };
569
570 static const struct hda_verb alc663_21jd_amic_init_verbs[] = {
571         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
572         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
573         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
574         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
575         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
576         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
577         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
578         {}
579 };
580
581 static const struct hda_verb alc662_1bjd_amic_init_verbs[] = {
582         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
583         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
584         {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
585         {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00},  /* Headphone */
586         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
587         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
588         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
589         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
590         {}
591 };
592
593 static const struct hda_verb alc663_15jd_amic_init_verbs[] = {
594         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
595         {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
596         {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
597         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
598         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
599         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
600         {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
601         {}
602 };
603
604 static const struct hda_verb alc663_two_hp_amic_m1_init_verbs[] = {
605         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
606         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
607         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
608         {0x21, AC_VERB_SET_CONNECT_SEL, 0x0},   /* Headphone */
609         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
610         {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
611         {0x15, AC_VERB_SET_CONNECT_SEL, 0x0},   /* Headphone */
612         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
613         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
614         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
615         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
616         {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
617         {}
618 };
619
620 static const struct hda_verb alc663_two_hp_amic_m2_init_verbs[] = {
621         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
622         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
623         {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
624         {0x1b, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
625         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
626         {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
627         {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
628         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
629         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
630         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
631         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
632         {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
633         {}
634 };
635
636 static const struct hda_verb alc663_g71v_init_verbs[] = {
637         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
638         /* {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, */
639         /* {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, */ /* Headphone */
640
641         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
642         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
643         {0x21, AC_VERB_SET_CONNECT_SEL, 0x00},  /* Headphone */
644
645         {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC_FRONT_EVENT},
646         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC_MIC_EVENT},
647         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC_HP_EVENT},
648         {}
649 };
650
651 static const struct hda_verb alc663_g50v_init_verbs[] = {
652         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
653         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
654         {0x21, AC_VERB_SET_CONNECT_SEL, 0x00},  /* Headphone */
655
656         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
657         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
658         {}
659 };
660
661 static const struct hda_verb alc662_ecs_init_verbs[] = {
662         {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x701f},
663         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
664         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
665         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
666         {}
667 };
668
669 static const struct hda_verb alc272_dell_zm1_init_verbs[] = {
670         {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
671         {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
672         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
673         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
674         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
675         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
676         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
677         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
678         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
679         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
680         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
681         {}
682 };
683
684 static const struct hda_verb alc272_dell_init_verbs[] = {
685         {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
686         {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
687         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
688         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
689         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
690         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
691         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
692         {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
693         {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
694         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
695         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
696         {}
697 };
698
699 static const struct hda_verb alc663_mode7_init_verbs[] = {
700         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
701         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
702         {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
703         {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
704         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
705         {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
706         {0x1b, AC_VERB_SET_CONNECT_SEL, 0x01},
707         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
708         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
709         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
710         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
711         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
712         {0x19, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
713         {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
714         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
715         {}
716 };
717
718 static const struct hda_verb alc663_mode8_init_verbs[] = {
719         {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
720         {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
721         {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
722         {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},
723         {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
724         {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
725         {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
726         {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
727         {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
728         {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
729         {0x21, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Headphone */
730         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
731         {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
732         {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
733         {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
734         {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
735         {}
736 };
737
738 static const struct snd_kcontrol_new alc662_auto_capture_mixer[] = {
739         HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT),
740         HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT),
741         { } /* end */
742 };
743
744 static const struct snd_kcontrol_new alc272_auto_capture_mixer[] = {
745         HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
746         HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
747         { } /* end */
748 };
749
750 static void alc662_lenovo_101e_setup(struct hda_codec *codec)
751 {
752         struct alc_spec *spec = codec->spec;
753
754         spec->autocfg.hp_pins[0] = 0x1b;
755         spec->autocfg.line_out_pins[0] = 0x14;
756         spec->autocfg.speaker_pins[0] = 0x15;
757         spec->automute = 1;
758         spec->detect_line = 1;
759         spec->automute_lines = 1;
760         spec->automute_mode = ALC_AUTOMUTE_AMP;
761 }
762
763 static void alc662_eeepc_setup(struct hda_codec *codec)
764 {
765         struct alc_spec *spec = codec->spec;
766
767         alc262_hippo1_setup(codec);
768         spec->ext_mic_pin = 0x18;
769         spec->int_mic_pin = 0x19;
770         spec->auto_mic = 1;
771 }
772
773 static void alc662_eeepc_ep20_setup(struct hda_codec *codec)
774 {
775         struct alc_spec *spec = codec->spec;
776
777         spec->autocfg.hp_pins[0] = 0x14;
778         spec->autocfg.speaker_pins[0] = 0x1b;
779         spec->automute = 1;
780         spec->automute_mode = ALC_AUTOMUTE_AMP;
781 }
782
783 static void alc663_m51va_setup(struct hda_codec *codec)
784 {
785         struct alc_spec *spec = codec->spec;
786         spec->autocfg.hp_pins[0] = 0x21;
787         spec->autocfg.speaker_pins[0] = 0x14;
788         spec->automute_mixer_nid[0] = 0x0c;
789         spec->automute = 1;
790         spec->automute_mode = ALC_AUTOMUTE_MIXER;
791         spec->ext_mic_pin = 0x18;
792         spec->int_mic_pin = 0x12;
793         spec->auto_mic = 1;
794 }
795
796 /* ***************** Mode1 ******************************/
797 static void alc663_mode1_setup(struct hda_codec *codec)
798 {
799         struct alc_spec *spec = codec->spec;
800         spec->autocfg.hp_pins[0] = 0x21;
801         spec->autocfg.speaker_pins[0] = 0x14;
802         spec->automute_mixer_nid[0] = 0x0c;
803         spec->automute = 1;
804         spec->automute_mode = ALC_AUTOMUTE_MIXER;
805         spec->ext_mic_pin = 0x18;
806         spec->int_mic_pin = 0x19;
807         spec->auto_mic = 1;
808 }
809
810 /* ***************** Mode2 ******************************/
811 static void alc662_mode2_setup(struct hda_codec *codec)
812 {
813         struct alc_spec *spec = codec->spec;
814         spec->autocfg.hp_pins[0] = 0x1b;
815         spec->autocfg.speaker_pins[0] = 0x14;
816         spec->automute = 1;
817         spec->automute_mode = ALC_AUTOMUTE_PIN;
818         spec->ext_mic_pin = 0x18;
819         spec->int_mic_pin = 0x19;
820         spec->auto_mic = 1;
821 }
822
823 /* ***************** Mode3 ******************************/
824 static void alc663_mode3_setup(struct hda_codec *codec)
825 {
826         struct alc_spec *spec = codec->spec;
827         spec->autocfg.hp_pins[0] = 0x21;
828         spec->autocfg.hp_pins[0] = 0x15;
829         spec->autocfg.speaker_pins[0] = 0x14;
830         spec->automute = 1;
831         spec->automute_mode = ALC_AUTOMUTE_PIN;
832         spec->ext_mic_pin = 0x18;
833         spec->int_mic_pin = 0x19;
834         spec->auto_mic = 1;
835 }
836
837 /* ***************** Mode4 ******************************/
838 static void alc663_mode4_setup(struct hda_codec *codec)
839 {
840         struct alc_spec *spec = codec->spec;
841         spec->autocfg.hp_pins[0] = 0x21;
842         spec->autocfg.speaker_pins[0] = 0x14;
843         spec->autocfg.speaker_pins[1] = 0x16;
844         spec->automute_mixer_nid[0] = 0x0c;
845         spec->automute_mixer_nid[1] = 0x0e;
846         spec->automute = 1;
847         spec->automute_mode = ALC_AUTOMUTE_MIXER;
848         spec->ext_mic_pin = 0x18;
849         spec->int_mic_pin = 0x19;
850         spec->auto_mic = 1;
851 }
852
853 /* ***************** Mode5 ******************************/
854 static void alc663_mode5_setup(struct hda_codec *codec)
855 {
856         struct alc_spec *spec = codec->spec;
857         spec->autocfg.hp_pins[0] = 0x15;
858         spec->autocfg.speaker_pins[0] = 0x14;
859         spec->autocfg.speaker_pins[1] = 0x16;
860         spec->automute_mixer_nid[0] = 0x0c;
861         spec->automute_mixer_nid[1] = 0x0e;
862         spec->automute = 1;
863         spec->automute_mode = ALC_AUTOMUTE_MIXER;
864         spec->ext_mic_pin = 0x18;
865         spec->int_mic_pin = 0x19;
866         spec->auto_mic = 1;
867 }
868
869 /* ***************** Mode6 ******************************/
870 static void alc663_mode6_setup(struct hda_codec *codec)
871 {
872         struct alc_spec *spec = codec->spec;
873         spec->autocfg.hp_pins[0] = 0x1b;
874         spec->autocfg.hp_pins[0] = 0x15;
875         spec->autocfg.speaker_pins[0] = 0x14;
876         spec->automute_mixer_nid[0] = 0x0c;
877         spec->automute = 1;
878         spec->automute_mode = ALC_AUTOMUTE_MIXER;
879         spec->ext_mic_pin = 0x18;
880         spec->int_mic_pin = 0x19;
881         spec->auto_mic = 1;
882 }
883
884 /* ***************** Mode7 ******************************/
885 static void alc663_mode7_setup(struct hda_codec *codec)
886 {
887         struct alc_spec *spec = codec->spec;
888         spec->autocfg.hp_pins[0] = 0x1b;
889         spec->autocfg.hp_pins[0] = 0x21;
890         spec->autocfg.speaker_pins[0] = 0x14;
891         spec->autocfg.speaker_pins[0] = 0x17;
892         spec->automute = 1;
893         spec->automute_mode = ALC_AUTOMUTE_PIN;
894         spec->ext_mic_pin = 0x18;
895         spec->int_mic_pin = 0x19;
896         spec->auto_mic = 1;
897 }
898
899 /* ***************** Mode8 ******************************/
900 static void alc663_mode8_setup(struct hda_codec *codec)
901 {
902         struct alc_spec *spec = codec->spec;
903         spec->autocfg.hp_pins[0] = 0x21;
904         spec->autocfg.hp_pins[1] = 0x15;
905         spec->autocfg.speaker_pins[0] = 0x14;
906         spec->autocfg.speaker_pins[0] = 0x17;
907         spec->automute = 1;
908         spec->automute_mode = ALC_AUTOMUTE_PIN;
909         spec->ext_mic_pin = 0x18;
910         spec->int_mic_pin = 0x12;
911         spec->auto_mic = 1;
912 }
913
914 static void alc663_g71v_setup(struct hda_codec *codec)
915 {
916         struct alc_spec *spec = codec->spec;
917         spec->autocfg.hp_pins[0] = 0x21;
918         spec->autocfg.line_out_pins[0] = 0x15;
919         spec->autocfg.speaker_pins[0] = 0x14;
920         spec->automute = 1;
921         spec->automute_mode = ALC_AUTOMUTE_AMP;
922         spec->detect_line = 1;
923         spec->automute_lines = 1;
924         spec->ext_mic_pin = 0x18;
925         spec->int_mic_pin = 0x12;
926         spec->auto_mic = 1;
927 }
928
929 #define alc663_g50v_setup       alc663_m51va_setup
930
931 static const struct snd_kcontrol_new alc662_ecs_mixer[] = {
932         HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT),
933         ALC262_HIPPO_MASTER_SWITCH,
934
935         HDA_CODEC_VOLUME("Mic/LineIn Boost Volume", 0x18, 0, HDA_INPUT),
936         HDA_CODEC_VOLUME("Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT),
937         HDA_CODEC_MUTE("Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT),
938
939         HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT),
940         HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
941         HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
942         { } /* end */
943 };
944
945 static const struct snd_kcontrol_new alc272_nc10_mixer[] = {
946         /* Master Playback automatically created from Speaker and Headphone */
947         HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT),
948         HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
949         HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT),
950         HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT),
951
952         HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
953         HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
954         HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
955
956         HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
957         HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
958         HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT),
959         { } /* end */
960 };
961
962
963 /*
964  * configuration and preset
965  */
966 static const char * const alc662_models[ALC662_MODEL_LAST] = {
967         [ALC662_3ST_2ch_DIG]    = "3stack-dig",
968         [ALC662_3ST_6ch_DIG]    = "3stack-6ch-dig",
969         [ALC662_3ST_6ch]        = "3stack-6ch",
970         [ALC662_5ST_DIG]        = "5stack-dig",
971         [ALC662_LENOVO_101E]    = "lenovo-101e",
972         [ALC662_ASUS_EEEPC_P701] = "eeepc-p701",
973         [ALC662_ASUS_EEEPC_EP20] = "eeepc-ep20",
974         [ALC662_ECS] = "ecs",
975         [ALC663_ASUS_M51VA] = "m51va",
976         [ALC663_ASUS_G71V] = "g71v",
977         [ALC663_ASUS_H13] = "h13",
978         [ALC663_ASUS_G50V] = "g50v",
979         [ALC663_ASUS_MODE1] = "asus-mode1",
980         [ALC662_ASUS_MODE2] = "asus-mode2",
981         [ALC663_ASUS_MODE3] = "asus-mode3",
982         [ALC663_ASUS_MODE4] = "asus-mode4",
983         [ALC663_ASUS_MODE5] = "asus-mode5",
984         [ALC663_ASUS_MODE6] = "asus-mode6",
985         [ALC663_ASUS_MODE7] = "asus-mode7",
986         [ALC663_ASUS_MODE8] = "asus-mode8",
987         [ALC272_DELL]           = "dell",
988         [ALC272_DELL_ZM1]       = "dell-zm1",
989         [ALC272_SAMSUNG_NC10]   = "samsung-nc10",
990         [ALC662_AUTO]           = "auto",
991 };
992
993 static const struct snd_pci_quirk alc662_cfg_tbl[] = {
994         SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_ECS),
995         SND_PCI_QUIRK(0x1028, 0x02d6, "DELL", ALC272_DELL),
996         SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1),
997         SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1),
998         SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3),
999         SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC663_ASUS_MODE1),
1000         SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3),
1001         SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1),
1002         SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2),
1003         SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1),
1004         SND_PCI_QUIRK(0x1043, 0x1303, "ASUS G60J", ALC663_ASUS_MODE1),
1005         SND_PCI_QUIRK(0x1043, 0x1333, "ASUS G60Jx", ALC663_ASUS_MODE1),
1006         SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2),
1007         SND_PCI_QUIRK(0x1043, 0x13e3, "ASUS N71JA", ALC663_ASUS_MODE7),
1008         SND_PCI_QUIRK(0x1043, 0x1463, "ASUS N71", ALC663_ASUS_MODE7),
1009         SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G72", ALC663_ASUS_MODE8),
1010         SND_PCI_QUIRK(0x1043, 0x1563, "ASUS N90", ALC663_ASUS_MODE3),
1011         SND_PCI_QUIRK(0x1043, 0x15d3, "ASUS N50SF F50SF", ALC663_ASUS_MODE1),
1012         SND_PCI_QUIRK(0x1043, 0x16c3, "ASUS NB", ALC662_ASUS_MODE2),
1013         SND_PCI_QUIRK(0x1043, 0x16f3, "ASUS K40C K50C", ALC662_ASUS_MODE2),
1014         SND_PCI_QUIRK(0x1043, 0x1733, "ASUS N81De", ALC663_ASUS_MODE1),
1015         SND_PCI_QUIRK(0x1043, 0x1753, "ASUS NB", ALC662_ASUS_MODE2),
1016         SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC663_ASUS_MODE6),
1017         SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC663_ASUS_MODE6),
1018         SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_ASUS_MODE2),
1019         SND_PCI_QUIRK(0x1043, 0x1793, "ASUS F50GX", ALC663_ASUS_MODE1),
1020         SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC663_ASUS_MODE3),
1021         SND_PCI_QUIRK(0x1043, 0x17c3, "ASUS UX20", ALC663_ASUS_M51VA),
1022         SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_ASUS_MODE2),
1023         SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_ASUS_MODE2),
1024         SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC663_ASUS_MODE5),
1025         SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC663_ASUS_MODE6),
1026         SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_ASUS_MODE2),
1027         SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC663_ASUS_MODE1),
1028         SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_ASUS_MODE2),
1029         SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_ASUS_MODE2),
1030         SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA),
1031         /*SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M50Vr", ALC663_ASUS_MODE1),*/
1032         SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3),
1033         SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3),
1034         SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1),
1035         SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC663_ASUS_MODE1),
1036         SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1),
1037         SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1),
1038         SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1),
1039         SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2),
1040         SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_ASUS_MODE2),
1041         SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC663_ASUS_MODE1),
1042         SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC663_ASUS_MODE1),
1043         SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC663_ASUS_MODE3),
1044         SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC663_ASUS_MODE1),
1045         SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1),
1046         SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V),
1047         /*SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS NB", ALC663_ASUS_MODE1),*/
1048         SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC663_ASUS_MODE1),
1049         SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2),
1050         SND_PCI_QUIRK(0x1043, 0x19d3, "ASUS NB", ALC663_ASUS_M51VA),
1051         SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1),
1052         SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC663_ASUS_MODE4),
1053         SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG),
1054         SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701),
1055         SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20),
1056         SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS),
1057         SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K",
1058                       ALC662_3ST_6ch_DIG),
1059         SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB20x", ALC662_AUTO),
1060         SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10),
1061         SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
1062                       ALC662_3ST_6ch_DIG),
1063         SND_PCI_QUIRK(0x152d, 0x2304, "Quanta WH1", ALC663_ASUS_H13),
1064         SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG),
1065         SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA),
1066         SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo", ALC662_LENOVO_101E),
1067         SND_PCI_QUIRK(0x1849, 0x3662, "ASROCK K10N78FullHD-hSLI R3.0",
1068                                         ALC662_3ST_6ch_DIG),
1069         SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x",
1070                            ALC663_ASUS_H13),
1071         SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E),
1072         {}
1073 };
1074
1075 static const struct alc_config_preset alc662_presets[] = {
1076         [ALC662_3ST_2ch_DIG] = {
1077                 .mixers = { alc662_3ST_2ch_mixer },
1078                 .init_verbs = { alc662_init_verbs, alc662_eapd_init_verbs },
1079                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1080                 .dac_nids = alc662_dac_nids,
1081                 .dig_out_nid = ALC662_DIGOUT_NID,
1082                 .dig_in_nid = ALC662_DIGIN_NID,
1083                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1084                 .channel_mode = alc662_3ST_2ch_modes,
1085                 .input_mux = &alc662_capture_source,
1086         },
1087         [ALC662_3ST_6ch_DIG] = {
1088                 .mixers = { alc662_3ST_6ch_mixer, alc662_chmode_mixer },
1089                 .init_verbs = { alc662_init_verbs, alc662_eapd_init_verbs },
1090                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1091                 .dac_nids = alc662_dac_nids,
1092                 .dig_out_nid = ALC662_DIGOUT_NID,
1093                 .dig_in_nid = ALC662_DIGIN_NID,
1094                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
1095                 .channel_mode = alc662_3ST_6ch_modes,
1096                 .need_dac_fix = 1,
1097                 .input_mux = &alc662_capture_source,
1098         },
1099         [ALC662_3ST_6ch] = {
1100                 .mixers = { alc662_3ST_6ch_mixer, alc662_chmode_mixer },
1101                 .init_verbs = { alc662_init_verbs, alc662_eapd_init_verbs },
1102                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1103                 .dac_nids = alc662_dac_nids,
1104                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
1105                 .channel_mode = alc662_3ST_6ch_modes,
1106                 .need_dac_fix = 1,
1107                 .input_mux = &alc662_capture_source,
1108         },
1109         [ALC662_5ST_DIG] = {
1110                 .mixers = { alc662_base_mixer, alc662_chmode_mixer },
1111                 .init_verbs = { alc662_init_verbs, alc662_eapd_init_verbs },
1112                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1113                 .dac_nids = alc662_dac_nids,
1114                 .dig_out_nid = ALC662_DIGOUT_NID,
1115                 .dig_in_nid = ALC662_DIGIN_NID,
1116                 .num_channel_mode = ARRAY_SIZE(alc662_5stack_modes),
1117                 .channel_mode = alc662_5stack_modes,
1118                 .input_mux = &alc662_capture_source,
1119         },
1120         [ALC662_LENOVO_101E] = {
1121                 .mixers = { alc662_lenovo_101e_mixer },
1122                 .init_verbs = { alc662_init_verbs,
1123                                 alc662_eapd_init_verbs,
1124                                 alc662_sue_init_verbs },
1125                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1126                 .dac_nids = alc662_dac_nids,
1127                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1128                 .channel_mode = alc662_3ST_2ch_modes,
1129                 .input_mux = &alc662_lenovo_101e_capture_source,
1130                 .unsol_event = alc_sku_unsol_event,
1131                 .setup = alc662_lenovo_101e_setup,
1132                 .init_hook = alc_inithook,
1133         },
1134         [ALC662_ASUS_EEEPC_P701] = {
1135                 .mixers = { alc662_eeepc_p701_mixer },
1136                 .init_verbs = { alc662_init_verbs,
1137                                 alc662_eapd_init_verbs,
1138                                 alc662_eeepc_sue_init_verbs },
1139                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1140                 .dac_nids = alc662_dac_nids,
1141                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1142                 .channel_mode = alc662_3ST_2ch_modes,
1143                 .unsol_event = alc_sku_unsol_event,
1144                 .setup = alc662_eeepc_setup,
1145                 .init_hook = alc_inithook,
1146         },
1147         [ALC662_ASUS_EEEPC_EP20] = {
1148                 .mixers = { alc662_eeepc_ep20_mixer,
1149                             alc662_chmode_mixer },
1150                 .init_verbs = { alc662_init_verbs,
1151                                 alc662_eapd_init_verbs,
1152                                 alc662_eeepc_ep20_sue_init_verbs },
1153                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1154                 .dac_nids = alc662_dac_nids,
1155                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
1156                 .channel_mode = alc662_3ST_6ch_modes,
1157                 .input_mux = &alc662_lenovo_101e_capture_source,
1158                 .unsol_event = alc_sku_unsol_event,
1159                 .setup = alc662_eeepc_ep20_setup,
1160                 .init_hook = alc_inithook,
1161         },
1162         [ALC662_ECS] = {
1163                 .mixers = { alc662_ecs_mixer },
1164                 .init_verbs = { alc662_init_verbs,
1165                                 alc662_eapd_init_verbs,
1166                                 alc662_ecs_init_verbs },
1167                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1168                 .dac_nids = alc662_dac_nids,
1169                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1170                 .channel_mode = alc662_3ST_2ch_modes,
1171                 .unsol_event = alc_sku_unsol_event,
1172                 .setup = alc662_eeepc_setup,
1173                 .init_hook = alc_inithook,
1174         },
1175         [ALC663_ASUS_M51VA] = {
1176                 .mixers = { alc663_m51va_mixer },
1177                 .init_verbs = { alc662_init_verbs,
1178                                 alc662_eapd_init_verbs,
1179                                 alc663_m51va_init_verbs },
1180                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1181                 .dac_nids = alc662_dac_nids,
1182                 .dig_out_nid = ALC662_DIGOUT_NID,
1183                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1184                 .channel_mode = alc662_3ST_2ch_modes,
1185                 .unsol_event = alc_sku_unsol_event,
1186                 .setup = alc663_m51va_setup,
1187                 .init_hook = alc_inithook,
1188         },
1189         [ALC663_ASUS_G71V] = {
1190                 .mixers = { alc663_g71v_mixer },
1191                 .init_verbs = { alc662_init_verbs,
1192                                 alc662_eapd_init_verbs,
1193                                 alc663_g71v_init_verbs },
1194                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1195                 .dac_nids = alc662_dac_nids,
1196                 .dig_out_nid = ALC662_DIGOUT_NID,
1197                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1198                 .channel_mode = alc662_3ST_2ch_modes,
1199                 .unsol_event = alc_sku_unsol_event,
1200                 .setup = alc663_g71v_setup,
1201                 .init_hook = alc_inithook,
1202         },
1203         [ALC663_ASUS_H13] = {
1204                 .mixers = { alc663_m51va_mixer },
1205                 .init_verbs = { alc662_init_verbs,
1206                                 alc662_eapd_init_verbs,
1207                                 alc663_m51va_init_verbs },
1208                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1209                 .dac_nids = alc662_dac_nids,
1210                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1211                 .channel_mode = alc662_3ST_2ch_modes,
1212                 .setup = alc663_m51va_setup,
1213                 .unsol_event = alc_sku_unsol_event,
1214                 .init_hook = alc_inithook,
1215         },
1216         [ALC663_ASUS_G50V] = {
1217                 .mixers = { alc663_g50v_mixer },
1218                 .init_verbs = { alc662_init_verbs,
1219                                 alc662_eapd_init_verbs,
1220                                 alc663_g50v_init_verbs },
1221                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1222                 .dac_nids = alc662_dac_nids,
1223                 .dig_out_nid = ALC662_DIGOUT_NID,
1224                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
1225                 .channel_mode = alc662_3ST_6ch_modes,
1226                 .input_mux = &alc663_capture_source,
1227                 .unsol_event = alc_sku_unsol_event,
1228                 .setup = alc663_g50v_setup,
1229                 .init_hook = alc_inithook,
1230         },
1231         [ALC663_ASUS_MODE1] = {
1232                 .mixers = { alc663_m51va_mixer },
1233                 .cap_mixer = alc662_auto_capture_mixer,
1234                 .init_verbs = { alc662_init_verbs,
1235                                 alc662_eapd_init_verbs,
1236                                 alc663_21jd_amic_init_verbs },
1237                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1238                 .hp_nid = 0x03,
1239                 .dac_nids = alc662_dac_nids,
1240                 .dig_out_nid = ALC662_DIGOUT_NID,
1241                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1242                 .channel_mode = alc662_3ST_2ch_modes,
1243                 .unsol_event = alc_sku_unsol_event,
1244                 .setup = alc663_mode1_setup,
1245                 .init_hook = alc_inithook,
1246         },
1247         [ALC662_ASUS_MODE2] = {
1248                 .mixers = { alc662_1bjd_mixer },
1249                 .cap_mixer = alc662_auto_capture_mixer,
1250                 .init_verbs = { alc662_init_verbs,
1251                                 alc662_eapd_init_verbs,
1252                                 alc662_1bjd_amic_init_verbs },
1253                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1254                 .dac_nids = alc662_dac_nids,
1255                 .dig_out_nid = ALC662_DIGOUT_NID,
1256                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1257                 .channel_mode = alc662_3ST_2ch_modes,
1258                 .unsol_event = alc_sku_unsol_event,
1259                 .setup = alc662_mode2_setup,
1260                 .init_hook = alc_inithook,
1261         },
1262         [ALC663_ASUS_MODE3] = {
1263                 .mixers = { alc663_two_hp_m1_mixer },
1264                 .cap_mixer = alc662_auto_capture_mixer,
1265                 .init_verbs = { alc662_init_verbs,
1266                                 alc662_eapd_init_verbs,
1267                                 alc663_two_hp_amic_m1_init_verbs },
1268                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1269                 .hp_nid = 0x03,
1270                 .dac_nids = alc662_dac_nids,
1271                 .dig_out_nid = ALC662_DIGOUT_NID,
1272                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1273                 .channel_mode = alc662_3ST_2ch_modes,
1274                 .unsol_event = alc_sku_unsol_event,
1275                 .setup = alc663_mode3_setup,
1276                 .init_hook = alc_inithook,
1277         },
1278         [ALC663_ASUS_MODE4] = {
1279                 .mixers = { alc663_asus_21jd_clfe_mixer },
1280                 .cap_mixer = alc662_auto_capture_mixer,
1281                 .init_verbs = { alc662_init_verbs,
1282                                 alc662_eapd_init_verbs,
1283                                 alc663_21jd_amic_init_verbs},
1284                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1285                 .hp_nid = 0x03,
1286                 .dac_nids = alc662_dac_nids,
1287                 .dig_out_nid = ALC662_DIGOUT_NID,
1288                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1289                 .channel_mode = alc662_3ST_2ch_modes,
1290                 .unsol_event = alc_sku_unsol_event,
1291                 .setup = alc663_mode4_setup,
1292                 .init_hook = alc_inithook,
1293         },
1294         [ALC663_ASUS_MODE5] = {
1295                 .mixers = { alc663_asus_15jd_clfe_mixer },
1296                 .cap_mixer = alc662_auto_capture_mixer,
1297                 .init_verbs = { alc662_init_verbs,
1298                                 alc662_eapd_init_verbs,
1299                                 alc663_15jd_amic_init_verbs },
1300                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1301                 .hp_nid = 0x03,
1302                 .dac_nids = alc662_dac_nids,
1303                 .dig_out_nid = ALC662_DIGOUT_NID,
1304                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1305                 .channel_mode = alc662_3ST_2ch_modes,
1306                 .unsol_event = alc_sku_unsol_event,
1307                 .setup = alc663_mode5_setup,
1308                 .init_hook = alc_inithook,
1309         },
1310         [ALC663_ASUS_MODE6] = {
1311                 .mixers = { alc663_two_hp_m2_mixer },
1312                 .cap_mixer = alc662_auto_capture_mixer,
1313                 .init_verbs = { alc662_init_verbs,
1314                                 alc662_eapd_init_verbs,
1315                                 alc663_two_hp_amic_m2_init_verbs },
1316                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1317                 .hp_nid = 0x03,
1318                 .dac_nids = alc662_dac_nids,
1319                 .dig_out_nid = ALC662_DIGOUT_NID,
1320                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1321                 .channel_mode = alc662_3ST_2ch_modes,
1322                 .unsol_event = alc_sku_unsol_event,
1323                 .setup = alc663_mode6_setup,
1324                 .init_hook = alc_inithook,
1325         },
1326         [ALC663_ASUS_MODE7] = {
1327                 .mixers = { alc663_mode7_mixer },
1328                 .cap_mixer = alc662_auto_capture_mixer,
1329                 .init_verbs = { alc662_init_verbs,
1330                                 alc662_eapd_init_verbs,
1331                                 alc663_mode7_init_verbs },
1332                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1333                 .hp_nid = 0x03,
1334                 .dac_nids = alc662_dac_nids,
1335                 .dig_out_nid = ALC662_DIGOUT_NID,
1336                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1337                 .channel_mode = alc662_3ST_2ch_modes,
1338                 .unsol_event = alc_sku_unsol_event,
1339                 .setup = alc663_mode7_setup,
1340                 .init_hook = alc_inithook,
1341         },
1342         [ALC663_ASUS_MODE8] = {
1343                 .mixers = { alc663_mode8_mixer },
1344                 .cap_mixer = alc662_auto_capture_mixer,
1345                 .init_verbs = { alc662_init_verbs,
1346                                 alc662_eapd_init_verbs,
1347                                 alc663_mode8_init_verbs },
1348                 .num_dacs = ARRAY_SIZE(alc662_dac_nids),
1349                 .hp_nid = 0x03,
1350                 .dac_nids = alc662_dac_nids,
1351                 .dig_out_nid = ALC662_DIGOUT_NID,
1352                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1353                 .channel_mode = alc662_3ST_2ch_modes,
1354                 .unsol_event = alc_sku_unsol_event,
1355                 .setup = alc663_mode8_setup,
1356                 .init_hook = alc_inithook,
1357         },
1358         [ALC272_DELL] = {
1359                 .mixers = { alc663_m51va_mixer },
1360                 .cap_mixer = alc272_auto_capture_mixer,
1361                 .init_verbs = { alc662_init_verbs,
1362                                 alc662_eapd_init_verbs,
1363                                 alc272_dell_init_verbs },
1364                 .num_dacs = ARRAY_SIZE(alc272_dac_nids),
1365                 .dac_nids = alc272_dac_nids,
1366                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1367                 .adc_nids = alc272_adc_nids,
1368                 .num_adc_nids = ARRAY_SIZE(alc272_adc_nids),
1369                 .capsrc_nids = alc272_capsrc_nids,
1370                 .channel_mode = alc662_3ST_2ch_modes,
1371                 .unsol_event = alc_sku_unsol_event,
1372                 .setup = alc663_m51va_setup,
1373                 .init_hook = alc_inithook,
1374         },
1375         [ALC272_DELL_ZM1] = {
1376                 .mixers = { alc663_m51va_mixer },
1377                 .cap_mixer = alc662_auto_capture_mixer,
1378                 .init_verbs = { alc662_init_verbs,
1379                                 alc662_eapd_init_verbs,
1380                                 alc272_dell_zm1_init_verbs },
1381                 .num_dacs = ARRAY_SIZE(alc272_dac_nids),
1382                 .dac_nids = alc272_dac_nids,
1383                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1384                 .adc_nids = alc662_adc_nids,
1385                 .num_adc_nids = 1,
1386                 .capsrc_nids = alc662_capsrc_nids,
1387                 .channel_mode = alc662_3ST_2ch_modes,
1388                 .unsol_event = alc_sku_unsol_event,
1389                 .setup = alc663_m51va_setup,
1390                 .init_hook = alc_inithook,
1391         },
1392         [ALC272_SAMSUNG_NC10] = {
1393                 .mixers = { alc272_nc10_mixer },
1394                 .init_verbs = { alc662_init_verbs,
1395                                 alc662_eapd_init_verbs,
1396                                 alc663_21jd_amic_init_verbs },
1397                 .num_dacs = ARRAY_SIZE(alc272_dac_nids),
1398                 .dac_nids = alc272_dac_nids,
1399                 .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
1400                 .channel_mode = alc662_3ST_2ch_modes,
1401                 /*.input_mux = &alc272_nc10_capture_source,*/
1402                 .unsol_event = alc_sku_unsol_event,
1403                 .setup = alc663_mode4_setup,
1404                 .init_hook = alc_inithook,
1405         },
1406 };
1407
1408