[ALSA] snd_emu10k1: Added support for 14dB Attenuation PADS on DACs and ADCs.
[powerpc.git] / sound / pci / emu10k1 / emu10k1_main.c
1 /*
2  *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
3  *                   Creative Labs, Inc.
4  *  Routines for control of EMU10K1 chips
5  *
6  *  Copyright (c) by James Courtier-Dutton <James@superbug.co.uk>
7  *      Added support for Audigy 2 Value.
8  *      Added EMU 1010 support.
9  *      General bug fixes and enhancements.
10  *
11  *
12  *  BUGS:
13  *    --
14  *
15  *  TODO:
16  *    --
17  *
18  *   This program is free software; you can redistribute it and/or modify
19  *   it under the terms of the GNU General Public License as published by
20  *   the Free Software Foundation; either version 2 of the License, or
21  *   (at your option) any later version.
22  *
23  *   This program is distributed in the hope that it will be useful,
24  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
25  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26  *   GNU General Public License for more details.
27  *
28  *   You should have received a copy of the GNU General Public License
29  *   along with this program; if not, write to the Free Software
30  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
31  *
32  */
33
34 #include <sound/driver.h>
35 #include <linux/delay.h>
36 #include <linux/init.h>
37 #include <linux/interrupt.h>
38 #include <linux/pci.h>
39 #include <linux/slab.h>
40 #include <linux/vmalloc.h>
41 #include <linux/mutex.h>
42
43
44 #include <sound/core.h>
45 #include <sound/emu10k1.h>
46 #include <linux/firmware.h>
47 #include "p16v.h"
48 #include "tina2.h"
49
50
51 /*************************************************************************
52  * EMU10K1 init / done
53  *************************************************************************/
54
55 void snd_emu10k1_voice_init(struct snd_emu10k1 * emu, int ch)
56 {
57         snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
58         snd_emu10k1_ptr_write(emu, IP, ch, 0);
59         snd_emu10k1_ptr_write(emu, VTFT, ch, 0xffff);
60         snd_emu10k1_ptr_write(emu, CVCF, ch, 0xffff);
61         snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
62         snd_emu10k1_ptr_write(emu, CPF, ch, 0);
63         snd_emu10k1_ptr_write(emu, CCR, ch, 0);
64
65         snd_emu10k1_ptr_write(emu, PSST, ch, 0);
66         snd_emu10k1_ptr_write(emu, DSL, ch, 0x10);
67         snd_emu10k1_ptr_write(emu, CCCA, ch, 0);
68         snd_emu10k1_ptr_write(emu, Z1, ch, 0);
69         snd_emu10k1_ptr_write(emu, Z2, ch, 0);
70         snd_emu10k1_ptr_write(emu, FXRT, ch, 0x32100000);
71
72         snd_emu10k1_ptr_write(emu, ATKHLDM, ch, 0);
73         snd_emu10k1_ptr_write(emu, DCYSUSM, ch, 0);
74         snd_emu10k1_ptr_write(emu, IFATN, ch, 0xffff);
75         snd_emu10k1_ptr_write(emu, PEFE, ch, 0);
76         snd_emu10k1_ptr_write(emu, FMMOD, ch, 0);
77         snd_emu10k1_ptr_write(emu, TREMFRQ, ch, 24);    /* 1 Hz */
78         snd_emu10k1_ptr_write(emu, FM2FRQ2, ch, 24);    /* 1 Hz */
79         snd_emu10k1_ptr_write(emu, TEMPENV, ch, 0);
80
81         /*** these are last so OFF prevents writing ***/
82         snd_emu10k1_ptr_write(emu, LFOVAL2, ch, 0);
83         snd_emu10k1_ptr_write(emu, LFOVAL1, ch, 0);
84         snd_emu10k1_ptr_write(emu, ATKHLDV, ch, 0);
85         snd_emu10k1_ptr_write(emu, ENVVOL, ch, 0);
86         snd_emu10k1_ptr_write(emu, ENVVAL, ch, 0);
87
88         /* Audigy extra stuffs */
89         if (emu->audigy) {
90                 snd_emu10k1_ptr_write(emu, 0x4c, ch, 0); /* ?? */
91                 snd_emu10k1_ptr_write(emu, 0x4d, ch, 0); /* ?? */
92                 snd_emu10k1_ptr_write(emu, 0x4e, ch, 0); /* ?? */
93                 snd_emu10k1_ptr_write(emu, 0x4f, ch, 0); /* ?? */
94                 snd_emu10k1_ptr_write(emu, A_FXRT1, ch, 0x03020100);
95                 snd_emu10k1_ptr_write(emu, A_FXRT2, ch, 0x3f3f3f3f);
96                 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, ch, 0);
97         }
98 }
99
100 static unsigned int spi_dac_init[] = {
101                 0x00ff,
102                 0x02ff,
103                 0x0400,
104                 0x0520,
105                 0x0600,
106                 0x08ff,
107                 0x0aff,
108                 0x0cff,
109                 0x0eff,
110                 0x10ff,
111                 0x1200,
112                 0x1400,
113                 0x1480,
114                 0x1800,
115                 0x1aff,
116                 0x1cff,
117                 0x1e00,
118                 0x0530,
119                 0x0602,
120                 0x0622,
121                 0x1400,
122 };
123         
124 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume)
125 {
126         unsigned int silent_page;
127         int ch;
128
129         /* disable audio and lock cache */
130         outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE,
131              emu->port + HCFG);
132
133         /* reset recording buffers */
134         snd_emu10k1_ptr_write(emu, MICBS, 0, ADCBS_BUFSIZE_NONE);
135         snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
136         snd_emu10k1_ptr_write(emu, FXBS, 0, ADCBS_BUFSIZE_NONE);
137         snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
138         snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
139         snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
140
141         /* disable channel interrupt */
142         outl(0, emu->port + INTE);
143         snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
144         snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
145         snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
146         snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
147
148         if (emu->audigy){
149                 /* set SPDIF bypass mode */
150                 snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
151                 /* enable rear left + rear right AC97 slots */
152                 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT |
153                                       AC97SLOT_REAR_LEFT);
154         }
155
156         /* init envelope engine */
157         for (ch = 0; ch < NUM_G; ch++)
158                 snd_emu10k1_voice_init(emu, ch);
159
160         snd_emu10k1_ptr_write(emu, SPCS0, 0, emu->spdif_bits[0]);
161         snd_emu10k1_ptr_write(emu, SPCS1, 0, emu->spdif_bits[1]);
162         snd_emu10k1_ptr_write(emu, SPCS2, 0, emu->spdif_bits[2]);
163
164         if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
165                 /* Hacks for Alice3 to work independent of haP16V driver */
166                 u32 tmp;
167
168                 //Setup SRCMulti_I2S SamplingRate
169                 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
170                 tmp &= 0xfffff1ff;
171                 tmp |= (0x2<<9);
172                 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
173                 
174                 /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
175                 snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
176                 /* Setup SRCMulti Input Audio Enable */
177                 /* Use 0xFFFFFFFF to enable P16V sounds. */
178                 snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF);
179
180                 /* Enabled Phased (8-channel) P16V playback */
181                 outl(0x0201, emu->port + HCFG2);
182                 /* Set playback routing. */
183                 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
184         }
185         if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
186                 /* Hacks for Alice3 to work independent of haP16V driver */
187                 u32 tmp;
188
189                 snd_printk(KERN_INFO "Audigy2 value: Special config.\n");
190                 //Setup SRCMulti_I2S SamplingRate
191                 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
192                 tmp &= 0xfffff1ff;
193                 tmp |= (0x2<<9);
194                 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
195
196                 /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
197                 outl(0x600000, emu->port + 0x20);
198                 outl(0x14, emu->port + 0x24);
199
200                 /* Setup SRCMulti Input Audio Enable */
201                 outl(0x7b0000, emu->port + 0x20);
202                 outl(0xFF000000, emu->port + 0x24);
203
204                 /* Setup SPDIF Out Audio Enable */
205                 /* The Audigy 2 Value has a separate SPDIF out,
206                  * so no need for a mixer switch
207                  */
208                 outl(0x7a0000, emu->port + 0x20);
209                 outl(0xFF000000, emu->port + 0x24);
210                 tmp = inl(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
211                 outl(tmp, emu->port + A_IOCFG);
212         }
213         if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */
214                 int size, n;
215
216                 size = ARRAY_SIZE(spi_dac_init);
217                 for (n = 0; n < size; n++)
218                         snd_emu10k1_spi_write(emu, spi_dac_init[n]);
219
220                 snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10);
221                 /* Enable GPIOs
222                  * GPIO0: Unknown
223                  * GPIO1: Speakers-enabled.
224                  * GPIO2: Unknown
225                  * GPIO3: Unknown
226                  * GPIO4: IEC958 Output on.
227                  * GPIO5: Unknown
228                  * GPIO6: Unknown
229                  * GPIO7: Unknown
230                  */
231                 outl(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */
232
233         }
234         
235         snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
236         snd_emu10k1_ptr_write(emu, TCB, 0, 0);  /* taken from original driver */
237         snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
238
239         silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
240         for (ch = 0; ch < NUM_G; ch++) {
241                 snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
242                 snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
243         }
244
245         if (emu->card_capabilities->emu1010) {
246                 outl(HCFG_AUTOMUTE_ASYNC |
247                         HCFG_EMU32_SLAVE |
248                         HCFG_AUDIOENABLE, emu->port + HCFG);
249         /*
250          *  Hokay, setup HCFG
251          *   Mute Disable Audio = 0
252          *   Lock Tank Memory = 1
253          *   Lock Sound Memory = 0
254          *   Auto Mute = 1
255          */
256         } else if (emu->audigy) {
257                 if (emu->revision == 4) /* audigy2 */
258                         outl(HCFG_AUDIOENABLE |
259                              HCFG_AC3ENABLE_CDSPDIF |
260                              HCFG_AC3ENABLE_GPSPDIF |
261                              HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
262                 else
263                         outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
264         /* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
265          * e.g. card_capabilities->joystick */
266         } else if (emu->model == 0x20 ||
267             emu->model == 0xc400 ||
268             (emu->model == 0x21 && emu->revision < 6))
269                 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG);
270         else
271                 // With on-chip joystick
272                 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
273
274         if (enable_ir) {        /* enable IR for SB Live */
275                 if (emu->card_capabilities->emu1010) {
276                         ;  /* Disable all access to A_IOCFG for the emu1010 */
277                 } else if (emu->audigy) {
278                         unsigned int reg = inl(emu->port + A_IOCFG);
279                         outl(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
280                         udelay(500);
281                         outl(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
282                         udelay(100);
283                         outl(reg, emu->port + A_IOCFG);
284                 } else {
285                         unsigned int reg = inl(emu->port + HCFG);
286                         outl(reg | HCFG_GPOUT2, emu->port + HCFG);
287                         udelay(500);
288                         outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG);
289                         udelay(100);
290                         outl(reg, emu->port + HCFG);
291                 }
292         }
293         
294         if (emu->card_capabilities->emu1010) {
295                 ;  /* Disable all access to A_IOCFG for the emu1010 */
296         } else if (emu->audigy) {       /* enable analog output */
297                 unsigned int reg = inl(emu->port + A_IOCFG);
298                 outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
299         }
300
301         return 0;
302 }
303
304 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu)
305 {
306         /*
307          *  Enable the audio bit
308          */
309         outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
310
311         /* Enable analog/digital outs on audigy */
312         if (emu->card_capabilities->emu1010) {
313                 ;  /* Disable all access to A_IOCFG for the emu1010 */
314         } else if (emu->audigy) {
315                 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
316  
317                 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
318                         /* Unmute Analog now.  Set GPO6 to 1 for Apollo.
319                          * This has to be done after init ALice3 I2SOut beyond 48KHz.
320                          * So, sequence is important. */
321                         outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
322                 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
323                         /* Unmute Analog now. */
324                         outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
325                 } else {
326                         /* Disable routing from AC97 line out to Front speakers */
327                         outl(inl(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG);
328                 }
329         }
330         
331 #if 0
332         {
333         unsigned int tmp;
334         /* FIXME: the following routine disables LiveDrive-II !! */
335         // TOSLink detection
336         emu->tos_link = 0;
337         tmp = inl(emu->port + HCFG);
338         if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
339                 outl(tmp|0x800, emu->port + HCFG);
340                 udelay(50);
341                 if (tmp != (inl(emu->port + HCFG) & ~0x800)) {
342                         emu->tos_link = 1;
343                         outl(tmp, emu->port + HCFG);
344                 }
345         }
346         }
347 #endif
348
349         snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE);
350 }
351
352 int snd_emu10k1_done(struct snd_emu10k1 * emu)
353 {
354         int ch;
355
356         outl(0, emu->port + INTE);
357
358         /*
359          *  Shutdown the chip
360          */
361         for (ch = 0; ch < NUM_G; ch++)
362                 snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
363         for (ch = 0; ch < NUM_G; ch++) {
364                 snd_emu10k1_ptr_write(emu, VTFT, ch, 0);
365                 snd_emu10k1_ptr_write(emu, CVCF, ch, 0);
366                 snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
367                 snd_emu10k1_ptr_write(emu, CPF, ch, 0);
368         }
369
370         /* reset recording buffers */
371         snd_emu10k1_ptr_write(emu, MICBS, 0, 0);
372         snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
373         snd_emu10k1_ptr_write(emu, FXBS, 0, 0);
374         snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
375         snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
376         snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
377         snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
378         snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
379         snd_emu10k1_ptr_write(emu, TCB, 0, 0);
380         if (emu->audigy)
381                 snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
382         else
383                 snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
384
385         /* disable channel interrupt */
386         snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
387         snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
388         snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
389         snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
390
391         /* disable audio and lock cache */
392         outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
393         snd_emu10k1_ptr_write(emu, PTB, 0, 0);
394
395         return 0;
396 }
397
398 /*************************************************************************
399  * ECARD functional implementation
400  *************************************************************************/
401
402 /* In A1 Silicon, these bits are in the HC register */
403 #define HOOKN_BIT               (1L << 12)
404 #define HANDN_BIT               (1L << 11)
405 #define PULSEN_BIT              (1L << 10)
406
407 #define EC_GDI1                 (1 << 13)
408 #define EC_GDI0                 (1 << 14)
409
410 #define EC_NUM_CONTROL_BITS     20
411
412 #define EC_AC3_DATA_SELN        0x0001L
413 #define EC_EE_DATA_SEL          0x0002L
414 #define EC_EE_CNTRL_SELN        0x0004L
415 #define EC_EECLK                0x0008L
416 #define EC_EECS                 0x0010L
417 #define EC_EESDO                0x0020L
418 #define EC_TRIM_CSN             0x0040L
419 #define EC_TRIM_SCLK            0x0080L
420 #define EC_TRIM_SDATA           0x0100L
421 #define EC_TRIM_MUTEN           0x0200L
422 #define EC_ADCCAL               0x0400L
423 #define EC_ADCRSTN              0x0800L
424 #define EC_DACCAL               0x1000L
425 #define EC_DACMUTEN             0x2000L
426 #define EC_LEDN                 0x4000L
427
428 #define EC_SPDIF0_SEL_SHIFT     15
429 #define EC_SPDIF1_SEL_SHIFT     17
430 #define EC_SPDIF0_SEL_MASK      (0x3L << EC_SPDIF0_SEL_SHIFT)
431 #define EC_SPDIF1_SEL_MASK      (0x7L << EC_SPDIF1_SEL_SHIFT)
432 #define EC_SPDIF0_SELECT(_x)    (((_x) << EC_SPDIF0_SEL_SHIFT) & EC_SPDIF0_SEL_MASK)
433 #define EC_SPDIF1_SELECT(_x)    (((_x) << EC_SPDIF1_SEL_SHIFT) & EC_SPDIF1_SEL_MASK)
434 #define EC_CURRENT_PROM_VERSION 0x01    /* Self-explanatory.  This should
435                                          * be incremented any time the EEPROM's
436                                          * format is changed.  */
437
438 #define EC_EEPROM_SIZE          0x40    /* ECARD EEPROM has 64 16-bit words */
439
440 /* Addresses for special values stored in to EEPROM */
441 #define EC_PROM_VERSION_ADDR    0x20    /* Address of the current prom version */
442 #define EC_BOARDREV0_ADDR       0x21    /* LSW of board rev */
443 #define EC_BOARDREV1_ADDR       0x22    /* MSW of board rev */
444
445 #define EC_LAST_PROMFILE_ADDR   0x2f
446
447 #define EC_SERIALNUM_ADDR       0x30    /* First word of serial number.  The 
448                                          * can be up to 30 characters in length
449                                          * and is stored as a NULL-terminated
450                                          * ASCII string.  Any unused bytes must be
451                                          * filled with zeros */
452 #define EC_CHECKSUM_ADDR        0x3f    /* Location at which checksum is stored */
453
454
455 /* Most of this stuff is pretty self-evident.  According to the hardware 
456  * dudes, we need to leave the ADCCAL bit low in order to avoid a DC 
457  * offset problem.  Weird.
458  */
459 #define EC_RAW_RUN_MODE         (EC_DACMUTEN | EC_ADCRSTN | EC_TRIM_MUTEN | \
460                                  EC_TRIM_CSN)
461
462
463 #define EC_DEFAULT_ADC_GAIN     0xC4C4
464 #define EC_DEFAULT_SPDIF0_SEL   0x0
465 #define EC_DEFAULT_SPDIF1_SEL   0x4
466
467 /**************************************************************************
468  * @func Clock bits into the Ecard's control latch.  The Ecard uses a
469  *  control latch will is loaded bit-serially by toggling the Modem control
470  *  lines from function 2 on the E8010.  This function hides these details
471  *  and presents the illusion that we are actually writing to a distinct
472  *  register.
473  */
474
475 static void snd_emu10k1_ecard_write(struct snd_emu10k1 * emu, unsigned int value)
476 {
477         unsigned short count;
478         unsigned int data;
479         unsigned long hc_port;
480         unsigned int hc_value;
481
482         hc_port = emu->port + HCFG;
483         hc_value = inl(hc_port) & ~(HOOKN_BIT | HANDN_BIT | PULSEN_BIT);
484         outl(hc_value, hc_port);
485
486         for (count = 0; count < EC_NUM_CONTROL_BITS; count++) {
487
488                 /* Set up the value */
489                 data = ((value & 0x1) ? PULSEN_BIT : 0);
490                 value >>= 1;
491
492                 outl(hc_value | data, hc_port);
493
494                 /* Clock the shift register */
495                 outl(hc_value | data | HANDN_BIT, hc_port);
496                 outl(hc_value | data, hc_port);
497         }
498
499         /* Latch the bits */
500         outl(hc_value | HOOKN_BIT, hc_port);
501         outl(hc_value, hc_port);
502 }
503
504 /**************************************************************************
505  * @func Set the gain of the ECARD's CS3310 Trim/gain controller.  The
506  * trim value consists of a 16bit value which is composed of two
507  * 8 bit gain/trim values, one for the left channel and one for the
508  * right channel.  The following table maps from the Gain/Attenuation
509  * value in decibels into the corresponding bit pattern for a single
510  * channel.
511  */
512
513 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 * emu,
514                                          unsigned short gain)
515 {
516         unsigned int bit;
517
518         /* Enable writing to the TRIM registers */
519         snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
520
521         /* Do it again to insure that we meet hold time requirements */
522         snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
523
524         for (bit = (1 << 15); bit; bit >>= 1) {
525                 unsigned int value;
526                 
527                 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA);
528
529                 if (gain & bit)
530                         value |= EC_TRIM_SDATA;
531
532                 /* Clock the bit */
533                 snd_emu10k1_ecard_write(emu, value);
534                 snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK);
535                 snd_emu10k1_ecard_write(emu, value);
536         }
537
538         snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
539 }
540
541 static int snd_emu10k1_ecard_init(struct snd_emu10k1 * emu)
542 {
543         unsigned int hc_value;
544
545         /* Set up the initial settings */
546         emu->ecard_ctrl = EC_RAW_RUN_MODE |
547                           EC_SPDIF0_SELECT(EC_DEFAULT_SPDIF0_SEL) |
548                           EC_SPDIF1_SELECT(EC_DEFAULT_SPDIF1_SEL);
549
550         /* Step 0: Set the codec type in the hardware control register 
551          * and enable audio output */
552         hc_value = inl(emu->port + HCFG);
553         outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG);
554         inl(emu->port + HCFG);
555
556         /* Step 1: Turn off the led and deassert TRIM_CS */
557         snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
558
559         /* Step 2: Calibrate the ADC and DAC */
560         snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN);
561
562         /* Step 3: Wait for awhile;   XXX We can't get away with this
563          * under a real operating system; we'll need to block and wait that
564          * way. */
565         snd_emu10k1_wait(emu, 48000);
566
567         /* Step 4: Switch off the DAC and ADC calibration.  Note
568          * That ADC_CAL is actually an inverted signal, so we assert
569          * it here to stop calibration.  */
570         snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
571
572         /* Step 4: Switch into run mode */
573         snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
574
575         /* Step 5: Set the analog input gain */
576         snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN);
577
578         return 0;
579 }
580
581 static int snd_emu10k1_cardbus_init(struct snd_emu10k1 * emu)
582 {
583         unsigned long special_port;
584         unsigned int value;
585
586         /* Special initialisation routine
587          * before the rest of the IO-Ports become active.
588          */
589         special_port = emu->port + 0x38;
590         value = inl(special_port);
591         outl(0x00d00000, special_port);
592         value = inl(special_port);
593         outl(0x00d00001, special_port);
594         value = inl(special_port);
595         outl(0x00d0005f, special_port);
596         value = inl(special_port);
597         outl(0x00d0007f, special_port);
598         value = inl(special_port);
599         outl(0x0090007f, special_port);
600         value = inl(special_port);
601
602         snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */
603         return 0;
604 }
605
606 static int snd_emu1010_load_firmware(struct snd_emu10k1 * emu, const char * filename)
607 {
608         int err;
609         int n, i;
610         int reg;
611         int value;
612         const struct firmware *fw_entry;
613
614         if ((err = request_firmware(&fw_entry, filename, &emu->pci->dev)) != 0) {
615                 snd_printk(KERN_ERR "firmware: %s not found. Err=%d\n",filename, err);
616                 return err;
617         }
618         snd_printk(KERN_INFO "firmware size=0x%zx\n", fw_entry->size);
619         if (fw_entry->size != 0x133a4) {
620                 snd_printk(KERN_ERR "firmware: %s wrong size.\n",filename);
621                 return -EINVAL;
622         }
623
624         /* The FPGA is a Xilinx Spartan IIE XC2S50E */
625         /* GPIO7 -> FPGA PGMN
626          * GPIO6 -> FPGA CCLK
627          * GPIO5 -> FPGA DIN
628          * FPGA CONFIG OFF -> FPGA PGMN
629          */
630         outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */
631         udelay(1);
632         outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */
633         udelay(100); /* Allow FPGA memory to clean */
634         for(n = 0; n < fw_entry->size; n++) {
635                 value=fw_entry->data[n];        
636                 for(i = 0; i < 8; i++) {
637                         reg = 0x80;
638                         if (value & 0x1)
639                                 reg = reg | 0x20;
640                         value = value >> 1;   
641                         outl(reg, emu->port + A_IOCFG);
642                         outl(reg | 0x40, emu->port + A_IOCFG);
643                 }
644         }
645         /* After programming, set GPIO bit 4 high again. */
646         outl(0x10, emu->port + A_IOCFG);
647         
648
649         release_firmware(fw_entry);
650         return 0;
651 }
652
653 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu)
654 {
655         unsigned int i;
656         int tmp,tmp2;
657         int reg;
658         int err;
659         const char *hana_filename = "emu/hana.fw";
660         const char *dock_filename = "emu/audio_dock.fw";
661
662         snd_printk(KERN_INFO "emu1010: Special config.\n");
663         /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave,
664          * Lock Sound Memory Cache, Lock Tank Memory Cache,
665          * Mute all codecs.
666          */
667         outl(0x0005a00c, emu->port + HCFG);
668         /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave,
669          * Lock Tank Memory Cache,
670          * Mute all codecs.
671          */
672         outl(0x0005a004, emu->port + HCFG); 
673         /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave,
674          * Mute all codecs.
675          */
676         outl(0x0005a000, emu->port + HCFG);
677         /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave,
678          * Mute all codecs.
679          */
680         outl(0x0005a000, emu->port + HCFG);
681
682         /* Disable 48Volt power to Audio Dock */
683         snd_emu1010_fpga_write(emu,  EMU_HANA_DOCK_PWR,  0 );
684
685         /* ID, should read & 0x7f = 0x55. (Bit 7 is the IRQ bit) */
686         snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg );
687         snd_printdd("reg1=0x%x\n",reg);
688         if (reg == 0x55) {
689                 /* FPGA netlist already present so clear it */
690                 /* Return to programming mode */
691
692                 snd_emu1010_fpga_write(emu,  EMU_HANA_FPGA_CONFIG, 0x02 );
693         }
694         snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg );
695         snd_printdd("reg2=0x%x\n",reg);
696         if (reg == 0x55) {
697                 /* FPGA failed to return to programming mode */
698                 return -ENODEV;
699         }
700         snd_printk(KERN_INFO "emu1010: EMU_HANA_ID=0x%x\n",reg);
701         if ((err = snd_emu1010_load_firmware(emu, hana_filename)) != 0) {
702                 snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file %s failed\n", hana_filename);
703                 return err;
704         }
705
706         /* ID, should read & 0x7f = 0x55 when FPGA programmed. */
707         snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg );
708         if (reg != 0x55) {
709                 /* FPGA failed to be programmed */
710                 snd_printk(KERN_INFO "emu1010: Loading Hana Firmware file failed, reg=0x%x\n", reg);
711                 return -ENODEV;
712         }
713
714         snd_printk(KERN_INFO "emu1010: Hana Firmware loaded\n");
715         snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp );
716         snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2 );
717         snd_printk("Hana ver:%d.%d\n",tmp ,tmp2);
718         /* Enable 48Volt power to Audio Dock */
719         snd_emu1010_fpga_write(emu,  EMU_HANA_DOCK_PWR,  EMU_HANA_DOCK_PWR_ON );
720
721         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg );
722         snd_printk(KERN_INFO "emu1010: Card options=0x%x\n",reg);
723         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg );
724         snd_printk(KERN_INFO "emu1010: Card options=0x%x\n",reg);
725         snd_emu1010_fpga_read(emu, EMU_HANA_OPTICAL_TYPE, &tmp ); 
726         /* ADAT input. */
727         snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x01 );
728         snd_emu1010_fpga_read(emu, EMU_HANA_ADC_PADS, &tmp );
729         /* Set no attenuation on Audio Dock pads. */
730         snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, 0x00 );
731         emu->emu1010.adc_pads = 0x00;
732         snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp );
733         /* Unmute Audio dock DACs, Headphone source DAC-4. */
734         snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30 );
735         snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12 );
736         snd_emu1010_fpga_read(emu, EMU_HANA_DAC_PADS, &tmp );
737         /* DAC PADs. */
738         snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, 0x0f );
739         emu->emu1010.dac_pads = 0x0f;
740         snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp );
741         snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30 );
742         snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp );
743         /* SPDIF Format. Set Consumer mode, 24bit, copy enable */
744         snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10 );
745         /* MIDI routing */
746         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 );
747         /* Unknown. */
748         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c );
749         /* snd_emu1010_fpga_write(emu, 0x09, 0x0f ); // IRQ Enable: All on */
750         /* IRQ Enable: All off */
751         snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x00 );
752
753         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg );
754         snd_printk(KERN_INFO "emu1010: Card options3=0x%x\n",reg);
755         /* Default WCLK set to 48kHz. */
756         snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x00 );
757         /* Word Clock source, Internal 48kHz x1 */
758         snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K );
759         //snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X );
760         /* Audio Dock LEDs. */
761         snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12 );
762
763 #if 0
764         /* For 96kHz */
765         snd_emu1010_fpga_link_dst_src_write(emu,
766                 EMU_DST_ALICE2_EMU32_0, EMU_SRC_HAMOA_ADC_LEFT1);
767         snd_emu1010_fpga_link_dst_src_write(emu,
768                 EMU_DST_ALICE2_EMU32_1, EMU_SRC_HAMOA_ADC_RIGHT1);
769         snd_emu1010_fpga_link_dst_src_write(emu,
770                 EMU_DST_ALICE2_EMU32_4, EMU_SRC_HAMOA_ADC_LEFT2);
771         snd_emu1010_fpga_link_dst_src_write(emu,
772                 EMU_DST_ALICE2_EMU32_5, EMU_SRC_HAMOA_ADC_RIGHT2);
773 #endif
774 #if 0
775         /* For 192kHz */
776         snd_emu1010_fpga_link_dst_src_write(emu,
777                 EMU_DST_ALICE2_EMU32_0, EMU_SRC_HAMOA_ADC_LEFT1);
778         snd_emu1010_fpga_link_dst_src_write(emu,
779                 EMU_DST_ALICE2_EMU32_1, EMU_SRC_HAMOA_ADC_RIGHT1);
780         snd_emu1010_fpga_link_dst_src_write(emu,
781                 EMU_DST_ALICE2_EMU32_2, EMU_SRC_HAMOA_ADC_LEFT2);
782         snd_emu1010_fpga_link_dst_src_write(emu,
783                 EMU_DST_ALICE2_EMU32_3, EMU_SRC_HAMOA_ADC_RIGHT2);
784         snd_emu1010_fpga_link_dst_src_write(emu,
785                 EMU_DST_ALICE2_EMU32_4, EMU_SRC_HAMOA_ADC_LEFT3);
786         snd_emu1010_fpga_link_dst_src_write(emu,
787                 EMU_DST_ALICE2_EMU32_5, EMU_SRC_HAMOA_ADC_RIGHT3);
788         snd_emu1010_fpga_link_dst_src_write(emu,
789                 EMU_DST_ALICE2_EMU32_6, EMU_SRC_HAMOA_ADC_LEFT4);
790         snd_emu1010_fpga_link_dst_src_write(emu,
791                 EMU_DST_ALICE2_EMU32_7, EMU_SRC_HAMOA_ADC_RIGHT4);
792 #endif
793 #if 1
794         /* For 48kHz */
795         snd_emu1010_fpga_link_dst_src_write(emu,
796                 EMU_DST_ALICE2_EMU32_0, EMU_SRC_DOCK_MIC_A1);
797         snd_emu1010_fpga_link_dst_src_write(emu,
798                 EMU_DST_ALICE2_EMU32_1, EMU_SRC_DOCK_MIC_B1);
799         snd_emu1010_fpga_link_dst_src_write(emu,
800                 EMU_DST_ALICE2_EMU32_2, EMU_SRC_HAMOA_ADC_LEFT2);
801         snd_emu1010_fpga_link_dst_src_write(emu,
802                 EMU_DST_ALICE2_EMU32_3, EMU_SRC_HAMOA_ADC_LEFT2);
803         snd_emu1010_fpga_link_dst_src_write(emu,
804                 EMU_DST_ALICE2_EMU32_4, EMU_SRC_DOCK_ADC1_LEFT1);
805         snd_emu1010_fpga_link_dst_src_write(emu,
806                 EMU_DST_ALICE2_EMU32_5, EMU_SRC_DOCK_ADC1_RIGHT1);
807         snd_emu1010_fpga_link_dst_src_write(emu,
808                 EMU_DST_ALICE2_EMU32_6, EMU_SRC_DOCK_ADC2_LEFT1);
809         snd_emu1010_fpga_link_dst_src_write(emu,
810                 EMU_DST_ALICE2_EMU32_7, EMU_SRC_DOCK_ADC2_RIGHT1);
811 #endif
812 #if 0
813         /* Original */
814         snd_emu1010_fpga_link_dst_src_write(emu,
815                 EMU_DST_ALICE2_EMU32_4, EMU_SRC_HANA_ADAT);
816         snd_emu1010_fpga_link_dst_src_write(emu,
817                 EMU_DST_ALICE2_EMU32_5, EMU_SRC_HANA_ADAT + 1);
818         snd_emu1010_fpga_link_dst_src_write(emu,
819                 EMU_DST_ALICE2_EMU32_6, EMU_SRC_HANA_ADAT + 2);
820         snd_emu1010_fpga_link_dst_src_write(emu,
821                 EMU_DST_ALICE2_EMU32_7, EMU_SRC_HANA_ADAT + 3);
822         snd_emu1010_fpga_link_dst_src_write(emu,
823                 EMU_DST_ALICE2_EMU32_8, EMU_SRC_HANA_ADAT + 4);
824         snd_emu1010_fpga_link_dst_src_write(emu,
825                 EMU_DST_ALICE2_EMU32_9, EMU_SRC_HANA_ADAT + 5);
826         snd_emu1010_fpga_link_dst_src_write(emu,
827                 EMU_DST_ALICE2_EMU32_A, EMU_SRC_HANA_ADAT + 6);
828         snd_emu1010_fpga_link_dst_src_write(emu,
829                 EMU_DST_ALICE2_EMU32_B, EMU_SRC_HANA_ADAT + 7);
830         snd_emu1010_fpga_link_dst_src_write(emu,
831                 EMU_DST_ALICE2_EMU32_C, EMU_SRC_DOCK_MIC_A1);
832         snd_emu1010_fpga_link_dst_src_write(emu,
833                 EMU_DST_ALICE2_EMU32_D, EMU_SRC_DOCK_MIC_B1);
834         snd_emu1010_fpga_link_dst_src_write(emu,
835                 EMU_DST_ALICE2_EMU32_E, EMU_SRC_HAMOA_ADC_LEFT2);
836         snd_emu1010_fpga_link_dst_src_write(emu,
837                 EMU_DST_ALICE2_EMU32_F, EMU_SRC_HAMOA_ADC_LEFT2);
838 #endif
839         for (i = 0;i < 0x20; i++ ) {
840                 /* AudioDock Elink <-  Silence */
841                 snd_emu1010_fpga_link_dst_src_write(emu, 0x0100+i, EMU_SRC_SILENCE);
842         }
843         for (i = 0;i < 4; i++) {
844                 /* Hana SPDIF Out <- Silence */
845                 snd_emu1010_fpga_link_dst_src_write(emu, 0x0200+i, EMU_SRC_SILENCE);
846         }
847         for (i = 0;i < 7; i++) {
848                 /* Hamoa DAC <- Silence */
849                 snd_emu1010_fpga_link_dst_src_write(emu, 0x0300+i, EMU_SRC_SILENCE);
850         }
851         for (i = 0;i < 7; i++) {
852                 /* Hana ADAT Out <- Silence */
853                 snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + i, EMU_SRC_SILENCE);
854         }
855         snd_emu1010_fpga_link_dst_src_write(emu,
856                 EMU_DST_ALICE_I2S0_LEFT, EMU_SRC_DOCK_ADC1_LEFT1);
857         snd_emu1010_fpga_link_dst_src_write(emu,
858                 EMU_DST_ALICE_I2S0_RIGHT, EMU_SRC_DOCK_ADC1_RIGHT1);
859         snd_emu1010_fpga_link_dst_src_write(emu,
860                 EMU_DST_ALICE_I2S1_LEFT, EMU_SRC_DOCK_ADC2_LEFT1);
861         snd_emu1010_fpga_link_dst_src_write(emu,
862                 EMU_DST_ALICE_I2S1_RIGHT, EMU_SRC_DOCK_ADC2_RIGHT1);
863         snd_emu1010_fpga_link_dst_src_write(emu,
864                 EMU_DST_ALICE_I2S2_LEFT, EMU_SRC_DOCK_ADC3_LEFT1);
865         snd_emu1010_fpga_link_dst_src_write(emu,
866                 EMU_DST_ALICE_I2S2_RIGHT, EMU_SRC_DOCK_ADC3_RIGHT1);
867         snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x01 ); // Unmute all
868
869         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp );
870         
871         /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave,
872          * Lock Sound Memory Cache, Lock Tank Memory Cache,
873          * Mute all codecs.
874          */
875         outl(0x0000a000, emu->port + HCFG); 
876         /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave,
877          * Lock Sound Memory Cache, Lock Tank Memory Cache,
878          * Un-Mute all codecs.
879          */
880         outl(0x0000a001, emu->port + HCFG);
881  
882         /* Initial boot complete. Now patches */
883
884         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp );
885         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 ); /* MIDI Route */
886         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c ); /* Unknown */
887         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19 ); /* MIDI Route */
888         snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c ); /* Unknown */
889         snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp ); 
890         snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10 ); /* SPDIF Format spdif  (or 0x11 for aes/ebu) */
891
892         /* Delay to allow Audio Dock to settle */
893         msleep(100);
894         snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp ); /* IRQ Status */
895         snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg ); /* OPTIONS: Which cards are attached to the EMU */
896         /* FIXME: The loading of this should be able to happen any time,
897          * as the user can plug/unplug it at any time
898          */
899         if (reg & (EMU_HANA_OPTION_DOCK_ONLINE | EMU_HANA_OPTION_DOCK_OFFLINE) ) {
900                 /* Audio Dock attached */
901                 /* Return to Audio Dock programming mode */
902                 snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n");
903                 snd_emu1010_fpga_write(emu,  EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK );
904                 if ((err = snd_emu1010_load_firmware(emu, dock_filename)) != 0) {
905                         return err;
906                 }
907                 snd_emu1010_fpga_write(emu,  EMU_HANA_FPGA_CONFIG, 0 );
908                 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &reg );
909                 snd_printk(KERN_INFO "emu1010: EMU_HANA+DOCK_IRQ_STATUS=0x%x\n",reg);
910                 /* ID, should read & 0x7f = 0x55 when FPGA programmed. */
911                 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg );
912                 snd_printk(KERN_INFO "emu1010: EMU_HANA+DOCK_ID=0x%x\n",reg);
913                 if (reg != 0x55) {
914                         /* FPGA failed to be programmed */
915                         snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware file failed, reg=0x%x\n", reg);
916                         return 0;
917                         return -ENODEV;
918                 }
919                 snd_printk(KERN_INFO "emu1010: Audio Dock Firmware loaded\n");
920                 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp );
921                 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2 );
922                 snd_printk("Audio Dock ver:%d.%d\n",tmp ,tmp2);
923         }
924 #if 0
925         snd_emu1010_fpga_link_dst_src_write(emu,
926                 EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32B + 2); /* ALICE2 bus 0xa2 */
927         snd_emu1010_fpga_link_dst_src_write(emu,
928                 EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32B + 3); /* ALICE2 bus 0xa3 */
929         snd_emu1010_fpga_link_dst_src_write(emu,
930                 EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 2); /* ALICE2 bus 0xb2 */
931         snd_emu1010_fpga_link_dst_src_write(emu,
932                 EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); /* ALICE2 bus 0xb3 */
933 #endif
934         /* Default outputs */
935         snd_emu1010_fpga_link_dst_src_write(emu,
936                 EMU_DST_DOCK_DAC1_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
937         emu->emu1010.output_source[0] = 21;
938         snd_emu1010_fpga_link_dst_src_write(emu,
939                 EMU_DST_DOCK_DAC1_RIGHT1, EMU_SRC_ALICE_EMU32A + 1);
940         emu->emu1010.output_source[1] = 22;
941         snd_emu1010_fpga_link_dst_src_write(emu,
942                 EMU_DST_DOCK_DAC2_LEFT1, EMU_SRC_ALICE_EMU32A + 2);
943         emu->emu1010.output_source[2] = 23;
944         snd_emu1010_fpga_link_dst_src_write(emu,
945                 EMU_DST_DOCK_DAC2_RIGHT1, EMU_SRC_ALICE_EMU32A + 3);
946         emu->emu1010.output_source[3] = 24;
947         snd_emu1010_fpga_link_dst_src_write(emu,
948                 EMU_DST_DOCK_DAC3_LEFT1, EMU_SRC_ALICE_EMU32A + 4);
949         emu->emu1010.output_source[4] = 25;
950         snd_emu1010_fpga_link_dst_src_write(emu,
951                 EMU_DST_DOCK_DAC3_RIGHT1, EMU_SRC_ALICE_EMU32A + 5);
952         emu->emu1010.output_source[5] = 26;
953         snd_emu1010_fpga_link_dst_src_write(emu,
954                 EMU_DST_DOCK_DAC4_LEFT1, EMU_SRC_ALICE_EMU32A + 6);
955         emu->emu1010.output_source[6] = 27;
956         snd_emu1010_fpga_link_dst_src_write(emu,
957                 EMU_DST_DOCK_DAC4_RIGHT1, EMU_SRC_ALICE_EMU32A + 7);
958         emu->emu1010.output_source[7] = 28;
959         snd_emu1010_fpga_link_dst_src_write(emu,
960                 EMU_DST_DOCK_PHONES_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
961         emu->emu1010.output_source[8] = 21;
962         snd_emu1010_fpga_link_dst_src_write(emu,
963                 EMU_DST_DOCK_PHONES_RIGHT1, EMU_SRC_ALICE_EMU32A + 1);
964         emu->emu1010.output_source[9] = 22;
965         snd_emu1010_fpga_link_dst_src_write(emu,
966                 EMU_DST_DOCK_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
967         emu->emu1010.output_source[10] = 21;
968         snd_emu1010_fpga_link_dst_src_write(emu,
969                 EMU_DST_DOCK_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1);
970         emu->emu1010.output_source[11] = 22;
971         snd_emu1010_fpga_link_dst_src_write(emu,
972                 EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
973         emu->emu1010.output_source[12] = 21;
974         snd_emu1010_fpga_link_dst_src_write(emu,
975                 EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1);
976         emu->emu1010.output_source[13] = 22;
977         snd_emu1010_fpga_link_dst_src_write(emu,
978                 EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
979         emu->emu1010.output_source[14] = 21;
980         snd_emu1010_fpga_link_dst_src_write(emu,
981                 EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32A + 1);
982         emu->emu1010.output_source[15] = 22;
983         snd_emu1010_fpga_link_dst_src_write(emu,
984                 EMU_DST_HANA_ADAT, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */
985         emu->emu1010.output_source[16] = 21;
986         snd_emu1010_fpga_link_dst_src_write(emu,
987                 EMU_DST_HANA_ADAT + 1, EMU_SRC_ALICE_EMU32A + 1);
988         emu->emu1010.output_source[17] = 22;
989         snd_emu1010_fpga_link_dst_src_write(emu,
990                 EMU_DST_HANA_ADAT + 2, EMU_SRC_ALICE_EMU32A + 2);
991         emu->emu1010.output_source[18] = 23;
992         snd_emu1010_fpga_link_dst_src_write(emu,
993                 EMU_DST_HANA_ADAT + 3, EMU_SRC_ALICE_EMU32A + 3);
994         emu->emu1010.output_source[19] = 24;
995         snd_emu1010_fpga_link_dst_src_write(emu,
996                 EMU_DST_HANA_ADAT + 4, EMU_SRC_ALICE_EMU32A + 4);
997         emu->emu1010.output_source[20] = 25;
998         snd_emu1010_fpga_link_dst_src_write(emu,
999                 EMU_DST_HANA_ADAT + 5, EMU_SRC_ALICE_EMU32A + 5);
1000         emu->emu1010.output_source[21] = 26;
1001         snd_emu1010_fpga_link_dst_src_write(emu,
1002                 EMU_DST_HANA_ADAT + 6, EMU_SRC_ALICE_EMU32A + 6);
1003         emu->emu1010.output_source[22] = 27;
1004         snd_emu1010_fpga_link_dst_src_write(emu,
1005                 EMU_DST_HANA_ADAT + 7, EMU_SRC_ALICE_EMU32A + 7);
1006         emu->emu1010.output_source[23] = 28;
1007
1008         /* TEMP: Select SPDIF in/out */
1009         snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x0); /* Output spdif */
1010
1011         /* TEMP: Select 48kHz SPDIF out */
1012         snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x0); /* Mute all */
1013         snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x0); /* Default fallback clock 48kHz */
1014         /* Word Clock source, Internal 48kHz x1 */
1015         snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K );
1016         //snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X );
1017         snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12);/* Set LEDs on Audio Dock */
1018         snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x1); /* Unmute all */
1019         //snd_emu1010_fpga_write(emu, 0x7, 0x0); /* Mute all */
1020         //snd_emu1010_fpga_write(emu, 0x7, 0x1); /* Unmute all */
1021         //snd_emu1010_fpga_write(emu, 0xe, 0x12); /* Set LEDs on Audio Dock */
1022
1023         return 0;
1024 }
1025 /*
1026  *  Create the EMU10K1 instance
1027  */
1028
1029 #ifdef CONFIG_PM
1030 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
1031 static void free_pm_buffer(struct snd_emu10k1 *emu);
1032 #endif
1033
1034 static int snd_emu10k1_free(struct snd_emu10k1 *emu)
1035 {
1036         if (emu->port) {        /* avoid access to already used hardware */
1037                 snd_emu10k1_fx8010_tram_setup(emu, 0);
1038                 snd_emu10k1_done(emu);
1039                 /* remove reserved page */
1040                 if (emu->reserved_page) {
1041                         snd_emu10k1_synth_free(emu, (struct snd_util_memblk *)emu->reserved_page);
1042                         emu->reserved_page = NULL;
1043                 }
1044                 snd_emu10k1_free_efx(emu);
1045         }
1046         if (emu->card_capabilities->emu1010) {
1047                 /* Disable 48Volt power to Audio Dock */
1048                 snd_emu1010_fpga_write(emu,  EMU_HANA_DOCK_PWR,  0 );
1049         }
1050         if (emu->memhdr)
1051                 snd_util_memhdr_free(emu->memhdr);
1052         if (emu->silent_page.area)
1053                 snd_dma_free_pages(&emu->silent_page);
1054         if (emu->ptb_pages.area)
1055                 snd_dma_free_pages(&emu->ptb_pages);
1056         vfree(emu->page_ptr_table);
1057         vfree(emu->page_addr_table);
1058 #ifdef CONFIG_PM
1059         free_pm_buffer(emu);
1060 #endif
1061         if (emu->irq >= 0)
1062                 free_irq(emu->irq, emu);
1063         if (emu->port)
1064                 pci_release_regions(emu->pci);
1065         if (emu->card_capabilities->ca0151_chip) /* P16V */     
1066                 snd_p16v_free(emu);
1067         pci_disable_device(emu->pci);
1068         kfree(emu);
1069         return 0;
1070 }
1071
1072 static int snd_emu10k1_dev_free(struct snd_device *device)
1073 {
1074         struct snd_emu10k1 *emu = device->device_data;
1075         return snd_emu10k1_free(emu);
1076 }
1077
1078 static struct snd_emu_chip_details emu_chip_details[] = {
1079         /* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/
1080         /* Tested by James@superbug.co.uk 3rd July 2005 */
1081         /* DSP: CA0108-IAT
1082          * DAC: CS4382-KQ
1083          * ADC: Philips 1361T
1084          * AC97: STAC9750
1085          * CA0151: None
1086          */
1087         {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
1088          .driver = "Audigy2", .name = "Audigy 2 Value [SB0400]", 
1089          .id = "Audigy2",
1090          .emu10k2_chip = 1,
1091          .ca0108_chip = 1,
1092          .spk71 = 1,
1093          .ac97_chip = 1} ,
1094         /* Audigy4 (Not PRO) SB0610 */
1095         /* Tested by James@superbug.co.uk 4th April 2006 */
1096         /* A_IOCFG bits
1097          * Output
1098          * 0: ?
1099          * 1: ?
1100          * 2: ?
1101          * 3: 0 - Digital Out, 1 - Line in
1102          * 4: ?
1103          * 5: ?
1104          * 6: ?
1105          * 7: ?
1106          * Input
1107          * 8: ?
1108          * 9: ?
1109          * A: Green jack sense (Front)
1110          * B: ?
1111          * C: Black jack sense (Rear/Side Right)
1112          * D: Yellow jack sense (Center/LFE/Side Left)
1113          * E: ?
1114          * F: ?
1115          *
1116          * Digital Out/Line in switch using A_IOCFG bit 3 (0x08)
1117          * 0 - Digital Out
1118          * 1 - Line in
1119          */
1120         /* Mic input not tested.
1121          * Analog CD input not tested
1122          * Digital Out not tested.
1123          * Line in working.
1124          * Audio output 5.1 working. Side outputs not working.
1125          */
1126         /* DSP: CA10300-IAT LF
1127          * DAC: Cirrus Logic CS4382-KQZ
1128          * ADC: Philips 1361T
1129          * AC97: Sigmatel STAC9750
1130          * CA0151: None
1131          */
1132         {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
1133          .driver = "Audigy2", .name = "Audigy 4 [SB0610]", 
1134          .id = "Audigy2",
1135          .emu10k2_chip = 1,
1136          .ca0108_chip = 1,
1137          .spk71 = 1,
1138          .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
1139          .ac97_chip = 1} ,
1140         /* Audigy 2 ZS Notebook Cardbus card.*/
1141         /* Tested by James@superbug.co.uk 22th December 2005 */
1142         /* Audio output 7.1/Headphones working.
1143          * Digital output working. (AC3 not checked, only PCM)
1144          * Audio inputs not tested.
1145          */ 
1146         /* DSP: Tina2
1147          * DAC: Wolfson WM8768/WM8568
1148          * ADC: Wolfson WM8775
1149          * AC97: None
1150          * CA0151: None
1151          */
1152         {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
1153          .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]", 
1154          .id = "Audigy2",
1155          .emu10k2_chip = 1,
1156          .ca0108_chip = 1,
1157          .ca_cardbus_chip = 1,
1158          .spi_dac = 1,
1159          .spk71 = 1} ,
1160         {.vendor = 0x1102, .device = 0x0008, 
1161          .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]", 
1162          .id = "Audigy2",
1163          .emu10k2_chip = 1,
1164          .ca0108_chip = 1,
1165          .ac97_chip = 1} ,
1166         /* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */
1167         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
1168          .driver = "Audigy2", .name = "E-mu 1010 [4001]", 
1169          .id = "EMU1010",
1170          .emu10k2_chip = 1,
1171          .ca0102_chip = 1,
1172          .spk71 = 1,
1173          .emu1010 = 1} ,
1174         /* Tested by James@superbug.co.uk 3rd July 2005 */
1175         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
1176          .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", 
1177          .id = "Audigy2",
1178          .emu10k2_chip = 1,
1179          .ca0102_chip = 1,
1180          .ca0151_chip = 1,
1181          .spk71 = 1,
1182          .spdif_bug = 1,
1183          .ac97_chip = 1} ,
1184         /* Tested by shane-alsa@cm.nu 5th Nov 2005 */
1185         /* The 0x20061102 does have SB0350 written on it
1186          * Just like 0x20021102
1187          */
1188         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102,
1189          .driver = "Audigy2", .name = "Audigy 2 [SB0350b]", 
1190          .id = "Audigy2",
1191          .emu10k2_chip = 1,
1192          .ca0102_chip = 1,
1193          .ca0151_chip = 1,
1194          .spk71 = 1,
1195          .spdif_bug = 1,
1196          .ac97_chip = 1} ,
1197         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102,
1198          .driver = "Audigy2", .name = "Audigy 2 ZS [SB0350]", 
1199          .id = "Audigy2",
1200          .emu10k2_chip = 1,
1201          .ca0102_chip = 1,
1202          .ca0151_chip = 1,
1203          .spk71 = 1,
1204          .spdif_bug = 1,
1205          .ac97_chip = 1} ,
1206         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102,
1207          .driver = "Audigy2", .name = "Audigy 2 ZS [2001]", 
1208          .id = "Audigy2",
1209          .emu10k2_chip = 1,
1210          .ca0102_chip = 1,
1211          .ca0151_chip = 1,
1212          .spk71 = 1,
1213          .spdif_bug = 1,
1214          .ac97_chip = 1} ,
1215         /* Audigy 2 */
1216         /* Tested by James@superbug.co.uk 3rd July 2005 */
1217         /* DSP: CA0102-IAT
1218          * DAC: CS4382-KQ
1219          * ADC: Philips 1361T
1220          * AC97: STAC9721
1221          * CA0151: Yes
1222          */
1223         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102,
1224          .driver = "Audigy2", .name = "Audigy 2 [SB0240]", 
1225          .id = "Audigy2",
1226          .emu10k2_chip = 1,
1227          .ca0102_chip = 1,
1228          .ca0151_chip = 1,
1229          .spk71 = 1,
1230          .spdif_bug = 1,
1231          .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
1232          .ac97_chip = 1} ,
1233         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
1234          .driver = "Audigy2", .name = "Audigy 2 EX [1005]", 
1235          .id = "Audigy2",
1236          .emu10k2_chip = 1,
1237          .ca0102_chip = 1,
1238          .ca0151_chip = 1,
1239          .spk71 = 1,
1240          .spdif_bug = 1} ,
1241         /* Dell OEM/Creative Labs Audigy 2 ZS */
1242         /* See ALSA bug#1365 */
1243         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102,
1244          .driver = "Audigy2", .name = "Audigy 2 ZS [SB0353]",
1245          .id = "Audigy2",
1246          .emu10k2_chip = 1,
1247          .ca0102_chip = 1,
1248          .ca0151_chip = 1,
1249          .spk71 = 1,
1250          .spdif_bug = 1,
1251          .ac97_chip = 1} ,
1252         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
1253          .driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]", 
1254          .id = "Audigy2",
1255          .emu10k2_chip = 1,
1256          .ca0102_chip = 1,
1257          .ca0151_chip = 1,
1258          .spk71 = 1,
1259          .spdif_bug = 1,
1260          .adc_1361t = 1,  /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */
1261          .ac97_chip = 1} ,
1262         {.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
1263          .driver = "Audigy2", .name = "Audigy 2 [Unknown]",
1264          .id = "Audigy2",
1265          .emu10k2_chip = 1,
1266          .ca0102_chip = 1,
1267          .ca0151_chip = 1,
1268          .spdif_bug = 1,
1269          .ac97_chip = 1} ,
1270         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
1271          .driver = "Audigy", .name = "Audigy 1 [SB0090]", 
1272          .id = "Audigy",
1273          .emu10k2_chip = 1,
1274          .ca0102_chip = 1,
1275          .ac97_chip = 1} ,
1276         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
1277          .driver = "Audigy", .name = "Audigy 1 ES [SB0160]", 
1278          .id = "Audigy",
1279          .emu10k2_chip = 1,
1280          .ca0102_chip = 1,
1281          .spdif_bug = 1,
1282          .ac97_chip = 1} ,
1283         {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
1284          .driver = "Audigy", .name = "Audigy 1 [SB0090]", 
1285          .id = "Audigy",
1286          .emu10k2_chip = 1,
1287          .ca0102_chip = 1,
1288          .ac97_chip = 1} ,
1289         {.vendor = 0x1102, .device = 0x0004,
1290          .driver = "Audigy", .name = "Audigy 1 [Unknown]", 
1291          .id = "Audigy",
1292          .emu10k2_chip = 1,
1293          .ca0102_chip = 1,
1294          .ac97_chip = 1} ,
1295         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806B1102,
1296          .driver = "EMU10K1", .name = "SBLive! [SB0105]", 
1297          .id = "Live",
1298          .emu10k1_chip = 1,
1299          .ac97_chip = 1,
1300          .sblive51 = 1} ,
1301         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806A1102,
1302          .driver = "EMU10K1", .name = "SBLive! Value [SB0103]", 
1303          .id = "Live",
1304          .emu10k1_chip = 1,
1305          .ac97_chip = 1,
1306          .sblive51 = 1} ,
1307         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
1308          .driver = "EMU10K1", .name = "SBLive! Value [SB0101]", 
1309          .id = "Live",
1310          .emu10k1_chip = 1,
1311          .ac97_chip = 1,
1312          .sblive51 = 1} ,
1313         /* Tested by ALSA bug#1680 26th December 2005 */
1314         /* note: It really has SB0220 written on the card. */
1315         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102,
1316          .driver = "EMU10K1", .name = "SB Live 5.1 Dell OEM [SB0220]", 
1317          .id = "Live",
1318          .emu10k1_chip = 1,
1319          .ac97_chip = 1,
1320          .sblive51 = 1} ,
1321         /* Tested by Thomas Zehetbauer 27th Aug 2005 */
1322         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
1323          .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]", 
1324          .id = "Live",
1325          .emu10k1_chip = 1,
1326          .ac97_chip = 1,
1327          .sblive51 = 1} ,
1328         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102,
1329          .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]", 
1330          .id = "Live",
1331          .emu10k1_chip = 1,
1332          .ac97_chip = 1,
1333          .sblive51 = 1} ,
1334         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
1335          .driver = "EMU10K1", .name = "SB Live 5.1", 
1336          .id = "Live",
1337          .emu10k1_chip = 1,
1338          .ac97_chip = 1,
1339          .sblive51 = 1} ,
1340         /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
1341         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
1342          .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
1343          .id = "Live",
1344          .emu10k1_chip = 1,
1345          .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
1346                           * share the same IDs!
1347                           */
1348          .sblive51 = 1} ,
1349         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
1350          .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", 
1351          .id = "Live",
1352          .emu10k1_chip = 1,
1353          .ac97_chip = 1,
1354          .sblive51 = 1} ,
1355         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
1356          .driver = "EMU10K1", .name = "SBLive! Platinum [CT4760P]", 
1357          .id = "Live",
1358          .emu10k1_chip = 1,
1359          .ac97_chip = 1} ,
1360         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
1361          .driver = "EMU10K1", .name = "SBLive! Value [CT4871]", 
1362          .id = "Live",
1363          .emu10k1_chip = 1,
1364          .ac97_chip = 1,
1365          .sblive51 = 1} ,
1366         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102,
1367          .driver = "EMU10K1", .name = "SBLive! Value [CT4831]", 
1368          .id = "Live",
1369          .emu10k1_chip = 1,
1370          .ac97_chip = 1,
1371          .sblive51 = 1} ,
1372         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
1373          .driver = "EMU10K1", .name = "SBLive! Value [CT4870]", 
1374          .id = "Live",
1375          .emu10k1_chip = 1,
1376          .ac97_chip = 1,
1377          .sblive51 = 1} ,
1378         /* Tested by James@superbug.co.uk 3rd July 2005 */
1379         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
1380          .driver = "EMU10K1", .name = "SBLive! Value [CT4832]", 
1381          .id = "Live",
1382          .emu10k1_chip = 1,
1383          .ac97_chip = 1,
1384          .sblive51 = 1} ,
1385         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
1386          .driver = "EMU10K1", .name = "SBLive! Value [CT4830]", 
1387          .id = "Live",
1388          .emu10k1_chip = 1,
1389          .ac97_chip = 1,
1390          .sblive51 = 1} ,
1391         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
1392          .driver = "EMU10K1", .name = "SB PCI512 [CT4790]", 
1393          .id = "Live",
1394          .emu10k1_chip = 1,
1395          .ac97_chip = 1,
1396          .sblive51 = 1} ,
1397         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
1398          .driver = "EMU10K1", .name = "SBLive! Value [CT4780]", 
1399          .id = "Live",
1400          .emu10k1_chip = 1,
1401          .ac97_chip = 1,
1402          .sblive51 = 1} ,
1403         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
1404          .driver = "EMU10K1", .name = "E-mu APS [4001]", 
1405          .id = "APS",
1406          .emu10k1_chip = 1,
1407          .ecard = 1} ,
1408         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
1409          .driver = "EMU10K1", .name = "SBLive! [CT4620]", 
1410          .id = "Live",
1411          .emu10k1_chip = 1,
1412          .ac97_chip = 1,
1413          .sblive51 = 1} ,
1414         {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
1415          .driver = "EMU10K1", .name = "SBLive! Value [CT4670]", 
1416          .id = "Live",
1417          .emu10k1_chip = 1,
1418          .ac97_chip = 1,
1419          .sblive51 = 1} ,
1420         {.vendor = 0x1102, .device = 0x0002,
1421          .driver = "EMU10K1", .name = "SB Live [Unknown]", 
1422          .id = "Live",
1423          .emu10k1_chip = 1,
1424          .ac97_chip = 1,
1425          .sblive51 = 1} ,
1426         { } /* terminator */
1427 };
1428
1429 int __devinit snd_emu10k1_create(struct snd_card *card,
1430                        struct pci_dev * pci,
1431                        unsigned short extin_mask,
1432                        unsigned short extout_mask,
1433                        long max_cache_bytes,
1434                        int enable_ir,
1435                        uint subsystem,
1436                        struct snd_emu10k1 ** remu)
1437 {
1438         struct snd_emu10k1 *emu;
1439         int idx, err;
1440         int is_audigy;
1441         unsigned char revision;
1442         unsigned int silent_page;
1443         const struct snd_emu_chip_details *c;
1444         static struct snd_device_ops ops = {
1445                 .dev_free =     snd_emu10k1_dev_free,
1446         };
1447         
1448         *remu = NULL;
1449
1450         /* enable PCI device */
1451         if ((err = pci_enable_device(pci)) < 0)
1452                 return err;
1453
1454         emu = kzalloc(sizeof(*emu), GFP_KERNEL);
1455         if (emu == NULL) {
1456                 pci_disable_device(pci);
1457                 return -ENOMEM;
1458         }
1459         emu->card = card;
1460         spin_lock_init(&emu->reg_lock);
1461         spin_lock_init(&emu->emu_lock);
1462         spin_lock_init(&emu->voice_lock);
1463         spin_lock_init(&emu->synth_lock);
1464         spin_lock_init(&emu->memblk_lock);
1465         mutex_init(&emu->fx8010.lock);
1466         INIT_LIST_HEAD(&emu->mapped_link_head);
1467         INIT_LIST_HEAD(&emu->mapped_order_link_head);
1468         emu->pci = pci;
1469         emu->irq = -1;
1470         emu->synth = NULL;
1471         emu->get_synth_voice = NULL;
1472         /* read revision & serial */
1473         pci_read_config_byte(pci, PCI_REVISION_ID, &revision);
1474         emu->revision = revision;
1475         pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1476         pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1477         snd_printdd("vendor=0x%x, device=0x%x, subsystem_vendor_id=0x%x, subsystem_id=0x%x\n",pci->vendor, pci->device, emu->serial, emu->model);
1478
1479         for (c = emu_chip_details; c->vendor; c++) {
1480                 if (c->vendor == pci->vendor && c->device == pci->device) {
1481                         if (subsystem) {
1482                                 if (c->subsystem && (c->subsystem == subsystem) ) {
1483                                         break;
1484                                 } else continue;
1485                         } else {
1486                                 if (c->subsystem && (c->subsystem != emu->serial) )
1487                                         continue;
1488                                 if (c->revision && c->revision != emu->revision)
1489                                         continue;
1490                         }
1491                         break;
1492                 }
1493         }
1494         if (c->vendor == 0) {
1495                 snd_printk(KERN_ERR "emu10k1: Card not recognised\n");
1496                 kfree(emu);
1497                 pci_disable_device(pci);
1498                 return -ENOENT;
1499         }
1500         emu->card_capabilities = c;
1501         if (c->subsystem && !subsystem)
1502                 snd_printdd("Sound card name=%s\n", c->name);
1503         else if (subsystem) 
1504                 snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x. Forced to subsytem=0x%x\n",
1505                         c->name, pci->vendor, pci->device, emu->serial, c->subsystem);
1506         else 
1507                 snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x.\n",
1508                         c->name, pci->vendor, pci->device, emu->serial);
1509         
1510         if (!*card->id && c->id) {
1511                 int i, n = 0;
1512                 strlcpy(card->id, c->id, sizeof(card->id));
1513                 for (;;) {
1514                         for (i = 0; i < snd_ecards_limit; i++) {
1515                                 if (snd_cards[i] && !strcmp(snd_cards[i]->id, card->id))
1516                                         break;
1517                         }
1518                         if (i >= snd_ecards_limit)
1519                                 break;
1520                         n++;
1521                         if (n >= SNDRV_CARDS)
1522                                 break;
1523                         snprintf(card->id, sizeof(card->id), "%s_%d", c->id, n);
1524                 }
1525         }
1526
1527         is_audigy = emu->audigy = c->emu10k2_chip;
1528
1529         /* set the DMA transfer mask */
1530         emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK;
1531         if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
1532             pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
1533                 snd_printk(KERN_ERR "architecture does not support PCI busmaster DMA with mask 0x%lx\n", emu->dma_mask);
1534                 kfree(emu);
1535                 pci_disable_device(pci);
1536                 return -ENXIO;
1537         }
1538         if (is_audigy)
1539                 emu->gpr_base = A_FXGPREGBASE;
1540         else
1541                 emu->gpr_base = FXGPREGBASE;
1542
1543         if ((err = pci_request_regions(pci, "EMU10K1")) < 0) {
1544                 kfree(emu);
1545                 pci_disable_device(pci);
1546                 return err;
1547         }
1548         emu->port = pci_resource_start(pci, 0);
1549
1550         if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED,
1551                         "EMU10K1", emu)) {
1552                 err = -EBUSY;
1553                 goto error;
1554         }
1555         emu->irq = pci->irq;
1556
1557         emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1558         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1559                                 32 * 1024, &emu->ptb_pages) < 0) {
1560                 err = -ENOMEM;
1561                 goto error;
1562         }
1563
1564         emu->page_ptr_table = (void **)vmalloc(emu->max_cache_pages * sizeof(void*));
1565         emu->page_addr_table = (unsigned long*)vmalloc(emu->max_cache_pages * sizeof(unsigned long));
1566         if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) {
1567                 err = -ENOMEM;
1568                 goto error;
1569         }
1570
1571         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1572                                 EMUPAGESIZE, &emu->silent_page) < 0) {
1573                 err = -ENOMEM;
1574                 goto error;
1575         }
1576         emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1577         if (emu->memhdr == NULL) {
1578                 err = -ENOMEM;
1579                 goto error;
1580         }
1581         emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1582                 sizeof(struct snd_util_memblk);
1583
1584         pci_set_master(pci);
1585
1586         emu->fx8010.fxbus_mask = 0x303f;
1587         if (extin_mask == 0)
1588                 extin_mask = 0x3fcf;
1589         if (extout_mask == 0)
1590                 extout_mask = 0x7fff;
1591         emu->fx8010.extin_mask = extin_mask;
1592         emu->fx8010.extout_mask = extout_mask;
1593         emu->enable_ir = enable_ir;
1594
1595         if (emu->card_capabilities->ecard) {
1596                 if ((err = snd_emu10k1_ecard_init(emu)) < 0)
1597                         goto error;
1598         } else if (emu->card_capabilities->ca_cardbus_chip) {
1599                 if ((err = snd_emu10k1_cardbus_init(emu)) < 0)
1600                         goto error;
1601         } else if (emu->card_capabilities->emu1010) {
1602                 if ((err = snd_emu10k1_emu1010_init(emu)) < 0) {
1603                         snd_emu10k1_free(emu);
1604                         return err;
1605                 }
1606         } else {
1607                 /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
1608                         does not support this, it shouldn't do any harm */
1609                 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1610         }
1611
1612         /* initialize TRAM setup */
1613         emu->fx8010.itram_size = (16 * 1024)/2;
1614         emu->fx8010.etram_pages.area = NULL;
1615         emu->fx8010.etram_pages.bytes = 0;
1616
1617         /*
1618          *  Init to 0x02109204 :
1619          *  Clock accuracy    = 0     (1000ppm)
1620          *  Sample Rate       = 2     (48kHz)
1621          *  Audio Channel     = 1     (Left of 2)
1622          *  Source Number     = 0     (Unspecified)
1623          *  Generation Status = 1     (Original for Cat Code 12)
1624          *  Cat Code          = 12    (Digital Signal Mixer)
1625          *  Mode              = 0     (Mode 0)
1626          *  Emphasis          = 0     (None)
1627          *  CP                = 1     (Copyright unasserted)
1628          *  AN                = 0     (Audio data)
1629          *  P                 = 0     (Consumer)
1630          */
1631         emu->spdif_bits[0] = emu->spdif_bits[1] =
1632                 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1633                 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
1634                 SPCS_GENERATIONSTATUS | 0x00001200 |
1635                 0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
1636
1637         emu->reserved_page = (struct snd_emu10k1_memblk *)
1638                 snd_emu10k1_synth_alloc(emu, 4096);
1639         if (emu->reserved_page)
1640                 emu->reserved_page->map_locked = 1;
1641         
1642         /* Clear silent pages and set up pointers */
1643         memset(emu->silent_page.area, 0, PAGE_SIZE);
1644         silent_page = emu->silent_page.addr << 1;
1645         for (idx = 0; idx < MAXPAGES; idx++)
1646                 ((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
1647
1648         /* set up voice indices */
1649         for (idx = 0; idx < NUM_G; idx++) {
1650                 emu->voices[idx].emu = emu;
1651                 emu->voices[idx].number = idx;
1652         }
1653
1654         if ((err = snd_emu10k1_init(emu, enable_ir, 0)) < 0)
1655                 goto error;
1656 #ifdef CONFIG_PM
1657         if ((err = alloc_pm_buffer(emu)) < 0)
1658                 goto error;
1659 #endif
1660
1661         /*  Initialize the effect engine */
1662         if ((err = snd_emu10k1_init_efx(emu)) < 0)
1663                 goto error;
1664         snd_emu10k1_audio_enable(emu);
1665
1666         if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops)) < 0)
1667                 goto error;
1668
1669 #ifdef CONFIG_PROC_FS
1670         snd_emu10k1_proc_init(emu);
1671 #endif
1672
1673         snd_card_set_dev(card, &pci->dev);
1674         *remu = emu;
1675         return 0;
1676
1677  error:
1678         snd_emu10k1_free(emu);
1679         return err;
1680 }
1681
1682 #ifdef CONFIG_PM
1683 static unsigned char saved_regs[] = {
1684         CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP,
1685         FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL,
1686         ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2,
1687         TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA,
1688         MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2,
1689         SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX,
1690         0xff /* end */
1691 };
1692 static unsigned char saved_regs_audigy[] = {
1693         A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_SAMPLE_RATE,
1694         A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
1695         0xff /* end */
1696 };
1697
1698 static int __devinit alloc_pm_buffer(struct snd_emu10k1 *emu)
1699 {
1700         int size;
1701
1702         size = ARRAY_SIZE(saved_regs);
1703         if (emu->audigy)
1704                 size += ARRAY_SIZE(saved_regs_audigy);
1705         emu->saved_ptr = vmalloc(4 * NUM_G * size);
1706         if (! emu->saved_ptr)
1707                 return -ENOMEM;
1708         if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1709                 return -ENOMEM;
1710         if (emu->card_capabilities->ca0151_chip &&
1711             snd_p16v_alloc_pm_buffer(emu) < 0)
1712                 return -ENOMEM;
1713         return 0;
1714 }
1715
1716 static void free_pm_buffer(struct snd_emu10k1 *emu)
1717 {
1718         vfree(emu->saved_ptr);
1719         snd_emu10k1_efx_free_pm_buffer(emu);
1720         if (emu->card_capabilities->ca0151_chip)
1721                 snd_p16v_free_pm_buffer(emu);
1722 }
1723
1724 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1725 {
1726         int i;
1727         unsigned char *reg;
1728         unsigned int *val;
1729
1730         val = emu->saved_ptr;
1731         for (reg = saved_regs; *reg != 0xff; reg++)
1732                 for (i = 0; i < NUM_G; i++, val++)
1733                         *val = snd_emu10k1_ptr_read(emu, *reg, i);
1734         if (emu->audigy) {
1735                 for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1736                         for (i = 0; i < NUM_G; i++, val++)
1737                                 *val = snd_emu10k1_ptr_read(emu, *reg, i);
1738         }
1739         if (emu->audigy)
1740                 emu->saved_a_iocfg = inl(emu->port + A_IOCFG);
1741         emu->saved_hcfg = inl(emu->port + HCFG);
1742 }
1743
1744 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1745 {
1746         if (emu->card_capabilities->ecard)
1747                 snd_emu10k1_ecard_init(emu);
1748         else if (emu->card_capabilities->ca_cardbus_chip)
1749                 snd_emu10k1_cardbus_init(emu);
1750         else if (emu->card_capabilities->emu1010)
1751                 snd_emu10k1_emu1010_init(emu);
1752         else
1753                 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1754         snd_emu10k1_init(emu, emu->enable_ir, 1);
1755 }
1756
1757 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1758 {
1759         int i;
1760         unsigned char *reg;
1761         unsigned int *val;
1762
1763         snd_emu10k1_audio_enable(emu);
1764
1765         /* resore for spdif */
1766         if (emu->audigy)
1767                 outl(emu->saved_a_iocfg, emu->port + A_IOCFG);
1768         outl(emu->saved_hcfg, emu->port + HCFG);
1769
1770         val = emu->saved_ptr;
1771         for (reg = saved_regs; *reg != 0xff; reg++)
1772                 for (i = 0; i < NUM_G; i++, val++)
1773                         snd_emu10k1_ptr_write(emu, *reg, i, *val);
1774         if (emu->audigy) {
1775                 for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1776                         for (i = 0; i < NUM_G; i++, val++)
1777                                 snd_emu10k1_ptr_write(emu, *reg, i, *val);
1778         }
1779 }
1780 #endif