Ok. I didn't make 2.4.0 in 2000. Tough. I tried, but we had some
[davej-history.git] / drivers / sound / es1371.c
blobae22d6cacc9225fb29f9774b9f083c03861bc887
1 /*****************************************************************************/
3 /*
4 * es1371.c -- Creative Ensoniq ES1371.
6 * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch)
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 * Special thanks to Ensoniq
25 * Module command line parameters:
26 * joystick must be set to the base I/O-Port to be used for
27 * the gameport. Legal values are 0x200, 0x208, 0x210 and 0x218.
28 * The gameport is mirrored eight times.
30 * Supported devices:
31 * /dev/dsp standard /dev/dsp device, (mostly) OSS compatible
32 * /dev/mixer standard /dev/mixer device, (mostly) OSS compatible
33 * /dev/dsp1 additional DAC, like /dev/dsp, but outputs to mixer "SYNTH" setting
34 * /dev/midi simple MIDI UART interface, no ioctl
36 * NOTE: the card does not have any FM/Wavetable synthesizer, it is supposed
37 * to be done in software. That is what /dev/dac is for. By now (Q2 1998)
38 * there are several MIDI to PCM (WAV) packages, one of them is timidity.
40 * Revision history
41 * 04.06.1998 0.1 Initial release
42 * Mixer stuff should be overhauled; especially optional AC97 mixer bits
43 * should be detected. This results in strange behaviour of some mixer
44 * settings, like master volume and mic.
45 * 08.06.1998 0.2 First release using Alan Cox' soundcore instead of miscdevice
46 * 03.08.1998 0.3 Do not include modversions.h
47 * Now mixer behaviour can basically be selected between
48 * "OSS documented" and "OSS actual" behaviour
49 * 31.08.1998 0.4 Fix realplayer problems - dac.count issues
50 * 27.10.1998 0.5 Fix joystick support
51 * -- Oliver Neukum (c188@org.chemie.uni-muenchen.de)
52 * 10.12.1998 0.6 Fix drain_dac trying to wait on not yet initialized DMA
53 * 23.12.1998 0.7 Fix a few f_file & FMODE_ bugs
54 * Don't wake up app until there are fragsize bytes to read/write
55 * 06.01.1999 0.8 remove the silly SA_INTERRUPT flag.
56 * hopefully killed the egcs section type conflict
57 * 12.03.1999 0.9 cinfo.blocks should be reset after GETxPTR ioctl.
58 * reported by Johan Maes <joma@telindus.be>
59 * 22.03.1999 0.10 return EAGAIN instead of EBUSY when O_NONBLOCK
60 * read/write cannot be executed
61 * 07.04.1999 0.11 implemented the following ioctl's: SOUND_PCM_READ_RATE,
62 * SOUND_PCM_READ_CHANNELS, SOUND_PCM_READ_BITS;
63 * Alpha fixes reported by Peter Jones <pjones@redhat.com>
64 * Another Alpha fix (wait_src_ready in init routine)
65 * reported by "Ivan N. Kokshaysky" <ink@jurassic.park.msu.ru>
66 * Note: joystick address handling might still be wrong on archs
67 * other than i386
68 * 15.06.1999 0.12 Fix bad allocation bug.
69 * Thanks to Deti Fliegl <fliegl@in.tum.de>
70 * 28.06.1999 0.13 Add pci_set_master
71 * 03.08.1999 0.14 adapt to Linus' new __setup/__initcall
72 * added kernel command line option "es1371=joystickaddr"
73 * removed CONFIG_SOUND_ES1371_JOYPORT_BOOT kludge
74 * 10.08.1999 0.15 (Re)added S/PDIF module option for cards revision >= 4.
75 * Initial version by Dave Platt <dplatt@snulbug.mtview.ca.us>.
76 * module_init/__setup fixes
77 * 08.16.1999 0.16 Joe Cotellese <joec@ensoniq.com>
78 * Added detection for ES1371 revision ID so that we can
79 * detect the ES1373 and later parts.
80 * added AC97 #defines for readability
81 * added a /proc file system for dumping hardware state
82 * updated SRC and CODEC w/r functions to accomodate bugs
83 * in some versions of the ES137x chips.
84 * 31.08.1999 0.17 add spin_lock_init
85 * replaced current->state = x with set_current_state(x)
86 * 03.09.1999 0.18 change read semantics for MIDI to match
87 * OSS more closely; remove possible wakeup race
88 * 21.10.1999 0.19 Round sampling rates, requested by
89 * Kasamatsu Kenichi <t29w0267@ip.media.kyoto-u.ac.jp>
90 * 27.10.1999 0.20 Added SigmaTel 3D enhancement string
91 * Codec ID printing changes
92 * 28.10.1999 0.21 More waitqueue races fixed
93 * Joe Cotellese <joec@ensoniq.com>
94 * Changed PCI detection routine so we can more easily
95 * detect ES137x chip and derivatives.
96 * 05.01.2000 0.22 Should now work with rev7 boards; patch by
97 * Eric Lemar, elemar@cs.washington.edu
98 * 08.01.2000 0.23 Prevent some ioctl's from returning bad count values on underrun/overrun;
99 * Tim Janik's BSE (Bedevilled Sound Engine) found this
100 * 07.02.2000 0.24 Use pci_alloc_consistent and pci_register_driver
101 * 07.02.2000 0.25 Use ac97_codec
102 * 01.03.2000 0.26 SPDIF patch by Mikael Bouillot <mikael.bouillot@bigfoot.com>
103 * Use pci_module_init
104 * 21.11.2000 0.27 Initialize dma buffers in poll, otherwise poll may return a bogus mask
107 /*****************************************************************************/
109 #include <linux/version.h>
110 #include <linux/module.h>
111 #include <linux/string.h>
112 #include <linux/ioport.h>
113 #include <linux/sched.h>
114 #include <linux/delay.h>
115 #include <linux/sound.h>
116 #include <linux/malloc.h>
117 #include <linux/soundcard.h>
118 #include <linux/pci.h>
119 #include <linux/init.h>
120 #include <linux/poll.h>
121 #include <linux/bitops.h>
122 #include <linux/proc_fs.h>
123 #include <linux/spinlock.h>
124 #include <linux/smp_lock.h>
125 #include <linux/ac97_codec.h>
126 #include <linux/wrapper.h>
127 #include <asm/io.h>
128 #include <asm/dma.h>
129 #include <asm/uaccess.h>
130 #include <asm/hardirq.h>
132 /* --------------------------------------------------------------------- */
134 #undef OSS_DOCUMENTED_MIXER_SEMANTICS
135 #define ES1371_DEBUG
136 #define DBG(x) {}
137 /*#define DBG(x) {x}*/
139 /* --------------------------------------------------------------------- */
141 #ifndef PCI_VENDOR_ID_ENSONIQ
142 #define PCI_VENDOR_ID_ENSONIQ 0x1274
143 #endif
145 #ifndef PCI_VENDOR_ID_ECTIVA
146 #define PCI_VENDOR_ID_ECTIVA 0x1102
147 #endif
149 #ifndef PCI_DEVICE_ID_ENSONIQ_ES1371
150 #define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371
151 #endif
153 #ifndef PCI_DEVICE_ID_ENSONIQ_CT5880
154 #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880
155 #endif
157 #ifndef PCI_DEVICE_ID_ECTIVA_EV1938
158 #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938
159 #endif
161 /* ES1371 chip ID */
162 /* This is a little confusing because all ES1371 compatible chips have the
163 same DEVICE_ID, the only thing differentiating them is the REV_ID field.
164 This is only significant if you want to enable features on the later parts.
165 Yes, I know it's stupid and why didn't we use the sub IDs?
167 #define ES1371REV_ES1373_A 0x04
168 #define ES1371REV_ES1373_B 0x06
169 #define ES1371REV_CT5880_A 0x07
170 #define CT5880REV_CT5880_C 0x02
171 #define ES1371REV_ES1371_B 0x09
172 #define EV1938REV_EV1938_A 0x00
173 #define ES1371REV_ES1373_8 0x08
175 #define ES1371_MAGIC ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
177 #define ES1371_EXTENT 0x40
178 #define JOY_EXTENT 8
180 #define ES1371_REG_CONTROL 0x00
181 #define ES1371_REG_STATUS 0x04 /* on the 5880 it is control/status */
182 #define ES1371_REG_UART_DATA 0x08
183 #define ES1371_REG_UART_STATUS 0x09
184 #define ES1371_REG_UART_CONTROL 0x09
185 #define ES1371_REG_UART_TEST 0x0a
186 #define ES1371_REG_MEMPAGE 0x0c
187 #define ES1371_REG_SRCONV 0x10
188 #define ES1371_REG_CODEC 0x14
189 #define ES1371_REG_LEGACY 0x18
190 #define ES1371_REG_SERIAL_CONTROL 0x20
191 #define ES1371_REG_DAC1_SCOUNT 0x24
192 #define ES1371_REG_DAC2_SCOUNT 0x28
193 #define ES1371_REG_ADC_SCOUNT 0x2c
195 #define ES1371_REG_DAC1_FRAMEADR 0xc30
196 #define ES1371_REG_DAC1_FRAMECNT 0xc34
197 #define ES1371_REG_DAC2_FRAMEADR 0xc38
198 #define ES1371_REG_DAC2_FRAMECNT 0xc3c
199 #define ES1371_REG_ADC_FRAMEADR 0xd30
200 #define ES1371_REG_ADC_FRAMECNT 0xd34
202 #define ES1371_FMT_U8_MONO 0
203 #define ES1371_FMT_U8_STEREO 1
204 #define ES1371_FMT_S16_MONO 2
205 #define ES1371_FMT_S16_STEREO 3
206 #define ES1371_FMT_STEREO 1
207 #define ES1371_FMT_S16 2
208 #define ES1371_FMT_MASK 3
210 static const unsigned sample_size[] = { 1, 2, 2, 4 };
211 static const unsigned sample_shift[] = { 0, 1, 1, 2 };
213 #define CTRL_RECEN_B 0x08000000 /* 1 = don't mix analog in to digital out */
214 #define CTRL_SPDIFEN_B 0x04000000
215 #define CTRL_JOY_SHIFT 24
216 #define CTRL_JOY_MASK 3
217 #define CTRL_JOY_200 0x00000000 /* joystick base address */
218 #define CTRL_JOY_208 0x01000000
219 #define CTRL_JOY_210 0x02000000
220 #define CTRL_JOY_218 0x03000000
221 #define CTRL_GPIO_IN0 0x00100000 /* general purpose inputs/outputs */
222 #define CTRL_GPIO_IN1 0x00200000
223 #define CTRL_GPIO_IN2 0x00400000
224 #define CTRL_GPIO_IN3 0x00800000
225 #define CTRL_GPIO_OUT0 0x00010000
226 #define CTRL_GPIO_OUT1 0x00020000
227 #define CTRL_GPIO_OUT2 0x00040000
228 #define CTRL_GPIO_OUT3 0x00080000
229 #define CTRL_MSFMTSEL 0x00008000 /* MPEG serial data fmt: 0 = Sony, 1 = I2S */
230 #define CTRL_SYNCRES 0x00004000 /* AC97 warm reset */
231 #define CTRL_ADCSTOP 0x00002000 /* stop ADC transfers */
232 #define CTRL_PWR_INTRM 0x00001000 /* 1 = power level ints enabled */
233 #define CTRL_M_CB 0x00000800 /* recording source: 0 = ADC, 1 = MPEG */
234 #define CTRL_CCB_INTRM 0x00000400 /* 1 = CCB "voice" ints enabled */
235 #define CTRL_PDLEV0 0x00000000 /* power down level */
236 #define CTRL_PDLEV1 0x00000100
237 #define CTRL_PDLEV2 0x00000200
238 #define CTRL_PDLEV3 0x00000300
239 #define CTRL_BREQ 0x00000080 /* 1 = test mode (internal mem test) */
240 #define CTRL_DAC1_EN 0x00000040 /* enable DAC1 */
241 #define CTRL_DAC2_EN 0x00000020 /* enable DAC2 */
242 #define CTRL_ADC_EN 0x00000010 /* enable ADC */
243 #define CTRL_UART_EN 0x00000008 /* enable MIDI uart */
244 #define CTRL_JYSTK_EN 0x00000004 /* enable Joystick port */
245 #define CTRL_XTALCLKDIS 0x00000002 /* 1 = disable crystal clock input */
246 #define CTRL_PCICLKDIS 0x00000001 /* 1 = disable PCI clock distribution */
249 #define STAT_INTR 0x80000000 /* wired or of all interrupt bits */
250 #define CSTAT_5880_AC97_RST 0x20000000 /* CT5880 Reset bit */
251 #define STAT_EN_SPDIF 0x00040000 /* enable S/PDIF circuitry */
252 #define STAT_TS_SPDIF 0x00020000 /* test S/PDIF circuitry */
253 #define STAT_TESTMODE 0x00010000 /* test ASIC */
254 #define STAT_SYNC_ERR 0x00000100 /* 1 = codec sync error */
255 #define STAT_VC 0x000000c0 /* CCB int source, 0=DAC1, 1=DAC2, 2=ADC, 3=undef */
256 #define STAT_SH_VC 6
257 #define STAT_MPWR 0x00000020 /* power level interrupt */
258 #define STAT_MCCB 0x00000010 /* CCB int pending */
259 #define STAT_UART 0x00000008 /* UART int pending */
260 #define STAT_DAC1 0x00000004 /* DAC1 int pending */
261 #define STAT_DAC2 0x00000002 /* DAC2 int pending */
262 #define STAT_ADC 0x00000001 /* ADC int pending */
264 #define USTAT_RXINT 0x80 /* UART rx int pending */
265 #define USTAT_TXINT 0x04 /* UART tx int pending */
266 #define USTAT_TXRDY 0x02 /* UART tx ready */
267 #define USTAT_RXRDY 0x01 /* UART rx ready */
269 #define UCTRL_RXINTEN 0x80 /* 1 = enable RX ints */
270 #define UCTRL_TXINTEN 0x60 /* TX int enable field mask */
271 #define UCTRL_ENA_TXINT 0x20 /* enable TX int */
272 #define UCTRL_CNTRL 0x03 /* control field */
273 #define UCTRL_CNTRL_SWR 0x03 /* software reset command */
275 /* sample rate converter */
276 #define SRC_OKSTATE 1
278 #define SRC_RAMADDR_MASK 0xfe000000
279 #define SRC_RAMADDR_SHIFT 25
280 #define SRC_DAC1FREEZE (1UL << 21)
281 #define SRC_DAC2FREEZE (1UL << 20)
282 #define SRC_ADCFREEZE (1UL << 19)
285 #define SRC_WE 0x01000000 /* read/write control for SRC RAM */
286 #define SRC_BUSY 0x00800000 /* SRC busy */
287 #define SRC_DIS 0x00400000 /* 1 = disable SRC */
288 #define SRC_DDAC1 0x00200000 /* 1 = disable accum update for DAC1 */
289 #define SRC_DDAC2 0x00100000 /* 1 = disable accum update for DAC2 */
290 #define SRC_DADC 0x00080000 /* 1 = disable accum update for ADC2 */
291 #define SRC_CTLMASK 0x00780000
292 #define SRC_RAMDATA_MASK 0x0000ffff
293 #define SRC_RAMDATA_SHIFT 0
295 #define SRCREG_ADC 0x78
296 #define SRCREG_DAC1 0x70
297 #define SRCREG_DAC2 0x74
298 #define SRCREG_VOL_ADC 0x6c
299 #define SRCREG_VOL_DAC1 0x7c
300 #define SRCREG_VOL_DAC2 0x7e
302 #define SRCREG_TRUNC_N 0x00
303 #define SRCREG_INT_REGS 0x01
304 #define SRCREG_ACCUM_FRAC 0x02
305 #define SRCREG_VFREQ_FRAC 0x03
307 #define CODEC_PIRD 0x00800000 /* 0 = write AC97 register */
308 #define CODEC_PIADD_MASK 0x007f0000
309 #define CODEC_PIADD_SHIFT 16
310 #define CODEC_PIDAT_MASK 0x0000ffff
311 #define CODEC_PIDAT_SHIFT 0
313 #define CODEC_RDY 0x80000000 /* AC97 read data valid */
314 #define CODEC_WIP 0x40000000 /* AC97 write in progress */
315 #define CODEC_PORD 0x00800000 /* 0 = write AC97 register */
316 #define CODEC_POADD_MASK 0x007f0000
317 #define CODEC_POADD_SHIFT 16
318 #define CODEC_PODAT_MASK 0x0000ffff
319 #define CODEC_PODAT_SHIFT 0
322 #define LEGACY_JFAST 0x80000000 /* fast joystick timing */
323 #define LEGACY_FIRQ 0x01000000 /* force IRQ */
325 #define SCTRL_DACTEST 0x00400000 /* 1 = DAC test, test vector generation purposes */
326 #define SCTRL_P2ENDINC 0x00380000 /* */
327 #define SCTRL_SH_P2ENDINC 19
328 #define SCTRL_P2STINC 0x00070000 /* */
329 #define SCTRL_SH_P2STINC 16
330 #define SCTRL_R1LOOPSEL 0x00008000 /* 0 = loop mode */
331 #define SCTRL_P2LOOPSEL 0x00004000 /* 0 = loop mode */
332 #define SCTRL_P1LOOPSEL 0x00002000 /* 0 = loop mode */
333 #define SCTRL_P2PAUSE 0x00001000 /* 1 = pause mode */
334 #define SCTRL_P1PAUSE 0x00000800 /* 1 = pause mode */
335 #define SCTRL_R1INTEN 0x00000400 /* enable interrupt */
336 #define SCTRL_P2INTEN 0x00000200 /* enable interrupt */
337 #define SCTRL_P1INTEN 0x00000100 /* enable interrupt */
338 #define SCTRL_P1SCTRLD 0x00000080 /* reload sample count register for DAC1 */
339 #define SCTRL_P2DACSEN 0x00000040 /* 1 = DAC2 play back last sample when disabled */
340 #define SCTRL_R1SEB 0x00000020 /* 1 = 16bit */
341 #define SCTRL_R1SMB 0x00000010 /* 1 = stereo */
342 #define SCTRL_R1FMT 0x00000030 /* format mask */
343 #define SCTRL_SH_R1FMT 4
344 #define SCTRL_P2SEB 0x00000008 /* 1 = 16bit */
345 #define SCTRL_P2SMB 0x00000004 /* 1 = stereo */
346 #define SCTRL_P2FMT 0x0000000c /* format mask */
347 #define SCTRL_SH_P2FMT 2
348 #define SCTRL_P1SEB 0x00000002 /* 1 = 16bit */
349 #define SCTRL_P1SMB 0x00000001 /* 1 = stereo */
350 #define SCTRL_P1FMT 0x00000003 /* format mask */
351 #define SCTRL_SH_P1FMT 0
354 /* misc stuff */
355 #define POLL_COUNT 0x1000
356 #define FMODE_DAC 4 /* slight misuse of mode_t */
358 /* MIDI buffer sizes */
360 #define MIDIINBUF 256
361 #define MIDIOUTBUF 256
363 #define FMODE_MIDI_SHIFT 3
364 #define FMODE_MIDI_READ (FMODE_READ << FMODE_MIDI_SHIFT)
365 #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
367 #define ES1371_MODULE_NAME "es1371"
368 #define PFX ES1371_MODULE_NAME ": "
370 /* --------------------------------------------------------------------- */
372 struct es1371_state {
373 /* magic */
374 unsigned int magic;
376 /* list of es1371 devices */
377 struct list_head devs;
379 /* the corresponding pci_dev structure */
380 struct pci_dev *dev;
382 /* soundcore stuff */
383 int dev_audio;
384 int dev_dac;
385 int dev_midi;
387 /* hardware resources */
388 unsigned long io; /* long for SPARC */
389 unsigned int irq;
391 /* PCI ID's */
392 u16 vendor;
393 u16 device;
394 u8 rev; /* the chip revision */
396 /* options */
397 int spdif_volume; /* S/PDIF output is enabled if != -1 */
399 #ifdef ES1371_DEBUG
400 /* debug /proc entry */
401 struct proc_dir_entry *ps;
402 #endif /* ES1371_DEBUG */
404 struct ac97_codec codec;
406 /* wave stuff */
407 unsigned ctrl;
408 unsigned sctrl;
409 unsigned dac1rate, dac2rate, adcrate;
411 spinlock_t lock;
412 struct semaphore open_sem;
413 mode_t open_mode;
414 wait_queue_head_t open_wait;
416 struct dmabuf {
417 void *rawbuf;
418 dma_addr_t dmaaddr;
419 unsigned buforder;
420 unsigned numfrag;
421 unsigned fragshift;
422 unsigned hwptr, swptr;
423 unsigned total_bytes;
424 int count;
425 unsigned error; /* over/underrun */
426 wait_queue_head_t wait;
427 /* redundant, but makes calculations easier */
428 unsigned fragsize;
429 unsigned dmasize;
430 unsigned fragsamples;
431 /* OSS stuff */
432 unsigned mapped:1;
433 unsigned ready:1;
434 unsigned endcleared:1;
435 unsigned ossfragshift;
436 int ossmaxfrags;
437 unsigned subdivision;
438 } dma_dac1, dma_dac2, dma_adc;
440 /* midi stuff */
441 struct {
442 unsigned ird, iwr, icnt;
443 unsigned ord, owr, ocnt;
444 wait_queue_head_t iwait;
445 wait_queue_head_t owait;
446 unsigned char ibuf[MIDIINBUF];
447 unsigned char obuf[MIDIOUTBUF];
448 } midi;
451 /* --------------------------------------------------------------------- */
453 static LIST_HEAD(devs);
455 /* --------------------------------------------------------------------- */
457 extern inline unsigned ld2(unsigned int x)
459 unsigned r = 0;
461 if (x >= 0x10000) {
462 x >>= 16;
463 r += 16;
465 if (x >= 0x100) {
466 x >>= 8;
467 r += 8;
469 if (x >= 0x10) {
470 x >>= 4;
471 r += 4;
473 if (x >= 4) {
474 x >>= 2;
475 r += 2;
477 if (x >= 2)
478 r++;
479 return r;
482 /* --------------------------------------------------------------------- */
484 static unsigned wait_src_ready(struct es1371_state *s)
486 unsigned int t, r;
488 for (t = 0; t < POLL_COUNT; t++) {
489 if (!((r = inl(s->io + ES1371_REG_SRCONV)) & SRC_BUSY))
490 return r;
491 udelay(1);
493 printk(KERN_DEBUG PFX "sample rate converter timeout r = 0x%08x\n", r);
494 return r;
497 static unsigned src_read(struct es1371_state *s, unsigned reg)
499 unsigned int temp,i,orig;
501 /* wait for ready */
502 temp = wait_src_ready (s);
504 /* we can only access the SRC at certain times, make sure
505 we're allowed to before we read */
507 orig = temp;
508 /* expose the SRC state bits */
509 outl ( (temp & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT) | 0x10000UL,
510 s->io + ES1371_REG_SRCONV);
512 /* now, wait for busy and the correct time to read */
513 temp = wait_src_ready (s);
515 if ( (temp & 0x00870000UL ) != ( SRC_OKSTATE << 16 )){
516 /* wait for the right state */
517 for (i=0; i<POLL_COUNT; i++){
518 temp = inl (s->io + ES1371_REG_SRCONV);
519 if ( (temp & 0x00870000UL ) == ( SRC_OKSTATE << 16 ))
520 break;
524 /* hide the state bits */
525 outl ((orig & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT), s->io + ES1371_REG_SRCONV);
526 return temp;
531 static void src_write(struct es1371_state *s, unsigned reg, unsigned data)
534 unsigned int r;
536 r = wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC);
537 r |= (reg << SRC_RAMADDR_SHIFT) & SRC_RAMADDR_MASK;
538 r |= (data << SRC_RAMDATA_SHIFT) & SRC_RAMDATA_MASK;
539 outl(r | SRC_WE, s->io + ES1371_REG_SRCONV);
543 /* --------------------------------------------------------------------- */
545 /* most of the following here is black magic */
546 static void set_adc_rate(struct es1371_state *s, unsigned rate)
548 unsigned long flags;
549 unsigned int n, truncm, freq;
551 if (rate > 48000)
552 rate = 48000;
553 if (rate < 4000)
554 rate = 4000;
555 n = rate / 3000;
556 if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
557 n--;
558 truncm = (21 * n - 1) | 1;
559 freq = ((48000UL << 15) / rate) * n;
560 s->adcrate = (48000UL << 15) / (freq / n);
561 spin_lock_irqsave(&s->lock, flags);
562 if (rate >= 24000) {
563 if (truncm > 239)
564 truncm = 239;
565 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
566 (((239 - truncm) >> 1) << 9) | (n << 4));
567 } else {
568 if (truncm > 119)
569 truncm = 119;
570 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
571 0x8000 | (((119 - truncm) >> 1) << 9) | (n << 4));
573 src_write(s, SRCREG_ADC+SRCREG_INT_REGS,
574 (src_read(s, SRCREG_ADC+SRCREG_INT_REGS) & 0x00ff) |
575 ((freq >> 5) & 0xfc00));
576 src_write(s, SRCREG_ADC+SRCREG_VFREQ_FRAC, freq & 0x7fff);
577 src_write(s, SRCREG_VOL_ADC, n << 8);
578 src_write(s, SRCREG_VOL_ADC+1, n << 8);
579 spin_unlock_irqrestore(&s->lock, flags);
583 static void set_dac1_rate(struct es1371_state *s, unsigned rate)
585 unsigned long flags;
586 unsigned int freq, r;
588 if (rate > 48000)
589 rate = 48000;
590 if (rate < 4000)
591 rate = 4000;
592 freq = ((rate << 15) + 1500) / 3000;
593 s->dac1rate = (freq * 3000 + 16384) >> 15;
594 spin_lock_irqsave(&s->lock, flags);
595 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC)) | SRC_DDAC1;
596 outl(r, s->io + ES1371_REG_SRCONV);
597 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS,
598 (src_read(s, SRCREG_DAC1+SRCREG_INT_REGS) & 0x00ff) |
599 ((freq >> 5) & 0xfc00));
600 src_write(s, SRCREG_DAC1+SRCREG_VFREQ_FRAC, freq & 0x7fff);
601 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC));
602 outl(r, s->io + ES1371_REG_SRCONV);
603 spin_unlock_irqrestore(&s->lock, flags);
606 static void set_dac2_rate(struct es1371_state *s, unsigned rate)
608 unsigned long flags;
609 unsigned int freq, r;
611 if (rate > 48000)
612 rate = 48000;
613 if (rate < 4000)
614 rate = 4000;
615 freq = ((rate << 15) + 1500) / 3000;
616 s->dac2rate = (freq * 3000 + 16384) >> 15;
617 spin_lock_irqsave(&s->lock, flags);
618 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC)) | SRC_DDAC2;
619 outl(r, s->io + ES1371_REG_SRCONV);
620 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS,
621 (src_read(s, SRCREG_DAC2+SRCREG_INT_REGS) & 0x00ff) |
622 ((freq >> 5) & 0xfc00));
623 src_write(s, SRCREG_DAC2+SRCREG_VFREQ_FRAC, freq & 0x7fff);
624 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC));
625 outl(r, s->io + ES1371_REG_SRCONV);
626 spin_unlock_irqrestore(&s->lock, flags);
629 /* --------------------------------------------------------------------- */
631 static void __init src_init(struct es1371_state *s)
633 unsigned int i;
635 /* before we enable or disable the SRC we need
636 to wait for it to become ready */
637 wait_src_ready(s);
639 outl(SRC_DIS, s->io + ES1371_REG_SRCONV);
641 for (i = 0; i < 0x80; i++)
642 src_write(s, i, 0);
644 src_write(s, SRCREG_DAC1+SRCREG_TRUNC_N, 16 << 4);
645 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS, 16 << 10);
646 src_write(s, SRCREG_DAC2+SRCREG_TRUNC_N, 16 << 4);
647 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS, 16 << 10);
648 src_write(s, SRCREG_VOL_ADC, 1 << 12);
649 src_write(s, SRCREG_VOL_ADC+1, 1 << 12);
650 src_write(s, SRCREG_VOL_DAC1, 1 << 12);
651 src_write(s, SRCREG_VOL_DAC1+1, 1 << 12);
652 src_write(s, SRCREG_VOL_DAC2, 1 << 12);
653 src_write(s, SRCREG_VOL_DAC2+1, 1 << 12);
654 set_adc_rate(s, 22050);
655 set_dac1_rate(s, 22050);
656 set_dac2_rate(s, 22050);
658 /* WARNING:
659 * enabling the sample rate converter without properly programming
660 * its parameters causes the chip to lock up (the SRC busy bit will
661 * be stuck high, and I've found no way to rectify this other than
662 * power cycle)
664 wait_src_ready(s);
665 outl(0, s->io+ES1371_REG_SRCONV);
668 /* --------------------------------------------------------------------- */
670 static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
672 struct es1371_state *s = (struct es1371_state *)codec->private_data;
673 unsigned long flags;
674 unsigned t, x;
676 for (t = 0; t < POLL_COUNT; t++)
677 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
678 break;
679 spin_lock_irqsave(&s->lock, flags);
681 /* save the current state for later */
682 x = wait_src_ready(s);
684 /* enable SRC state data in SRC mux */
685 outl((x & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC)) | 0x00010000,
686 s->io+ES1371_REG_SRCONV);
688 /* wait for not busy (state 0) first to avoid
689 transition states */
690 for (t=0; t<POLL_COUNT; t++){
691 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
692 break;
693 udelay(1);
696 /* wait for a SAFE time to write addr/data and then do it, dammit */
697 for (t=0; t<POLL_COUNT; t++){
698 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
699 break;
700 udelay(1);
703 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) |
704 ((data << CODEC_PODAT_SHIFT) & CODEC_PODAT_MASK), s->io+ES1371_REG_CODEC);
706 /* restore SRC reg */
707 wait_src_ready(s);
708 outl(x, s->io+ES1371_REG_SRCONV);
709 spin_unlock_irqrestore(&s->lock, flags);
712 static u16 rdcodec(struct ac97_codec *codec, u8 addr)
714 struct es1371_state *s = (struct es1371_state *)codec->private_data;
715 unsigned long flags;
716 unsigned t, x;
718 /* wait for WIP to go away */
719 for (t = 0; t < 0x1000; t++)
720 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
721 break;
722 spin_lock_irqsave(&s->lock, flags);
724 /* save the current state for later */
725 x = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC));
727 /* enable SRC state data in SRC mux */
728 outl( x | 0x00010000,
729 s->io+ES1371_REG_SRCONV);
731 /* wait for not busy (state 0) first to avoid
732 transition states */
733 for (t=0; t<POLL_COUNT; t++){
734 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
735 break;
736 udelay(1);
739 /* wait for a SAFE time to write addr/data and then do it, dammit */
740 for (t=0; t<POLL_COUNT; t++){
741 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
742 break;
743 udelay(1);
746 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) | CODEC_PORD, s->io+ES1371_REG_CODEC);
747 /* restore SRC reg */
748 wait_src_ready(s);
749 outl(x, s->io+ES1371_REG_SRCONV);
750 spin_unlock_irqrestore(&s->lock, flags);
752 /* wait for WIP again */
753 for (t = 0; t < 0x1000; t++)
754 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
755 break;
757 /* now wait for the stinkin' data (RDY) */
758 for (t = 0; t < POLL_COUNT; t++)
759 if ((x = inl(s->io+ES1371_REG_CODEC)) & CODEC_RDY)
760 break;
762 return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
765 /* --------------------------------------------------------------------- */
767 extern inline void stop_adc(struct es1371_state *s)
769 unsigned long flags;
771 spin_lock_irqsave(&s->lock, flags);
772 s->ctrl &= ~CTRL_ADC_EN;
773 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
774 spin_unlock_irqrestore(&s->lock, flags);
777 extern inline void stop_dac1(struct es1371_state *s)
779 unsigned long flags;
781 spin_lock_irqsave(&s->lock, flags);
782 s->ctrl &= ~CTRL_DAC1_EN;
783 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
784 spin_unlock_irqrestore(&s->lock, flags);
787 extern inline void stop_dac2(struct es1371_state *s)
789 unsigned long flags;
791 spin_lock_irqsave(&s->lock, flags);
792 s->ctrl &= ~CTRL_DAC2_EN;
793 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
794 spin_unlock_irqrestore(&s->lock, flags);
797 static void start_dac1(struct es1371_state *s)
799 unsigned long flags;
800 unsigned fragremain, fshift;
802 spin_lock_irqsave(&s->lock, flags);
803 if (!(s->ctrl & CTRL_DAC1_EN) && (s->dma_dac1.mapped || s->dma_dac1.count > 0)
804 && s->dma_dac1.ready) {
805 s->ctrl |= CTRL_DAC1_EN;
806 s->sctrl = (s->sctrl & ~(SCTRL_P1LOOPSEL | SCTRL_P1PAUSE | SCTRL_P1SCTRLD)) | SCTRL_P1INTEN;
807 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
808 fragremain = ((- s->dma_dac1.hwptr) & (s->dma_dac1.fragsize-1));
809 fshift = sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
810 if (fragremain < 2*fshift)
811 fragremain = s->dma_dac1.fragsize;
812 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
813 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
814 outl((s->dma_dac1.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
816 spin_unlock_irqrestore(&s->lock, flags);
819 static void start_dac2(struct es1371_state *s)
821 unsigned long flags;
822 unsigned fragremain, fshift;
824 spin_lock_irqsave(&s->lock, flags);
825 if (!(s->ctrl & CTRL_DAC2_EN) && (s->dma_dac2.mapped || s->dma_dac2.count > 0)
826 && s->dma_dac2.ready) {
827 s->ctrl |= CTRL_DAC2_EN;
828 s->sctrl = (s->sctrl & ~(SCTRL_P2LOOPSEL | SCTRL_P2PAUSE | SCTRL_P2DACSEN |
829 SCTRL_P2ENDINC | SCTRL_P2STINC)) | SCTRL_P2INTEN |
830 (((s->sctrl & SCTRL_P2FMT) ? 2 : 1) << SCTRL_SH_P2ENDINC) |
831 (0 << SCTRL_SH_P2STINC);
832 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
833 fragremain = ((- s->dma_dac2.hwptr) & (s->dma_dac2.fragsize-1));
834 fshift = sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
835 if (fragremain < 2*fshift)
836 fragremain = s->dma_dac2.fragsize;
837 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
838 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
839 outl((s->dma_dac2.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
841 spin_unlock_irqrestore(&s->lock, flags);
844 static void start_adc(struct es1371_state *s)
846 unsigned long flags;
847 unsigned fragremain, fshift;
849 spin_lock_irqsave(&s->lock, flags);
850 if (!(s->ctrl & CTRL_ADC_EN) && (s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
851 && s->dma_adc.ready) {
852 s->ctrl |= CTRL_ADC_EN;
853 s->sctrl = (s->sctrl & ~SCTRL_R1LOOPSEL) | SCTRL_R1INTEN;
854 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
855 fragremain = ((- s->dma_adc.hwptr) & (s->dma_adc.fragsize-1));
856 fshift = sample_shift[(s->sctrl & SCTRL_R1FMT) >> SCTRL_SH_R1FMT];
857 if (fragremain < 2*fshift)
858 fragremain = s->dma_adc.fragsize;
859 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
860 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
861 outl((s->dma_adc.fragsize >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
863 spin_unlock_irqrestore(&s->lock, flags);
866 /* --------------------------------------------------------------------- */
868 #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
869 #define DMABUF_MINORDER 1
872 extern inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db)
874 struct page *page, *pend;
876 if (db->rawbuf) {
877 /* undo marking the pages as reserved */
878 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
879 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
880 mem_map_unreserve(page);
881 pci_free_consistent(s->dev, PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
883 db->rawbuf = NULL;
884 db->mapped = db->ready = 0;
887 static int prog_dmabuf(struct es1371_state *s, struct dmabuf *db, unsigned rate, unsigned fmt, unsigned reg)
889 int order;
890 unsigned bytepersec;
891 unsigned bufs;
892 struct page *page, *pend;
894 db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
895 if (!db->rawbuf) {
896 db->ready = db->mapped = 0;
897 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
898 if ((db->rawbuf = pci_alloc_consistent(s->dev, PAGE_SIZE << order, &db->dmaaddr)))
899 break;
900 if (!db->rawbuf)
901 return -ENOMEM;
902 db->buforder = order;
903 /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
904 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
905 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
906 mem_map_reserve(page);
908 fmt &= ES1371_FMT_MASK;
909 bytepersec = rate << sample_shift[fmt];
910 bufs = PAGE_SIZE << db->buforder;
911 if (db->ossfragshift) {
912 if ((1000 << db->ossfragshift) < bytepersec)
913 db->fragshift = ld2(bytepersec/1000);
914 else
915 db->fragshift = db->ossfragshift;
916 } else {
917 db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
918 if (db->fragshift < 3)
919 db->fragshift = 3;
921 db->numfrag = bufs >> db->fragshift;
922 while (db->numfrag < 4 && db->fragshift > 3) {
923 db->fragshift--;
924 db->numfrag = bufs >> db->fragshift;
926 db->fragsize = 1 << db->fragshift;
927 if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
928 db->numfrag = db->ossmaxfrags;
929 db->fragsamples = db->fragsize >> sample_shift[fmt];
930 db->dmasize = db->numfrag << db->fragshift;
931 memset(db->rawbuf, (fmt & ES1371_FMT_S16) ? 0 : 0x80, db->dmasize);
932 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
933 outl(db->dmaaddr, s->io+(reg & 0xff));
934 outl((db->dmasize >> 2)-1, s->io+((reg + 4) & 0xff));
935 db->ready = 1;
936 return 0;
939 extern inline int prog_dmabuf_adc(struct es1371_state *s)
941 stop_adc(s);
942 return prog_dmabuf(s, &s->dma_adc, s->adcrate, (s->sctrl >> SCTRL_SH_R1FMT) & ES1371_FMT_MASK,
943 ES1371_REG_ADC_FRAMEADR);
946 extern inline int prog_dmabuf_dac2(struct es1371_state *s)
948 stop_dac2(s);
949 return prog_dmabuf(s, &s->dma_dac2, s->dac2rate, (s->sctrl >> SCTRL_SH_P2FMT) & ES1371_FMT_MASK,
950 ES1371_REG_DAC2_FRAMEADR);
953 extern inline int prog_dmabuf_dac1(struct es1371_state *s)
955 stop_dac1(s);
956 return prog_dmabuf(s, &s->dma_dac1, s->dac1rate, (s->sctrl >> SCTRL_SH_P1FMT) & ES1371_FMT_MASK,
957 ES1371_REG_DAC1_FRAMEADR);
960 extern inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg)
962 unsigned hwptr, diff;
964 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
965 hwptr = (inl(s->io+(reg & 0xff)) >> 14) & 0x3fffc;
966 diff = (db->dmasize + hwptr - db->hwptr) % db->dmasize;
967 db->hwptr = hwptr;
968 return diff;
971 extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
973 if (bptr + len > bsize) {
974 unsigned x = bsize - bptr;
975 memset(((char *)buf) + bptr, c, x);
976 bptr = 0;
977 len -= x;
979 memset(((char *)buf) + bptr, c, len);
982 /* call with spinlock held! */
983 static void es1371_update_ptr(struct es1371_state *s)
985 int diff;
987 /* update ADC pointer */
988 if (s->ctrl & CTRL_ADC_EN) {
989 diff = get_hwptr(s, &s->dma_adc, ES1371_REG_ADC_FRAMECNT);
990 s->dma_adc.total_bytes += diff;
991 s->dma_adc.count += diff;
992 if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
993 wake_up(&s->dma_adc.wait);
994 if (!s->dma_adc.mapped) {
995 if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
996 s->ctrl &= ~CTRL_ADC_EN;
997 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
998 s->dma_adc.error++;
1002 /* update DAC1 pointer */
1003 if (s->ctrl & CTRL_DAC1_EN) {
1004 diff = get_hwptr(s, &s->dma_dac1, ES1371_REG_DAC1_FRAMECNT);
1005 s->dma_dac1.total_bytes += diff;
1006 if (s->dma_dac1.mapped) {
1007 s->dma_dac1.count += diff;
1008 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
1009 wake_up(&s->dma_dac1.wait);
1010 } else {
1011 s->dma_dac1.count -= diff;
1012 if (s->dma_dac1.count <= 0) {
1013 s->ctrl &= ~CTRL_DAC1_EN;
1014 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1015 s->dma_dac1.error++;
1016 } else if (s->dma_dac1.count <= (signed)s->dma_dac1.fragsize && !s->dma_dac1.endcleared) {
1017 clear_advance(s->dma_dac1.rawbuf, s->dma_dac1.dmasize, s->dma_dac1.swptr,
1018 s->dma_dac1.fragsize, (s->sctrl & SCTRL_P1SEB) ? 0 : 0x80);
1019 s->dma_dac1.endcleared = 1;
1021 if (s->dma_dac1.count + (signed)s->dma_dac1.fragsize <= (signed)s->dma_dac1.dmasize)
1022 wake_up(&s->dma_dac1.wait);
1025 /* update DAC2 pointer */
1026 if (s->ctrl & CTRL_DAC2_EN) {
1027 diff = get_hwptr(s, &s->dma_dac2, ES1371_REG_DAC2_FRAMECNT);
1028 s->dma_dac2.total_bytes += diff;
1029 if (s->dma_dac2.mapped) {
1030 s->dma_dac2.count += diff;
1031 if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
1032 wake_up(&s->dma_dac2.wait);
1033 } else {
1034 s->dma_dac2.count -= diff;
1035 if (s->dma_dac2.count <= 0) {
1036 s->ctrl &= ~CTRL_DAC2_EN;
1037 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1038 s->dma_dac2.error++;
1039 } else if (s->dma_dac2.count <= (signed)s->dma_dac2.fragsize && !s->dma_dac2.endcleared) {
1040 clear_advance(s->dma_dac2.rawbuf, s->dma_dac2.dmasize, s->dma_dac2.swptr,
1041 s->dma_dac2.fragsize, (s->sctrl & SCTRL_P2SEB) ? 0 : 0x80);
1042 s->dma_dac2.endcleared = 1;
1044 if (s->dma_dac2.count + (signed)s->dma_dac2.fragsize <= (signed)s->dma_dac2.dmasize)
1045 wake_up(&s->dma_dac2.wait);
1050 /* hold spinlock for the following! */
1051 static void es1371_handle_midi(struct es1371_state *s)
1053 unsigned char ch;
1054 int wake;
1056 if (!(s->ctrl & CTRL_UART_EN))
1057 return;
1058 wake = 0;
1059 while (inb(s->io+ES1371_REG_UART_STATUS) & USTAT_RXRDY) {
1060 ch = inb(s->io+ES1371_REG_UART_DATA);
1061 if (s->midi.icnt < MIDIINBUF) {
1062 s->midi.ibuf[s->midi.iwr] = ch;
1063 s->midi.iwr = (s->midi.iwr + 1) % MIDIINBUF;
1064 s->midi.icnt++;
1066 wake = 1;
1068 if (wake)
1069 wake_up(&s->midi.iwait);
1070 wake = 0;
1071 while ((inb(s->io+ES1371_REG_UART_STATUS) & USTAT_TXRDY) && s->midi.ocnt > 0) {
1072 outb(s->midi.obuf[s->midi.ord], s->io+ES1371_REG_UART_DATA);
1073 s->midi.ord = (s->midi.ord + 1) % MIDIOUTBUF;
1074 s->midi.ocnt--;
1075 if (s->midi.ocnt < MIDIOUTBUF-16)
1076 wake = 1;
1078 if (wake)
1079 wake_up(&s->midi.owait);
1080 outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL);
1083 static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1085 struct es1371_state *s = (struct es1371_state *)dev_id;
1086 unsigned int intsrc, sctl;
1088 /* fastpath out, to ease interrupt sharing */
1089 intsrc = inl(s->io+ES1371_REG_STATUS);
1090 if (!(intsrc & 0x80000000))
1091 return;
1092 spin_lock(&s->lock);
1093 /* clear audio interrupts first */
1094 sctl = s->sctrl;
1095 if (intsrc & STAT_ADC)
1096 sctl &= ~SCTRL_R1INTEN;
1097 if (intsrc & STAT_DAC1)
1098 sctl &= ~SCTRL_P1INTEN;
1099 if (intsrc & STAT_DAC2)
1100 sctl &= ~SCTRL_P2INTEN;
1101 outl(sctl, s->io+ES1371_REG_SERIAL_CONTROL);
1102 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1103 es1371_update_ptr(s);
1104 es1371_handle_midi(s);
1105 spin_unlock(&s->lock);
1108 /* --------------------------------------------------------------------- */
1110 static const char invalid_magic[] = KERN_CRIT PFX "invalid magic value\n";
1112 #define VALIDATE_STATE(s) \
1113 ({ \
1114 if (!(s) || (s)->magic != ES1371_MAGIC) { \
1115 printk(invalid_magic); \
1116 return -ENXIO; \
1120 /* --------------------------------------------------------------------- */
1122 static loff_t es1371_llseek(struct file *file, loff_t offset, int origin)
1124 return -ESPIPE;
1127 /* --------------------------------------------------------------------- */
1129 /* Conversion table for S/PDIF PCM volume emulation through the SRC */
1130 /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */
1131 static const unsigned short DACVolTable[101] =
1133 0x1000, 0x0f2a, 0x0e60, 0x0da0, 0x0cea, 0x0c3e, 0x0b9a, 0x0aff,
1134 0x0a6d, 0x09e1, 0x095e, 0x08e1, 0x086a, 0x07fa, 0x078f, 0x072a,
1135 0x06cb, 0x0670, 0x061a, 0x05c9, 0x057b, 0x0532, 0x04ed, 0x04ab,
1136 0x046d, 0x0432, 0x03fa, 0x03c5, 0x0392, 0x0363, 0x0335, 0x030b,
1137 0x02e2, 0x02bc, 0x0297, 0x0275, 0x0254, 0x0235, 0x0217, 0x01fb,
1138 0x01e1, 0x01c8, 0x01b0, 0x0199, 0x0184, 0x0170, 0x015d, 0x014b,
1139 0x0139, 0x0129, 0x0119, 0x010b, 0x00fd, 0x00f0, 0x00e3, 0x00d7,
1140 0x00cc, 0x00c1, 0x00b7, 0x00ae, 0x00a5, 0x009c, 0x0094, 0x008c,
1141 0x0085, 0x007e, 0x0077, 0x0071, 0x006b, 0x0066, 0x0060, 0x005b,
1142 0x0057, 0x0052, 0x004e, 0x004a, 0x0046, 0x0042, 0x003f, 0x003c,
1143 0x0038, 0x0036, 0x0033, 0x0030, 0x002e, 0x002b, 0x0029, 0x0027,
1144 0x0025, 0x0023, 0x0021, 0x001f, 0x001e, 0x001c, 0x001b, 0x0019,
1145 0x0018, 0x0017, 0x0016, 0x0014, 0x0000
1149 * when we are in S/PDIF mode, we want to disable any analog output so
1150 * we filter the mixer ioctls
1152 static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg)
1154 struct es1371_state *s = (struct es1371_state *)codec->private_data;
1155 int val;
1156 unsigned long flags;
1157 unsigned int left, right;
1159 VALIDATE_STATE(s);
1160 /* filter mixer ioctls to catch PCM and MASTER volume when in S/PDIF mode */
1161 if (s->spdif_volume == -1)
1162 return codec->mixer_ioctl(codec, cmd, arg);
1163 switch (cmd) {
1164 case SOUND_MIXER_WRITE_VOLUME:
1165 return 0;
1167 case SOUND_MIXER_WRITE_PCM: /* use SRC for PCM volume */
1168 if (get_user(val, (int *)arg))
1169 return -EFAULT;
1170 right = ((val >> 8) & 0xff);
1171 left = (val & 0xff);
1172 if (right > 100)
1173 right = 100;
1174 if (left > 100)
1175 left = 100;
1176 s->spdif_volume = (right << 8) | left;
1177 spin_lock_irqsave(&s->lock, flags);
1178 src_write(s, SRCREG_VOL_DAC2, DACVolTable[100 - left]);
1179 src_write(s, SRCREG_VOL_DAC2+1, DACVolTable[100 - right]);
1180 spin_unlock_irqrestore(&s->lock, flags);
1181 return 0;
1183 case SOUND_MIXER_READ_PCM:
1184 return put_user(s->spdif_volume, (int *)arg);
1186 return codec->mixer_ioctl(codec, cmd, arg);
1189 /* --------------------------------------------------------------------- */
1192 * AC97 Mixer Register to Connections mapping of the Concert 97 board
1194 * AC97_MASTER_VOL_STEREO Line Out
1195 * AC97_MASTER_VOL_MONO TAD Output
1196 * AC97_PCBEEP_VOL none
1197 * AC97_PHONE_VOL TAD Input (mono)
1198 * AC97_MIC_VOL MIC Input (mono)
1199 * AC97_LINEIN_VOL Line Input (stereo)
1200 * AC97_CD_VOL CD Input (stereo)
1201 * AC97_VIDEO_VOL none
1202 * AC97_AUX_VOL Aux Input (stereo)
1203 * AC97_PCMOUT_VOL Wave Output (stereo)
1206 static int es1371_open_mixdev(struct inode *inode, struct file *file)
1208 int minor = MINOR(inode->i_rdev);
1209 struct list_head *list;
1210 struct es1371_state *s;
1212 for (list = devs.next; ; list = list->next) {
1213 if (list == &devs)
1214 return -ENODEV;
1215 s = list_entry(list, struct es1371_state, devs);
1216 if (s->codec.dev_mixer == minor)
1217 break;
1219 VALIDATE_STATE(s);
1220 file->private_data = s;
1221 return 0;
1224 static int es1371_release_mixdev(struct inode *inode, struct file *file)
1226 struct es1371_state *s = (struct es1371_state *)file->private_data;
1228 VALIDATE_STATE(s);
1229 return 0;
1232 static int es1371_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1234 struct es1371_state *s = (struct es1371_state *)file->private_data;
1235 struct ac97_codec *codec = &s->codec;
1237 return mixdev_ioctl(codec, cmd, arg);
1240 static /*const*/ struct file_operations es1371_mixer_fops = {
1241 owner: THIS_MODULE,
1242 llseek: es1371_llseek,
1243 ioctl: es1371_ioctl_mixdev,
1244 open: es1371_open_mixdev,
1245 release: es1371_release_mixdev,
1248 /* --------------------------------------------------------------------- */
1250 static int drain_dac1(struct es1371_state *s, int nonblock)
1252 DECLARE_WAITQUEUE(wait, current);
1253 unsigned long flags;
1254 int count, tmo;
1256 if (s->dma_dac1.mapped || !s->dma_dac1.ready)
1257 return 0;
1258 add_wait_queue(&s->dma_dac1.wait, &wait);
1259 for (;;) {
1260 __set_current_state(TASK_INTERRUPTIBLE);
1261 spin_lock_irqsave(&s->lock, flags);
1262 count = s->dma_dac1.count;
1263 spin_unlock_irqrestore(&s->lock, flags);
1264 if (count <= 0)
1265 break;
1266 if (signal_pending(current))
1267 break;
1268 if (nonblock) {
1269 remove_wait_queue(&s->dma_dac1.wait, &wait);
1270 set_current_state(TASK_RUNNING);
1271 return -EBUSY;
1273 tmo = 3 * HZ * (count + s->dma_dac1.fragsize) / 2 / s->dac1rate;
1274 tmo >>= sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
1275 if (!schedule_timeout(tmo + 1))
1276 DBG(printk(KERN_DEBUG PFX "dac1 dma timed out??\n");)
1278 remove_wait_queue(&s->dma_dac1.wait, &wait);
1279 set_current_state(TASK_RUNNING);
1280 if (signal_pending(current))
1281 return -ERESTARTSYS;
1282 return 0;
1285 static int drain_dac2(struct es1371_state *s, int nonblock)
1287 DECLARE_WAITQUEUE(wait, current);
1288 unsigned long flags;
1289 int count, tmo;
1291 if (s->dma_dac2.mapped || !s->dma_dac2.ready)
1292 return 0;
1293 add_wait_queue(&s->dma_dac2.wait, &wait);
1294 for (;;) {
1295 __set_current_state(TASK_UNINTERRUPTIBLE);
1296 spin_lock_irqsave(&s->lock, flags);
1297 count = s->dma_dac2.count;
1298 spin_unlock_irqrestore(&s->lock, flags);
1299 if (count <= 0)
1300 break;
1301 if (signal_pending(current))
1302 break;
1303 if (nonblock) {
1304 remove_wait_queue(&s->dma_dac2.wait, &wait);
1305 set_current_state(TASK_RUNNING);
1306 return -EBUSY;
1308 tmo = 3 * HZ * (count + s->dma_dac2.fragsize) / 2 / s->dac2rate;
1309 tmo >>= sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
1310 if (!schedule_timeout(tmo + 1))
1311 DBG(printk(KERN_DEBUG PFX "dac2 dma timed out??\n");)
1313 remove_wait_queue(&s->dma_dac2.wait, &wait);
1314 set_current_state(TASK_RUNNING);
1315 if (signal_pending(current))
1316 return -ERESTARTSYS;
1317 return 0;
1320 /* --------------------------------------------------------------------- */
1322 static ssize_t es1371_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
1324 struct es1371_state *s = (struct es1371_state *)file->private_data;
1325 DECLARE_WAITQUEUE(wait, current);
1326 ssize_t ret;
1327 unsigned long flags;
1328 unsigned swptr;
1329 int cnt;
1331 VALIDATE_STATE(s);
1332 if (ppos != &file->f_pos)
1333 return -ESPIPE;
1334 if (s->dma_adc.mapped)
1335 return -ENXIO;
1336 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1337 return ret;
1338 if (!access_ok(VERIFY_WRITE, buffer, count))
1339 return -EFAULT;
1340 ret = 0;
1341 add_wait_queue(&s->dma_adc.wait, &wait);
1342 while (count > 0) {
1343 spin_lock_irqsave(&s->lock, flags);
1344 swptr = s->dma_adc.swptr;
1345 cnt = s->dma_adc.dmasize-swptr;
1346 if (s->dma_adc.count < cnt)
1347 cnt = s->dma_adc.count;
1348 if (cnt <= 0)
1349 __set_current_state(TASK_INTERRUPTIBLE);
1350 spin_unlock_irqrestore(&s->lock, flags);
1351 if (cnt > count)
1352 cnt = count;
1353 if (cnt <= 0) {
1354 start_adc(s);
1355 if (file->f_flags & O_NONBLOCK) {
1356 if (!ret)
1357 ret = -EAGAIN;
1358 break;
1360 schedule();
1361 if (signal_pending(current)) {
1362 if (!ret)
1363 ret = -ERESTARTSYS;
1364 break;
1366 continue;
1368 if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
1369 if (!ret)
1370 ret = -EFAULT;
1371 break;
1373 swptr = (swptr + cnt) % s->dma_adc.dmasize;
1374 spin_lock_irqsave(&s->lock, flags);
1375 s->dma_adc.swptr = swptr;
1376 s->dma_adc.count -= cnt;
1377 spin_unlock_irqrestore(&s->lock, flags);
1378 count -= cnt;
1379 buffer += cnt;
1380 ret += cnt;
1381 start_adc(s);
1383 remove_wait_queue(&s->dma_adc.wait, &wait);
1384 set_current_state(TASK_RUNNING);
1385 return ret;
1388 static ssize_t es1371_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
1390 struct es1371_state *s = (struct es1371_state *)file->private_data;
1391 DECLARE_WAITQUEUE(wait, current);
1392 ssize_t ret;
1393 unsigned long flags;
1394 unsigned swptr;
1395 int cnt;
1397 VALIDATE_STATE(s);
1398 if (ppos != &file->f_pos)
1399 return -ESPIPE;
1400 if (s->dma_dac2.mapped)
1401 return -ENXIO;
1402 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1403 return ret;
1404 if (!access_ok(VERIFY_READ, buffer, count))
1405 return -EFAULT;
1406 ret = 0;
1407 add_wait_queue(&s->dma_dac2.wait, &wait);
1408 while (count > 0) {
1409 spin_lock_irqsave(&s->lock, flags);
1410 if (s->dma_dac2.count < 0) {
1411 s->dma_dac2.count = 0;
1412 s->dma_dac2.swptr = s->dma_dac2.hwptr;
1414 swptr = s->dma_dac2.swptr;
1415 cnt = s->dma_dac2.dmasize-swptr;
1416 if (s->dma_dac2.count + cnt > s->dma_dac2.dmasize)
1417 cnt = s->dma_dac2.dmasize - s->dma_dac2.count;
1418 if (cnt <= 0)
1419 __set_current_state(TASK_INTERRUPTIBLE);
1420 spin_unlock_irqrestore(&s->lock, flags);
1421 if (cnt > count)
1422 cnt = count;
1423 if (cnt <= 0) {
1424 start_dac2(s);
1425 if (file->f_flags & O_NONBLOCK) {
1426 if (!ret)
1427 ret = -EAGAIN;
1428 break;
1430 schedule();
1431 if (signal_pending(current)) {
1432 if (!ret)
1433 ret = -ERESTARTSYS;
1434 break;
1436 continue;
1438 if (copy_from_user(s->dma_dac2.rawbuf + swptr, buffer, cnt)) {
1439 if (!ret)
1440 ret = -EFAULT;
1441 break;
1443 swptr = (swptr + cnt) % s->dma_dac2.dmasize;
1444 spin_lock_irqsave(&s->lock, flags);
1445 s->dma_dac2.swptr = swptr;
1446 s->dma_dac2.count += cnt;
1447 s->dma_dac2.endcleared = 0;
1448 spin_unlock_irqrestore(&s->lock, flags);
1449 count -= cnt;
1450 buffer += cnt;
1451 ret += cnt;
1452 start_dac2(s);
1454 remove_wait_queue(&s->dma_dac2.wait, &wait);
1455 set_current_state(TASK_RUNNING);
1456 return ret;
1459 /* No kernel lock - we have our own spinlock */
1460 static unsigned int es1371_poll(struct file *file, struct poll_table_struct *wait)
1462 struct es1371_state *s = (struct es1371_state *)file->private_data;
1463 unsigned long flags;
1464 unsigned int mask = 0;
1466 VALIDATE_STATE(s);
1467 if (file->f_mode & FMODE_WRITE) {
1468 if (!s->dma_dac2.ready && prog_dmabuf_dac2(s))
1469 return 0;
1470 poll_wait(file, &s->dma_dac2.wait, wait);
1472 if (file->f_mode & FMODE_READ) {
1473 if (!s->dma_adc.ready && prog_dmabuf_adc(s))
1474 return 0;
1475 poll_wait(file, &s->dma_adc.wait, wait);
1477 spin_lock_irqsave(&s->lock, flags);
1478 es1371_update_ptr(s);
1479 if (file->f_mode & FMODE_READ) {
1480 if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
1481 mask |= POLLIN | POLLRDNORM;
1483 if (file->f_mode & FMODE_WRITE) {
1484 if (s->dma_dac2.mapped) {
1485 if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
1486 mask |= POLLOUT | POLLWRNORM;
1487 } else {
1488 if ((signed)s->dma_dac2.dmasize >= s->dma_dac2.count + (signed)s->dma_dac2.fragsize)
1489 mask |= POLLOUT | POLLWRNORM;
1492 spin_unlock_irqrestore(&s->lock, flags);
1493 return mask;
1496 static int es1371_mmap(struct file *file, struct vm_area_struct *vma)
1498 struct es1371_state *s = (struct es1371_state *)file->private_data;
1499 struct dmabuf *db;
1500 int ret;
1501 unsigned long size;
1503 VALIDATE_STATE(s);
1504 lock_kernel();
1505 if (vma->vm_flags & VM_WRITE) {
1506 if ((ret = prog_dmabuf_dac2(s)) != 0) {
1507 unlock_kernel();
1508 return ret;
1510 db = &s->dma_dac2;
1511 } else if (vma->vm_flags & VM_READ) {
1512 if ((ret = prog_dmabuf_adc(s)) != 0) {
1513 unlock_kernel();
1514 return ret;
1516 db = &s->dma_adc;
1517 } else {
1518 unlock_kernel();
1519 return -EINVAL;
1521 if (vma->vm_pgoff != 0) {
1522 unlock_kernel();
1523 return -EINVAL;
1525 size = vma->vm_end - vma->vm_start;
1526 if (size > (PAGE_SIZE << db->buforder)) {
1527 unlock_kernel();
1528 return -EINVAL;
1530 if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf), size, vma->vm_page_prot)) {
1531 unlock_kernel();
1532 return -EAGAIN;
1534 db->mapped = 1;
1535 unlock_kernel();
1536 return 0;
1539 static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1541 struct es1371_state *s = (struct es1371_state *)file->private_data;
1542 unsigned long flags;
1543 audio_buf_info abinfo;
1544 count_info cinfo;
1545 int count;
1546 int val, mapped, ret;
1548 VALIDATE_STATE(s);
1549 mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac2.mapped) ||
1550 ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
1551 switch (cmd) {
1552 case OSS_GETVERSION:
1553 return put_user(SOUND_VERSION, (int *)arg);
1555 case SNDCTL_DSP_SYNC:
1556 if (file->f_mode & FMODE_WRITE)
1557 return drain_dac2(s, 0/*file->f_flags & O_NONBLOCK*/);
1558 return 0;
1560 case SNDCTL_DSP_SETDUPLEX:
1561 return 0;
1563 case SNDCTL_DSP_GETCAPS:
1564 return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
1566 case SNDCTL_DSP_RESET:
1567 if (file->f_mode & FMODE_WRITE) {
1568 stop_dac2(s);
1569 synchronize_irq();
1570 s->dma_dac2.swptr = s->dma_dac2.hwptr = s->dma_dac2.count = s->dma_dac2.total_bytes = 0;
1572 if (file->f_mode & FMODE_READ) {
1573 stop_adc(s);
1574 synchronize_irq();
1575 s->dma_adc.swptr = s->dma_adc.hwptr = s->dma_adc.count = s->dma_adc.total_bytes = 0;
1577 return 0;
1579 case SNDCTL_DSP_SPEED:
1580 if (get_user(val, (int *)arg))
1581 return -EFAULT;
1582 if (val >= 0) {
1583 if (file->f_mode & FMODE_READ) {
1584 stop_adc(s);
1585 s->dma_adc.ready = 0;
1586 set_adc_rate(s, val);
1588 if (file->f_mode & FMODE_WRITE) {
1589 stop_dac2(s);
1590 s->dma_dac2.ready = 0;
1591 set_dac2_rate(s, val);
1594 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
1596 case SNDCTL_DSP_STEREO:
1597 if (get_user(val, (int *)arg))
1598 return -EFAULT;
1599 if (file->f_mode & FMODE_READ) {
1600 stop_adc(s);
1601 s->dma_adc.ready = 0;
1602 spin_lock_irqsave(&s->lock, flags);
1603 if (val)
1604 s->sctrl |= SCTRL_R1SMB;
1605 else
1606 s->sctrl &= ~SCTRL_R1SMB;
1607 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1608 spin_unlock_irqrestore(&s->lock, flags);
1610 if (file->f_mode & FMODE_WRITE) {
1611 stop_dac2(s);
1612 s->dma_dac2.ready = 0;
1613 spin_lock_irqsave(&s->lock, flags);
1614 if (val)
1615 s->sctrl |= SCTRL_P2SMB;
1616 else
1617 s->sctrl &= ~SCTRL_P2SMB;
1618 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1619 spin_unlock_irqrestore(&s->lock, flags);
1621 return 0;
1623 case SNDCTL_DSP_CHANNELS:
1624 if (get_user(val, (int *)arg))
1625 return -EFAULT;
1626 if (val != 0) {
1627 if (file->f_mode & FMODE_READ) {
1628 stop_adc(s);
1629 s->dma_adc.ready = 0;
1630 spin_lock_irqsave(&s->lock, flags);
1631 if (val >= 2)
1632 s->sctrl |= SCTRL_R1SMB;
1633 else
1634 s->sctrl &= ~SCTRL_R1SMB;
1635 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1636 spin_unlock_irqrestore(&s->lock, flags);
1638 if (file->f_mode & FMODE_WRITE) {
1639 stop_dac2(s);
1640 s->dma_dac2.ready = 0;
1641 spin_lock_irqsave(&s->lock, flags);
1642 if (val >= 2)
1643 s->sctrl |= SCTRL_P2SMB;
1644 else
1645 s->sctrl &= ~SCTRL_P2SMB;
1646 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1647 spin_unlock_irqrestore(&s->lock, flags);
1650 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
1652 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
1653 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
1655 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
1656 if (get_user(val, (int *)arg))
1657 return -EFAULT;
1658 if (val != AFMT_QUERY) {
1659 if (file->f_mode & FMODE_READ) {
1660 stop_adc(s);
1661 s->dma_adc.ready = 0;
1662 spin_lock_irqsave(&s->lock, flags);
1663 if (val == AFMT_S16_LE)
1664 s->sctrl |= SCTRL_R1SEB;
1665 else
1666 s->sctrl &= ~SCTRL_R1SEB;
1667 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1668 spin_unlock_irqrestore(&s->lock, flags);
1670 if (file->f_mode & FMODE_WRITE) {
1671 stop_dac2(s);
1672 s->dma_dac2.ready = 0;
1673 spin_lock_irqsave(&s->lock, flags);
1674 if (val == AFMT_S16_LE)
1675 s->sctrl |= SCTRL_P2SEB;
1676 else
1677 s->sctrl &= ~SCTRL_P2SEB;
1678 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1679 spin_unlock_irqrestore(&s->lock, flags);
1682 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ?
1683 AFMT_S16_LE : AFMT_U8, (int *)arg);
1685 case SNDCTL_DSP_POST:
1686 return 0;
1688 case SNDCTL_DSP_GETTRIGGER:
1689 val = 0;
1690 if (file->f_mode & FMODE_READ && s->ctrl & CTRL_ADC_EN)
1691 val |= PCM_ENABLE_INPUT;
1692 if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN)
1693 val |= PCM_ENABLE_OUTPUT;
1694 return put_user(val, (int *)arg);
1696 case SNDCTL_DSP_SETTRIGGER:
1697 if (get_user(val, (int *)arg))
1698 return -EFAULT;
1699 if (file->f_mode & FMODE_READ) {
1700 if (val & PCM_ENABLE_INPUT) {
1701 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1702 return ret;
1703 start_adc(s);
1704 } else
1705 stop_adc(s);
1707 if (file->f_mode & FMODE_WRITE) {
1708 if (val & PCM_ENABLE_OUTPUT) {
1709 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1710 return ret;
1711 start_dac2(s);
1712 } else
1713 stop_dac2(s);
1715 return 0;
1717 case SNDCTL_DSP_GETOSPACE:
1718 if (!(file->f_mode & FMODE_WRITE))
1719 return -EINVAL;
1720 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1721 return ret;
1722 spin_lock_irqsave(&s->lock, flags);
1723 es1371_update_ptr(s);
1724 abinfo.fragsize = s->dma_dac2.fragsize;
1725 count = s->dma_dac2.count;
1726 if (count < 0)
1727 count = 0;
1728 abinfo.bytes = s->dma_dac2.dmasize - count;
1729 abinfo.fragstotal = s->dma_dac2.numfrag;
1730 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;
1731 spin_unlock_irqrestore(&s->lock, flags);
1732 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1734 case SNDCTL_DSP_GETISPACE:
1735 if (!(file->f_mode & FMODE_READ))
1736 return -EINVAL;
1737 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1738 return ret;
1739 spin_lock_irqsave(&s->lock, flags);
1740 es1371_update_ptr(s);
1741 abinfo.fragsize = s->dma_adc.fragsize;
1742 count = s->dma_adc.count;
1743 if (count < 0)
1744 count = 0;
1745 abinfo.bytes = count;
1746 abinfo.fragstotal = s->dma_adc.numfrag;
1747 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;
1748 spin_unlock_irqrestore(&s->lock, flags);
1749 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1751 case SNDCTL_DSP_NONBLOCK:
1752 file->f_flags |= O_NONBLOCK;
1753 return 0;
1755 case SNDCTL_DSP_GETODELAY:
1756 if (!(file->f_mode & FMODE_WRITE))
1757 return -EINVAL;
1758 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1759 return ret;
1760 spin_lock_irqsave(&s->lock, flags);
1761 es1371_update_ptr(s);
1762 count = s->dma_dac2.count;
1763 spin_unlock_irqrestore(&s->lock, flags);
1764 if (count < 0)
1765 count = 0;
1766 return put_user(count, (int *)arg);
1768 case SNDCTL_DSP_GETIPTR:
1769 if (!(file->f_mode & FMODE_READ))
1770 return -EINVAL;
1771 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1772 return ret;
1773 spin_lock_irqsave(&s->lock, flags);
1774 es1371_update_ptr(s);
1775 cinfo.bytes = s->dma_adc.total_bytes;
1776 count = s->dma_adc.count;
1777 if (count < 0)
1778 count = 0;
1779 cinfo.blocks = count >> s->dma_adc.fragshift;
1780 cinfo.ptr = s->dma_adc.hwptr;
1781 if (s->dma_adc.mapped)
1782 s->dma_adc.count &= s->dma_adc.fragsize-1;
1783 spin_unlock_irqrestore(&s->lock, flags);
1784 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
1786 case SNDCTL_DSP_GETOPTR:
1787 if (!(file->f_mode & FMODE_WRITE))
1788 return -EINVAL;
1789 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1790 return ret;
1791 spin_lock_irqsave(&s->lock, flags);
1792 es1371_update_ptr(s);
1793 cinfo.bytes = s->dma_dac2.total_bytes;
1794 count = s->dma_dac2.count;
1795 if (count < 0)
1796 count = 0;
1797 cinfo.blocks = count >> s->dma_dac2.fragshift;
1798 cinfo.ptr = s->dma_dac2.hwptr;
1799 if (s->dma_dac2.mapped)
1800 s->dma_dac2.count &= s->dma_dac2.fragsize-1;
1801 spin_unlock_irqrestore(&s->lock, flags);
1802 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
1804 case SNDCTL_DSP_GETBLKSIZE:
1805 if (file->f_mode & FMODE_WRITE) {
1806 if ((val = prog_dmabuf_dac2(s)))
1807 return val;
1808 return put_user(s->dma_dac2.fragsize, (int *)arg);
1810 if ((val = prog_dmabuf_adc(s)))
1811 return val;
1812 return put_user(s->dma_adc.fragsize, (int *)arg);
1814 case SNDCTL_DSP_SETFRAGMENT:
1815 if (get_user(val, (int *)arg))
1816 return -EFAULT;
1817 if (file->f_mode & FMODE_READ) {
1818 s->dma_adc.ossfragshift = val & 0xffff;
1819 s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
1820 if (s->dma_adc.ossfragshift < 4)
1821 s->dma_adc.ossfragshift = 4;
1822 if (s->dma_adc.ossfragshift > 15)
1823 s->dma_adc.ossfragshift = 15;
1824 if (s->dma_adc.ossmaxfrags < 4)
1825 s->dma_adc.ossmaxfrags = 4;
1827 if (file->f_mode & FMODE_WRITE) {
1828 s->dma_dac2.ossfragshift = val & 0xffff;
1829 s->dma_dac2.ossmaxfrags = (val >> 16) & 0xffff;
1830 if (s->dma_dac2.ossfragshift < 4)
1831 s->dma_dac2.ossfragshift = 4;
1832 if (s->dma_dac2.ossfragshift > 15)
1833 s->dma_dac2.ossfragshift = 15;
1834 if (s->dma_dac2.ossmaxfrags < 4)
1835 s->dma_dac2.ossmaxfrags = 4;
1837 return 0;
1839 case SNDCTL_DSP_SUBDIVIDE:
1840 if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
1841 (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
1842 return -EINVAL;
1843 if (get_user(val, (int *)arg))
1844 return -EFAULT;
1845 if (val != 1 && val != 2 && val != 4)
1846 return -EINVAL;
1847 if (file->f_mode & FMODE_READ)
1848 s->dma_adc.subdivision = val;
1849 if (file->f_mode & FMODE_WRITE)
1850 s->dma_dac2.subdivision = val;
1851 return 0;
1853 case SOUND_PCM_READ_RATE:
1854 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
1856 case SOUND_PCM_READ_CHANNELS:
1857 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
1859 case SOUND_PCM_READ_BITS:
1860 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ? 16 : 8, (int *)arg);
1862 case SOUND_PCM_WRITE_FILTER:
1863 case SNDCTL_DSP_SETSYNCRO:
1864 case SOUND_PCM_READ_FILTER:
1865 return -EINVAL;
1868 return mixdev_ioctl(&s->codec, cmd, arg);
1871 static int es1371_open(struct inode *inode, struct file *file)
1873 int minor = MINOR(inode->i_rdev);
1874 DECLARE_WAITQUEUE(wait, current);
1875 unsigned long flags;
1876 struct list_head *list;
1877 struct es1371_state *s;
1879 for (list = devs.next; ; list = list->next) {
1880 if (list == &devs)
1881 return -ENODEV;
1882 s = list_entry(list, struct es1371_state, devs);
1883 if (!((s->dev_audio ^ minor) & ~0xf))
1884 break;
1886 VALIDATE_STATE(s);
1887 file->private_data = s;
1888 /* wait for device to become free */
1889 down(&s->open_sem);
1890 while (s->open_mode & file->f_mode) {
1891 if (file->f_flags & O_NONBLOCK) {
1892 up(&s->open_sem);
1893 return -EBUSY;
1895 add_wait_queue(&s->open_wait, &wait);
1896 __set_current_state(TASK_INTERRUPTIBLE);
1897 up(&s->open_sem);
1898 schedule();
1899 remove_wait_queue(&s->open_wait, &wait);
1900 set_current_state(TASK_RUNNING);
1901 if (signal_pending(current))
1902 return -ERESTARTSYS;
1903 down(&s->open_sem);
1905 if (file->f_mode & FMODE_READ) {
1906 s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
1907 set_adc_rate(s, 8000);
1909 if (file->f_mode & FMODE_WRITE) {
1910 s->dma_dac2.ossfragshift = s->dma_dac2.ossmaxfrags = s->dma_dac2.subdivision = 0;
1911 set_dac2_rate(s, 8000);
1913 spin_lock_irqsave(&s->lock, flags);
1914 if (file->f_mode & FMODE_READ) {
1915 s->sctrl &= ~SCTRL_R1FMT;
1916 if ((minor & 0xf) == SND_DEV_DSP16)
1917 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_R1FMT;
1918 else
1919 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_R1FMT;
1921 if (file->f_mode & FMODE_WRITE) {
1922 s->sctrl &= ~SCTRL_P2FMT;
1923 if ((minor & 0xf) == SND_DEV_DSP16)
1924 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P2FMT;
1925 else
1926 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P2FMT;
1928 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1929 spin_unlock_irqrestore(&s->lock, flags);
1930 s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
1931 up(&s->open_sem);
1932 return 0;
1935 static int es1371_release(struct inode *inode, struct file *file)
1937 struct es1371_state *s = (struct es1371_state *)file->private_data;
1939 VALIDATE_STATE(s);
1940 lock_kernel();
1941 if (file->f_mode & FMODE_WRITE)
1942 drain_dac2(s, file->f_flags & O_NONBLOCK);
1943 down(&s->open_sem);
1944 if (file->f_mode & FMODE_WRITE) {
1945 stop_dac2(s);
1946 dealloc_dmabuf(s, &s->dma_dac2);
1948 if (file->f_mode & FMODE_READ) {
1949 stop_adc(s);
1950 dealloc_dmabuf(s, &s->dma_adc);
1952 s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
1953 up(&s->open_sem);
1954 wake_up(&s->open_wait);
1955 unlock_kernel();
1956 return 0;
1959 static /*const*/ struct file_operations es1371_audio_fops = {
1960 owner: THIS_MODULE,
1961 llseek: es1371_llseek,
1962 read: es1371_read,
1963 write: es1371_write,
1964 poll: es1371_poll,
1965 ioctl: es1371_ioctl,
1966 mmap: es1371_mmap,
1967 open: es1371_open,
1968 release: es1371_release,
1971 /* --------------------------------------------------------------------- */
1973 static ssize_t es1371_write_dac(struct file *file, const char *buffer, size_t count, loff_t *ppos)
1975 struct es1371_state *s = (struct es1371_state *)file->private_data;
1976 DECLARE_WAITQUEUE(wait, current);
1977 ssize_t ret = 0;
1978 unsigned long flags;
1979 unsigned swptr;
1980 int cnt;
1982 VALIDATE_STATE(s);
1983 if (ppos != &file->f_pos)
1984 return -ESPIPE;
1985 if (s->dma_dac1.mapped)
1986 return -ENXIO;
1987 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
1988 return ret;
1989 if (!access_ok(VERIFY_READ, buffer, count))
1990 return -EFAULT;
1991 add_wait_queue(&s->dma_dac1.wait, &wait);
1992 while (count > 0) {
1993 spin_lock_irqsave(&s->lock, flags);
1994 if (s->dma_dac1.count < 0) {
1995 s->dma_dac1.count = 0;
1996 s->dma_dac1.swptr = s->dma_dac1.hwptr;
1998 swptr = s->dma_dac1.swptr;
1999 cnt = s->dma_dac1.dmasize-swptr;
2000 if (s->dma_dac1.count + cnt > s->dma_dac1.dmasize)
2001 cnt = s->dma_dac1.dmasize - s->dma_dac1.count;
2002 if (cnt <= 0)
2003 __set_current_state(TASK_INTERRUPTIBLE);
2004 spin_unlock_irqrestore(&s->lock, flags);
2005 if (cnt > count)
2006 cnt = count;
2007 if (cnt <= 0) {
2008 start_dac1(s);
2009 if (file->f_flags & O_NONBLOCK) {
2010 if (!ret)
2011 ret = -EAGAIN;
2012 break;
2014 schedule();
2015 if (signal_pending(current)) {
2016 if (!ret)
2017 ret = -ERESTARTSYS;
2018 break;
2020 continue;
2022 if (copy_from_user(s->dma_dac1.rawbuf + swptr, buffer, cnt)) {
2023 if (!ret)
2024 ret = -EFAULT;
2025 break;
2027 swptr = (swptr + cnt) % s->dma_dac1.dmasize;
2028 spin_lock_irqsave(&s->lock, flags);
2029 s->dma_dac1.swptr = swptr;
2030 s->dma_dac1.count += cnt;
2031 s->dma_dac1.endcleared = 0;
2032 spin_unlock_irqrestore(&s->lock, flags);
2033 count -= cnt;
2034 buffer += cnt;
2035 ret += cnt;
2036 start_dac1(s);
2038 remove_wait_queue(&s->dma_dac1.wait, &wait);
2039 set_current_state(TASK_RUNNING);
2040 return ret;
2043 /* No kernel lock - we have our own spinlock */
2044 static unsigned int es1371_poll_dac(struct file *file, struct poll_table_struct *wait)
2046 struct es1371_state *s = (struct es1371_state *)file->private_data;
2047 unsigned long flags;
2048 unsigned int mask = 0;
2050 VALIDATE_STATE(s);
2051 if (!s->dma_dac1.ready && prog_dmabuf_dac1(s))
2052 return 0;
2053 poll_wait(file, &s->dma_dac1.wait, wait);
2054 spin_lock_irqsave(&s->lock, flags);
2055 es1371_update_ptr(s);
2056 if (s->dma_dac1.mapped) {
2057 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
2058 mask |= POLLOUT | POLLWRNORM;
2059 } else {
2060 if ((signed)s->dma_dac1.dmasize >= s->dma_dac1.count + (signed)s->dma_dac1.fragsize)
2061 mask |= POLLOUT | POLLWRNORM;
2063 spin_unlock_irqrestore(&s->lock, flags);
2064 return mask;
2067 static int es1371_mmap_dac(struct file *file, struct vm_area_struct *vma)
2069 struct es1371_state *s = (struct es1371_state *)file->private_data;
2070 int ret;
2071 unsigned long size;
2073 VALIDATE_STATE(s);
2074 if (!(vma->vm_flags & VM_WRITE))
2075 return -EINVAL;
2076 lock_kernel();
2077 if ((ret = prog_dmabuf_dac1(s)) != 0)
2078 goto out;
2079 ret = -EINVAL;
2080 if (vma->vm_pgoff != 0)
2081 goto out;
2082 size = vma->vm_end - vma->vm_start;
2083 if (size > (PAGE_SIZE << s->dma_dac1.buforder))
2084 goto out;
2085 ret = -EAGAIN;
2086 if (remap_page_range(vma->vm_start, virt_to_phys(s->dma_dac1.rawbuf), size, vma->vm_page_prot))
2087 goto out;
2088 s->dma_dac1.mapped = 1;
2089 ret = 0;
2090 out:
2091 unlock_kernel();
2092 return ret;
2095 static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
2097 struct es1371_state *s = (struct es1371_state *)file->private_data;
2098 unsigned long flags;
2099 audio_buf_info abinfo;
2100 count_info cinfo;
2101 int count;
2102 int val, ret;
2104 VALIDATE_STATE(s);
2105 switch (cmd) {
2106 case OSS_GETVERSION:
2107 return put_user(SOUND_VERSION, (int *)arg);
2109 case SNDCTL_DSP_SYNC:
2110 return drain_dac1(s, 0/*file->f_flags & O_NONBLOCK*/);
2112 case SNDCTL_DSP_SETDUPLEX:
2113 return -EINVAL;
2115 case SNDCTL_DSP_GETCAPS:
2116 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
2118 case SNDCTL_DSP_RESET:
2119 stop_dac1(s);
2120 synchronize_irq();
2121 s->dma_dac1.swptr = s->dma_dac1.hwptr = s->dma_dac1.count = s->dma_dac1.total_bytes = 0;
2122 return 0;
2124 case SNDCTL_DSP_SPEED:
2125 if (get_user(val, (int *)arg))
2126 return -EFAULT;
2127 if (val >= 0) {
2128 stop_dac1(s);
2129 s->dma_dac1.ready = 0;
2130 set_dac1_rate(s, val);
2132 return put_user(s->dac1rate, (int *)arg);
2134 case SNDCTL_DSP_STEREO:
2135 if (get_user(val, (int *)arg))
2136 return -EFAULT;
2137 stop_dac1(s);
2138 s->dma_dac1.ready = 0;
2139 spin_lock_irqsave(&s->lock, flags);
2140 if (val)
2141 s->sctrl |= SCTRL_P1SMB;
2142 else
2143 s->sctrl &= ~SCTRL_P1SMB;
2144 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2145 spin_unlock_irqrestore(&s->lock, flags);
2146 return 0;
2148 case SNDCTL_DSP_CHANNELS:
2149 if (get_user(val, (int *)arg))
2150 return -EFAULT;
2151 if (val != 0) {
2152 stop_dac1(s);
2153 s->dma_dac1.ready = 0;
2154 spin_lock_irqsave(&s->lock, flags);
2155 if (val >= 2)
2156 s->sctrl |= SCTRL_P1SMB;
2157 else
2158 s->sctrl &= ~SCTRL_P1SMB;
2159 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2160 spin_unlock_irqrestore(&s->lock, flags);
2162 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
2164 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
2165 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
2167 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
2168 if (get_user(val, (int *)arg))
2169 return -EFAULT;
2170 if (val != AFMT_QUERY) {
2171 stop_dac1(s);
2172 s->dma_dac1.ready = 0;
2173 spin_lock_irqsave(&s->lock, flags);
2174 if (val == AFMT_S16_LE)
2175 s->sctrl |= SCTRL_P1SEB;
2176 else
2177 s->sctrl &= ~SCTRL_P1SEB;
2178 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2179 spin_unlock_irqrestore(&s->lock, flags);
2181 return put_user((s->sctrl & SCTRL_P1SEB) ? AFMT_S16_LE : AFMT_U8, (int *)arg);
2183 case SNDCTL_DSP_POST:
2184 return 0;
2186 case SNDCTL_DSP_GETTRIGGER:
2187 return put_user((s->ctrl & CTRL_DAC1_EN) ? PCM_ENABLE_OUTPUT : 0, (int *)arg);
2189 case SNDCTL_DSP_SETTRIGGER:
2190 if (get_user(val, (int *)arg))
2191 return -EFAULT;
2192 if (val & PCM_ENABLE_OUTPUT) {
2193 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
2194 return ret;
2195 start_dac1(s);
2196 } else
2197 stop_dac1(s);
2198 return 0;
2200 case SNDCTL_DSP_GETOSPACE:
2201 if (!(s->ctrl & CTRL_DAC1_EN) && (val = prog_dmabuf_dac1(s)) != 0)
2202 return val;
2203 spin_lock_irqsave(&s->lock, flags);
2204 es1371_update_ptr(s);
2205 abinfo.fragsize = s->dma_dac1.fragsize;
2206 count = s->dma_dac1.count;
2207 if (count < 0)
2208 count = 0;
2209 abinfo.bytes = s->dma_dac1.dmasize - count;
2210 abinfo.fragstotal = s->dma_dac1.numfrag;
2211 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;
2212 spin_unlock_irqrestore(&s->lock, flags);
2213 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2215 case SNDCTL_DSP_NONBLOCK:
2216 file->f_flags |= O_NONBLOCK;
2217 return 0;
2219 case SNDCTL_DSP_GETODELAY:
2220 spin_lock_irqsave(&s->lock, flags);
2221 es1371_update_ptr(s);
2222 count = s->dma_dac1.count;
2223 spin_unlock_irqrestore(&s->lock, flags);
2224 if (count < 0)
2225 count = 0;
2226 return put_user(count, (int *)arg);
2228 case SNDCTL_DSP_GETOPTR:
2229 if (!(file->f_mode & FMODE_WRITE))
2230 return -EINVAL;
2231 spin_lock_irqsave(&s->lock, flags);
2232 es1371_update_ptr(s);
2233 cinfo.bytes = s->dma_dac1.total_bytes;
2234 count = s->dma_dac1.count;
2235 if (count < 0)
2236 count = 0;
2237 cinfo.blocks = count >> s->dma_dac1.fragshift;
2238 cinfo.ptr = s->dma_dac1.hwptr;
2239 if (s->dma_dac1.mapped)
2240 s->dma_dac1.count &= s->dma_dac1.fragsize-1;
2241 spin_unlock_irqrestore(&s->lock, flags);
2242 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
2244 case SNDCTL_DSP_GETBLKSIZE:
2245 if ((val = prog_dmabuf_dac1(s)))
2246 return val;
2247 return put_user(s->dma_dac1.fragsize, (int *)arg);
2249 case SNDCTL_DSP_SETFRAGMENT:
2250 if (get_user(val, (int *)arg))
2251 return -EFAULT;
2252 s->dma_dac1.ossfragshift = val & 0xffff;
2253 s->dma_dac1.ossmaxfrags = (val >> 16) & 0xffff;
2254 if (s->dma_dac1.ossfragshift < 4)
2255 s->dma_dac1.ossfragshift = 4;
2256 if (s->dma_dac1.ossfragshift > 15)
2257 s->dma_dac1.ossfragshift = 15;
2258 if (s->dma_dac1.ossmaxfrags < 4)
2259 s->dma_dac1.ossmaxfrags = 4;
2260 return 0;
2262 case SNDCTL_DSP_SUBDIVIDE:
2263 if (s->dma_dac1.subdivision)
2264 return -EINVAL;
2265 if (get_user(val, (int *)arg))
2266 return -EFAULT;
2267 if (val != 1 && val != 2 && val != 4)
2268 return -EINVAL;
2269 s->dma_dac1.subdivision = val;
2270 return 0;
2272 case SOUND_PCM_READ_RATE:
2273 return put_user(s->dac1rate, (int *)arg);
2275 case SOUND_PCM_READ_CHANNELS:
2276 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
2278 case SOUND_PCM_READ_BITS:
2279 return put_user((s->sctrl & SCTRL_P1SEB) ? 16 : 8, (int *)arg);
2281 case SOUND_PCM_WRITE_FILTER:
2282 case SNDCTL_DSP_SETSYNCRO:
2283 case SOUND_PCM_READ_FILTER:
2284 return -EINVAL;
2287 return mixdev_ioctl(&s->codec, cmd, arg);
2290 static int es1371_open_dac(struct inode *inode, struct file *file)
2292 int minor = MINOR(inode->i_rdev);
2293 DECLARE_WAITQUEUE(wait, current);
2294 unsigned long flags;
2295 struct list_head *list;
2296 struct es1371_state *s;
2298 for (list = devs.next; ; list = list->next) {
2299 if (list == &devs)
2300 return -ENODEV;
2301 s = list_entry(list, struct es1371_state, devs);
2302 if (!((s->dev_dac ^ minor) & ~0xf))
2303 break;
2305 VALIDATE_STATE(s);
2306 /* we allow opening with O_RDWR, most programs do it although they will only write */
2307 #if 0
2308 if (file->f_mode & FMODE_READ)
2309 return -EPERM;
2310 #endif
2311 if (!(file->f_mode & FMODE_WRITE))
2312 return -EINVAL;
2313 file->private_data = s;
2314 /* wait for device to become free */
2315 down(&s->open_sem);
2316 while (s->open_mode & FMODE_DAC) {
2317 if (file->f_flags & O_NONBLOCK) {
2318 up(&s->open_sem);
2319 return -EBUSY;
2321 add_wait_queue(&s->open_wait, &wait);
2322 __set_current_state(TASK_INTERRUPTIBLE);
2323 up(&s->open_sem);
2324 schedule();
2325 remove_wait_queue(&s->open_wait, &wait);
2326 set_current_state(TASK_RUNNING);
2327 if (signal_pending(current))
2328 return -ERESTARTSYS;
2329 down(&s->open_sem);
2331 s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
2332 set_dac1_rate(s, 8000);
2333 spin_lock_irqsave(&s->lock, flags);
2334 s->sctrl &= ~SCTRL_P1FMT;
2335 if ((minor & 0xf) == SND_DEV_DSP16)
2336 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P1FMT;
2337 else
2338 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P1FMT;
2339 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2340 spin_unlock_irqrestore(&s->lock, flags);
2341 s->open_mode |= FMODE_DAC;
2342 up(&s->open_sem);
2343 return 0;
2346 static int es1371_release_dac(struct inode *inode, struct file *file)
2348 struct es1371_state *s = (struct es1371_state *)file->private_data;
2350 VALIDATE_STATE(s);
2351 lock_kernel();
2352 drain_dac1(s, file->f_flags & O_NONBLOCK);
2353 down(&s->open_sem);
2354 stop_dac1(s);
2355 dealloc_dmabuf(s, &s->dma_dac1);
2356 s->open_mode &= ~FMODE_DAC;
2357 up(&s->open_sem);
2358 wake_up(&s->open_wait);
2359 unlock_kernel();
2360 return 0;
2363 static /*const*/ struct file_operations es1371_dac_fops = {
2364 owner: THIS_MODULE,
2365 llseek: es1371_llseek,
2366 write: es1371_write_dac,
2367 poll: es1371_poll_dac,
2368 ioctl: es1371_ioctl_dac,
2369 mmap: es1371_mmap_dac,
2370 open: es1371_open_dac,
2371 release: es1371_release_dac,
2374 /* --------------------------------------------------------------------- */
2376 static ssize_t es1371_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
2378 struct es1371_state *s = (struct es1371_state *)file->private_data;
2379 DECLARE_WAITQUEUE(wait, current);
2380 ssize_t ret;
2381 unsigned long flags;
2382 unsigned ptr;
2383 int cnt;
2385 VALIDATE_STATE(s);
2386 if (ppos != &file->f_pos)
2387 return -ESPIPE;
2388 if (!access_ok(VERIFY_WRITE, buffer, count))
2389 return -EFAULT;
2390 if (count == 0)
2391 return 0;
2392 ret = 0;
2393 add_wait_queue(&s->midi.iwait, &wait);
2394 while (count > 0) {
2395 spin_lock_irqsave(&s->lock, flags);
2396 ptr = s->midi.ird;
2397 cnt = MIDIINBUF - ptr;
2398 if (s->midi.icnt < cnt)
2399 cnt = s->midi.icnt;
2400 if (cnt <= 0)
2401 __set_current_state(TASK_INTERRUPTIBLE);
2402 spin_unlock_irqrestore(&s->lock, flags);
2403 if (cnt > count)
2404 cnt = count;
2405 if (cnt <= 0) {
2406 if (file->f_flags & O_NONBLOCK) {
2407 if (!ret)
2408 ret = -EAGAIN;
2409 break;
2411 schedule();
2412 if (signal_pending(current)) {
2413 if (!ret)
2414 ret = -ERESTARTSYS;
2415 break;
2417 continue;
2419 if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt)) {
2420 if (!ret)
2421 ret = -EFAULT;
2422 break;
2424 ptr = (ptr + cnt) % MIDIINBUF;
2425 spin_lock_irqsave(&s->lock, flags);
2426 s->midi.ird = ptr;
2427 s->midi.icnt -= cnt;
2428 spin_unlock_irqrestore(&s->lock, flags);
2429 count -= cnt;
2430 buffer += cnt;
2431 ret += cnt;
2432 break;
2434 __set_current_state(TASK_RUNNING);
2435 remove_wait_queue(&s->midi.iwait, &wait);
2436 return ret;
2439 static ssize_t es1371_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
2441 struct es1371_state *s = (struct es1371_state *)file->private_data;
2442 DECLARE_WAITQUEUE(wait, current);
2443 ssize_t ret;
2444 unsigned long flags;
2445 unsigned ptr;
2446 int cnt;
2448 VALIDATE_STATE(s);
2449 if (ppos != &file->f_pos)
2450 return -ESPIPE;
2451 if (!access_ok(VERIFY_READ, buffer, count))
2452 return -EFAULT;
2453 if (count == 0)
2454 return 0;
2455 ret = 0;
2456 add_wait_queue(&s->midi.owait, &wait);
2457 while (count > 0) {
2458 spin_lock_irqsave(&s->lock, flags);
2459 ptr = s->midi.owr;
2460 cnt = MIDIOUTBUF - ptr;
2461 if (s->midi.ocnt + cnt > MIDIOUTBUF)
2462 cnt = MIDIOUTBUF - s->midi.ocnt;
2463 if (cnt <= 0) {
2464 __set_current_state(TASK_INTERRUPTIBLE);
2465 es1371_handle_midi(s);
2467 spin_unlock_irqrestore(&s->lock, flags);
2468 if (cnt > count)
2469 cnt = count;
2470 if (cnt <= 0) {
2471 if (file->f_flags & O_NONBLOCK) {
2472 if (!ret)
2473 ret = -EAGAIN;
2474 break;
2476 schedule();
2477 if (signal_pending(current)) {
2478 if (!ret)
2479 ret = -ERESTARTSYS;
2480 break;
2482 continue;
2484 if (copy_from_user(s->midi.obuf + ptr, buffer, cnt)) {
2485 if (!ret)
2486 ret = -EFAULT;
2487 break;
2489 ptr = (ptr + cnt) % MIDIOUTBUF;
2490 spin_lock_irqsave(&s->lock, flags);
2491 s->midi.owr = ptr;
2492 s->midi.ocnt += cnt;
2493 spin_unlock_irqrestore(&s->lock, flags);
2494 count -= cnt;
2495 buffer += cnt;
2496 ret += cnt;
2497 spin_lock_irqsave(&s->lock, flags);
2498 es1371_handle_midi(s);
2499 spin_unlock_irqrestore(&s->lock, flags);
2501 __set_current_state(TASK_RUNNING);
2502 remove_wait_queue(&s->midi.owait, &wait);
2503 return ret;
2506 /* No kernel lock - we have our own spinlock */
2507 static unsigned int es1371_midi_poll(struct file *file, struct poll_table_struct *wait)
2509 struct es1371_state *s = (struct es1371_state *)file->private_data;
2510 unsigned long flags;
2511 unsigned int mask = 0;
2513 VALIDATE_STATE(s);
2514 if (file->f_mode & FMODE_WRITE)
2515 poll_wait(file, &s->midi.owait, wait);
2516 if (file->f_mode & FMODE_READ)
2517 poll_wait(file, &s->midi.iwait, wait);
2518 spin_lock_irqsave(&s->lock, flags);
2519 if (file->f_mode & FMODE_READ) {
2520 if (s->midi.icnt > 0)
2521 mask |= POLLIN | POLLRDNORM;
2523 if (file->f_mode & FMODE_WRITE) {
2524 if (s->midi.ocnt < MIDIOUTBUF)
2525 mask |= POLLOUT | POLLWRNORM;
2527 spin_unlock_irqrestore(&s->lock, flags);
2528 return mask;
2531 static int es1371_midi_open(struct inode *inode, struct file *file)
2533 int minor = MINOR(inode->i_rdev);
2534 DECLARE_WAITQUEUE(wait, current);
2535 unsigned long flags;
2536 struct list_head *list;
2537 struct es1371_state *s;
2539 for (list = devs.next; ; list = list->next) {
2540 if (list == &devs)
2541 return -ENODEV;
2542 s = list_entry(list, struct es1371_state, devs);
2543 if (s->dev_midi == minor)
2544 break;
2546 VALIDATE_STATE(s);
2547 file->private_data = s;
2548 /* wait for device to become free */
2549 down(&s->open_sem);
2550 while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
2551 if (file->f_flags & O_NONBLOCK) {
2552 up(&s->open_sem);
2553 return -EBUSY;
2555 add_wait_queue(&s->open_wait, &wait);
2556 __set_current_state(TASK_INTERRUPTIBLE);
2557 up(&s->open_sem);
2558 schedule();
2559 remove_wait_queue(&s->open_wait, &wait);
2560 set_current_state(TASK_RUNNING);
2561 if (signal_pending(current))
2562 return -ERESTARTSYS;
2563 down(&s->open_sem);
2565 spin_lock_irqsave(&s->lock, flags);
2566 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2567 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2568 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2569 outb(UCTRL_CNTRL_SWR, s->io+ES1371_REG_UART_CONTROL);
2570 outb(0, s->io+ES1371_REG_UART_CONTROL);
2571 outb(0, s->io+ES1371_REG_UART_TEST);
2573 if (file->f_mode & FMODE_READ) {
2574 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2576 if (file->f_mode & FMODE_WRITE) {
2577 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2579 s->ctrl |= CTRL_UART_EN;
2580 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2581 es1371_handle_midi(s);
2582 spin_unlock_irqrestore(&s->lock, flags);
2583 s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
2584 up(&s->open_sem);
2585 return 0;
2588 static int es1371_midi_release(struct inode *inode, struct file *file)
2590 struct es1371_state *s = (struct es1371_state *)file->private_data;
2591 DECLARE_WAITQUEUE(wait, current);
2592 unsigned long flags;
2593 unsigned count, tmo;
2595 VALIDATE_STATE(s);
2596 lock_kernel();
2597 if (file->f_mode & FMODE_WRITE) {
2598 add_wait_queue(&s->midi.owait, &wait);
2599 for (;;) {
2600 __set_current_state(TASK_INTERRUPTIBLE);
2601 spin_lock_irqsave(&s->lock, flags);
2602 count = s->midi.ocnt;
2603 spin_unlock_irqrestore(&s->lock, flags);
2604 if (count <= 0)
2605 break;
2606 if (signal_pending(current))
2607 break;
2608 if (file->f_flags & O_NONBLOCK) {
2609 remove_wait_queue(&s->midi.owait, &wait);
2610 set_current_state(TASK_RUNNING);
2611 return -EBUSY;
2613 tmo = (count * HZ) / 3100;
2614 if (!schedule_timeout(tmo ? : 1) && tmo)
2615 printk(KERN_DEBUG PFX "midi timed out??\n");
2617 remove_wait_queue(&s->midi.owait, &wait);
2618 set_current_state(TASK_RUNNING);
2620 down(&s->open_sem);
2621 s->open_mode &= (~(file->f_mode << FMODE_MIDI_SHIFT)) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE);
2622 spin_lock_irqsave(&s->lock, flags);
2623 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2624 s->ctrl &= ~CTRL_UART_EN;
2625 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2627 spin_unlock_irqrestore(&s->lock, flags);
2628 up(&s->open_sem);
2629 wake_up(&s->open_wait);
2630 unlock_kernel();
2631 return 0;
2634 static /*const*/ struct file_operations es1371_midi_fops = {
2635 owner: THIS_MODULE,
2636 llseek: es1371_llseek,
2637 read: es1371_midi_read,
2638 write: es1371_midi_write,
2639 poll: es1371_midi_poll,
2640 open: es1371_midi_open,
2641 release: es1371_midi_release,
2644 /* --------------------------------------------------------------------- */
2647 * for debugging purposes, we'll create a proc device that dumps the
2648 * CODEC chipstate
2651 #ifdef ES1371_DEBUG
2652 static int proc_es1371_dump (char *buf, char **start, off_t fpos, int length, int *eof, void *data)
2654 struct es1371_state *s;
2655 int cnt, len = 0;
2657 if (list_empty(&devs))
2658 return 0;
2659 s = list_entry(devs.next, struct es1371_state, devs);
2660 /* print out header */
2661 len += sprintf(buf + len, "\t\tCreative ES137x Debug Dump-o-matic\n");
2663 /* print out CODEC state */
2664 len += sprintf (buf + len, "AC97 CODEC state\n");
2665 for (cnt=0; cnt <= 0x7e; cnt = cnt +2)
2666 len+= sprintf (buf + len, "reg:0x%02x val:0x%04x\n", cnt, rdcodec(&s->codec, cnt));
2668 if (fpos >=len){
2669 *start = buf;
2670 *eof =1;
2671 return 0;
2673 *start = buf + fpos;
2674 if ((len -= fpos) > length)
2675 return length;
2676 *eof =1;
2677 return len;
2680 #endif /* ES1371_DEBUG */
2682 /* --------------------------------------------------------------------- */
2684 /* maximum number of devices; only used for command line params */
2685 #define NR_DEVICE 5
2687 static int joystick[NR_DEVICE] = { 0, };
2688 static int spdif[NR_DEVICE] = { 0, };
2689 static int nomix[NR_DEVICE] = { 0, };
2691 static unsigned int devindex = 0;
2693 MODULE_PARM(joystick, "1-" __MODULE_STRING(NR_DEVICE) "i");
2694 MODULE_PARM_DESC(joystick, "sets address and enables joystick interface (still need separate driver)");
2695 MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
2696 MODULE_PARM_DESC(spdif, "if 1 the output is in S/PDIF digital mode");
2697 MODULE_PARM(nomix, "1-" __MODULE_STRING(NR_DEVICE) "i");
2698 MODULE_PARM_DESC(nomix, "if 1 no analog audio is mixed to the digital output");
2700 MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
2701 MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver");
2703 /* --------------------------------------------------------------------- */
2705 static struct initvol {
2706 int mixch;
2707 int vol;
2708 } initvol[] __initdata = {
2709 { SOUND_MIXER_WRITE_LINE, 0x4040 },
2710 { SOUND_MIXER_WRITE_CD, 0x4040 },
2711 { MIXER_WRITE(SOUND_MIXER_VIDEO), 0x4040 },
2712 { SOUND_MIXER_WRITE_LINE1, 0x4040 },
2713 { SOUND_MIXER_WRITE_PCM, 0x4040 },
2714 { SOUND_MIXER_WRITE_VOLUME, 0x4040 },
2715 { MIXER_WRITE(SOUND_MIXER_PHONEOUT), 0x4040 },
2716 { SOUND_MIXER_WRITE_OGAIN, 0x4040 },
2717 { MIXER_WRITE(SOUND_MIXER_PHONEIN), 0x4040 },
2718 { SOUND_MIXER_WRITE_SPEAKER, 0x4040 },
2719 { SOUND_MIXER_WRITE_MIC, 0x4040 },
2720 { SOUND_MIXER_WRITE_RECLEV, 0x4040 },
2721 { SOUND_MIXER_WRITE_IGAIN, 0x4040 }
2724 #define RSRCISIOREGION(dev,num) (pci_resource_start((dev), (num)) != 0 && \
2725 (pci_resource_flags((dev), (num)) & IORESOURCE_IO))
2727 static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
2729 struct es1371_state *s;
2730 mm_segment_t fs;
2731 int i, val;
2732 unsigned long tmo;
2733 signed long tmo2;
2734 unsigned int cssr;
2736 if (!RSRCISIOREGION(pcidev, 0))
2737 return -1;
2738 if (pcidev->irq == 0)
2739 return -1;
2740 if (!pci_dma_supported(pcidev, 0xffffffff)) {
2741 printk(KERN_WARNING "es1371: architecture does not support 32bit PCI busmaster DMA\n");
2742 return -1;
2744 if (!(s = kmalloc(sizeof(struct es1371_state), GFP_KERNEL))) {
2745 printk(KERN_WARNING PFX "out of memory\n");
2746 return -1;
2748 memset(s, 0, sizeof(struct es1371_state));
2749 init_waitqueue_head(&s->dma_adc.wait);
2750 init_waitqueue_head(&s->dma_dac1.wait);
2751 init_waitqueue_head(&s->dma_dac2.wait);
2752 init_waitqueue_head(&s->open_wait);
2753 init_waitqueue_head(&s->midi.iwait);
2754 init_waitqueue_head(&s->midi.owait);
2755 init_MUTEX(&s->open_sem);
2756 spin_lock_init(&s->lock);
2757 s->magic = ES1371_MAGIC;
2758 s->dev = pcidev;
2759 s->io = pci_resource_start(pcidev, 0);
2760 s->irq = pcidev->irq;
2761 s->vendor = pcidev->vendor;
2762 s->device = pcidev->device;
2763 pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev);
2764 s->codec.private_data = s;
2765 s->codec.id = 0;
2766 s->codec.codec_read = rdcodec;
2767 s->codec.codec_write = wrcodec;
2768 printk(KERN_INFO PFX "found chip, vendor id 0x%04x device id 0x%04x revision 0x%02x\n",
2769 s->vendor, s->device, s->rev);
2770 if (!request_region(s->io, ES1371_EXTENT, "es1371")) {
2771 printk(KERN_ERR PFX "io ports %#lx-%#lx in use\n", s->io, s->io+ES1371_EXTENT-1);
2772 goto err_region;
2774 if (pci_enable_device(pcidev))
2775 goto err_irq;
2776 if (request_irq(s->irq, es1371_interrupt, SA_SHIRQ, "es1371", s)) {
2777 printk(KERN_ERR PFX "irq %u in use\n", s->irq);
2778 goto err_irq;
2780 printk(KERN_INFO PFX "found es1371 rev %d at io %#lx irq %u\n"
2781 KERN_INFO PFX "features: joystick 0x%x\n", s->rev, s->io, s->irq, joystick[devindex]);
2782 /* register devices */
2783 if ((s->dev_audio = register_sound_dsp(&es1371_audio_fops, -1)) < 0)
2784 goto err_dev1;
2785 if ((s->codec.dev_mixer = register_sound_mixer(&es1371_mixer_fops, -1)) < 0)
2786 goto err_dev2;
2787 if ((s->dev_dac = register_sound_dsp(&es1371_dac_fops, -1)) < 0)
2788 goto err_dev3;
2789 if ((s->dev_midi = register_sound_midi(&es1371_midi_fops, -1)) < 0)
2790 goto err_dev4;
2791 #ifdef ES1371_DEBUG
2792 /* intialize the debug proc device */
2793 s->ps = create_proc_read_entry("es1371",0,NULL,proc_es1371_dump,NULL);
2794 #endif /* ES1371_DEBUG */
2796 /* initialize codec registers */
2797 s->ctrl = 0;
2798 if (pcidev->subsystem_vendor == 0x107b && pcidev->subsystem_device == 0x2150) {
2799 s->ctrl |= CTRL_GPIO_OUT0;
2800 printk(KERN_INFO PFX "Running On Gateway 2000 Solo 2510 - Amp On \n");
2802 if ((joystick[devindex] & ~0x18) == 0x200) {
2803 if (check_region(joystick[devindex], JOY_EXTENT))
2804 printk(KERN_ERR PFX "joystick address 0x%x already in use\n", joystick[devindex]);
2805 else {
2806 s->ctrl |= CTRL_JYSTK_EN | (((joystick[devindex] >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
2809 s->sctrl = 0;
2810 cssr = 0;
2811 s->spdif_volume = -1;
2812 /* check to see if s/pdif mode is being requested */
2813 if (spdif[devindex]) {
2814 if (s->rev >= 4) {
2815 printk(KERN_INFO PFX "enabling S/PDIF output\n");
2816 s->spdif_volume = 0;
2817 cssr |= STAT_EN_SPDIF;
2818 s->ctrl |= CTRL_SPDIFEN_B;
2819 if (nomix[devindex]) /* don't mix analog inputs to s/pdif output */
2820 s->ctrl |= CTRL_RECEN_B;
2821 } else {
2822 printk(KERN_ERR PFX "revision %d does not support S/PDIF\n", s->rev);
2825 /* initialize the chips */
2826 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2827 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2828 outl(0, s->io+ES1371_REG_LEGACY);
2829 pci_set_master(pcidev); /* enable bus mastering */
2830 /* if we are a 5880 turn on the AC97 */
2831 if (s->vendor == PCI_VENDOR_ID_ENSONIQ &&
2832 ((s->device == PCI_DEVICE_ID_ENSONIQ_CT5880 && s->rev == CT5880REV_CT5880_C) ||
2833 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A) ||
2834 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_ES1373_8))) {
2835 cssr |= CSTAT_5880_AC97_RST;
2836 outl(cssr, s->io+ES1371_REG_STATUS);
2837 /* need to delay around 20ms(bleech) to give
2838 some CODECs enough time to wakeup */
2839 tmo = jiffies + (HZ / 50) + 1;
2840 for (;;) {
2841 tmo2 = tmo - jiffies;
2842 if (tmo2 <= 0)
2843 break;
2844 schedule_timeout(tmo2);
2847 /* AC97 warm reset to start the bitclk */
2848 outl(s->ctrl | CTRL_SYNCRES, s->io+ES1371_REG_CONTROL);
2849 udelay(2);
2850 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2851 /* init the sample rate converter */
2852 src_init(s);
2853 /* codec init */
2854 if (!ac97_probe_codec(&s->codec))
2855 goto err_dev4;
2856 /* set default values */
2858 fs = get_fs();
2859 set_fs(KERNEL_DS);
2860 val = SOUND_MASK_LINE;
2861 mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
2862 for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
2863 val = initvol[i].vol;
2864 mixdev_ioctl(&s->codec, initvol[i].mixch, (unsigned long)&val);
2866 /* mute master and PCM when in S/PDIF mode */
2867 if (s->spdif_volume != -1) {
2868 val = 0x0000;
2869 s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_VOLUME, (unsigned long)&val);
2870 s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_PCM, (unsigned long)&val);
2872 set_fs(fs);
2873 /* turn on S/PDIF output driver if requested */
2874 outl(cssr, s->io+ES1371_REG_STATUS);
2875 /* store it in the driver field */
2876 pci_set_drvdata(pcidev, s);
2877 pcidev->dma_mask = 0xffffffff;
2878 /* put it into driver list */
2879 list_add_tail(&s->devs, &devs);
2880 /* increment devindex */
2881 if (devindex < NR_DEVICE-1)
2882 devindex++;
2883 return 0;
2885 err_dev4:
2886 unregister_sound_dsp(s->dev_dac);
2887 err_dev3:
2888 unregister_sound_mixer(s->codec.dev_mixer);
2889 err_dev2:
2890 unregister_sound_dsp(s->dev_audio);
2891 err_dev1:
2892 printk(KERN_ERR PFX "cannot register misc device\n");
2893 free_irq(s->irq, s);
2894 err_irq:
2895 release_region(s->io, ES1371_EXTENT);
2896 err_region:
2897 kfree(s);
2898 return -1;
2901 static void __devinit es1371_remove(struct pci_dev *dev)
2903 struct es1371_state *s = pci_get_drvdata(dev);
2905 if (!s)
2906 return;
2907 list_del(&s->devs);
2908 #ifdef ES1371_DEBUG
2909 if (s->ps)
2910 remove_proc_entry("es1371", NULL);
2911 #endif /* ES1371_DEBUG */
2912 outl(0, s->io+ES1371_REG_CONTROL); /* switch everything off */
2913 outl(0, s->io+ES1371_REG_SERIAL_CONTROL); /* clear serial interrupts */
2914 synchronize_irq();
2915 free_irq(s->irq, s);
2916 release_region(s->io, ES1371_EXTENT);
2917 unregister_sound_dsp(s->dev_audio);
2918 unregister_sound_mixer(s->codec.dev_mixer);
2919 unregister_sound_dsp(s->dev_dac);
2920 unregister_sound_midi(s->dev_midi);
2921 kfree(s);
2922 pci_set_drvdata(dev, NULL);
2925 static struct pci_device_id id_table[] __devinitdata = {
2926 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1371, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
2927 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_CT5880, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
2928 { PCI_VENDOR_ID_ECTIVA, PCI_DEVICE_ID_ECTIVA_EV1938, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
2929 { 0, }
2932 MODULE_DEVICE_TABLE(pci, id_table);
2934 static struct pci_driver es1371_driver = {
2935 name: "es1371",
2936 id_table: id_table,
2937 probe: es1371_probe,
2938 remove: es1371_remove
2941 static int __init init_es1371(void)
2943 if (!pci_present()) /* No PCI bus in this machine! */
2944 return -ENODEV;
2945 printk(KERN_INFO PFX "version v0.27 time " __TIME__ " " __DATE__ "\n");
2946 return pci_module_init(&es1371_driver);
2949 static void __exit cleanup_es1371(void)
2951 printk(KERN_INFO PFX "unloading\n");
2952 pci_unregister_driver(&es1371_driver);
2955 module_init(init_es1371);
2956 module_exit(cleanup_es1371);
2958 /* --------------------------------------------------------------------- */
2960 #ifndef MODULE
2962 /* format is: es1371=[joystick] */
2964 static int __init es1371_setup(char *str)
2966 static unsigned __initdata nr_dev = 0;
2968 if (nr_dev >= NR_DEVICE)
2969 return 0;
2970 if (get_option(&str, &joystick[nr_dev]) == 2)
2971 (void)get_option(&str, &spdif[nr_dev]);
2972 nr_dev++;
2973 return 1;
2976 __setup("es1371=", es1371_setup);
2978 #endif /* MODULE */