xref: /linux/sound/pci/emu10k1/emu10k1_main.c (revision d932cb7e630cae3b6b5307b767d296ff1a597c5e)
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 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 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 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 	/* Tested by James@superbug.co.uk 3rd July 2005 */
781 	/* DSP: CA0108-IAT
782 	 * DAC: CS4382-KQ
783 	 * ADC: Philips 1361T
784 	 * AC97: STAC9750
785 	 * CA0151: None
786 	 */
787 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
788 	 .driver = "Audigy2", .name = "Audigy 2 Value [SB0400]",
789 	 .id = "Audigy2",
790 	 .emu10k2_chip = 1,
791 	 .ca0108_chip = 1,
792 	 .spk71 = 1,
793 	 .ac97_chip = 1} ,
794 	/* Audigy4 (Not PRO) SB0610 */
795 	/* Tested by James@superbug.co.uk 4th April 2006 */
796 	/* A_IOCFG bits
797 	 * Output
798 	 * 0: ?
799 	 * 1: ?
800 	 * 2: ?
801 	 * 3: 0 - Digital Out, 1 - Line in
802 	 * 4: ?
803 	 * 5: ?
804 	 * 6: ?
805 	 * 7: ?
806 	 * Input
807 	 * 8: ?
808 	 * 9: ?
809 	 * A: Green jack sense (Front)
810 	 * B: ?
811 	 * C: Black jack sense (Rear/Side Right)
812 	 * D: Yellow jack sense (Center/LFE/Side Left)
813 	 * E: ?
814 	 * F: ?
815 	 *
816 	 * Digital Out/Line in switch using A_IOCFG bit 3 (0x08)
817 	 * 0 - Digital Out
818 	 * 1 - Line in
819 	 */
820 	/* Mic input not tested.
821 	 * Analog CD input not tested
822 	 * Digital Out not tested.
823 	 * Line in working.
824 	 * Audio output 5.1 working. Side outputs not working.
825 	 */
826 	/* DSP: CA10300-IAT LF
827 	 * DAC: Cirrus Logic CS4382-KQZ
828 	 * ADC: Philips 1361T
829 	 * AC97: Sigmatel STAC9750
830 	 * CA0151: None
831 	 */
832 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
833 	 .driver = "Audigy2", .name = "Audigy 4 [SB0610]",
834 	 .id = "Audigy2",
835 	 .emu10k2_chip = 1,
836 	 .ca0108_chip = 1,
837 	 .spk71 = 1,
838 	 .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
839 	 .ac97_chip = 1} ,
840 	/* Audigy 2 ZS Notebook Cardbus card.*/
841 	/* Tested by James@superbug.co.uk 22th December 2005 */
842 	/* Audio output 7.1/Headphones working.
843 	 * Digital output working. (AC3 not checked, only PCM)
844 	 * Audio inputs not tested.
845 	 */
846 	/* DSP: Tina2
847 	 * DAC: Wolfson WM8768/WM8568
848 	 * ADC: Wolfson WM8775
849 	 * AC97: None
850 	 * CA0151: None
851 	 */
852 	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
853 	 .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
854 	 .id = "Audigy2",
855 	 .emu10k2_chip = 1,
856 	 .ca0108_chip = 1,
857 	 .ca_cardbus_chip = 1,
858 	 .spi_dac = 1,
859 	 .spk71 = 1} ,
860 	{.vendor = 0x1102, .device = 0x0008,
861 	 .driver = "Audigy2", .name = "Audigy 2 Value [Unknown]",
862 	 .id = "Audigy2",
863 	 .emu10k2_chip = 1,
864 	 .ca0108_chip = 1,
865 	 .ac97_chip = 1} ,
866 	/* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */
867 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
868 	 .driver = "Audigy2", .name = "E-mu 1212m [4001]",
869 	 .id = "EMU1212m",
870 	 .emu10k2_chip = 1,
871 	 .ca0102_chip = 1,
872 	 .emu1212m = 1} ,
873 	/* Tested by James@superbug.co.uk 3rd July 2005 */
874 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
875 	 .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]",
876 	 .id = "Audigy2",
877 	 .emu10k2_chip = 1,
878 	 .ca0102_chip = 1,
879 	 .ca0151_chip = 1,
880 	 .spk71 = 1,
881 	 .spdif_bug = 1,
882 	 .ac97_chip = 1} ,
883 	/* Tested by shane-alsa@cm.nu 5th Nov 2005 */
884 	/* The 0x20061102 does have SB0350 written on it
885 	 * Just like 0x20021102
886 	 */
887 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102,
888 	 .driver = "Audigy2", .name = "Audigy 2 [SB0350b]",
889 	 .id = "Audigy2",
890 	 .emu10k2_chip = 1,
891 	 .ca0102_chip = 1,
892 	 .ca0151_chip = 1,
893 	 .spk71 = 1,
894 	 .spdif_bug = 1,
895 	 .ac97_chip = 1} ,
896 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102,
897 	 .driver = "Audigy2", .name = "Audigy 2 ZS [SB0350]",
898 	 .id = "Audigy2",
899 	 .emu10k2_chip = 1,
900 	 .ca0102_chip = 1,
901 	 .ca0151_chip = 1,
902 	 .spk71 = 1,
903 	 .spdif_bug = 1,
904 	 .ac97_chip = 1} ,
905 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102,
906 	 .driver = "Audigy2", .name = "Audigy 2 ZS [2001]",
907 	 .id = "Audigy2",
908 	 .emu10k2_chip = 1,
909 	 .ca0102_chip = 1,
910 	 .ca0151_chip = 1,
911 	 .spk71 = 1,
912 	 .spdif_bug = 1,
913 	 .ac97_chip = 1} ,
914 	/* Audigy 2 */
915 	/* Tested by James@superbug.co.uk 3rd July 2005 */
916 	/* DSP: CA0102-IAT
917 	 * DAC: CS4382-KQ
918 	 * ADC: Philips 1361T
919 	 * AC97: STAC9721
920 	 * CA0151: Yes
921 	 */
922 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102,
923 	 .driver = "Audigy2", .name = "Audigy 2 [SB0240]",
924 	 .id = "Audigy2",
925 	 .emu10k2_chip = 1,
926 	 .ca0102_chip = 1,
927 	 .ca0151_chip = 1,
928 	 .spk71 = 1,
929 	 .spdif_bug = 1,
930 	 .ac97_chip = 1} ,
931 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
932 	 .driver = "Audigy2", .name = "Audigy 2 EX [1005]",
933 	 .id = "Audigy2",
934 	 .emu10k2_chip = 1,
935 	 .ca0102_chip = 1,
936 	 .ca0151_chip = 1,
937 	 .spk71 = 1,
938 	 .spdif_bug = 1} ,
939 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
940 	 .driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]",
941 	 .id = "Audigy2",
942 	 .emu10k2_chip = 1,
943 	 .ca0102_chip = 1,
944 	 .ca0151_chip = 1,
945 	 .spk71 = 1,
946 	 .spdif_bug = 1,
947 	 .ac97_chip = 1} ,
948 	{.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
949 	 .driver = "Audigy2", .name = "Audigy 2 [Unknown]",
950 	 .id = "Audigy2",
951 	 .emu10k2_chip = 1,
952 	 .ca0102_chip = 1,
953 	 .ca0151_chip = 1,
954 	 .spdif_bug = 1,
955 	 .ac97_chip = 1} ,
956 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
957 	 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
958 	 .id = "Audigy",
959 	 .emu10k2_chip = 1,
960 	 .ca0102_chip = 1,
961 	 .ac97_chip = 1} ,
962 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
963 	 .driver = "Audigy", .name = "Audigy 1 ES [SB0160]",
964 	 .id = "Audigy",
965 	 .emu10k2_chip = 1,
966 	 .ca0102_chip = 1,
967 	 .spdif_bug = 1,
968 	 .ac97_chip = 1} ,
969 	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
970 	 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
971 	 .id = "Audigy",
972 	 .emu10k2_chip = 1,
973 	 .ca0102_chip = 1,
974 	 .ac97_chip = 1} ,
975 	{.vendor = 0x1102, .device = 0x0004,
976 	 .driver = "Audigy", .name = "Audigy 1 [Unknown]",
977 	 .id = "Audigy",
978 	 .emu10k2_chip = 1,
979 	 .ca0102_chip = 1,
980 	 .ac97_chip = 1} ,
981 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806B1102,
982 	 .driver = "EMU10K1", .name = "SBLive! [SB0105]",
983 	 .id = "Live",
984 	 .emu10k1_chip = 1,
985 	 .ac97_chip = 1,
986 	 .sblive51 = 1} ,
987 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806A1102,
988 	 .driver = "EMU10K1", .name = "SBLive! Value [SB0103]",
989 	 .id = "Live",
990 	 .emu10k1_chip = 1,
991 	 .ac97_chip = 1,
992 	 .sblive51 = 1} ,
993 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
994 	 .driver = "EMU10K1", .name = "SBLive! Value [SB0101]",
995 	 .id = "Live",
996 	 .emu10k1_chip = 1,
997 	 .ac97_chip = 1,
998 	 .sblive51 = 1} ,
999 	/* Tested by ALSA bug#1680 26th December 2005 */
1000 	/* note: It really has SB0220 written on the card. */
1001 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102,
1002 	 .driver = "EMU10K1", .name = "SB Live 5.1 Dell OEM [SB0220]",
1003 	 .id = "Live",
1004 	 .emu10k1_chip = 1,
1005 	 .ac97_chip = 1,
1006 	 .sblive51 = 1} ,
1007 	/* Tested by Thomas Zehetbauer 27th Aug 2005 */
1008 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
1009 	 .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]",
1010 	 .id = "Live",
1011 	 .emu10k1_chip = 1,
1012 	 .ac97_chip = 1,
1013 	 .sblive51 = 1} ,
1014 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102,
1015 	 .driver = "EMU10K1", .name = "SB Live 5.1 [SB0220]",
1016 	 .id = "Live",
1017 	 .emu10k1_chip = 1,
1018 	 .ac97_chip = 1,
1019 	 .sblive51 = 1} ,
1020 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
1021 	 .driver = "EMU10K1", .name = "SB Live 5.1",
1022 	 .id = "Live",
1023 	 .emu10k1_chip = 1,
1024 	 .ac97_chip = 1,
1025 	 .sblive51 = 1} ,
1026 	/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
1027 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
1028 	 .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
1029 	 .id = "Live",
1030 	 .emu10k1_chip = 1,
1031 	 .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
1032 			  * share the same IDs!
1033 			  */
1034 	 .sblive51 = 1} ,
1035 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
1036 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
1037 	 .id = "Live",
1038 	 .emu10k1_chip = 1,
1039 	 .ac97_chip = 1,
1040 	 .sblive51 = 1} ,
1041 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
1042 	 .driver = "EMU10K1", .name = "SBLive! Platinum [CT4760P]",
1043 	 .id = "Live",
1044 	 .emu10k1_chip = 1,
1045 	 .ac97_chip = 1} ,
1046 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
1047 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4871]",
1048 	 .id = "Live",
1049 	 .emu10k1_chip = 1,
1050 	 .ac97_chip = 1,
1051 	 .sblive51 = 1} ,
1052 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102,
1053 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4831]",
1054 	 .id = "Live",
1055 	 .emu10k1_chip = 1,
1056 	 .ac97_chip = 1,
1057 	 .sblive51 = 1} ,
1058 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
1059 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4870]",
1060 	 .id = "Live",
1061 	 .emu10k1_chip = 1,
1062 	 .ac97_chip = 1,
1063 	 .sblive51 = 1} ,
1064 	/* Tested by James@superbug.co.uk 3rd July 2005 */
1065 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
1066 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4832]",
1067 	 .id = "Live",
1068 	 .emu10k1_chip = 1,
1069 	 .ac97_chip = 1,
1070 	 .sblive51 = 1} ,
1071 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
1072 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4830]",
1073 	 .id = "Live",
1074 	 .emu10k1_chip = 1,
1075 	 .ac97_chip = 1,
1076 	 .sblive51 = 1} ,
1077 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
1078 	 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]",
1079 	 .id = "Live",
1080 	 .emu10k1_chip = 1,
1081 	 .ac97_chip = 1,
1082 	 .sblive51 = 1} ,
1083 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
1084 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4780]",
1085 	 .id = "Live",
1086 	 .emu10k1_chip = 1,
1087 	 .ac97_chip = 1,
1088 	 .sblive51 = 1} ,
1089 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
1090 	 .driver = "EMU10K1", .name = "E-mu APS [4001]",
1091 	 .id = "APS",
1092 	 .emu10k1_chip = 1,
1093 	 .ecard = 1} ,
1094 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
1095 	 .driver = "EMU10K1", .name = "SBLive! [CT4620]",
1096 	 .id = "Live",
1097 	 .emu10k1_chip = 1,
1098 	 .ac97_chip = 1,
1099 	 .sblive51 = 1} ,
1100 	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
1101 	 .driver = "EMU10K1", .name = "SBLive! Value [CT4670]",
1102 	 .id = "Live",
1103 	 .emu10k1_chip = 1,
1104 	 .ac97_chip = 1,
1105 	 .sblive51 = 1} ,
1106 	{.vendor = 0x1102, .device = 0x0002,
1107 	 .driver = "EMU10K1", .name = "SB Live [Unknown]",
1108 	 .id = "Live",
1109 	 .emu10k1_chip = 1,
1110 	 .ac97_chip = 1,
1111 	 .sblive51 = 1} ,
1112 	{ } /* terminator */
1113 };
1114 
1115 int __devinit snd_emu10k1_create(struct snd_card *card,
1116 		       struct pci_dev * pci,
1117 		       unsigned short extin_mask,
1118 		       unsigned short extout_mask,
1119 		       long max_cache_bytes,
1120 		       int enable_ir,
1121 		       uint subsystem,
1122 		       struct snd_emu10k1 ** remu)
1123 {
1124 	struct snd_emu10k1 *emu;
1125 	int idx, err;
1126 	int is_audigy;
1127 	unsigned char revision;
1128 	unsigned int silent_page;
1129 	const struct snd_emu_chip_details *c;
1130 	static struct snd_device_ops ops = {
1131 		.dev_free =	snd_emu10k1_dev_free,
1132 	};
1133 
1134 	*remu = NULL;
1135 
1136 	/* enable PCI device */
1137 	if ((err = pci_enable_device(pci)) < 0)
1138 		return err;
1139 
1140 	emu = kzalloc(sizeof(*emu), GFP_KERNEL);
1141 	if (emu == NULL) {
1142 		pci_disable_device(pci);
1143 		return -ENOMEM;
1144 	}
1145 	emu->card = card;
1146 	spin_lock_init(&emu->reg_lock);
1147 	spin_lock_init(&emu->emu_lock);
1148 	spin_lock_init(&emu->voice_lock);
1149 	spin_lock_init(&emu->synth_lock);
1150 	spin_lock_init(&emu->memblk_lock);
1151 	mutex_init(&emu->fx8010.lock);
1152 	INIT_LIST_HEAD(&emu->mapped_link_head);
1153 	INIT_LIST_HEAD(&emu->mapped_order_link_head);
1154 	emu->pci = pci;
1155 	emu->irq = -1;
1156 	emu->synth = NULL;
1157 	emu->get_synth_voice = NULL;
1158 	/* read revision & serial */
1159 	pci_read_config_byte(pci, PCI_REVISION_ID, &revision);
1160 	emu->revision = revision;
1161 	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1162 	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1163 	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);
1164 
1165 	for (c = emu_chip_details; c->vendor; c++) {
1166 		if (c->vendor == pci->vendor && c->device == pci->device) {
1167 			if (subsystem) {
1168 				if (c->subsystem && (c->subsystem == subsystem) ) {
1169 					break;
1170 				} else continue;
1171 			} else {
1172 				if (c->subsystem && (c->subsystem != emu->serial) )
1173 					continue;
1174 				if (c->revision && c->revision != emu->revision)
1175 					continue;
1176 			}
1177 			break;
1178 		}
1179 	}
1180 	if (c->vendor == 0) {
1181 		snd_printk(KERN_ERR "emu10k1: Card not recognised\n");
1182 		kfree(emu);
1183 		pci_disable_device(pci);
1184 		return -ENOENT;
1185 	}
1186 	emu->card_capabilities = c;
1187 	if (c->subsystem && !subsystem)
1188 		snd_printdd("Sound card name=%s\n", c->name);
1189 	else if (subsystem)
1190 		snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x. Forced to subsytem=0x%x\n",
1191 		       	c->name, pci->vendor, pci->device, emu->serial, c->subsystem);
1192 	else
1193 		snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x.\n",
1194 		      	c->name, pci->vendor, pci->device, emu->serial);
1195 
1196 	if (!*card->id && c->id) {
1197 		int i, n = 0;
1198 		strlcpy(card->id, c->id, sizeof(card->id));
1199 		for (;;) {
1200 			for (i = 0; i < snd_ecards_limit; i++) {
1201 				if (snd_cards[i] && !strcmp(snd_cards[i]->id, card->id))
1202 					break;
1203 			}
1204 			if (i >= snd_ecards_limit)
1205 				break;
1206 			n++;
1207 			if (n >= SNDRV_CARDS)
1208 				break;
1209 			snprintf(card->id, sizeof(card->id), "%s_%d", c->id, n);
1210 		}
1211 	}
1212 
1213 	is_audigy = emu->audigy = c->emu10k2_chip;
1214 
1215 	/* set the DMA transfer mask */
1216 	emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK;
1217 	if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
1218 	    pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
1219 		snd_printk(KERN_ERR "architecture does not support PCI busmaster DMA with mask 0x%lx\n", emu->dma_mask);
1220 		kfree(emu);
1221 		pci_disable_device(pci);
1222 		return -ENXIO;
1223 	}
1224 	if (is_audigy)
1225 		emu->gpr_base = A_FXGPREGBASE;
1226 	else
1227 		emu->gpr_base = FXGPREGBASE;
1228 
1229 	if ((err = pci_request_regions(pci, "EMU10K1")) < 0) {
1230 		kfree(emu);
1231 		pci_disable_device(pci);
1232 		return err;
1233 	}
1234 	emu->port = pci_resource_start(pci, 0);
1235 
1236 	if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_DISABLED|IRQF_SHARED, "EMU10K1", (void *)emu)) {
1237 		err = -EBUSY;
1238 		goto error;
1239 	}
1240 	emu->irq = pci->irq;
1241 
1242 	emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1243 	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1244 				32 * 1024, &emu->ptb_pages) < 0) {
1245 		err = -ENOMEM;
1246 		goto error;
1247 	}
1248 
1249 	emu->page_ptr_table = (void **)vmalloc(emu->max_cache_pages * sizeof(void*));
1250 	emu->page_addr_table = (unsigned long*)vmalloc(emu->max_cache_pages * sizeof(unsigned long));
1251 	if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) {
1252 		err = -ENOMEM;
1253 		goto error;
1254 	}
1255 
1256 	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
1257 				EMUPAGESIZE, &emu->silent_page) < 0) {
1258 		err = -ENOMEM;
1259 		goto error;
1260 	}
1261 	emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1262 	if (emu->memhdr == NULL) {
1263 		err = -ENOMEM;
1264 		goto error;
1265 	}
1266 	emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1267 		sizeof(struct snd_util_memblk);
1268 
1269 	pci_set_master(pci);
1270 
1271 	emu->fx8010.fxbus_mask = 0x303f;
1272 	if (extin_mask == 0)
1273 		extin_mask = 0x3fcf;
1274 	if (extout_mask == 0)
1275 		extout_mask = 0x7fff;
1276 	emu->fx8010.extin_mask = extin_mask;
1277 	emu->fx8010.extout_mask = extout_mask;
1278 	emu->enable_ir = enable_ir;
1279 
1280 	if (emu->card_capabilities->ecard) {
1281 		if ((err = snd_emu10k1_ecard_init(emu)) < 0)
1282 			goto error;
1283 	} else if (emu->card_capabilities->ca_cardbus_chip) {
1284 		if ((err = snd_emu10k1_cardbus_init(emu)) < 0)
1285 			goto error;
1286  	} else if (emu->card_capabilities->emu1212m) {
1287  		if ((err = snd_emu10k1_emu1212m_init(emu)) < 0) {
1288  			snd_emu10k1_free(emu);
1289  			return err;
1290  		}
1291 	} else {
1292 		/* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
1293 			does not support this, it shouldn't do any harm */
1294 		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1295 	}
1296 
1297 	/* initialize TRAM setup */
1298 	emu->fx8010.itram_size = (16 * 1024)/2;
1299 	emu->fx8010.etram_pages.area = NULL;
1300 	emu->fx8010.etram_pages.bytes = 0;
1301 
1302 	/*
1303 	 *  Init to 0x02109204 :
1304 	 *  Clock accuracy    = 0     (1000ppm)
1305 	 *  Sample Rate       = 2     (48kHz)
1306 	 *  Audio Channel     = 1     (Left of 2)
1307 	 *  Source Number     = 0     (Unspecified)
1308 	 *  Generation Status = 1     (Original for Cat Code 12)
1309 	 *  Cat Code          = 12    (Digital Signal Mixer)
1310 	 *  Mode              = 0     (Mode 0)
1311 	 *  Emphasis          = 0     (None)
1312 	 *  CP                = 1     (Copyright unasserted)
1313 	 *  AN                = 0     (Audio data)
1314 	 *  P                 = 0     (Consumer)
1315 	 */
1316 	emu->spdif_bits[0] = emu->spdif_bits[1] =
1317 		emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1318 		SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
1319 		SPCS_GENERATIONSTATUS | 0x00001200 |
1320 		0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
1321 
1322 	emu->reserved_page = (struct snd_emu10k1_memblk *)
1323 		snd_emu10k1_synth_alloc(emu, 4096);
1324 	if (emu->reserved_page)
1325 		emu->reserved_page->map_locked = 1;
1326 
1327 	/* Clear silent pages and set up pointers */
1328 	memset(emu->silent_page.area, 0, PAGE_SIZE);
1329 	silent_page = emu->silent_page.addr << 1;
1330 	for (idx = 0; idx < MAXPAGES; idx++)
1331 		((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
1332 
1333 	/* set up voice indices */
1334 	for (idx = 0; idx < NUM_G; idx++) {
1335 		emu->voices[idx].emu = emu;
1336 		emu->voices[idx].number = idx;
1337 	}
1338 
1339 	if ((err = snd_emu10k1_init(emu, enable_ir, 0)) < 0)
1340 		goto error;
1341 #ifdef CONFIG_PM
1342 	if ((err = alloc_pm_buffer(emu)) < 0)
1343 		goto error;
1344 #endif
1345 
1346 	/*  Initialize the effect engine */
1347 	if ((err = snd_emu10k1_init_efx(emu)) < 0)
1348 		goto error;
1349 	snd_emu10k1_audio_enable(emu);
1350 
1351 	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops)) < 0)
1352 		goto error;
1353 
1354 #ifdef CONFIG_PROC_FS
1355 	snd_emu10k1_proc_init(emu);
1356 #endif
1357 
1358 	snd_card_set_dev(card, &pci->dev);
1359 	*remu = emu;
1360 	return 0;
1361 
1362  error:
1363 	snd_emu10k1_free(emu);
1364 	return err;
1365 }
1366 
1367 #ifdef CONFIG_PM
1368 static unsigned char saved_regs[] = {
1369 	CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP,
1370 	FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL,
1371 	ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2,
1372 	TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA,
1373 	MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2,
1374 	SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX,
1375 	0xff /* end */
1376 };
1377 static unsigned char saved_regs_audigy[] = {
1378 	A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_SAMPLE_RATE,
1379 	A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
1380 	0xff /* end */
1381 };
1382 
1383 static int __devinit alloc_pm_buffer(struct snd_emu10k1 *emu)
1384 {
1385 	int size;
1386 
1387 	size = ARRAY_SIZE(saved_regs);
1388 	if (emu->audigy)
1389 		size += ARRAY_SIZE(saved_regs_audigy);
1390 	emu->saved_ptr = vmalloc(4 * NUM_G * size);
1391 	if (! emu->saved_ptr)
1392 		return -ENOMEM;
1393 	if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1394 		return -ENOMEM;
1395 	if (emu->card_capabilities->ca0151_chip &&
1396 	    snd_p16v_alloc_pm_buffer(emu) < 0)
1397 		return -ENOMEM;
1398 	return 0;
1399 }
1400 
1401 static void free_pm_buffer(struct snd_emu10k1 *emu)
1402 {
1403 	vfree(emu->saved_ptr);
1404 	snd_emu10k1_efx_free_pm_buffer(emu);
1405 	if (emu->card_capabilities->ca0151_chip)
1406 		snd_p16v_free_pm_buffer(emu);
1407 }
1408 
1409 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1410 {
1411 	int i;
1412 	unsigned char *reg;
1413 	unsigned int *val;
1414 
1415 	val = emu->saved_ptr;
1416 	for (reg = saved_regs; *reg != 0xff; reg++)
1417 		for (i = 0; i < NUM_G; i++, val++)
1418 			*val = snd_emu10k1_ptr_read(emu, *reg, i);
1419 	if (emu->audigy) {
1420 		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1421 			for (i = 0; i < NUM_G; i++, val++)
1422 				*val = snd_emu10k1_ptr_read(emu, *reg, i);
1423 	}
1424 	if (emu->audigy)
1425 		emu->saved_a_iocfg = inl(emu->port + A_IOCFG);
1426 	emu->saved_hcfg = inl(emu->port + HCFG);
1427 }
1428 
1429 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1430 {
1431 	if (emu->card_capabilities->ecard)
1432 		snd_emu10k1_ecard_init(emu);
1433 	else if (emu->card_capabilities->ca_cardbus_chip)
1434 		snd_emu10k1_cardbus_init(emu);
1435 	else if (emu->card_capabilities->emu1212m)
1436  		snd_emu10k1_emu1212m_init(emu);
1437 	else
1438 		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1439 	snd_emu10k1_init(emu, emu->enable_ir, 1);
1440 }
1441 
1442 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1443 {
1444 	int i;
1445 	unsigned char *reg;
1446 	unsigned int *val;
1447 
1448 	snd_emu10k1_audio_enable(emu);
1449 
1450 	/* resore for spdif */
1451 	if (emu->audigy)
1452 		outl(emu->port + A_IOCFG, emu->saved_a_iocfg);
1453 	outl(emu->port + HCFG, emu->saved_hcfg);
1454 
1455 	val = emu->saved_ptr;
1456 	for (reg = saved_regs; *reg != 0xff; reg++)
1457 		for (i = 0; i < NUM_G; i++, val++)
1458 			snd_emu10k1_ptr_write(emu, *reg, i, *val);
1459 	if (emu->audigy) {
1460 		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1461 			for (i = 0; i < NUM_G; i++, val++)
1462 				snd_emu10k1_ptr_write(emu, *reg, i, *val);
1463 	}
1464 }
1465 #endif
1466