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