2 * ALC882/ALC883/ALC888/ALC889 quirk models
3 * included by patch_realtek.c
32 ALC888_ACER_ASPIRE_4930G
,
33 ALC888_ACER_ASPIRE_6530G
,
34 ALC888_ACER_ASPIRE_8930G
,
35 ALC888_ACER_ASPIRE_7730G
,
37 ALC883_MEDION_WIM2160
,
39 ALC883_LENOVO_101E_2ch
,
41 ALC888_LENOVO_MS7195_DIG
,
49 ALC883_FUJITSU_PI2515
,
50 ALC888_FUJITSU_XA3530
,
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},
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},
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},
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},
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
},
130 * ALC888 Fujitsu Siemens Amillo xa3530
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
},
166 static void alc889_automute_setup(struct hda_codec
*codec
)
168 struct alc_spec
*spec
= codec
->spec
;
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
);
179 static void alc889_intel_init_hook(struct hda_codec
*codec
)
181 alc889_coef_init(codec
);
182 alc_hp_automute(codec
);
185 static void alc888_fujitsu_xa3530_setup(struct hda_codec
*codec
)
187 struct alc_spec
*spec
= codec
->spec
;
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
);
197 * ALC888 Acer Aspire 4930G model
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},
220 * ALC888 Acer Aspire 6530G model
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},
250 *ALC888 Acer Aspire 7730G model
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},
280 * ALC889 Acer Aspire 8930G model
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},
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
323 /* DMIC_CONTROL? Init value = 0x0001 */
324 {0x20, AC_VERB_SET_COEF_INDEX
, 0x0b},
325 {0x20, AC_VERB_SET_PROC_COEF
, 0x0003},
329 static const struct hda_input_mux alc888_2_capture_sources
[2] = {
330 /* Front mic only available on one ADC */
337 { "Front Mic", 0xb },
350 static const struct hda_input_mux alc888_acer_aspire_6530_sources
[2] = {
351 /* Interal mic only available on one ADC */
358 { "Input Mix", 0xa },
359 { "Internal Mic", 0xb },
368 { "Input Mix", 0xa },
373 static const struct hda_input_mux alc889_capture_sources
[3] = {
374 /* Digital mic only available on first "ADC" */
381 { "Front Mic", 0xb },
382 { "Input Mix", 0xa },
391 { "Input Mix", 0xa },
400 { "Input Mix", 0xa },
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,
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
),
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,
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
),
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,
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
),
468 static void alc888_acer_aspire_4930g_setup(struct hda_codec
*codec
)
470 struct alc_spec
*spec
= codec
->spec
;
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
);
479 static void alc888_acer_aspire_6530g_setup(struct hda_codec
*codec
)
481 struct alc_spec
*spec
= codec
->spec
;
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
);
490 static void alc888_acer_aspire_7730g_setup(struct hda_codec
*codec
)
492 struct alc_spec
*spec
= codec
->spec
;
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
);
501 static void alc889_acer_aspire_8930g_setup(struct hda_codec
*codec
)
503 struct alc_spec
*spec
= codec
->spec
;
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
);
512 #define ALC882_DIGOUT_NID 0x06
513 #define ALC882_DIGIN_NID 0x0a
514 #define ALC883_DIGOUT_NID ALC882_DIGOUT_NID
515 #define ALC883_DIGIN_NID ALC882_DIGIN_NID
516 #define ALC1200_DIGOUT_NID 0x10
519 static const struct hda_channel_mode alc882_ch_modes
[1] = {
524 static const hda_nid_t alc882_dac_nids
[4] = {
525 /* front, rear, clfe, rear_surr */
526 0x02, 0x03, 0x04, 0x05
528 #define alc883_dac_nids alc882_dac_nids
531 #define alc882_adc_nids alc880_adc_nids
532 #define alc882_adc_nids_alt alc880_adc_nids_alt
533 #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
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 };
540 #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
545 /* FIXME: should be a matrix-type input source selection */
547 static const struct hda_input_mux alc882_capture_source
= {
551 { "Front Mic", 0x1 },
557 #define alc883_capture_source alc882_capture_source
559 static const struct hda_input_mux alc889_capture_source
= {
562 { "Front Mic", 0x0 },
568 static const struct hda_input_mux mb5_capture_source
= {
577 static const struct hda_input_mux macmini3_capture_source
= {
585 static const struct hda_input_mux alc883_3stack_6ch_intel
= {
589 { "Front Mic", 0x0 },
595 static const struct hda_input_mux alc883_lenovo_101e_capture_source
= {
603 static const struct hda_input_mux alc883_lenovo_nb0763_capture_source
= {
607 { "Internal Mic", 0x1 },
613 static const struct hda_input_mux alc883_fujitsu_pi2515_capture_source
= {
617 { "Internal Mic", 0x1 },
621 static const struct hda_input_mux alc883_lenovo_sky_capture_source
= {
625 { "Front Mic", 0x1 },
630 static const struct hda_input_mux alc883_asus_eee1601_capture_source
= {
638 static const struct hda_input_mux alc889A_mb31_capture_source
= {
642 /* Front Mic (0x01) unused */
644 /* Line 2 (0x03) unused */
645 /* CD (0x04) unused? */
649 static const struct hda_input_mux alc889A_imac91_capture_source
= {
653 { "Line", 0x2 }, /* Not sure! */
660 static const struct hda_channel_mode alc883_3ST_2ch_modes
[1] = {
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
},
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 },
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 },
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
},
706 #define alc883_3ST_6ch_modes alc882_3ST_6ch_modes
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
},
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 },
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 },
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
},
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
},
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
},
776 static const struct hda_channel_mode alc882_sixstack_modes
[2] = {
777 { 6, alc882_sixstack_ch6_init
},
778 { 8, alc882_sixstack_ch8_init
},
782 /* Macbook Air 2,1 */
784 static const struct hda_channel_mode alc885_mba21_ch_modes
[1] = {
789 * macbook pro ALC885 can switch LineIn to LineOut without losing Mic
795 static const struct hda_verb alc885_mbp_ch2_init
[] = {
796 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
797 { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
798 { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
805 static const struct hda_verb alc885_mbp_ch4_init
[] = {
806 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
807 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
808 { 0x1a, AC_VERB_SET_CONNECT_SEL
, 0x01 },
809 { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
810 { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
814 static const struct hda_channel_mode alc885_mbp_4ch_modes
[2] = {
815 { 2, alc885_mbp_ch2_init
},
816 { 4, alc885_mbp_ch4_init
},
821 * Speakers/Woofer/HP = Front
824 static const struct hda_verb alc885_mb5_ch2_init
[] = {
825 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
826 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
832 * Speakers/HP = Front
836 static const struct hda_verb alc885_mb5_ch6_init
[] = {
837 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
838 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
839 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
843 static const struct hda_channel_mode alc885_mb5_6ch_modes
[2] = {
844 { 2, alc885_mb5_ch2_init
},
845 { 6, alc885_mb5_ch6_init
},
848 #define alc885_macmini3_6ch_modes alc885_mb5_6ch_modes
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
},
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 },
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 },
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 },
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
},
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
},
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 },
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 },
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
},
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
},
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
},
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
},
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
},
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
},
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
},
1026 static const struct hda_channel_mode alc883_sixstack_modes
[2] = {
1027 { 6, alc883_sixstack_ch6_init
},
1028 { 8, alc883_sixstack_ch8_init
},
1032 /* Pin assignment: Front=0x14, Rear=0x15, CLFE=0x16, Side=0x17
1033 * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b
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
),
1060 /* Macbook Air 2,1 same control for HP and internal Speaker */
1062 static const struct snd_kcontrol_new alc885_mba21_mixer
[] = {
1063 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
1064 HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 0x02, HDA_OUTPUT
),
1069 static const struct snd_kcontrol_new alc885_mbp3_mixer
[] = {
1070 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
1071 HDA_BIND_MUTE ("Speaker Playback Switch", 0x0c, 0x02, HDA_INPUT
),
1072 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0e, 0x00, HDA_OUTPUT
),
1073 HDA_BIND_MUTE ("Headphone Playback Switch", 0x0e, 0x02, HDA_INPUT
),
1074 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x00, HDA_OUTPUT
),
1075 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
1076 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
1077 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT
),
1078 HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT
),
1079 HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT
),
1080 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT
),
1084 static const struct snd_kcontrol_new alc885_mb5_mixer
[] = {
1085 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
1086 HDA_BIND_MUTE ("Front Playback Switch", 0x0c, 0x02, HDA_INPUT
),
1087 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x00, HDA_OUTPUT
),
1088 HDA_BIND_MUTE ("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT
),
1089 HDA_CODEC_VOLUME("LFE Playback Volume", 0x0e, 0x00, HDA_OUTPUT
),
1090 HDA_BIND_MUTE ("LFE Playback Switch", 0x0e, 0x02, HDA_INPUT
),
1091 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0f, 0x00, HDA_OUTPUT
),
1092 HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT
),
1093 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x07, HDA_INPUT
),
1094 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT
),
1095 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
1096 HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
1097 HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT
),
1098 HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0x00, HDA_INPUT
),
1102 static const struct snd_kcontrol_new alc885_macmini3_mixer
[] = {
1103 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
1104 HDA_BIND_MUTE ("Front Playback Switch", 0x0c, 0x02, HDA_INPUT
),
1105 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x00, HDA_OUTPUT
),
1106 HDA_BIND_MUTE ("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT
),
1107 HDA_CODEC_VOLUME("LFE Playback Volume", 0x0e, 0x00, HDA_OUTPUT
),
1108 HDA_BIND_MUTE ("LFE Playback Switch", 0x0e, 0x02, HDA_INPUT
),
1109 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0f, 0x00, HDA_OUTPUT
),
1110 HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT
),
1111 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x07, HDA_INPUT
),
1112 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT
),
1113 HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT
),
1117 static const struct snd_kcontrol_new alc885_imac91_mixer
[] = {
1118 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
1119 HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 0x02, HDA_INPUT
),
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
),
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
),
1154 /* Pin assignment: Front=0x14, HP = 0x15, Front = 0x16, ???
1155 * Front Mic=0x18, Line In = 0x1a, Line In = 0x1b, CD = 0x1c
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
),
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
),
1188 static const struct snd_kcontrol_new alc882_chmode_mixer
[] = {
1190 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
1191 .name
= "Channel Mode",
1192 .info
= alc_ch_mode_info
,
1193 .get
= alc_ch_mode_get
,
1194 .put
= alc_ch_mode_put
,
1199 static const struct hda_verb alc882_base_init_verbs
[] = {
1200 /* Front mixer: unmute input/output amp left and right (volume = 0) */
1201 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1202 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1204 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1205 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1207 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1208 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1210 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1211 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1213 /* Front Pin: output 0 (0x0c) */
1214 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1215 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1216 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
1217 /* Rear Pin: output 1 (0x0d) */
1218 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1219 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1220 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
1221 /* CLFE Pin: output 2 (0x0e) */
1222 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1223 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1224 {0x16, AC_VERB_SET_CONNECT_SEL
, 0x02},
1225 /* Side Pin: output 3 (0x0f) */
1226 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1227 {0x17, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1228 {0x17, AC_VERB_SET_CONNECT_SEL
, 0x03},
1229 /* Mic (rear) pin: input vref at 80% */
1230 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1231 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1232 /* Front Mic pin: input vref at 80% */
1233 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1234 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1235 /* Line In pin: input */
1236 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
1237 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1238 /* Line-2 In: Headphone output (output 0 - 0x0c) */
1239 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
1240 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1241 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
1242 /* CD pin widget for input */
1243 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
1245 /* FIXME: use matrix-type input source selection */
1246 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
1248 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1250 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1251 /* ADC2: mute amp left and right */
1252 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1253 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
1254 /* ADC3: mute amp left and right */
1255 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1256 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
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},
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},
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},
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
},
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)},
1297 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1298 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
1300 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1301 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
1303 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1304 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
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
},
1336 /* Mixer elements: 0x18, , 0x1a, 0x1b */
1338 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1340 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
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)},
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)},
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
},
1367 #define alc883_init_verbs alc882_base_init_verbs
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),
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},
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)},
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)},
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},
1435 static const struct hda_verb alc885_mb5_init_verbs
[] = {
1437 {0x02, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1438 {0x03, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1439 {0x04, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1440 {0x05, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1442 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1443 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1444 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1445 /* Surround mixer */
1446 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1447 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1448 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1450 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1451 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1452 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1454 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1455 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1456 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1457 /* Front Pin (0x0c) */
1458 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
| 0x01},
1459 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1460 {0x18, AC_VERB_SET_CONNECT_SEL
, 0x00},
1461 /* LFE Pin (0x0e) */
1462 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
| 0x01},
1463 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1464 {0x1a, AC_VERB_SET_CONNECT_SEL
, 0x02},
1466 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1467 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1468 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x03},
1469 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
1470 /* Front Mic pin: input vref at 80% */
1471 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1472 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1474 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
1475 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1477 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0x1)},
1478 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0x7)},
1479 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0x4)},
1484 static const struct hda_verb alc885_macmini3_init_verbs
[] = {
1486 {0x02, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1487 {0x03, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1488 {0x04, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1489 {0x05, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1491 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1492 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1493 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1494 /* Surround mixer */
1495 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1496 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1497 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1499 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1500 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1501 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1503 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1504 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1505 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1506 /* Front Pin (0x0c) */
1507 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
| 0x01},
1508 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1509 {0x18, AC_VERB_SET_CONNECT_SEL
, 0x00},
1510 /* LFE Pin (0x0e) */
1511 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
| 0x01},
1512 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1513 {0x1a, AC_VERB_SET_CONNECT_SEL
, 0x02},
1515 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1516 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1517 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x03},
1518 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
1520 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
1521 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1523 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
1524 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1525 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1526 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1531 static const struct hda_verb alc885_mba21_init_verbs
[] = {
1532 /*Internal and HP Speaker Mixer*/
1533 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1534 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1535 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
1536 /*Internal Speaker Pin (0x0c)*/
1537 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, (PIN_OUT
| AC_PINCTL_VREF_50
) },
1538 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1539 {0x18, AC_VERB_SET_CONNECT_SEL
, 0x00},
1540 /* HP Pin: output 0 (0x0e) */
1541 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc4},
1542 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1543 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
1544 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, (ALC_HP_EVENT
| AC_USRSP_EN
)},
1545 /* Line in (is hp when jack connected)*/
1546 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, AC_PINCTL_VREF_50
},
1547 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1553 /* Macbook Pro rev3 */
1554 static const struct hda_verb alc885_mbp3_init_verbs
[] = {
1555 /* Front mixer: unmute input/output amp left and right (volume = 0) */
1556 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1557 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1558 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1560 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1561 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1562 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1564 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1565 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1566 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1567 /* Front Pin: output 0 (0x0c) */
1568 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
1569 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1570 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
1571 /* HP Pin: output 0 (0x0e) */
1572 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc4},
1573 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1574 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x02},
1575 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
1576 /* Mic (rear) pin: input vref at 80% */
1577 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1578 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1579 /* Front Mic pin: input vref at 80% */
1580 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1581 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1582 /* Line In pin: use output 1 when in LineOut mode */
1583 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
1584 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1585 {0x1a, AC_VERB_SET_CONNECT_SEL
, 0x01},
1587 /* FIXME: use matrix-type input source selection */
1588 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
1589 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
1590 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1591 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1592 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1593 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1595 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1596 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1597 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1598 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1600 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1601 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1602 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1603 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1604 /* ADC1: mute amp left and right */
1605 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1606 {0x07, AC_VERB_SET_CONNECT_SEL
, 0x00},
1607 /* ADC2: mute amp left and right */
1608 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1609 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
1610 /* ADC3: mute amp left and right */
1611 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1612 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
1618 static const struct hda_verb alc885_imac91_init_verbs
[] = {
1619 /* Internal Speaker Pin (0x0c) */
1620 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, (PIN_OUT
| AC_PINCTL_VREF_50
) },
1621 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1622 {0x18, AC_VERB_SET_CONNECT_SEL
, 0x00},
1623 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, (PIN_OUT
| AC_PINCTL_VREF_50
) },
1624 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1625 {0x1a, AC_VERB_SET_CONNECT_SEL
, 0x00},
1627 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
1628 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1629 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
1630 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, (ALC_HP_EVENT
| AC_USRSP_EN
)},
1632 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, AC_PINCTL_VREF_50
},
1633 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1634 /* Front Mic pin: input vref at 80% */
1635 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
1636 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
1638 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1639 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1640 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1641 /* Line-Out mixer: unmute input/output amp left and right (volume = 0) */
1642 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
1643 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1644 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
1645 /* 0x24 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */
1646 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1647 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1648 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1649 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1650 /* 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */
1651 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1652 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1653 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1654 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1655 /* 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */
1656 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
1657 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
1658 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
1659 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
1660 /* 0x07 [Audio Input] wcaps 0x10011b: Stereo Amp-In */
1661 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1662 {0x07, AC_VERB_SET_CONNECT_SEL
, 0x00},
1663 /* 0x08 [Audio Input] wcaps 0x10011b: Stereo Amp-In */
1664 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1665 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
1666 /* 0x09 [Audio Input] wcaps 0x10011b: Stereo Amp-In */
1667 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
1668 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
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
),
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
},
1700 /* Toggle speaker-output according to the hp-jack state */
1701 static void alc885_imac24_setup(struct hda_codec
*codec
)
1703 struct alc_spec
*spec
= codec
->spec
;
1705 spec
->autocfg
.hp_pins
[0] = 0x14;
1706 spec
->autocfg
.speaker_pins
[0] = 0x18;
1707 spec
->autocfg
.speaker_pins
[1] = 0x1a;
1708 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
1711 #define alc885_mb5_setup alc885_imac24_setup
1712 #define alc885_macmini3_setup alc885_imac24_setup
1714 /* Macbook Air 2,1 */
1715 static void alc885_mba21_setup(struct hda_codec
*codec
)
1717 struct alc_spec
*spec
= codec
->spec
;
1719 spec
->autocfg
.hp_pins
[0] = 0x14;
1720 spec
->autocfg
.speaker_pins
[0] = 0x18;
1721 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
1726 static void alc885_mbp3_setup(struct hda_codec
*codec
)
1728 struct alc_spec
*spec
= codec
->spec
;
1730 spec
->autocfg
.hp_pins
[0] = 0x15;
1731 spec
->autocfg
.speaker_pins
[0] = 0x14;
1732 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
1735 static void alc885_imac91_setup(struct hda_codec
*codec
)
1737 struct alc_spec
*spec
= codec
->spec
;
1739 spec
->autocfg
.hp_pins
[0] = 0x14;
1740 spec
->autocfg
.speaker_pins
[0] = 0x18;
1741 spec
->autocfg
.speaker_pins
[1] = 0x1a;
1742 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
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)},
1749 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
1750 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
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 */
1756 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
1760 /* toggle speaker-output according to the hp-jack state */
1761 static void alc882_targa_automute(struct hda_codec
*codec
)
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);
1769 static void alc882_targa_setup(struct hda_codec
*codec
)
1771 struct alc_spec
*spec
= codec
->spec
;
1773 spec
->autocfg
.hp_pins
[0] = 0x14;
1774 spec
->autocfg
.speaker_pins
[0] = 0x1b;
1775 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
1778 static void alc882_targa_unsol_event(struct hda_codec
*codec
, unsigned int res
)
1780 if ((res
>> 26) == ALC_HP_EVENT
)
1781 alc882_targa_automute(codec
);
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)},
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
},
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 */
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 */
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)},
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
},
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 */
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 */
1820 static void alc882_gpio_mute(struct hda_codec
*codec
, int pin
, int muted
)
1822 unsigned int gpiostate
, gpiomask
, gpiodir
;
1824 gpiostate
= snd_hda_codec_read(codec
, codec
->afg
, 0,
1825 AC_VERB_GET_GPIO_DATA
, 0);
1828 gpiostate
|= (1 << pin
);
1830 gpiostate
&= ~(1 << pin
);
1832 gpiomask
= snd_hda_codec_read(codec
, codec
->afg
, 0,
1833 AC_VERB_GET_GPIO_MASK
, 0);
1834 gpiomask
|= (1 << pin
);
1836 gpiodir
= snd_hda_codec_read(codec
, codec
->afg
, 0,
1837 AC_VERB_GET_GPIO_DIRECTION
, 0);
1838 gpiodir
|= (1 << pin
);
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
);
1848 snd_hda_codec_write(codec
, codec
->afg
, 0,
1849 AC_VERB_SET_GPIO_DATA
, gpiostate
);
1852 /* set up GPIO at initialization */
1853 static void alc885_macpro_init_hook(struct hda_codec
*codec
)
1855 alc882_gpio_mute(codec
, 0, 0);
1856 alc882_gpio_mute(codec
, 1, 0);
1859 /* set up GPIO and update auto-muting at initialization */
1860 static void alc885_imac24_init_hook(struct hda_codec
*codec
)
1862 alc885_macpro_init_hook(codec
);
1863 alc_hp_automute(codec
);
1866 /* 2ch mode (Speaker:front, Subwoofer:CLFE, Line:input, Headphones:front) */
1867 static const struct hda_verb alc889A_mb31_ch2_init
[] = {
1868 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* HP as front */
1869 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
}, /* Subwoofer on */
1870 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* Line as input */
1871 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
}, /* Line off */
1875 /* 4ch mode (Speaker:front, Subwoofer:CLFE, Line:CLFE, Headphones:front) */
1876 static const struct hda_verb alc889A_mb31_ch4_init
[] = {
1877 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* HP as front */
1878 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
}, /* Subwoofer on */
1879 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
}, /* Line as output */
1880 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
}, /* Line on */
1884 /* 5ch mode (Speaker:front, Subwoofer:CLFE, Line:input, Headphones:rear) */
1885 static const struct hda_verb alc889A_mb31_ch5_init
[] = {
1886 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* HP as rear */
1887 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
}, /* Subwoofer on */
1888 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* Line as input */
1889 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
}, /* Line off */
1893 /* 6ch mode (Speaker:front, Subwoofer:off, Line:CLFE, Headphones:Rear) */
1894 static const struct hda_verb alc889A_mb31_ch6_init
[] = {
1895 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* HP as front */
1896 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
}, /* Subwoofer off */
1897 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
}, /* Line as output */
1898 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
}, /* Line on */
1902 static const struct hda_channel_mode alc889A_mb31_6ch_modes
[4] = {
1903 { 2, alc889A_mb31_ch2_init
},
1904 { 4, alc889A_mb31_ch4_init
},
1905 { 5, alc889A_mb31_ch5_init
},
1906 { 6, alc889A_mb31_ch6_init
},
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},
1916 #define alc883_base_mixer alc882_base_mixer
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
),
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
),
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
),
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
),
1980 static const struct snd_kcontrol_new alc883_3ST_6ch_mixer
[] = {
1981 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
1982 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT
),
1983 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT
),
1984 HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT
),
1985 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT
),
1986 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT
),
1987 HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT
),
1988 HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT
),
1989 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
1990 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
1991 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
1992 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
1993 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
1994 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
1995 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
1996 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
1997 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
1998 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
1999 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
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,
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
),
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,
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
),
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
),
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
),
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
),
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
),
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
),
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
),
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
),
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)},
2160 /* Set speaker pin to front mixer */
2161 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
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
},
2172 /* toggle speaker-output according to the hp-jack state */
2173 static void alc883_medion_wim2160_setup(struct hda_codec
*codec
)
2175 struct alc_spec
*spec
= codec
->spec
;
2177 spec
->autocfg
.hp_pins
[0] = 0x1a;
2178 spec
->autocfg
.speaker_pins
[0] = 0x15;
2179 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
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
),
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
),
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
),
2232 static const struct snd_kcontrol_new alc889A_mb31_mixer
[] = {
2234 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x00, HDA_OUTPUT
),
2235 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 0x02, HDA_INPUT
),
2236 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x00, HDA_OUTPUT
),
2237 HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT
),
2238 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x00,
2240 HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x02, HDA_INPUT
),
2241 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x00, HDA_OUTPUT
),
2242 HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x02, HDA_INPUT
),
2243 /* Output switches */
2244 HDA_CODEC_MUTE("Enable Speaker", 0x14, 0x00, HDA_OUTPUT
),
2245 HDA_CODEC_MUTE("Enable Headphones", 0x15, 0x00, HDA_OUTPUT
),
2246 HDA_CODEC_MUTE_MONO("Enable LFE", 0x16, 2, 0x00, HDA_OUTPUT
),
2248 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT
),
2249 HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT
),
2251 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT
),
2252 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT
),
2253 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
2254 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
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
),
2268 static const struct hda_bind_ctls alc883_bind_cap_vol
= {
2269 .ops
= &snd_hda_bind_vol
,
2271 HDA_COMPOSE_AMP_VAL(0x08, 3, 0, HDA_INPUT
),
2272 HDA_COMPOSE_AMP_VAL(0x09, 3, 0, HDA_INPUT
),
2277 static const struct hda_bind_ctls alc883_bind_cap_switch
= {
2278 .ops
= &snd_hda_bind_sw
,
2280 HDA_COMPOSE_AMP_VAL(0x08, 3, 0, HDA_INPUT
),
2281 HDA_COMPOSE_AMP_VAL(0x09, 3, 0, HDA_INPUT
),
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
),
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
),
2302 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2303 /* .name = "Capture Source", */
2304 .name
= "Input Source",
2306 .info
= alc_mux_enum_info
,
2307 .get
= alc_mux_enum_get
,
2308 .put
= alc_mux_enum_put
,
2313 static const struct snd_kcontrol_new alc883_chmode_mixer
[] = {
2315 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2316 .name
= "Channel Mode",
2317 .info
= alc_ch_mode_info
,
2318 .get
= alc_ch_mode_get
,
2319 .put
= alc_ch_mode_put
,
2324 /* toggle speaker-output according to the hp-jack state */
2325 static void alc883_mitac_setup(struct hda_codec
*codec
)
2327 struct alc_spec
*spec
= codec
->spec
;
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
);
2335 static const struct hda_verb alc883_mitac_verbs
[] = {
2337 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
2338 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2340 {0x17, AC_VERB_SET_CONNECT_SEL
, 0x02},
2341 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
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}, */
2350 static const struct hda_verb alc883_clevo_m540r_verbs
[] = {
2352 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
2353 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2355 /*{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},*/
2357 /* enable unsolicited event */
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},
2366 static const struct hda_verb alc883_clevo_m720_verbs
[] = {
2368 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
2369 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2371 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x01},
2372 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
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
},
2381 static const struct hda_verb alc883_2ch_fujitsu_pi2515_verbs
[] = {
2383 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
2384 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2386 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
2387 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
2389 /* enable unsolicited event */
2390 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
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)},
2399 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2400 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
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},
2419 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
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
},
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
},
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
},
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)},
2452 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
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
},
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
},
2473 static const struct hda_verb alc888_6st_dell_verbs
[] = {
2474 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
2478 static const struct hda_verb alc883_vaiott_verbs
[] = {
2480 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
2481 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
2483 /* enable unsolicited event */
2484 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
2489 static void alc888_3st_hp_setup(struct hda_codec
*codec
)
2491 struct alc_spec
*spec
= codec
->spec
;
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
);
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
},
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
},
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 },
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 },
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
},
2550 static void alc888_lenovo_ms7195_setup(struct hda_codec
*codec
)
2552 struct alc_spec
*spec
= codec
->spec
;
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
);
2560 /* toggle speaker-output according to the hp-jack state */
2561 static void alc883_lenovo_nb0763_setup(struct hda_codec
*codec
)
2563 struct alc_spec
*spec
= codec
->spec
;
2565 spec
->autocfg
.hp_pins
[0] = 0x14;
2566 spec
->autocfg
.speaker_pins
[0] = 0x15;
2567 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
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
2574 static void alc883_clevo_m720_setup(struct hda_codec
*codec
)
2576 struct alc_spec
*spec
= codec
->spec
;
2578 spec
->autocfg
.hp_pins
[0] = 0x15;
2579 spec
->autocfg
.speaker_pins
[0] = 0x14;
2580 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
2583 static void alc883_clevo_m720_init_hook(struct hda_codec
*codec
)
2585 alc_hp_automute(codec
);
2586 alc88x_simple_mic_automute(codec
);
2589 static void alc883_clevo_m720_unsol_event(struct hda_codec
*codec
,
2592 switch (res
>> 26) {
2594 alc88x_simple_mic_automute(codec
);
2597 alc_sku_unsol_event(codec
, res
);
2602 /* toggle speaker-output according to the hp-jack state */
2603 static void alc883_2ch_fujitsu_pi2515_setup(struct hda_codec
*codec
)
2605 struct alc_spec
*spec
= codec
->spec
;
2607 spec
->autocfg
.hp_pins
[0] = 0x14;
2608 spec
->autocfg
.speaker_pins
[0] = 0x15;
2609 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
2612 static void alc883_haier_w66_setup(struct hda_codec
*codec
)
2614 struct alc_spec
*spec
= codec
->spec
;
2616 spec
->autocfg
.hp_pins
[0] = 0x1b;
2617 spec
->autocfg
.speaker_pins
[0] = 0x14;
2618 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
2621 static void alc883_lenovo_101e_setup(struct hda_codec
*codec
)
2623 struct alc_spec
*spec
= codec
->spec
;
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
);
2631 /* toggle speaker-output according to the hp-jack state */
2632 static void alc883_acer_aspire_setup(struct hda_codec
*codec
)
2634 struct alc_spec
*spec
= codec
->spec
;
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
);
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
},
2660 static void alc888_6st_dell_setup(struct hda_codec
*codec
)
2662 struct alc_spec
*spec
= codec
->spec
;
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
);
2672 static void alc888_lenovo_sky_setup(struct hda_codec
*codec
)
2674 struct alc_spec
*spec
= codec
->spec
;
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
);
2685 static void alc883_vaiott_setup(struct hda_codec
*codec
)
2687 struct alc_spec
*spec
= codec
->spec
;
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
);
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
},
2705 static void alc883_mode2_setup(struct hda_codec
*codec
)
2707 struct alc_spec
*spec
= codec
->spec
;
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;
2716 alc_simple_setup_automute(spec
, ALC_AUTOMUTE_AMP
);
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
},
2732 static void alc883_eee1601_inithook(struct hda_codec
*codec
)
2734 struct alc_spec
*spec
= codec
->spec
;
2736 spec
->autocfg
.hp_pins
[0] = 0x14;
2737 spec
->autocfg
.speaker_pins
[0] = 0x1b;
2738 alc_hp_automute(codec
);
2741 static const struct hda_verb alc889A_mb31_verbs
[] = {
2742 /* Init rear pin (used as headphone output) */
2743 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc4}, /* Apple Headphones */
2744 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Connect to front */
2745 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
2746 /* Init line pin (used as output in 4ch and 6ch mode) */
2747 {0x1a, AC_VERB_SET_CONNECT_SEL
, 0x02}, /* Connect to CLFE */
2748 /* Init line 2 pin (used as headphone out by default) */
2749 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* Use as input */
2750 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
}, /* Mute output */
2754 /* Mute speakers according to the headphone jack state */
2755 static void alc889A_mb31_automute(struct hda_codec
*codec
)
2757 unsigned int present
;
2759 /* Mute only in 2ch or 4ch mode */
2760 if (snd_hda_codec_read(codec
, 0x15, 0, AC_VERB_GET_CONNECT_SEL
, 0)
2762 present
= snd_hda_jack_detect(codec
, 0x15);
2763 snd_hda_codec_amp_stereo(codec
, 0x14, HDA_OUTPUT
, 0,
2764 HDA_AMP_MUTE
, present
? HDA_AMP_MUTE
: 0);
2765 snd_hda_codec_amp_stereo(codec
, 0x16, HDA_OUTPUT
, 0,
2766 HDA_AMP_MUTE
, present
? HDA_AMP_MUTE
: 0);
2770 static void alc889A_mb31_unsol_event(struct hda_codec
*codec
, unsigned int res
)
2772 if ((res
>> 26) == ALC_HP_EVENT
)
2773 alc889A_mb31_automute(codec
);
2776 static const hda_nid_t alc883_slave_dig_outs
[] = {
2777 ALC1200_DIGOUT_NID
, 0,
2780 static const hda_nid_t alc1200_slave_dig_outs
[] = {
2781 ALC883_DIGOUT_NID
, 0,
2785 * configuration and preset
2787 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",
2797 [ALC885_MACMINI3
] = "macmini3",
2798 [ALC885_MBA21
] = "mba21",
2799 [ALC885_MBP3
] = "mbp3",
2800 [ALC885_IMAC24
] = "imac24",
2801 [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",
2835 [ALC883_SONY_VAIO_TT
] = "sony-vaio-tt",
2836 [ALC882_AUTO
] = "auto",
2839 static const struct snd_pci_quirk alc882_cfg_tbl
[] = {
2840 SND_PCI_QUIRK(0x1019, 0x6668, "ECS", ALC882_6ST_DIG
),
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
2867 /* SND_PCI_QUIRK_VENDOR(0x1025, "Acer laptop", ALC883_ACER), */
2869 SND_PCI_QUIRK(0x1028, 0x020d, "Dell Inspiron 530", ALC888_6ST_DELL
),
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
),
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
),
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
),
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
),
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
),
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
),
2965 /* codec SSID table for Intel Mac */
2966 static const struct snd_pci_quirk alc882_ssid_cfg_tbl
[] = {
2967 SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC885_MBP3
),
2968 SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC885_MBP3
),
2969 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
),
2974 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
),
2977 SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC885_MBA21
),
2978 SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889A_MB31
),
2979 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
),
2982 SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5
),
2983 SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC885_MB5
),
2984 /* FIXME: HP jack sense seems not working for MBP 5,1 or 5,2,
2985 * so apparently no perfect solution yet
2987 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC885_MB5
),
2988 SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC885_MB5
),
2989 SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC885_MACMINI3
),
2993 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
,
3005 .input_mux
= &alc882_capture_source
,
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
,
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
,
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
,
3038 .input_mux
= &alc882_capture_source
,
3039 .dig_out_nid
= ALC882_DIGOUT_NID
,
3042 .mixers
= { alc885_mba21_mixer
},
3043 .init_verbs
= { alc885_mba21_init_verbs
, alc880_gpio1_init_verbs
},
3045 .dac_nids
= alc882_dac_nids
,
3046 .channel_mode
= alc885_mba21_ch_modes
,
3047 .num_channel_mode
= ARRAY_SIZE(alc885_mba21_ch_modes
),
3048 .input_mux
= &alc882_capture_source
,
3049 .unsol_event
= alc_sku_unsol_event
,
3050 .setup
= alc885_mba21_setup
,
3051 .init_hook
= alc_hp_automute
,
3054 .mixers
= { alc885_mbp3_mixer
, alc882_chmode_mixer
},
3055 .init_verbs
= { alc885_mbp3_init_verbs
,
3056 alc880_gpio1_init_verbs
},
3058 .dac_nids
= alc882_dac_nids
,
3060 .channel_mode
= alc885_mbp_4ch_modes
,
3061 .num_channel_mode
= ARRAY_SIZE(alc885_mbp_4ch_modes
),
3062 .input_mux
= &alc882_capture_source
,
3063 .dig_out_nid
= ALC882_DIGOUT_NID
,
3064 .dig_in_nid
= ALC882_DIGIN_NID
,
3065 .unsol_event
= alc_sku_unsol_event
,
3066 .setup
= alc885_mbp3_setup
,
3067 .init_hook
= alc_hp_automute
,
3070 .mixers
= { alc885_mb5_mixer
, alc882_chmode_mixer
},
3071 .init_verbs
= { alc885_mb5_init_verbs
,
3072 alc880_gpio1_init_verbs
},
3073 .num_dacs
= ARRAY_SIZE(alc882_dac_nids
),
3074 .dac_nids
= alc882_dac_nids
,
3075 .channel_mode
= alc885_mb5_6ch_modes
,
3076 .num_channel_mode
= ARRAY_SIZE(alc885_mb5_6ch_modes
),
3077 .input_mux
= &mb5_capture_source
,
3078 .dig_out_nid
= ALC882_DIGOUT_NID
,
3079 .dig_in_nid
= ALC882_DIGIN_NID
,
3080 .unsol_event
= alc_sku_unsol_event
,
3081 .setup
= alc885_mb5_setup
,
3082 .init_hook
= alc_hp_automute
,
3084 [ALC885_MACMINI3
] = {
3085 .mixers
= { alc885_macmini3_mixer
, alc882_chmode_mixer
},
3086 .init_verbs
= { alc885_macmini3_init_verbs
,
3087 alc880_gpio1_init_verbs
},
3088 .num_dacs
= ARRAY_SIZE(alc882_dac_nids
),
3089 .dac_nids
= alc882_dac_nids
,
3090 .channel_mode
= alc885_macmini3_6ch_modes
,
3091 .num_channel_mode
= ARRAY_SIZE(alc885_macmini3_6ch_modes
),
3092 .input_mux
= &macmini3_capture_source
,
3093 .dig_out_nid
= ALC882_DIGOUT_NID
,
3094 .dig_in_nid
= ALC882_DIGIN_NID
,
3095 .unsol_event
= alc_sku_unsol_event
,
3096 .setup
= alc885_macmini3_setup
,
3097 .init_hook
= alc_hp_automute
,
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
,
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
,
3126 .mixers
= {alc885_imac91_mixer
},
3127 .init_verbs
= { alc885_imac91_init_verbs
,
3128 alc880_gpio1_init_verbs
},
3129 .num_dacs
= ARRAY_SIZE(alc882_dac_nids
),
3130 .dac_nids
= alc882_dac_nids
,
3131 .channel_mode
= alc885_mba21_ch_modes
,
3132 .num_channel_mode
= ARRAY_SIZE(alc885_mba21_ch_modes
),
3133 .input_mux
= &alc889A_imac91_capture_source
,
3134 .dig_out_nid
= ALC882_DIGOUT_NID
,
3135 .dig_in_nid
= ALC882_DIGIN_NID
,
3136 .unsol_event
= alc_sku_unsol_event
,
3137 .setup
= alc885_imac91_setup
,
3138 .init_hook
= alc_hp_automute
,
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
,
3153 .input_mux
= &alc882_capture_source
,
3154 .unsol_event
= alc_sku_unsol_event
,
3155 .setup
= alc882_targa_setup
,
3156 .init_hook
= alc882_targa_automute
,
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
,
3171 .input_mux
= &alc882_capture_source
,
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
,
3184 .input_mux
= &alc882_capture_source
,
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
,
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
,
3207 .input_mux
= &alc883_capture_source
,
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
,
3217 .input_mux
= &alc883_capture_source
,
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
,
3230 .input_mux
= &alc883_3stack_6ch_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
,
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
,
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
,
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
,
3293 .input_mux
= &alc883_capture_source
,
3294 .unsol_event
= alc883_targa_unsol_event
,
3295 .setup
= alc882_targa_setup
,
3296 .init_hook
= alc882_targa_automute
,
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
,
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
,
3330 .input_mux
= &alc883_capture_source
,
3331 .unsol_event
= alc883_targa_unsol_event
,
3332 .setup
= alc882_targa_setup
,
3333 .init_hook
= alc882_targa_automute
,
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.
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
,
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
,
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
,
3376 .const_channel_count
= 6,
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
,
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
,
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
,
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
,
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
,
3418 .const_channel_count
= 6,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
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
,
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
,
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
,
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
,
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
,
3552 .input_mux
= &alc883_capture_source
,
3553 .unsol_event
= alc_sku_unsol_event
,
3554 .setup
= alc888_lenovo_ms7195_setup
,
3555 .init_hook
= alc_inithook
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
3682 .input_mux
= &alc883_asus_eee1601_capture_source
,
3683 .unsol_event
= alc_sku_unsol_event
,
3684 .init_hook
= alc883_eee1601_inithook
,
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
,
3699 .mixers
= { alc889A_mb31_mixer
, alc883_chmode_mixer
},
3700 .init_verbs
= { alc883_init_verbs
, alc889A_mb31_verbs
,
3701 alc880_gpio1_init_verbs
},
3702 .adc_nids
= alc883_adc_nids
,
3703 .num_adc_nids
= ARRAY_SIZE(alc883_adc_nids
),
3704 .capsrc_nids
= alc883_capsrc_nids
,
3705 .dac_nids
= alc883_dac_nids
,
3706 .num_dacs
= ARRAY_SIZE(alc883_dac_nids
),
3707 .channel_mode
= alc889A_mb31_6ch_modes
,
3708 .num_channel_mode
= ARRAY_SIZE(alc889A_mb31_6ch_modes
),
3709 .input_mux
= &alc889A_mb31_capture_source
,
3710 .dig_out_nid
= ALC883_DIGOUT_NID
,
3711 .unsol_event
= alc889A_mb31_unsol_event
,
3712 .init_hook
= alc889A_mb31_automute
,
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
,