diff options
Diffstat (limited to 'sound/pci/hda/alc882_quirks.c')
-rw-r--r-- | sound/pci/hda/alc882_quirks.c | 2867 |
1 files changed, 0 insertions, 2867 deletions
diff --git a/sound/pci/hda/alc882_quirks.c b/sound/pci/hda/alc882_quirks.c index e251514a26a..bdf0ed4ab3e 100644 --- a/sound/pci/hda/alc882_quirks.c +++ b/sound/pci/hda/alc882_quirks.c | |||
@@ -6,509 +6,15 @@ | |||
6 | /* ALC882 models */ | 6 | /* ALC882 models */ |
7 | enum { | 7 | enum { |
8 | ALC882_AUTO, | 8 | ALC882_AUTO, |
9 | ALC882_3ST_DIG, | ||
10 | ALC882_6ST_DIG, | ||
11 | ALC882_ARIMA, | ||
12 | ALC882_W2JC, | ||
13 | ALC882_TARGA, | ||
14 | ALC882_ASUS_A7J, | ||
15 | ALC882_ASUS_A7M, | ||
16 | ALC885_MACPRO, | ||
17 | ALC885_MBA21, | 9 | ALC885_MBA21, |
18 | ALC885_MBP3, | 10 | ALC885_MBP3, |
19 | ALC885_MB5, | 11 | ALC885_MB5, |
20 | ALC885_MACMINI3, | 12 | ALC885_MACMINI3, |
21 | ALC885_IMAC24, | ||
22 | ALC885_IMAC91, | 13 | ALC885_IMAC91, |
23 | ALC883_3ST_2ch_DIG, | ||
24 | ALC883_3ST_6ch_DIG, | ||
25 | ALC883_3ST_6ch, | ||
26 | ALC883_6ST_DIG, | ||
27 | ALC883_TARGA_DIG, | ||
28 | ALC883_TARGA_2ch_DIG, | ||
29 | ALC883_TARGA_8ch_DIG, | ||
30 | ALC883_ACER, | ||
31 | ALC883_ACER_ASPIRE, | ||
32 | ALC888_ACER_ASPIRE_4930G, | ||
33 | ALC888_ACER_ASPIRE_6530G, | ||
34 | ALC888_ACER_ASPIRE_8930G, | ||
35 | ALC888_ACER_ASPIRE_7730G, | ||
36 | ALC883_MEDION, | ||
37 | ALC883_MEDION_WIM2160, | ||
38 | ALC883_LAPTOP_EAPD, | ||
39 | ALC883_LENOVO_101E_2ch, | ||
40 | ALC883_LENOVO_NB0763, | ||
41 | ALC888_LENOVO_MS7195_DIG, | ||
42 | ALC888_LENOVO_SKY, | ||
43 | ALC883_HAIER_W66, | ||
44 | ALC888_3ST_HP, | ||
45 | ALC888_6ST_DELL, | ||
46 | ALC883_MITAC, | ||
47 | ALC883_CLEVO_M540R, | ||
48 | ALC883_CLEVO_M720, | ||
49 | ALC883_FUJITSU_PI2515, | ||
50 | ALC888_FUJITSU_XA3530, | ||
51 | ALC883_3ST_6ch_INTEL, | ||
52 | ALC889A_INTEL, | ||
53 | ALC889_INTEL, | ||
54 | ALC888_ASUS_M90V, | ||
55 | ALC888_ASUS_EEE1601, | ||
56 | ALC889A_MB31, | 14 | ALC889A_MB31, |
57 | ALC1200_ASUS_P5Q, | ||
58 | ALC883_SONY_VAIO_TT, | ||
59 | ALC882_MODEL_LAST, | 15 | ALC882_MODEL_LAST, |
60 | }; | 16 | }; |
61 | 17 | ||
62 | /* | ||
63 | * 2ch mode | ||
64 | */ | ||
65 | static const struct hda_verb alc888_4ST_ch2_intel_init[] = { | ||
66 | /* Mic-in jack as mic in */ | ||
67 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
68 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
69 | /* Line-in jack as Line in */ | ||
70 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
71 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
72 | /* Line-Out as Front */ | ||
73 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
74 | { } /* end */ | ||
75 | }; | ||
76 | |||
77 | /* | ||
78 | * 4ch mode | ||
79 | */ | ||
80 | static const struct hda_verb alc888_4ST_ch4_intel_init[] = { | ||
81 | /* Mic-in jack as mic in */ | ||
82 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
83 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
84 | /* Line-in jack as Surround */ | ||
85 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
86 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
87 | /* Line-Out as Front */ | ||
88 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
89 | { } /* end */ | ||
90 | }; | ||
91 | |||
92 | /* | ||
93 | * 6ch mode | ||
94 | */ | ||
95 | static const struct hda_verb alc888_4ST_ch6_intel_init[] = { | ||
96 | /* Mic-in jack as CLFE */ | ||
97 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
98 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
99 | /* Line-in jack as Surround */ | ||
100 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
101 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
102 | /* Line-Out as CLFE (workaround because Mic-in is not loud enough) */ | ||
103 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, | ||
104 | { } /* end */ | ||
105 | }; | ||
106 | |||
107 | /* | ||
108 | * 8ch mode | ||
109 | */ | ||
110 | static const struct hda_verb alc888_4ST_ch8_intel_init[] = { | ||
111 | /* Mic-in jack as CLFE */ | ||
112 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
113 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
114 | /* Line-in jack as Surround */ | ||
115 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
116 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
117 | /* Line-Out as Side */ | ||
118 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, | ||
119 | { } /* end */ | ||
120 | }; | ||
121 | |||
122 | static const struct hda_channel_mode alc888_4ST_8ch_intel_modes[4] = { | ||
123 | { 2, alc888_4ST_ch2_intel_init }, | ||
124 | { 4, alc888_4ST_ch4_intel_init }, | ||
125 | { 6, alc888_4ST_ch6_intel_init }, | ||
126 | { 8, alc888_4ST_ch8_intel_init }, | ||
127 | }; | ||
128 | |||
129 | /* | ||
130 | * ALC888 Fujitsu Siemens Amillo xa3530 | ||
131 | */ | ||
132 | |||
133 | static const struct hda_verb alc888_fujitsu_xa3530_verbs[] = { | ||
134 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
135 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
136 | /* Connect Internal HP to Front */ | ||
137 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
138 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
139 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
140 | /* Connect Bass HP to Front */ | ||
141 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
142 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
143 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
144 | /* Connect Line-Out side jack (SPDIF) to Side */ | ||
145 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
146 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
147 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, | ||
148 | /* Connect Mic jack to CLFE */ | ||
149 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
150 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
151 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
152 | /* Connect Line-in jack to Surround */ | ||
153 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
154 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
155 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
156 | /* Connect HP out jack to Front */ | ||
157 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
158 | {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
159 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
160 | /* Enable unsolicited event for HP jack and Line-out jack */ | ||
161 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
162 | {0x17, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
163 | {} | ||
164 | }; | ||
165 | |||
166 | static void alc889_automute_setup(struct hda_codec *codec) | ||
167 | { | ||
168 | struct alc_spec *spec = codec->spec; | ||
169 | |||
170 | spec->autocfg.hp_pins[0] = 0x15; | ||
171 | spec->autocfg.speaker_pins[0] = 0x14; | ||
172 | spec->autocfg.speaker_pins[1] = 0x16; | ||
173 | spec->autocfg.speaker_pins[2] = 0x17; | ||
174 | spec->autocfg.speaker_pins[3] = 0x19; | ||
175 | spec->autocfg.speaker_pins[4] = 0x1a; | ||
176 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
177 | } | ||
178 | |||
179 | static void alc889_intel_init_hook(struct hda_codec *codec) | ||
180 | { | ||
181 | alc889_coef_init(codec); | ||
182 | alc_hp_automute(codec); | ||
183 | } | ||
184 | |||
185 | static void alc888_fujitsu_xa3530_setup(struct hda_codec *codec) | ||
186 | { | ||
187 | struct alc_spec *spec = codec->spec; | ||
188 | |||
189 | spec->autocfg.hp_pins[0] = 0x17; /* line-out */ | ||
190 | spec->autocfg.hp_pins[1] = 0x1b; /* hp */ | ||
191 | spec->autocfg.speaker_pins[0] = 0x14; /* speaker */ | ||
192 | spec->autocfg.speaker_pins[1] = 0x15; /* bass */ | ||
193 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
194 | } | ||
195 | |||
196 | /* | ||
197 | * ALC888 Acer Aspire 4930G model | ||
198 | */ | ||
199 | |||
200 | static const struct hda_verb alc888_acer_aspire_4930g_verbs[] = { | ||
201 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
202 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
203 | /* Unselect Front Mic by default in input mixer 3 */ | ||
204 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)}, | ||
205 | /* Enable unsolicited event for HP jack */ | ||
206 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
207 | /* Connect Internal HP to front */ | ||
208 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
209 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
210 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
211 | /* Connect HP out to front */ | ||
212 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
213 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
214 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
215 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
216 | { } | ||
217 | }; | ||
218 | |||
219 | /* | ||
220 | * ALC888 Acer Aspire 6530G model | ||
221 | */ | ||
222 | |||
223 | static const struct hda_verb alc888_acer_aspire_6530g_verbs[] = { | ||
224 | /* Route to built-in subwoofer as well as speakers */ | ||
225 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
226 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
227 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
228 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
229 | /* Bias voltage on for external mic port */ | ||
230 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80}, | ||
231 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
232 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
233 | /* Unselect Front Mic by default in input mixer 3 */ | ||
234 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)}, | ||
235 | /* Enable unsolicited event for HP jack */ | ||
236 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
237 | /* Enable speaker output */ | ||
238 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
239 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
240 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
241 | /* Enable headphone output */ | ||
242 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP}, | ||
243 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
244 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
245 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
246 | { } | ||
247 | }; | ||
248 | |||
249 | /* | ||
250 | *ALC888 Acer Aspire 7730G model | ||
251 | */ | ||
252 | |||
253 | static const struct hda_verb alc888_acer_aspire_7730G_verbs[] = { | ||
254 | /* Bias voltage on for external mic port */ | ||
255 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80}, | ||
256 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
257 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
258 | /* Unselect Front Mic by default in input mixer 3 */ | ||
259 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)}, | ||
260 | /* Enable unsolicited event for HP jack */ | ||
261 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
262 | /* Enable speaker output */ | ||
263 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
264 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
265 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
266 | /* Enable headphone output */ | ||
267 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP}, | ||
268 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
269 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
270 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
271 | /*Enable internal subwoofer */ | ||
272 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
273 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
274 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
275 | {0x17, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
276 | { } | ||
277 | }; | ||
278 | |||
279 | /* | ||
280 | * ALC889 Acer Aspire 8930G model | ||
281 | */ | ||
282 | |||
283 | static const struct hda_verb alc889_acer_aspire_8930g_verbs[] = { | ||
284 | /* Front Mic: set to PIN_IN (empty by default) */ | ||
285 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
286 | /* Unselect Front Mic by default in input mixer 3 */ | ||
287 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)}, | ||
288 | /* Enable unsolicited event for HP jack */ | ||
289 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
290 | /* Connect Internal Front to Front */ | ||
291 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
292 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
293 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
294 | /* Connect Internal Rear to Rear */ | ||
295 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
296 | {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
297 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
298 | /* Connect Internal CLFE to CLFE */ | ||
299 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
300 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
301 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
302 | /* Connect HP out to Front */ | ||
303 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP}, | ||
304 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
305 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
306 | /* Enable all DACs */ | ||
307 | /* DAC DISABLE/MUTE 1? */ | ||
308 | /* setting bits 1-5 disables DAC nids 0x02-0x06 apparently. Init=0x38 */ | ||
309 | {0x20, AC_VERB_SET_COEF_INDEX, 0x03}, | ||
310 | {0x20, AC_VERB_SET_PROC_COEF, 0x0000}, | ||
311 | /* DAC DISABLE/MUTE 2? */ | ||
312 | /* some bit here disables the other DACs. Init=0x4900 */ | ||
313 | {0x20, AC_VERB_SET_COEF_INDEX, 0x08}, | ||
314 | {0x20, AC_VERB_SET_PROC_COEF, 0x0000}, | ||
315 | /* DMIC fix | ||
316 | * This laptop has a stereo digital microphone. The mics are only 1cm apart | ||
317 | * which makes the stereo useless. However, either the mic or the ALC889 | ||
318 | * makes the signal become a difference/sum signal instead of standard | ||
319 | * stereo, which is annoying. So instead we flip this bit which makes the | ||
320 | * codec replicate the sum signal to both channels, turning it into a | ||
321 | * normal mono mic. | ||
322 | */ | ||
323 | /* DMIC_CONTROL? Init value = 0x0001 */ | ||
324 | {0x20, AC_VERB_SET_COEF_INDEX, 0x0b}, | ||
325 | {0x20, AC_VERB_SET_PROC_COEF, 0x0003}, | ||
326 | { } | ||
327 | }; | ||
328 | |||
329 | static const struct hda_input_mux alc888_2_capture_sources[2] = { | ||
330 | /* Front mic only available on one ADC */ | ||
331 | { | ||
332 | .num_items = 4, | ||
333 | .items = { | ||
334 | { "Mic", 0x0 }, | ||
335 | { "Line", 0x2 }, | ||
336 | { "CD", 0x4 }, | ||
337 | { "Front Mic", 0xb }, | ||
338 | }, | ||
339 | }, | ||
340 | { | ||
341 | .num_items = 3, | ||
342 | .items = { | ||
343 | { "Mic", 0x0 }, | ||
344 | { "Line", 0x2 }, | ||
345 | { "CD", 0x4 }, | ||
346 | }, | ||
347 | } | ||
348 | }; | ||
349 | |||
350 | static const struct hda_input_mux alc888_acer_aspire_6530_sources[2] = { | ||
351 | /* Interal mic only available on one ADC */ | ||
352 | { | ||
353 | .num_items = 5, | ||
354 | .items = { | ||
355 | { "Mic", 0x0 }, | ||
356 | { "Line In", 0x2 }, | ||
357 | { "CD", 0x4 }, | ||
358 | { "Input Mix", 0xa }, | ||
359 | { "Internal Mic", 0xb }, | ||
360 | }, | ||
361 | }, | ||
362 | { | ||
363 | .num_items = 4, | ||
364 | .items = { | ||
365 | { "Mic", 0x0 }, | ||
366 | { "Line In", 0x2 }, | ||
367 | { "CD", 0x4 }, | ||
368 | { "Input Mix", 0xa }, | ||
369 | }, | ||
370 | } | ||
371 | }; | ||
372 | |||
373 | static const struct hda_input_mux alc889_capture_sources[3] = { | ||
374 | /* Digital mic only available on first "ADC" */ | ||
375 | { | ||
376 | .num_items = 5, | ||
377 | .items = { | ||
378 | { "Mic", 0x0 }, | ||
379 | { "Line", 0x2 }, | ||
380 | { "CD", 0x4 }, | ||
381 | { "Front Mic", 0xb }, | ||
382 | { "Input Mix", 0xa }, | ||
383 | }, | ||
384 | }, | ||
385 | { | ||
386 | .num_items = 4, | ||
387 | .items = { | ||
388 | { "Mic", 0x0 }, | ||
389 | { "Line", 0x2 }, | ||
390 | { "CD", 0x4 }, | ||
391 | { "Input Mix", 0xa }, | ||
392 | }, | ||
393 | }, | ||
394 | { | ||
395 | .num_items = 4, | ||
396 | .items = { | ||
397 | { "Mic", 0x0 }, | ||
398 | { "Line", 0x2 }, | ||
399 | { "CD", 0x4 }, | ||
400 | { "Input Mix", 0xa }, | ||
401 | }, | ||
402 | } | ||
403 | }; | ||
404 | |||
405 | static const struct snd_kcontrol_new alc888_base_mixer[] = { | ||
406 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
407 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
408 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
409 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
410 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, | ||
411 | HDA_OUTPUT), | ||
412 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
413 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
414 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
415 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
416 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | ||
417 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
418 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
419 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
420 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
421 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
422 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
423 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
424 | { } /* end */ | ||
425 | }; | ||
426 | |||
427 | static const struct snd_kcontrol_new alc888_acer_aspire_4930g_mixer[] = { | ||
428 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
429 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
430 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
431 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
432 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, | ||
433 | HDA_OUTPUT), | ||
434 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
435 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
436 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
437 | HDA_CODEC_VOLUME_MONO("Internal LFE Playback Volume", 0x0f, 1, 0x0, HDA_OUTPUT), | ||
438 | HDA_BIND_MUTE_MONO("Internal LFE Playback Switch", 0x0f, 1, 2, HDA_INPUT), | ||
439 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
440 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
441 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
442 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
443 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
444 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
445 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
446 | { } /* end */ | ||
447 | }; | ||
448 | |||
449 | static const struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = { | ||
450 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
451 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
452 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
453 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
454 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, | ||
455 | HDA_OUTPUT), | ||
456 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
457 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
458 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
459 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
460 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
461 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
462 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
463 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
464 | { } /* end */ | ||
465 | }; | ||
466 | |||
467 | |||
468 | static void alc888_acer_aspire_4930g_setup(struct hda_codec *codec) | ||
469 | { | ||
470 | struct alc_spec *spec = codec->spec; | ||
471 | |||
472 | spec->autocfg.hp_pins[0] = 0x15; | ||
473 | spec->autocfg.speaker_pins[0] = 0x14; | ||
474 | spec->autocfg.speaker_pins[1] = 0x16; | ||
475 | spec->autocfg.speaker_pins[2] = 0x17; | ||
476 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
477 | } | ||
478 | |||
479 | static void alc888_acer_aspire_6530g_setup(struct hda_codec *codec) | ||
480 | { | ||
481 | struct alc_spec *spec = codec->spec; | ||
482 | |||
483 | spec->autocfg.hp_pins[0] = 0x15; | ||
484 | spec->autocfg.speaker_pins[0] = 0x14; | ||
485 | spec->autocfg.speaker_pins[1] = 0x16; | ||
486 | spec->autocfg.speaker_pins[2] = 0x17; | ||
487 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
488 | } | ||
489 | |||
490 | static void alc888_acer_aspire_7730g_setup(struct hda_codec *codec) | ||
491 | { | ||
492 | struct alc_spec *spec = codec->spec; | ||
493 | |||
494 | spec->autocfg.hp_pins[0] = 0x15; | ||
495 | spec->autocfg.speaker_pins[0] = 0x14; | ||
496 | spec->autocfg.speaker_pins[1] = 0x16; | ||
497 | spec->autocfg.speaker_pins[2] = 0x17; | ||
498 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
499 | } | ||
500 | |||
501 | static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) | ||
502 | { | ||
503 | struct alc_spec *spec = codec->spec; | ||
504 | |||
505 | spec->autocfg.hp_pins[0] = 0x15; | ||
506 | spec->autocfg.speaker_pins[0] = 0x14; | ||
507 | spec->autocfg.speaker_pins[1] = 0x16; | ||
508 | spec->autocfg.speaker_pins[2] = 0x1b; | ||
509 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
510 | } | ||
511 | |||
512 | #define ALC882_DIGOUT_NID 0x06 | 18 | #define ALC882_DIGOUT_NID 0x06 |
513 | #define ALC882_DIGIN_NID 0x0a | 19 | #define ALC882_DIGIN_NID 0x0a |
514 | #define ALC883_DIGOUT_NID ALC882_DIGOUT_NID | 20 | #define ALC883_DIGOUT_NID ALC882_DIGOUT_NID |
@@ -531,15 +37,9 @@ static const hda_nid_t alc882_dac_nids[4] = { | |||
531 | #define alc882_adc_nids alc880_adc_nids | 37 | #define alc882_adc_nids alc880_adc_nids |
532 | #define alc882_adc_nids_alt alc880_adc_nids_alt | 38 | #define alc882_adc_nids_alt alc880_adc_nids_alt |
533 | #define alc883_adc_nids alc882_adc_nids_alt | 39 | #define alc883_adc_nids alc882_adc_nids_alt |
534 | static const hda_nid_t alc883_adc_nids_alt[1] = { 0x08 }; | ||
535 | static const hda_nid_t alc883_adc_nids_rev[2] = { 0x09, 0x08 }; | ||
536 | #define alc889_adc_nids alc880_adc_nids | ||
537 | 40 | ||
538 | static const hda_nid_t alc882_capsrc_nids[3] = { 0x24, 0x23, 0x22 }; | ||
539 | static const hda_nid_t alc882_capsrc_nids_alt[2] = { 0x23, 0x22 }; | 41 | static const hda_nid_t alc882_capsrc_nids_alt[2] = { 0x23, 0x22 }; |
540 | #define alc883_capsrc_nids alc882_capsrc_nids_alt | 42 | #define alc883_capsrc_nids alc882_capsrc_nids_alt |
541 | static const hda_nid_t alc883_capsrc_nids_rev[2] = { 0x22, 0x23 }; | ||
542 | #define alc889_capsrc_nids alc882_capsrc_nids | ||
543 | 43 | ||
544 | /* input MUX */ | 44 | /* input MUX */ |
545 | /* FIXME: should be a matrix-type input source selection */ | 45 | /* FIXME: should be a matrix-type input source selection */ |
@@ -556,15 +56,6 @@ static const struct hda_input_mux alc882_capture_source = { | |||
556 | 56 | ||
557 | #define alc883_capture_source alc882_capture_source | 57 | #define alc883_capture_source alc882_capture_source |
558 | 58 | ||
559 | static const struct hda_input_mux alc889_capture_source = { | ||
560 | .num_items = 3, | ||
561 | .items = { | ||
562 | { "Front Mic", 0x0 }, | ||
563 | { "Mic", 0x3 }, | ||
564 | { "Line", 0x2 }, | ||
565 | }, | ||
566 | }; | ||
567 | |||
568 | static const struct hda_input_mux mb5_capture_source = { | 59 | static const struct hda_input_mux mb5_capture_source = { |
569 | .num_items = 3, | 60 | .num_items = 3, |
570 | .items = { | 61 | .items = { |
@@ -592,49 +83,6 @@ static const struct hda_input_mux alc883_3stack_6ch_intel = { | |||
592 | }, | 83 | }, |
593 | }; | 84 | }; |
594 | 85 | ||
595 | static const struct hda_input_mux alc883_lenovo_101e_capture_source = { | ||
596 | .num_items = 2, | ||
597 | .items = { | ||
598 | { "Mic", 0x1 }, | ||
599 | { "Line", 0x2 }, | ||
600 | }, | ||
601 | }; | ||
602 | |||
603 | static const struct hda_input_mux alc883_lenovo_nb0763_capture_source = { | ||
604 | .num_items = 4, | ||
605 | .items = { | ||
606 | { "Mic", 0x0 }, | ||
607 | { "Internal Mic", 0x1 }, | ||
608 | { "Line", 0x2 }, | ||
609 | { "CD", 0x4 }, | ||
610 | }, | ||
611 | }; | ||
612 | |||
613 | static const struct hda_input_mux alc883_fujitsu_pi2515_capture_source = { | ||
614 | .num_items = 2, | ||
615 | .items = { | ||
616 | { "Mic", 0x0 }, | ||
617 | { "Internal Mic", 0x1 }, | ||
618 | }, | ||
619 | }; | ||
620 | |||
621 | static const struct hda_input_mux alc883_lenovo_sky_capture_source = { | ||
622 | .num_items = 3, | ||
623 | .items = { | ||
624 | { "Mic", 0x0 }, | ||
625 | { "Front Mic", 0x1 }, | ||
626 | { "Line", 0x4 }, | ||
627 | }, | ||
628 | }; | ||
629 | |||
630 | static const struct hda_input_mux alc883_asus_eee1601_capture_source = { | ||
631 | .num_items = 2, | ||
632 | .items = { | ||
633 | { "Mic", 0x0 }, | ||
634 | { "Line", 0x2 }, | ||
635 | }, | ||
636 | }; | ||
637 | |||
638 | static const struct hda_input_mux alc889A_mb31_capture_source = { | 86 | static const struct hda_input_mux alc889A_mb31_capture_source = { |
639 | .num_items = 2, | 87 | .num_items = 2, |
640 | .items = { | 88 | .items = { |
@@ -654,131 +102,6 @@ static const struct hda_input_mux alc889A_imac91_capture_source = { | |||
654 | }, | 102 | }, |
655 | }; | 103 | }; |
656 | 104 | ||
657 | /* | ||
658 | * 2ch mode | ||
659 | */ | ||
660 | static const struct hda_channel_mode alc883_3ST_2ch_modes[1] = { | ||
661 | { 2, NULL } | ||
662 | }; | ||
663 | |||
664 | /* | ||
665 | * 2ch mode | ||
666 | */ | ||
667 | static const struct hda_verb alc882_3ST_ch2_init[] = { | ||
668 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
669 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
670 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
671 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
672 | { } /* end */ | ||
673 | }; | ||
674 | |||
675 | /* | ||
676 | * 4ch mode | ||
677 | */ | ||
678 | static const struct hda_verb alc882_3ST_ch4_init[] = { | ||
679 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
680 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
681 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
682 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
683 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
684 | { } /* end */ | ||
685 | }; | ||
686 | |||
687 | /* | ||
688 | * 6ch mode | ||
689 | */ | ||
690 | static const struct hda_verb alc882_3ST_ch6_init[] = { | ||
691 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
692 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
693 | { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
694 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
695 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
696 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
697 | { } /* end */ | ||
698 | }; | ||
699 | |||
700 | static const struct hda_channel_mode alc882_3ST_6ch_modes[3] = { | ||
701 | { 2, alc882_3ST_ch2_init }, | ||
702 | { 4, alc882_3ST_ch4_init }, | ||
703 | { 6, alc882_3ST_ch6_init }, | ||
704 | }; | ||
705 | |||
706 | #define alc883_3ST_6ch_modes alc882_3ST_6ch_modes | ||
707 | |||
708 | /* | ||
709 | * 2ch mode | ||
710 | */ | ||
711 | static const struct hda_verb alc883_3ST_ch2_clevo_init[] = { | ||
712 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP }, | ||
713 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
714 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
715 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
716 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
717 | { } /* end */ | ||
718 | }; | ||
719 | |||
720 | /* | ||
721 | * 4ch mode | ||
722 | */ | ||
723 | static const struct hda_verb alc883_3ST_ch4_clevo_init[] = { | ||
724 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
725 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
726 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
727 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
728 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
729 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
730 | { } /* end */ | ||
731 | }; | ||
732 | |||
733 | /* | ||
734 | * 6ch mode | ||
735 | */ | ||
736 | static const struct hda_verb alc883_3ST_ch6_clevo_init[] = { | ||
737 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
738 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
739 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
740 | { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
741 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
742 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
743 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
744 | { } /* end */ | ||
745 | }; | ||
746 | |||
747 | static const struct hda_channel_mode alc883_3ST_6ch_clevo_modes[3] = { | ||
748 | { 2, alc883_3ST_ch2_clevo_init }, | ||
749 | { 4, alc883_3ST_ch4_clevo_init }, | ||
750 | { 6, alc883_3ST_ch6_clevo_init }, | ||
751 | }; | ||
752 | |||
753 | |||
754 | /* | ||
755 | * 6ch mode | ||
756 | */ | ||
757 | static const struct hda_verb alc882_sixstack_ch6_init[] = { | ||
758 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 }, | ||
759 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
760 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
761 | { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
762 | { } /* end */ | ||
763 | }; | ||
764 | |||
765 | /* | ||
766 | * 8ch mode | ||
767 | */ | ||
768 | static const struct hda_verb alc882_sixstack_ch8_init[] = { | ||
769 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
770 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
771 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
772 | { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
773 | { } /* end */ | ||
774 | }; | ||
775 | |||
776 | static const struct hda_channel_mode alc882_sixstack_modes[2] = { | ||
777 | { 6, alc882_sixstack_ch6_init }, | ||
778 | { 8, alc882_sixstack_ch8_init }, | ||
779 | }; | ||
780 | |||
781 | |||
782 | /* Macbook Air 2,1 */ | 105 | /* Macbook Air 2,1 */ |
783 | 106 | ||
784 | static const struct hda_channel_mode alc885_mba21_ch_modes[1] = { | 107 | static const struct hda_channel_mode alc885_mba21_ch_modes[1] = { |
@@ -847,216 +170,6 @@ static const struct hda_channel_mode alc885_mb5_6ch_modes[2] = { | |||
847 | 170 | ||
848 | #define alc885_macmini3_6ch_modes alc885_mb5_6ch_modes | 171 | #define alc885_macmini3_6ch_modes alc885_mb5_6ch_modes |
849 | 172 | ||
850 | /* | ||
851 | * 2ch mode | ||
852 | */ | ||
853 | static const struct hda_verb alc883_4ST_ch2_init[] = { | ||
854 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
855 | { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
856 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
857 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
858 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
859 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
860 | { } /* end */ | ||
861 | }; | ||
862 | |||
863 | /* | ||
864 | * 4ch mode | ||
865 | */ | ||
866 | static const struct hda_verb alc883_4ST_ch4_init[] = { | ||
867 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
868 | { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
869 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
870 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
871 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
872 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
873 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
874 | { } /* end */ | ||
875 | }; | ||
876 | |||
877 | /* | ||
878 | * 6ch mode | ||
879 | */ | ||
880 | static const struct hda_verb alc883_4ST_ch6_init[] = { | ||
881 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
882 | { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
883 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
884 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
885 | { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
886 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
887 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
888 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
889 | { } /* end */ | ||
890 | }; | ||
891 | |||
892 | /* | ||
893 | * 8ch mode | ||
894 | */ | ||
895 | static const struct hda_verb alc883_4ST_ch8_init[] = { | ||
896 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
897 | { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
898 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03 }, | ||
899 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
900 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
901 | { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
902 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
903 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
904 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
905 | { } /* end */ | ||
906 | }; | ||
907 | |||
908 | static const struct hda_channel_mode alc883_4ST_8ch_modes[4] = { | ||
909 | { 2, alc883_4ST_ch2_init }, | ||
910 | { 4, alc883_4ST_ch4_init }, | ||
911 | { 6, alc883_4ST_ch6_init }, | ||
912 | { 8, alc883_4ST_ch8_init }, | ||
913 | }; | ||
914 | |||
915 | |||
916 | /* | ||
917 | * 2ch mode | ||
918 | */ | ||
919 | static const struct hda_verb alc883_3ST_ch2_intel_init[] = { | ||
920 | { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
921 | { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
922 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
923 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
924 | { } /* end */ | ||
925 | }; | ||
926 | |||
927 | /* | ||
928 | * 4ch mode | ||
929 | */ | ||
930 | static const struct hda_verb alc883_3ST_ch4_intel_init[] = { | ||
931 | { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
932 | { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
933 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
934 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
935 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
936 | { } /* end */ | ||
937 | }; | ||
938 | |||
939 | /* | ||
940 | * 6ch mode | ||
941 | */ | ||
942 | static const struct hda_verb alc883_3ST_ch6_intel_init[] = { | ||
943 | { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
944 | { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
945 | { 0x19, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
946 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
947 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
948 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
949 | { } /* end */ | ||
950 | }; | ||
951 | |||
952 | static const struct hda_channel_mode alc883_3ST_6ch_intel_modes[3] = { | ||
953 | { 2, alc883_3ST_ch2_intel_init }, | ||
954 | { 4, alc883_3ST_ch4_intel_init }, | ||
955 | { 6, alc883_3ST_ch6_intel_init }, | ||
956 | }; | ||
957 | |||
958 | /* | ||
959 | * 2ch mode | ||
960 | */ | ||
961 | static const struct hda_verb alc889_ch2_intel_init[] = { | ||
962 | { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
963 | { 0x19, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
964 | { 0x16, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
965 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
966 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
967 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
968 | { } /* end */ | ||
969 | }; | ||
970 | |||
971 | /* | ||
972 | * 6ch mode | ||
973 | */ | ||
974 | static const struct hda_verb alc889_ch6_intel_init[] = { | ||
975 | { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
976 | { 0x19, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
977 | { 0x16, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
978 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03 }, | ||
979 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
980 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
981 | { } /* end */ | ||
982 | }; | ||
983 | |||
984 | /* | ||
985 | * 8ch mode | ||
986 | */ | ||
987 | static const struct hda_verb alc889_ch8_intel_init[] = { | ||
988 | { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, | ||
989 | { 0x19, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
990 | { 0x16, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
991 | { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03 }, | ||
992 | { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x03 }, | ||
993 | { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
994 | { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
995 | { } /* end */ | ||
996 | }; | ||
997 | |||
998 | static const struct hda_channel_mode alc889_8ch_intel_modes[3] = { | ||
999 | { 2, alc889_ch2_intel_init }, | ||
1000 | { 6, alc889_ch6_intel_init }, | ||
1001 | { 8, alc889_ch8_intel_init }, | ||
1002 | }; | ||
1003 | |||
1004 | /* | ||
1005 | * 6ch mode | ||
1006 | */ | ||
1007 | static const struct hda_verb alc883_sixstack_ch6_init[] = { | ||
1008 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 }, | ||
1009 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1010 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1011 | { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1012 | { } /* end */ | ||
1013 | }; | ||
1014 | |||
1015 | /* | ||
1016 | * 8ch mode | ||
1017 | */ | ||
1018 | static const struct hda_verb alc883_sixstack_ch8_init[] = { | ||
1019 | { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1020 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1021 | { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1022 | { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
1023 | { } /* end */ | ||
1024 | }; | ||
1025 | |||
1026 | static const struct hda_channel_mode alc883_sixstack_modes[2] = { | ||
1027 | { 6, alc883_sixstack_ch6_init }, | ||
1028 | { 8, alc883_sixstack_ch8_init }, | ||
1029 | }; | ||
1030 | |||
1031 | |||
1032 | /* Pin assignment: Front=0x14, Rear=0x15, CLFE=0x16, Side=0x17 | ||
1033 | * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b | ||
1034 | */ | ||
1035 | static const struct snd_kcontrol_new alc882_base_mixer[] = { | ||
1036 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1037 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1038 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
1039 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
1040 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | ||
1041 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
1042 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
1043 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
1044 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
1045 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | ||
1046 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
1047 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1048 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1049 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1050 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1051 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1052 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1053 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1054 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1055 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1056 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1057 | { } /* end */ | ||
1058 | }; | ||
1059 | |||
1060 | /* Macbook Air 2,1 same control for HP and internal Speaker */ | 173 | /* Macbook Air 2,1 same control for HP and internal Speaker */ |
1061 | 174 | ||
1062 | static const struct snd_kcontrol_new alc885_mba21_mixer[] = { | 175 | static const struct snd_kcontrol_new alc885_mba21_mixer[] = { |
@@ -1121,70 +234,6 @@ static const struct snd_kcontrol_new alc885_imac91_mixer[] = { | |||
1121 | }; | 234 | }; |
1122 | 235 | ||
1123 | 236 | ||
1124 | static const struct snd_kcontrol_new alc882_w2jc_mixer[] = { | ||
1125 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1126 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1127 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1128 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1129 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1130 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1131 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1132 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1133 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1134 | { } /* end */ | ||
1135 | }; | ||
1136 | |||
1137 | static const struct snd_kcontrol_new alc882_targa_mixer[] = { | ||
1138 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1139 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1140 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
1141 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1142 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1143 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1144 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1145 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1146 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1147 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1148 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1149 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1150 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1151 | { } /* end */ | ||
1152 | }; | ||
1153 | |||
1154 | /* Pin assignment: Front=0x14, HP = 0x15, Front = 0x16, ??? | ||
1155 | * Front Mic=0x18, Line In = 0x1a, Line In = 0x1b, CD = 0x1c | ||
1156 | */ | ||
1157 | static const struct snd_kcontrol_new alc882_asus_a7j_mixer[] = { | ||
1158 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1159 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
1160 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
1161 | HDA_CODEC_MUTE("Mobile Front Playback Switch", 0x16, 0x0, HDA_OUTPUT), | ||
1162 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1163 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1164 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1165 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1166 | HDA_CODEC_VOLUME("Mobile Line Playback Volume", 0x0b, 0x03, HDA_INPUT), | ||
1167 | HDA_CODEC_MUTE("Mobile Line Playback Switch", 0x0b, 0x03, HDA_INPUT), | ||
1168 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1169 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1170 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1171 | { } /* end */ | ||
1172 | }; | ||
1173 | |||
1174 | static const struct snd_kcontrol_new alc882_asus_a7m_mixer[] = { | ||
1175 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1176 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1177 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
1178 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1179 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1180 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1181 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1182 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1183 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1184 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1185 | { } /* end */ | ||
1186 | }; | ||
1187 | |||
1188 | static const struct snd_kcontrol_new alc882_chmode_mixer[] = { | 237 | static const struct snd_kcontrol_new alc882_chmode_mixer[] = { |
1189 | { | 238 | { |
1190 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 239 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
@@ -1258,179 +307,8 @@ static const struct hda_verb alc882_base_init_verbs[] = { | |||
1258 | { } | 307 | { } |
1259 | }; | 308 | }; |
1260 | 309 | ||
1261 | static const struct hda_verb alc882_adc1_init_verbs[] = { | ||
1262 | /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ | ||
1263 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1264 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
1265 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
1266 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
1267 | /* ADC1: mute amp left and right */ | ||
1268 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1269 | {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1270 | { } | ||
1271 | }; | ||
1272 | |||
1273 | static const struct hda_verb alc882_eapd_verbs[] = { | ||
1274 | /* change to EAPD mode */ | ||
1275 | {0x20, AC_VERB_SET_COEF_INDEX, 0x07}, | ||
1276 | {0x20, AC_VERB_SET_PROC_COEF, 0x3060}, | ||
1277 | { } | ||
1278 | }; | ||
1279 | |||
1280 | static const struct hda_verb alc889_eapd_verbs[] = { | ||
1281 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
1282 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
1283 | { } | ||
1284 | }; | ||
1285 | |||
1286 | static const struct hda_verb alc_hp15_unsol_verbs[] = { | ||
1287 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT}, | ||
1288 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1289 | {} | ||
1290 | }; | ||
1291 | |||
1292 | static const struct hda_verb alc885_init_verbs[] = { | ||
1293 | /* Front mixer: unmute input/output amp left and right (volume = 0) */ | ||
1294 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1295 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1296 | /* Rear mixer */ | ||
1297 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1298 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1299 | /* CLFE mixer */ | ||
1300 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1301 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1302 | /* Side mixer */ | ||
1303 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1304 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1305 | |||
1306 | /* Front HP Pin: output 0 (0x0c) */ | ||
1307 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1308 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1309 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1310 | /* Front Pin: output 0 (0x0c) */ | ||
1311 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1312 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1313 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1314 | /* Rear Pin: output 1 (0x0d) */ | ||
1315 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1316 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1317 | {0x19, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
1318 | /* CLFE Pin: output 2 (0x0e) */ | ||
1319 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1320 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1321 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
1322 | /* Side Pin: output 3 (0x0f) */ | ||
1323 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1324 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1325 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, | ||
1326 | /* Mic (rear) pin: input vref at 80% */ | ||
1327 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
1328 | {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
1329 | /* Front Mic pin: input vref at 80% */ | ||
1330 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
1331 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
1332 | /* Line In pin: input */ | ||
1333 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
1334 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
1335 | |||
1336 | /* Mixer elements: 0x18, , 0x1a, 0x1b */ | ||
1337 | /* Input mixer1 */ | ||
1338 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1339 | /* Input mixer2 */ | ||
1340 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1341 | /* Input mixer3 */ | ||
1342 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1343 | /* ADC2: mute amp left and right */ | ||
1344 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1345 | /* ADC3: mute amp left and right */ | ||
1346 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1347 | |||
1348 | { } | ||
1349 | }; | ||
1350 | |||
1351 | static const struct hda_verb alc885_init_input_verbs[] = { | ||
1352 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1353 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(2)}, | ||
1354 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(3)}, | ||
1355 | { } | ||
1356 | }; | ||
1357 | |||
1358 | |||
1359 | /* Unmute Selector 24h and set the default input to front mic */ | ||
1360 | static const struct hda_verb alc889_init_input_verbs[] = { | ||
1361 | {0x24, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1362 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1363 | { } | ||
1364 | }; | ||
1365 | |||
1366 | |||
1367 | #define alc883_init_verbs alc882_base_init_verbs | 310 | #define alc883_init_verbs alc882_base_init_verbs |
1368 | 311 | ||
1369 | /* Mac Pro test */ | ||
1370 | static const struct snd_kcontrol_new alc882_macpro_mixer[] = { | ||
1371 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1372 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1373 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x18, 0x0, HDA_OUTPUT), | ||
1374 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT), | ||
1375 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT), | ||
1376 | /* FIXME: this looks suspicious... | ||
1377 | HDA_CODEC_VOLUME("Beep Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1378 | HDA_CODEC_MUTE("Beep Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1379 | */ | ||
1380 | { } /* end */ | ||
1381 | }; | ||
1382 | |||
1383 | static const struct hda_verb alc882_macpro_init_verbs[] = { | ||
1384 | /* Front mixer: unmute input/output amp left and right (volume = 0) */ | ||
1385 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | ||
1386 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1387 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, | ||
1388 | /* Front Pin: output 0 (0x0c) */ | ||
1389 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1390 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1391 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1392 | /* Front Mic pin: input vref at 80% */ | ||
1393 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
1394 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
1395 | /* Speaker: output */ | ||
1396 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1397 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1398 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x04}, | ||
1399 | /* Headphone output (output 0 - 0x0c) */ | ||
1400 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1401 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1402 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1403 | |||
1404 | /* FIXME: use matrix-type input source selection */ | ||
1405 | /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */ | ||
1406 | /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ | ||
1407 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1408 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
1409 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
1410 | {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
1411 | /* Input mixer2 */ | ||
1412 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1413 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
1414 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
1415 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
1416 | /* Input mixer3 */ | ||
1417 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1418 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
1419 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
1420 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
1421 | /* ADC1: mute amp left and right */ | ||
1422 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1423 | {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1424 | /* ADC2: mute amp left and right */ | ||
1425 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1426 | {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1427 | /* ADC3: mute amp left and right */ | ||
1428 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
1429 | {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1430 | |||
1431 | { } | ||
1432 | }; | ||
1433 | |||
1434 | /* Macbook 5,1 */ | 312 | /* Macbook 5,1 */ |
1435 | static const struct hda_verb alc885_mb5_init_verbs[] = { | 313 | static const struct hda_verb alc885_mb5_init_verbs[] = { |
1436 | /* DACs */ | 314 | /* DACs */ |
@@ -1669,34 +547,6 @@ static const struct hda_verb alc885_imac91_init_verbs[] = { | |||
1669 | { } | 547 | { } |
1670 | }; | 548 | }; |
1671 | 549 | ||
1672 | /* iMac 24 mixer. */ | ||
1673 | static const struct snd_kcontrol_new alc885_imac24_mixer[] = { | ||
1674 | HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x00, HDA_OUTPUT), | ||
1675 | HDA_CODEC_MUTE("Master Playback Switch", 0x0c, 0x00, HDA_INPUT), | ||
1676 | { } /* end */ | ||
1677 | }; | ||
1678 | |||
1679 | /* iMac 24 init verbs. */ | ||
1680 | static const struct hda_verb alc885_imac24_init_verbs[] = { | ||
1681 | /* Internal speakers: output 0 (0x0c) */ | ||
1682 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1683 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1684 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1685 | /* Internal speakers: output 0 (0x0c) */ | ||
1686 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1687 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1688 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1689 | /* Headphone: output 0 (0x0c) */ | ||
1690 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1691 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
1692 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
1693 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
1694 | /* Front Mic: input vref at 80% */ | ||
1695 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
1696 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
1697 | { } | ||
1698 | }; | ||
1699 | |||
1700 | /* Toggle speaker-output according to the hp-jack state */ | 550 | /* Toggle speaker-output according to the hp-jack state */ |
1701 | static void alc885_imac24_setup(struct hda_codec *codec) | 551 | static void alc885_imac24_setup(struct hda_codec *codec) |
1702 | { | 552 | { |
@@ -1742,127 +592,6 @@ static void alc885_imac91_setup(struct hda_codec *codec) | |||
1742 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | 592 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); |
1743 | } | 593 | } |
1744 | 594 | ||
1745 | static const struct hda_verb alc882_targa_verbs[] = { | ||
1746 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1747 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1748 | |||
1749 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1750 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1751 | |||
1752 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, /* mic/clfe */ | ||
1753 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, /* line/surround */ | ||
1754 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP */ | ||
1755 | |||
1756 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
1757 | { } /* end */ | ||
1758 | }; | ||
1759 | |||
1760 | /* toggle speaker-output according to the hp-jack state */ | ||
1761 | static void alc882_targa_automute(struct hda_codec *codec) | ||
1762 | { | ||
1763 | struct alc_spec *spec = codec->spec; | ||
1764 | alc_hp_automute(codec); | ||
1765 | snd_hda_codec_write_cache(codec, 1, 0, AC_VERB_SET_GPIO_DATA, | ||
1766 | spec->hp_jack_present ? 1 : 3); | ||
1767 | } | ||
1768 | |||
1769 | static void alc882_targa_setup(struct hda_codec *codec) | ||
1770 | { | ||
1771 | struct alc_spec *spec = codec->spec; | ||
1772 | |||
1773 | spec->autocfg.hp_pins[0] = 0x14; | ||
1774 | spec->autocfg.speaker_pins[0] = 0x1b; | ||
1775 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
1776 | } | ||
1777 | |||
1778 | static void alc882_targa_unsol_event(struct hda_codec *codec, unsigned int res) | ||
1779 | { | ||
1780 | if ((res >> 26) == ALC_HP_EVENT) | ||
1781 | alc882_targa_automute(codec); | ||
1782 | } | ||
1783 | |||
1784 | static const struct hda_verb alc882_asus_a7j_verbs[] = { | ||
1785 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1786 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1787 | |||
1788 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1789 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1790 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1791 | |||
1792 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front */ | ||
1793 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP */ | ||
1794 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front */ | ||
1795 | |||
1796 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, /* mic/clfe */ | ||
1797 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, /* line/surround */ | ||
1798 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP */ | ||
1799 | { } /* end */ | ||
1800 | }; | ||
1801 | |||
1802 | static const struct hda_verb alc882_asus_a7m_verbs[] = { | ||
1803 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
1804 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
1805 | |||
1806 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
1807 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1808 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
1809 | |||
1810 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front */ | ||
1811 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP */ | ||
1812 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front */ | ||
1813 | |||
1814 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, /* mic/clfe */ | ||
1815 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, /* line/surround */ | ||
1816 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP */ | ||
1817 | { } /* end */ | ||
1818 | }; | ||
1819 | |||
1820 | static void alc882_gpio_mute(struct hda_codec *codec, int pin, int muted) | ||
1821 | { | ||
1822 | unsigned int gpiostate, gpiomask, gpiodir; | ||
1823 | |||
1824 | gpiostate = snd_hda_codec_read(codec, codec->afg, 0, | ||
1825 | AC_VERB_GET_GPIO_DATA, 0); | ||
1826 | |||
1827 | if (!muted) | ||
1828 | gpiostate |= (1 << pin); | ||
1829 | else | ||
1830 | gpiostate &= ~(1 << pin); | ||
1831 | |||
1832 | gpiomask = snd_hda_codec_read(codec, codec->afg, 0, | ||
1833 | AC_VERB_GET_GPIO_MASK, 0); | ||
1834 | gpiomask |= (1 << pin); | ||
1835 | |||
1836 | gpiodir = snd_hda_codec_read(codec, codec->afg, 0, | ||
1837 | AC_VERB_GET_GPIO_DIRECTION, 0); | ||
1838 | gpiodir |= (1 << pin); | ||
1839 | |||
1840 | |||
1841 | snd_hda_codec_write(codec, codec->afg, 0, | ||
1842 | AC_VERB_SET_GPIO_MASK, gpiomask); | ||
1843 | snd_hda_codec_write(codec, codec->afg, 0, | ||
1844 | AC_VERB_SET_GPIO_DIRECTION, gpiodir); | ||
1845 | |||
1846 | msleep(1); | ||
1847 | |||
1848 | snd_hda_codec_write(codec, codec->afg, 0, | ||
1849 | AC_VERB_SET_GPIO_DATA, gpiostate); | ||
1850 | } | ||
1851 | |||
1852 | /* set up GPIO at initialization */ | ||
1853 | static void alc885_macpro_init_hook(struct hda_codec *codec) | ||
1854 | { | ||
1855 | alc882_gpio_mute(codec, 0, 0); | ||
1856 | alc882_gpio_mute(codec, 1, 0); | ||
1857 | } | ||
1858 | |||
1859 | /* set up GPIO and update auto-muting at initialization */ | ||
1860 | static void alc885_imac24_init_hook(struct hda_codec *codec) | ||
1861 | { | ||
1862 | alc885_macpro_init_hook(codec); | ||
1863 | alc_hp_automute(codec); | ||
1864 | } | ||
1865 | |||
1866 | /* 2ch mode (Speaker:front, Subwoofer:CLFE, Line:input, Headphones:front) */ | 595 | /* 2ch mode (Speaker:front, Subwoofer:CLFE, Line:input, Headphones:front) */ |
1867 | static const struct hda_verb alc889A_mb31_ch2_init[] = { | 596 | static const struct hda_verb alc889A_mb31_ch2_init[] = { |
1868 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP as front */ | 597 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, /* HP as front */ |
@@ -1906,77 +635,6 @@ static const struct hda_channel_mode alc889A_mb31_6ch_modes[4] = { | |||
1906 | { 6, alc889A_mb31_ch6_init }, | 635 | { 6, alc889A_mb31_ch6_init }, |
1907 | }; | 636 | }; |
1908 | 637 | ||
1909 | static const struct hda_verb alc883_medion_eapd_verbs[] = { | ||
1910 | /* eanable EAPD on medion laptop */ | ||
1911 | {0x20, AC_VERB_SET_COEF_INDEX, 0x07}, | ||
1912 | {0x20, AC_VERB_SET_PROC_COEF, 0x3070}, | ||
1913 | { } | ||
1914 | }; | ||
1915 | |||
1916 | #define alc883_base_mixer alc882_base_mixer | ||
1917 | |||
1918 | static const struct snd_kcontrol_new alc883_mitac_mixer[] = { | ||
1919 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1920 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1921 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | ||
1922 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
1923 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
1924 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
1925 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
1926 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1927 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1928 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1929 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1930 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1931 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1932 | { } /* end */ | ||
1933 | }; | ||
1934 | |||
1935 | static const struct snd_kcontrol_new alc883_clevo_m720_mixer[] = { | ||
1936 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1937 | HDA_BIND_MUTE("Headphone Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1938 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
1939 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | ||
1940 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1941 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1942 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1943 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1944 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1945 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1946 | { } /* end */ | ||
1947 | }; | ||
1948 | |||
1949 | static const struct snd_kcontrol_new alc883_2ch_fujitsu_pi2515_mixer[] = { | ||
1950 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1951 | HDA_BIND_MUTE("Headphone Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1952 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
1953 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | ||
1954 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1955 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1956 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1957 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1958 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1959 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1960 | { } /* end */ | ||
1961 | }; | ||
1962 | |||
1963 | static const struct snd_kcontrol_new alc883_3ST_2ch_mixer[] = { | ||
1964 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
1965 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
1966 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
1967 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
1968 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
1969 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
1970 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
1971 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
1972 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
1973 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
1974 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
1975 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
1976 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
1977 | { } /* end */ | ||
1978 | }; | ||
1979 | |||
1980 | static const struct snd_kcontrol_new alc883_3ST_6ch_mixer[] = { | 638 | static const struct snd_kcontrol_new alc883_3ST_6ch_mixer[] = { |
1981 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | 639 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), |
1982 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | 640 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), |
@@ -2000,235 +658,6 @@ static const struct snd_kcontrol_new alc883_3ST_6ch_mixer[] = { | |||
2000 | { } /* end */ | 658 | { } /* end */ |
2001 | }; | 659 | }; |
2002 | 660 | ||
2003 | static const struct snd_kcontrol_new alc883_3ST_6ch_intel_mixer[] = { | ||
2004 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2005 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2006 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
2007 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
2008 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, | ||
2009 | HDA_OUTPUT), | ||
2010 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
2011 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
2012 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
2013 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
2014 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2015 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2016 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2017 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2018 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2019 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2020 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2021 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2022 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2023 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2024 | { } /* end */ | ||
2025 | }; | ||
2026 | |||
2027 | static const struct snd_kcontrol_new alc885_8ch_intel_mixer[] = { | ||
2028 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2029 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2030 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
2031 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
2032 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, | ||
2033 | HDA_OUTPUT), | ||
2034 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
2035 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
2036 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
2037 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
2038 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0f, 2, HDA_INPUT), | ||
2039 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
2040 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2041 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2042 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x3, HDA_INPUT), | ||
2043 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x1b, 0, HDA_INPUT), | ||
2044 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x3, HDA_INPUT), | ||
2045 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2046 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2047 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2048 | { } /* end */ | ||
2049 | }; | ||
2050 | |||
2051 | static const struct snd_kcontrol_new alc883_fivestack_mixer[] = { | ||
2052 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2053 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2054 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
2055 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
2056 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | ||
2057 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
2058 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
2059 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
2060 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
2061 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2062 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2063 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2064 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2065 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2066 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2067 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2068 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2069 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2070 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2071 | { } /* end */ | ||
2072 | }; | ||
2073 | |||
2074 | static const struct snd_kcontrol_new alc883_targa_mixer[] = { | ||
2075 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2076 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2077 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
2078 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
2079 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
2080 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
2081 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | ||
2082 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
2083 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
2084 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
2085 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2086 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2087 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2088 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2089 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2090 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2091 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2092 | { } /* end */ | ||
2093 | }; | ||
2094 | |||
2095 | static const struct snd_kcontrol_new alc883_targa_2ch_mixer[] = { | ||
2096 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2097 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2098 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
2099 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
2100 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2101 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2102 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2103 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2104 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2105 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2106 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2107 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2108 | { } /* end */ | ||
2109 | }; | ||
2110 | |||
2111 | static const struct snd_kcontrol_new alc883_targa_8ch_mixer[] = { | ||
2112 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
2113 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | ||
2114 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2115 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2116 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2117 | { } /* end */ | ||
2118 | }; | ||
2119 | |||
2120 | static const struct snd_kcontrol_new alc883_lenovo_101e_2ch_mixer[] = { | ||
2121 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2122 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2123 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
2124 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | ||
2125 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
2126 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2127 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2128 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2129 | { } /* end */ | ||
2130 | }; | ||
2131 | |||
2132 | static const struct snd_kcontrol_new alc883_lenovo_nb0763_mixer[] = { | ||
2133 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2134 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2135 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
2136 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2137 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2138 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2139 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2140 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2141 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2142 | { } /* end */ | ||
2143 | }; | ||
2144 | |||
2145 | static const struct snd_kcontrol_new alc883_medion_wim2160_mixer[] = { | ||
2146 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2147 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2148 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
2149 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1a, 0x0, HDA_OUTPUT), | ||
2150 | HDA_CODEC_VOLUME("Line Playback Volume", 0x08, 0x0, HDA_INPUT), | ||
2151 | HDA_CODEC_MUTE("Line Playback Switch", 0x08, 0x0, HDA_INPUT), | ||
2152 | { } /* end */ | ||
2153 | }; | ||
2154 | |||
2155 | static const struct hda_verb alc883_medion_wim2160_verbs[] = { | ||
2156 | /* Unmute front mixer */ | ||
2157 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2158 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2159 | |||
2160 | /* Set speaker pin to front mixer */ | ||
2161 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2162 | |||
2163 | /* Init headphone pin */ | ||
2164 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2165 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2166 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2167 | {0x1a, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2168 | |||
2169 | { } /* end */ | ||
2170 | }; | ||
2171 | |||
2172 | /* toggle speaker-output according to the hp-jack state */ | ||
2173 | static void alc883_medion_wim2160_setup(struct hda_codec *codec) | ||
2174 | { | ||
2175 | struct alc_spec *spec = codec->spec; | ||
2176 | |||
2177 | spec->autocfg.hp_pins[0] = 0x1a; | ||
2178 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2179 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2180 | } | ||
2181 | |||
2182 | static const struct snd_kcontrol_new alc883_acer_aspire_mixer[] = { | ||
2183 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2184 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2185 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
2186 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2187 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2188 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2189 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2190 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2191 | { } /* end */ | ||
2192 | }; | ||
2193 | |||
2194 | static const struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = { | ||
2195 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2196 | HDA_CODEC_VOLUME("LFE Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
2197 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2198 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2199 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2200 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2201 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2202 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2203 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2204 | { } /* end */ | ||
2205 | }; | ||
2206 | |||
2207 | static const struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = { | ||
2208 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2209 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2210 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0e, 0x0, HDA_OUTPUT), | ||
2211 | HDA_BIND_MUTE("Surround Playback Switch", 0x0e, 2, HDA_INPUT), | ||
2212 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", | ||
2213 | 0x0d, 1, 0x0, HDA_OUTPUT), | ||
2214 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0d, 2, 0x0, HDA_OUTPUT), | ||
2215 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0d, 1, 2, HDA_INPUT), | ||
2216 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0d, 2, 2, HDA_INPUT), | ||
2217 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | ||
2218 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | ||
2219 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
2220 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
2221 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2222 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2223 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2224 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2225 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2226 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2227 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2228 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2229 | { } /* end */ | ||
2230 | }; | ||
2231 | |||
2232 | static const struct snd_kcontrol_new alc889A_mb31_mixer[] = { | 661 | static const struct snd_kcontrol_new alc889A_mb31_mixer[] = { |
2233 | /* Output mixers */ | 662 | /* Output mixers */ |
2234 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x00, HDA_OUTPUT), | 663 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x00, HDA_OUTPUT), |
@@ -2255,61 +684,6 @@ static const struct snd_kcontrol_new alc889A_mb31_mixer[] = { | |||
2255 | { } /* end */ | 684 | { } /* end */ |
2256 | }; | 685 | }; |
2257 | 686 | ||
2258 | static const struct snd_kcontrol_new alc883_vaiott_mixer[] = { | ||
2259 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2260 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2261 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
2262 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | ||
2263 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), | ||
2264 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | ||
2265 | { } /* end */ | ||
2266 | }; | ||
2267 | |||
2268 | static const struct hda_bind_ctls alc883_bind_cap_vol = { | ||
2269 | .ops = &snd_hda_bind_vol, | ||
2270 | .values = { | ||
2271 | HDA_COMPOSE_AMP_VAL(0x08, 3, 0, HDA_INPUT), | ||
2272 | HDA_COMPOSE_AMP_VAL(0x09, 3, 0, HDA_INPUT), | ||
2273 | 0 | ||
2274 | }, | ||
2275 | }; | ||
2276 | |||
2277 | static const struct hda_bind_ctls alc883_bind_cap_switch = { | ||
2278 | .ops = &snd_hda_bind_sw, | ||
2279 | .values = { | ||
2280 | HDA_COMPOSE_AMP_VAL(0x08, 3, 0, HDA_INPUT), | ||
2281 | HDA_COMPOSE_AMP_VAL(0x09, 3, 0, HDA_INPUT), | ||
2282 | 0 | ||
2283 | }, | ||
2284 | }; | ||
2285 | |||
2286 | static const struct snd_kcontrol_new alc883_asus_eee1601_mixer[] = { | ||
2287 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
2288 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
2289 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
2290 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
2291 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
2292 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
2293 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | ||
2294 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
2295 | { } /* end */ | ||
2296 | }; | ||
2297 | |||
2298 | static const struct snd_kcontrol_new alc883_asus_eee1601_cap_mixer[] = { | ||
2299 | HDA_BIND_VOL("Capture Volume", &alc883_bind_cap_vol), | ||
2300 | HDA_BIND_SW("Capture Switch", &alc883_bind_cap_switch), | ||
2301 | { | ||
2302 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
2303 | /* .name = "Capture Source", */ | ||
2304 | .name = "Input Source", | ||
2305 | .count = 1, | ||
2306 | .info = alc_mux_enum_info, | ||
2307 | .get = alc_mux_enum_get, | ||
2308 | .put = alc_mux_enum_put, | ||
2309 | }, | ||
2310 | { } /* end */ | ||
2311 | }; | ||
2312 | |||
2313 | static const struct snd_kcontrol_new alc883_chmode_mixer[] = { | 687 | static const struct snd_kcontrol_new alc883_chmode_mixer[] = { |
2314 | { | 688 | { |
2315 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 689 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
@@ -2321,423 +695,6 @@ static const struct snd_kcontrol_new alc883_chmode_mixer[] = { | |||
2321 | { } /* end */ | 695 | { } /* end */ |
2322 | }; | 696 | }; |
2323 | 697 | ||
2324 | /* toggle speaker-output according to the hp-jack state */ | ||
2325 | static void alc883_mitac_setup(struct hda_codec *codec) | ||
2326 | { | ||
2327 | struct alc_spec *spec = codec->spec; | ||
2328 | |||
2329 | spec->autocfg.hp_pins[0] = 0x15; | ||
2330 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2331 | spec->autocfg.speaker_pins[1] = 0x17; | ||
2332 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2333 | } | ||
2334 | |||
2335 | static const struct hda_verb alc883_mitac_verbs[] = { | ||
2336 | /* HP */ | ||
2337 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2338 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2339 | /* Subwoofer */ | ||
2340 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
2341 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2342 | |||
2343 | /* enable unsolicited event */ | ||
2344 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2345 | /* {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_MIC_EVENT | AC_USRSP_EN}, */ | ||
2346 | |||
2347 | { } /* end */ | ||
2348 | }; | ||
2349 | |||
2350 | static const struct hda_verb alc883_clevo_m540r_verbs[] = { | ||
2351 | /* HP */ | ||
2352 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2353 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2354 | /* Int speaker */ | ||
2355 | /*{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},*/ | ||
2356 | |||
2357 | /* enable unsolicited event */ | ||
2358 | /* | ||
2359 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2360 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_MIC_EVENT | AC_USRSP_EN}, | ||
2361 | */ | ||
2362 | |||
2363 | { } /* end */ | ||
2364 | }; | ||
2365 | |||
2366 | static const struct hda_verb alc883_clevo_m720_verbs[] = { | ||
2367 | /* HP */ | ||
2368 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2369 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2370 | /* Int speaker */ | ||
2371 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
2372 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2373 | |||
2374 | /* enable unsolicited event */ | ||
2375 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2376 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_MIC_EVENT | AC_USRSP_EN}, | ||
2377 | |||
2378 | { } /* end */ | ||
2379 | }; | ||
2380 | |||
2381 | static const struct hda_verb alc883_2ch_fujitsu_pi2515_verbs[] = { | ||
2382 | /* HP */ | ||
2383 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2384 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2385 | /* Subwoofer */ | ||
2386 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
2387 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2388 | |||
2389 | /* enable unsolicited event */ | ||
2390 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2391 | |||
2392 | { } /* end */ | ||
2393 | }; | ||
2394 | |||
2395 | static const struct hda_verb alc883_targa_verbs[] = { | ||
2396 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2397 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2398 | |||
2399 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2400 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2401 | |||
2402 | /* Connect Line-Out side jack (SPDIF) to Side */ | ||
2403 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2404 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2405 | {0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, | ||
2406 | /* Connect Mic jack to CLFE */ | ||
2407 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2408 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2409 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, | ||
2410 | /* Connect Line-in jack to Surround */ | ||
2411 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2412 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2413 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, | ||
2414 | /* Connect HP out jack to Front */ | ||
2415 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2416 | {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2417 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2418 | |||
2419 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2420 | |||
2421 | { } /* end */ | ||
2422 | }; | ||
2423 | |||
2424 | static const struct hda_verb alc883_lenovo_101e_verbs[] = { | ||
2425 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2426 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_FRONT_EVENT|AC_USRSP_EN}, | ||
2427 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT|AC_USRSP_EN}, | ||
2428 | { } /* end */ | ||
2429 | }; | ||
2430 | |||
2431 | static const struct hda_verb alc883_lenovo_nb0763_verbs[] = { | ||
2432 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2433 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2434 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2435 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2436 | { } /* end */ | ||
2437 | }; | ||
2438 | |||
2439 | static const struct hda_verb alc888_lenovo_ms7195_verbs[] = { | ||
2440 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2441 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2442 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2443 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_FRONT_EVENT | AC_USRSP_EN}, | ||
2444 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2445 | { } /* end */ | ||
2446 | }; | ||
2447 | |||
2448 | static const struct hda_verb alc883_haier_w66_verbs[] = { | ||
2449 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2450 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2451 | |||
2452 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2453 | |||
2454 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2455 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2456 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2457 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2458 | { } /* end */ | ||
2459 | }; | ||
2460 | |||
2461 | static const struct hda_verb alc888_lenovo_sky_verbs[] = { | ||
2462 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2463 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2464 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2465 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2466 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2467 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2468 | {0x1a, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2469 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2470 | { } /* end */ | ||
2471 | }; | ||
2472 | |||
2473 | static const struct hda_verb alc888_6st_dell_verbs[] = { | ||
2474 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2475 | { } | ||
2476 | }; | ||
2477 | |||
2478 | static const struct hda_verb alc883_vaiott_verbs[] = { | ||
2479 | /* HP */ | ||
2480 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2481 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2482 | |||
2483 | /* enable unsolicited event */ | ||
2484 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2485 | |||
2486 | { } /* end */ | ||
2487 | }; | ||
2488 | |||
2489 | static void alc888_3st_hp_setup(struct hda_codec *codec) | ||
2490 | { | ||
2491 | struct alc_spec *spec = codec->spec; | ||
2492 | |||
2493 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2494 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2495 | spec->autocfg.speaker_pins[1] = 0x16; | ||
2496 | spec->autocfg.speaker_pins[2] = 0x18; | ||
2497 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2498 | } | ||
2499 | |||
2500 | static const struct hda_verb alc888_3st_hp_verbs[] = { | ||
2501 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front: output 0 (0x0c) */ | ||
2502 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x01}, /* Rear : output 1 (0x0d) */ | ||
2503 | {0x18, AC_VERB_SET_CONNECT_SEL, 0x02}, /* CLFE : output 2 (0x0e) */ | ||
2504 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2505 | { } /* end */ | ||
2506 | }; | ||
2507 | |||
2508 | /* | ||
2509 | * 2ch mode | ||
2510 | */ | ||
2511 | static const struct hda_verb alc888_3st_hp_2ch_init[] = { | ||
2512 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
2513 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
2514 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, | ||
2515 | { 0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
2516 | { } /* end */ | ||
2517 | }; | ||
2518 | |||
2519 | /* | ||
2520 | * 4ch mode | ||
2521 | */ | ||
2522 | static const struct hda_verb alc888_3st_hp_4ch_init[] = { | ||
2523 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, | ||
2524 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, | ||
2525 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
2526 | { 0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
2527 | { 0x16, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
2528 | { } /* end */ | ||
2529 | }; | ||
2530 | |||
2531 | /* | ||
2532 | * 6ch mode | ||
2533 | */ | ||
2534 | static const struct hda_verb alc888_3st_hp_6ch_init[] = { | ||
2535 | { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
2536 | { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
2537 | { 0x18, AC_VERB_SET_CONNECT_SEL, 0x02 }, | ||
2538 | { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, | ||
2539 | { 0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, | ||
2540 | { 0x16, AC_VERB_SET_CONNECT_SEL, 0x01 }, | ||
2541 | { } /* end */ | ||
2542 | }; | ||
2543 | |||
2544 | static const struct hda_channel_mode alc888_3st_hp_modes[3] = { | ||
2545 | { 2, alc888_3st_hp_2ch_init }, | ||
2546 | { 4, alc888_3st_hp_4ch_init }, | ||
2547 | { 6, alc888_3st_hp_6ch_init }, | ||
2548 | }; | ||
2549 | |||
2550 | static void alc888_lenovo_ms7195_setup(struct hda_codec *codec) | ||
2551 | { | ||
2552 | struct alc_spec *spec = codec->spec; | ||
2553 | |||
2554 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2555 | spec->autocfg.line_out_pins[0] = 0x14; | ||
2556 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2557 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2558 | } | ||
2559 | |||
2560 | /* toggle speaker-output according to the hp-jack state */ | ||
2561 | static void alc883_lenovo_nb0763_setup(struct hda_codec *codec) | ||
2562 | { | ||
2563 | struct alc_spec *spec = codec->spec; | ||
2564 | |||
2565 | spec->autocfg.hp_pins[0] = 0x14; | ||
2566 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2567 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2568 | } | ||
2569 | |||
2570 | /* toggle speaker-output according to the hp-jack state */ | ||
2571 | #define alc883_targa_init_hook alc882_targa_init_hook | ||
2572 | #define alc883_targa_unsol_event alc882_targa_unsol_event | ||
2573 | |||
2574 | static void alc883_clevo_m720_setup(struct hda_codec *codec) | ||
2575 | { | ||
2576 | struct alc_spec *spec = codec->spec; | ||
2577 | |||
2578 | spec->autocfg.hp_pins[0] = 0x15; | ||
2579 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2580 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2581 | } | ||
2582 | |||
2583 | static void alc883_clevo_m720_init_hook(struct hda_codec *codec) | ||
2584 | { | ||
2585 | alc_hp_automute(codec); | ||
2586 | alc88x_simple_mic_automute(codec); | ||
2587 | } | ||
2588 | |||
2589 | static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, | ||
2590 | unsigned int res) | ||
2591 | { | ||
2592 | switch (res >> 26) { | ||
2593 | case ALC_MIC_EVENT: | ||
2594 | alc88x_simple_mic_automute(codec); | ||
2595 | break; | ||
2596 | default: | ||
2597 | alc_sku_unsol_event(codec, res); | ||
2598 | break; | ||
2599 | } | ||
2600 | } | ||
2601 | |||
2602 | /* toggle speaker-output according to the hp-jack state */ | ||
2603 | static void alc883_2ch_fujitsu_pi2515_setup(struct hda_codec *codec) | ||
2604 | { | ||
2605 | struct alc_spec *spec = codec->spec; | ||
2606 | |||
2607 | spec->autocfg.hp_pins[0] = 0x14; | ||
2608 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2609 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2610 | } | ||
2611 | |||
2612 | static void alc883_haier_w66_setup(struct hda_codec *codec) | ||
2613 | { | ||
2614 | struct alc_spec *spec = codec->spec; | ||
2615 | |||
2616 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2617 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2618 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2619 | } | ||
2620 | |||
2621 | static void alc883_lenovo_101e_setup(struct hda_codec *codec) | ||
2622 | { | ||
2623 | struct alc_spec *spec = codec->spec; | ||
2624 | |||
2625 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2626 | spec->autocfg.line_out_pins[0] = 0x14; | ||
2627 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2628 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2629 | } | ||
2630 | |||
2631 | /* toggle speaker-output according to the hp-jack state */ | ||
2632 | static void alc883_acer_aspire_setup(struct hda_codec *codec) | ||
2633 | { | ||
2634 | struct alc_spec *spec = codec->spec; | ||
2635 | |||
2636 | spec->autocfg.hp_pins[0] = 0x14; | ||
2637 | spec->autocfg.speaker_pins[0] = 0x15; | ||
2638 | spec->autocfg.speaker_pins[1] = 0x16; | ||
2639 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2640 | } | ||
2641 | |||
2642 | static const struct hda_verb alc883_acer_eapd_verbs[] = { | ||
2643 | /* HP Pin: output 0 (0x0c) */ | ||
2644 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2645 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
2646 | {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2647 | /* Front Pin: output 0 (0x0c) */ | ||
2648 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2649 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2650 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2651 | {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
2652 | /* eanable EAPD on medion laptop */ | ||
2653 | {0x20, AC_VERB_SET_COEF_INDEX, 0x07}, | ||
2654 | {0x20, AC_VERB_SET_PROC_COEF, 0x3050}, | ||
2655 | /* enable unsolicited event */ | ||
2656 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2657 | { } | ||
2658 | }; | ||
2659 | |||
2660 | static void alc888_6st_dell_setup(struct hda_codec *codec) | ||
2661 | { | ||
2662 | struct alc_spec *spec = codec->spec; | ||
2663 | |||
2664 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2665 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2666 | spec->autocfg.speaker_pins[1] = 0x15; | ||
2667 | spec->autocfg.speaker_pins[2] = 0x16; | ||
2668 | spec->autocfg.speaker_pins[3] = 0x17; | ||
2669 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2670 | } | ||
2671 | |||
2672 | static void alc888_lenovo_sky_setup(struct hda_codec *codec) | ||
2673 | { | ||
2674 | struct alc_spec *spec = codec->spec; | ||
2675 | |||
2676 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2677 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2678 | spec->autocfg.speaker_pins[1] = 0x15; | ||
2679 | spec->autocfg.speaker_pins[2] = 0x16; | ||
2680 | spec->autocfg.speaker_pins[3] = 0x17; | ||
2681 | spec->autocfg.speaker_pins[4] = 0x1a; | ||
2682 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2683 | } | ||
2684 | |||
2685 | static void alc883_vaiott_setup(struct hda_codec *codec) | ||
2686 | { | ||
2687 | struct alc_spec *spec = codec->spec; | ||
2688 | |||
2689 | spec->autocfg.hp_pins[0] = 0x15; | ||
2690 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2691 | spec->autocfg.speaker_pins[1] = 0x17; | ||
2692 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2693 | } | ||
2694 | |||
2695 | static const struct hda_verb alc888_asus_m90v_verbs[] = { | ||
2696 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
2697 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
2698 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
2699 | /* enable unsolicited event */ | ||
2700 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2701 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_MIC_EVENT | AC_USRSP_EN}, | ||
2702 | { } /* end */ | ||
2703 | }; | ||
2704 | |||
2705 | static void alc883_mode2_setup(struct hda_codec *codec) | ||
2706 | { | ||
2707 | struct alc_spec *spec = codec->spec; | ||
2708 | |||
2709 | spec->autocfg.hp_pins[0] = 0x1b; | ||
2710 | spec->autocfg.speaker_pins[0] = 0x14; | ||
2711 | spec->autocfg.speaker_pins[1] = 0x15; | ||
2712 | spec->autocfg.speaker_pins[2] = 0x16; | ||
2713 | spec->ext_mic_pin = 0x18; | ||
2714 | spec->int_mic_pin = 0x19; | ||
2715 | spec->auto_mic = 1; | ||
2716 | alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP); | ||
2717 | } | ||
2718 | |||
2719 | static const struct hda_verb alc888_asus_eee1601_verbs[] = { | ||
2720 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
2721 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
2722 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
2723 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
2724 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, | ||
2725 | {0x20, AC_VERB_SET_COEF_INDEX, 0x0b}, | ||
2726 | {0x20, AC_VERB_SET_PROC_COEF, 0x0838}, | ||
2727 | /* enable unsolicited event */ | ||
2728 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN}, | ||
2729 | { } /* end */ | ||
2730 | }; | ||
2731 | |||
2732 | static void alc883_eee1601_inithook(struct hda_codec *codec) | ||
2733 | { | ||
2734 | struct alc_spec *spec = codec->spec; | ||
2735 | |||
2736 | spec->autocfg.hp_pins[0] = 0x14; | ||
2737 | spec->autocfg.speaker_pins[0] = 0x1b; | ||
2738 | alc_hp_automute(codec); | ||
2739 | } | ||
2740 | |||
2741 | static const struct hda_verb alc889A_mb31_verbs[] = { | 698 | static const struct hda_verb alc889A_mb31_verbs[] = { |
2742 | /* Init rear pin (used as headphone output) */ | 699 | /* Init rear pin (used as headphone output) */ |
2743 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc4}, /* Apple Headphones */ | 700 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc4}, /* Apple Headphones */ |
@@ -2773,211 +730,30 @@ static void alc889A_mb31_unsol_event(struct hda_codec *codec, unsigned int res) | |||
2773 | alc889A_mb31_automute(codec); | 730 | alc889A_mb31_automute(codec); |
2774 | } | 731 | } |
2775 | 732 | ||
2776 | static const hda_nid_t alc883_slave_dig_outs[] = { | ||
2777 | ALC1200_DIGOUT_NID, 0, | ||
2778 | }; | ||
2779 | |||
2780 | static const hda_nid_t alc1200_slave_dig_outs[] = { | ||
2781 | ALC883_DIGOUT_NID, 0, | ||
2782 | }; | ||
2783 | |||
2784 | /* | 733 | /* |
2785 | * configuration and preset | 734 | * configuration and preset |
2786 | */ | 735 | */ |
2787 | static const char * const alc882_models[ALC882_MODEL_LAST] = { | 736 | static const char * const alc882_models[ALC882_MODEL_LAST] = { |
2788 | [ALC882_3ST_DIG] = "3stack-dig", | ||
2789 | [ALC882_6ST_DIG] = "6stack-dig", | ||
2790 | [ALC882_ARIMA] = "arima", | ||
2791 | [ALC882_W2JC] = "w2jc", | ||
2792 | [ALC882_TARGA] = "targa", | ||
2793 | [ALC882_ASUS_A7J] = "asus-a7j", | ||
2794 | [ALC882_ASUS_A7M] = "asus-a7m", | ||
2795 | [ALC885_MACPRO] = "macpro", | ||
2796 | [ALC885_MB5] = "mb5", | 737 | [ALC885_MB5] = "mb5", |
2797 | [ALC885_MACMINI3] = "macmini3", | 738 | [ALC885_MACMINI3] = "macmini3", |
2798 | [ALC885_MBA21] = "mba21", | 739 | [ALC885_MBA21] = "mba21", |
2799 | [ALC885_MBP3] = "mbp3", | 740 | [ALC885_MBP3] = "mbp3", |
2800 | [ALC885_IMAC24] = "imac24", | ||
2801 | [ALC885_IMAC91] = "imac91", | 741 | [ALC885_IMAC91] = "imac91", |
2802 | [ALC883_3ST_2ch_DIG] = "3stack-2ch-dig", | ||
2803 | [ALC883_3ST_6ch_DIG] = "3stack-6ch-dig", | ||
2804 | [ALC883_3ST_6ch] = "3stack-6ch", | ||
2805 | [ALC883_6ST_DIG] = "alc883-6stack-dig", | ||
2806 | [ALC883_TARGA_DIG] = "targa-dig", | ||
2807 | [ALC883_TARGA_2ch_DIG] = "targa-2ch-dig", | ||
2808 | [ALC883_TARGA_8ch_DIG] = "targa-8ch-dig", | ||
2809 | [ALC883_ACER] = "acer", | ||
2810 | [ALC883_ACER_ASPIRE] = "acer-aspire", | ||
2811 | [ALC888_ACER_ASPIRE_4930G] = "acer-aspire-4930g", | ||
2812 | [ALC888_ACER_ASPIRE_6530G] = "acer-aspire-6530g", | ||
2813 | [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g", | ||
2814 | [ALC888_ACER_ASPIRE_7730G] = "acer-aspire-7730g", | ||
2815 | [ALC883_MEDION] = "medion", | ||
2816 | [ALC883_MEDION_WIM2160] = "medion-wim2160", | ||
2817 | [ALC883_LAPTOP_EAPD] = "laptop-eapd", | ||
2818 | [ALC883_LENOVO_101E_2ch] = "lenovo-101e", | ||
2819 | [ALC883_LENOVO_NB0763] = "lenovo-nb0763", | ||
2820 | [ALC888_LENOVO_MS7195_DIG] = "lenovo-ms7195-dig", | ||
2821 | [ALC888_LENOVO_SKY] = "lenovo-sky", | ||
2822 | [ALC883_HAIER_W66] = "haier-w66", | ||
2823 | [ALC888_3ST_HP] = "3stack-hp", | ||
2824 | [ALC888_6ST_DELL] = "6stack-dell", | ||
2825 | [ALC883_MITAC] = "mitac", | ||
2826 | [ALC883_CLEVO_M540R] = "clevo-m540r", | ||
2827 | [ALC883_CLEVO_M720] = "clevo-m720", | ||
2828 | [ALC883_FUJITSU_PI2515] = "fujitsu-pi2515", | ||
2829 | [ALC888_FUJITSU_XA3530] = "fujitsu-xa3530", | ||
2830 | [ALC883_3ST_6ch_INTEL] = "3stack-6ch-intel", | ||
2831 | [ALC889A_INTEL] = "intel-alc889a", | ||
2832 | [ALC889_INTEL] = "intel-x58", | ||
2833 | [ALC1200_ASUS_P5Q] = "asus-p5q", | ||
2834 | [ALC889A_MB31] = "mb31", | 742 | [ALC889A_MB31] = "mb31", |
2835 | [ALC883_SONY_VAIO_TT] = "sony-vaio-tt", | ||
2836 | [ALC882_AUTO] = "auto", | 743 | [ALC882_AUTO] = "auto", |
2837 | }; | 744 | }; |
2838 | 745 | ||
2839 | static const struct snd_pci_quirk alc882_cfg_tbl[] = { | ||
2840 | SND_PCI_QUIRK(0x1019, 0x6668, "ECS", ALC882_6ST_DIG), | ||
2841 | |||
2842 | SND_PCI_QUIRK(0x1025, 0x006c, "Acer Aspire 9810", ALC883_ACER_ASPIRE), | ||
2843 | SND_PCI_QUIRK(0x1025, 0x0090, "Acer Aspire", ALC883_ACER_ASPIRE), | ||
2844 | SND_PCI_QUIRK(0x1025, 0x010a, "Acer Ferrari 5000", ALC883_ACER_ASPIRE), | ||
2845 | SND_PCI_QUIRK(0x1025, 0x0110, "Acer Aspire", ALC883_ACER_ASPIRE), | ||
2846 | SND_PCI_QUIRK(0x1025, 0x0112, "Acer Aspire 9303", ALC883_ACER_ASPIRE), | ||
2847 | SND_PCI_QUIRK(0x1025, 0x0121, "Acer Aspire 5920G", ALC883_ACER_ASPIRE), | ||
2848 | SND_PCI_QUIRK(0x1025, 0x013e, "Acer Aspire 4930G", | ||
2849 | ALC888_ACER_ASPIRE_4930G), | ||
2850 | SND_PCI_QUIRK(0x1025, 0x013f, "Acer Aspire 5930G", | ||
2851 | ALC888_ACER_ASPIRE_4930G), | ||
2852 | SND_PCI_QUIRK(0x1025, 0x0145, "Acer Aspire 8930G", | ||
2853 | ALC888_ACER_ASPIRE_8930G), | ||
2854 | SND_PCI_QUIRK(0x1025, 0x0146, "Acer Aspire 6935G", | ||
2855 | ALC888_ACER_ASPIRE_8930G), | ||
2856 | SND_PCI_QUIRK(0x1025, 0x0157, "Acer X3200", ALC882_AUTO), | ||
2857 | SND_PCI_QUIRK(0x1025, 0x0158, "Acer AX1700-U3700A", ALC882_AUTO), | ||
2858 | SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G", | ||
2859 | ALC888_ACER_ASPIRE_6530G), | ||
2860 | SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G", | ||
2861 | ALC888_ACER_ASPIRE_6530G), | ||
2862 | SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G", | ||
2863 | ALC888_ACER_ASPIRE_7730G), | ||
2864 | /* default Acer -- disabled as it causes more problems. | ||
2865 | * model=auto should work fine now | ||
2866 | */ | ||
2867 | /* SND_PCI_QUIRK_VENDOR(0x1025, "Acer laptop", ALC883_ACER), */ | ||
2868 | |||
2869 | SND_PCI_QUIRK(0x1028, 0x020d, "Dell Inspiron 530", ALC888_6ST_DELL), | ||
2870 | |||
2871 | SND_PCI_QUIRK(0x103c, 0x2a3d, "HP Pavilion", ALC883_6ST_DIG), | ||
2872 | SND_PCI_QUIRK(0x103c, 0x2a4f, "HP Samba", ALC888_3ST_HP), | ||
2873 | SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), | ||
2874 | SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), | ||
2875 | SND_PCI_QUIRK(0x103c, 0x2a66, "HP Acacia", ALC888_3ST_HP), | ||
2876 | SND_PCI_QUIRK(0x103c, 0x2a72, "HP Educ.ar", ALC888_3ST_HP), | ||
2877 | |||
2878 | SND_PCI_QUIRK(0x1043, 0x060d, "Asus A7J", ALC882_ASUS_A7J), | ||
2879 | SND_PCI_QUIRK(0x1043, 0x1243, "Asus A7J", ALC882_ASUS_A7J), | ||
2880 | SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_ASUS_A7M), | ||
2881 | SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V), | ||
2882 | SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_W2JC), | ||
2883 | SND_PCI_QUIRK(0x1043, 0x817f, "Asus P5LD2", ALC882_6ST_DIG), | ||
2884 | SND_PCI_QUIRK(0x1043, 0x81d8, "Asus P5WD", ALC882_6ST_DIG), | ||
2885 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), | ||
2886 | SND_PCI_QUIRK(0x1043, 0x8284, "Asus Z37E", ALC883_6ST_DIG), | ||
2887 | SND_PCI_QUIRK(0x1043, 0x82fe, "Asus P5Q-EM HDMI", ALC1200_ASUS_P5Q), | ||
2888 | SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601), | ||
2889 | |||
2890 | SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC883_SONY_VAIO_TT), | ||
2891 | SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), | ||
2892 | SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC882_6ST_DIG), | ||
2893 | SND_PCI_QUIRK(0x1071, 0x8227, "Mitac 82801H", ALC883_MITAC), | ||
2894 | SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC), | ||
2895 | SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD), | ||
2896 | SND_PCI_QUIRK(0x10f1, 0x2350, "TYAN-S2350", ALC888_6ST_DELL), | ||
2897 | SND_PCI_QUIRK(0x108e, 0x534d, NULL, ALC883_3ST_6ch), | ||
2898 | SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte P35 DS3R", ALC882_6ST_DIG), | ||
2899 | |||
2900 | SND_PCI_QUIRK(0x1462, 0x0349, "MSI", ALC883_TARGA_2ch_DIG), | ||
2901 | SND_PCI_QUIRK(0x1462, 0x040d, "MSI", ALC883_TARGA_2ch_DIG), | ||
2902 | SND_PCI_QUIRK(0x1462, 0x0579, "MSI", ALC883_TARGA_2ch_DIG), | ||
2903 | SND_PCI_QUIRK(0x1462, 0x28fb, "Targa T8", ALC882_TARGA), /* MSI-1049 T8 */ | ||
2904 | SND_PCI_QUIRK(0x1462, 0x2fb3, "MSI", ALC882_AUTO), | ||
2905 | SND_PCI_QUIRK(0x1462, 0x6668, "MSI", ALC882_6ST_DIG), | ||
2906 | SND_PCI_QUIRK(0x1462, 0x3729, "MSI S420", ALC883_TARGA_DIG), | ||
2907 | SND_PCI_QUIRK(0x1462, 0x3783, "NEC S970", ALC883_TARGA_DIG), | ||
2908 | SND_PCI_QUIRK(0x1462, 0x3b7f, "MSI", ALC883_TARGA_2ch_DIG), | ||
2909 | SND_PCI_QUIRK(0x1462, 0x3ef9, "MSI", ALC883_TARGA_DIG), | ||
2910 | SND_PCI_QUIRK(0x1462, 0x3fc1, "MSI", ALC883_TARGA_DIG), | ||
2911 | SND_PCI_QUIRK(0x1462, 0x3fc3, "MSI", ALC883_TARGA_DIG), | ||
2912 | SND_PCI_QUIRK(0x1462, 0x3fcc, "MSI", ALC883_TARGA_DIG), | ||
2913 | SND_PCI_QUIRK(0x1462, 0x3fdf, "MSI", ALC883_TARGA_DIG), | ||
2914 | SND_PCI_QUIRK(0x1462, 0x42cd, "MSI", ALC883_TARGA_DIG), | ||
2915 | SND_PCI_QUIRK(0x1462, 0x4314, "MSI", ALC883_TARGA_DIG), | ||
2916 | SND_PCI_QUIRK(0x1462, 0x4319, "MSI", ALC883_TARGA_DIG), | ||
2917 | SND_PCI_QUIRK(0x1462, 0x4324, "MSI", ALC883_TARGA_DIG), | ||
2918 | SND_PCI_QUIRK(0x1462, 0x4570, "MSI Wind Top AE2220", ALC883_TARGA_DIG), | ||
2919 | SND_PCI_QUIRK(0x1462, 0x6510, "MSI GX620", ALC883_TARGA_8ch_DIG), | ||
2920 | SND_PCI_QUIRK(0x1462, 0x6668, "MSI", ALC883_6ST_DIG), | ||
2921 | SND_PCI_QUIRK(0x1462, 0x7187, "MSI", ALC883_6ST_DIG), | ||
2922 | SND_PCI_QUIRK(0x1462, 0x7250, "MSI", ALC883_6ST_DIG), | ||
2923 | SND_PCI_QUIRK(0x1462, 0x7260, "MSI 7260", ALC883_TARGA_DIG), | ||
2924 | SND_PCI_QUIRK(0x1462, 0x7267, "MSI", ALC883_3ST_6ch_DIG), | ||
2925 | SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG), | ||
2926 | SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG), | ||
2927 | SND_PCI_QUIRK(0x1462, 0x7350, "MSI", ALC883_6ST_DIG), | ||
2928 | SND_PCI_QUIRK(0x1462, 0x7437, "MSI NetOn AP1900", ALC883_TARGA_DIG), | ||
2929 | SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG), | ||
2930 | SND_PCI_QUIRK(0x1462, 0xaa08, "MSI", ALC883_TARGA_2ch_DIG), | ||
2931 | |||
2932 | SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG), | ||
2933 | SND_PCI_QUIRK(0x1558, 0x0571, "Clevo laptop M570U", ALC883_3ST_6ch_DIG), | ||
2934 | SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720), | ||
2935 | SND_PCI_QUIRK(0x1558, 0x0722, "Clevo laptop M720SR", ALC883_CLEVO_M720), | ||
2936 | SND_PCI_QUIRK(0x1558, 0x5409, "Clevo laptop M540R", ALC883_CLEVO_M540R), | ||
2937 | SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC883_LAPTOP_EAPD), | ||
2938 | SND_PCI_QUIRK(0x15d9, 0x8780, "Supermicro PDSBA", ALC883_3ST_6ch), | ||
2939 | /* SND_PCI_QUIRK(0x161f, 0x2054, "Arima W820", ALC882_ARIMA), */ | ||
2940 | SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_MEDION), | ||
2941 | SND_PCI_QUIRK_MASK(0x1734, 0xfff0, 0x1100, "FSC AMILO Xi/Pi25xx", | ||
2942 | ALC883_FUJITSU_PI2515), | ||
2943 | SND_PCI_QUIRK_MASK(0x1734, 0xfff0, 0x1130, "Fujitsu AMILO Xa35xx", | ||
2944 | ALC888_FUJITSU_XA3530), | ||
2945 | SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo 101e", ALC883_LENOVO_101E_2ch), | ||
2946 | SND_PCI_QUIRK(0x17aa, 0x2085, "Lenovo NB0763", ALC883_LENOVO_NB0763), | ||
2947 | SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763), | ||
2948 | SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763), | ||
2949 | SND_PCI_QUIRK(0x17aa, 0x101d, "Lenovo Sky", ALC888_LENOVO_SKY), | ||
2950 | SND_PCI_QUIRK(0x17c0, 0x4085, "MEDION MD96630", ALC888_LENOVO_MS7195_DIG), | ||
2951 | SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG), | ||
2952 | SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66), | ||
2953 | |||
2954 | SND_PCI_QUIRK(0x8086, 0x0001, "DG33BUC", ALC883_3ST_6ch_INTEL), | ||
2955 | SND_PCI_QUIRK(0x8086, 0x0002, "DG33FBC", ALC883_3ST_6ch_INTEL), | ||
2956 | SND_PCI_QUIRK(0x8086, 0x2503, "82801H", ALC883_MITAC), | ||
2957 | SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_INTEL), | ||
2958 | SND_PCI_QUIRK(0x8086, 0x0021, "Intel IbexPeak", ALC889A_INTEL), | ||
2959 | SND_PCI_QUIRK(0x8086, 0x3b56, "Intel IbexPeak", ALC889A_INTEL), | ||
2960 | SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC882_6ST_DIG), | ||
2961 | |||
2962 | {} | ||
2963 | }; | ||
2964 | |||
2965 | /* codec SSID table for Intel Mac */ | 746 | /* codec SSID table for Intel Mac */ |
2966 | static const struct snd_pci_quirk alc882_ssid_cfg_tbl[] = { | 747 | static const struct snd_pci_quirk alc882_ssid_cfg_tbl[] = { |
2967 | SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC885_MBP3), | 748 | SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC885_MBP3), |
2968 | SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC885_MBP3), | 749 | SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC885_MBP3), |
2969 | SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC885_MBP3), | 750 | SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC885_MBP3), |
2970 | SND_PCI_QUIRK(0x106b, 0x0c00, "Mac Pro", ALC885_MACPRO), | ||
2971 | SND_PCI_QUIRK(0x106b, 0x1000, "iMac 24", ALC885_IMAC24), | ||
2972 | SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_IMAC24), | ||
2973 | SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC885_MBP3), | 751 | SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC885_MBP3), |
2974 | SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889A_MB31), | 752 | SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889A_MB31), |
2975 | SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_ASUS_A7M), | ||
2976 | SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC885_MBP3), | 753 | SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC885_MBP3), |
2977 | SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC885_MBA21), | 754 | SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC885_MBA21), |
2978 | SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889A_MB31), | 755 | SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889A_MB31), |
2979 | SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC885_MBP3), | 756 | SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC885_MBP3), |
2980 | SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_IMAC24), | ||
2981 | SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC885_IMAC91), | 757 | SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC885_IMAC91), |
2982 | SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5), | 758 | SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5), |
2983 | SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC885_MB5), | 759 | SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC885_MB5), |
@@ -2991,53 +767,6 @@ static const struct snd_pci_quirk alc882_ssid_cfg_tbl[] = { | |||
2991 | }; | 767 | }; |
2992 | 768 | ||
2993 | static const struct alc_config_preset alc882_presets[] = { | 769 | static const struct alc_config_preset alc882_presets[] = { |
2994 | [ALC882_3ST_DIG] = { | ||
2995 | .mixers = { alc882_base_mixer }, | ||
2996 | .init_verbs = { alc882_base_init_verbs, | ||
2997 | alc882_adc1_init_verbs }, | ||
2998 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
2999 | .dac_nids = alc882_dac_nids, | ||
3000 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3001 | .dig_in_nid = ALC882_DIGIN_NID, | ||
3002 | .num_channel_mode = ARRAY_SIZE(alc882_ch_modes), | ||
3003 | .channel_mode = alc882_ch_modes, | ||
3004 | .need_dac_fix = 1, | ||
3005 | .input_mux = &alc882_capture_source, | ||
3006 | }, | ||
3007 | [ALC882_6ST_DIG] = { | ||
3008 | .mixers = { alc882_base_mixer, alc882_chmode_mixer }, | ||
3009 | .init_verbs = { alc882_base_init_verbs, | ||
3010 | alc882_adc1_init_verbs }, | ||
3011 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3012 | .dac_nids = alc882_dac_nids, | ||
3013 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3014 | .dig_in_nid = ALC882_DIGIN_NID, | ||
3015 | .num_channel_mode = ARRAY_SIZE(alc882_sixstack_modes), | ||
3016 | .channel_mode = alc882_sixstack_modes, | ||
3017 | .input_mux = &alc882_capture_source, | ||
3018 | }, | ||
3019 | [ALC882_ARIMA] = { | ||
3020 | .mixers = { alc882_base_mixer, alc882_chmode_mixer }, | ||
3021 | .init_verbs = { alc882_base_init_verbs, alc882_adc1_init_verbs, | ||
3022 | alc882_eapd_verbs }, | ||
3023 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3024 | .dac_nids = alc882_dac_nids, | ||
3025 | .num_channel_mode = ARRAY_SIZE(alc882_sixstack_modes), | ||
3026 | .channel_mode = alc882_sixstack_modes, | ||
3027 | .input_mux = &alc882_capture_source, | ||
3028 | }, | ||
3029 | [ALC882_W2JC] = { | ||
3030 | .mixers = { alc882_w2jc_mixer, alc882_chmode_mixer }, | ||
3031 | .init_verbs = { alc882_base_init_verbs, alc882_adc1_init_verbs, | ||
3032 | alc882_eapd_verbs, alc880_gpio1_init_verbs }, | ||
3033 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3034 | .dac_nids = alc882_dac_nids, | ||
3035 | .num_channel_mode = ARRAY_SIZE(alc880_threestack_modes), | ||
3036 | .channel_mode = alc880_threestack_modes, | ||
3037 | .need_dac_fix = 1, | ||
3038 | .input_mux = &alc882_capture_source, | ||
3039 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3040 | }, | ||
3041 | [ALC885_MBA21] = { | 770 | [ALC885_MBA21] = { |
3042 | .mixers = { alc885_mba21_mixer }, | 771 | .mixers = { alc885_mba21_mixer }, |
3043 | .init_verbs = { alc885_mba21_init_verbs, alc880_gpio1_init_verbs }, | 772 | .init_verbs = { alc885_mba21_init_verbs, alc880_gpio1_init_verbs }, |
@@ -3096,32 +825,6 @@ static const struct alc_config_preset alc882_presets[] = { | |||
3096 | .setup = alc885_macmini3_setup, | 825 | .setup = alc885_macmini3_setup, |
3097 | .init_hook = alc_hp_automute, | 826 | .init_hook = alc_hp_automute, |
3098 | }, | 827 | }, |
3099 | [ALC885_MACPRO] = { | ||
3100 | .mixers = { alc882_macpro_mixer }, | ||
3101 | .init_verbs = { alc882_macpro_init_verbs }, | ||
3102 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3103 | .dac_nids = alc882_dac_nids, | ||
3104 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3105 | .dig_in_nid = ALC882_DIGIN_NID, | ||
3106 | .num_channel_mode = ARRAY_SIZE(alc882_ch_modes), | ||
3107 | .channel_mode = alc882_ch_modes, | ||
3108 | .input_mux = &alc882_capture_source, | ||
3109 | .init_hook = alc885_macpro_init_hook, | ||
3110 | }, | ||
3111 | [ALC885_IMAC24] = { | ||
3112 | .mixers = { alc885_imac24_mixer }, | ||
3113 | .init_verbs = { alc885_imac24_init_verbs }, | ||
3114 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3115 | .dac_nids = alc882_dac_nids, | ||
3116 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3117 | .dig_in_nid = ALC882_DIGIN_NID, | ||
3118 | .num_channel_mode = ARRAY_SIZE(alc882_ch_modes), | ||
3119 | .channel_mode = alc882_ch_modes, | ||
3120 | .input_mux = &alc882_capture_source, | ||
3121 | .unsol_event = alc_sku_unsol_event, | ||
3122 | .setup = alc885_imac24_setup, | ||
3123 | .init_hook = alc885_imac24_init_hook, | ||
3124 | }, | ||
3125 | [ALC885_IMAC91] = { | 828 | [ALC885_IMAC91] = { |
3126 | .mixers = {alc885_imac91_mixer}, | 829 | .mixers = {alc885_imac91_mixer}, |
3127 | .init_verbs = { alc885_imac91_init_verbs, | 830 | .init_verbs = { alc885_imac91_init_verbs, |
@@ -3137,564 +840,6 @@ static const struct alc_config_preset alc882_presets[] = { | |||
3137 | .setup = alc885_imac91_setup, | 840 | .setup = alc885_imac91_setup, |
3138 | .init_hook = alc_hp_automute, | 841 | .init_hook = alc_hp_automute, |
3139 | }, | 842 | }, |
3140 | [ALC882_TARGA] = { | ||
3141 | .mixers = { alc882_targa_mixer, alc882_chmode_mixer }, | ||
3142 | .init_verbs = { alc882_base_init_verbs, alc882_adc1_init_verbs, | ||
3143 | alc880_gpio3_init_verbs, alc882_targa_verbs}, | ||
3144 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3145 | .dac_nids = alc882_dac_nids, | ||
3146 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3147 | .num_adc_nids = ARRAY_SIZE(alc882_adc_nids), | ||
3148 | .adc_nids = alc882_adc_nids, | ||
3149 | .capsrc_nids = alc882_capsrc_nids, | ||
3150 | .num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes), | ||
3151 | .channel_mode = alc882_3ST_6ch_modes, | ||
3152 | .need_dac_fix = 1, | ||
3153 | .input_mux = &alc882_capture_source, | ||
3154 | .unsol_event = alc_sku_unsol_event, | ||
3155 | .setup = alc882_targa_setup, | ||
3156 | .init_hook = alc882_targa_automute, | ||
3157 | }, | ||
3158 | [ALC882_ASUS_A7J] = { | ||
3159 | .mixers = { alc882_asus_a7j_mixer, alc882_chmode_mixer }, | ||
3160 | .init_verbs = { alc882_base_init_verbs, alc882_adc1_init_verbs, | ||
3161 | alc882_asus_a7j_verbs}, | ||
3162 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3163 | .dac_nids = alc882_dac_nids, | ||
3164 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3165 | .num_adc_nids = ARRAY_SIZE(alc882_adc_nids), | ||
3166 | .adc_nids = alc882_adc_nids, | ||
3167 | .capsrc_nids = alc882_capsrc_nids, | ||
3168 | .num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes), | ||
3169 | .channel_mode = alc882_3ST_6ch_modes, | ||
3170 | .need_dac_fix = 1, | ||
3171 | .input_mux = &alc882_capture_source, | ||
3172 | }, | ||
3173 | [ALC882_ASUS_A7M] = { | ||
3174 | .mixers = { alc882_asus_a7m_mixer, alc882_chmode_mixer }, | ||
3175 | .init_verbs = { alc882_base_init_verbs, alc882_adc1_init_verbs, | ||
3176 | alc882_eapd_verbs, alc880_gpio1_init_verbs, | ||
3177 | alc882_asus_a7m_verbs }, | ||
3178 | .num_dacs = ARRAY_SIZE(alc882_dac_nids), | ||
3179 | .dac_nids = alc882_dac_nids, | ||
3180 | .dig_out_nid = ALC882_DIGOUT_NID, | ||
3181 | .num_channel_mode = ARRAY_SIZE(alc880_threestack_modes), | ||
3182 | .channel_mode = alc880_threestack_modes, | ||
3183 | .need_dac_fix = 1, | ||
3184 | .input_mux = &alc882_capture_source, | ||
3185 | }, | ||
3186 | [ALC883_3ST_2ch_DIG] = { | ||
3187 | .mixers = { alc883_3ST_2ch_mixer }, | ||
3188 | .init_verbs = { alc883_init_verbs }, | ||
3189 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3190 | .dac_nids = alc883_dac_nids, | ||
3191 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3192 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3193 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3194 | .channel_mode = alc883_3ST_2ch_modes, | ||
3195 | .input_mux = &alc883_capture_source, | ||
3196 | }, | ||
3197 | [ALC883_3ST_6ch_DIG] = { | ||
3198 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3199 | .init_verbs = { alc883_init_verbs }, | ||
3200 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3201 | .dac_nids = alc883_dac_nids, | ||
3202 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3203 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3204 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3205 | .channel_mode = alc883_3ST_6ch_modes, | ||
3206 | .need_dac_fix = 1, | ||
3207 | .input_mux = &alc883_capture_source, | ||
3208 | }, | ||
3209 | [ALC883_3ST_6ch] = { | ||
3210 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3211 | .init_verbs = { alc883_init_verbs }, | ||
3212 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3213 | .dac_nids = alc883_dac_nids, | ||
3214 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3215 | .channel_mode = alc883_3ST_6ch_modes, | ||
3216 | .need_dac_fix = 1, | ||
3217 | .input_mux = &alc883_capture_source, | ||
3218 | }, | ||
3219 | [ALC883_3ST_6ch_INTEL] = { | ||
3220 | .mixers = { alc883_3ST_6ch_intel_mixer, alc883_chmode_mixer }, | ||
3221 | .init_verbs = { alc883_init_verbs }, | ||
3222 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3223 | .dac_nids = alc883_dac_nids, | ||
3224 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3225 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3226 | .slave_dig_outs = alc883_slave_dig_outs, | ||
3227 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_intel_modes), | ||
3228 | .channel_mode = alc883_3ST_6ch_intel_modes, | ||
3229 | .need_dac_fix = 1, | ||
3230 | .input_mux = &alc883_3stack_6ch_intel, | ||
3231 | }, | ||
3232 | [ALC889A_INTEL] = { | ||
3233 | .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, | ||
3234 | .init_verbs = { alc885_init_verbs, alc885_init_input_verbs, | ||
3235 | alc_hp15_unsol_verbs }, | ||
3236 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3237 | .dac_nids = alc883_dac_nids, | ||
3238 | .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), | ||
3239 | .adc_nids = alc889_adc_nids, | ||
3240 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3241 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3242 | .slave_dig_outs = alc883_slave_dig_outs, | ||
3243 | .num_channel_mode = ARRAY_SIZE(alc889_8ch_intel_modes), | ||
3244 | .channel_mode = alc889_8ch_intel_modes, | ||
3245 | .capsrc_nids = alc889_capsrc_nids, | ||
3246 | .input_mux = &alc889_capture_source, | ||
3247 | .setup = alc889_automute_setup, | ||
3248 | .init_hook = alc_hp_automute, | ||
3249 | .unsol_event = alc_sku_unsol_event, | ||
3250 | .need_dac_fix = 1, | ||
3251 | }, | ||
3252 | [ALC889_INTEL] = { | ||
3253 | .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, | ||
3254 | .init_verbs = { alc885_init_verbs, alc889_init_input_verbs, | ||
3255 | alc889_eapd_verbs, alc_hp15_unsol_verbs}, | ||
3256 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3257 | .dac_nids = alc883_dac_nids, | ||
3258 | .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), | ||
3259 | .adc_nids = alc889_adc_nids, | ||
3260 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3261 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3262 | .slave_dig_outs = alc883_slave_dig_outs, | ||
3263 | .num_channel_mode = ARRAY_SIZE(alc889_8ch_intel_modes), | ||
3264 | .channel_mode = alc889_8ch_intel_modes, | ||
3265 | .capsrc_nids = alc889_capsrc_nids, | ||
3266 | .input_mux = &alc889_capture_source, | ||
3267 | .setup = alc889_automute_setup, | ||
3268 | .init_hook = alc889_intel_init_hook, | ||
3269 | .unsol_event = alc_sku_unsol_event, | ||
3270 | .need_dac_fix = 1, | ||
3271 | }, | ||
3272 | [ALC883_6ST_DIG] = { | ||
3273 | .mixers = { alc883_base_mixer, alc883_chmode_mixer }, | ||
3274 | .init_verbs = { alc883_init_verbs }, | ||
3275 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3276 | .dac_nids = alc883_dac_nids, | ||
3277 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3278 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3279 | .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), | ||
3280 | .channel_mode = alc883_sixstack_modes, | ||
3281 | .input_mux = &alc883_capture_source, | ||
3282 | }, | ||
3283 | [ALC883_TARGA_DIG] = { | ||
3284 | .mixers = { alc883_targa_mixer, alc883_chmode_mixer }, | ||
3285 | .init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs, | ||
3286 | alc883_targa_verbs}, | ||
3287 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3288 | .dac_nids = alc883_dac_nids, | ||
3289 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3290 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3291 | .channel_mode = alc883_3ST_6ch_modes, | ||
3292 | .need_dac_fix = 1, | ||
3293 | .input_mux = &alc883_capture_source, | ||
3294 | .unsol_event = alc883_targa_unsol_event, | ||
3295 | .setup = alc882_targa_setup, | ||
3296 | .init_hook = alc882_targa_automute, | ||
3297 | }, | ||
3298 | [ALC883_TARGA_2ch_DIG] = { | ||
3299 | .mixers = { alc883_targa_2ch_mixer}, | ||
3300 | .init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs, | ||
3301 | alc883_targa_verbs}, | ||
3302 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3303 | .dac_nids = alc883_dac_nids, | ||
3304 | .adc_nids = alc883_adc_nids_alt, | ||
3305 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), | ||
3306 | .capsrc_nids = alc883_capsrc_nids, | ||
3307 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3308 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3309 | .channel_mode = alc883_3ST_2ch_modes, | ||
3310 | .input_mux = &alc883_capture_source, | ||
3311 | .unsol_event = alc883_targa_unsol_event, | ||
3312 | .setup = alc882_targa_setup, | ||
3313 | .init_hook = alc882_targa_automute, | ||
3314 | }, | ||
3315 | [ALC883_TARGA_8ch_DIG] = { | ||
3316 | .mixers = { alc883_targa_mixer, alc883_targa_8ch_mixer, | ||
3317 | alc883_chmode_mixer }, | ||
3318 | .init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs, | ||
3319 | alc883_targa_verbs }, | ||
3320 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3321 | .dac_nids = alc883_dac_nids, | ||
3322 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), | ||
3323 | .adc_nids = alc883_adc_nids_rev, | ||
3324 | .capsrc_nids = alc883_capsrc_nids_rev, | ||
3325 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3326 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3327 | .num_channel_mode = ARRAY_SIZE(alc883_4ST_8ch_modes), | ||
3328 | .channel_mode = alc883_4ST_8ch_modes, | ||
3329 | .need_dac_fix = 1, | ||
3330 | .input_mux = &alc883_capture_source, | ||
3331 | .unsol_event = alc883_targa_unsol_event, | ||
3332 | .setup = alc882_targa_setup, | ||
3333 | .init_hook = alc882_targa_automute, | ||
3334 | }, | ||
3335 | [ALC883_ACER] = { | ||
3336 | .mixers = { alc883_base_mixer }, | ||
3337 | /* On TravelMate laptops, GPIO 0 enables the internal speaker | ||
3338 | * and the headphone jack. Turn this on and rely on the | ||
3339 | * standard mute methods whenever the user wants to turn | ||
3340 | * these outputs off. | ||
3341 | */ | ||
3342 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs }, | ||
3343 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3344 | .dac_nids = alc883_dac_nids, | ||
3345 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3346 | .channel_mode = alc883_3ST_2ch_modes, | ||
3347 | .input_mux = &alc883_capture_source, | ||
3348 | }, | ||
3349 | [ALC883_ACER_ASPIRE] = { | ||
3350 | .mixers = { alc883_acer_aspire_mixer }, | ||
3351 | .init_verbs = { alc883_init_verbs, alc883_acer_eapd_verbs }, | ||
3352 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3353 | .dac_nids = alc883_dac_nids, | ||
3354 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3355 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3356 | .channel_mode = alc883_3ST_2ch_modes, | ||
3357 | .input_mux = &alc883_capture_source, | ||
3358 | .unsol_event = alc_sku_unsol_event, | ||
3359 | .setup = alc883_acer_aspire_setup, | ||
3360 | .init_hook = alc_hp_automute, | ||
3361 | }, | ||
3362 | [ALC888_ACER_ASPIRE_4930G] = { | ||
3363 | .mixers = { alc888_acer_aspire_4930g_mixer, | ||
3364 | alc883_chmode_mixer }, | ||
3365 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, | ||
3366 | alc888_acer_aspire_4930g_verbs }, | ||
3367 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3368 | .dac_nids = alc883_dac_nids, | ||
3369 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), | ||
3370 | .adc_nids = alc883_adc_nids_rev, | ||
3371 | .capsrc_nids = alc883_capsrc_nids_rev, | ||
3372 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3373 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3374 | .channel_mode = alc883_3ST_6ch_modes, | ||
3375 | .need_dac_fix = 1, | ||
3376 | .const_channel_count = 6, | ||
3377 | .num_mux_defs = | ||
3378 | ARRAY_SIZE(alc888_2_capture_sources), | ||
3379 | .input_mux = alc888_2_capture_sources, | ||
3380 | .unsol_event = alc_sku_unsol_event, | ||
3381 | .setup = alc888_acer_aspire_4930g_setup, | ||
3382 | .init_hook = alc_hp_automute, | ||
3383 | }, | ||
3384 | [ALC888_ACER_ASPIRE_6530G] = { | ||
3385 | .mixers = { alc888_acer_aspire_6530_mixer }, | ||
3386 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, | ||
3387 | alc888_acer_aspire_6530g_verbs }, | ||
3388 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3389 | .dac_nids = alc883_dac_nids, | ||
3390 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), | ||
3391 | .adc_nids = alc883_adc_nids_rev, | ||
3392 | .capsrc_nids = alc883_capsrc_nids_rev, | ||
3393 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3394 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3395 | .channel_mode = alc883_3ST_2ch_modes, | ||
3396 | .num_mux_defs = | ||
3397 | ARRAY_SIZE(alc888_2_capture_sources), | ||
3398 | .input_mux = alc888_acer_aspire_6530_sources, | ||
3399 | .unsol_event = alc_sku_unsol_event, | ||
3400 | .setup = alc888_acer_aspire_6530g_setup, | ||
3401 | .init_hook = alc_hp_automute, | ||
3402 | }, | ||
3403 | [ALC888_ACER_ASPIRE_8930G] = { | ||
3404 | .mixers = { alc889_acer_aspire_8930g_mixer, | ||
3405 | alc883_chmode_mixer }, | ||
3406 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, | ||
3407 | alc889_acer_aspire_8930g_verbs, | ||
3408 | alc889_eapd_verbs}, | ||
3409 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3410 | .dac_nids = alc883_dac_nids, | ||
3411 | .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), | ||
3412 | .adc_nids = alc889_adc_nids, | ||
3413 | .capsrc_nids = alc889_capsrc_nids, | ||
3414 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3415 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3416 | .channel_mode = alc883_3ST_6ch_modes, | ||
3417 | .need_dac_fix = 1, | ||
3418 | .const_channel_count = 6, | ||
3419 | .num_mux_defs = | ||
3420 | ARRAY_SIZE(alc889_capture_sources), | ||
3421 | .input_mux = alc889_capture_sources, | ||
3422 | .unsol_event = alc_sku_unsol_event, | ||
3423 | .setup = alc889_acer_aspire_8930g_setup, | ||
3424 | .init_hook = alc_hp_automute, | ||
3425 | #ifdef CONFIG_SND_HDA_POWER_SAVE | ||
3426 | .power_hook = alc_power_eapd, | ||
3427 | #endif | ||
3428 | }, | ||
3429 | [ALC888_ACER_ASPIRE_7730G] = { | ||
3430 | .mixers = { alc883_3ST_6ch_mixer, | ||
3431 | alc883_chmode_mixer }, | ||
3432 | .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs, | ||
3433 | alc888_acer_aspire_7730G_verbs }, | ||
3434 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3435 | .dac_nids = alc883_dac_nids, | ||
3436 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), | ||
3437 | .adc_nids = alc883_adc_nids_rev, | ||
3438 | .capsrc_nids = alc883_capsrc_nids_rev, | ||
3439 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3440 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3441 | .channel_mode = alc883_3ST_6ch_modes, | ||
3442 | .need_dac_fix = 1, | ||
3443 | .const_channel_count = 6, | ||
3444 | .input_mux = &alc883_capture_source, | ||
3445 | .unsol_event = alc_sku_unsol_event, | ||
3446 | .setup = alc888_acer_aspire_7730g_setup, | ||
3447 | .init_hook = alc_hp_automute, | ||
3448 | }, | ||
3449 | [ALC883_MEDION] = { | ||
3450 | .mixers = { alc883_fivestack_mixer, | ||
3451 | alc883_chmode_mixer }, | ||
3452 | .init_verbs = { alc883_init_verbs, | ||
3453 | alc883_medion_eapd_verbs }, | ||
3454 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3455 | .dac_nids = alc883_dac_nids, | ||
3456 | .adc_nids = alc883_adc_nids_alt, | ||
3457 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), | ||
3458 | .capsrc_nids = alc883_capsrc_nids, | ||
3459 | .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), | ||
3460 | .channel_mode = alc883_sixstack_modes, | ||
3461 | .input_mux = &alc883_capture_source, | ||
3462 | }, | ||
3463 | [ALC883_MEDION_WIM2160] = { | ||
3464 | .mixers = { alc883_medion_wim2160_mixer }, | ||
3465 | .init_verbs = { alc883_init_verbs, alc883_medion_wim2160_verbs }, | ||
3466 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3467 | .dac_nids = alc883_dac_nids, | ||
3468 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3469 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids), | ||
3470 | .adc_nids = alc883_adc_nids, | ||
3471 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3472 | .channel_mode = alc883_3ST_2ch_modes, | ||
3473 | .input_mux = &alc883_capture_source, | ||
3474 | .unsol_event = alc_sku_unsol_event, | ||
3475 | .setup = alc883_medion_wim2160_setup, | ||
3476 | .init_hook = alc_hp_automute, | ||
3477 | }, | ||
3478 | [ALC883_LAPTOP_EAPD] = { | ||
3479 | .mixers = { alc883_base_mixer }, | ||
3480 | .init_verbs = { alc883_init_verbs, alc882_eapd_verbs }, | ||
3481 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3482 | .dac_nids = alc883_dac_nids, | ||
3483 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3484 | .channel_mode = alc883_3ST_2ch_modes, | ||
3485 | .input_mux = &alc883_capture_source, | ||
3486 | }, | ||
3487 | [ALC883_CLEVO_M540R] = { | ||
3488 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3489 | .init_verbs = { alc883_init_verbs, alc883_clevo_m540r_verbs }, | ||
3490 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3491 | .dac_nids = alc883_dac_nids, | ||
3492 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3493 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3494 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_clevo_modes), | ||
3495 | .channel_mode = alc883_3ST_6ch_clevo_modes, | ||
3496 | .need_dac_fix = 1, | ||
3497 | .input_mux = &alc883_capture_source, | ||
3498 | /* This machine has the hardware HP auto-muting, thus | ||
3499 | * we need no software mute via unsol event | ||
3500 | */ | ||
3501 | }, | ||
3502 | [ALC883_CLEVO_M720] = { | ||
3503 | .mixers = { alc883_clevo_m720_mixer }, | ||
3504 | .init_verbs = { alc883_init_verbs, alc883_clevo_m720_verbs }, | ||
3505 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3506 | .dac_nids = alc883_dac_nids, | ||
3507 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3508 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3509 | .channel_mode = alc883_3ST_2ch_modes, | ||
3510 | .input_mux = &alc883_capture_source, | ||
3511 | .unsol_event = alc883_clevo_m720_unsol_event, | ||
3512 | .setup = alc883_clevo_m720_setup, | ||
3513 | .init_hook = alc883_clevo_m720_init_hook, | ||
3514 | }, | ||
3515 | [ALC883_LENOVO_101E_2ch] = { | ||
3516 | .mixers = { alc883_lenovo_101e_2ch_mixer}, | ||
3517 | .init_verbs = { alc883_init_verbs, alc883_lenovo_101e_verbs}, | ||
3518 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3519 | .dac_nids = alc883_dac_nids, | ||
3520 | .adc_nids = alc883_adc_nids_alt, | ||
3521 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), | ||
3522 | .capsrc_nids = alc883_capsrc_nids, | ||
3523 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3524 | .channel_mode = alc883_3ST_2ch_modes, | ||
3525 | .input_mux = &alc883_lenovo_101e_capture_source, | ||
3526 | .setup = alc883_lenovo_101e_setup, | ||
3527 | .unsol_event = alc_sku_unsol_event, | ||
3528 | .init_hook = alc_inithook, | ||
3529 | }, | ||
3530 | [ALC883_LENOVO_NB0763] = { | ||
3531 | .mixers = { alc883_lenovo_nb0763_mixer }, | ||
3532 | .init_verbs = { alc883_init_verbs, alc883_lenovo_nb0763_verbs}, | ||
3533 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3534 | .dac_nids = alc883_dac_nids, | ||
3535 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3536 | .channel_mode = alc883_3ST_2ch_modes, | ||
3537 | .need_dac_fix = 1, | ||
3538 | .input_mux = &alc883_lenovo_nb0763_capture_source, | ||
3539 | .unsol_event = alc_sku_unsol_event, | ||
3540 | .setup = alc883_lenovo_nb0763_setup, | ||
3541 | .init_hook = alc_hp_automute, | ||
3542 | }, | ||
3543 | [ALC888_LENOVO_MS7195_DIG] = { | ||
3544 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3545 | .init_verbs = { alc883_init_verbs, alc888_lenovo_ms7195_verbs}, | ||
3546 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3547 | .dac_nids = alc883_dac_nids, | ||
3548 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3549 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3550 | .channel_mode = alc883_3ST_6ch_modes, | ||
3551 | .need_dac_fix = 1, | ||
3552 | .input_mux = &alc883_capture_source, | ||
3553 | .unsol_event = alc_sku_unsol_event, | ||
3554 | .setup = alc888_lenovo_ms7195_setup, | ||
3555 | .init_hook = alc_inithook, | ||
3556 | }, | ||
3557 | [ALC883_HAIER_W66] = { | ||
3558 | .mixers = { alc883_targa_2ch_mixer}, | ||
3559 | .init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs}, | ||
3560 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3561 | .dac_nids = alc883_dac_nids, | ||
3562 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3563 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3564 | .channel_mode = alc883_3ST_2ch_modes, | ||
3565 | .input_mux = &alc883_capture_source, | ||
3566 | .unsol_event = alc_sku_unsol_event, | ||
3567 | .setup = alc883_haier_w66_setup, | ||
3568 | .init_hook = alc_hp_automute, | ||
3569 | }, | ||
3570 | [ALC888_3ST_HP] = { | ||
3571 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3572 | .init_verbs = { alc883_init_verbs, alc888_3st_hp_verbs }, | ||
3573 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3574 | .dac_nids = alc883_dac_nids, | ||
3575 | .num_channel_mode = ARRAY_SIZE(alc888_3st_hp_modes), | ||
3576 | .channel_mode = alc888_3st_hp_modes, | ||
3577 | .need_dac_fix = 1, | ||
3578 | .input_mux = &alc883_capture_source, | ||
3579 | .unsol_event = alc_sku_unsol_event, | ||
3580 | .setup = alc888_3st_hp_setup, | ||
3581 | .init_hook = alc_hp_automute, | ||
3582 | }, | ||
3583 | [ALC888_6ST_DELL] = { | ||
3584 | .mixers = { alc883_base_mixer, alc883_chmode_mixer }, | ||
3585 | .init_verbs = { alc883_init_verbs, alc888_6st_dell_verbs }, | ||
3586 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3587 | .dac_nids = alc883_dac_nids, | ||
3588 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3589 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3590 | .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), | ||
3591 | .channel_mode = alc883_sixstack_modes, | ||
3592 | .input_mux = &alc883_capture_source, | ||
3593 | .unsol_event = alc_sku_unsol_event, | ||
3594 | .setup = alc888_6st_dell_setup, | ||
3595 | .init_hook = alc_hp_automute, | ||
3596 | }, | ||
3597 | [ALC883_MITAC] = { | ||
3598 | .mixers = { alc883_mitac_mixer }, | ||
3599 | .init_verbs = { alc883_init_verbs, alc883_mitac_verbs }, | ||
3600 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3601 | .dac_nids = alc883_dac_nids, | ||
3602 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3603 | .channel_mode = alc883_3ST_2ch_modes, | ||
3604 | .input_mux = &alc883_capture_source, | ||
3605 | .unsol_event = alc_sku_unsol_event, | ||
3606 | .setup = alc883_mitac_setup, | ||
3607 | .init_hook = alc_hp_automute, | ||
3608 | }, | ||
3609 | [ALC883_FUJITSU_PI2515] = { | ||
3610 | .mixers = { alc883_2ch_fujitsu_pi2515_mixer }, | ||
3611 | .init_verbs = { alc883_init_verbs, | ||
3612 | alc883_2ch_fujitsu_pi2515_verbs}, | ||
3613 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3614 | .dac_nids = alc883_dac_nids, | ||
3615 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3616 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3617 | .channel_mode = alc883_3ST_2ch_modes, | ||
3618 | .input_mux = &alc883_fujitsu_pi2515_capture_source, | ||
3619 | .unsol_event = alc_sku_unsol_event, | ||
3620 | .setup = alc883_2ch_fujitsu_pi2515_setup, | ||
3621 | .init_hook = alc_hp_automute, | ||
3622 | }, | ||
3623 | [ALC888_FUJITSU_XA3530] = { | ||
3624 | .mixers = { alc888_base_mixer, alc883_chmode_mixer }, | ||
3625 | .init_verbs = { alc883_init_verbs, | ||
3626 | alc888_fujitsu_xa3530_verbs }, | ||
3627 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3628 | .dac_nids = alc883_dac_nids, | ||
3629 | .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), | ||
3630 | .adc_nids = alc883_adc_nids_rev, | ||
3631 | .capsrc_nids = alc883_capsrc_nids_rev, | ||
3632 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3633 | .num_channel_mode = ARRAY_SIZE(alc888_4ST_8ch_intel_modes), | ||
3634 | .channel_mode = alc888_4ST_8ch_intel_modes, | ||
3635 | .num_mux_defs = | ||
3636 | ARRAY_SIZE(alc888_2_capture_sources), | ||
3637 | .input_mux = alc888_2_capture_sources, | ||
3638 | .unsol_event = alc_sku_unsol_event, | ||
3639 | .setup = alc888_fujitsu_xa3530_setup, | ||
3640 | .init_hook = alc_hp_automute, | ||
3641 | }, | ||
3642 | [ALC888_LENOVO_SKY] = { | ||
3643 | .mixers = { alc888_lenovo_sky_mixer, alc883_chmode_mixer }, | ||
3644 | .init_verbs = { alc883_init_verbs, alc888_lenovo_sky_verbs}, | ||
3645 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3646 | .dac_nids = alc883_dac_nids, | ||
3647 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3648 | .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), | ||
3649 | .channel_mode = alc883_sixstack_modes, | ||
3650 | .need_dac_fix = 1, | ||
3651 | .input_mux = &alc883_lenovo_sky_capture_source, | ||
3652 | .unsol_event = alc_sku_unsol_event, | ||
3653 | .setup = alc888_lenovo_sky_setup, | ||
3654 | .init_hook = alc_hp_automute, | ||
3655 | }, | ||
3656 | [ALC888_ASUS_M90V] = { | ||
3657 | .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, | ||
3658 | .init_verbs = { alc883_init_verbs, alc888_asus_m90v_verbs }, | ||
3659 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3660 | .dac_nids = alc883_dac_nids, | ||
3661 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3662 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3663 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), | ||
3664 | .channel_mode = alc883_3ST_6ch_modes, | ||
3665 | .need_dac_fix = 1, | ||
3666 | .input_mux = &alc883_fujitsu_pi2515_capture_source, | ||
3667 | .unsol_event = alc_sku_unsol_event, | ||
3668 | .setup = alc883_mode2_setup, | ||
3669 | .init_hook = alc_inithook, | ||
3670 | }, | ||
3671 | [ALC888_ASUS_EEE1601] = { | ||
3672 | .mixers = { alc883_asus_eee1601_mixer }, | ||
3673 | .cap_mixer = alc883_asus_eee1601_cap_mixer, | ||
3674 | .init_verbs = { alc883_init_verbs, alc888_asus_eee1601_verbs }, | ||
3675 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3676 | .dac_nids = alc883_dac_nids, | ||
3677 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
3678 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3679 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3680 | .channel_mode = alc883_3ST_2ch_modes, | ||
3681 | .need_dac_fix = 1, | ||
3682 | .input_mux = &alc883_asus_eee1601_capture_source, | ||
3683 | .unsol_event = alc_sku_unsol_event, | ||
3684 | .init_hook = alc883_eee1601_inithook, | ||
3685 | }, | ||
3686 | [ALC1200_ASUS_P5Q] = { | ||
3687 | .mixers = { alc883_base_mixer, alc883_chmode_mixer }, | ||
3688 | .init_verbs = { alc883_init_verbs }, | ||
3689 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3690 | .dac_nids = alc883_dac_nids, | ||
3691 | .dig_out_nid = ALC1200_DIGOUT_NID, | ||
3692 | .dig_in_nid = ALC883_DIGIN_NID, | ||
3693 | .slave_dig_outs = alc1200_slave_dig_outs, | ||
3694 | .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), | ||
3695 | .channel_mode = alc883_sixstack_modes, | ||
3696 | .input_mux = &alc883_capture_source, | ||
3697 | }, | ||
3698 | [ALC889A_MB31] = { | 843 | [ALC889A_MB31] = { |
3699 | .mixers = { alc889A_mb31_mixer, alc883_chmode_mixer}, | 844 | .mixers = { alc889A_mb31_mixer, alc883_chmode_mixer}, |
3700 | .init_verbs = { alc883_init_verbs, alc889A_mb31_verbs, | 845 | .init_verbs = { alc883_init_verbs, alc889A_mb31_verbs, |
@@ -3711,18 +856,6 @@ static const struct alc_config_preset alc882_presets[] = { | |||
3711 | .unsol_event = alc889A_mb31_unsol_event, | 856 | .unsol_event = alc889A_mb31_unsol_event, |
3712 | .init_hook = alc889A_mb31_automute, | 857 | .init_hook = alc889A_mb31_automute, |
3713 | }, | 858 | }, |
3714 | [ALC883_SONY_VAIO_TT] = { | ||
3715 | .mixers = { alc883_vaiott_mixer }, | ||
3716 | .init_verbs = { alc883_init_verbs, alc883_vaiott_verbs }, | ||
3717 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
3718 | .dac_nids = alc883_dac_nids, | ||
3719 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
3720 | .channel_mode = alc883_3ST_2ch_modes, | ||
3721 | .input_mux = &alc883_capture_source, | ||
3722 | .unsol_event = alc_sku_unsol_event, | ||
3723 | .setup = alc883_vaiott_setup, | ||
3724 | .init_hook = alc_hp_automute, | ||
3725 | }, | ||
3726 | }; | 859 | }; |
3727 | 860 | ||
3728 | 861 | ||