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