xref: /linux/sound/pci/emu10k1/emu10k1_main.c (revision 7b12b9137930eb821b68e1bfa11e9de692208620)
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.demon.co.uk>
7  *      Added support for Audigy 2 Value.
8  *
9  *
10  *  BUGS:
11  *    --
12  *
13  *  TODO:
14  *    --
15  *
16  *   This program is free software; you can redistribute it and/or modify
17  *   it under the terms of the GNU General Public License as published by
18  *   the Free Software Foundation; either version 2 of the License, or
19  *   (at your option) any later version.
20  *
21  *   This program is distributed in the hope that it will be useful,
22  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
23  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  *   GNU General Public License for more details.
25  *
26  *   You should have received a copy of the GNU General Public License
27  *   along with this program; if not, write to the Free Software
28  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
29  *
30  */
31 
32 #include <sound/driver.h>
33 #include <linux/delay.h>
34 #include <linux/init.h>
35 #include <linux/interrupt.h>
36 #include <linux/pci.h>
37 #include <linux/slab.h>
38 #include <linux/vmalloc.h>
39 #include <linux/mutex.h>
40 
41 
42 #include <sound/core.h>
43 #include <sound/emu10k1.h>
44 #include "p16v.h"
45 #include "tina2.h"
46 
47 
48 /*************************************************************************
49  * EMU10K1 init / done
50  *************************************************************************/
51 
52 void snd_emu10k1_voice_init(struct snd_emu10k1 * emu, int ch)
53 {
54 	snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
55 	snd_emu10k1_ptr_write(emu, IP, ch, 0);
56 	snd_emu10k1_ptr_write(emu, VTFT, ch, 0xffff);
57 	snd_emu10k1_ptr_write(emu, CVCF, ch, 0xffff);
58 	snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
59 	snd_emu10k1_ptr_write(emu, CPF, ch, 0);
60 	snd_emu10k1_ptr_write(emu, CCR, ch, 0);
61 
62 	snd_emu10k1_ptr_write(emu, PSST, ch, 0);
63 	snd_emu10k1_ptr_write(emu, DSL, ch, 0x10);
64 	snd_emu10k1_ptr_write(emu, CCCA, ch, 0);
65 	snd_emu10k1_ptr_write(emu, Z1, ch, 0);
66 	snd_emu10k1_ptr_write(emu, Z2, ch, 0);
67 	snd_emu10k1_ptr_write(emu, FXRT, ch, 0x32100000);
68 
69 	snd_emu10k1_ptr_write(emu, ATKHLDM, ch, 0);
70 	snd_emu10k1_ptr_write(emu, DCYSUSM, ch, 0);
71 	snd_emu10k1_ptr_write(emu, IFATN, ch, 0xffff);
72 	snd_emu10k1_ptr_write(emu, PEFE, ch, 0);
73 	snd_emu10k1_ptr_write(emu, FMMOD, ch, 0);
74 	snd_emu10k1_ptr_write(emu, TREMFRQ, ch, 24);	/* 1 Hz */
75 	snd_emu10k1_ptr_write(emu, FM2FRQ2, ch, 24);	/* 1 Hz */
76 	snd_emu10k1_ptr_write(emu, TEMPENV, ch, 0);
77 
78 	/*** these are last so OFF prevents writing ***/
79 	snd_emu10k1_ptr_write(emu, LFOVAL2, ch, 0);
80 	snd_emu10k1_ptr_write(emu, LFOVAL1, ch, 0);
81 	snd_emu10k1_ptr_write(emu, ATKHLDV, ch, 0);
82 	snd_emu10k1_ptr_write(emu, ENVVOL, ch, 0);
83 	snd_emu10k1_ptr_write(emu, ENVVAL, ch, 0);
84 
85 	/* Audigy extra stuffs */
86 	if (emu->audigy) {
87 		snd_emu10k1_ptr_write(emu, 0x4c, ch, 0); /* ?? */
88 		snd_emu10k1_ptr_write(emu, 0x4d, ch, 0); /* ?? */
89 		snd_emu10k1_ptr_write(emu, 0x4e, ch, 0); /* ?? */
90 		snd_emu10k1_ptr_write(emu, 0x4f, ch, 0); /* ?? */
91 		snd_emu10k1_ptr_write(emu, A_FXRT1, ch, 0x03020100);
92 		snd_emu10k1_ptr_write(emu, A_FXRT2, ch, 0x3f3f3f3f);
93 		snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, ch, 0);
94 	}
95 }
96 
97 static unsigned int spi_dac_init[] = {
98 		0x00ff,
99 		0x02ff,
100 		0x0400,
101 		0x0520,
102 		0x0600,
103 		0x08ff,
104 		0x0aff,
105 		0x0cff,
106 		0x0eff,
107 		0x10ff,
108 		0x1200,
109 		0x1400,
110 		0x1480,
111 		0x1800,
112 		0x1aff,
113 		0x1cff,
114 		0x1e00,
115 		0x0530,
116 		0x0602,
117 		0x0622,
118 		0x1400,
119 };
120 
121 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume)
122 {
123 	unsigned int silent_page;
124 	int ch;
125 
126 	/* disable audio and lock cache */
127 	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE,
128 	     emu->port + HCFG);
129 
130 	/* reset recording buffers */
131 	snd_emu10k1_ptr_write(emu, MICBS, 0, ADCBS_BUFSIZE_NONE);
132 	snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
133 	snd_emu10k1_ptr_write(emu, FXBS, 0, ADCBS_BUFSIZE_NONE);
134 	snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
135 	snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
136 	snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
137 
138 	/* disable channel interrupt */
139 	outl(0, emu->port + INTE);
140 	snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
141 	snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
142 	snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
143 	snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
144 
145 	if (emu->audigy){
146 		/* set SPDIF bypass mode */
147 		snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
148 		/* enable rear left + rear right AC97 slots */
149 		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT |
150 				      AC97SLOT_REAR_LEFT);
151 	}
152 
153 	/* init envelope engine */
154 	for (ch = 0; ch < NUM_G; ch++)
155 		snd_emu10k1_voice_init(emu, ch);
156 
157 	snd_emu10k1_ptr_write(emu, SPCS0, 0, emu->spdif_bits[0]);
158 	snd_emu10k1_ptr_write(emu, SPCS1, 0, emu->spdif_bits[1]);
159 	snd_emu10k1_ptr_write(emu, SPCS2, 0, emu->spdif_bits[2]);
160 
161 	if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
162 		/* Hacks for Alice3 to work independent of haP16V driver */
163 		u32 tmp;
164 
165 		//Setup SRCMulti_I2S SamplingRate
166 		tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
167 		tmp &= 0xfffff1ff;
168 		tmp |= (0x2<<9);
169 		snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
170 
171 		/* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
172 		snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
173 		/* Setup SRCMulti Input Audio Enable */
174 		/* Use 0xFFFFFFFF to enable P16V sounds. */
175 		snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF);
176 
177 		/* Enabled Phased (8-channel) P16V playback */
178 		outl(0x0201, emu->port + HCFG2);
179 		/* Set playback routing. */
180 		snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
181 	}
182 	if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
183 		/* Hacks for Alice3 to work independent of haP16V driver */
184 		u32 tmp;
185 
186 		snd_printk(KERN_INFO "Audigy2 value: Special config.\n");
187 		//Setup SRCMulti_I2S SamplingRate
188 		tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
189 		tmp &= 0xfffff1ff;
190 		tmp |= (0x2<<9);
191 		snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
192 
193 		/* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
194 		outl(0x600000, emu->port + 0x20);
195 		outl(0x14, emu->port + 0x24);
196 
197 		/* Setup SRCMulti Input Audio Enable */
198 		outl(0x7b0000, emu->port + 0x20);
199 		outl(0xFF000000, emu->port + 0x24);
200 
201 		/* Setup SPDIF Out Audio Enable */
202 		/* The Audigy 2 Value has a separate SPDIF out,
203 		 * so no need for a mixer switch
204 		 */
205 		outl(0x7a0000, emu->port + 0x20);
206 		outl(0xFF000000, emu->port + 0x24);
207 		tmp = inl(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
208 		outl(tmp, emu->port + A_IOCFG);
209 	}
210 	if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */
211 		int size, n;
212 
213 		size = ARRAY_SIZE(spi_dac_init);
214 		for (n=0; n < size; n++)
215 			snd_emu10k1_spi_write(emu, spi_dac_init[n]);
216 
217 		snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10);
218 		/* Enable GPIOs
219 		 * GPIO0: Unknown
220 		 * GPIO1: Speakers-enabled.
221 		 * GPIO2: Unknown
222 		 * GPIO3: Unknown
223 		 * GPIO4: IEC958 Output on.
224 		 * GPIO5: Unknown
225 		 * GPIO6: Unknown
226 		 * GPIO7: Unknown
227 		 */
228 		outl(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */
229 
230 	}
231 
232 	snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
233 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);	/* taken from original driver */
234 	snd_emu10k1_ptr_write(emu, TCBS, 0, 4);	/* taken from original driver */
235 
236 	silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
237 	for (ch = 0; ch < NUM_G; ch++) {
238 		snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
239 		snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
240 	}
241 
242 	/*
243 	 *  Hokay, setup HCFG
244 	 *   Mute Disable Audio = 0
245 	 *   Lock Tank Memory = 1
246 	 *   Lock Sound Memory = 0
247 	 *   Auto Mute = 1
248 	 */
249 	if (emu->audigy) {
250 		if (emu->revision == 4) /* audigy2 */
251 			outl(HCFG_AUDIOENABLE |
252 			     HCFG_AC3ENABLE_CDSPDIF |
253 			     HCFG_AC3ENABLE_GPSPDIF |
254 			     HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
255 		else
256 			outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
257 	/* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
258 	 * e.g. card_capabilities->joystick */
259 	} else if (emu->model == 0x20 ||
260 	    emu->model == 0xc400 ||
261 	    (emu->model == 0x21 && emu->revision < 6))
262 		outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG);
263 	else
264 		// With on-chip joystick
265 		outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
266 
267 	if (enable_ir) {	/* enable IR for SB Live */
268 		if ( emu->card_capabilities->emu1212m) {
269 			;  /* Disable all access to A_IOCFG for the emu1212m */
270 		} else if (emu->audigy) {
271 			unsigned int reg = inl(emu->port + A_IOCFG);
272 			outl(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
273 			udelay(500);
274 			outl(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
275 			udelay(100);
276 			outl(reg, emu->port + A_IOCFG);
277 		} else {
278 			unsigned int reg = inl(emu->port + HCFG);
279 			outl(reg | HCFG_GPOUT2, emu->port + HCFG);
280 			udelay(500);
281 			outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG);
282 			udelay(100);
283 			outl(reg, emu->port + HCFG);
284  		}
285 	}
286 
287 	if ( emu->card_capabilities->emu1212m) {
288 		;  /* Disable all access to A_IOCFG for the emu1212m */
289 	} else if (emu->audigy) {	/* enable analog output */
290 		unsigned int reg = inl(emu->port + A_IOCFG);
291 		outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
292 	}
293 
294 	return 0;
295 }
296 
297 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu)
298 {
299 	/*
300 	 *  Enable the audio bit
301 	 */
302 	outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
303 
304 	/* Enable analog/digital outs on audigy */
305 	if ( emu->card_capabilities->emu1212m) {
306 		;  /* Disable all access to A_IOCFG for the emu1212m */
307 	} else if (emu->audigy) {
308 		outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
309 
310 		if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
311 			/* Unmute Analog now.  Set GPO6 to 1 for Apollo.
312 			 * This has to be done after init ALice3 I2SOut beyond 48KHz.
313 			 * So, sequence is important. */
314 			outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
315 		} else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
316 			/* Unmute Analog now. */
317 			outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
318 		} else {
319 			/* Disable routing from AC97 line out to Front speakers */
320 			outl(inl(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG);
321 		}
322 	}
323 
324 #if 0
325 	{
326 	unsigned int tmp;
327 	/* FIXME: the following routine disables LiveDrive-II !! */
328 	// TOSLink detection
329 	emu->tos_link = 0;
330 	tmp = inl(emu->port + HCFG);
331 	if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
332 		outl(tmp|0x800, emu->port + HCFG);
333 		udelay(50);
334 		if (tmp != (inl(emu->port + HCFG) & ~0x800)) {
335 			emu->tos_link = 1;
336 			outl(tmp, emu->port + HCFG);
337 		}
338 	}
339 	}
340 #endif
341 
342 	snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE);
343 }
344 
345 int snd_emu10k1_done(struct snd_emu10k1 * emu)
346 {
347 	int ch;
348 
349 	outl(0, emu->port + INTE);
350 
351 	/*
352 	 *  Shutdown the chip
353 	 */
354 	for (ch = 0; ch < NUM_G; ch++)
355 		snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
356 	for (ch = 0; ch < NUM_G; ch++) {
357 		snd_emu10k1_ptr_write(emu, VTFT, ch, 0);
358 		snd_emu10k1_ptr_write(emu, CVCF, ch, 0);
359 		snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
360 		snd_emu10k1_ptr_write(emu, CPF, ch, 0);
361 	}
362 
363 	/* reset recording buffers */
364 	snd_emu10k1_ptr_write(emu, MICBS, 0, 0);
365 	snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
366 	snd_emu10k1_ptr_write(emu, FXBS, 0, 0);
367 	snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
368 	snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
369 	snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
370 	snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
371 	snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
372 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);
373 	if (emu->audigy)
374 		snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
375 	else
376 		snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
377 
378 	/* disable channel interrupt */
379 	snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
380 	snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
381 	snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
382 	snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
383 
384 	/* disable audio and lock cache */
385 	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
386 	snd_emu10k1_ptr_write(emu, PTB, 0, 0);
387 
388 	return 0;
389 }
390 
391 /*************************************************************************
392  * ECARD functional implementation
393  *************************************************************************/
394 
395 /* In A1 Silicon, these bits are in the HC register */
396 #define HOOKN_BIT		(1L << 12)
397 #define HANDN_BIT		(1L << 11)
398 #define PULSEN_BIT		(1L << 10)
399 
400 #define EC_GDI1			(1 << 13)
401 #define EC_GDI0			(1 << 14)
402 
403 #define EC_NUM_CONTROL_BITS	20
404 
405 #define EC_AC3_DATA_SELN	0x0001L
406 #define EC_EE_DATA_SEL		0x0002L
407 #define EC_EE_CNTRL_SELN	0x0004L
408 #define EC_EECLK		0x0008L
409 #define EC_EECS			0x0010L
410 #define EC_EESDO		0x0020L
411 #define EC_TRIM_CSN		0x0040L
412 #define EC_TRIM_SCLK		0x0080L
413 #define EC_TRIM_SDATA		0x0100L
414 #define EC_TRIM_MUTEN		0x0200L
415 #define EC_ADCCAL		0x0400L
416 #define EC_ADCRSTN		0x0800L
417 #define EC_DACCAL		0x1000L
418 #define EC_DACMUTEN		0x2000L
419 #define EC_LEDN			0x4000L
420 
421 #define EC_SPDIF0_SEL_SHIFT	15
422 #define EC_SPDIF1_SEL_SHIFT	17
423 #define EC_SPDIF0_SEL_MASK	(0x3L << EC_SPDIF0_SEL_SHIFT)
424 #define EC_SPDIF1_SEL_MASK	(0x7L << EC_SPDIF1_SEL_SHIFT)
425 #define EC_SPDIF0_SELECT(_x)	(((_x) << EC_SPDIF0_SEL_SHIFT) & EC_SPDIF0_SEL_MASK)
426 #define EC_SPDIF1_SELECT(_x)	(((_x) << EC_SPDIF1_SEL_SHIFT) & EC_SPDIF1_SEL_MASK)
427 #define EC_CURRENT_PROM_VERSION 0x01	/* Self-explanatory.  This should
428 					 * be incremented any time the EEPROM's
429 					 * format is changed.  */
430 
431 #define EC_EEPROM_SIZE		0x40	/* ECARD EEPROM has 64 16-bit words */
432 
433 /* Addresses for special values stored in to EEPROM */
434 #define EC_PROM_VERSION_ADDR	0x20	/* Address of the current prom version */
435 #define EC_BOARDREV0_ADDR	0x21	/* LSW of board rev */
436 #define EC_BOARDREV1_ADDR	0x22	/* MSW of board rev */
437 
438 #define EC_LAST_PROMFILE_ADDR	0x2f
439 
440 #define EC_SERIALNUM_ADDR	0x30	/* First word of serial number.  The
441 					 * can be up to 30 characters in length
442 					 * and is stored as a NULL-terminated
443 					 * ASCII string.  Any unused bytes must be
444 					 * filled with zeros */
445 #define EC_CHECKSUM_ADDR	0x3f	/* Location at which checksum is stored */
446 
447 
448 /* Most of this stuff is pretty self-evident.  According to the hardware
449  * dudes, we need to leave the ADCCAL bit low in order to avoid a DC
450  * offset problem.  Weird.
451  */
452 #define EC_RAW_RUN_MODE		(EC_DACMUTEN | EC_ADCRSTN | EC_TRIM_MUTEN | \
453 				 EC_TRIM_CSN)
454 
455 
456 #define EC_DEFAULT_ADC_GAIN	0xC4C4
457 #define EC_DEFAULT_SPDIF0_SEL	0x0
458 #define EC_DEFAULT_SPDIF1_SEL	0x4
459 
460 /**************************************************************************
461  * @func Clock bits into the Ecard's control latch.  The Ecard uses a
462  *  control latch will is loaded bit-serially by toggling the Modem control
463  *  lines from function 2 on the E8010.  This function hides these details
464  *  and presents the illusion that we are actually writing to a distinct
465  *  register.
466  */
467 
468 static void snd_emu10k1_ecard_write(struct snd_emu10k1 * emu, unsigned int value)
469 {
470 	unsigned short count;
471 	unsigned int data;
472 	unsigned long hc_port;
473 	unsigned int hc_value;
474 
475 	hc_port = emu->port + HCFG;
476 	hc_value = inl(hc_port) & ~(HOOKN_BIT | HANDN_BIT | PULSEN_BIT);
477 	outl(hc_value, hc_port);
478 
479 	for (count = 0; count < EC_NUM_CONTROL_BITS; count++) {
480 
481 		/* Set up the value */
482 		data = ((value & 0x1) ? PULSEN_BIT : 0);
483 		value >>= 1;
484 
485 		outl(hc_value | data, hc_port);
486 
487 		/* Clock the shift register */
488 		outl(hc_value | data | HANDN_BIT, hc_port);
489 		outl(hc_value | data, hc_port);
490 	}
491 
492 	/* Latch the bits */
493 	outl(hc_value | HOOKN_BIT, hc_port);
494 	outl(hc_value, hc_port);
495 }
496 
497 /**************************************************************************
498  * @func Set the gain of the ECARD's CS3310 Trim/gain controller.  The
499  * trim value consists of a 16bit value which is composed of two
500  * 8 bit gain/trim values, one for the left channel and one for the
501  * right channel.  The following table maps from the Gain/Attenuation
502  * value in decibels into the corresponding bit pattern for a single
503  * channel.
504  */
505 
506 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 * emu,
507 					 unsigned short gain)
508 {
509 	unsigned int bit;
510 
511 	/* Enable writing to the TRIM registers */
512 	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
513 
514 	/* Do it again to insure that we meet hold time requirements */
515 	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
516 
517 	for (bit = (1 << 15); bit; bit >>= 1) {
518 		unsigned int value;
519 
520 		value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA);
521 
522 		if (gain & bit)
523 			value |= EC_TRIM_SDATA;
524 
525 		/* Clock the bit */
526 		snd_emu10k1_ecard_write(emu, value);
527 		snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK);
528 		snd_emu10k1_ecard_write(emu, value);
529 	}
530 
531 	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
532 }
533 
534 static int __devinit snd_emu10k1_ecard_init(struct snd_emu10k1 * emu)
535 {
536 	unsigned int hc_value;
537 
538 	/* Set up the initial settings */
539 	emu->ecard_ctrl = EC_RAW_RUN_MODE |
540 			  EC_SPDIF0_SELECT(EC_DEFAULT_SPDIF0_SEL) |
541 			  EC_SPDIF1_SELECT(EC_DEFAULT_SPDIF1_SEL);
542 
543 	/* Step 0: Set the codec type in the hardware control register
544 	 * and enable audio output */
545 	hc_value = inl(emu->port + HCFG);
546 	outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG);
547 	inl(emu->port + HCFG);
548 
549 	/* Step 1: Turn off the led and deassert TRIM_CS */
550 	snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
551 
552 	/* Step 2: Calibrate the ADC and DAC */
553 	snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN);
554 
555 	/* Step 3: Wait for awhile;   XXX We can't get away with this
556 	 * under a real operating system; we'll need to block and wait that
557 	 * way. */
558 	snd_emu10k1_wait(emu, 48000);
559 
560 	/* Step 4: Switch off the DAC and ADC calibration.  Note
561 	 * That ADC_CAL is actually an inverted signal, so we assert
562 	 * it here to stop calibration.  */
563 	snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
564 
565 	/* Step 4: Switch into run mode */
566 	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
567 
568 	/* Step 5: Set the analog input gain */
569 	snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN);
570 
571 	return 0;
572 }
573 
574 static int __devinit snd_emu10k1_cardbus_init(struct snd_emu10k1 * emu)
575 {
576 	unsigned long special_port;
577 	unsigned int value;
578 
579 	/* Special initialisation routine
580 	 * before the rest of the IO-Ports become active.
581 	 */
582 	special_port = emu->port + 0x38;
583 	value = inl(special_port);
584 	outl(0x00d00000, special_port);
585 	value = inl(special_port);
586 	outl(0x00d00001, special_port);
587 	value = inl(special_port);
588 	outl(0x00d0005f, special_port);
589 	value = inl(special_port);
590 	outl(0x00d0007f, special_port);
591 	value = inl(special_port);
592 	outl(0x0090007f, special_port);
593 	value = inl(special_port);
594 
595 	snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */
596 	return 0;
597 }
598 
599 static int snd_emu1212m_fpga_write(struct snd_emu10k1 * emu, int reg, int value)
600 {
601 	if (reg<0 || reg>0x3f)
602 		return 1;
603 	reg+=0x40; /* 0x40 upwards are registers. */
604 	if (value<0 || value>0x3f) /* 0 to 0x3f are values */
605 		return 1;
606 	outl(reg, emu->port + A_IOCFG);
607 	outl(reg | 0x80, emu->port + A_IOCFG);  /* High bit clocks the value into the fpga. */
608 	outl(value, emu->port + A_IOCFG);
609 	outl(value | 0x80 , emu->port + A_IOCFG);  /* High bit clocks the value into the fpga. */
610 
611 	return 0;
612 }
613 
614 static int snd_emu1212m_fpga_read(struct snd_emu10k1 * emu, int reg, int *value)
615 {
616 	if (reg<0 || reg>0x3f)
617 		return 1;
618 	reg+=0x40; /* 0x40 upwards are registers. */
619 	outl(reg, emu->port + A_IOCFG);
620 	outl(reg | 0x80, emu->port + A_IOCFG);  /* High bit clocks the value into the fpga. */
621 	*value = inl(emu->port + A_IOCFG);
622 
623 	return 0;
624 }
625 
626 static int snd_emu1212m_fpga_netlist_write(struct snd_emu10k1 * emu, int reg, int value)
627 {
628 	snd_emu1212m_fpga_write(emu, 0x00, ((reg >> 8) & 0x3f) );
629 	snd_emu1212m_fpga_write(emu, 0x01, (reg & 0x3f) );
630 	snd_emu1212m_fpga_write(emu, 0x02, ((value >> 8) & 0x3f) );
631 	snd_emu1212m_fpga_write(emu, 0x03, (value & 0x3f) );
632 
633 	return 0;
634 }
635 
636 static int __devinit snd_emu10k1_emu1212m_init(struct snd_emu10k1 * emu)
637 {
638 	unsigned int i;
639 	int tmp;
640 
641 	snd_printk(KERN_ERR "emu1212m: Special config.\n");
642 	outl(0x0005a00c, emu->port + HCFG);
643 	outl(0x0005a004, emu->port + HCFG);
644 	outl(0x0005a000, emu->port + HCFG);
645 	outl(0x0005a000, emu->port + HCFG);
646 
647 	snd_emu1212m_fpga_read(emu, 0x22, &tmp );
648 	snd_emu1212m_fpga_read(emu, 0x23, &tmp );
649 	snd_emu1212m_fpga_read(emu, 0x24, &tmp );
650 	snd_emu1212m_fpga_write(emu, 0x04, 0x01 );
651 	snd_emu1212m_fpga_read(emu, 0x0b, &tmp );
652 	snd_emu1212m_fpga_write(emu, 0x0b, 0x01 );
653 	snd_emu1212m_fpga_read(emu, 0x10, &tmp );
654 	snd_emu1212m_fpga_write(emu, 0x10, 0x00 );
655 	snd_emu1212m_fpga_read(emu, 0x11, &tmp );
656 	snd_emu1212m_fpga_write(emu, 0x11, 0x30 );
657 	snd_emu1212m_fpga_read(emu, 0x13, &tmp );
658 	snd_emu1212m_fpga_write(emu, 0x13, 0x0f );
659 	snd_emu1212m_fpga_read(emu, 0x11, &tmp );
660 	snd_emu1212m_fpga_write(emu, 0x11, 0x30 );
661 	snd_emu1212m_fpga_read(emu, 0x0a, &tmp );
662 	snd_emu1212m_fpga_write(emu, 0x0a, 0x10 );
663 	snd_emu1212m_fpga_write(emu, 0x0c, 0x19 );
664 	snd_emu1212m_fpga_write(emu, 0x12, 0x0c );
665 	snd_emu1212m_fpga_write(emu, 0x09, 0x0f );
666 	snd_emu1212m_fpga_write(emu, 0x06, 0x00 );
667 	snd_emu1212m_fpga_write(emu, 0x05, 0x00 );
668 	snd_emu1212m_fpga_write(emu, 0x0e, 0x12 );
669 	snd_emu1212m_fpga_netlist_write(emu, 0x0000, 0x0200);
670 	snd_emu1212m_fpga_netlist_write(emu, 0x0001, 0x0201);
671 	snd_emu1212m_fpga_netlist_write(emu, 0x0002, 0x0500);
672 	snd_emu1212m_fpga_netlist_write(emu, 0x0003, 0x0501);
673 	snd_emu1212m_fpga_netlist_write(emu, 0x0004, 0x0400);
674 	snd_emu1212m_fpga_netlist_write(emu, 0x0005, 0x0401);
675 	snd_emu1212m_fpga_netlist_write(emu, 0x0006, 0x0402);
676 	snd_emu1212m_fpga_netlist_write(emu, 0x0007, 0x0403);
677 	snd_emu1212m_fpga_netlist_write(emu, 0x0008, 0x0404);
678 	snd_emu1212m_fpga_netlist_write(emu, 0x0009, 0x0405);
679 	snd_emu1212m_fpga_netlist_write(emu, 0x000a, 0x0406);
680 	snd_emu1212m_fpga_netlist_write(emu, 0x000b, 0x0407);
681 	snd_emu1212m_fpga_netlist_write(emu, 0x000c, 0x0100);
682 	snd_emu1212m_fpga_netlist_write(emu, 0x000d, 0x0104);
683 	snd_emu1212m_fpga_netlist_write(emu, 0x000e, 0x0200);
684 	snd_emu1212m_fpga_netlist_write(emu, 0x000f, 0x0201);
685 	for (i=0;i < 0x20;i++) {
686 		snd_emu1212m_fpga_netlist_write(emu, 0x0100+i, 0x0000);
687 	}
688 	for (i=0;i < 4;i++) {
689 		snd_emu1212m_fpga_netlist_write(emu, 0x0200+i, 0x0000);
690 	}
691 	for (i=0;i < 7;i++) {
692 		snd_emu1212m_fpga_netlist_write(emu, 0x0300+i, 0x0000);
693 	}
694 	for (i=0;i < 7;i++) {
695 		snd_emu1212m_fpga_netlist_write(emu, 0x0400+i, 0x0000);
696 	}
697 	snd_emu1212m_fpga_netlist_write(emu, 0x0500, 0x0108);
698 	snd_emu1212m_fpga_netlist_write(emu, 0x0501, 0x010c);
699 	snd_emu1212m_fpga_netlist_write(emu, 0x0600, 0x0110);
700 	snd_emu1212m_fpga_netlist_write(emu, 0x0601, 0x0114);
701 	snd_emu1212m_fpga_netlist_write(emu, 0x0700, 0x0118);
702 	snd_emu1212m_fpga_netlist_write(emu, 0x0701, 0x011c);
703 	snd_emu1212m_fpga_write(emu, 0x07, 0x01 );
704 
705 	snd_emu1212m_fpga_read(emu, 0x21, &tmp );
706 
707 	outl(0x0000a000, emu->port + HCFG);
708 	outl(0x0000a001, emu->port + HCFG);
709 	/* Initial boot complete. Now patches */
710 
711 	snd_emu1212m_fpga_read(emu, 0x21, &tmp );
712 	snd_emu1212m_fpga_write(emu, 0x0c, 0x19 );
713 	snd_emu1212m_fpga_write(emu, 0x12, 0x0c );
714 	snd_emu1212m_fpga_write(emu, 0x0c, 0x19 );
715 	snd_emu1212m_fpga_write(emu, 0x12, 0x0c );
716 	snd_emu1212m_fpga_read(emu, 0x0a, &tmp );
717 	snd_emu1212m_fpga_write(emu, 0x0a, 0x10 );
718 
719 	snd_emu1212m_fpga_read(emu, 0x20, &tmp );
720 	snd_emu1212m_fpga_read(emu, 0x21, &tmp );
721 
722 	snd_emu1212m_fpga_netlist_write(emu, 0x0300, 0x0312);
723 	snd_emu1212m_fpga_netlist_write(emu, 0x0301, 0x0313);
724 	snd_emu1212m_fpga_netlist_write(emu, 0x0200, 0x0302);
725 	snd_emu1212m_fpga_netlist_write(emu, 0x0201, 0x0303);
726 
727 	return 0;
728 }
729 /*
730  *  Create the EMU10K1 instance
731  */
732 
733 #ifdef CONFIG_PM
734 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
735 static void free_pm_buffer(struct snd_emu10k1 *emu);
736 #endif
737 
738 static int snd_emu10k1_free(struct snd_emu10k1 *emu)
739 {
740 	if (emu->port) {	/* avoid access to already used hardware */
741 	       	snd_emu10k1_fx8010_tram_setup(emu, 0);
742 		snd_emu10k1_done(emu);
743 		/* remove reserved page */
744 		if (emu->reserved_page) {
745 			snd_emu10k1_synth_free(emu, (struct snd_util_memblk *)emu->reserved_page);
746 			emu->reserved_page = NULL;
747 		}
748 		snd_emu10k1_free_efx(emu);
749        	}
750 	if (emu->memhdr)
751 		snd_util_memhdr_free(emu->memhdr);
752 	if (emu->silent_page.area)
753 		snd_dma_free_pages(&emu->silent_page);
754 	if (emu->ptb_pages.area)
755 		snd_dma_free_pages(&emu->ptb_pages);
756 	vfree(emu->page_ptr_table);
757 	vfree(emu->page_addr_table);
758 #ifdef CONFIG_PM
759 	free_pm_buffer(emu);
760 #endif
761 	if (emu->irq >= 0)
762 		free_irq(emu->irq, (void *)emu);
763 	if (emu->port)
764 		pci_release_regions(emu->pci);
765 	if (emu->card_capabilities->ca0151_chip) /* P16V */
766 		snd_p16v_free(emu);
767 	pci_disable_device(emu->pci);
768 	kfree(emu);
769 	return 0;
770 }
771 
772 static int snd_emu10k1_dev_free(struct snd_device *device)
773 {
774 	struct snd_emu10k1 *emu = device->device_data;
775 	return snd_emu10k1_free(emu);
776 }
777 
778 static struct snd_emu_chip_details emu_chip_details[] = {
779 	/* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/
780 	/* Audigy4 SB0400 */
781 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
782 	 .driver = "Audigy2", .name = "Audigy 4 [SB0400]",
783 	 .id = "Audigy2",
784 	 .emu10k2_chip = 1,
785 	 .ca0108_chip = 1,
786 	 .spk71 = 1,
787 	 .ac97_chip = 1} ,
788 	/* Tested by James@superbug.co.uk 3rd July 2005 */
789 	/* DSP: CA0108-IAT
790 	 * DAC: CS4382-KQ
791 	 * ADC: Philips 1361T
792 	 * AC97: STAC9750
793 	 * CA0151: None
794 	 */
795 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
796 	 .driver = "Audigy2", .name = "Audigy 2 Value [SB0400]",
797 	 .id = "Audigy2",
798 	 .emu10k2_chip = 1,
799 	 .ca0108_chip = 1,
800 	 .spk71 = 1,
801 	 .ac97_chip = 1} ,
802 	/* Audigy 2 ZS Notebook Cardbus card.*/
803 	/* Tested by James@superbug.co.uk 22th December 2005 */
804 	/* Audio output 7.1/Headphones working.
805 	 * Digital output working. (AC3 not checked, only PCM)
806 	 * Audio inputs not tested.
807 	 */
808 	/* DSP: Tiny2
809 	 * DAC: Wolfson WM8768/WM8568
810 	 * ADC: Wolfson WM8775
811 	 * AC97: None
812 	 * CA0151: None
813 	 */
814 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
815 	 .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
816 	 .id = "Audigy2",
817 	 .emu10k2_chip = 1,
818 	 .ca0108_chip = 1,
819 	 .ca_cardbus_chip = 1,
820 	 .spi_dac = 1,
821 	 .spk71 = 1} ,
822 	{.vendor = 0x1102, .device = 0x0008,
823 	 .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]",
824 	 .id = "Audigy2",
825 	 .emu10k2_chip = 1,
826 	 .ca0108_chip = 1,
827 	 .ac97_chip = 1} ,
828 	/* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */
829 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
830 	 .driver = "Audigy2", .name = "E-mu 1212m [4001]",
831 	 .id = "EMU1212m",
832 	 .emu10k2_chip = 1,
833 	 .ca0102_chip = 1,
834 	 .emu1212m = 1} ,
835 	/* Tested by James@superbug.co.uk 3rd July 2005 */
836 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
837 	 .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]",
838 	 .id = "Audigy2",
839 	 .emu10k2_chip = 1,
840 	 .ca0102_chip = 1,
841 	 .ca0151_chip = 1,
842 	 .spk71 = 1,
843 	 .spdif_bug = 1,
844 	 .ac97_chip = 1} ,
845 	/* Tested by shane-alsa@cm.nu 5th Nov 2005 */
846 	/* The 0x20061102 does have SB0350 written on it
847 	 * Just like 0x20021102
848 	 */
849 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102,
850 	 .driver = "Audigy2", .name = "Audigy 2 [SB0350b]",
851 	 .id = "Audigy2",
852 	 .emu10k2_chip = 1,
853 	 .ca0102_chip = 1,
854 	 .ca0151_chip = 1,
855 	 .spk71 = 1,
856 	 .spdif_bug = 1,
857 	 .ac97_chip = 1} ,
858 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102,
859 	 .driver = "Audigy2", .name = "Audigy 2 ZS [SB0350]",
860 	 .id = "Audigy2",
861 	 .emu10k2_chip = 1,
862 	 .ca0102_chip = 1,
863 	 .ca0151_chip = 1,
864 	 .spk71 = 1,
865 	 .spdif_bug = 1,
866 	 .ac97_chip = 1} ,
867 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102,
868 	 .driver = "Audigy2", .name = "Audigy 2 ZS [2001]",
869 	 .id = "Audigy2",
870 	 .emu10k2_chip = 1,
871 	 .ca0102_chip = 1,
872 	 .ca0151_chip = 1,
873 	 .spk71 = 1,
874 	 .spdif_bug = 1,
875 	 .ac97_chip = 1} ,
876 	/* Audigy 2 */
877 	/* Tested by James@superbug.co.uk 3rd July 2005 */
878 	/* DSP: CA0102-IAT
879 	 * DAC: CS4382-KQ
880 	 * ADC: Philips 1361T
881 	 * AC97: STAC9721
882 	 * CA0151: Yes
883 	 */
884 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102,
885 	 .driver = "Audigy2", .name = "Audigy 2 [SB0240]",
886 	 .id = "Audigy2",
887 	 .emu10k2_chip = 1,
888 	 .ca0102_chip = 1,
889 	 .ca0151_chip = 1,
890 	 .spk71 = 1,
891 	 .spdif_bug = 1,
892 	 .ac97_chip = 1} ,
893 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
894 	 .driver = "Audigy2", .name = "Audigy 2 EX [1005]",
895 	 .id = "Audigy2",
896 	 .emu10k2_chip = 1,
897 	 .ca0102_chip = 1,
898 	 .ca0151_chip = 1,
899 	 .spk71 = 1,
900 	 .spdif_bug = 1} ,
901 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
902 	 .driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]",
903 	 .id = "Audigy2",
904 	 .emu10k2_chip = 1,
905 	 .ca0102_chip = 1,
906 	 .ca0151_chip = 1,
907 	 .spk71 = 1,
908 	 .spdif_bug = 1,
909 	 .ac97_chip = 1} ,
910 	{.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
911 	 .driver = "Audigy2", .name = "Audigy 2 [Unknown]",
912 	 .id = "Audigy2",
913 	 .emu10k2_chip = 1,
914 	 .ca0102_chip = 1,
915 	 .ca0151_chip = 1,
916 	 .spdif_bug = 1,
917 	 .ac97_chip = 1} ,
918 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
919 	 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
920 	 .id = "Audigy",
921 	 .emu10k2_chip = 1,
922 	 .ca0102_chip = 1,
923 	 .ac97_chip = 1} ,
924 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
925 	 .driver = "Audigy", .name = "Audigy 1 ES [SB0160]",
926 	 .id = "Audigy",
927 	 .emu10k2_chip = 1,
928 	 .ca0102_chip = 1,
929 	 .spdif_bug = 1,
930 	 .ac97_chip = 1} ,
931 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
932 	 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
933 	 .id = "Audigy",
934 	 .emu10k2_chip = 1,
935 	 .ca0102_chip = 1,
936 	 .ac97_chip = 1} ,
937 	{.vendor = 0x1102, .device = 0x0004,
938 	 .driver = "Audigy", .name = "Audigy 1 [Unknown]",
939 	 .id = "Audigy",
940 	 .emu10k2_chip = 1,
941 	 .ca0102_chip = 1,
942 	 .ac97_chip = 1} ,
943 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806B1102,
944 	 .driver = "EMU10K1", .name = "SBLive! [SB0105]",
945 	 .id = "Live",
946 	 .emu10k1_chip = 1,
947 	 .ac97_chip = 1,
948 	 .sblive51 = 1} ,
949 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806A1102,
950 	 .driver = "EMU10K1", .name = "SBLive! Value [SB0103]",
951 	 .id = "Live",
952 	 .emu10k1_chip = 1,
953 	 .ac97_chip = 1,
954 	 .sblive51 = 1} ,
955 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
956 	 .driver = "EMU10K1", .name = "SBLive! Value [SB0101]",
957 	 .id = "Live",
958 	 .emu10k1_chip = 1,
959 	 .ac97_chip = 1,
960 	 .sblive51 = 1} ,
961 	/* Tested by ALSA bug#1680 26th December 2005 */
962 	/* note: It really has SB0220 written on the card. */
963 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102,
964 	 .driver = "EMU10K1", .name = "SB Live 5.1 Dell OEM [SB0220]",
965 	 .id = "Live",
966 	 .emu10k1_chip = 1,
967 	 .ac97_chip = 1,
968 	 .sblive51 = 1} ,
969 	/* Tested by Thomas Zehetbauer 27th Aug 2005 */
970 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
971 	 .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]",
972 	 .id = "Live",
973 	 .emu10k1_chip = 1,
974 	 .ac97_chip = 1,
975 	 .sblive51 = 1} ,
976 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102,
977 	 .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]",
978 	 .id = "Live",
979 	 .emu10k1_chip = 1,
980 	 .ac97_chip = 1,
981 	 .sblive51 = 1} ,
982 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
983 	 .driver = "EMU10K1", .name = "SB Live 5.1",
984 	 .id = "Live",
985 	 .emu10k1_chip = 1,
986 	 .ac97_chip = 1,
987 	 .sblive51 = 1} ,
988 	/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
989 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
990 	 .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
991 	 .id = "Live",
992 	 .emu10k1_chip = 1,
993 	 .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
994 			  * share the same IDs!
995 			  */
996 	 .sblive51 = 1} ,
997 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
998 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
999 	 .id = "Live",
1000 	 .emu10k1_chip = 1,
1001 	 .ac97_chip = 1,
1002 	 .sblive51 = 1} ,
1003 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
1004 	 .driver = "EMU10K1", .name = "SBLive! Platinum [CT4760P]",
1005 	 .id = "Live",
1006 	 .emu10k1_chip = 1,
1007 	 .ac97_chip = 1} ,
1008 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
1009 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4871]",
1010 	 .id = "Live",
1011 	 .emu10k1_chip = 1,
1012 	 .ac97_chip = 1,
1013 	 .sblive51 = 1} ,
1014 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102,
1015 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4831]",
1016 	 .id = "Live",
1017 	 .emu10k1_chip = 1,
1018 	 .ac97_chip = 1,
1019 	 .sblive51 = 1} ,
1020 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
1021 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4870]",
1022 	 .id = "Live",
1023 	 .emu10k1_chip = 1,
1024 	 .ac97_chip = 1,
1025 	 .sblive51 = 1} ,
1026 	/* Tested by James@superbug.co.uk 3rd July 2005 */
1027 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
1028 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4832]",
1029 	 .id = "Live",
1030 	 .emu10k1_chip = 1,
1031 	 .ac97_chip = 1,
1032 	 .sblive51 = 1} ,
1033 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
1034 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4830]",
1035 	 .id = "Live",
1036 	 .emu10k1_chip = 1,
1037 	 .ac97_chip = 1,
1038 	 .sblive51 = 1} ,
1039 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
1040 	 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]",
1041 	 .id = "Live",
1042 	 .emu10k1_chip = 1,
1043 	 .ac97_chip = 1,
1044 	 .sblive51 = 1} ,
1045 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
1046 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4780]",
1047 	 .id = "Live",
1048 	 .emu10k1_chip = 1,
1049 	 .ac97_chip = 1,
1050 	 .sblive51 = 1} ,
1051 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
1052 	 .driver = "EMU10K1", .name = "E-mu APS [4001]",
1053 	 .id = "APS",
1054 	 .emu10k1_chip = 1,
1055 	 .ecard = 1} ,
1056 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
1057 	 .driver = "EMU10K1", .name = "SBLive! [CT4620]",
1058 	 .id = "Live",
1059 	 .emu10k1_chip = 1,
1060 	 .ac97_chip = 1,
1061 	 .sblive51 = 1} ,
1062 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
1063 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4670]",
1064 	 .id = "Live",
1065 	 .emu10k1_chip = 1,
1066 	 .ac97_chip = 1,
1067 	 .sblive51 = 1} ,
1068 	{.vendor = 0x1102, .device = 0x0002,
1069 	 .driver = "EMU10K1", .name = "SB Live [Unknown]",
1070 	 .id = "Live",
1071 	 .emu10k1_chip = 1,
1072 	 .ac97_chip = 1,
1073 	 .sblive51 = 1} ,
1074 	{ } /* terminator */
1075 };
1076 
1077 int __devinit snd_emu10k1_create(struct snd_card *card,
1078 		       struct pci_dev * pci,
1079 		       unsigned short extin_mask,
1080 		       unsigned short extout_mask,
1081 		       long max_cache_bytes,
1082 		       int enable_ir,
1083 		       uint subsystem,
1084 		       struct snd_emu10k1 ** remu)
1085 {
1086 	struct snd_emu10k1 *emu;
1087 	int idx, err;
1088 	int is_audigy;
1089 	unsigned char revision;
1090 	unsigned int silent_page;
1091 	const struct snd_emu_chip_details *c;
1092 	static struct snd_device_ops ops = {
1093 		.dev_free =	snd_emu10k1_dev_free,
1094 	};
1095 
1096 	*remu = NULL;
1097 
1098 	/* enable PCI device */
1099 	if ((err = pci_enable_device(pci)) < 0)
1100 		return err;
1101 
1102 	emu = kzalloc(sizeof(*emu), GFP_KERNEL);
1103 	if (emu == NULL) {
1104 		pci_disable_device(pci);
1105 		return -ENOMEM;
1106 	}
1107 	emu->card = card;
1108 	spin_lock_init(&emu->reg_lock);
1109 	spin_lock_init(&emu->emu_lock);
1110 	spin_lock_init(&emu->voice_lock);
1111 	spin_lock_init(&emu->synth_lock);
1112 	spin_lock_init(&emu->memblk_lock);
1113 	mutex_init(&emu->fx8010.lock);
1114 	INIT_LIST_HEAD(&emu->mapped_link_head);
1115 	INIT_LIST_HEAD(&emu->mapped_order_link_head);
1116 	emu->pci = pci;
1117 	emu->irq = -1;
1118 	emu->synth = NULL;
1119 	emu->get_synth_voice = NULL;
1120 	/* read revision & serial */
1121 	pci_read_config_byte(pci, PCI_REVISION_ID, &revision);
1122 	emu->revision = revision;
1123 	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1124 	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1125 	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);
1126 
1127 	for (c = emu_chip_details; c->vendor; c++) {
1128 		if (c->vendor == pci->vendor && c->device == pci->device) {
1129 			if (subsystem) {
1130 				if (c->subsystem && (c->subsystem == subsystem) ) {
1131 					break;
1132 				} else continue;
1133 			} else {
1134 				if (c->subsystem && (c->subsystem != emu->serial) )
1135 					continue;
1136 				if (c->revision && c->revision != emu->revision)
1137 					continue;
1138 			}
1139 			break;
1140 		}
1141 	}
1142 	if (c->vendor == 0) {
1143 		snd_printk(KERN_ERR "emu10k1: Card not recognised\n");
1144 		kfree(emu);
1145 		pci_disable_device(pci);
1146 		return -ENOENT;
1147 	}
1148 	emu->card_capabilities = c;
1149 	if (c->subsystem && !subsystem)
1150 		snd_printdd("Sound card name=%s\n", c->name);
1151 	else if (subsystem)
1152 		snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x. Forced to subsytem=0x%x\n",
1153 		       	c->name, pci->vendor, pci->device, emu->serial, c->subsystem);
1154 	else
1155 		snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x.\n",
1156 		      	c->name, pci->vendor, pci->device, emu->serial);
1157 
1158 	if (!*card->id && c->id) {
1159 		int i, n = 0;
1160 		strlcpy(card->id, c->id, sizeof(card->id));
1161 		for (;;) {
1162 			for (i = 0; i < snd_ecards_limit; i++) {
1163 				if (snd_cards[i] && !strcmp(snd_cards[i]->id, card->id))
1164 					break;
1165 			}
1166 			if (i >= snd_ecards_limit)
1167 				break;
1168 			n++;
1169 			if (n >= SNDRV_CARDS)
1170 				break;
1171 			snprintf(card->id, sizeof(card->id), "%s_%d", c->id, n);
1172 		}
1173 	}
1174 
1175 	is_audigy = emu->audigy = c->emu10k2_chip;
1176 
1177 	/* set the DMA transfer mask */
1178 	emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK;
1179 	if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
1180 	    pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
1181 		snd_printk(KERN_ERR "architecture does not support PCI busmaster DMA with mask 0x%lx\n", emu->dma_mask);
1182 		kfree(emu);
1183 		pci_disable_device(pci);
1184 		return -ENXIO;
1185 	}
1186 	if (is_audigy)
1187 		emu->gpr_base = A_FXGPREGBASE;
1188 	else
1189 		emu->gpr_base = FXGPREGBASE;
1190 
1191 	if ((err = pci_request_regions(pci, "EMU10K1")) < 0) {
1192 		kfree(emu);
1193 		pci_disable_device(pci);
1194 		return err;
1195 	}
1196 	emu->port = pci_resource_start(pci, 0);
1197 
1198 	if (request_irq(pci->irq, snd_emu10k1_interrupt, SA_INTERRUPT|SA_SHIRQ, "EMU10K1", (void *)emu)) {
1199 		err = -EBUSY;
1200 		goto error;
1201 	}
1202 	emu->irq = pci->irq;
1203 
1204 	emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1205 	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1206 				32 * 1024, &emu->ptb_pages) < 0) {
1207 		err = -ENOMEM;
1208 		goto error;
1209 	}
1210 
1211 	emu->page_ptr_table = (void **)vmalloc(emu->max_cache_pages * sizeof(void*));
1212 	emu->page_addr_table = (unsigned long*)vmalloc(emu->max_cache_pages * sizeof(unsigned long));
1213 	if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) {
1214 		err = -ENOMEM;
1215 		goto error;
1216 	}
1217 
1218 	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1219 				EMUPAGESIZE, &emu->silent_page) < 0) {
1220 		err = -ENOMEM;
1221 		goto error;
1222 	}
1223 	emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1224 	if (emu->memhdr == NULL) {
1225 		err = -ENOMEM;
1226 		goto error;
1227 	}
1228 	emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1229 		sizeof(struct snd_util_memblk);
1230 
1231 	pci_set_master(pci);
1232 
1233 	emu->fx8010.fxbus_mask = 0x303f;
1234 	if (extin_mask == 0)
1235 		extin_mask = 0x3fcf;
1236 	if (extout_mask == 0)
1237 		extout_mask = 0x7fff;
1238 	emu->fx8010.extin_mask = extin_mask;
1239 	emu->fx8010.extout_mask = extout_mask;
1240 	emu->enable_ir = enable_ir;
1241 
1242 	if (emu->card_capabilities->ecard) {
1243 		if ((err = snd_emu10k1_ecard_init(emu)) < 0)
1244 			goto error;
1245 	} else if (emu->card_capabilities->ca_cardbus_chip) {
1246 		if ((err = snd_emu10k1_cardbus_init(emu)) < 0)
1247 			goto error;
1248  	} else if (emu->card_capabilities->emu1212m) {
1249  		if ((err = snd_emu10k1_emu1212m_init(emu)) < 0) {
1250  			snd_emu10k1_free(emu);
1251  			return err;
1252  		}
1253 	} else {
1254 		/* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
1255 			does not support this, it shouldn't do any harm */
1256 		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1257 	}
1258 
1259 	/* initialize TRAM setup */
1260 	emu->fx8010.itram_size = (16 * 1024)/2;
1261 	emu->fx8010.etram_pages.area = NULL;
1262 	emu->fx8010.etram_pages.bytes = 0;
1263 
1264 	/*
1265 	 *  Init to 0x02109204 :
1266 	 *  Clock accuracy    = 0     (1000ppm)
1267 	 *  Sample Rate       = 2     (48kHz)
1268 	 *  Audio Channel     = 1     (Left of 2)
1269 	 *  Source Number     = 0     (Unspecified)
1270 	 *  Generation Status = 1     (Original for Cat Code 12)
1271 	 *  Cat Code          = 12    (Digital Signal Mixer)
1272 	 *  Mode              = 0     (Mode 0)
1273 	 *  Emphasis          = 0     (None)
1274 	 *  CP                = 1     (Copyright unasserted)
1275 	 *  AN                = 0     (Audio data)
1276 	 *  P                 = 0     (Consumer)
1277 	 */
1278 	emu->spdif_bits[0] = emu->spdif_bits[1] =
1279 		emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1280 		SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
1281 		SPCS_GENERATIONSTATUS | 0x00001200 |
1282 		0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
1283 
1284 	emu->reserved_page = (struct snd_emu10k1_memblk *)
1285 		snd_emu10k1_synth_alloc(emu, 4096);
1286 	if (emu->reserved_page)
1287 		emu->reserved_page->map_locked = 1;
1288 
1289 	/* Clear silent pages and set up pointers */
1290 	memset(emu->silent_page.area, 0, PAGE_SIZE);
1291 	silent_page = emu->silent_page.addr << 1;
1292 	for (idx = 0; idx < MAXPAGES; idx++)
1293 		((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
1294 
1295 	/* set up voice indices */
1296 	for (idx = 0; idx < NUM_G; idx++) {
1297 		emu->voices[idx].emu = emu;
1298 		emu->voices[idx].number = idx;
1299 	}
1300 
1301 	if ((err = snd_emu10k1_init(emu, enable_ir, 0)) < 0)
1302 		goto error;
1303 #ifdef CONFIG_PM
1304 	if ((err = alloc_pm_buffer(emu)) < 0)
1305 		goto error;
1306 #endif
1307 
1308 	/*  Initialize the effect engine */
1309 	if ((err = snd_emu10k1_init_efx(emu)) < 0)
1310 		goto error;
1311 	snd_emu10k1_audio_enable(emu);
1312 
1313 	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops)) < 0)
1314 		goto error;
1315 
1316 #ifdef CONFIG_PROC_FS
1317 	snd_emu10k1_proc_init(emu);
1318 #endif
1319 
1320 	snd_card_set_dev(card, &pci->dev);
1321 	*remu = emu;
1322 	return 0;
1323 
1324  error:
1325 	snd_emu10k1_free(emu);
1326 	return err;
1327 }
1328 
1329 #ifdef CONFIG_PM
1330 static unsigned char saved_regs[] = {
1331 	CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP,
1332 	FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL,
1333 	ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2,
1334 	TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA,
1335 	MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2,
1336 	SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX,
1337 	0xff /* end */
1338 };
1339 static unsigned char saved_regs_audigy[] = {
1340 	A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_SAMPLE_RATE,
1341 	A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
1342 	0xff /* end */
1343 };
1344 
1345 static int __devinit alloc_pm_buffer(struct snd_emu10k1 *emu)
1346 {
1347 	int size;
1348 
1349 	size = ARRAY_SIZE(saved_regs);
1350 	if (emu->audigy)
1351 		size += ARRAY_SIZE(saved_regs_audigy);
1352 	emu->saved_ptr = vmalloc(4 * NUM_G * size);
1353 	if (! emu->saved_ptr)
1354 		return -ENOMEM;
1355 	if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1356 		return -ENOMEM;
1357 	if (emu->card_capabilities->ca0151_chip &&
1358 	    snd_p16v_alloc_pm_buffer(emu) < 0)
1359 		return -ENOMEM;
1360 	return 0;
1361 }
1362 
1363 static void free_pm_buffer(struct snd_emu10k1 *emu)
1364 {
1365 	vfree(emu->saved_ptr);
1366 	snd_emu10k1_efx_free_pm_buffer(emu);
1367 	if (emu->card_capabilities->ca0151_chip)
1368 		snd_p16v_free_pm_buffer(emu);
1369 }
1370 
1371 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1372 {
1373 	int i;
1374 	unsigned char *reg;
1375 	unsigned int *val;
1376 
1377 	val = emu->saved_ptr;
1378 	for (reg = saved_regs; *reg != 0xff; reg++)
1379 		for (i = 0; i < NUM_G; i++, val++)
1380 			*val = snd_emu10k1_ptr_read(emu, *reg, i);
1381 	if (emu->audigy) {
1382 		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1383 			for (i = 0; i < NUM_G; i++, val++)
1384 				*val = snd_emu10k1_ptr_read(emu, *reg, i);
1385 	}
1386 	if (emu->audigy)
1387 		emu->saved_a_iocfg = inl(emu->port + A_IOCFG);
1388 	emu->saved_hcfg = inl(emu->port + HCFG);
1389 }
1390 
1391 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1392 {
1393 	if (emu->card_capabilities->ecard)
1394 		snd_emu10k1_ecard_init(emu);
1395 	else
1396 		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1397 	snd_emu10k1_init(emu, emu->enable_ir, 1);
1398 }
1399 
1400 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1401 {
1402 	int i;
1403 	unsigned char *reg;
1404 	unsigned int *val;
1405 
1406 	snd_emu10k1_audio_enable(emu);
1407 
1408 	/* resore for spdif */
1409 	if (emu->audigy)
1410 		outl(emu->port + A_IOCFG, emu->saved_a_iocfg);
1411 	outl(emu->port + HCFG, emu->saved_hcfg);
1412 
1413 	val = emu->saved_ptr;
1414 	for (reg = saved_regs; *reg != 0xff; reg++)
1415 		for (i = 0; i < NUM_G; i++, val++)
1416 			snd_emu10k1_ptr_write(emu, *reg, i, *val);
1417 	if (emu->audigy) {
1418 		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1419 			for (i = 0; i < NUM_G; i++, val++)
1420 				snd_emu10k1_ptr_write(emu, *reg, i, *val);
1421 	}
1422 }
1423 #endif
1424 
1425 /* memory.c */
1426 EXPORT_SYMBOL(snd_emu10k1_synth_alloc);
1427 EXPORT_SYMBOL(snd_emu10k1_synth_free);
1428 EXPORT_SYMBOL(snd_emu10k1_synth_bzero);
1429 EXPORT_SYMBOL(snd_emu10k1_synth_copy_from_user);
1430 EXPORT_SYMBOL(snd_emu10k1_memblk_map);
1431 /* voice.c */
1432 EXPORT_SYMBOL(snd_emu10k1_voice_alloc);
1433 EXPORT_SYMBOL(snd_emu10k1_voice_free);
1434 /* io.c */
1435 EXPORT_SYMBOL(snd_emu10k1_ptr_read);
1436 EXPORT_SYMBOL(snd_emu10k1_ptr_write);
1437