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 1 */
13
/* Codec vendor 10ec:0883 */
14
/* HD codec revision 1.0 (0.2) (0x00100002) */
15
/* Subsystem ID 10250000 */
16
/* Default amplifier caps: in=00000000, out=00000000 */
17
#include "oss_hdaudio_cfg.h"
19
#include "hdaudio_codec.h"
20
#include "hdaudio_dedicated.h"
23
hdaudio_ferrari5k_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group)
27
DDB(cmn_err(CE_CONT, "hdaudio_ferrari5k_mixer_init got called.\n"));
29
// Main volume controls for PCM channels. Moved from the misc group
30
HDA_OUTAMP_F(0x0c, top_group, "front", 90, MIXF_MAINVOL);
31
HDA_OUTAMP_F(0x0d, top_group, "rear", 90, MIXF_MAINVOL);
32
HDA_OUTAMP_F(0x0e, top_group, "center/lfe", 90, MIXF_MAINVOL);
33
HDA_OUTAMP_F(0x0f, top_group, "side", 90, MIXF_MAINVOL);
34
HDA_OUTAMP_F(0x26, top_group, "pcm4", 90, MIXF_MAINVOL);
36
// Mute controls for the output pins
37
HDA_OUTMUTE(0x15, top_group, "speaker-mute", UNMUTE);
38
HDA_OUTMUTE(0x14, top_group, "headph-mute", UNMUTE);
39
HDA_OUTMUTE(0x1a, top_group, "lineout-mute", UNMUTE);
40
HDA_OUTMUTE(0x18, top_group, "mic-jack-mute", UNMUTE);
42
/* Handle PIN widgets */
44
int n, group, pin_group;
48
HDA_GROUP(pin_group, top_group, "jack");
50
if (HDA_PIN_GROUP(0x15, group, pin_group, "int-speaker", n, "jack", 8)) /* Pin widget 0x15 */
54
/* Src 0xe=center/LFE */
57
if (HDA_PINSELECT(0x15, ctl, group, "mode", -1))
58
HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out unused");
59
//HDA_INAMP(0x15, 0, group, "inlevel", 90); /* From widget 0x0c */
62
if (HDA_PIN_GROUP(0x14, group, pin_group, "headphone", n, "jack", 8)) /* Pin widget 0x14 */
66
/* Src 0xe=center/LFE */
69
if (HDA_PINSELECT(0x14, ctl, group, "mode", -1))
70
HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
71
HDA_INAMP(0x14, 0, group, "inlevel", 90); /* From widget 0x0c */
74
if (HDA_PIN_GROUP(0x18, group, pin_group, "ext-mic", n, "jack", 8)) /* Pin widget 0x18 */
78
/* Src 0xe=center/LFE */
81
if (HDA_PINSELECT(0x18, ctl, group, "mode", -1))
82
HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
83
HDA_INAMP(0x18, 0, group, "inlevel", 90); /* From widget 0x0c */
86
if (HDA_PIN_GROUP(0x19, group, pin_group, "int-mic", n, "jack", 8)) /* Pin widget 0x19 */
90
/* Src 0xe=center/LFE */
94
HDA_SETSELECT(0x19, 5); // Hardwired to mic-input
96
if (HDA_PINSELECT(0x19, ctl, group, "mode", -1))
97
HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
99
//HDA_OUTMUTE(0x19, group, "outmute", UNMUTE);
100
HDA_INAMP(0x19, 0, group, "inlevel", 90); /* From widget 0x0c */
103
if (HDA_PIN_GROUP(0x1a, group, pin_group, "line-out", n, "jack", 8)) /* Pin widget 0x1a */
107
/* Src 0xe=center/LFE */
110
if (HDA_PINSELECT(0x1a, ctl, group, "mode", 0))
111
HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
112
HDA_INAMP(0x1a, 0, group, "inlevel", 90); /* From widget 0x0c */
116
/* Handle ADC widgets */
118
int n, group, rec_group;
122
HDA_GROUP(rec_group, top_group, "record");
124
if (HDA_ADC_GROUP(0x08, group, rec_group, "rec1", n, "record", 4)) /* ADC widget 0x08 */
127
HDA_INAMP_F(0x08, 0, group, "rec1", 80, MIXF_RECVOL); /* From widget 0x23 */
129
/* Widget 0x23 (rec1) */
130
/* Src 0x18=ext-mic */
131
/* Src 0x19=int-mic */
132
/* Src 0x1a=line-out */
137
/* Src 0x15=int-speaker */
140
/* Src 0xb=input-mix */
143
if (HDA_INSRC_SELECT(0x23, group, ctl, "recsrc", 1))
144
HDA_CHOICES(ctl, "ext-mic int-mic line-out-jack unused unused unused unused unused unused unused input-mix");
146
HDA_GROUP(amp_group, group, "mute");
147
HDA_INMUTE(0x23, 0, amp_group, "ext-mic", UNMUTE); /* From widget 0x18 */
148
HDA_INMUTE(0x23, 1, amp_group, "int-mic", UNMUTE); /* From widget 0x19 */
149
HDA_INMUTE(0x23, 2, amp_group, "line-out", UNMUTE); /* From widget 0x1a */
150
HDA_INMUTE(0x23, 3, amp_group, "black", UNMUTE); /* From widget 0x1b */
151
HDA_INMUTE(0x23, 4, amp_group, "black", UNMUTE); /* From widget 0x1c */
152
HDA_INMUTE(0x23, 5, amp_group, "black", UNMUTE); /* From widget 0x1d */
153
HDA_INMUTE(0x23, 6, amp_group, "headph-jack", UNMUTE); /* From widget 0x14 */
154
HDA_INMUTE(0x23, 7, amp_group, "int-speaker", UNMUTE); /* From widget 0x15 */
155
HDA_INMUTE(0x23, 8, amp_group, "black", UNMUTE); /* From widget 0x16 */
156
HDA_INMUTE(0x23, 9, amp_group, "black", UNMUTE); /* From widget 0x17 */
157
HDA_INMUTE(0x23, 10, amp_group, "input-mix", MUTE); /* From widget 0x0b */
162
if (HDA_ADC_GROUP(0x09, group, rec_group, "rec2", n, "record", 4)) /* ADC widget 0x09 */
165
HDA_INAMP_F(0x09, 0, group, "rec2", 80, MIXF_RECVOL); /* From widget 0x22 */
167
/* Widget 0x22 (rec2) */
168
/* Src 0x18=ext-mic */
169
/* Src 0x19=int-mic */
170
/* Src 0x1a=line-out */
175
/* Src 0x15=int-speaker */
178
/* Src 0xb=input-mix */
181
if (HDA_INSRC_SELECT(0x22, group, ctl, "recsrc", 1))
182
HDA_CHOICES(ctl, "ext-mic int-mic line-out-jack unused unused unused unused unused unused unused input-mix");
184
HDA_GROUP(amp_group, group, "mute");
185
HDA_INMUTE(0x22, 0, amp_group, "ext-mic", UNMUTE); /* From widget 0x18 */
186
HDA_INMUTE(0x22, 1, amp_group, "int-mic", UNMUTE); /* From widget 0x19 */
187
HDA_INMUTE(0x22, 2, amp_group, "line-out", UNMUTE); /* From widget 0x1a */
188
HDA_INMUTE(0x22, 3, amp_group, "black", UNMUTE); /* From widget 0x1b */
189
HDA_INMUTE(0x22, 4, amp_group, "black", UNMUTE); /* From widget 0x1c */
190
HDA_INMUTE(0x22, 5, amp_group, "black", UNMUTE); /* From widget 0x1d */
191
HDA_INMUTE(0x22, 6, amp_group, "headph-jack", UNMUTE); /* From widget 0x14 */
192
HDA_INMUTE(0x22, 7, amp_group, "int-speaker", UNMUTE); /* From widget 0x15 */
193
HDA_INMUTE(0x22, 8, amp_group, "black", UNMUTE); /* From widget 0x16 */
194
HDA_INMUTE(0x22, 9, amp_group, "black", UNMUTE); /* From widget 0x17 */
195
HDA_INMUTE(0x22, 10, amp_group, "input-mix", MUTE); /* From widget 0x0b */
200
if (HDA_ADC_GROUP(0x0a, group, rec_group, "spdif-in", n, "record", 4)) /* ADC widget 0x0a */
202
/* Src 0x1f=speaker */
205
/* Handle misc widgets */
207
int n, group, misc_group;
211
HDA_GROUP(misc_group, top_group, "misc");
213
if (HDA_MISC_GROUP(0x0c, group, misc_group, "front", n, "misc", 8)) /* Misc widget 0x0c */
216
/* Src 0xb=input-mix */
220
HDA_GROUP(amp_group, group, "mute");
221
HDA_INMUTE(0x0c, 0, amp_group, "front", UNMUTE); /* From widget 0x02 */
222
HDA_INMUTE(0x0c, 1, amp_group, "input-mix", MUTE); /* From widget 0x0b */
226
if (HDA_MISC_GROUP(0x0d, group, misc_group, "rear", n, "misc", 8)) /* Misc widget 0x0d */
229
/* Src 0xb=input-mix */
233
HDA_GROUP(amp_group, group, "mute");
234
HDA_INMUTE(0x0d, 0, amp_group, "rear", UNMUTE); /* From widget 0x03 */
235
HDA_INMUTE(0x0d, 1, amp_group, "input-mix", MUTE); /* From widget 0x0b */
239
if (HDA_MISC_GROUP(0x0e, group, misc_group, "center/LFE", n, "misc", 8)) /* Misc widget 0x0e */
241
/* Src 0x4=center/LFE */
242
/* Src 0xb=input-mix */
246
HDA_GROUP(amp_group, group, "mute");
247
HDA_INMUTE(0x0e, 0, amp_group, "center/LFE", UNMUTE); /* From widget 0x04 */
248
HDA_INMUTE(0x0e, 1, amp_group, "input-mix", MUTE); /* From widget 0x0b */
252
if (HDA_MISC_GROUP(0x0f, group, misc_group, "side", n, "misc", 8)) /* Misc widget 0x0f */
255
/* Src 0xb=input-mix */
259
HDA_GROUP(amp_group, group, "mute");
260
HDA_INMUTE(0x0f, 0, amp_group, "side", UNMUTE); /* From widget 0x05 */
261
HDA_INMUTE(0x0f, 1, amp_group, "input-mix", MUTE); /* From widget 0x0b */
265
if (HDA_MISC_GROUP(0x26, group, misc_group, "pcm4", n, "misc", 8)) /* Misc widget 0x26 */
268
/* Src 0xb=input-mix */
272
HDA_GROUP(amp_group, group, "mute");
273
HDA_INMUTE(0x26, 0, amp_group, "pcm4", UNMUTE); /* From widget 0x25 */
274
HDA_INMUTE(0x26, 1, amp_group, "input-mix", MUTE); /* From widget 0x0b */
278
if (HDA_MISC_GROUP(0x0b, group, misc_group, "input-mix", n, "misc", 8)) /* Misc widget 0x0b */
281
/* Src 0x19=int-mic */
282
/* Src 0x1a=linein */
283
/* Src 0x1b=speaker */
284
/* Src 0x1c=speaker */
285
/* Src 0x1d=speaker */
286
/* Src 0x14=headphone */
287
/* Src 0x15=int-speaker */
288
/* Src 0x16=speaker */
289
/* Src 0x17=speaker */
290
HDA_INAMP(0x0b, 0, group, "ext-mic", 10); /* From widget 0x18 */
291
HDA_INAMP(0x0b, 1, group, "int-mic", 10); /* From widget 0x19 */
292
HDA_INAMP(0x0b, 2, group, "line-out", 0); /* From widget 0x1a */
293
HDA_INAMP(0x0b, 3, group, "black", 0); /* From widget 0x1b */
294
HDA_INAMP(0x0b, 4, group, "black", 0); /* From widget 0x1c */
295
HDA_INAMP(0x0b, 5, group, "black", 0); /* From widget 0x1d */
296
//HDA_INAMP(0x0b, 6, group, "headph-jack", 90); /* From widget 0x14 */
297
//HDA_INAMP(0x0b, 7, group, "int-speaker", 0); /* From widget 0x15 */
298
HDA_INAMP(0x0b, 8, group, "black", 0); /* From widget 0x16 */
299
HDA_INAMP(0x0b, 9, group, "black", 0); /* From widget 0x17 */