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