]>
Commit | Line | Data |
---|---|---|
1d045db9 TI |
1 | /* |
2 | * ALC660/ALC861 quirk models | |
3 | * included by patch_realtek.c | |
4 | */ | |
5 | ||
6 | /* ALC861 models */ | |
7 | enum { | |
8 | ALC861_AUTO, | |
9 | ALC861_3ST, | |
10 | ALC660_3ST, | |
11 | ALC861_3ST_DIG, | |
12 | ALC861_6ST_DIG, | |
1d045db9 | 13 | ALC861_ASUS, |
1d045db9 TI |
14 | ALC861_MODEL_LAST, |
15 | }; | |
16 | ||
17 | /* | |
18 | * ALC861 channel source setting (2/6 channel selection for 3-stack) | |
19 | */ | |
20 | ||
21 | /* | |
22 | * set the path ways for 2 channel output | |
23 | * need to set the codec line out and mic 1 pin widgets to inputs | |
24 | */ | |
25 | static const struct hda_verb alc861_threestack_ch2_init[] = { | |
26 | /* set pin widget 1Ah (line in) for input */ | |
27 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
28 | /* set pin widget 18h (mic1/2) for input, for mic also enable | |
29 | * the vref | |
30 | */ | |
31 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
32 | ||
33 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb00c }, | |
34 | #if 0 | |
35 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8)) }, /*mic*/ | |
36 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8)) }, /*line-in*/ | |
37 | #endif | |
38 | { } /* end */ | |
39 | }; | |
40 | /* | |
41 | * 6ch mode | |
42 | * need to set the codec line out and mic 1 pin widgets to outputs | |
43 | */ | |
44 | static const struct hda_verb alc861_threestack_ch6_init[] = { | |
45 | /* set pin widget 1Ah (line in) for output (Back Surround)*/ | |
46 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
47 | /* set pin widget 18h (mic1) for output (CLFE)*/ | |
48 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
49 | ||
50 | { 0x0c, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
51 | { 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
52 | ||
53 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080 }, | |
54 | #if 0 | |
55 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x01 << 8)) }, /*mic*/ | |
56 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x02 << 8)) }, /*line in*/ | |
57 | #endif | |
58 | { } /* end */ | |
59 | }; | |
60 | ||
61 | static const struct hda_channel_mode alc861_threestack_modes[2] = { | |
62 | { 2, alc861_threestack_ch2_init }, | |
63 | { 6, alc861_threestack_ch6_init }, | |
64 | }; | |
1d045db9 TI |
65 | |
66 | /* Set mic1 and line-in as input and unmute the mixer */ | |
67 | static const struct hda_verb alc861_asus_ch2_init[] = { | |
68 | /* set pin widget 1Ah (line in) for input */ | |
69 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
70 | /* set pin widget 18h (mic1/2) for input, for mic also enable | |
71 | * the vref | |
72 | */ | |
73 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
74 | ||
75 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb00c }, | |
76 | #if 0 | |
77 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8)) }, /*mic*/ | |
78 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8)) }, /*line-in*/ | |
79 | #endif | |
80 | { } /* end */ | |
81 | }; | |
82 | /* Set mic1 nad line-in as output and mute mixer */ | |
83 | static const struct hda_verb alc861_asus_ch6_init[] = { | |
84 | /* set pin widget 1Ah (line in) for output (Back Surround)*/ | |
85 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
86 | /* { 0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, */ | |
87 | /* set pin widget 18h (mic1) for output (CLFE)*/ | |
88 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
89 | /* { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, */ | |
90 | { 0x0c, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
91 | { 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
92 | ||
93 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080 }, | |
94 | #if 0 | |
95 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x01 << 8)) }, /*mic*/ | |
96 | { 0x15, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x02 << 8)) }, /*line in*/ | |
97 | #endif | |
98 | { } /* end */ | |
99 | }; | |
100 | ||
101 | static const struct hda_channel_mode alc861_asus_modes[2] = { | |
102 | { 2, alc861_asus_ch2_init }, | |
103 | { 6, alc861_asus_ch6_init }, | |
104 | }; | |
105 | ||
106 | /* patch-ALC861 */ | |
107 | ||
108 | static const struct snd_kcontrol_new alc861_base_mixer[] = { | |
109 | /* output mixer control */ | |
110 | HDA_CODEC_MUTE("Front Playback Switch", 0x03, 0x0, HDA_OUTPUT), | |
111 | HDA_CODEC_MUTE("Surround Playback Switch", 0x06, 0x0, HDA_OUTPUT), | |
112 | HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x05, 1, 0x0, HDA_OUTPUT), | |
113 | HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x05, 2, 0x0, HDA_OUTPUT), | |
114 | HDA_CODEC_MUTE("Side Playback Switch", 0x04, 0x0, HDA_OUTPUT), | |
115 | ||
116 | /*Input mixer control */ | |
117 | /* HDA_CODEC_VOLUME("Input Playback Volume", 0x15, 0x0, HDA_OUTPUT), | |
118 | HDA_CODEC_MUTE("Input Playback Switch", 0x15, 0x0, HDA_OUTPUT), */ | |
119 | HDA_CODEC_VOLUME("CD Playback Volume", 0x15, 0x0, HDA_INPUT), | |
120 | HDA_CODEC_MUTE("CD Playback Switch", 0x15, 0x0, HDA_INPUT), | |
121 | HDA_CODEC_VOLUME("Line Playback Volume", 0x15, 0x02, HDA_INPUT), | |
122 | HDA_CODEC_MUTE("Line Playback Switch", 0x15, 0x02, HDA_INPUT), | |
123 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x15, 0x01, HDA_INPUT), | |
124 | HDA_CODEC_MUTE("Mic Playback Switch", 0x15, 0x01, HDA_INPUT), | |
125 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x10, 0x01, HDA_OUTPUT), | |
126 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1a, 0x03, HDA_INPUT), | |
127 | ||
128 | { } /* end */ | |
129 | }; | |
130 | ||
131 | static const struct snd_kcontrol_new alc861_3ST_mixer[] = { | |
132 | /* output mixer control */ | |
133 | HDA_CODEC_MUTE("Front Playback Switch", 0x03, 0x0, HDA_OUTPUT), | |
134 | HDA_CODEC_MUTE("Surround Playback Switch", 0x06, 0x0, HDA_OUTPUT), | |
135 | HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x05, 1, 0x0, HDA_OUTPUT), | |
136 | HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x05, 2, 0x0, HDA_OUTPUT), | |
137 | /*HDA_CODEC_MUTE("Side Playback Switch", 0x04, 0x0, HDA_OUTPUT), */ | |
138 | ||
139 | /* Input mixer control */ | |
140 | /* HDA_CODEC_VOLUME("Input Playback Volume", 0x15, 0x0, HDA_OUTPUT), | |
141 | HDA_CODEC_MUTE("Input Playback Switch", 0x15, 0x0, HDA_OUTPUT), */ | |
142 | HDA_CODEC_VOLUME("CD Playback Volume", 0x15, 0x0, HDA_INPUT), | |
143 | HDA_CODEC_MUTE("CD Playback Switch", 0x15, 0x0, HDA_INPUT), | |
144 | HDA_CODEC_VOLUME("Line Playback Volume", 0x15, 0x02, HDA_INPUT), | |
145 | HDA_CODEC_MUTE("Line Playback Switch", 0x15, 0x02, HDA_INPUT), | |
146 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x15, 0x01, HDA_INPUT), | |
147 | HDA_CODEC_MUTE("Mic Playback Switch", 0x15, 0x01, HDA_INPUT), | |
148 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x10, 0x01, HDA_OUTPUT), | |
149 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1a, 0x03, HDA_INPUT), | |
150 | ||
151 | { | |
152 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | |
153 | .name = "Channel Mode", | |
154 | .info = alc_ch_mode_info, | |
155 | .get = alc_ch_mode_get, | |
156 | .put = alc_ch_mode_put, | |
157 | .private_value = ARRAY_SIZE(alc861_threestack_modes), | |
158 | }, | |
159 | { } /* end */ | |
160 | }; | |
161 | ||
1d045db9 TI |
162 | /* |
163 | * generic initialization of ADC, input mixers and output mixers | |
164 | */ | |
165 | static const struct hda_verb alc861_base_init_verbs[] = { | |
166 | /* | |
167 | * Unmute ADC0 and set the default input to mic-in | |
168 | */ | |
169 | /* port-A for surround (rear panel) */ | |
170 | { 0x0e, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
171 | { 0x0e, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
172 | /* port-B for mic-in (rear panel) with vref */ | |
173 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
174 | /* port-C for line-in (rear panel) */ | |
175 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
176 | /* port-D for Front */ | |
177 | { 0x0b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
178 | { 0x0b, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
179 | /* port-E for HP out (front panel) */ | |
180 | { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 }, | |
181 | /* route front PCM to HP */ | |
182 | { 0x0f, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
183 | /* port-F for mic-in (front panel) with vref */ | |
184 | { 0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
185 | /* port-G for CLFE (rear panel) */ | |
186 | { 0x1f, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
187 | { 0x1f, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
188 | /* port-H for side (rear panel) */ | |
189 | { 0x20, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
190 | { 0x20, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
191 | /* CD-in */ | |
192 | { 0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
193 | /* route front mic to ADC1*/ | |
194 | {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, | |
195 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
196 | ||
197 | /* Unmute DAC0~3 & spdif out*/ | |
198 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
199 | {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
200 | {0x05, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
201 | {0x06, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
202 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
203 | ||
204 | /* Unmute Mixer 14 (mic) 1c (Line in)*/ | |
205 | {0x014, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
206 | {0x014, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
207 | {0x01c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
208 | {0x01c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
209 | ||
210 | /* Unmute Stereo Mixer 15 */ | |
211 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
212 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
213 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(2)}, | |
214 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb00c}, /* Output 0~12 step */ | |
215 | ||
216 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
217 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
218 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
219 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
220 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
221 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
222 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
223 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
224 | /* hp used DAC 3 (Front) */ | |
225 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(3)}, | |
226 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(2)}, | |
227 | ||
228 | { } | |
229 | }; | |
230 | ||
231 | static const struct hda_verb alc861_threestack_init_verbs[] = { | |
232 | /* | |
233 | * Unmute ADC0 and set the default input to mic-in | |
234 | */ | |
235 | /* port-A for surround (rear panel) */ | |
236 | { 0x0e, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 }, | |
237 | /* port-B for mic-in (rear panel) with vref */ | |
238 | { 0x0d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
239 | /* port-C for line-in (rear panel) */ | |
240 | { 0x0c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
241 | /* port-D for Front */ | |
242 | { 0x0b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40 }, | |
243 | { 0x0b, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
244 | /* port-E for HP out (front panel) */ | |
245 | { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 }, | |
246 | /* route front PCM to HP */ | |
247 | { 0x0f, AC_VERB_SET_CONNECT_SEL, 0x00 }, | |
248 | /* port-F for mic-in (front panel) with vref */ | |
249 | { 0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | |
250 | /* port-G for CLFE (rear panel) */ | |
251 | { 0x1f, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 }, | |
252 | /* port-H for side (rear panel) */ | |
253 | { 0x20, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00 }, | |
254 | /* CD-in */ | |
255 | { 0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20 }, | |
256 | /* route front mic to ADC1*/ | |
257 | {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, | |
258 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
259 | /* Unmute DAC0~3 & spdif out*/ | |
260 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
261 | {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
262 | {0x05, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
263 | {0x06, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
264 | {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
265 | ||
266 | /* Unmute Mixer 14 (mic) 1c (Line in)*/ | |
267 | {0x014, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
268 | {0x014, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
269 | {0x01c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
270 | {0x01c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
271 | ||
272 | /* Unmute Stereo Mixer 15 */ | |
273 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
274 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
275 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(2)}, | |
276 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb00c}, /* Output 0~12 step */ | |
277 | ||
278 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
279 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
280 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
281 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
282 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
283 | {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
284 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
285 | {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
286 | /* hp used DAC 3 (Front) */ | |
287 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(3)}, | |
288 | {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(2)}, | |
289 | { } | |
290 | }; | |
291 | ||
1d045db9 TI |
292 | #define ALC861_DIGOUT_NID 0x07 |
293 | ||
294 | static const struct hda_channel_mode alc861_8ch_modes[1] = { | |
295 | { 8, NULL } | |
296 | }; | |
297 | ||
298 | static const hda_nid_t alc861_dac_nids[4] = { | |
299 | /* front, surround, clfe, side */ | |
300 | 0x03, 0x06, 0x05, 0x04 | |
301 | }; | |
302 | ||
303 | static const hda_nid_t alc660_dac_nids[3] = { | |
304 | /* front, clfe, surround */ | |
305 | 0x03, 0x05, 0x06 | |
306 | }; | |
307 | ||
308 | static const hda_nid_t alc861_adc_nids[1] = { | |
309 | /* ADC0-2 */ | |
310 | 0x08, | |
311 | }; | |
312 | ||
313 | static const struct hda_input_mux alc861_capture_source = { | |
314 | .num_items = 5, | |
315 | .items = { | |
316 | { "Mic", 0x0 }, | |
317 | { "Front Mic", 0x3 }, | |
318 | { "Line", 0x1 }, | |
319 | { "CD", 0x4 }, | |
320 | { "Mixer", 0x5 }, | |
321 | }, | |
322 | }; | |
323 | ||
324 | /* | |
325 | * configuration and preset | |
326 | */ | |
327 | static const char * const alc861_models[ALC861_MODEL_LAST] = { | |
328 | [ALC861_3ST] = "3stack", | |
329 | [ALC660_3ST] = "3stack-660", | |
330 | [ALC861_3ST_DIG] = "3stack-dig", | |
331 | [ALC861_6ST_DIG] = "6stack-dig", | |
1d045db9 TI |
332 | [ALC861_AUTO] = "auto", |
333 | }; | |
334 | ||
335 | static const struct snd_pci_quirk alc861_cfg_tbl[] = { | |
336 | SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC861_3ST), | |
1d045db9 | 337 | SND_PCI_QUIRK(0x1043, 0x81cb, "ASUS P1-AH2", ALC861_3ST_DIG), |
1d045db9 TI |
338 | SND_PCI_QUIRK(0x1462, 0x7254, "HP dx2200 (MSI MS-7254)", ALC861_3ST), |
339 | SND_PCI_QUIRK(0x1462, 0x7297, "HP dx2250 (MSI MS-7297)", ALC861_3ST), | |
1d045db9 TI |
340 | SND_PCI_QUIRK(0x1849, 0x0660, "Asrock 939SLI32", ALC660_3ST), |
341 | SND_PCI_QUIRK(0x8086, 0xd600, "Intel", ALC861_3ST), | |
342 | {} | |
343 | }; | |
344 | ||
345 | static const struct alc_config_preset alc861_presets[] = { | |
346 | [ALC861_3ST] = { | |
347 | .mixers = { alc861_3ST_mixer }, | |
348 | .init_verbs = { alc861_threestack_init_verbs }, | |
349 | .num_dacs = ARRAY_SIZE(alc861_dac_nids), | |
350 | .dac_nids = alc861_dac_nids, | |
351 | .num_channel_mode = ARRAY_SIZE(alc861_threestack_modes), | |
352 | .channel_mode = alc861_threestack_modes, | |
353 | .need_dac_fix = 1, | |
354 | .num_adc_nids = ARRAY_SIZE(alc861_adc_nids), | |
355 | .adc_nids = alc861_adc_nids, | |
356 | .input_mux = &alc861_capture_source, | |
357 | }, | |
358 | [ALC861_3ST_DIG] = { | |
359 | .mixers = { alc861_base_mixer }, | |
360 | .init_verbs = { alc861_threestack_init_verbs }, | |
361 | .num_dacs = ARRAY_SIZE(alc861_dac_nids), | |
362 | .dac_nids = alc861_dac_nids, | |
363 | .dig_out_nid = ALC861_DIGOUT_NID, | |
364 | .num_channel_mode = ARRAY_SIZE(alc861_threestack_modes), | |
365 | .channel_mode = alc861_threestack_modes, | |
366 | .need_dac_fix = 1, | |
367 | .num_adc_nids = ARRAY_SIZE(alc861_adc_nids), | |
368 | .adc_nids = alc861_adc_nids, | |
369 | .input_mux = &alc861_capture_source, | |
370 | }, | |
371 | [ALC861_6ST_DIG] = { | |
372 | .mixers = { alc861_base_mixer }, | |
373 | .init_verbs = { alc861_base_init_verbs }, | |
374 | .num_dacs = ARRAY_SIZE(alc861_dac_nids), | |
375 | .dac_nids = alc861_dac_nids, | |
376 | .dig_out_nid = ALC861_DIGOUT_NID, | |
377 | .num_channel_mode = ARRAY_SIZE(alc861_8ch_modes), | |
378 | .channel_mode = alc861_8ch_modes, | |
379 | .num_adc_nids = ARRAY_SIZE(alc861_adc_nids), | |
380 | .adc_nids = alc861_adc_nids, | |
381 | .input_mux = &alc861_capture_source, | |
382 | }, | |
383 | [ALC660_3ST] = { | |
384 | .mixers = { alc861_3ST_mixer }, | |
385 | .init_verbs = { alc861_threestack_init_verbs }, | |
386 | .num_dacs = ARRAY_SIZE(alc660_dac_nids), | |
387 | .dac_nids = alc660_dac_nids, | |
388 | .num_channel_mode = ARRAY_SIZE(alc861_threestack_modes), | |
389 | .channel_mode = alc861_threestack_modes, | |
390 | .need_dac_fix = 1, | |
391 | .num_adc_nids = ARRAY_SIZE(alc861_adc_nids), | |
392 | .adc_nids = alc861_adc_nids, | |
393 | .input_mux = &alc861_capture_source, | |
394 | }, | |
1d045db9 TI |
395 | }; |
396 |