[Bluetooth] Use work queue to trigger URB submission
[pandora-kernel.git] / sound / pci / es1968.c
1 /*
2  *  Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99)
3  *  Copyright (c) by Matze Braun <MatzeBraun@gmx.de>.
4  *                   Takashi Iwai <tiwai@suse.de>
5  *                  
6  *  Most of the driver code comes from Zach Brown(zab@redhat.com)
7  *      Alan Cox OSS Driver
8  *  Rewritted from card-es1938.c source.
9  *
10  *  TODO:
11  *   Perhaps Synth
12  *
13  *   This program is free software; you can redistribute it and/or modify
14  *   it under the terms of the GNU General Public License as published by
15  *   the Free Software Foundation; either version 2 of the License, or
16  *   (at your option) any later version.
17  *
18  *   This program is distributed in the hope that it will be useful,
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *   GNU General Public License for more details.
22  *
23  *   You should have received a copy of the GNU General Public License
24  *   along with this program; if not, write to the Free Software
25  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26  *
27  *
28  *  Notes from Zach Brown about the driver code
29  *
30  *  Hardware Description
31  *
32  *      A working Maestro setup contains the Maestro chip wired to a 
33  *      codec or 2.  In the Maestro we have the APUs, the ASSP, and the
34  *      Wavecache.  The APUs can be though of as virtual audio routing
35  *      channels.  They can take data from a number of sources and perform
36  *      basic encodings of the data.  The wavecache is a storehouse for
37  *      PCM data.  Typically it deals with PCI and interracts with the
38  *      APUs.  The ASSP is a wacky DSP like device that ESS is loth
39  *      to release docs on.  Thankfully it isn't required on the Maestro
40  *      until you start doing insane things like FM emulation and surround
41  *      encoding.  The codecs are almost always AC-97 compliant codecs, 
42  *      but it appears that early Maestros may have had PT101 (an ESS
43  *      part?) wired to them.  The only real difference in the Maestro
44  *      families is external goop like docking capability, memory for
45  *      the ASSP, and initialization differences.
46  *
47  *  Driver Operation
48  *
49  *      We only drive the APU/Wavecache as typical DACs and drive the
50  *      mixers in the codecs.  There are 64 APUs.  We assign 6 to each
51  *      /dev/dsp? device.  2 channels for output, and 4 channels for
52  *      input.
53  *
54  *      Each APU can do a number of things, but we only really use
55  *      3 basic functions.  For playback we use them to convert PCM
56  *      data fetched over PCI by the wavecahche into analog data that
57  *      is handed to the codec.  One APU for mono, and a pair for stereo.
58  *      When in stereo, the combination of smarts in the APU and Wavecache
59  *      decide which wavecache gets the left or right channel.
60  *
61  *      For record we still use the old overly mono system.  For each in
62  *      coming channel the data comes in from the codec, through a 'input'
63  *      APU, through another rate converter APU, and then into memory via
64  *      the wavecache and PCI.  If its stereo, we mash it back into LRLR in
65  *      software.  The pass between the 2 APUs is supposedly what requires us
66  *      to have a 512 byte buffer sitting around in wavecache/memory.
67  *
68  *      The wavecache makes our life even more fun.  First off, it can
69  *      only address the first 28 bits of PCI address space, making it
70  *      useless on quite a few architectures.  Secondly, its insane.
71  *      It claims to fetch from 4 regions of PCI space, each 4 meg in length.
72  *      But that doesn't really work.  You can only use 1 region.  So all our
73  *      allocations have to be in 4meg of each other.  Booo.  Hiss.
74  *      So we have a module parameter, dsps_order, that is the order of
75  *      the number of dsps to provide.  All their buffer space is allocated
76  *      on open time.  The sonicvibes OSS routines we inherited really want
77  *      power of 2 buffers, so we have all those next to each other, then
78  *      512 byte regions for the recording wavecaches.  This ends up
79  *      wasting quite a bit of memory.  The only fixes I can see would be 
80  *      getting a kernel allocator that could work in zones, or figuring out
81  *      just how to coerce the WP into doing what we want.
82  *
83  *      The indirection of the various registers means we have to spinlock
84  *      nearly all register accesses.  We have the main register indirection
85  *      like the wave cache, maestro registers, etc.  Then we have beasts
86  *      like the APU interface that is indirect registers gotten at through
87  *      the main maestro indirection.  Ouch.  We spinlock around the actual
88  *      ports on a per card basis.  This means spinlock activity at each IO
89  *      operation, but the only IO operation clusters are in non critical 
90  *      paths and it makes the code far easier to follow.  Interrupts are
91  *      blocked while holding the locks because the int handler has to
92  *      get at some of them :(.  The mixer interface doesn't, however.
93  *      We also have an OSS state lock that is thrown around in a few
94  *      places.
95  */
96
97 #include <sound/driver.h>
98 #include <asm/io.h>
99 #include <linux/delay.h>
100 #include <linux/interrupt.h>
101 #include <linux/init.h>
102 #include <linux/pci.h>
103 #include <linux/dma-mapping.h>
104 #include <linux/slab.h>
105 #include <linux/gameport.h>
106 #include <linux/moduleparam.h>
107 #include <linux/mutex.h>
108
109 #include <sound/core.h>
110 #include <sound/pcm.h>
111 #include <sound/mpu401.h>
112 #include <sound/ac97_codec.h>
113 #include <sound/initval.h>
114
115 #define CARD_NAME "ESS Maestro1/2"
116 #define DRIVER_NAME "ES1968"
117
118 MODULE_DESCRIPTION("ESS Maestro");
119 MODULE_LICENSE("GPL");
120 MODULE_SUPPORTED_DEVICE("{{ESS,Maestro 2e},"
121                 "{ESS,Maestro 2},"
122                 "{ESS,Maestro 1},"
123                 "{TerraTec,DMX}}");
124
125 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
126 #define SUPPORT_JOYSTICK 1
127 #endif
128
129 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 1-MAX */
130 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
131 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;      /* Enable this card */
132 static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
133 static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
134 static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
135 static int clock[SNDRV_CARDS];
136 static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
137 static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
138 #ifdef SUPPORT_JOYSTICK
139 static int joystick[SNDRV_CARDS];
140 #endif
141
142 module_param_array(index, int, NULL, 0444);
143 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
144 module_param_array(id, charp, NULL, 0444);
145 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
146 module_param_array(enable, bool, NULL, 0444);
147 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
148 module_param_array(total_bufsize, int, NULL, 0444);
149 MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
150 module_param_array(pcm_substreams_p, int, NULL, 0444);
151 MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
152 module_param_array(pcm_substreams_c, int, NULL, 0444);
153 MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
154 module_param_array(clock, int, NULL, 0444);
155 MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
156 module_param_array(use_pm, int, NULL, 0444);
157 MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
158 module_param_array(enable_mpu, int, NULL, 0444);
159 MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
160 #ifdef SUPPORT_JOYSTICK
161 module_param_array(joystick, bool, NULL, 0444);
162 MODULE_PARM_DESC(joystick, "Enable joystick.");
163 #endif
164
165
166 #define NR_APUS                 64
167 #define NR_APU_REGS             16
168
169 /* NEC Versas ? */
170 #define NEC_VERSA_SUBID1        0x80581033
171 #define NEC_VERSA_SUBID2        0x803c1033
172
173 /* Mode Flags */
174 #define ESS_FMT_STEREO          0x01
175 #define ESS_FMT_16BIT           0x02
176
177 #define DAC_RUNNING             1
178 #define ADC_RUNNING             2
179
180 /* Values for the ESM_LEGACY_AUDIO_CONTROL */
181
182 #define ESS_DISABLE_AUDIO       0x8000
183 #define ESS_ENABLE_SERIAL_IRQ   0x4000
184 #define IO_ADRESS_ALIAS         0x0020
185 #define MPU401_IRQ_ENABLE       0x0010
186 #define MPU401_IO_ENABLE        0x0008
187 #define GAME_IO_ENABLE          0x0004
188 #define FM_IO_ENABLE            0x0002
189 #define SB_IO_ENABLE            0x0001
190
191 /* Values for the ESM_CONFIG_A */
192
193 #define PIC_SNOOP1              0x4000
194 #define PIC_SNOOP2              0x2000
195 #define SAFEGUARD               0x0800
196 #define DMA_CLEAR               0x0700
197 #define DMA_DDMA                0x0000
198 #define DMA_TDMA                0x0100
199 #define DMA_PCPCI               0x0200
200 #define POST_WRITE              0x0080
201 #define PCI_TIMING              0x0040
202 #define SWAP_LR                 0x0020
203 #define SUBTR_DECODE            0x0002
204
205 /* Values for the ESM_CONFIG_B */
206
207 #define SPDIF_CONFB             0x0100
208 #define HWV_CONFB               0x0080
209 #define DEBOUNCE                0x0040
210 #define GPIO_CONFB              0x0020
211 #define CHI_CONFB               0x0010
212 #define IDMA_CONFB              0x0008  /*undoc */
213 #define MIDI_FIX                0x0004  /*undoc */
214 #define IRQ_TO_ISA              0x0001  /*undoc */
215
216 /* Values for Ring Bus Control B */
217 #define RINGB_2CODEC_ID_MASK    0x0003
218 #define RINGB_DIS_VALIDATION    0x0008
219 #define RINGB_EN_SPDIF          0x0010
220 #define RINGB_EN_2CODEC         0x0020
221 #define RINGB_SING_BIT_DUAL     0x0040
222
223 /* ****Port Adresses**** */
224
225 /*   Write & Read */
226 #define ESM_INDEX               0x02
227 #define ESM_DATA                0x00
228
229 /*   AC97 + RingBus */
230 #define ESM_AC97_INDEX          0x30
231 #define ESM_AC97_DATA           0x32
232 #define ESM_RING_BUS_DEST       0x34
233 #define ESM_RING_BUS_CONTR_A    0x36
234 #define ESM_RING_BUS_CONTR_B    0x38
235 #define ESM_RING_BUS_SDO        0x3A
236
237 /*   WaveCache*/
238 #define WC_INDEX                0x10
239 #define WC_DATA                 0x12
240 #define WC_CONTROL              0x14
241
242 /*   ASSP*/
243 #define ASSP_INDEX              0x80
244 #define ASSP_MEMORY             0x82
245 #define ASSP_DATA               0x84
246 #define ASSP_CONTROL_A          0xA2
247 #define ASSP_CONTROL_B          0xA4
248 #define ASSP_CONTROL_C          0xA6
249 #define ASSP_HOSTW_INDEX        0xA8
250 #define ASSP_HOSTW_DATA         0xAA
251 #define ASSP_HOSTW_IRQ          0xAC
252 /* Midi */
253 #define ESM_MPU401_PORT         0x98
254 /* Others */
255 #define ESM_PORT_HOST_IRQ       0x18
256
257 #define IDR0_DATA_PORT          0x00
258 #define IDR1_CRAM_POINTER       0x01
259 #define IDR2_CRAM_DATA          0x02
260 #define IDR3_WAVE_DATA          0x03
261 #define IDR4_WAVE_PTR_LOW       0x04
262 #define IDR5_WAVE_PTR_HI        0x05
263 #define IDR6_TIMER_CTRL         0x06
264 #define IDR7_WAVE_ROMRAM        0x07
265
266 #define WRITEABLE_MAP           0xEFFFFF
267 #define READABLE_MAP            0x64003F
268
269 /* PCI Register */
270
271 #define ESM_LEGACY_AUDIO_CONTROL 0x40
272 #define ESM_ACPI_COMMAND        0x54
273 #define ESM_CONFIG_A            0x50
274 #define ESM_CONFIG_B            0x52
275 #define ESM_DDMA                0x60
276
277 /* Bob Bits */
278 #define ESM_BOB_ENABLE          0x0001
279 #define ESM_BOB_START           0x0001
280
281 /* Host IRQ Control Bits */
282 #define ESM_RESET_MAESTRO       0x8000
283 #define ESM_RESET_DIRECTSOUND   0x4000
284 #define ESM_HIRQ_ClkRun         0x0100
285 #define ESM_HIRQ_HW_VOLUME      0x0040
286 #define ESM_HIRQ_HARPO          0x0030  /* What's that? */
287 #define ESM_HIRQ_ASSP           0x0010
288 #define ESM_HIRQ_DSIE           0x0004
289 #define ESM_HIRQ_MPU401         0x0002
290 #define ESM_HIRQ_SB             0x0001
291
292 /* Host IRQ Status Bits */
293 #define ESM_MPU401_IRQ          0x02
294 #define ESM_SB_IRQ              0x01
295 #define ESM_SOUND_IRQ           0x04
296 #define ESM_ASSP_IRQ            0x10
297 #define ESM_HWVOL_IRQ           0x40
298
299 #define ESS_SYSCLK              50000000
300 #define ESM_BOB_FREQ            200
301 #define ESM_BOB_FREQ_MAX        800
302
303 #define ESM_FREQ_ESM1           (49152000L / 1024L)     /* default rate 48000 */
304 #define ESM_FREQ_ESM2           (50000000L / 1024L)
305
306 /* APU Modes: reg 0x00, bit 4-7 */
307 #define ESM_APU_MODE_SHIFT      4
308 #define ESM_APU_MODE_MASK       (0xf << 4)
309 #define ESM_APU_OFF             0x00
310 #define ESM_APU_16BITLINEAR     0x01    /* 16-Bit Linear Sample Player */
311 #define ESM_APU_16BITSTEREO     0x02    /* 16-Bit Stereo Sample Player */
312 #define ESM_APU_8BITLINEAR      0x03    /* 8-Bit Linear Sample Player */
313 #define ESM_APU_8BITSTEREO      0x04    /* 8-Bit Stereo Sample Player */
314 #define ESM_APU_8BITDIFF        0x05    /* 8-Bit Differential Sample Playrer */
315 #define ESM_APU_DIGITALDELAY    0x06    /* Digital Delay Line */
316 #define ESM_APU_DUALTAP         0x07    /* Dual Tap Reader */
317 #define ESM_APU_CORRELATOR      0x08    /* Correlator */
318 #define ESM_APU_INPUTMIXER      0x09    /* Input Mixer */
319 #define ESM_APU_WAVETABLE       0x0A    /* Wave Table Mode */
320 #define ESM_APU_SRCONVERTOR     0x0B    /* Sample Rate Convertor */
321 #define ESM_APU_16BITPINGPONG   0x0C    /* 16-Bit Ping-Pong Sample Player */
322 #define ESM_APU_RESERVED1       0x0D    /* Reserved 1 */
323 #define ESM_APU_RESERVED2       0x0E    /* Reserved 2 */
324 #define ESM_APU_RESERVED3       0x0F    /* Reserved 3 */
325
326 /* reg 0x00 */
327 #define ESM_APU_FILTER_Q_SHIFT          0
328 #define ESM_APU_FILTER_Q_MASK           (3 << 0)
329 /* APU Filtey Q Control */
330 #define ESM_APU_FILTER_LESSQ    0x00
331 #define ESM_APU_FILTER_MOREQ    0x03
332
333 #define ESM_APU_FILTER_TYPE_SHIFT       2
334 #define ESM_APU_FILTER_TYPE_MASK        (3 << 2)
335 #define ESM_APU_ENV_TYPE_SHIFT          8
336 #define ESM_APU_ENV_TYPE_MASK           (3 << 8)
337 #define ESM_APU_ENV_STATE_SHIFT         10
338 #define ESM_APU_ENV_STATE_MASK          (3 << 10)
339 #define ESM_APU_END_CURVE               (1 << 12)
340 #define ESM_APU_INT_ON_LOOP             (1 << 13)
341 #define ESM_APU_DMA_ENABLE              (1 << 14)
342
343 /* reg 0x02 */
344 #define ESM_APU_SUBMIX_GROUP_SHIRT      0
345 #define ESM_APU_SUBMIX_GROUP_MASK       (7 << 0)
346 #define ESM_APU_SUBMIX_MODE             (1 << 3)
347 #define ESM_APU_6dB                     (1 << 4)
348 #define ESM_APU_DUAL_EFFECT             (1 << 5)
349 #define ESM_APU_EFFECT_CHANNELS_SHIFT   6
350 #define ESM_APU_EFFECT_CHANNELS_MASK    (3 << 6)
351
352 /* reg 0x03 */
353 #define ESM_APU_STEP_SIZE_MASK          0x0fff
354
355 /* reg 0x04 */
356 #define ESM_APU_PHASE_SHIFT             0
357 #define ESM_APU_PHASE_MASK              (0xff << 0)
358 #define ESM_APU_WAVE64K_PAGE_SHIFT      8       /* most 8bit of wave start offset */
359 #define ESM_APU_WAVE64K_PAGE_MASK       (0xff << 8)
360
361 /* reg 0x05 - wave start offset */
362 /* reg 0x06 - wave end offset */
363 /* reg 0x07 - wave loop length */
364
365 /* reg 0x08 */
366 #define ESM_APU_EFFECT_GAIN_SHIFT       0
367 #define ESM_APU_EFFECT_GAIN_MASK        (0xff << 0)
368 #define ESM_APU_TREMOLO_DEPTH_SHIFT     8
369 #define ESM_APU_TREMOLO_DEPTH_MASK      (0xf << 8)
370 #define ESM_APU_TREMOLO_RATE_SHIFT      12
371 #define ESM_APU_TREMOLO_RATE_MASK       (0xf << 12)
372
373 /* reg 0x09 */
374 /* bit 0-7 amplitude dest? */
375 #define ESM_APU_AMPLITUDE_NOW_SHIFT     8
376 #define ESM_APU_AMPLITUDE_NOW_MASK      (0xff << 8)
377
378 /* reg 0x0a */
379 #define ESM_APU_POLAR_PAN_SHIFT         0
380 #define ESM_APU_POLAR_PAN_MASK          (0x3f << 0)
381 /* Polar Pan Control */
382 #define ESM_APU_PAN_CENTER_CIRCLE               0x00
383 #define ESM_APU_PAN_MIDDLE_RADIUS               0x01
384 #define ESM_APU_PAN_OUTSIDE_RADIUS              0x02
385
386 #define ESM_APU_FILTER_TUNING_SHIFT     8
387 #define ESM_APU_FILTER_TUNING_MASK      (0xff << 8)
388
389 /* reg 0x0b */
390 #define ESM_APU_DATA_SRC_A_SHIFT        0
391 #define ESM_APU_DATA_SRC_A_MASK         (0x7f << 0)
392 #define ESM_APU_INV_POL_A               (1 << 7)
393 #define ESM_APU_DATA_SRC_B_SHIFT        8
394 #define ESM_APU_DATA_SRC_B_MASK         (0x7f << 8)
395 #define ESM_APU_INV_POL_B               (1 << 15)
396
397 #define ESM_APU_VIBRATO_RATE_SHIFT      0
398 #define ESM_APU_VIBRATO_RATE_MASK       (0xf << 0)
399 #define ESM_APU_VIBRATO_DEPTH_SHIFT     4
400 #define ESM_APU_VIBRATO_DEPTH_MASK      (0xf << 4)
401 #define ESM_APU_VIBRATO_PHASE_SHIFT     8
402 #define ESM_APU_VIBRATO_PHASE_MASK      (0xff << 8)
403
404 /* reg 0x0c */
405 #define ESM_APU_RADIUS_SELECT           (1 << 6)
406
407 /* APU Filter Control */
408 #define ESM_APU_FILTER_2POLE_LOPASS     0x00
409 #define ESM_APU_FILTER_2POLE_BANDPASS   0x01
410 #define ESM_APU_FILTER_2POLE_HIPASS     0x02
411 #define ESM_APU_FILTER_1POLE_LOPASS     0x03
412 #define ESM_APU_FILTER_1POLE_HIPASS     0x04
413 #define ESM_APU_FILTER_OFF              0x05
414
415 /* APU ATFP Type */
416 #define ESM_APU_ATFP_AMPLITUDE                  0x00
417 #define ESM_APU_ATFP_TREMELO                    0x01
418 #define ESM_APU_ATFP_FILTER                     0x02
419 #define ESM_APU_ATFP_PAN                        0x03
420
421 /* APU ATFP Flags */
422 #define ESM_APU_ATFP_FLG_OFF                    0x00
423 #define ESM_APU_ATFP_FLG_WAIT                   0x01
424 #define ESM_APU_ATFP_FLG_DONE                   0x02
425 #define ESM_APU_ATFP_FLG_INPROCESS              0x03
426
427
428 /* capture mixing buffer size */
429 #define ESM_MEM_ALIGN           0x1000
430 #define ESM_MIXBUF_SIZE         0x400
431
432 #define ESM_MODE_PLAY           0
433 #define ESM_MODE_CAPTURE        1
434
435 /* 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);
594
595 static struct pci_device_id snd_es1968_ids[] = {
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) & 0xee;
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         switch (x) {
1925         case 0x88:
1926                 /* mute */
1927                 val ^= 0x8000;
1928                 chip->ac97->regs[AC97_MASTER] = val;
1929                 outw(val, chip->io_port + ESM_AC97_DATA);
1930                 outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1931                 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1932                                &chip->master_switch->id);
1933                 break;
1934         case 0xaa:
1935                 /* volume up */
1936                 if ((val & 0x7f) > 0)
1937                         val--;
1938                 if ((val & 0x7f00) > 0)
1939                         val -= 0x0100;
1940                 chip->ac97->regs[AC97_MASTER] = val;
1941                 outw(val, chip->io_port + ESM_AC97_DATA);
1942                 outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1943                 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1944                                &chip->master_volume->id);
1945                 break;
1946         case 0x66:
1947                 /* volume down */
1948                 if ((val & 0x7f) < 0x1f)
1949                         val++;
1950                 if ((val & 0x7f00) < 0x1f00)
1951                         val += 0x0100;
1952                 chip->ac97->regs[AC97_MASTER] = val;
1953                 outw(val, chip->io_port + ESM_AC97_DATA);
1954                 outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1955                 snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1956                                &chip->master_volume->id);
1957                 break;
1958         }
1959         spin_unlock_irqrestore(&chip->ac97_lock, flags);
1960 }
1961
1962 /*
1963  * interrupt handler
1964  */
1965 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id)
1966 {
1967         struct es1968 *chip = dev_id;
1968         u32 event;
1969
1970         if (!(event = inb(chip->io_port + 0x1A)))
1971                 return IRQ_NONE;
1972
1973         outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
1974
1975         if (event & ESM_HWVOL_IRQ)
1976                 tasklet_hi_schedule(&chip->hwvol_tq); /* we'll do this later */
1977
1978         /* else ack 'em all, i imagine */
1979         outb(0xFF, chip->io_port + 0x1A);
1980
1981         if ((event & ESM_MPU401_IRQ) && chip->rmidi) {
1982                 snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
1983         }
1984
1985         if (event & ESM_SOUND_IRQ) {
1986                 struct list_head *p;
1987                 spin_lock(&chip->substream_lock);
1988                 list_for_each(p, &chip->substream_list) {
1989                         struct esschan *es = list_entry(p, struct esschan, list);
1990                         if (es->running)
1991                                 snd_es1968_update_pcm(chip, es);
1992                 }
1993                 spin_unlock(&chip->substream_lock);
1994                 if (chip->in_measurement) {
1995                         unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
1996                         if (curp < chip->measure_lastpos)
1997                                 chip->measure_count++;
1998                         chip->measure_lastpos = curp;
1999                 }
2000         }
2001
2002         return IRQ_HANDLED;
2003 }
2004
2005 /*
2006  *  Mixer stuff
2007  */
2008
2009 static int __devinit
2010 snd_es1968_mixer(struct es1968 *chip)
2011 {
2012         struct snd_ac97_bus *pbus;
2013         struct snd_ac97_template ac97;
2014         struct snd_ctl_elem_id id;
2015         int err;
2016         static struct snd_ac97_bus_ops ops = {
2017                 .write = snd_es1968_ac97_write,
2018                 .read = snd_es1968_ac97_read,
2019         };
2020
2021         if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
2022                 return err;
2023         pbus->no_vra = 1; /* ES1968 doesn't need VRA */
2024
2025         memset(&ac97, 0, sizeof(ac97));
2026         ac97.private_data = chip;
2027         if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97)) < 0)
2028                 return err;
2029
2030         /* attach master switch / volumes for h/w volume control */
2031         memset(&id, 0, sizeof(id));
2032         id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2033         strcpy(id.name, "Master Playback Switch");
2034         chip->master_switch = snd_ctl_find_id(chip->card, &id);
2035         memset(&id, 0, sizeof(id));
2036         id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2037         strcpy(id.name, "Master Playback Volume");
2038         chip->master_volume = snd_ctl_find_id(chip->card, &id);
2039
2040         return 0;
2041 }
2042
2043 /*
2044  * reset ac97 codec
2045  */
2046
2047 static void snd_es1968_ac97_reset(struct es1968 *chip)
2048 {
2049         unsigned long ioaddr = chip->io_port;
2050
2051         unsigned short save_ringbus_a;
2052         unsigned short save_68;
2053         unsigned short w;
2054         unsigned int vend;
2055
2056         /* save configuration */
2057         save_ringbus_a = inw(ioaddr + 0x36);
2058
2059         //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38); /* clear second codec id? */
2060         /* set command/status address i/o to 1st codec */
2061         outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2062         outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2063
2064         /* disable ac link */
2065         outw(0x0000, ioaddr + 0x36);
2066         save_68 = inw(ioaddr + 0x68);
2067         pci_read_config_word(chip->pci, 0x58, &w);      /* something magical with gpio and bus arb. */
2068         pci_read_config_dword(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2069         if (w & 1)
2070                 save_68 |= 0x10;
2071         outw(0xfffe, ioaddr + 0x64);    /* unmask gpio 0 */
2072         outw(0x0001, ioaddr + 0x68);    /* gpio write */
2073         outw(0x0000, ioaddr + 0x60);    /* write 0 to gpio 0 */
2074         udelay(20);
2075         outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio 1 */
2076         msleep(20);
2077
2078         outw(save_68 | 0x1, ioaddr + 0x68);     /* now restore .. */
2079         outw((inw(ioaddr + 0x38) & 0xfffc) | 0x1, ioaddr + 0x38);
2080         outw((inw(ioaddr + 0x3a) & 0xfffc) | 0x1, ioaddr + 0x3a);
2081         outw((inw(ioaddr + 0x3c) & 0xfffc) | 0x1, ioaddr + 0x3c);
2082
2083         /* now the second codec */
2084         /* disable ac link */
2085         outw(0x0000, ioaddr + 0x36);
2086         outw(0xfff7, ioaddr + 0x64);    /* unmask gpio 3 */
2087         save_68 = inw(ioaddr + 0x68);
2088         outw(0x0009, ioaddr + 0x68);    /* gpio write 0 & 3 ?? */
2089         outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio */
2090         udelay(20);
2091         outw(0x0009, ioaddr + 0x60);    /* write 9 to gpio */
2092         msleep(500);
2093         //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38);
2094         outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2095         outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2096
2097 #if 0                           /* the loop here needs to be much better if we want it.. */
2098         snd_printk(KERN_INFO "trying software reset\n");
2099         /* try and do a software reset */
2100         outb(0x80 | 0x7c, ioaddr + 0x30);
2101         for (w = 0;; w++) {
2102                 if ((inw(ioaddr + 0x30) & 1) == 0) {
2103                         if (inb(ioaddr + 0x32) != 0)
2104                                 break;
2105
2106                         outb(0x80 | 0x7d, ioaddr + 0x30);
2107                         if (((inw(ioaddr + 0x30) & 1) == 0)
2108                             && (inb(ioaddr + 0x32) != 0))
2109                                 break;
2110                         outb(0x80 | 0x7f, ioaddr + 0x30);
2111                         if (((inw(ioaddr + 0x30) & 1) == 0)
2112                             && (inb(ioaddr + 0x32) != 0))
2113                                 break;
2114                 }
2115
2116                 if (w > 10000) {
2117                         outb(inb(ioaddr + 0x37) | 0x08, ioaddr + 0x37); /* do a software reset */
2118                         msleep(500);    /* oh my.. */
2119                         outb(inb(ioaddr + 0x37) & ~0x08,
2120                                 ioaddr + 0x37);
2121                         udelay(1);
2122                         outw(0x80, ioaddr + 0x30);
2123                         for (w = 0; w < 10000; w++) {
2124                                 if ((inw(ioaddr + 0x30) & 1) == 0)
2125                                         break;
2126                         }
2127                 }
2128         }
2129 #endif
2130         if (vend == NEC_VERSA_SUBID1 || vend == NEC_VERSA_SUBID2) {
2131                 /* turn on external amp? */
2132                 outw(0xf9ff, ioaddr + 0x64);
2133                 outw(inw(ioaddr + 0x68) | 0x600, ioaddr + 0x68);
2134                 outw(0x0209, ioaddr + 0x60);
2135         }
2136
2137         /* restore.. */
2138         outw(save_ringbus_a, ioaddr + 0x36);
2139
2140         /* Turn on the 978 docking chip.
2141            First frob the "master output enable" bit,
2142            then set most of the playback volume control registers to max. */
2143         outb(inb(ioaddr+0xc0)|(1<<5), ioaddr+0xc0);
2144         outb(0xff, ioaddr+0xc3);
2145         outb(0xff, ioaddr+0xc4);
2146         outb(0xff, ioaddr+0xc6);
2147         outb(0xff, ioaddr+0xc8);
2148         outb(0x3f, ioaddr+0xcf);
2149         outb(0x3f, ioaddr+0xd0);
2150 }
2151
2152 static void snd_es1968_reset(struct es1968 *chip)
2153 {
2154         /* Reset */
2155         outw(ESM_RESET_MAESTRO | ESM_RESET_DIRECTSOUND,
2156              chip->io_port + ESM_PORT_HOST_IRQ);
2157         udelay(10);
2158         outw(0x0000, chip->io_port + ESM_PORT_HOST_IRQ);
2159         udelay(10);
2160 }
2161
2162 /*
2163  * power management
2164  */
2165 static void snd_es1968_set_acpi(struct es1968 *chip, int state)
2166 {
2167         u16 active_mask = acpi_state_mask[state];
2168
2169         pci_set_power_state(chip->pci, state);
2170         /* make sure the units we care about are on 
2171                 XXX we might want to do this before state flipping? */
2172         pci_write_config_word(chip->pci, 0x54, ~ active_mask);
2173         pci_write_config_word(chip->pci, 0x56, ~ active_mask);
2174 }
2175
2176
2177 /*
2178  * initialize maestro chip
2179  */
2180 static void snd_es1968_chip_init(struct es1968 *chip)
2181 {
2182         struct pci_dev *pci = chip->pci;
2183         int i;
2184         unsigned long iobase  = chip->io_port;
2185         u16 w;
2186         u32 n;
2187
2188         /* We used to muck around with pci config space that
2189          * we had no business messing with.  We don't know enough
2190          * about the machine to know which DMA mode is appropriate, 
2191          * etc.  We were guessing wrong on some machines and making
2192          * them unhappy.  We now trust in the BIOS to do things right,
2193          * which almost certainly means a new host of problems will
2194          * arise with broken BIOS implementations.  screw 'em. 
2195          * We're already intolerant of machines that don't assign
2196          * IRQs.
2197          */
2198         
2199         /* do config work at full power */
2200         snd_es1968_set_acpi(chip, ACPI_D0);
2201
2202         /* Config Reg A */
2203         pci_read_config_word(pci, ESM_CONFIG_A, &w);
2204
2205         w &= ~DMA_CLEAR;        /* Clear DMA bits */
2206         w &= ~(PIC_SNOOP1 | PIC_SNOOP2);        /* Clear Pic Snoop Mode Bits */
2207         w &= ~SAFEGUARD;        /* Safeguard off */
2208         w |= POST_WRITE;        /* Posted write */
2209         w |= PCI_TIMING;        /* PCI timing on */
2210         /* XXX huh?  claims to be reserved.. */
2211         w &= ~SWAP_LR;          /* swap left/right 
2212                                    seems to only have effect on SB
2213                                    Emulation */
2214         w &= ~SUBTR_DECODE;     /* Subtractive decode off */
2215
2216         pci_write_config_word(pci, ESM_CONFIG_A, w);
2217
2218         /* Config Reg B */
2219
2220         pci_read_config_word(pci, ESM_CONFIG_B, &w);
2221
2222         w &= ~(1 << 15);        /* Turn off internal clock multiplier */
2223         /* XXX how do we know which to use? */
2224         w &= ~(1 << 14);        /* External clock */
2225
2226         w &= ~SPDIF_CONFB;      /* disable S/PDIF output */
2227         w |= HWV_CONFB;         /* HWV on */
2228         w |= DEBOUNCE;          /* Debounce off: easier to push the HW buttons */
2229         w &= ~GPIO_CONFB;       /* GPIO 4:5 */
2230         w |= CHI_CONFB;         /* Disconnect from the CHI.  Enabling this made a dell 7500 work. */
2231         w &= ~IDMA_CONFB;       /* IDMA off (undocumented) */
2232         w &= ~MIDI_FIX;         /* MIDI fix off (undoc) */
2233         w &= ~(1 << 1);         /* reserved, always write 0 */
2234         w &= ~IRQ_TO_ISA;       /* IRQ to ISA off (undoc) */
2235
2236         pci_write_config_word(pci, ESM_CONFIG_B, w);
2237
2238         /* DDMA off */
2239
2240         pci_read_config_word(pci, ESM_DDMA, &w);
2241         w &= ~(1 << 0);
2242         pci_write_config_word(pci, ESM_DDMA, w);
2243
2244         /*
2245          *      Legacy mode
2246          */
2247
2248         pci_read_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, &w);
2249
2250         w |= ESS_DISABLE_AUDIO; /* Disable Legacy Audio */
2251         w &= ~ESS_ENABLE_SERIAL_IRQ;    /* Disable SIRQ */
2252         w &= ~(0x1f);           /* disable mpu irq/io, game port, fm, SB */
2253
2254         pci_write_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, w);
2255
2256         /* Set up 978 docking control chip. */
2257         pci_read_config_word(pci, 0x58, &w);
2258         w|=1<<2;        /* Enable 978. */
2259         w|=1<<3;        /* Turn on 978 hardware volume control. */
2260         w&=~(1<<11);    /* Turn on 978 mixer volume control. */
2261         pci_write_config_word(pci, 0x58, w);
2262         
2263         /* Sound Reset */
2264
2265         snd_es1968_reset(chip);
2266
2267         /*
2268          *      Ring Bus Setup
2269          */
2270
2271         /* setup usual 0x34 stuff.. 0x36 may be chip specific */
2272         outw(0xC090, iobase + ESM_RING_BUS_DEST); /* direct sound, stereo */
2273         udelay(20);
2274         outw(0x3000, iobase + ESM_RING_BUS_CONTR_A); /* enable ringbus/serial */
2275         udelay(20);
2276
2277         /*
2278          *      Reset the CODEC
2279          */
2280          
2281         snd_es1968_ac97_reset(chip);
2282
2283         /* Ring Bus Control B */
2284
2285         n = inl(iobase + ESM_RING_BUS_CONTR_B);
2286         n &= ~RINGB_EN_SPDIF;   /* SPDIF off */
2287         //w |= RINGB_EN_2CODEC; /* enable 2nd codec */
2288         outl(n, iobase + ESM_RING_BUS_CONTR_B);
2289
2290         /* Set hardware volume control registers to midpoints.
2291            We can tell which button was pushed based on how they change. */
2292         outb(0x88, iobase+0x1c);
2293         outb(0x88, iobase+0x1d);
2294         outb(0x88, iobase+0x1e);
2295         outb(0x88, iobase+0x1f);
2296
2297         /* it appears some maestros (dell 7500) only work if these are set,
2298            regardless of wether we use the assp or not. */
2299
2300         outb(0, iobase + ASSP_CONTROL_B);
2301         outb(3, iobase + ASSP_CONTROL_A);       /* M: Reserved bits... */
2302         outb(0, iobase + ASSP_CONTROL_C);       /* M: Disable ASSP, ASSP IRQ's and FM Port */
2303
2304         /*
2305          * set up wavecache
2306          */
2307         for (i = 0; i < 16; i++) {
2308                 /* Write 0 into the buffer area 0x1E0->1EF */
2309                 outw(0x01E0 + i, iobase + WC_INDEX);
2310                 outw(0x0000, iobase + WC_DATA);
2311
2312                 /* The 1.10 test program seem to write 0 into the buffer area
2313                  * 0x1D0-0x1DF too.*/
2314                 outw(0x01D0 + i, iobase + WC_INDEX);
2315                 outw(0x0000, iobase + WC_DATA);
2316         }
2317         wave_set_register(chip, IDR7_WAVE_ROMRAM,
2318                           (wave_get_register(chip, IDR7_WAVE_ROMRAM) & 0xFF00));
2319         wave_set_register(chip, IDR7_WAVE_ROMRAM,
2320                           wave_get_register(chip, IDR7_WAVE_ROMRAM) | 0x100);
2321         wave_set_register(chip, IDR7_WAVE_ROMRAM,
2322                           wave_get_register(chip, IDR7_WAVE_ROMRAM) & ~0x200);
2323         wave_set_register(chip, IDR7_WAVE_ROMRAM,
2324                           wave_get_register(chip, IDR7_WAVE_ROMRAM) | ~0x400);
2325
2326
2327         maestro_write(chip, IDR2_CRAM_DATA, 0x0000);
2328         /* Now back to the DirectSound stuff */
2329         /* audio serial configuration.. ? */
2330         maestro_write(chip, 0x08, 0xB004);
2331         maestro_write(chip, 0x09, 0x001B);
2332         maestro_write(chip, 0x0A, 0x8000);
2333         maestro_write(chip, 0x0B, 0x3F37);
2334         maestro_write(chip, 0x0C, 0x0098);
2335
2336         /* parallel in, has something to do with recording :) */
2337         maestro_write(chip, 0x0C,
2338                       (maestro_read(chip, 0x0C) & ~0xF000) | 0x8000);
2339         /* parallel out */
2340         maestro_write(chip, 0x0C,
2341                       (maestro_read(chip, 0x0C) & ~0x0F00) | 0x0500);
2342
2343         maestro_write(chip, 0x0D, 0x7632);
2344
2345         /* Wave cache control on - test off, sg off, 
2346            enable, enable extra chans 1Mb */
2347
2348         w = inw(iobase + WC_CONTROL);
2349
2350         w &= ~0xFA00;           /* Seems to be reserved? I don't know */
2351         w |= 0xA000;            /* reserved... I don't know */
2352         w &= ~0x0200;           /* Channels 56,57,58,59 as Extra Play,Rec Channel enable
2353                                    Seems to crash the Computer if enabled... */
2354         w |= 0x0100;            /* Wave Cache Operation Enabled */
2355         w |= 0x0080;            /* Channels 60/61 as Placback/Record enabled */
2356         w &= ~0x0060;           /* Clear Wavtable Size */
2357         w |= 0x0020;            /* Wavetable Size : 1MB */
2358         /* Bit 4 is reserved */
2359         w &= ~0x000C;           /* DMA Stuff? I don't understand what the datasheet means */
2360         /* Bit 1 is reserved */
2361         w &= ~0x0001;           /* Test Mode off */
2362
2363         outw(w, iobase + WC_CONTROL);
2364
2365         /* Now clear the APU control ram */
2366         for (i = 0; i < NR_APUS; i++) {
2367                 for (w = 0; w < NR_APU_REGS; w++)
2368                         apu_set_register(chip, i, w, 0);
2369
2370         }
2371 }
2372
2373 /* Enable IRQ's */
2374 static void snd_es1968_start_irq(struct es1968 *chip)
2375 {
2376         unsigned short w;
2377         w = ESM_HIRQ_DSIE | ESM_HIRQ_HW_VOLUME;
2378         if (chip->rmidi)
2379                 w |= ESM_HIRQ_MPU401;
2380         outw(w, chip->io_port + ESM_PORT_HOST_IRQ);
2381 }
2382
2383 #ifdef CONFIG_PM
2384 /*
2385  * PM support
2386  */
2387 static int es1968_suspend(struct pci_dev *pci, pm_message_t state)
2388 {
2389         struct snd_card *card = pci_get_drvdata(pci);
2390         struct es1968 *chip = card->private_data;
2391
2392         if (! chip->do_pm)
2393                 return 0;
2394
2395         chip->in_suspend = 1;
2396         snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2397         snd_pcm_suspend_all(chip->pcm);
2398         snd_ac97_suspend(chip->ac97);
2399         snd_es1968_bob_stop(chip);
2400         snd_es1968_set_acpi(chip, ACPI_D3);
2401         pci_disable_device(pci);
2402         pci_save_state(pci);
2403         return 0;
2404 }
2405
2406 static int es1968_resume(struct pci_dev *pci)
2407 {
2408         struct snd_card *card = pci_get_drvdata(pci);
2409         struct es1968 *chip = card->private_data;
2410         struct list_head *p;
2411
2412         if (! chip->do_pm)
2413                 return 0;
2414
2415         /* restore all our config */
2416         pci_restore_state(pci);
2417         pci_enable_device(pci);
2418         pci_set_master(pci);
2419         snd_es1968_chip_init(chip);
2420
2421         /* need to restore the base pointers.. */ 
2422         if (chip->dma.addr) {
2423                 /* set PCMBAR */
2424                 wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
2425         }
2426
2427         snd_es1968_start_irq(chip);
2428
2429         /* restore ac97 state */
2430         snd_ac97_resume(chip->ac97);
2431
2432         list_for_each(p, &chip->substream_list) {
2433                 struct esschan *es = list_entry(p, struct esschan, list);
2434                 switch (es->mode) {
2435                 case ESM_MODE_PLAY:
2436                         snd_es1968_playback_setup(chip, es, es->substream->runtime);
2437                         break;
2438                 case ESM_MODE_CAPTURE:
2439                         snd_es1968_capture_setup(chip, es, es->substream->runtime);
2440                         break;
2441                 }
2442         }
2443
2444         /* start timer again */
2445         if (chip->bobclient)
2446                 snd_es1968_bob_start(chip);
2447
2448         snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2449         chip->in_suspend = 0;
2450         return 0;
2451 }
2452 #endif /* CONFIG_PM */
2453
2454 #ifdef SUPPORT_JOYSTICK
2455 #define JOYSTICK_ADDR   0x200
2456 static int __devinit snd_es1968_create_gameport(struct es1968 *chip, int dev)
2457 {
2458         struct gameport *gp;
2459         struct resource *r;
2460         u16 val;
2461
2462         if (!joystick[dev])
2463                 return -ENODEV;
2464
2465         r = request_region(JOYSTICK_ADDR, 8, "ES1968 gameport");
2466         if (!r)
2467                 return -EBUSY;
2468
2469         chip->gameport = gp = gameport_allocate_port();
2470         if (!gp) {
2471                 printk(KERN_ERR "es1968: cannot allocate memory for gameport\n");
2472                 release_and_free_resource(r);
2473                 return -ENOMEM;
2474         }
2475
2476         pci_read_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, &val);
2477         pci_write_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, val | 0x04);
2478
2479         gameport_set_name(gp, "ES1968 Gameport");
2480         gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci));
2481         gameport_set_dev_parent(gp, &chip->pci->dev);
2482         gp->io = JOYSTICK_ADDR;
2483         gameport_set_port_data(gp, r);
2484
2485         gameport_register_port(gp);
2486
2487         return 0;
2488 }
2489
2490 static void snd_es1968_free_gameport(struct es1968 *chip)
2491 {
2492         if (chip->gameport) {
2493                 struct resource *r = gameport_get_port_data(chip->gameport);
2494
2495                 gameport_unregister_port(chip->gameport);
2496                 chip->gameport = NULL;
2497
2498                 release_and_free_resource(r);
2499         }
2500 }
2501 #else
2502 static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
2503 static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
2504 #endif
2505
2506 static int snd_es1968_free(struct es1968 *chip)
2507 {
2508         if (chip->io_port) {
2509                 synchronize_irq(chip->irq);
2510                 outw(1, chip->io_port + 0x04); /* clear WP interrupts */
2511                 outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
2512         }
2513
2514         if (chip->irq >= 0)
2515                 free_irq(chip->irq, (void *)chip);
2516         snd_es1968_free_gameport(chip);
2517         snd_es1968_set_acpi(chip, ACPI_D3);
2518         chip->master_switch = NULL;
2519         chip->master_volume = NULL;
2520         pci_release_regions(chip->pci);
2521         pci_disable_device(chip->pci);
2522         kfree(chip);
2523         return 0;
2524 }
2525
2526 static int snd_es1968_dev_free(struct snd_device *device)
2527 {
2528         struct es1968 *chip = device->device_data;
2529         return snd_es1968_free(chip);
2530 }
2531
2532 struct ess_device_list {
2533         unsigned short type;    /* chip type */
2534         unsigned short vendor;  /* subsystem vendor id */
2535 };
2536
2537 static struct ess_device_list pm_whitelist[] __devinitdata = {
2538         { TYPE_MAESTRO2E, 0x0e11 },     /* Compaq Armada */
2539         { TYPE_MAESTRO2E, 0x1028 },
2540         { TYPE_MAESTRO2E, 0x103c },
2541         { TYPE_MAESTRO2E, 0x1179 },
2542         { TYPE_MAESTRO2E, 0x14c0 },     /* HP omnibook 4150 */
2543         { TYPE_MAESTRO2E, 0x1558 },
2544 };
2545
2546 static struct ess_device_list mpu_blacklist[] __devinitdata = {
2547         { TYPE_MAESTRO2, 0x125d },
2548 };
2549
2550 static int __devinit snd_es1968_create(struct snd_card *card,
2551                                        struct pci_dev *pci,
2552                                        int total_bufsize,
2553                                        int play_streams,
2554                                        int capt_streams,
2555                                        int chip_type,
2556                                        int do_pm,
2557                                        struct es1968 **chip_ret)
2558 {
2559         static struct snd_device_ops ops = {
2560                 .dev_free =     snd_es1968_dev_free,
2561         };
2562         struct es1968 *chip;
2563         int i, err;
2564
2565         *chip_ret = NULL;
2566
2567         /* enable PCI device */
2568         if ((err = pci_enable_device(pci)) < 0)
2569                 return err;
2570         /* check, if we can restrict PCI DMA transfers to 28 bits */
2571         if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
2572             pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
2573                 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2574                 pci_disable_device(pci);
2575                 return -ENXIO;
2576         }
2577
2578         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
2579         if (! chip) {
2580                 pci_disable_device(pci);
2581                 return -ENOMEM;
2582         }
2583
2584         /* Set Vars */
2585         chip->type = chip_type;
2586         spin_lock_init(&chip->reg_lock);
2587         spin_lock_init(&chip->substream_lock);
2588         INIT_LIST_HEAD(&chip->buf_list);
2589         INIT_LIST_HEAD(&chip->substream_list);
2590         spin_lock_init(&chip->ac97_lock);
2591         mutex_init(&chip->memory_mutex);
2592         tasklet_init(&chip->hwvol_tq, es1968_update_hw_volume, (unsigned long)chip);
2593         chip->card = card;
2594         chip->pci = pci;
2595         chip->irq = -1;
2596         chip->total_bufsize = total_bufsize;    /* in bytes */
2597         chip->playback_streams = play_streams;
2598         chip->capture_streams = capt_streams;
2599
2600         if ((err = pci_request_regions(pci, "ESS Maestro")) < 0) {
2601                 kfree(chip);
2602                 pci_disable_device(pci);
2603                 return err;
2604         }
2605         chip->io_port = pci_resource_start(pci, 0);
2606         if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_DISABLED|IRQF_SHARED,
2607                         "ESS Maestro", (void*)chip)) {
2608                 snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
2609                 snd_es1968_free(chip);
2610                 return -EBUSY;
2611         }
2612         chip->irq = pci->irq;
2613                 
2614         /* Clear Maestro_map */
2615         for (i = 0; i < 32; i++)
2616                 chip->maestro_map[i] = 0;
2617
2618         /* Clear Apu Map */
2619         for (i = 0; i < NR_APUS; i++)
2620                 chip->apu[i] = ESM_APU_FREE;
2621
2622         /* just to be sure */
2623         pci_set_master(pci);
2624
2625         if (do_pm > 1) {
2626                 /* disable power-management if not on the whitelist */
2627                 unsigned short vend;
2628                 pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2629                 for (i = 0; i < (int)ARRAY_SIZE(pm_whitelist); i++) {
2630                         if (chip->type == pm_whitelist[i].type &&
2631                             vend == pm_whitelist[i].vendor) {
2632                                 do_pm = 1;
2633                                 break;
2634                         }
2635                 }
2636                 if (do_pm > 1) {
2637                         /* not matched; disabling pm */
2638                         printk(KERN_INFO "es1968: not attempting power management.\n");
2639                         do_pm = 0;
2640                 }
2641         }
2642         chip->do_pm = do_pm;
2643
2644         snd_es1968_chip_init(chip);
2645
2646         if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
2647                 snd_es1968_free(chip);
2648                 return err;
2649         }
2650
2651         snd_card_set_dev(card, &pci->dev);
2652
2653         *chip_ret = chip;
2654
2655         return 0;
2656 }
2657
2658
2659 /*
2660  */
2661 static int __devinit snd_es1968_probe(struct pci_dev *pci,
2662                                       const struct pci_device_id *pci_id)
2663 {
2664         static int dev;
2665         struct snd_card *card;
2666         struct es1968 *chip;
2667         unsigned int i;
2668         int err;
2669
2670         if (dev >= SNDRV_CARDS)
2671                 return -ENODEV;
2672         if (!enable[dev]) {
2673                 dev++;
2674                 return -ENOENT;
2675         }
2676
2677         card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
2678         if (!card)
2679                 return -ENOMEM;
2680                 
2681         if (total_bufsize[dev] < 128)
2682                 total_bufsize[dev] = 128;
2683         if (total_bufsize[dev] > 4096)
2684                 total_bufsize[dev] = 4096;
2685         if ((err = snd_es1968_create(card, pci,
2686                                      total_bufsize[dev] * 1024, /* in bytes */
2687                                      pcm_substreams_p[dev], 
2688                                      pcm_substreams_c[dev],
2689                                      pci_id->driver_data,
2690                                      use_pm[dev],
2691                                      &chip)) < 0) {
2692                 snd_card_free(card);
2693                 return err;
2694         }
2695         card->private_data = chip;
2696
2697         switch (chip->type) {
2698         case TYPE_MAESTRO2E:
2699                 strcpy(card->driver, "ES1978");
2700                 strcpy(card->shortname, "ESS ES1978 (Maestro 2E)");
2701                 break;
2702         case TYPE_MAESTRO2:
2703                 strcpy(card->driver, "ES1968");
2704                 strcpy(card->shortname, "ESS ES1968 (Maestro 2)");
2705                 break;
2706         case TYPE_MAESTRO:
2707                 strcpy(card->driver, "ESM1");
2708                 strcpy(card->shortname, "ESS Maestro 1");
2709                 break;
2710         }
2711
2712         if ((err = snd_es1968_pcm(chip, 0)) < 0) {
2713                 snd_card_free(card);
2714                 return err;
2715         }
2716
2717         if ((err = snd_es1968_mixer(chip)) < 0) {
2718                 snd_card_free(card);
2719                 return err;
2720         }
2721
2722         if (enable_mpu[dev] == 2) {
2723                 /* check the black list */
2724                 unsigned short vend;
2725                 pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2726                 for (i = 0; i < ARRAY_SIZE(mpu_blacklist); i++) {
2727                         if (chip->type == mpu_blacklist[i].type &&
2728                             vend == mpu_blacklist[i].vendor) {
2729                                 enable_mpu[dev] = 0;
2730                                 break;
2731                         }
2732                 }
2733         }
2734         if (enable_mpu[dev]) {
2735                 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
2736                                                chip->io_port + ESM_MPU401_PORT,
2737                                                MPU401_INFO_INTEGRATED,
2738                                                chip->irq, 0, &chip->rmidi)) < 0) {
2739                         printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
2740                 }
2741         }
2742
2743         snd_es1968_create_gameport(chip, dev);
2744
2745         snd_es1968_start_irq(chip);
2746
2747         chip->clock = clock[dev];
2748         if (! chip->clock)
2749                 es1968_measure_clock(chip);
2750
2751         sprintf(card->longname, "%s at 0x%lx, irq %i",
2752                 card->shortname, chip->io_port, chip->irq);
2753
2754         if ((err = snd_card_register(card)) < 0) {
2755                 snd_card_free(card);
2756                 return err;
2757         }
2758         pci_set_drvdata(pci, card);
2759         dev++;
2760         return 0;
2761 }
2762
2763 static void __devexit snd_es1968_remove(struct pci_dev *pci)
2764 {
2765         snd_card_free(pci_get_drvdata(pci));
2766         pci_set_drvdata(pci, NULL);
2767 }
2768
2769 static struct pci_driver driver = {
2770         .name = "ES1968 (ESS Maestro)",
2771         .id_table = snd_es1968_ids,
2772         .probe = snd_es1968_probe,
2773         .remove = __devexit_p(snd_es1968_remove),
2774 #ifdef CONFIG_PM
2775         .suspend = es1968_suspend,
2776         .resume = es1968_resume,
2777 #endif
2778 };
2779
2780 static int __init alsa_card_es1968_init(void)
2781 {
2782         return pci_register_driver(&driver);
2783 }
2784
2785 static void __exit alsa_card_es1968_exit(void)
2786 {
2787         pci_unregister_driver(&driver);
2788 }
2789
2790 module_init(alsa_card_es1968_init)
2791 module_exit(alsa_card_es1968_exit)