xref: /openbmc/linux/sound/pci/es1968.c (revision df2634f43f5106947f3735a0b61a6527a4b278cd)
1 /*
2  *  Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99)
3  *  Copyright (c) by Matze Braun <MatzeBraun@gmx.de>.
4  *                   Takashi Iwai <tiwai@suse.de>
5  *
6  *  Most of the driver code comes from Zach Brown(zab@redhat.com)
7  *	Alan Cox OSS Driver
8  *  Rewritted from card-es1938.c source.
9  *
10  *  TODO:
11  *   Perhaps Synth
12  *
13  *   This program is free software; you can redistribute it and/or modify
14  *   it under the terms of the GNU General Public License as published by
15  *   the Free Software Foundation; either version 2 of the License, or
16  *   (at your option) any later version.
17  *
18  *   This program is distributed in the hope that it will be useful,
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *   GNU General Public License for more details.
22  *
23  *   You should have received a copy of the GNU General Public License
24  *   along with this program; if not, write to the Free Software
25  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26  *
27  *
28  *  Notes from Zach Brown about the driver code
29  *
30  *  Hardware Description
31  *
32  *	A working Maestro setup contains the Maestro chip wired to a
33  *	codec or 2.  In the Maestro we have the APUs, the ASSP, and the
34  *	Wavecache.  The APUs can be though of as virtual audio routing
35  *	channels.  They can take data from a number of sources and perform
36  *	basic encodings of the data.  The wavecache is a storehouse for
37  *	PCM data.  Typically it deals with PCI and interracts with the
38  *	APUs.  The ASSP is a wacky DSP like device that ESS is loth
39  *	to release docs on.  Thankfully it isn't required on the Maestro
40  *	until you start doing insane things like FM emulation and surround
41  *	encoding.  The codecs are almost always AC-97 compliant codecs,
42  *	but it appears that early Maestros may have had PT101 (an ESS
43  *	part?) wired to them.  The only real difference in the Maestro
44  *	families is external goop like docking capability, memory for
45  *	the ASSP, and initialization differences.
46  *
47  *  Driver Operation
48  *
49  *	We only drive the APU/Wavecache as typical DACs and drive the
50  *	mixers in the codecs.  There are 64 APUs.  We assign 6 to each
51  *	/dev/dsp? device.  2 channels for output, and 4 channels for
52  *	input.
53  *
54  *	Each APU can do a number of things, but we only really use
55  *	3 basic functions.  For playback we use them to convert PCM
56  *	data fetched over PCI by the wavecahche into analog data that
57  *	is handed to the codec.  One APU for mono, and a pair for stereo.
58  *	When in stereo, the combination of smarts in the APU and Wavecache
59  *	decide which wavecache gets the left or right channel.
60  *
61  *	For record we still use the old overly mono system.  For each in
62  *	coming channel the data comes in from the codec, through a 'input'
63  *	APU, through another rate converter APU, and then into memory via
64  *	the wavecache and PCI.  If its stereo, we mash it back into LRLR in
65  *	software.  The pass between the 2 APUs is supposedly what requires us
66  *	to have a 512 byte buffer sitting around in wavecache/memory.
67  *
68  *	The wavecache makes our life even more fun.  First off, it can
69  *	only address the first 28 bits of PCI address space, making it
70  *	useless on quite a few architectures.  Secondly, its insane.
71  *	It claims to fetch from 4 regions of PCI space, each 4 meg in length.
72  *	But that doesn't really work.  You can only use 1 region.  So all our
73  *	allocations have to be in 4meg of each other.  Booo.  Hiss.
74  *	So we have a module parameter, dsps_order, that is the order of
75  *	the number of dsps to provide.  All their buffer space is allocated
76  *	on open time.  The sonicvibes OSS routines we inherited really want
77  *	power of 2 buffers, so we have all those next to each other, then
78  *	512 byte regions for the recording wavecaches.  This ends up
79  *	wasting quite a bit of memory.  The only fixes I can see would be
80  *	getting a kernel allocator that could work in zones, or figuring out
81  *	just how to coerce the WP into doing what we want.
82  *
83  *	The indirection of the various registers means we have to spinlock
84  *	nearly all register accesses.  We have the main register indirection
85  *	like the wave cache, maestro registers, etc.  Then we have beasts
86  *	like the APU interface that is indirect registers gotten at through
87  *	the main maestro indirection.  Ouch.  We spinlock around the actual
88  *	ports on a per card basis.  This means spinlock activity at each IO
89  *	operation, but the only IO operation clusters are in non critical
90  *	paths and it makes the code far easier to follow.  Interrupts are
91  *	blocked while holding the locks because the int handler has to
92  *	get at some of them :(.  The mixer interface doesn't, however.
93  *	We also have an OSS state lock that is thrown around in a few
94  *	places.
95  */
96 
97 #include <asm/io.h>
98 #include <linux/delay.h>
99 #include <linux/interrupt.h>
100 #include <linux/init.h>
101 #include <linux/pci.h>
102 #include <linux/dma-mapping.h>
103 #include <linux/slab.h>
104 #include <linux/gameport.h>
105 #include <linux/moduleparam.h>
106 #include <linux/mutex.h>
107 #include <linux/input.h>
108 
109 #include <sound/core.h>
110 #include <sound/pcm.h>
111 #include <sound/mpu401.h>
112 #include <sound/ac97_codec.h>
113 #include <sound/initval.h>
114 
115 #define CARD_NAME "ESS Maestro1/2"
116 #define DRIVER_NAME "ES1968"
117 
118 MODULE_DESCRIPTION("ESS Maestro");
119 MODULE_LICENSE("GPL");
120 MODULE_SUPPORTED_DEVICE("{{ESS,Maestro 2e},"
121 		"{ESS,Maestro 2},"
122 		"{ESS,Maestro 1},"
123 		"{TerraTec,DMX}}");
124 
125 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
126 #define SUPPORT_JOYSTICK 1
127 #endif
128 
129 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 1-MAX */
130 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
131 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
132 static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
133 static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
134 static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
135 static int clock[SNDRV_CARDS];
136 static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
137 static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
138 #ifdef SUPPORT_JOYSTICK
139 static int joystick[SNDRV_CARDS];
140 #endif
141 
142 module_param_array(index, int, NULL, 0444);
143 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
144 module_param_array(id, charp, NULL, 0444);
145 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
146 module_param_array(enable, bool, NULL, 0444);
147 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
148 module_param_array(total_bufsize, int, NULL, 0444);
149 MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
150 module_param_array(pcm_substreams_p, int, NULL, 0444);
151 MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
152 module_param_array(pcm_substreams_c, int, NULL, 0444);
153 MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
154 module_param_array(clock, int, NULL, 0444);
155 MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
156 module_param_array(use_pm, int, NULL, 0444);
157 MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
158 module_param_array(enable_mpu, int, NULL, 0444);
159 MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
160 #ifdef SUPPORT_JOYSTICK
161 module_param_array(joystick, bool, NULL, 0444);
162 MODULE_PARM_DESC(joystick, "Enable joystick.");
163 #endif
164 
165 
166 #define NR_APUS			64
167 #define NR_APU_REGS		16
168 
169 /* NEC Versas ? */
170 #define NEC_VERSA_SUBID1	0x80581033
171 #define NEC_VERSA_SUBID2	0x803c1033
172 
173 /* Mode Flags */
174 #define ESS_FMT_STEREO     	0x01
175 #define ESS_FMT_16BIT      	0x02
176 
177 #define DAC_RUNNING		1
178 #define ADC_RUNNING		2
179 
180 /* Values for the ESM_LEGACY_AUDIO_CONTROL */
181 
182 #define ESS_DISABLE_AUDIO	0x8000
183 #define ESS_ENABLE_SERIAL_IRQ	0x4000
184 #define IO_ADRESS_ALIAS		0x0020
185 #define MPU401_IRQ_ENABLE	0x0010
186 #define MPU401_IO_ENABLE	0x0008
187 #define GAME_IO_ENABLE		0x0004
188 #define FM_IO_ENABLE		0x0002
189 #define SB_IO_ENABLE		0x0001
190 
191 /* Values for the ESM_CONFIG_A */
192 
193 #define PIC_SNOOP1		0x4000
194 #define PIC_SNOOP2		0x2000
195 #define SAFEGUARD		0x0800
196 #define DMA_CLEAR		0x0700
197 #define DMA_DDMA		0x0000
198 #define DMA_TDMA		0x0100
199 #define DMA_PCPCI		0x0200
200 #define POST_WRITE		0x0080
201 #define PCI_TIMING		0x0040
202 #define SWAP_LR			0x0020
203 #define SUBTR_DECODE		0x0002
204 
205 /* Values for the ESM_CONFIG_B */
206 
207 #define SPDIF_CONFB		0x0100
208 #define HWV_CONFB		0x0080
209 #define DEBOUNCE		0x0040
210 #define GPIO_CONFB		0x0020
211 #define CHI_CONFB		0x0010
212 #define IDMA_CONFB		0x0008	/*undoc */
213 #define MIDI_FIX		0x0004	/*undoc */
214 #define IRQ_TO_ISA		0x0001	/*undoc */
215 
216 /* Values for Ring Bus Control B */
217 #define	RINGB_2CODEC_ID_MASK	0x0003
218 #define RINGB_DIS_VALIDATION	0x0008
219 #define RINGB_EN_SPDIF		0x0010
220 #define	RINGB_EN_2CODEC		0x0020
221 #define RINGB_SING_BIT_DUAL	0x0040
222 
223 /* ****Port Addresses**** */
224 
225 /*   Write & Read */
226 #define ESM_INDEX		0x02
227 #define ESM_DATA		0x00
228 
229 /*   AC97 + RingBus */
230 #define ESM_AC97_INDEX		0x30
231 #define	ESM_AC97_DATA		0x32
232 #define ESM_RING_BUS_DEST	0x34
233 #define ESM_RING_BUS_CONTR_A	0x36
234 #define ESM_RING_BUS_CONTR_B	0x38
235 #define ESM_RING_BUS_SDO	0x3A
236 
237 /*   WaveCache*/
238 #define WC_INDEX		0x10
239 #define WC_DATA			0x12
240 #define WC_CONTROL		0x14
241 
242 /*   ASSP*/
243 #define ASSP_INDEX		0x80
244 #define ASSP_MEMORY		0x82
245 #define ASSP_DATA		0x84
246 #define ASSP_CONTROL_A		0xA2
247 #define ASSP_CONTROL_B		0xA4
248 #define ASSP_CONTROL_C		0xA6
249 #define ASSP_HOSTW_INDEX	0xA8
250 #define ASSP_HOSTW_DATA		0xAA
251 #define ASSP_HOSTW_IRQ		0xAC
252 /* Midi */
253 #define ESM_MPU401_PORT		0x98
254 /* Others */
255 #define ESM_PORT_HOST_IRQ	0x18
256 
257 #define IDR0_DATA_PORT		0x00
258 #define IDR1_CRAM_POINTER	0x01
259 #define IDR2_CRAM_DATA		0x02
260 #define IDR3_WAVE_DATA		0x03
261 #define IDR4_WAVE_PTR_LOW	0x04
262 #define IDR5_WAVE_PTR_HI	0x05
263 #define IDR6_TIMER_CTRL		0x06
264 #define IDR7_WAVE_ROMRAM	0x07
265 
266 #define WRITEABLE_MAP		0xEFFFFF
267 #define READABLE_MAP		0x64003F
268 
269 /* PCI Register */
270 
271 #define ESM_LEGACY_AUDIO_CONTROL 0x40
272 #define ESM_ACPI_COMMAND	0x54
273 #define ESM_CONFIG_A		0x50
274 #define ESM_CONFIG_B		0x52
275 #define ESM_DDMA		0x60
276 
277 /* Bob Bits */
278 #define ESM_BOB_ENABLE		0x0001
279 #define ESM_BOB_START		0x0001
280 
281 /* Host IRQ Control Bits */
282 #define ESM_RESET_MAESTRO	0x8000
283 #define ESM_RESET_DIRECTSOUND   0x4000
284 #define ESM_HIRQ_ClkRun		0x0100
285 #define ESM_HIRQ_HW_VOLUME	0x0040
286 #define ESM_HIRQ_HARPO		0x0030	/* What's that? */
287 #define ESM_HIRQ_ASSP		0x0010
288 #define	ESM_HIRQ_DSIE		0x0004
289 #define ESM_HIRQ_MPU401		0x0002
290 #define ESM_HIRQ_SB		0x0001
291 
292 /* Host IRQ Status Bits */
293 #define ESM_MPU401_IRQ		0x02
294 #define ESM_SB_IRQ		0x01
295 #define ESM_SOUND_IRQ		0x04
296 #define	ESM_ASSP_IRQ		0x10
297 #define ESM_HWVOL_IRQ		0x40
298 
299 #define ESS_SYSCLK		50000000
300 #define ESM_BOB_FREQ 		200
301 #define ESM_BOB_FREQ_MAX	800
302 
303 #define ESM_FREQ_ESM1  		(49152000L / 1024L)	/* default rate 48000 */
304 #define ESM_FREQ_ESM2  		(50000000L / 1024L)
305 
306 /* APU Modes: reg 0x00, bit 4-7 */
307 #define ESM_APU_MODE_SHIFT	4
308 #define ESM_APU_MODE_MASK	(0xf << 4)
309 #define	ESM_APU_OFF		0x00
310 #define	ESM_APU_16BITLINEAR	0x01	/* 16-Bit Linear Sample Player */
311 #define	ESM_APU_16BITSTEREO	0x02	/* 16-Bit Stereo Sample Player */
312 #define	ESM_APU_8BITLINEAR	0x03	/* 8-Bit Linear Sample Player */
313 #define	ESM_APU_8BITSTEREO	0x04	/* 8-Bit Stereo Sample Player */
314 #define	ESM_APU_8BITDIFF	0x05	/* 8-Bit Differential Sample Playrer */
315 #define	ESM_APU_DIGITALDELAY	0x06	/* Digital Delay Line */
316 #define	ESM_APU_DUALTAP		0x07	/* Dual Tap Reader */
317 #define	ESM_APU_CORRELATOR	0x08	/* Correlator */
318 #define	ESM_APU_INPUTMIXER	0x09	/* Input Mixer */
319 #define	ESM_APU_WAVETABLE	0x0A	/* Wave Table Mode */
320 #define	ESM_APU_SRCONVERTOR	0x0B	/* Sample Rate Convertor */
321 #define	ESM_APU_16BITPINGPONG	0x0C	/* 16-Bit Ping-Pong Sample Player */
322 #define	ESM_APU_RESERVED1	0x0D	/* Reserved 1 */
323 #define	ESM_APU_RESERVED2	0x0E	/* Reserved 2 */
324 #define	ESM_APU_RESERVED3	0x0F	/* Reserved 3 */
325 
326 /* reg 0x00 */
327 #define ESM_APU_FILTER_Q_SHIFT		0
328 #define ESM_APU_FILTER_Q_MASK		(3 << 0)
329 /* APU Filtey Q Control */
330 #define ESM_APU_FILTER_LESSQ	0x00
331 #define ESM_APU_FILTER_MOREQ	0x03
332 
333 #define ESM_APU_FILTER_TYPE_SHIFT	2
334 #define ESM_APU_FILTER_TYPE_MASK	(3 << 2)
335 #define ESM_APU_ENV_TYPE_SHIFT		8
336 #define ESM_APU_ENV_TYPE_MASK		(3 << 8)
337 #define ESM_APU_ENV_STATE_SHIFT		10
338 #define ESM_APU_ENV_STATE_MASK		(3 << 10)
339 #define ESM_APU_END_CURVE		(1 << 12)
340 #define ESM_APU_INT_ON_LOOP		(1 << 13)
341 #define ESM_APU_DMA_ENABLE		(1 << 14)
342 
343 /* reg 0x02 */
344 #define ESM_APU_SUBMIX_GROUP_SHIRT	0
345 #define ESM_APU_SUBMIX_GROUP_MASK	(7 << 0)
346 #define ESM_APU_SUBMIX_MODE		(1 << 3)
347 #define ESM_APU_6dB			(1 << 4)
348 #define ESM_APU_DUAL_EFFECT		(1 << 5)
349 #define ESM_APU_EFFECT_CHANNELS_SHIFT	6
350 #define ESM_APU_EFFECT_CHANNELS_MASK	(3 << 6)
351 
352 /* reg 0x03 */
353 #define ESM_APU_STEP_SIZE_MASK		0x0fff
354 
355 /* reg 0x04 */
356 #define ESM_APU_PHASE_SHIFT		0
357 #define ESM_APU_PHASE_MASK		(0xff << 0)
358 #define ESM_APU_WAVE64K_PAGE_SHIFT	8	/* most 8bit of wave start offset */
359 #define ESM_APU_WAVE64K_PAGE_MASK	(0xff << 8)
360 
361 /* reg 0x05 - wave start offset */
362 /* reg 0x06 - wave end offset */
363 /* reg 0x07 - wave loop length */
364 
365 /* reg 0x08 */
366 #define ESM_APU_EFFECT_GAIN_SHIFT	0
367 #define ESM_APU_EFFECT_GAIN_MASK	(0xff << 0)
368 #define ESM_APU_TREMOLO_DEPTH_SHIFT	8
369 #define ESM_APU_TREMOLO_DEPTH_MASK	(0xf << 8)
370 #define ESM_APU_TREMOLO_RATE_SHIFT	12
371 #define ESM_APU_TREMOLO_RATE_MASK	(0xf << 12)
372 
373 /* reg 0x09 */
374 /* bit 0-7 amplitude dest? */
375 #define ESM_APU_AMPLITUDE_NOW_SHIFT	8
376 #define ESM_APU_AMPLITUDE_NOW_MASK	(0xff << 8)
377 
378 /* reg 0x0a */
379 #define ESM_APU_POLAR_PAN_SHIFT		0
380 #define ESM_APU_POLAR_PAN_MASK		(0x3f << 0)
381 /* Polar Pan Control */
382 #define	ESM_APU_PAN_CENTER_CIRCLE		0x00
383 #define	ESM_APU_PAN_MIDDLE_RADIUS		0x01
384 #define	ESM_APU_PAN_OUTSIDE_RADIUS		0x02
385 
386 #define ESM_APU_FILTER_TUNING_SHIFT	8
387 #define ESM_APU_FILTER_TUNING_MASK	(0xff << 8)
388 
389 /* reg 0x0b */
390 #define ESM_APU_DATA_SRC_A_SHIFT	0
391 #define ESM_APU_DATA_SRC_A_MASK		(0x7f << 0)
392 #define ESM_APU_INV_POL_A		(1 << 7)
393 #define ESM_APU_DATA_SRC_B_SHIFT	8
394 #define ESM_APU_DATA_SRC_B_MASK		(0x7f << 8)
395 #define ESM_APU_INV_POL_B		(1 << 15)
396 
397 #define ESM_APU_VIBRATO_RATE_SHIFT	0
398 #define ESM_APU_VIBRATO_RATE_MASK	(0xf << 0)
399 #define ESM_APU_VIBRATO_DEPTH_SHIFT	4
400 #define ESM_APU_VIBRATO_DEPTH_MASK	(0xf << 4)
401 #define ESM_APU_VIBRATO_PHASE_SHIFT	8
402 #define ESM_APU_VIBRATO_PHASE_MASK	(0xff << 8)
403 
404 /* reg 0x0c */
405 #define ESM_APU_RADIUS_SELECT		(1 << 6)
406 
407 /* APU Filter Control */
408 #define	ESM_APU_FILTER_2POLE_LOPASS	0x00
409 #define	ESM_APU_FILTER_2POLE_BANDPASS	0x01
410 #define	ESM_APU_FILTER_2POLE_HIPASS	0x02
411 #define	ESM_APU_FILTER_1POLE_LOPASS	0x03
412 #define	ESM_APU_FILTER_1POLE_HIPASS	0x04
413 #define	ESM_APU_FILTER_OFF		0x05
414 
415 /* APU ATFP Type */
416 #define	ESM_APU_ATFP_AMPLITUDE			0x00
417 #define	ESM_APU_ATFP_TREMELO			0x01
418 #define	ESM_APU_ATFP_FILTER			0x02
419 #define	ESM_APU_ATFP_PAN			0x03
420 
421 /* APU ATFP Flags */
422 #define	ESM_APU_ATFP_FLG_OFF			0x00
423 #define	ESM_APU_ATFP_FLG_WAIT			0x01
424 #define	ESM_APU_ATFP_FLG_DONE			0x02
425 #define	ESM_APU_ATFP_FLG_INPROCESS		0x03
426 
427 
428 /* capture mixing buffer size */
429 #define ESM_MEM_ALIGN		0x1000
430 #define ESM_MIXBUF_SIZE		0x400
431 
432 #define ESM_MODE_PLAY		0
433 #define ESM_MODE_CAPTURE	1
434 
435 
436 /* APU use in the driver */
437 enum snd_enum_apu_type {
438 	ESM_APU_PCM_PLAY,
439 	ESM_APU_PCM_CAPTURE,
440 	ESM_APU_PCM_RATECONV,
441 	ESM_APU_FREE
442 };
443 
444 /* chip type */
445 enum {
446 	TYPE_MAESTRO, TYPE_MAESTRO2, TYPE_MAESTRO2E
447 };
448 
449 /* DMA Hack! */
450 struct esm_memory {
451 	struct snd_dma_buffer buf;
452 	int empty;	/* status */
453 	struct list_head list;
454 };
455 
456 /* Playback Channel */
457 struct esschan {
458 	int running;
459 
460 	u8 apu[4];
461 	u8 apu_mode[4];
462 
463 	/* playback/capture pcm buffer */
464 	struct esm_memory *memory;
465 	/* capture mixer buffer */
466 	struct esm_memory *mixbuf;
467 
468 	unsigned int hwptr;	/* current hw pointer in bytes */
469 	unsigned int count;	/* sample counter in bytes */
470 	unsigned int dma_size;	/* total buffer size in bytes */
471 	unsigned int frag_size;	/* period size in bytes */
472 	unsigned int wav_shift;
473 	u16 base[4];		/* offset for ptr */
474 
475 	/* stereo/16bit flag */
476 	unsigned char fmt;
477 	int mode;	/* playback / capture */
478 
479 	int bob_freq;	/* required timer frequency */
480 
481 	struct snd_pcm_substream *substream;
482 
483 	/* linked list */
484 	struct list_head list;
485 
486 #ifdef CONFIG_PM
487 	u16 wc_map[4];
488 #endif
489 };
490 
491 struct es1968 {
492 	/* Module Config */
493 	int total_bufsize;			/* in bytes */
494 
495 	int playback_streams, capture_streams;
496 
497 	unsigned int clock;		/* clock */
498 	/* for clock measurement */
499 	unsigned int in_measurement: 1;
500 	unsigned int measure_apu;
501 	unsigned int measure_lastpos;
502 	unsigned int measure_count;
503 
504 	/* buffer */
505 	struct snd_dma_buffer dma;
506 
507 	/* Resources... */
508 	int irq;
509 	unsigned long io_port;
510 	int type;
511 	struct pci_dev *pci;
512 	struct snd_card *card;
513 	struct snd_pcm *pcm;
514 	int do_pm;		/* power-management enabled */
515 
516 	/* DMA memory block */
517 	struct list_head buf_list;
518 
519 	/* ALSA Stuff */
520 	struct snd_ac97 *ac97;
521 	struct snd_rawmidi *rmidi;
522 
523 	spinlock_t reg_lock;
524 	unsigned int in_suspend;
525 
526 	/* Maestro Stuff */
527 	u16 maestro_map[32];
528 	int bobclient;		/* active timer instancs */
529 	int bob_freq;		/* timer frequency */
530 	struct mutex memory_mutex;	/* memory lock */
531 
532 	/* APU states */
533 	unsigned char apu[NR_APUS];
534 
535 	/* active substreams */
536 	struct list_head substream_list;
537 	spinlock_t substream_lock;
538 
539 #ifdef CONFIG_PM
540 	u16 apu_map[NR_APUS][NR_APU_REGS];
541 #endif
542 
543 #ifdef SUPPORT_JOYSTICK
544 	struct gameport *gameport;
545 #endif
546 
547 #ifdef CONFIG_SND_ES1968_INPUT
548 	struct input_dev *input_dev;
549 	char phys[64];			/* physical device path */
550 #else
551 	struct snd_kcontrol *master_switch; /* for h/w volume control */
552 	struct snd_kcontrol *master_volume;
553 	spinlock_t ac97_lock;
554 	struct tasklet_struct hwvol_tq;
555 #endif
556 };
557 
558 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id);
559 
560 static DEFINE_PCI_DEVICE_TABLE(snd_es1968_ids) = {
561 	/* Maestro 1 */
562         { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
563 	/* Maestro 2 */
564 	{ 0x125d, 0x1968, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2 },
565 	/* Maestro 2E */
566         { 0x125d, 0x1978, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2E },
567 	{ 0, }
568 };
569 
570 MODULE_DEVICE_TABLE(pci, snd_es1968_ids);
571 
572 /* *********************
573    * Low Level Funcs!  *
574    *********************/
575 
576 /* no spinlock */
577 static void __maestro_write(struct es1968 *chip, u16 reg, u16 data)
578 {
579 	outw(reg, chip->io_port + ESM_INDEX);
580 	outw(data, chip->io_port + ESM_DATA);
581 	chip->maestro_map[reg] = data;
582 }
583 
584 static inline void maestro_write(struct es1968 *chip, u16 reg, u16 data)
585 {
586 	unsigned long flags;
587 	spin_lock_irqsave(&chip->reg_lock, flags);
588 	__maestro_write(chip, reg, data);
589 	spin_unlock_irqrestore(&chip->reg_lock, flags);
590 }
591 
592 /* no spinlock */
593 static u16 __maestro_read(struct es1968 *chip, u16 reg)
594 {
595 	if (READABLE_MAP & (1 << reg)) {
596 		outw(reg, chip->io_port + ESM_INDEX);
597 		chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA);
598 	}
599 	return chip->maestro_map[reg];
600 }
601 
602 static inline u16 maestro_read(struct es1968 *chip, u16 reg)
603 {
604 	unsigned long flags;
605 	u16 result;
606 	spin_lock_irqsave(&chip->reg_lock, flags);
607 	result = __maestro_read(chip, reg);
608 	spin_unlock_irqrestore(&chip->reg_lock, flags);
609 	return result;
610 }
611 
612 /* Wait for the codec bus to be free */
613 static int snd_es1968_ac97_wait(struct es1968 *chip)
614 {
615 	int timeout = 100000;
616 
617 	while (timeout-- > 0) {
618 		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
619 			return 0;
620 		cond_resched();
621 	}
622 	snd_printd("es1968: ac97 timeout\n");
623 	return 1; /* timeout */
624 }
625 
626 static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
627 {
628 	int timeout = 100000;
629 
630 	while (timeout-- > 0) {
631 		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
632 			return 0;
633 	}
634 	snd_printd("es1968: ac97 timeout\n");
635 	return 1; /* timeout */
636 }
637 
638 static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
639 {
640 	struct es1968 *chip = ac97->private_data;
641 #ifndef CONFIG_SND_ES1968_INPUT
642 	unsigned long flags;
643 #endif
644 
645 	snd_es1968_ac97_wait(chip);
646 
647 	/* Write the bus */
648 #ifndef CONFIG_SND_ES1968_INPUT
649 	spin_lock_irqsave(&chip->ac97_lock, flags);
650 #endif
651 	outw(val, chip->io_port + ESM_AC97_DATA);
652 	/*msleep(1);*/
653 	outb(reg, chip->io_port + ESM_AC97_INDEX);
654 	/*msleep(1);*/
655 #ifndef CONFIG_SND_ES1968_INPUT
656 	spin_unlock_irqrestore(&chip->ac97_lock, flags);
657 #endif
658 }
659 
660 static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
661 {
662 	u16 data = 0;
663 	struct es1968 *chip = ac97->private_data;
664 #ifndef CONFIG_SND_ES1968_INPUT
665 	unsigned long flags;
666 #endif
667 
668 	snd_es1968_ac97_wait(chip);
669 
670 #ifndef CONFIG_SND_ES1968_INPUT
671 	spin_lock_irqsave(&chip->ac97_lock, flags);
672 #endif
673 	outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
674 	/*msleep(1);*/
675 
676 	if (!snd_es1968_ac97_wait_poll(chip)) {
677 		data = inw(chip->io_port + ESM_AC97_DATA);
678 		/*msleep(1);*/
679 	}
680 #ifndef CONFIG_SND_ES1968_INPUT
681 	spin_unlock_irqrestore(&chip->ac97_lock, flags);
682 #endif
683 
684 	return data;
685 }
686 
687 /* no spinlock */
688 static void apu_index_set(struct es1968 *chip, u16 index)
689 {
690 	int i;
691 	__maestro_write(chip, IDR1_CRAM_POINTER, index);
692 	for (i = 0; i < 1000; i++)
693 		if (__maestro_read(chip, IDR1_CRAM_POINTER) == index)
694 			return;
695 	snd_printd("es1968: APU register select failed. (Timeout)\n");
696 }
697 
698 /* no spinlock */
699 static void apu_data_set(struct es1968 *chip, u16 data)
700 {
701 	int i;
702 	for (i = 0; i < 1000; i++) {
703 		if (__maestro_read(chip, IDR0_DATA_PORT) == data)
704 			return;
705 		__maestro_write(chip, IDR0_DATA_PORT, data);
706 	}
707 	snd_printd("es1968: APU register set probably failed (Timeout)!\n");
708 }
709 
710 /* no spinlock */
711 static void __apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
712 {
713 	if (snd_BUG_ON(channel >= NR_APUS))
714 		return;
715 #ifdef CONFIG_PM
716 	chip->apu_map[channel][reg] = data;
717 #endif
718 	reg |= (channel << 4);
719 	apu_index_set(chip, reg);
720 	apu_data_set(chip, data);
721 }
722 
723 static void apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
724 {
725 	unsigned long flags;
726 	spin_lock_irqsave(&chip->reg_lock, flags);
727 	__apu_set_register(chip, channel, reg, data);
728 	spin_unlock_irqrestore(&chip->reg_lock, flags);
729 }
730 
731 static u16 __apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
732 {
733 	if (snd_BUG_ON(channel >= NR_APUS))
734 		return 0;
735 	reg |= (channel << 4);
736 	apu_index_set(chip, reg);
737 	return __maestro_read(chip, IDR0_DATA_PORT);
738 }
739 
740 static u16 apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
741 {
742 	unsigned long flags;
743 	u16 v;
744 	spin_lock_irqsave(&chip->reg_lock, flags);
745 	v = __apu_get_register(chip, channel, reg);
746 	spin_unlock_irqrestore(&chip->reg_lock, flags);
747 	return v;
748 }
749 
750 #if 0 /* ASSP is not supported */
751 
752 static void assp_set_register(struct es1968 *chip, u32 reg, u32 value)
753 {
754 	unsigned long flags;
755 
756 	spin_lock_irqsave(&chip->reg_lock, flags);
757 	outl(reg, chip->io_port + ASSP_INDEX);
758 	outl(value, chip->io_port + ASSP_DATA);
759 	spin_unlock_irqrestore(&chip->reg_lock, flags);
760 }
761 
762 static u32 assp_get_register(struct es1968 *chip, u32 reg)
763 {
764 	unsigned long flags;
765 	u32 value;
766 
767 	spin_lock_irqsave(&chip->reg_lock, flags);
768 	outl(reg, chip->io_port + ASSP_INDEX);
769 	value = inl(chip->io_port + ASSP_DATA);
770 	spin_unlock_irqrestore(&chip->reg_lock, flags);
771 
772 	return value;
773 }
774 
775 #endif
776 
777 static void wave_set_register(struct es1968 *chip, u16 reg, u16 value)
778 {
779 	unsigned long flags;
780 
781 	spin_lock_irqsave(&chip->reg_lock, flags);
782 	outw(reg, chip->io_port + WC_INDEX);
783 	outw(value, chip->io_port + WC_DATA);
784 	spin_unlock_irqrestore(&chip->reg_lock, flags);
785 }
786 
787 static u16 wave_get_register(struct es1968 *chip, u16 reg)
788 {
789 	unsigned long flags;
790 	u16 value;
791 
792 	spin_lock_irqsave(&chip->reg_lock, flags);
793 	outw(reg, chip->io_port + WC_INDEX);
794 	value = inw(chip->io_port + WC_DATA);
795 	spin_unlock_irqrestore(&chip->reg_lock, flags);
796 
797 	return value;
798 }
799 
800 /* *******************
801    * Bob the Timer!  *
802    *******************/
803 
804 static void snd_es1968_bob_stop(struct es1968 *chip)
805 {
806 	u16 reg;
807 
808 	reg = __maestro_read(chip, 0x11);
809 	reg &= ~ESM_BOB_ENABLE;
810 	__maestro_write(chip, 0x11, reg);
811 	reg = __maestro_read(chip, 0x17);
812 	reg &= ~ESM_BOB_START;
813 	__maestro_write(chip, 0x17, reg);
814 }
815 
816 static void snd_es1968_bob_start(struct es1968 *chip)
817 {
818 	int prescale;
819 	int divide;
820 
821 	/* compute ideal interrupt frequency for buffer size & play rate */
822 	/* first, find best prescaler value to match freq */
823 	for (prescale = 5; prescale < 12; prescale++)
824 		if (chip->bob_freq > (ESS_SYSCLK >> (prescale + 9)))
825 			break;
826 
827 	/* next, back off prescaler whilst getting divider into optimum range */
828 	divide = 1;
829 	while ((prescale > 5) && (divide < 32)) {
830 		prescale--;
831 		divide <<= 1;
832 	}
833 	divide >>= 1;
834 
835 	/* now fine-tune the divider for best match */
836 	for (; divide < 31; divide++)
837 		if (chip->bob_freq >
838 		    ((ESS_SYSCLK >> (prescale + 9)) / (divide + 1))) break;
839 
840 	/* divide = 0 is illegal, but don't let prescale = 4! */
841 	if (divide == 0) {
842 		divide++;
843 		if (prescale > 5)
844 			prescale--;
845 	} else if (divide > 1)
846 		divide--;
847 
848 	__maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide);	/* set reg */
849 
850 	/* Now set IDR 11/17 */
851 	__maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
852 	__maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
853 }
854 
855 /* call with substream spinlock */
856 static void snd_es1968_bob_inc(struct es1968 *chip, int freq)
857 {
858 	chip->bobclient++;
859 	if (chip->bobclient == 1) {
860 		chip->bob_freq = freq;
861 		snd_es1968_bob_start(chip);
862 	} else if (chip->bob_freq < freq) {
863 		snd_es1968_bob_stop(chip);
864 		chip->bob_freq = freq;
865 		snd_es1968_bob_start(chip);
866 	}
867 }
868 
869 /* call with substream spinlock */
870 static void snd_es1968_bob_dec(struct es1968 *chip)
871 {
872 	chip->bobclient--;
873 	if (chip->bobclient <= 0)
874 		snd_es1968_bob_stop(chip);
875 	else if (chip->bob_freq > ESM_BOB_FREQ) {
876 		/* check reduction of timer frequency */
877 		int max_freq = ESM_BOB_FREQ;
878 		struct esschan *es;
879 		list_for_each_entry(es, &chip->substream_list, list) {
880 			if (max_freq < es->bob_freq)
881 				max_freq = es->bob_freq;
882 		}
883 		if (max_freq != chip->bob_freq) {
884 			snd_es1968_bob_stop(chip);
885 			chip->bob_freq = max_freq;
886 			snd_es1968_bob_start(chip);
887 		}
888 	}
889 }
890 
891 static int
892 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
893 			 struct snd_pcm_runtime *runtime)
894 {
895 	/* we acquire 4 interrupts per period for precise control.. */
896 	int freq = runtime->rate * 4;
897 	if (es->fmt & ESS_FMT_STEREO)
898 		freq <<= 1;
899 	if (es->fmt & ESS_FMT_16BIT)
900 		freq <<= 1;
901 	freq /= es->frag_size;
902 	if (freq < ESM_BOB_FREQ)
903 		freq = ESM_BOB_FREQ;
904 	else if (freq > ESM_BOB_FREQ_MAX)
905 		freq = ESM_BOB_FREQ_MAX;
906 	return freq;
907 }
908 
909 
910 /*************
911  *  PCM Part *
912  *************/
913 
914 static u32 snd_es1968_compute_rate(struct es1968 *chip, u32 freq)
915 {
916 	u32 rate = (freq << 16) / chip->clock;
917 #if 0 /* XXX: do we need this? */
918 	if (rate > 0x10000)
919 		rate = 0x10000;
920 #endif
921 	return rate;
922 }
923 
924 /* get current pointer */
925 static inline unsigned int
926 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
927 {
928 	unsigned int offset;
929 
930 	offset = apu_get_register(chip, es->apu[0], 5);
931 
932 	offset -= es->base[0];
933 
934 	return (offset & 0xFFFE);	/* hardware is in words */
935 }
936 
937 static void snd_es1968_apu_set_freq(struct es1968 *chip, int apu, int freq)
938 {
939 	apu_set_register(chip, apu, 2,
940 			   (apu_get_register(chip, apu, 2) & 0x00FF) |
941 			   ((freq & 0xff) << 8) | 0x10);
942 	apu_set_register(chip, apu, 3, freq >> 8);
943 }
944 
945 /* spin lock held */
946 static inline void snd_es1968_trigger_apu(struct es1968 *esm, int apu, int mode)
947 {
948 	/* set the APU mode */
949 	__apu_set_register(esm, apu, 0,
950 			   (__apu_get_register(esm, apu, 0) & 0xff0f) |
951 			   (mode << 4));
952 }
953 
954 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
955 {
956 	spin_lock(&chip->reg_lock);
957 	__apu_set_register(chip, es->apu[0], 5, es->base[0]);
958 	snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
959 	if (es->mode == ESM_MODE_CAPTURE) {
960 		__apu_set_register(chip, es->apu[2], 5, es->base[2]);
961 		snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
962 	}
963 	if (es->fmt & ESS_FMT_STEREO) {
964 		__apu_set_register(chip, es->apu[1], 5, es->base[1]);
965 		snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
966 		if (es->mode == ESM_MODE_CAPTURE) {
967 			__apu_set_register(chip, es->apu[3], 5, es->base[3]);
968 			snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
969 		}
970 	}
971 	spin_unlock(&chip->reg_lock);
972 }
973 
974 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
975 {
976 	spin_lock(&chip->reg_lock);
977 	snd_es1968_trigger_apu(chip, es->apu[0], 0);
978 	snd_es1968_trigger_apu(chip, es->apu[1], 0);
979 	if (es->mode == ESM_MODE_CAPTURE) {
980 		snd_es1968_trigger_apu(chip, es->apu[2], 0);
981 		snd_es1968_trigger_apu(chip, es->apu[3], 0);
982 	}
983 	spin_unlock(&chip->reg_lock);
984 }
985 
986 /* set the wavecache control reg */
987 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
988 					 int channel, u32 addr, int capture)
989 {
990 	u32 tmpval = (addr - 0x10) & 0xFFF8;
991 
992 	if (! capture) {
993 		if (!(es->fmt & ESS_FMT_16BIT))
994 			tmpval |= 4;	/* 8bit */
995 		if (es->fmt & ESS_FMT_STEREO)
996 			tmpval |= 2;	/* stereo */
997 	}
998 
999 	/* set the wavecache control reg */
1000 	wave_set_register(chip, es->apu[channel] << 3, tmpval);
1001 
1002 #ifdef CONFIG_PM
1003 	es->wc_map[channel] = tmpval;
1004 #endif
1005 }
1006 
1007 
1008 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
1009 				      struct snd_pcm_runtime *runtime)
1010 {
1011 	u32 pa;
1012 	int high_apu = 0;
1013 	int channel, apu;
1014 	int i, size;
1015 	unsigned long flags;
1016 	u32 freq;
1017 
1018 	size = es->dma_size >> es->wav_shift;
1019 
1020 	if (es->fmt & ESS_FMT_STEREO)
1021 		high_apu++;
1022 
1023 	for (channel = 0; channel <= high_apu; channel++) {
1024 		apu = es->apu[channel];
1025 
1026 		snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
1027 
1028 		/* Offset to PCMBAR */
1029 		pa = es->memory->buf.addr;
1030 		pa -= chip->dma.addr;
1031 		pa >>= 1;	/* words */
1032 
1033 		pa |= 0x00400000;	/* System RAM (Bit 22) */
1034 
1035 		if (es->fmt & ESS_FMT_STEREO) {
1036 			/* Enable stereo */
1037 			if (channel)
1038 				pa |= 0x00800000;	/* (Bit 23) */
1039 			if (es->fmt & ESS_FMT_16BIT)
1040 				pa >>= 1;
1041 		}
1042 
1043 		/* base offset of dma calcs when reading the pointer
1044 		   on this left one */
1045 		es->base[channel] = pa & 0xFFFF;
1046 
1047 		for (i = 0; i < 16; i++)
1048 			apu_set_register(chip, apu, i, 0x0000);
1049 
1050 		/* Load the buffer into the wave engine */
1051 		apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1052 		apu_set_register(chip, apu, 5, pa & 0xFFFF);
1053 		apu_set_register(chip, apu, 6, (pa + size) & 0xFFFF);
1054 		/* setting loop == sample len */
1055 		apu_set_register(chip, apu, 7, size);
1056 
1057 		/* clear effects/env.. */
1058 		apu_set_register(chip, apu, 8, 0x0000);
1059 		/* set amp now to 0xd0 (?), low byte is 'amplitude dest'? */
1060 		apu_set_register(chip, apu, 9, 0xD000);
1061 
1062 		/* clear routing stuff */
1063 		apu_set_register(chip, apu, 11, 0x0000);
1064 		/* dma on, no envelopes, filter to all 1s) */
1065 		apu_set_register(chip, apu, 0, 0x400F);
1066 
1067 		if (es->fmt & ESS_FMT_16BIT)
1068 			es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1069 		else
1070 			es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1071 
1072 		if (es->fmt & ESS_FMT_STEREO) {
1073 			/* set panning: left or right */
1074 			/* Check: different panning. On my Canyon 3D Chipset the
1075 			   Channels are swapped. I don't know, about the output
1076 			   to the SPDif Link. Perhaps you have to change this
1077 			   and not the APU Regs 4-5. */
1078 			apu_set_register(chip, apu, 10,
1079 					 0x8F00 | (channel ? 0 : 0x10));
1080 			es->apu_mode[channel] += 1;	/* stereo */
1081 		} else
1082 			apu_set_register(chip, apu, 10, 0x8F08);
1083 	}
1084 
1085 	spin_lock_irqsave(&chip->reg_lock, flags);
1086 	/* clear WP interrupts */
1087 	outw(1, chip->io_port + 0x04);
1088 	/* enable WP ints */
1089 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1090 	spin_unlock_irqrestore(&chip->reg_lock, flags);
1091 
1092 	freq = runtime->rate;
1093 	/* set frequency */
1094 	if (freq > 48000)
1095 		freq = 48000;
1096 	if (freq < 4000)
1097 		freq = 4000;
1098 
1099 	/* hmmm.. */
1100 	if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1101 		freq >>= 1;
1102 
1103 	freq = snd_es1968_compute_rate(chip, freq);
1104 
1105 	/* Load the frequency, turn on 6dB */
1106 	snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1107 	snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1108 }
1109 
1110 
1111 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1112 			     unsigned int pa, unsigned int bsize,
1113 			     int mode, int route)
1114 {
1115 	int i, apu = es->apu[channel];
1116 
1117 	es->apu_mode[channel] = mode;
1118 
1119 	/* set the wavecache control reg */
1120 	snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1121 
1122 	/* Offset to PCMBAR */
1123 	pa -= chip->dma.addr;
1124 	pa >>= 1;	/* words */
1125 
1126 	/* base offset of dma calcs when reading the pointer
1127 	   on this left one */
1128 	es->base[channel] = pa & 0xFFFF;
1129 	pa |= 0x00400000;	/* bit 22 -> System RAM */
1130 
1131 	/* Begin loading the APU */
1132 	for (i = 0; i < 16; i++)
1133 		apu_set_register(chip, apu, i, 0x0000);
1134 
1135 	/* need to enable subgroups.. and we should probably
1136 	   have different groups for different /dev/dsps..  */
1137 	apu_set_register(chip, apu, 2, 0x8);
1138 
1139 	/* Load the buffer into the wave engine */
1140 	apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1141 	apu_set_register(chip, apu, 5, pa & 0xFFFF);
1142 	apu_set_register(chip, apu, 6, (pa + bsize) & 0xFFFF);
1143 	apu_set_register(chip, apu, 7, bsize);
1144 	/* clear effects/env.. */
1145 	apu_set_register(chip, apu, 8, 0x00F0);
1146 	/* amplitude now?  sure.  why not.  */
1147 	apu_set_register(chip, apu, 9, 0x0000);
1148 	/* set filter tune, radius, polar pan */
1149 	apu_set_register(chip, apu, 10, 0x8F08);
1150 	/* route input */
1151 	apu_set_register(chip, apu, 11, route);
1152 	/* dma on, no envelopes, filter to all 1s) */
1153 	apu_set_register(chip, apu, 0, 0x400F);
1154 }
1155 
1156 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1157 				     struct snd_pcm_runtime *runtime)
1158 {
1159 	int size;
1160 	u32 freq;
1161 	unsigned long flags;
1162 
1163 	size = es->dma_size >> es->wav_shift;
1164 
1165 	/* APU assignments:
1166 	   0 = mono/left SRC
1167 	   1 = right SRC
1168 	   2 = mono/left Input Mixer
1169 	   3 = right Input Mixer
1170 	*/
1171 	/* data seems to flow from the codec, through an apu into
1172 	   the 'mixbuf' bit of page, then through the SRC apu
1173 	   and out to the real 'buffer'.  ok.  sure.  */
1174 
1175 	/* input mixer (left/mono) */
1176 	/* parallel in crap, see maestro reg 0xC [8-11] */
1177 	init_capture_apu(chip, es, 2,
1178 			 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1179 			 ESM_APU_INPUTMIXER, 0x14);
1180 	/* SRC (left/mono); get input from inputing apu */
1181 	init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1182 			 ESM_APU_SRCONVERTOR, es->apu[2]);
1183 	if (es->fmt & ESS_FMT_STEREO) {
1184 		/* input mixer (right) */
1185 		init_capture_apu(chip, es, 3,
1186 				 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1187 				 ESM_MIXBUF_SIZE/4, /* in words */
1188 				 ESM_APU_INPUTMIXER, 0x15);
1189 		/* SRC (right) */
1190 		init_capture_apu(chip, es, 1,
1191 				 es->memory->buf.addr + size*2, size,
1192 				 ESM_APU_SRCONVERTOR, es->apu[3]);
1193 	}
1194 
1195 	freq = runtime->rate;
1196 	/* Sample Rate conversion APUs don't like 0x10000 for their rate */
1197 	if (freq > 47999)
1198 		freq = 47999;
1199 	if (freq < 4000)
1200 		freq = 4000;
1201 
1202 	freq = snd_es1968_compute_rate(chip, freq);
1203 
1204 	/* Load the frequency, turn on 6dB */
1205 	snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1206 	snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1207 
1208 	/* fix mixer rate at 48khz.  and its _must_ be 0x10000. */
1209 	freq = 0x10000;
1210 	snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1211 	snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1212 
1213 	spin_lock_irqsave(&chip->reg_lock, flags);
1214 	/* clear WP interrupts */
1215 	outw(1, chip->io_port + 0x04);
1216 	/* enable WP ints */
1217 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1218 	spin_unlock_irqrestore(&chip->reg_lock, flags);
1219 }
1220 
1221 /*******************
1222  *  ALSA Interface *
1223  *******************/
1224 
1225 static int snd_es1968_pcm_prepare(struct snd_pcm_substream *substream)
1226 {
1227 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1228 	struct snd_pcm_runtime *runtime = substream->runtime;
1229 	struct esschan *es = runtime->private_data;
1230 
1231 	es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1232 	es->frag_size = snd_pcm_lib_period_bytes(substream);
1233 
1234 	es->wav_shift = 1; /* maestro handles always 16bit */
1235 	es->fmt = 0;
1236 	if (snd_pcm_format_width(runtime->format) == 16)
1237 		es->fmt |= ESS_FMT_16BIT;
1238 	if (runtime->channels > 1) {
1239 		es->fmt |= ESS_FMT_STEREO;
1240 		if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1241 			es->wav_shift++;
1242 	}
1243 	es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1244 
1245 	switch (es->mode) {
1246 	case ESM_MODE_PLAY:
1247 		snd_es1968_playback_setup(chip, es, runtime);
1248 		break;
1249 	case ESM_MODE_CAPTURE:
1250 		snd_es1968_capture_setup(chip, es, runtime);
1251 		break;
1252 	}
1253 
1254 	return 0;
1255 }
1256 
1257 static int snd_es1968_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1258 {
1259 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1260 	struct esschan *es = substream->runtime->private_data;
1261 
1262 	spin_lock(&chip->substream_lock);
1263 	switch (cmd) {
1264 	case SNDRV_PCM_TRIGGER_START:
1265 	case SNDRV_PCM_TRIGGER_RESUME:
1266 		if (es->running)
1267 			break;
1268 		snd_es1968_bob_inc(chip, es->bob_freq);
1269 		es->count = 0;
1270 		es->hwptr = 0;
1271 		snd_es1968_pcm_start(chip, es);
1272 		es->running = 1;
1273 		break;
1274 	case SNDRV_PCM_TRIGGER_STOP:
1275 	case SNDRV_PCM_TRIGGER_SUSPEND:
1276 		if (! es->running)
1277 			break;
1278 		snd_es1968_pcm_stop(chip, es);
1279 		es->running = 0;
1280 		snd_es1968_bob_dec(chip);
1281 		break;
1282 	}
1283 	spin_unlock(&chip->substream_lock);
1284 	return 0;
1285 }
1286 
1287 static snd_pcm_uframes_t snd_es1968_pcm_pointer(struct snd_pcm_substream *substream)
1288 {
1289 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1290 	struct esschan *es = substream->runtime->private_data;
1291 	unsigned int ptr;
1292 
1293 	ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1294 
1295 	return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1296 }
1297 
1298 static struct snd_pcm_hardware snd_es1968_playback = {
1299 	.info =			(SNDRV_PCM_INFO_MMAP |
1300                		         SNDRV_PCM_INFO_MMAP_VALID |
1301 				 SNDRV_PCM_INFO_INTERLEAVED |
1302 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1303 				 /*SNDRV_PCM_INFO_PAUSE |*/
1304 				 SNDRV_PCM_INFO_RESUME),
1305 	.formats =		SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
1306 	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1307 	.rate_min =		4000,
1308 	.rate_max =		48000,
1309 	.channels_min =		1,
1310 	.channels_max =		2,
1311 	.buffer_bytes_max =	65536,
1312 	.period_bytes_min =	256,
1313 	.period_bytes_max =	65536,
1314 	.periods_min =		1,
1315 	.periods_max =		1024,
1316 	.fifo_size =		0,
1317 };
1318 
1319 static struct snd_pcm_hardware snd_es1968_capture = {
1320 	.info =			(SNDRV_PCM_INFO_NONINTERLEAVED |
1321 				 SNDRV_PCM_INFO_MMAP |
1322 				 SNDRV_PCM_INFO_MMAP_VALID |
1323 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1324 				 /*SNDRV_PCM_INFO_PAUSE |*/
1325 				 SNDRV_PCM_INFO_RESUME),
1326 	.formats =		/*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE,
1327 	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1328 	.rate_min =		4000,
1329 	.rate_max =		48000,
1330 	.channels_min =		1,
1331 	.channels_max =		2,
1332 	.buffer_bytes_max =	65536,
1333 	.period_bytes_min =	256,
1334 	.period_bytes_max =	65536,
1335 	.periods_min =		1,
1336 	.periods_max =		1024,
1337 	.fifo_size =		0,
1338 };
1339 
1340 /* *************************
1341    * DMA memory management *
1342    *************************/
1343 
1344 /* Because the Maestro can only take addresses relative to the PCM base address
1345    register :( */
1346 
1347 static int calc_available_memory_size(struct es1968 *chip)
1348 {
1349 	int max_size = 0;
1350 	struct esm_memory *buf;
1351 
1352 	mutex_lock(&chip->memory_mutex);
1353 	list_for_each_entry(buf, &chip->buf_list, list) {
1354 		if (buf->empty && buf->buf.bytes > max_size)
1355 			max_size = buf->buf.bytes;
1356 	}
1357 	mutex_unlock(&chip->memory_mutex);
1358 	if (max_size >= 128*1024)
1359 		max_size = 127*1024;
1360 	return max_size;
1361 }
1362 
1363 /* allocate a new memory chunk with the specified size */
1364 static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)
1365 {
1366 	struct esm_memory *buf;
1367 
1368 	size = ALIGN(size, ESM_MEM_ALIGN);
1369 	mutex_lock(&chip->memory_mutex);
1370 	list_for_each_entry(buf, &chip->buf_list, list) {
1371 		if (buf->empty && buf->buf.bytes >= size)
1372 			goto __found;
1373 	}
1374 	mutex_unlock(&chip->memory_mutex);
1375 	return NULL;
1376 
1377 __found:
1378 	if (buf->buf.bytes > size) {
1379 		struct esm_memory *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1380 		if (chunk == NULL) {
1381 			mutex_unlock(&chip->memory_mutex);
1382 			return NULL;
1383 		}
1384 		chunk->buf = buf->buf;
1385 		chunk->buf.bytes -= size;
1386 		chunk->buf.area += size;
1387 		chunk->buf.addr += size;
1388 		chunk->empty = 1;
1389 		buf->buf.bytes = size;
1390 		list_add(&chunk->list, &buf->list);
1391 	}
1392 	buf->empty = 0;
1393 	mutex_unlock(&chip->memory_mutex);
1394 	return buf;
1395 }
1396 
1397 /* free a memory chunk */
1398 static void snd_es1968_free_memory(struct es1968 *chip, struct esm_memory *buf)
1399 {
1400 	struct esm_memory *chunk;
1401 
1402 	mutex_lock(&chip->memory_mutex);
1403 	buf->empty = 1;
1404 	if (buf->list.prev != &chip->buf_list) {
1405 		chunk = list_entry(buf->list.prev, struct esm_memory, list);
1406 		if (chunk->empty) {
1407 			chunk->buf.bytes += buf->buf.bytes;
1408 			list_del(&buf->list);
1409 			kfree(buf);
1410 			buf = chunk;
1411 		}
1412 	}
1413 	if (buf->list.next != &chip->buf_list) {
1414 		chunk = list_entry(buf->list.next, struct esm_memory, list);
1415 		if (chunk->empty) {
1416 			buf->buf.bytes += chunk->buf.bytes;
1417 			list_del(&chunk->list);
1418 			kfree(chunk);
1419 		}
1420 	}
1421 	mutex_unlock(&chip->memory_mutex);
1422 }
1423 
1424 static void snd_es1968_free_dmabuf(struct es1968 *chip)
1425 {
1426 	struct list_head *p;
1427 
1428 	if (! chip->dma.area)
1429 		return;
1430 	snd_dma_reserve_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci));
1431 	while ((p = chip->buf_list.next) != &chip->buf_list) {
1432 		struct esm_memory *chunk = list_entry(p, struct esm_memory, list);
1433 		list_del(p);
1434 		kfree(chunk);
1435 	}
1436 }
1437 
1438 static int __devinit
1439 snd_es1968_init_dmabuf(struct es1968 *chip)
1440 {
1441 	int err;
1442 	struct esm_memory *chunk;
1443 
1444 	chip->dma.dev.type = SNDRV_DMA_TYPE_DEV;
1445 	chip->dma.dev.dev = snd_dma_pci_data(chip->pci);
1446 	if (! snd_dma_get_reserved_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci))) {
1447 		err = snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
1448 						   snd_dma_pci_data(chip->pci),
1449 						   chip->total_bufsize, &chip->dma);
1450 		if (err < 0 || ! chip->dma.area) {
1451 			snd_printk(KERN_ERR "es1968: can't allocate dma pages for size %d\n",
1452 				   chip->total_bufsize);
1453 			return -ENOMEM;
1454 		}
1455 		if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) {
1456 			snd_dma_free_pages(&chip->dma);
1457 			snd_printk(KERN_ERR "es1968: DMA buffer beyond 256MB.\n");
1458 			return -ENOMEM;
1459 		}
1460 	}
1461 
1462 	INIT_LIST_HEAD(&chip->buf_list);
1463 	/* allocate an empty chunk */
1464 	chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1465 	if (chunk == NULL) {
1466 		snd_es1968_free_dmabuf(chip);
1467 		return -ENOMEM;
1468 	}
1469 	memset(chip->dma.area, 0, ESM_MEM_ALIGN);
1470 	chunk->buf = chip->dma;
1471 	chunk->buf.area += ESM_MEM_ALIGN;
1472 	chunk->buf.addr += ESM_MEM_ALIGN;
1473 	chunk->buf.bytes -= ESM_MEM_ALIGN;
1474 	chunk->empty = 1;
1475 	list_add(&chunk->list, &chip->buf_list);
1476 
1477 	return 0;
1478 }
1479 
1480 /* setup the dma_areas */
1481 /* buffer is extracted from the pre-allocated memory chunk */
1482 static int snd_es1968_hw_params(struct snd_pcm_substream *substream,
1483 				struct snd_pcm_hw_params *hw_params)
1484 {
1485 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1486 	struct snd_pcm_runtime *runtime = substream->runtime;
1487 	struct esschan *chan = runtime->private_data;
1488 	int size = params_buffer_bytes(hw_params);
1489 
1490 	if (chan->memory) {
1491 		if (chan->memory->buf.bytes >= size) {
1492 			runtime->dma_bytes = size;
1493 			return 0;
1494 		}
1495 		snd_es1968_free_memory(chip, chan->memory);
1496 	}
1497 	chan->memory = snd_es1968_new_memory(chip, size);
1498 	if (chan->memory == NULL) {
1499 		// snd_printd("cannot allocate dma buffer: size = %d\n", size);
1500 		return -ENOMEM;
1501 	}
1502 	snd_pcm_set_runtime_buffer(substream, &chan->memory->buf);
1503 	return 1; /* area was changed */
1504 }
1505 
1506 /* remove dma areas if allocated */
1507 static int snd_es1968_hw_free(struct snd_pcm_substream *substream)
1508 {
1509 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1510 	struct snd_pcm_runtime *runtime = substream->runtime;
1511 	struct esschan *chan;
1512 
1513 	if (runtime->private_data == NULL)
1514 		return 0;
1515 	chan = runtime->private_data;
1516 	if (chan->memory) {
1517 		snd_es1968_free_memory(chip, chan->memory);
1518 		chan->memory = NULL;
1519 	}
1520 	return 0;
1521 }
1522 
1523 
1524 /*
1525  * allocate APU pair
1526  */
1527 static int snd_es1968_alloc_apu_pair(struct es1968 *chip, int type)
1528 {
1529 	int apu;
1530 
1531 	for (apu = 0; apu < NR_APUS; apu += 2) {
1532 		if (chip->apu[apu] == ESM_APU_FREE &&
1533 		    chip->apu[apu + 1] == ESM_APU_FREE) {
1534 			chip->apu[apu] = chip->apu[apu + 1] = type;
1535 			return apu;
1536 		}
1537 	}
1538 	return -EBUSY;
1539 }
1540 
1541 /*
1542  * release APU pair
1543  */
1544 static void snd_es1968_free_apu_pair(struct es1968 *chip, int apu)
1545 {
1546 	chip->apu[apu] = chip->apu[apu + 1] = ESM_APU_FREE;
1547 }
1548 
1549 
1550 /******************
1551  * PCM open/close *
1552  ******************/
1553 
1554 static int snd_es1968_playback_open(struct snd_pcm_substream *substream)
1555 {
1556 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1557 	struct snd_pcm_runtime *runtime = substream->runtime;
1558 	struct esschan *es;
1559 	int apu1;
1560 
1561 	/* search 2 APUs */
1562 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1563 	if (apu1 < 0)
1564 		return apu1;
1565 
1566 	es = kzalloc(sizeof(*es), GFP_KERNEL);
1567 	if (!es) {
1568 		snd_es1968_free_apu_pair(chip, apu1);
1569 		return -ENOMEM;
1570 	}
1571 
1572 	es->apu[0] = apu1;
1573 	es->apu[1] = apu1 + 1;
1574 	es->apu_mode[0] = 0;
1575 	es->apu_mode[1] = 0;
1576 	es->running = 0;
1577 	es->substream = substream;
1578 	es->mode = ESM_MODE_PLAY;
1579 
1580 	runtime->private_data = es;
1581 	runtime->hw = snd_es1968_playback;
1582 	runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1583 		calc_available_memory_size(chip);
1584 
1585 	spin_lock_irq(&chip->substream_lock);
1586 	list_add(&es->list, &chip->substream_list);
1587 	spin_unlock_irq(&chip->substream_lock);
1588 
1589 	return 0;
1590 }
1591 
1592 static int snd_es1968_capture_open(struct snd_pcm_substream *substream)
1593 {
1594 	struct snd_pcm_runtime *runtime = substream->runtime;
1595 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1596 	struct esschan *es;
1597 	int apu1, apu2;
1598 
1599 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_CAPTURE);
1600 	if (apu1 < 0)
1601 		return apu1;
1602 	apu2 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_RATECONV);
1603 	if (apu2 < 0) {
1604 		snd_es1968_free_apu_pair(chip, apu1);
1605 		return apu2;
1606 	}
1607 
1608 	es = kzalloc(sizeof(*es), GFP_KERNEL);
1609 	if (!es) {
1610 		snd_es1968_free_apu_pair(chip, apu1);
1611 		snd_es1968_free_apu_pair(chip, apu2);
1612 		return -ENOMEM;
1613 	}
1614 
1615 	es->apu[0] = apu1;
1616 	es->apu[1] = apu1 + 1;
1617 	es->apu[2] = apu2;
1618 	es->apu[3] = apu2 + 1;
1619 	es->apu_mode[0] = 0;
1620 	es->apu_mode[1] = 0;
1621 	es->apu_mode[2] = 0;
1622 	es->apu_mode[3] = 0;
1623 	es->running = 0;
1624 	es->substream = substream;
1625 	es->mode = ESM_MODE_CAPTURE;
1626 
1627 	/* get mixbuffer */
1628 	if ((es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE)) == NULL) {
1629 		snd_es1968_free_apu_pair(chip, apu1);
1630 		snd_es1968_free_apu_pair(chip, apu2);
1631 		kfree(es);
1632                 return -ENOMEM;
1633         }
1634 	memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1635 
1636 	runtime->private_data = es;
1637 	runtime->hw = snd_es1968_capture;
1638 	runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1639 		calc_available_memory_size(chip) - 1024; /* keep MIXBUF size */
1640 	snd_pcm_hw_constraint_pow2(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES);
1641 
1642 	spin_lock_irq(&chip->substream_lock);
1643 	list_add(&es->list, &chip->substream_list);
1644 	spin_unlock_irq(&chip->substream_lock);
1645 
1646 	return 0;
1647 }
1648 
1649 static int snd_es1968_playback_close(struct snd_pcm_substream *substream)
1650 {
1651 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1652 	struct esschan *es;
1653 
1654 	if (substream->runtime->private_data == NULL)
1655 		return 0;
1656 	es = substream->runtime->private_data;
1657 	spin_lock_irq(&chip->substream_lock);
1658 	list_del(&es->list);
1659 	spin_unlock_irq(&chip->substream_lock);
1660 	snd_es1968_free_apu_pair(chip, es->apu[0]);
1661 	kfree(es);
1662 
1663 	return 0;
1664 }
1665 
1666 static int snd_es1968_capture_close(struct snd_pcm_substream *substream)
1667 {
1668 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1669 	struct esschan *es;
1670 
1671 	if (substream->runtime->private_data == NULL)
1672 		return 0;
1673 	es = substream->runtime->private_data;
1674 	spin_lock_irq(&chip->substream_lock);
1675 	list_del(&es->list);
1676 	spin_unlock_irq(&chip->substream_lock);
1677 	snd_es1968_free_memory(chip, es->mixbuf);
1678 	snd_es1968_free_apu_pair(chip, es->apu[0]);
1679 	snd_es1968_free_apu_pair(chip, es->apu[2]);
1680 	kfree(es);
1681 
1682 	return 0;
1683 }
1684 
1685 static struct snd_pcm_ops snd_es1968_playback_ops = {
1686 	.open =		snd_es1968_playback_open,
1687 	.close =	snd_es1968_playback_close,
1688 	.ioctl =	snd_pcm_lib_ioctl,
1689 	.hw_params =	snd_es1968_hw_params,
1690 	.hw_free =	snd_es1968_hw_free,
1691 	.prepare =	snd_es1968_pcm_prepare,
1692 	.trigger =	snd_es1968_pcm_trigger,
1693 	.pointer =	snd_es1968_pcm_pointer,
1694 };
1695 
1696 static struct snd_pcm_ops snd_es1968_capture_ops = {
1697 	.open =		snd_es1968_capture_open,
1698 	.close =	snd_es1968_capture_close,
1699 	.ioctl =	snd_pcm_lib_ioctl,
1700 	.hw_params =	snd_es1968_hw_params,
1701 	.hw_free =	snd_es1968_hw_free,
1702 	.prepare =	snd_es1968_pcm_prepare,
1703 	.trigger =	snd_es1968_pcm_trigger,
1704 	.pointer =	snd_es1968_pcm_pointer,
1705 };
1706 
1707 
1708 /*
1709  * measure clock
1710  */
1711 #define CLOCK_MEASURE_BUFSIZE	16768	/* enough large for a single shot */
1712 
1713 static void __devinit es1968_measure_clock(struct es1968 *chip)
1714 {
1715 	int i, apu;
1716 	unsigned int pa, offset, t;
1717 	struct esm_memory *memory;
1718 	struct timeval start_time, stop_time;
1719 
1720 	if (chip->clock == 0)
1721 		chip->clock = 48000; /* default clock value */
1722 
1723 	/* search 2 APUs (although one apu is enough) */
1724 	if ((apu = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY)) < 0) {
1725 		snd_printk(KERN_ERR "Hmm, cannot find empty APU pair!?\n");
1726 		return;
1727 	}
1728 	if ((memory = snd_es1968_new_memory(chip, CLOCK_MEASURE_BUFSIZE)) == NULL) {
1729 		snd_printk(KERN_ERR "cannot allocate dma buffer - using default clock %d\n", chip->clock);
1730 		snd_es1968_free_apu_pair(chip, apu);
1731 		return;
1732 	}
1733 
1734 	memset(memory->buf.area, 0, CLOCK_MEASURE_BUFSIZE);
1735 
1736 	wave_set_register(chip, apu << 3, (memory->buf.addr - 0x10) & 0xfff8);
1737 
1738 	pa = (unsigned int)((memory->buf.addr - chip->dma.addr) >> 1);
1739 	pa |= 0x00400000;	/* System RAM (Bit 22) */
1740 
1741 	/* initialize apu */
1742 	for (i = 0; i < 16; i++)
1743 		apu_set_register(chip, apu, i, 0x0000);
1744 
1745 	apu_set_register(chip, apu, 0, 0x400f);
1746 	apu_set_register(chip, apu, 4, ((pa >> 16) & 0xff) << 8);
1747 	apu_set_register(chip, apu, 5, pa & 0xffff);
1748 	apu_set_register(chip, apu, 6, (pa + CLOCK_MEASURE_BUFSIZE/2) & 0xffff);
1749 	apu_set_register(chip, apu, 7, CLOCK_MEASURE_BUFSIZE/2);
1750 	apu_set_register(chip, apu, 8, 0x0000);
1751 	apu_set_register(chip, apu, 9, 0xD000);
1752 	apu_set_register(chip, apu, 10, 0x8F08);
1753 	apu_set_register(chip, apu, 11, 0x0000);
1754 	spin_lock_irq(&chip->reg_lock);
1755 	outw(1, chip->io_port + 0x04); /* clear WP interrupts */
1756 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ); /* enable WP ints */
1757 	spin_unlock_irq(&chip->reg_lock);
1758 
1759 	snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
1760 
1761 	chip->in_measurement = 1;
1762 	chip->measure_apu = apu;
1763 	spin_lock_irq(&chip->reg_lock);
1764 	snd_es1968_bob_inc(chip, ESM_BOB_FREQ);
1765 	__apu_set_register(chip, apu, 5, pa & 0xffff);
1766 	snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
1767 	do_gettimeofday(&start_time);
1768 	spin_unlock_irq(&chip->reg_lock);
1769 	msleep(50);
1770 	spin_lock_irq(&chip->reg_lock);
1771 	offset = __apu_get_register(chip, apu, 5);
1772 	do_gettimeofday(&stop_time);
1773 	snd_es1968_trigger_apu(chip, apu, 0); /* stop */
1774 	snd_es1968_bob_dec(chip);
1775 	chip->in_measurement = 0;
1776 	spin_unlock_irq(&chip->reg_lock);
1777 
1778 	/* check the current position */
1779 	offset -= (pa & 0xffff);
1780 	offset &= 0xfffe;
1781 	offset += chip->measure_count * (CLOCK_MEASURE_BUFSIZE/2);
1782 
1783 	t = stop_time.tv_sec - start_time.tv_sec;
1784 	t *= 1000000;
1785 	if (stop_time.tv_usec < start_time.tv_usec)
1786 		t -= start_time.tv_usec - stop_time.tv_usec;
1787 	else
1788 		t += stop_time.tv_usec - start_time.tv_usec;
1789 	if (t == 0) {
1790 		snd_printk(KERN_ERR "?? calculation error..\n");
1791 	} else {
1792 		offset *= 1000;
1793 		offset = (offset / t) * 1000 + ((offset % t) * 1000) / t;
1794 		if (offset < 47500 || offset > 48500) {
1795 			if (offset >= 40000 && offset <= 50000)
1796 				chip->clock = (chip->clock * offset) / 48000;
1797 		}
1798 		printk(KERN_INFO "es1968: clocking to %d\n", chip->clock);
1799 	}
1800 	snd_es1968_free_memory(chip, memory);
1801 	snd_es1968_free_apu_pair(chip, apu);
1802 }
1803 
1804 
1805 /*
1806  */
1807 
1808 static void snd_es1968_pcm_free(struct snd_pcm *pcm)
1809 {
1810 	struct es1968 *esm = pcm->private_data;
1811 	snd_es1968_free_dmabuf(esm);
1812 	esm->pcm = NULL;
1813 }
1814 
1815 static int __devinit
1816 snd_es1968_pcm(struct es1968 *chip, int device)
1817 {
1818 	struct snd_pcm *pcm;
1819 	int err;
1820 
1821 	/* get DMA buffer */
1822 	if ((err = snd_es1968_init_dmabuf(chip)) < 0)
1823 		return err;
1824 
1825 	/* set PCMBAR */
1826 	wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
1827 	wave_set_register(chip, 0x01FD, chip->dma.addr >> 12);
1828 	wave_set_register(chip, 0x01FE, chip->dma.addr >> 12);
1829 	wave_set_register(chip, 0x01FF, chip->dma.addr >> 12);
1830 
1831 	if ((err = snd_pcm_new(chip->card, "ESS Maestro", device,
1832 			       chip->playback_streams,
1833 			       chip->capture_streams, &pcm)) < 0)
1834 		return err;
1835 
1836 	pcm->private_data = chip;
1837 	pcm->private_free = snd_es1968_pcm_free;
1838 
1839 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_es1968_playback_ops);
1840 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_es1968_capture_ops);
1841 
1842 	pcm->info_flags = 0;
1843 
1844 	strcpy(pcm->name, "ESS Maestro");
1845 
1846 	chip->pcm = pcm;
1847 
1848 	return 0;
1849 }
1850 /*
1851  * suppress jitter on some maestros when playing stereo
1852  */
1853 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1854 {
1855 	unsigned int cp1;
1856 	unsigned int cp2;
1857 	unsigned int diff;
1858 
1859 	cp1 = __apu_get_register(chip, 0, 5);
1860 	cp2 = __apu_get_register(chip, 1, 5);
1861 	diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
1862 
1863 	if (diff > 1)
1864 		__maestro_write(chip, IDR0_DATA_PORT, cp1);
1865 }
1866 
1867 /*
1868  * update pointer
1869  */
1870 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1871 {
1872 	unsigned int hwptr;
1873 	unsigned int diff;
1874 	struct snd_pcm_substream *subs = es->substream;
1875 
1876 	if (subs == NULL || !es->running)
1877 		return;
1878 
1879 	hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1880 	hwptr %= es->dma_size;
1881 
1882 	diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1883 
1884 	es->hwptr = hwptr;
1885 	es->count += diff;
1886 
1887 	if (es->count > es->frag_size) {
1888 		spin_unlock(&chip->substream_lock);
1889 		snd_pcm_period_elapsed(subs);
1890 		spin_lock(&chip->substream_lock);
1891 		es->count %= es->frag_size;
1892 	}
1893 }
1894 
1895 /* The hardware volume works by incrementing / decrementing 2 counters
1896    (without wrap around) in response to volume button presses and then
1897    generating an interrupt. The pair of counters is stored in bits 1-3 and 5-7
1898    of a byte wide register. The meaning of bits 0 and 4 is unknown. */
1899 static void es1968_update_hw_volume(unsigned long private_data)
1900 {
1901 	struct es1968 *chip = (struct es1968 *) private_data;
1902 	int x, val;
1903 #ifndef CONFIG_SND_ES1968_INPUT
1904 	unsigned long flags;
1905 #endif
1906 
1907 	/* Figure out which volume control button was pushed,
1908 	   based on differences from the default register
1909 	   values. */
1910 	x = inb(chip->io_port + 0x1c) & 0xee;
1911 	/* Reset the volume control registers. */
1912 	outb(0x88, chip->io_port + 0x1c);
1913 	outb(0x88, chip->io_port + 0x1d);
1914 	outb(0x88, chip->io_port + 0x1e);
1915 	outb(0x88, chip->io_port + 0x1f);
1916 
1917 	if (chip->in_suspend)
1918 		return;
1919 
1920 #ifndef CONFIG_SND_ES1968_INPUT
1921 	if (! chip->master_switch || ! chip->master_volume)
1922 		return;
1923 
1924 	/* FIXME: we can't call snd_ac97_* functions since here is in tasklet. */
1925 	spin_lock_irqsave(&chip->ac97_lock, flags);
1926 	val = chip->ac97->regs[AC97_MASTER];
1927 	switch (x) {
1928 	case 0x88:
1929 		/* mute */
1930 		val ^= 0x8000;
1931 		chip->ac97->regs[AC97_MASTER] = val;
1932 		outw(val, chip->io_port + ESM_AC97_DATA);
1933 		outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1934 		snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1935 			       &chip->master_switch->id);
1936 		break;
1937 	case 0xaa:
1938 		/* volume up */
1939 		if ((val & 0x7f) > 0)
1940 			val--;
1941 		if ((val & 0x7f00) > 0)
1942 			val -= 0x0100;
1943 		chip->ac97->regs[AC97_MASTER] = val;
1944 		outw(val, chip->io_port + ESM_AC97_DATA);
1945 		outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1946 		snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1947 			       &chip->master_volume->id);
1948 		break;
1949 	case 0x66:
1950 		/* volume down */
1951 		if ((val & 0x7f) < 0x1f)
1952 			val++;
1953 		if ((val & 0x7f00) < 0x1f00)
1954 			val += 0x0100;
1955 		chip->ac97->regs[AC97_MASTER] = val;
1956 		outw(val, chip->io_port + ESM_AC97_DATA);
1957 		outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1958 		snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1959 			       &chip->master_volume->id);
1960 		break;
1961 	}
1962 	spin_unlock_irqrestore(&chip->ac97_lock, flags);
1963 #else
1964 	if (!chip->input_dev)
1965 		return;
1966 
1967 	val = 0;
1968 	switch (x) {
1969 	case 0x88:
1970 		/* The counters have not changed, yet we've received a HV
1971 		   interrupt. According to tests run by various people this
1972 		   happens when pressing the mute button. */
1973 		val = KEY_MUTE;
1974 		break;
1975 	case 0xaa:
1976 		/* counters increased by 1 -> volume up */
1977 		val = KEY_VOLUMEUP;
1978 		break;
1979 	case 0x66:
1980 		/* counters decreased by 1 -> volume down */
1981 		val = KEY_VOLUMEDOWN;
1982 		break;
1983 	}
1984 
1985 	if (val) {
1986 		input_report_key(chip->input_dev, val, 1);
1987 		input_sync(chip->input_dev);
1988 		input_report_key(chip->input_dev, val, 0);
1989 		input_sync(chip->input_dev);
1990 	}
1991 #endif
1992 }
1993 
1994 /*
1995  * interrupt handler
1996  */
1997 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id)
1998 {
1999 	struct es1968 *chip = dev_id;
2000 	u32 event;
2001 
2002 	if (!(event = inb(chip->io_port + 0x1A)))
2003 		return IRQ_NONE;
2004 
2005 	outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
2006 
2007 	if (event & ESM_HWVOL_IRQ)
2008 #ifdef CONFIG_SND_ES1968_INPUT
2009 		es1968_update_hw_volume((unsigned long)chip);
2010 #else
2011 		tasklet_schedule(&chip->hwvol_tq); /* we'll do this later */
2012 #endif
2013 
2014 	/* else ack 'em all, i imagine */
2015 	outb(0xFF, chip->io_port + 0x1A);
2016 
2017 	if ((event & ESM_MPU401_IRQ) && chip->rmidi) {
2018 		snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
2019 	}
2020 
2021 	if (event & ESM_SOUND_IRQ) {
2022 		struct esschan *es;
2023 		spin_lock(&chip->substream_lock);
2024 		list_for_each_entry(es, &chip->substream_list, list) {
2025 			if (es->running) {
2026 				snd_es1968_update_pcm(chip, es);
2027 				if (es->fmt & ESS_FMT_STEREO)
2028 					snd_es1968_suppress_jitter(chip, es);
2029 			}
2030 		}
2031 		spin_unlock(&chip->substream_lock);
2032 		if (chip->in_measurement) {
2033 			unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
2034 			if (curp < chip->measure_lastpos)
2035 				chip->measure_count++;
2036 			chip->measure_lastpos = curp;
2037 		}
2038 	}
2039 
2040 	return IRQ_HANDLED;
2041 }
2042 
2043 /*
2044  *  Mixer stuff
2045  */
2046 
2047 static int __devinit
2048 snd_es1968_mixer(struct es1968 *chip)
2049 {
2050 	struct snd_ac97_bus *pbus;
2051 	struct snd_ac97_template ac97;
2052 #ifndef CONFIG_SND_ES1968_INPUT
2053 	struct snd_ctl_elem_id elem_id;
2054 #endif
2055 	int err;
2056 	static struct snd_ac97_bus_ops ops = {
2057 		.write = snd_es1968_ac97_write,
2058 		.read = snd_es1968_ac97_read,
2059 	};
2060 
2061 	if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
2062 		return err;
2063 	pbus->no_vra = 1; /* ES1968 doesn't need VRA */
2064 
2065 	memset(&ac97, 0, sizeof(ac97));
2066 	ac97.private_data = chip;
2067 	if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97)) < 0)
2068 		return err;
2069 
2070 #ifndef CONFIG_SND_ES1968_INPUT
2071 	/* attach master switch / volumes for h/w volume control */
2072 	memset(&elem_id, 0, sizeof(elem_id));
2073 	elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2074 	strcpy(elem_id.name, "Master Playback Switch");
2075 	chip->master_switch = snd_ctl_find_id(chip->card, &elem_id);
2076 	memset(&elem_id, 0, sizeof(elem_id));
2077 	elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2078 	strcpy(elem_id.name, "Master Playback Volume");
2079 	chip->master_volume = snd_ctl_find_id(chip->card, &elem_id);
2080 #endif
2081 
2082 	return 0;
2083 }
2084 
2085 /*
2086  * reset ac97 codec
2087  */
2088 
2089 static void snd_es1968_ac97_reset(struct es1968 *chip)
2090 {
2091 	unsigned long ioaddr = chip->io_port;
2092 
2093 	unsigned short save_ringbus_a;
2094 	unsigned short save_68;
2095 	unsigned short w;
2096 	unsigned int vend;
2097 
2098 	/* save configuration */
2099 	save_ringbus_a = inw(ioaddr + 0x36);
2100 
2101 	//outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38); /* clear second codec id? */
2102 	/* set command/status address i/o to 1st codec */
2103 	outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2104 	outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2105 
2106 	/* disable ac link */
2107 	outw(0x0000, ioaddr + 0x36);
2108 	save_68 = inw(ioaddr + 0x68);
2109 	pci_read_config_word(chip->pci, 0x58, &w);	/* something magical with gpio and bus arb. */
2110 	pci_read_config_dword(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2111 	if (w & 1)
2112 		save_68 |= 0x10;
2113 	outw(0xfffe, ioaddr + 0x64);	/* unmask gpio 0 */
2114 	outw(0x0001, ioaddr + 0x68);	/* gpio write */
2115 	outw(0x0000, ioaddr + 0x60);	/* write 0 to gpio 0 */
2116 	udelay(20);
2117 	outw(0x0001, ioaddr + 0x60);	/* write 1 to gpio 1 */
2118 	msleep(20);
2119 
2120 	outw(save_68 | 0x1, ioaddr + 0x68);	/* now restore .. */
2121 	outw((inw(ioaddr + 0x38) & 0xfffc) | 0x1, ioaddr + 0x38);
2122 	outw((inw(ioaddr + 0x3a) & 0xfffc) | 0x1, ioaddr + 0x3a);
2123 	outw((inw(ioaddr + 0x3c) & 0xfffc) | 0x1, ioaddr + 0x3c);
2124 
2125 	/* now the second codec */
2126 	/* disable ac link */
2127 	outw(0x0000, ioaddr + 0x36);
2128 	outw(0xfff7, ioaddr + 0x64);	/* unmask gpio 3 */
2129 	save_68 = inw(ioaddr + 0x68);
2130 	outw(0x0009, ioaddr + 0x68);	/* gpio write 0 & 3 ?? */
2131 	outw(0x0001, ioaddr + 0x60);	/* write 1 to gpio */
2132 	udelay(20);
2133 	outw(0x0009, ioaddr + 0x60);	/* write 9 to gpio */
2134 	msleep(500);
2135 	//outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38);
2136 	outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2137 	outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2138 
2139 #if 0				/* the loop here needs to be much better if we want it.. */
2140 	snd_printk(KERN_INFO "trying software reset\n");
2141 	/* try and do a software reset */
2142 	outb(0x80 | 0x7c, ioaddr + 0x30);
2143 	for (w = 0;; w++) {
2144 		if ((inw(ioaddr + 0x30) & 1) == 0) {
2145 			if (inb(ioaddr + 0x32) != 0)
2146 				break;
2147 
2148 			outb(0x80 | 0x7d, ioaddr + 0x30);
2149 			if (((inw(ioaddr + 0x30) & 1) == 0)
2150 			    && (inb(ioaddr + 0x32) != 0))
2151 				break;
2152 			outb(0x80 | 0x7f, ioaddr + 0x30);
2153 			if (((inw(ioaddr + 0x30) & 1) == 0)
2154 			    && (inb(ioaddr + 0x32) != 0))
2155 				break;
2156 		}
2157 
2158 		if (w > 10000) {
2159 			outb(inb(ioaddr + 0x37) | 0x08, ioaddr + 0x37);	/* do a software reset */
2160 			msleep(500);	/* oh my.. */
2161 			outb(inb(ioaddr + 0x37) & ~0x08,
2162 				ioaddr + 0x37);
2163 			udelay(1);
2164 			outw(0x80, ioaddr + 0x30);
2165 			for (w = 0; w < 10000; w++) {
2166 				if ((inw(ioaddr + 0x30) & 1) == 0)
2167 					break;
2168 			}
2169 		}
2170 	}
2171 #endif
2172 	if (vend == NEC_VERSA_SUBID1 || vend == NEC_VERSA_SUBID2) {
2173 		/* turn on external amp? */
2174 		outw(0xf9ff, ioaddr + 0x64);
2175 		outw(inw(ioaddr + 0x68) | 0x600, ioaddr + 0x68);
2176 		outw(0x0209, ioaddr + 0x60);
2177 	}
2178 
2179 	/* restore.. */
2180 	outw(save_ringbus_a, ioaddr + 0x36);
2181 
2182 	/* Turn on the 978 docking chip.
2183 	   First frob the "master output enable" bit,
2184 	   then set most of the playback volume control registers to max. */
2185 	outb(inb(ioaddr+0xc0)|(1<<5), ioaddr+0xc0);
2186 	outb(0xff, ioaddr+0xc3);
2187 	outb(0xff, ioaddr+0xc4);
2188 	outb(0xff, ioaddr+0xc6);
2189 	outb(0xff, ioaddr+0xc8);
2190 	outb(0x3f, ioaddr+0xcf);
2191 	outb(0x3f, ioaddr+0xd0);
2192 }
2193 
2194 static void snd_es1968_reset(struct es1968 *chip)
2195 {
2196 	/* Reset */
2197 	outw(ESM_RESET_MAESTRO | ESM_RESET_DIRECTSOUND,
2198 	     chip->io_port + ESM_PORT_HOST_IRQ);
2199 	udelay(10);
2200 	outw(0x0000, chip->io_port + ESM_PORT_HOST_IRQ);
2201 	udelay(10);
2202 }
2203 
2204 /*
2205  * initialize maestro chip
2206  */
2207 static void snd_es1968_chip_init(struct es1968 *chip)
2208 {
2209 	struct pci_dev *pci = chip->pci;
2210 	int i;
2211 	unsigned long iobase  = chip->io_port;
2212 	u16 w;
2213 	u32 n;
2214 
2215 	/* We used to muck around with pci config space that
2216 	 * we had no business messing with.  We don't know enough
2217 	 * about the machine to know which DMA mode is appropriate,
2218 	 * etc.  We were guessing wrong on some machines and making
2219 	 * them unhappy.  We now trust in the BIOS to do things right,
2220 	 * which almost certainly means a new host of problems will
2221 	 * arise with broken BIOS implementations.  screw 'em.
2222 	 * We're already intolerant of machines that don't assign
2223 	 * IRQs.
2224 	 */
2225 
2226 	/* Config Reg A */
2227 	pci_read_config_word(pci, ESM_CONFIG_A, &w);
2228 
2229 	w &= ~DMA_CLEAR;	/* Clear DMA bits */
2230 	w &= ~(PIC_SNOOP1 | PIC_SNOOP2);	/* Clear Pic Snoop Mode Bits */
2231 	w &= ~SAFEGUARD;	/* Safeguard off */
2232 	w |= POST_WRITE;	/* Posted write */
2233 	w |= PCI_TIMING;	/* PCI timing on */
2234 	/* XXX huh?  claims to be reserved.. */
2235 	w &= ~SWAP_LR;		/* swap left/right
2236 				   seems to only have effect on SB
2237 				   Emulation */
2238 	w &= ~SUBTR_DECODE;	/* Subtractive decode off */
2239 
2240 	pci_write_config_word(pci, ESM_CONFIG_A, w);
2241 
2242 	/* Config Reg B */
2243 
2244 	pci_read_config_word(pci, ESM_CONFIG_B, &w);
2245 
2246 	w &= ~(1 << 15);	/* Turn off internal clock multiplier */
2247 	/* XXX how do we know which to use? */
2248 	w &= ~(1 << 14);	/* External clock */
2249 
2250 	w &= ~SPDIF_CONFB;	/* disable S/PDIF output */
2251 	w |= HWV_CONFB;		/* HWV on */
2252 	w |= DEBOUNCE;		/* Debounce off: easier to push the HW buttons */
2253 	w &= ~GPIO_CONFB;	/* GPIO 4:5 */
2254 	w |= CHI_CONFB;		/* Disconnect from the CHI.  Enabling this made a dell 7500 work. */
2255 	w &= ~IDMA_CONFB;	/* IDMA off (undocumented) */
2256 	w &= ~MIDI_FIX;		/* MIDI fix off (undoc) */
2257 	w &= ~(1 << 1);		/* reserved, always write 0 */
2258 	w &= ~IRQ_TO_ISA;	/* IRQ to ISA off (undoc) */
2259 
2260 	pci_write_config_word(pci, ESM_CONFIG_B, w);
2261 
2262 	/* DDMA off */
2263 
2264 	pci_read_config_word(pci, ESM_DDMA, &w);
2265 	w &= ~(1 << 0);
2266 	pci_write_config_word(pci, ESM_DDMA, w);
2267 
2268 	/*
2269 	 *	Legacy mode
2270 	 */
2271 
2272 	pci_read_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, &w);
2273 
2274 	w |= ESS_DISABLE_AUDIO;	/* Disable Legacy Audio */
2275 	w &= ~ESS_ENABLE_SERIAL_IRQ;	/* Disable SIRQ */
2276 	w &= ~(0x1f);		/* disable mpu irq/io, game port, fm, SB */
2277 
2278 	pci_write_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, w);
2279 
2280 	/* Set up 978 docking control chip. */
2281 	pci_read_config_word(pci, 0x58, &w);
2282 	w|=1<<2;	/* Enable 978. */
2283 	w|=1<<3;	/* Turn on 978 hardware volume control. */
2284 	w&=~(1<<11);	/* Turn on 978 mixer volume control. */
2285 	pci_write_config_word(pci, 0x58, w);
2286 
2287 	/* Sound Reset */
2288 
2289 	snd_es1968_reset(chip);
2290 
2291 	/*
2292 	 *	Ring Bus Setup
2293 	 */
2294 
2295 	/* setup usual 0x34 stuff.. 0x36 may be chip specific */
2296 	outw(0xC090, iobase + ESM_RING_BUS_DEST); /* direct sound, stereo */
2297 	udelay(20);
2298 	outw(0x3000, iobase + ESM_RING_BUS_CONTR_A); /* enable ringbus/serial */
2299 	udelay(20);
2300 
2301 	/*
2302 	 *	Reset the CODEC
2303 	 */
2304 
2305 	snd_es1968_ac97_reset(chip);
2306 
2307 	/* Ring Bus Control B */
2308 
2309 	n = inl(iobase + ESM_RING_BUS_CONTR_B);
2310 	n &= ~RINGB_EN_SPDIF;	/* SPDIF off */
2311 	//w |= RINGB_EN_2CODEC;	/* enable 2nd codec */
2312 	outl(n, iobase + ESM_RING_BUS_CONTR_B);
2313 
2314 	/* Set hardware volume control registers to midpoints.
2315 	   We can tell which button was pushed based on how they change. */
2316 	outb(0x88, iobase+0x1c);
2317 	outb(0x88, iobase+0x1d);
2318 	outb(0x88, iobase+0x1e);
2319 	outb(0x88, iobase+0x1f);
2320 
2321 	/* it appears some maestros (dell 7500) only work if these are set,
2322 	   regardless of wether we use the assp or not. */
2323 
2324 	outb(0, iobase + ASSP_CONTROL_B);
2325 	outb(3, iobase + ASSP_CONTROL_A);	/* M: Reserved bits... */
2326 	outb(0, iobase + ASSP_CONTROL_C);	/* M: Disable ASSP, ASSP IRQ's and FM Port */
2327 
2328 	/*
2329 	 * set up wavecache
2330 	 */
2331 	for (i = 0; i < 16; i++) {
2332 		/* Write 0 into the buffer area 0x1E0->1EF */
2333 		outw(0x01E0 + i, iobase + WC_INDEX);
2334 		outw(0x0000, iobase + WC_DATA);
2335 
2336 		/* The 1.10 test program seem to write 0 into the buffer area
2337 		 * 0x1D0-0x1DF too.*/
2338 		outw(0x01D0 + i, iobase + WC_INDEX);
2339 		outw(0x0000, iobase + WC_DATA);
2340 	}
2341 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2342 			  (wave_get_register(chip, IDR7_WAVE_ROMRAM) & 0xFF00));
2343 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2344 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) | 0x100);
2345 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2346 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) & ~0x200);
2347 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2348 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) | ~0x400);
2349 
2350 
2351 	maestro_write(chip, IDR2_CRAM_DATA, 0x0000);
2352 	/* Now back to the DirectSound stuff */
2353 	/* audio serial configuration.. ? */
2354 	maestro_write(chip, 0x08, 0xB004);
2355 	maestro_write(chip, 0x09, 0x001B);
2356 	maestro_write(chip, 0x0A, 0x8000);
2357 	maestro_write(chip, 0x0B, 0x3F37);
2358 	maestro_write(chip, 0x0C, 0x0098);
2359 
2360 	/* parallel in, has something to do with recording :) */
2361 	maestro_write(chip, 0x0C,
2362 		      (maestro_read(chip, 0x0C) & ~0xF000) | 0x8000);
2363 	/* parallel out */
2364 	maestro_write(chip, 0x0C,
2365 		      (maestro_read(chip, 0x0C) & ~0x0F00) | 0x0500);
2366 
2367 	maestro_write(chip, 0x0D, 0x7632);
2368 
2369 	/* Wave cache control on - test off, sg off,
2370 	   enable, enable extra chans 1Mb */
2371 
2372 	w = inw(iobase + WC_CONTROL);
2373 
2374 	w &= ~0xFA00;		/* Seems to be reserved? I don't know */
2375 	w |= 0xA000;		/* reserved... I don't know */
2376 	w &= ~0x0200;		/* Channels 56,57,58,59 as Extra Play,Rec Channel enable
2377 				   Seems to crash the Computer if enabled... */
2378 	w |= 0x0100;		/* Wave Cache Operation Enabled */
2379 	w |= 0x0080;		/* Channels 60/61 as Placback/Record enabled */
2380 	w &= ~0x0060;		/* Clear Wavtable Size */
2381 	w |= 0x0020;		/* Wavetable Size : 1MB */
2382 	/* Bit 4 is reserved */
2383 	w &= ~0x000C;		/* DMA Stuff? I don't understand what the datasheet means */
2384 	/* Bit 1 is reserved */
2385 	w &= ~0x0001;		/* Test Mode off */
2386 
2387 	outw(w, iobase + WC_CONTROL);
2388 
2389 	/* Now clear the APU control ram */
2390 	for (i = 0; i < NR_APUS; i++) {
2391 		for (w = 0; w < NR_APU_REGS; w++)
2392 			apu_set_register(chip, i, w, 0);
2393 
2394 	}
2395 }
2396 
2397 /* Enable IRQ's */
2398 static void snd_es1968_start_irq(struct es1968 *chip)
2399 {
2400 	unsigned short w;
2401 	w = ESM_HIRQ_DSIE | ESM_HIRQ_HW_VOLUME;
2402 	if (chip->rmidi)
2403 		w |= ESM_HIRQ_MPU401;
2404 	outb(w, chip->io_port + 0x1A);
2405 	outw(w, chip->io_port + ESM_PORT_HOST_IRQ);
2406 }
2407 
2408 #ifdef CONFIG_PM
2409 /*
2410  * PM support
2411  */
2412 static int es1968_suspend(struct pci_dev *pci, pm_message_t state)
2413 {
2414 	struct snd_card *card = pci_get_drvdata(pci);
2415 	struct es1968 *chip = card->private_data;
2416 
2417 	if (! chip->do_pm)
2418 		return 0;
2419 
2420 	chip->in_suspend = 1;
2421 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2422 	snd_pcm_suspend_all(chip->pcm);
2423 	snd_ac97_suspend(chip->ac97);
2424 	snd_es1968_bob_stop(chip);
2425 
2426 	pci_disable_device(pci);
2427 	pci_save_state(pci);
2428 	pci_set_power_state(pci, pci_choose_state(pci, state));
2429 	return 0;
2430 }
2431 
2432 static int es1968_resume(struct pci_dev *pci)
2433 {
2434 	struct snd_card *card = pci_get_drvdata(pci);
2435 	struct es1968 *chip = card->private_data;
2436 	struct esschan *es;
2437 
2438 	if (! chip->do_pm)
2439 		return 0;
2440 
2441 	/* restore all our config */
2442 	pci_set_power_state(pci, PCI_D0);
2443 	pci_restore_state(pci);
2444 	if (pci_enable_device(pci) < 0) {
2445 		printk(KERN_ERR "es1968: pci_enable_device failed, "
2446 		       "disabling device\n");
2447 		snd_card_disconnect(card);
2448 		return -EIO;
2449 	}
2450 	pci_set_master(pci);
2451 
2452 	snd_es1968_chip_init(chip);
2453 
2454 	/* need to restore the base pointers.. */
2455 	if (chip->dma.addr) {
2456 		/* set PCMBAR */
2457 		wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
2458 	}
2459 
2460 	snd_es1968_start_irq(chip);
2461 
2462 	/* restore ac97 state */
2463 	snd_ac97_resume(chip->ac97);
2464 
2465 	list_for_each_entry(es, &chip->substream_list, list) {
2466 		switch (es->mode) {
2467 		case ESM_MODE_PLAY:
2468 			snd_es1968_playback_setup(chip, es, es->substream->runtime);
2469 			break;
2470 		case ESM_MODE_CAPTURE:
2471 			snd_es1968_capture_setup(chip, es, es->substream->runtime);
2472 			break;
2473 		}
2474 	}
2475 
2476 	/* start timer again */
2477 	if (chip->bobclient)
2478 		snd_es1968_bob_start(chip);
2479 
2480 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2481 	chip->in_suspend = 0;
2482 	return 0;
2483 }
2484 #endif /* CONFIG_PM */
2485 
2486 #ifdef SUPPORT_JOYSTICK
2487 #define JOYSTICK_ADDR	0x200
2488 static int __devinit snd_es1968_create_gameport(struct es1968 *chip, int dev)
2489 {
2490 	struct gameport *gp;
2491 	struct resource *r;
2492 	u16 val;
2493 
2494 	if (!joystick[dev])
2495 		return -ENODEV;
2496 
2497 	r = request_region(JOYSTICK_ADDR, 8, "ES1968 gameport");
2498 	if (!r)
2499 		return -EBUSY;
2500 
2501 	chip->gameport = gp = gameport_allocate_port();
2502 	if (!gp) {
2503 		printk(KERN_ERR "es1968: cannot allocate memory for gameport\n");
2504 		release_and_free_resource(r);
2505 		return -ENOMEM;
2506 	}
2507 
2508 	pci_read_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, &val);
2509 	pci_write_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, val | 0x04);
2510 
2511 	gameport_set_name(gp, "ES1968 Gameport");
2512 	gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci));
2513 	gameport_set_dev_parent(gp, &chip->pci->dev);
2514 	gp->io = JOYSTICK_ADDR;
2515 	gameport_set_port_data(gp, r);
2516 
2517 	gameport_register_port(gp);
2518 
2519 	return 0;
2520 }
2521 
2522 static void snd_es1968_free_gameport(struct es1968 *chip)
2523 {
2524 	if (chip->gameport) {
2525 		struct resource *r = gameport_get_port_data(chip->gameport);
2526 
2527 		gameport_unregister_port(chip->gameport);
2528 		chip->gameport = NULL;
2529 
2530 		release_and_free_resource(r);
2531 	}
2532 }
2533 #else
2534 static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
2535 static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
2536 #endif
2537 
2538 #ifdef CONFIG_SND_ES1968_INPUT
2539 static int __devinit snd_es1968_input_register(struct es1968 *chip)
2540 {
2541 	struct input_dev *input_dev;
2542 	int err;
2543 
2544 	input_dev = input_allocate_device();
2545 	if (!input_dev)
2546 		return -ENOMEM;
2547 
2548 	snprintf(chip->phys, sizeof(chip->phys), "pci-%s/input0",
2549 		 pci_name(chip->pci));
2550 
2551 	input_dev->name = chip->card->driver;
2552 	input_dev->phys = chip->phys;
2553 	input_dev->id.bustype = BUS_PCI;
2554 	input_dev->id.vendor  = chip->pci->vendor;
2555 	input_dev->id.product = chip->pci->device;
2556 	input_dev->dev.parent = &chip->pci->dev;
2557 
2558 	__set_bit(EV_KEY, input_dev->evbit);
2559 	__set_bit(KEY_MUTE, input_dev->keybit);
2560 	__set_bit(KEY_VOLUMEDOWN, input_dev->keybit);
2561 	__set_bit(KEY_VOLUMEUP, input_dev->keybit);
2562 
2563 	err = input_register_device(input_dev);
2564 	if (err) {
2565 		input_free_device(input_dev);
2566 		return err;
2567 	}
2568 
2569 	chip->input_dev = input_dev;
2570 	return 0;
2571 }
2572 #endif /* CONFIG_SND_ES1968_INPUT */
2573 
2574 static int snd_es1968_free(struct es1968 *chip)
2575 {
2576 #ifdef CONFIG_SND_ES1968_INPUT
2577 	if (chip->input_dev)
2578 		input_unregister_device(chip->input_dev);
2579 #endif
2580 
2581 	if (chip->io_port) {
2582 		if (chip->irq >= 0)
2583 			synchronize_irq(chip->irq);
2584 		outw(1, chip->io_port + 0x04); /* clear WP interrupts */
2585 		outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
2586 	}
2587 
2588 	if (chip->irq >= 0)
2589 		free_irq(chip->irq, chip);
2590 	snd_es1968_free_gameport(chip);
2591 	pci_release_regions(chip->pci);
2592 	pci_disable_device(chip->pci);
2593 	kfree(chip);
2594 	return 0;
2595 }
2596 
2597 static int snd_es1968_dev_free(struct snd_device *device)
2598 {
2599 	struct es1968 *chip = device->device_data;
2600 	return snd_es1968_free(chip);
2601 }
2602 
2603 struct ess_device_list {
2604 	unsigned short type;	/* chip type */
2605 	unsigned short vendor;	/* subsystem vendor id */
2606 };
2607 
2608 static struct ess_device_list pm_whitelist[] __devinitdata = {
2609 	{ TYPE_MAESTRO2E, 0x0e11 },	/* Compaq Armada */
2610 	{ TYPE_MAESTRO2E, 0x1028 },
2611 	{ TYPE_MAESTRO2E, 0x103c },
2612 	{ TYPE_MAESTRO2E, 0x1179 },
2613 	{ TYPE_MAESTRO2E, 0x14c0 },	/* HP omnibook 4150 */
2614 	{ TYPE_MAESTRO2E, 0x1558 },
2615 };
2616 
2617 static struct ess_device_list mpu_blacklist[] __devinitdata = {
2618 	{ TYPE_MAESTRO2, 0x125d },
2619 };
2620 
2621 static int __devinit snd_es1968_create(struct snd_card *card,
2622 				       struct pci_dev *pci,
2623 				       int total_bufsize,
2624 				       int play_streams,
2625 				       int capt_streams,
2626 				       int chip_type,
2627 				       int do_pm,
2628 				       struct es1968 **chip_ret)
2629 {
2630 	static struct snd_device_ops ops = {
2631 		.dev_free =	snd_es1968_dev_free,
2632 	};
2633 	struct es1968 *chip;
2634 	int i, err;
2635 
2636 	*chip_ret = NULL;
2637 
2638 	/* enable PCI device */
2639 	if ((err = pci_enable_device(pci)) < 0)
2640 		return err;
2641 	/* check, if we can restrict PCI DMA transfers to 28 bits */
2642 	if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
2643 	    pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
2644 		snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2645 		pci_disable_device(pci);
2646 		return -ENXIO;
2647 	}
2648 
2649 	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
2650 	if (! chip) {
2651 		pci_disable_device(pci);
2652 		return -ENOMEM;
2653 	}
2654 
2655 	/* Set Vars */
2656 	chip->type = chip_type;
2657 	spin_lock_init(&chip->reg_lock);
2658 	spin_lock_init(&chip->substream_lock);
2659 	INIT_LIST_HEAD(&chip->buf_list);
2660 	INIT_LIST_HEAD(&chip->substream_list);
2661 	mutex_init(&chip->memory_mutex);
2662 #ifndef CONFIG_SND_ES1968_INPUT
2663 	spin_lock_init(&chip->ac97_lock);
2664 	tasklet_init(&chip->hwvol_tq, es1968_update_hw_volume, (unsigned long)chip);
2665 #endif
2666 	chip->card = card;
2667 	chip->pci = pci;
2668 	chip->irq = -1;
2669 	chip->total_bufsize = total_bufsize;	/* in bytes */
2670 	chip->playback_streams = play_streams;
2671 	chip->capture_streams = capt_streams;
2672 
2673 	if ((err = pci_request_regions(pci, "ESS Maestro")) < 0) {
2674 		kfree(chip);
2675 		pci_disable_device(pci);
2676 		return err;
2677 	}
2678 	chip->io_port = pci_resource_start(pci, 0);
2679 	if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_SHARED,
2680 			"ESS Maestro", chip)) {
2681 		snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
2682 		snd_es1968_free(chip);
2683 		return -EBUSY;
2684 	}
2685 	chip->irq = pci->irq;
2686 
2687 	/* Clear Maestro_map */
2688 	for (i = 0; i < 32; i++)
2689 		chip->maestro_map[i] = 0;
2690 
2691 	/* Clear Apu Map */
2692 	for (i = 0; i < NR_APUS; i++)
2693 		chip->apu[i] = ESM_APU_FREE;
2694 
2695 	/* just to be sure */
2696 	pci_set_master(pci);
2697 
2698 	if (do_pm > 1) {
2699 		/* disable power-management if not on the whitelist */
2700 		unsigned short vend;
2701 		pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2702 		for (i = 0; i < (int)ARRAY_SIZE(pm_whitelist); i++) {
2703 			if (chip->type == pm_whitelist[i].type &&
2704 			    vend == pm_whitelist[i].vendor) {
2705 				do_pm = 1;
2706 				break;
2707 			}
2708 		}
2709 		if (do_pm > 1) {
2710 			/* not matched; disabling pm */
2711 			printk(KERN_INFO "es1968: not attempting power management.\n");
2712 			do_pm = 0;
2713 		}
2714 	}
2715 	chip->do_pm = do_pm;
2716 
2717 	snd_es1968_chip_init(chip);
2718 
2719 	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
2720 		snd_es1968_free(chip);
2721 		return err;
2722 	}
2723 
2724 	snd_card_set_dev(card, &pci->dev);
2725 
2726 	*chip_ret = chip;
2727 
2728 	return 0;
2729 }
2730 
2731 
2732 /*
2733  */
2734 static int __devinit snd_es1968_probe(struct pci_dev *pci,
2735 				      const struct pci_device_id *pci_id)
2736 {
2737 	static int dev;
2738 	struct snd_card *card;
2739 	struct es1968 *chip;
2740 	unsigned int i;
2741 	int err;
2742 
2743 	if (dev >= SNDRV_CARDS)
2744 		return -ENODEV;
2745 	if (!enable[dev]) {
2746 		dev++;
2747 		return -ENOENT;
2748 	}
2749 
2750 	err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
2751 	if (err < 0)
2752 		return err;
2753 
2754 	if (total_bufsize[dev] < 128)
2755 		total_bufsize[dev] = 128;
2756 	if (total_bufsize[dev] > 4096)
2757 		total_bufsize[dev] = 4096;
2758 	if ((err = snd_es1968_create(card, pci,
2759 				     total_bufsize[dev] * 1024, /* in bytes */
2760 				     pcm_substreams_p[dev],
2761 				     pcm_substreams_c[dev],
2762 				     pci_id->driver_data,
2763 				     use_pm[dev],
2764 				     &chip)) < 0) {
2765 		snd_card_free(card);
2766 		return err;
2767 	}
2768 	card->private_data = chip;
2769 
2770 	switch (chip->type) {
2771 	case TYPE_MAESTRO2E:
2772 		strcpy(card->driver, "ES1978");
2773 		strcpy(card->shortname, "ESS ES1978 (Maestro 2E)");
2774 		break;
2775 	case TYPE_MAESTRO2:
2776 		strcpy(card->driver, "ES1968");
2777 		strcpy(card->shortname, "ESS ES1968 (Maestro 2)");
2778 		break;
2779 	case TYPE_MAESTRO:
2780 		strcpy(card->driver, "ESM1");
2781 		strcpy(card->shortname, "ESS Maestro 1");
2782 		break;
2783 	}
2784 
2785 	if ((err = snd_es1968_pcm(chip, 0)) < 0) {
2786 		snd_card_free(card);
2787 		return err;
2788 	}
2789 
2790 	if ((err = snd_es1968_mixer(chip)) < 0) {
2791 		snd_card_free(card);
2792 		return err;
2793 	}
2794 
2795 	if (enable_mpu[dev] == 2) {
2796 		/* check the black list */
2797 		unsigned short vend;
2798 		pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2799 		for (i = 0; i < ARRAY_SIZE(mpu_blacklist); i++) {
2800 			if (chip->type == mpu_blacklist[i].type &&
2801 			    vend == mpu_blacklist[i].vendor) {
2802 				enable_mpu[dev] = 0;
2803 				break;
2804 			}
2805 		}
2806 	}
2807 	if (enable_mpu[dev]) {
2808 		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
2809 					       chip->io_port + ESM_MPU401_PORT,
2810 					       MPU401_INFO_INTEGRATED,
2811 					       chip->irq, 0, &chip->rmidi)) < 0) {
2812 			printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
2813 		}
2814 	}
2815 
2816 	snd_es1968_create_gameport(chip, dev);
2817 
2818 #ifdef CONFIG_SND_ES1968_INPUT
2819 	err = snd_es1968_input_register(chip);
2820 	if (err)
2821 		snd_printk(KERN_WARNING "Input device registration "
2822 			"failed with error %i", err);
2823 #endif
2824 
2825 	snd_es1968_start_irq(chip);
2826 
2827 	chip->clock = clock[dev];
2828 	if (! chip->clock)
2829 		es1968_measure_clock(chip);
2830 
2831 	sprintf(card->longname, "%s at 0x%lx, irq %i",
2832 		card->shortname, chip->io_port, chip->irq);
2833 
2834 	if ((err = snd_card_register(card)) < 0) {
2835 		snd_card_free(card);
2836 		return err;
2837 	}
2838 	pci_set_drvdata(pci, card);
2839 	dev++;
2840 	return 0;
2841 }
2842 
2843 static void __devexit snd_es1968_remove(struct pci_dev *pci)
2844 {
2845 	snd_card_free(pci_get_drvdata(pci));
2846 	pci_set_drvdata(pci, NULL);
2847 }
2848 
2849 static struct pci_driver driver = {
2850 	.name = "ES1968 (ESS Maestro)",
2851 	.id_table = snd_es1968_ids,
2852 	.probe = snd_es1968_probe,
2853 	.remove = __devexit_p(snd_es1968_remove),
2854 #ifdef CONFIG_PM
2855 	.suspend = es1968_suspend,
2856 	.resume = es1968_resume,
2857 #endif
2858 };
2859 
2860 static int __init alsa_card_es1968_init(void)
2861 {
2862 	return pci_register_driver(&driver);
2863 }
2864 
2865 static void __exit alsa_card_es1968_exit(void)
2866 {
2867 	pci_unregister_driver(&driver);
2868 }
2869 
2870 module_init(alsa_card_es1968_init)
2871 module_exit(alsa_card_es1968_exit)
2872