diff options
Diffstat (limited to 'sound/pci/hda/alc662_quirks.c')
-rw-r--r-- | sound/pci/hda/alc662_quirks.c | 1408 |
1 files changed, 0 insertions, 1408 deletions
diff --git a/sound/pci/hda/alc662_quirks.c b/sound/pci/hda/alc662_quirks.c deleted file mode 100644 index e69a6ea3083a..000000000000 --- a/sound/pci/hda/alc662_quirks.c +++ /dev/null | |||
@@ -1,1408 +0,0 @@ | |||
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 | |||