~ubuntu-branches/ubuntu/oneiric/oss4/oneiric-proposed

« back to all changes in this revision

Viewing changes to kernel/drv/oss_hdaudio/hdaudio_ferrari5k.c

  • Committer: Bazaar Package Importer
  • Author(s): Stefano Rivera
  • Date: 2011-06-16 20:37:48 UTC
  • mfrom: (5.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20110616203748-jbrxik6ql33z54co
Tags: 4.2-build2004-1ubuntu1
* Merge from Debian unstable.
  - Supports our current kernel (LP: #746048)
  Remaining changes:
  - debian/oss4-dkms.dkms.in: s/source/build/ in Kernel headers paths.
* ld-as-needed.patch: Re-order CC arguments to enable building with ld
  --as-needed (LP: #770972)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *
 
3
 * This file is part of Open Sound System.
 
4
 *
 
5
 * Copyright (C) 4Front Technologies 1996-2008.
 
6
 *
 
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.
 
10
 *
 
11
 */
 
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"
 
18
#include "hdaudio.h"
 
19
#include "hdaudio_codec.h"
 
20
#include "hdaudio_dedicated.h"
 
21
 
 
22
int
 
23
hdaudio_ferrari5k_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group)
 
24
{
 
25
  int ctl=0;
 
26
 
 
27
  DDB(cmn_err(CE_CONT, "hdaudio_ferrari5k_mixer_init got called.\n"));
 
28
 
 
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);
 
35
 
 
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);
 
41
 
 
42
  /* Handle PIN widgets */
 
43
  {
 
44
        int n, group, pin_group;
 
45
 
 
46
        n=0;
 
47
 
 
48
        HDA_GROUP(pin_group, top_group, "jack");
 
49
 
 
50
        if (HDA_PIN_GROUP(0x15, group, pin_group, "int-speaker", n, "jack", 8)) /* Pin widget 0x15 */
 
51
           {
 
52
                /* Src 0xc=front */
 
53
                /* Src 0xd=rear */
 
54
                /* Src 0xe=center/LFE */
 
55
                /* Src 0xf=side */
 
56
                /* Src 0x26=pcm4 */
 
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 */
 
60
           }
 
61
 
 
62
        if (HDA_PIN_GROUP(0x14, group, pin_group, "headphone", n, "jack", 8))   /* Pin widget 0x14 */
 
63
           {
 
64
                /* Src 0xc=front */
 
65
                /* Src 0xd=rear */
 
66
                /* Src 0xe=center/LFE */
 
67
                /* Src 0xf=side */
 
68
                /* Src 0x26=pcm4 */
 
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 */
 
72
           }
 
73
 
 
74
        if (HDA_PIN_GROUP(0x18, group, pin_group, "ext-mic", n, "jack", 8))     /* Pin widget 0x18 */
 
75
           {
 
76
                /* Src 0xc=front */
 
77
                /* Src 0xd=rear */
 
78
                /* Src 0xe=center/LFE */
 
79
                /* Src 0xf=side */
 
80
                /* Src 0x26=pcm4 */
 
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 */
 
84
           }
 
85
 
 
86
        if (HDA_PIN_GROUP(0x19, group, pin_group, "int-mic", n, "jack", 8))     /* Pin widget 0x19 */
 
87
           {
 
88
                /* Src 0xc=front */
 
89
                /* Src 0xd=rear */
 
90
                /* Src 0xe=center/LFE */
 
91
                /* Src 0xf=side */
 
92
                /* Src 0x26=pcm4 */
 
93
#if 1
 
94
                HDA_SETSELECT(0x19, 5); // Hardwired to mic-input
 
95
#else
 
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");
 
98
#endif
 
99
                //HDA_OUTMUTE(0x19, group, "outmute", UNMUTE);
 
100
                HDA_INAMP(0x19, 0, group, "inlevel", 90);       /* From widget 0x0c */
 
101
           }
 
102
 
 
103
        if (HDA_PIN_GROUP(0x1a, group, pin_group, "line-out", n, "jack", 8))    /* Pin widget 0x1a */
 
104
           {
 
105
                /* Src 0xc=front */
 
106
                /* Src 0xd=rear */
 
107
                /* Src 0xe=center/LFE */
 
108
                /* Src 0xf=side */
 
109
                /* Src 0x26=pcm4 */
 
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 */
 
113
           }
 
114
  }
 
115
 
 
116
  /* Handle ADC widgets */
 
117
  {
 
118
        int n, group, rec_group;
 
119
 
 
120
        n=0;
 
121
 
 
122
        HDA_GROUP(rec_group, top_group, "record");
 
123
 
 
124
        if (HDA_ADC_GROUP(0x08, group, rec_group, "rec1", n, "record", 4))      /* ADC widget 0x08 */
 
125
           {
 
126
                /* Src 0x23=rec1 */
 
127
                HDA_INAMP_F(0x08, 0, group, "rec1", 80, MIXF_RECVOL);   /* From widget 0x23 */
 
128
 
 
129
                /* Widget 0x23 (rec1) */
 
130
                /* Src 0x18=ext-mic */
 
131
                /* Src 0x19=int-mic */
 
132
                /* Src 0x1a=line-out */
 
133
                /* Src 0x1b=black */
 
134
                /* Src 0x1c=black */
 
135
                /* Src 0x1d=black */
 
136
                /* Src 0x14=black */
 
137
                /* Src 0x15=int-speaker */
 
138
                /* Src 0x16=black */
 
139
                /* Src 0x17=black */
 
140
                /* Src 0xb=input-mix */
 
141
                {
 
142
#if 1
 
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");
 
145
#else
 
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 */
 
158
#endif
 
159
                }
 
160
           }
 
161
 
 
162
        if (HDA_ADC_GROUP(0x09, group, rec_group, "rec2", n, "record", 4))      /* ADC widget 0x09 */
 
163
           {
 
164
                /* Src 0x22=rec2 */
 
165
                HDA_INAMP_F(0x09, 0, group, "rec2", 80, MIXF_RECVOL);   /* From widget 0x22 */
 
166
 
 
167
                /* Widget 0x22 (rec2) */
 
168
                /* Src 0x18=ext-mic */
 
169
                /* Src 0x19=int-mic */
 
170
                /* Src 0x1a=line-out */
 
171
                /* Src 0x1b=black */
 
172
                /* Src 0x1c=black */
 
173
                /* Src 0x1d=black */
 
174
                /* Src 0x14=black */
 
175
                /* Src 0x15=int-speaker */
 
176
                /* Src 0x16=black */
 
177
                /* Src 0x17=black */
 
178
                /* Src 0xb=input-mix */
 
179
                {
 
180
#if 1
 
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");
 
183
#else
 
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 */
 
196
#endif
 
197
                }
 
198
           }
 
199
 
 
200
        if (HDA_ADC_GROUP(0x0a, group, rec_group, "spdif-in", n, "record", 4))  /* ADC widget 0x0a */
 
201
           {
 
202
                /* Src 0x1f=speaker */
 
203
           }
 
204
  }
 
205
  /* Handle misc widgets */
 
206
  {
 
207
        int n, group, misc_group;
 
208
 
 
209
        n=0;
 
210
 
 
211
        HDA_GROUP(misc_group, top_group, "misc");
 
212
 
 
213
        if (HDA_MISC_GROUP(0x0c, group, misc_group, "front", n, "misc", 8))     /* Misc widget 0x0c */
 
214
           {
 
215
                /* Src 0x2=front */
 
216
                /* Src 0xb=input-mix */
 
217
                {
 
218
                        int amp_group;
 
219
 
 
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 */
 
223
                }
 
224
           }
 
225
 
 
226
        if (HDA_MISC_GROUP(0x0d, group, misc_group, "rear", n, "misc", 8))      /* Misc widget 0x0d */
 
227
           {
 
228
                /* Src 0x3=rear */
 
229
                /* Src 0xb=input-mix */
 
230
                {
 
231
                        int amp_group;
 
232
 
 
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 */
 
236
                }
 
237
           }
 
238
 
 
239
        if (HDA_MISC_GROUP(0x0e, group, misc_group, "center/LFE", n, "misc", 8))        /* Misc widget 0x0e */
 
240
           {
 
241
                /* Src 0x4=center/LFE */
 
242
                /* Src 0xb=input-mix */
 
243
                {
 
244
                        int amp_group;
 
245
 
 
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 */
 
249
                }
 
250
           }
 
251
 
 
252
        if (HDA_MISC_GROUP(0x0f, group, misc_group, "side", n, "misc", 8))      /* Misc widget 0x0f */
 
253
           {
 
254
                /* Src 0x5=side */
 
255
                /* Src 0xb=input-mix */
 
256
                {
 
257
                        int amp_group;
 
258
 
 
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 */
 
262
                }
 
263
           }
 
264
 
 
265
        if (HDA_MISC_GROUP(0x26, group, misc_group, "pcm4", n, "misc", 8))      /* Misc widget 0x26 */
 
266
           {
 
267
                /* Src 0x25=pcm4 */
 
268
                /* Src 0xb=input-mix */
 
269
                {
 
270
                        int amp_group;
 
271
 
 
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 */
 
275
                }
 
276
           }
 
277
 
 
278
        if (HDA_MISC_GROUP(0x0b, group, misc_group, "input-mix", n, "misc", 8)) /* Misc widget 0x0b */
 
279
           {
 
280
                /* Src 0x18=mic */
 
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 */
 
300
           }
 
301
  }
 
302
  return 0;
 
303
}