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