3
* This file is part of Open Sound System.
5
* Copyright (C) 4Front Technologies 1996-2008.
7
* This this source file is released under GPL v2 license (no other versions).
8
* See the COPYING file included in the main directory of this source
9
* distribution for the license terms and conditions.
12
/* Codec index is 0 */
13
/* Codec vendor 11d4:1988 */
14
/* HD codec revision 1.0 (4.0) (0x00100400) */
15
/* Subsystem ID 104381e1 */
16
/* Default amplifier caps: in=80000000, out=00052727 */
17
#include "oss_hdaudio_cfg.h"
19
#include "hdaudio_codec.h"
20
#include "hdaudio_dedicated.h"
23
hdaudio_Asus_P4B_E_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad,
28
DDB (cmn_err (CE_CONT, "hdaudio_Asus_P4B_E_mixer_init got called.\n"));
30
HDA_OUTAMP_F (0x04, top_group, "front", 100, MIXF_PCMVOL);
31
HDA_COLOR (ctl, OSS_RGB_GREEN);
32
HDA_OUTAMP_F (0x0a, top_group, "side", 100, MIXF_PCMVOL);
33
HDA_COLOR (ctl, OSS_RGB_GRAY);
34
HDA_OUTAMP_F (0x05, top_group, "center/LFE", 100, MIXF_PCMVOL);
35
HDA_COLOR (ctl, OSS_RGB_ORANGE);
36
HDA_OUTAMP_F (0x06, top_group, "rear", 100, MIXF_PCMVOL);
37
HDA_COLOR (ctl, OSS_RGB_BLACK);
38
HDA_OUTAMP_F (0x03, top_group, "headphone", 100, MIXF_PCMVOL);
39
HDA_OUTAMP_F (0x21, top_group, "input-mix", 100, MIXF_PCMVOL);
40
HDA_OUTAMP_F (0x10, top_group, "pcbeep", 100, MIXF_PCMVOL);
42
/* Handle misc widgets */
48
HDA_GROUP (group, top_group, "input-mix");
50
//if (HDA_MISC_GROUP(0x20, group, misc_group, "input-mix", n, "misc", 4)) /* Misc widget 0x20 */
52
/* Src 0x39=fppink-micboost */
53
/* Src 0x33=blue-insel */
54
/* Src 0x38=fpgreen-micboost */
55
/* Src 0x3d=green-micboost */
56
/* Src 0x34=pink-insel */
57
/* Src 0x3b=black-micboost */
60
HDA_INAMP (0x20, 0, group, "fp-pink", 100); /* From widget 0x39 */
61
HDA_COLOR (ctl, OSS_RGB_PINK);
63
HDA_INAMP (0x20, 1, group, "blue", 100); /* From widget 0x33 */
64
HDA_COLOR (ctl, OSS_RGB_BLUE);
66
HDA_INAMP (0x20, 2, group, "fp-green", 100); /* From widget 0x38 */
67
HDA_COLOR (ctl, OSS_RGB_GREEN);
69
HDA_INAMP (0x20, 3, group, "green", 100); /* From widget 0x3d */
70
HDA_COLOR (ctl, OSS_RGB_GREEN);
72
HDA_INAMP (0x20, 4, group, "pink", 100); /* From widget 0x34 */
73
HDA_COLOR (ctl, OSS_RGB_PINK);
75
HDA_INAMP (0x20, 5, group, "black", 100); /* From widget 0x3b */
76
HDA_COLOR (ctl, OSS_RGB_BLACK);
78
HDA_INAMP (0x20, 6, group, "cd", 100); /* From widget 0x18 */
81
HDA_INAMP (0x20, 7, group, "pcbeep", 100); /* From widget 0x1a */
85
// This seems to be unnecessary selector
86
/* Widget 0x33 (blue-insel) */
87
/* Src 0x3a=blue-micboost */
90
if (HDA_SELECT (0x33, "src", ctl, group, -1))
92
HDA_CHOICES (ctl, "blue grey orange");
97
// This seems to be unnecessary selector
98
/* Widget 0x34 (pink-insel) */
99
/* Src 0x3c=pink-micboost */
101
/* Src 0x24=orange */
102
if (HDA_SELECT (0x34, "src", ctl, group, -1))
104
HDA_CHOICES (ctl, "pink grey orange");
109
/* Handle ADC widgets */
111
int n, group, rec_group;
115
HDA_GROUP (rec_group, top_group, "record");
118
if (HDA_ADC_GROUP (0x07, group, rec_group, "spdin", n, "record", 4)) /* ADC widget 0x07 */
120
/* Src 0x1c=spdif-in */
124
if (HDA_ADC_GROUP (0x08, group, rec_group, "rec1", n, "record", 4)) /* ADC widget 0x08 */
126
/* Src 0xc=rec1-src */
128
/* Widget 0x0c (rec1-src) */
129
/* Src 0x38=fpgreen-micboost */
130
/* Src 0xbc= (0x3c=porte-boost?) */
131
/* Src 0x18=int-black */
132
/* Src 0x24=orange */
134
/* Src 0x3d=green-micboost */
135
/* Src 0x20=input-mix */
136
if (HDA_SELECT (0x0c, "src", ctl, group, -1))
138
HDA_CHOICES (ctl, "fp-green pink cd orange grey green input-mix");
140
HDA_OUTAMP_F (0x0c, group, "-", 100, MIXF_RECVOL);
143
if (HDA_ADC_GROUP (0x09, group, rec_group, "rec2", n, "record", 4)) /* ADC widget 0x09 */
145
/* Src 0xd=rec2-src */
147
/* Widget 0x0d (rec2-src) */
148
/* Src 0x38=fpgreen-micboost */
149
/* Src 0xbc= (0x3c=porte-boost?) */
150
/* Src 0x18=int-black */
151
/* Src 0x24=orange */
153
/* Src 0x3d=green-micboost */
154
/* Src 0x20=input-mix */
155
if (HDA_SELECT (0x0d, "src", ctl, group, -1))
157
HDA_CHOICES (ctl, "fp-green pink cd orange grey green input-mix");
159
HDA_OUTAMP_F (0x0d, group, "-", 100, MIXF_RECVOL);
162
if (HDA_ADC_GROUP (0x0f, group, rec_group, "rec3", n, "record", 4)) /* ADC widget 0x0f */
164
/* Src 0xe=rec3-src */
166
/* Widget 0x0e (rec3-src) */
167
/* Src 0x38=fpgreen-micboost */
168
/* Src 0xbc= (0x3c=porte-boost?) */
169
/* Src 0x18=int-black */
170
/* Src 0x24=orange */
172
/* Src 0x3d=green-micboost */
173
/* Src 0x20=input-mix */
174
if (HDA_SELECT (0x0e, "src", ctl, group, -1))
176
HDA_CHOICES (ctl, "fp-green pink cd orange grey green input-mix");
178
HDA_OUTAMP_F (0x0e, group, "-", 100, MIXF_RECVOL);
182
/* Handle PIN widgets */
184
int n, group, pin_group;
188
HDA_GROUP (pin_group, top_group, "jack");
190
if (HDA_PIN_GROUP (0x11, group, pin_group, "fp-green", n, "jack", 4)) /* Pin widget 0x11 */
192
/* Src 0x22=headphon-mix */
193
if (HDA_PINSELECT (0x11, ctl, group, "mode", -1))
194
HDA_CHOICES (ctl, "headphone-out input");
195
HDA_OUTMUTE (0x11, group, "inmute", UNMUTE);
197
/* Widget 0x22 (headphon-mix) */
198
/* Src 0x37=fpgreen-outsel */
199
/* Src 0x21=input-mix */
203
HDA_GROUP (amp_group, group, "mute");
204
HDA_INMUTE_F (0x22, 0, amp_group, "headphone", UNMUTE, MIXF_MAINVOL); /* From widget 0x37 */
205
HDA_INMUTE_F (0x22, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
207
/* Widget 0x38 (fpgreen-micboost) */
208
/* Src 0x11=fp-green */
209
HDA_OUTAMP (0x38, group, "micboost", 100);
212
if (HDA_PIN_GROUP (0x14, group, pin_group, "fp-pink", n, "jack", 4)) /* Pin widget 0x14 */
214
/* Src 0x2b=fp-mic-mix */
215
if (HDA_PINSELECT (0x14, ctl, group, "mode", -1))
216
HDA_CHOICES (ctl, "headphone-out input");
217
HDA_OUTMUTE (0x14, group, "inmute", UNMUTE);
219
/* Widget 0x2b (fp-mic-mix) */
220
/* Src 0x30=fppink-outsel */
221
/* Src 0x21=input-mix */
225
HDA_GROUP (amp_group, group, "mute");
226
HDA_INMUTE_F (0x2b, 0, amp_group, "headphone", UNMUTE, MIXF_MAINVOL); /* From widget 0x30 */
227
HDA_INMUTE_F (0x2b, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
229
/* Widget 0x39 (fppink-micboost) */
230
/* Src 0x14=fp-pink */
231
HDA_OUTAMP (0x39, group, "micboost", 100);
234
if (HDA_PIN_GROUP (0x12, group, pin_group, "green", n, "jack", 0)) /* Pin widget 0x12 */
236
/* Src 0x29=front-mix */
237
if (HDA_PINSELECT (0x12, ctl, group, "mode", -1))
238
HDA_CHOICES (ctl, "front-out input");
239
HDA_OUTMUTE (0x12, group, "inmute", UNMUTE);
241
/* Widget 0x29 (front-mix) */
243
/* Src 0x21=input-mix */
247
HDA_GROUP (amp_group, group, "mute");
248
HDA_INMUTE_F (0x29, 0, amp_group, "front", UNMUTE, MIXF_MAINVOL); /* From widget 0x04 */
249
HDA_INMUTE_F (0x29, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
251
/* Widget 0x3d (green-micboost) */
253
HDA_OUTAMP (0x3d, group, "micboost", 100);
256
if (HDA_PIN_GROUP (0x13, group, pin_group, "int-black", n, "jack", 4)) /* Pin widget 0x13 */
258
/* Src 0x2d=mono-mixdown */
259
if (HDA_PINSELECT (0x13, ctl, group, "mode", -1))
260
HDA_CHOICES (ctl, "mono-out input");
261
HDA_OUTAMP (0x13, group, "invol", 100);
263
/* Widget 0x2d (mono-mixdown) */
264
/* Src 0x1e=mono-mix */
266
/* Widget 0x1e (mono-mix) */
267
/* Src 0x36=mono-sel */
268
/* Src 0x21=input-mix */
272
HDA_GROUP (amp_group, group, "mute");
273
HDA_INMUTE_F (0x1e, 0, amp_group, "mono", UNMUTE, MIXF_MAINVOL); /* From widget 0x36 */
274
HDA_INMUTE_F (0x1e, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
278
if (HDA_PIN_GROUP (0x15, group, pin_group, "blue", n, "jack", 4)) /* Pin widget 0x15 */
280
/* Src 0x2c=linein-mix */
281
if (HDA_PINSELECT (0x15, ctl, group, "mode", -1))
282
HDA_CHOICES (ctl, "front-out input");
283
HDA_OUTMUTE (0x15, group, "inmute", UNMUTE);
285
/* Widget 0x2c (linein-mix) */
286
/* Src 0x31=blue-outsel */
287
/* Src 0x21=input-mix */
291
HDA_GROUP (amp_group, group, "mute");
292
HDA_INMUTE_F (0x2c, 0, amp_group, "front", UNMUTE, MIXF_MAINVOL); /* From widget 0x31 */
293
HDA_INMUTE_F (0x2c, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
295
/* Src 0x15=linein */
296
HDA_OUTAMP (0x3a, group, "micboost", 100);
299
if (HDA_PIN_GROUP (0x16, group, pin_group, "black", n, "jack", 4)) /* Pin widget 0x16 */
301
/* Src 0x2a=rear-mix */
302
if (HDA_PINSELECT (0x16, ctl, group, "mode", -1))
303
HDA_CHOICES (ctl, "rear-out input");
304
HDA_OUTMUTE (0x16, group, "inmute", UNMUTE);
306
/* Widget 0x2a (rear-mix) */
308
/* Src 0x21=input-mix */
312
HDA_GROUP (amp_group, group, "mute");
313
HDA_INMUTE_F (0x2a, 0, amp_group, "rear", UNMUTE, MIXF_MAINVOL); /* From widget 0x06 */
314
HDA_INMUTE_F (0x2a, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
316
/* Widget 0x3b (black-micboost) */
318
HDA_OUTAMP (0x3b, group, "micboost", 100);
321
if (HDA_PIN_GROUP (0x17, group, pin_group, "pink", n, "jack", 0)) /* Pin widget 0x17 */
323
/* Src 0x26=mic-mix */
324
if (HDA_PINSELECT (0x17, ctl, group, "mode", -1))
325
HDA_CHOICES (ctl, "center/LFE-out input");
326
HDA_OUTMUTE (0x17, group, "inmute", UNMUTE);
328
/* Widget 0x26 (mic-mix) */
329
/* Src 0x32=pink-outsel */
330
/* Src 0x21=input-mix */
334
HDA_GROUP (amp_group, group, "mute");
335
HDA_INMUTE_F (0x26, 0, amp_group, "center/LFE", UNMUTE, MIXF_MAINVOL); /* From widget 0x32 */
336
HDA_INMUTE_F (0x26, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
339
HDA_OUTAMP (0x3c, group, "micboost", 100);
343
if (HDA_PIN_GROUP (0x18, group, pin_group, "int-black", n, "jack", 4)) /* Pin widget 0x18 */
345
if (HDA_PINSELECT (0x18, ctl, group, "mode", -1))
346
HDA_CHOICES (ctl, "input");
349
if (HDA_PIN_GROUP (0x1a, group, pin_group, "int-black", n, "jack", 4)) /* Pin widget 0x1a */
351
if (HDA_PINSELECT (0x1a, ctl, group, "mode", -1))
352
HDA_CHOICES (ctl, "input");
356
if (HDA_PIN_GROUP (0x24, group, pin_group, "orange", n, "jack", 4)) /* Pin widget 0x24 */
358
/* Src 0x27=center/LFE-mix */
359
if (HDA_PINSELECT (0x24, ctl, group, "mode", -1))
360
HDA_CHOICES (ctl, "center/LFE-out input");
361
HDA_OUTMUTE (0x24, group, "inmute", UNMUTE);
363
/* Widget 0x27 (center/LFE-mix) */
364
/* Src 0x5=center/LFE */
365
/* Src 0x21=input-mix */
369
HDA_GROUP (amp_group, group, "mute");
370
HDA_INMUTE_F (0x27, 0, amp_group, "center/LFE", UNMUTE, MIXF_MAINVOL); /* From widget 0x05 */
371
HDA_INMUTE_F (0x27, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */
375
if (HDA_PIN_GROUP (0x25, group, pin_group, "grey", n, "jack", 4)) /* Pin widget 0x25 */
377
/* Src 0x28=side-mix */
378
if (HDA_PINSELECT (0x25, ctl, group, "mode", -1))
379
HDA_CHOICES (ctl, "side-out input");
380
HDA_OUTMUTE (0x25, group, "inmute", UNMUTE);
382
/* Widget 0x28 (side-mix) */
384
/* Src 0x21=input-mix */
388
HDA_GROUP (amp_group, group, "mute");
389
HDA_INMUTE_F (0x28, 0, amp_group, "side", UNMUTE, MIXF_MAINVOL); /* From widget 0x0a */
390
HDA_INMUTE_F (0x28, 1, amp_group, "input-mix", UNMUTE, MIXF_MAINVOL); /* From widget 0x21 */