Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
[pandora-kernel.git] / sound / pci / es1968.c
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)