1 /*****************************************************************************/
4 * es1371.c -- Creative Ensoniq ES1371.
6 * Copyright (C) 1998-2001, 2003 Thomas Sailer (t.sailer@alumni.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.
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.
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
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
105 * 12.12.2000 0.28 More dma buffer initializations, patch from
106 * Tjeerd Mulder <tjeerd.mulder@fujitsu-siemens.com>
107 * 05.01.2001 0.29 Hopefully updates will not be required anymore when Creative bumps
108 * the CT5880 revision.
109 * suggested by Stephan Müller <smueller@chronox.de>
110 * 31.01.2001 0.30 Register/Unregister gameport
111 * Fix SETTRIGGER non OSS API conformity
112 * 14.07.2001 0.31 Add list of laptops needing amplifier control
113 * 03.01.2003 0.32 open_mode fixes from Georg Acher <acher@in.tum.de>
116 /*****************************************************************************/
118 #include <linux/version.h>
119 #include <linux/module.h>
120 #include <linux/string.h>
121 #include <linux/ioport.h>
122 #include <linux/sched.h>
123 #include <linux/delay.h>
124 #include <linux/sound.h>
125 #include <linux/slab.h>
126 #include <linux/soundcard.h>
127 #include <linux/pci.h>
128 #include <linux/init.h>
129 #include <linux/poll.h>
130 #include <linux/bitops.h>
131 #include <linux/proc_fs.h>
132 #include <linux/spinlock.h>
133 #include <linux/smp_lock.h>
134 #include <linux/ac97_codec.h>
135 #include <linux/wrapper.h>
138 #include <asm/uaccess.h>
139 #include <asm/hardirq.h>
140 #include <linux/gameport.h>
142 /* --------------------------------------------------------------------- */
144 #undef OSS_DOCUMENTED_MIXER_SEMANTICS
147 /*#define DBG(x) {x}*/
149 /* --------------------------------------------------------------------- */
151 #ifndef PCI_VENDOR_ID_ENSONIQ
152 #define PCI_VENDOR_ID_ENSONIQ 0x1274
155 #ifndef PCI_VENDOR_ID_ECTIVA
156 #define PCI_VENDOR_ID_ECTIVA 0x1102
159 #ifndef PCI_DEVICE_ID_ENSONIQ_ES1371
160 #define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371
163 #ifndef PCI_DEVICE_ID_ENSONIQ_CT5880
164 #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880
167 #ifndef PCI_DEVICE_ID_ECTIVA_EV1938
168 #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938
172 /* This is a little confusing because all ES1371 compatible chips have the
173 same DEVICE_ID, the only thing differentiating them is the REV_ID field.
174 This is only significant if you want to enable features on the later parts.
175 Yes, I know it's stupid and why didn't we use the sub IDs?
177 #define ES1371REV_ES1373_A 0x04
178 #define ES1371REV_ES1373_B 0x06
179 #define ES1371REV_CT5880_A 0x07
180 #define CT5880REV_CT5880_C 0x02
181 #define CT5880REV_CT5880_D 0x03
182 #define ES1371REV_ES1371_B 0x09
183 #define EV1938REV_EV1938_A 0x00
184 #define ES1371REV_ES1373_8 0x08
186 #define ES1371_MAGIC ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
188 #define ES1371_EXTENT 0x40
191 #define ES1371_REG_CONTROL 0x00
192 #define ES1371_REG_STATUS 0x04 /* on the 5880 it is control/status */
193 #define ES1371_REG_UART_DATA 0x08
194 #define ES1371_REG_UART_STATUS 0x09
195 #define ES1371_REG_UART_CONTROL 0x09
196 #define ES1371_REG_UART_TEST 0x0a
197 #define ES1371_REG_MEMPAGE 0x0c
198 #define ES1371_REG_SRCONV 0x10
199 #define ES1371_REG_CODEC 0x14
200 #define ES1371_REG_LEGACY 0x18
201 #define ES1371_REG_SERIAL_CONTROL 0x20
202 #define ES1371_REG_DAC1_SCOUNT 0x24
203 #define ES1371_REG_DAC2_SCOUNT 0x28
204 #define ES1371_REG_ADC_SCOUNT 0x2c
206 #define ES1371_REG_DAC1_FRAMEADR 0xc30
207 #define ES1371_REG_DAC1_FRAMECNT 0xc34
208 #define ES1371_REG_DAC2_FRAMEADR 0xc38
209 #define ES1371_REG_DAC2_FRAMECNT 0xc3c
210 #define ES1371_REG_ADC_FRAMEADR 0xd30
211 #define ES1371_REG_ADC_FRAMECNT 0xd34
213 #define ES1371_FMT_U8_MONO 0
214 #define ES1371_FMT_U8_STEREO 1
215 #define ES1371_FMT_S16_MONO 2
216 #define ES1371_FMT_S16_STEREO 3
217 #define ES1371_FMT_STEREO 1
218 #define ES1371_FMT_S16 2
219 #define ES1371_FMT_MASK 3
221 static const unsigned sample_size[] = { 1, 2, 2, 4 };
222 static const unsigned sample_shift[] = { 0, 1, 1, 2 };
224 #define CTRL_RECEN_B 0x08000000 /* 1 = don't mix analog in to digital out */
225 #define CTRL_SPDIFEN_B 0x04000000
226 #define CTRL_JOY_SHIFT 24
227 #define CTRL_JOY_MASK 3
228 #define CTRL_JOY_200 0x00000000 /* joystick base address */
229 #define CTRL_JOY_208 0x01000000
230 #define CTRL_JOY_210 0x02000000
231 #define CTRL_JOY_218 0x03000000
232 #define CTRL_GPIO_IN0 0x00100000 /* general purpose inputs/outputs */
233 #define CTRL_GPIO_IN1 0x00200000
234 #define CTRL_GPIO_IN2 0x00400000
235 #define CTRL_GPIO_IN3 0x00800000
236 #define CTRL_GPIO_OUT0 0x00010000
237 #define CTRL_GPIO_OUT1 0x00020000
238 #define CTRL_GPIO_OUT2 0x00040000
239 #define CTRL_GPIO_OUT3 0x00080000
240 #define CTRL_MSFMTSEL 0x00008000 /* MPEG serial data fmt: 0 = Sony, 1 = I2S */
241 #define CTRL_SYNCRES 0x00004000 /* AC97 warm reset */
242 #define CTRL_ADCSTOP 0x00002000 /* stop ADC transfers */
243 #define CTRL_PWR_INTRM 0x00001000 /* 1 = power level ints enabled */
244 #define CTRL_M_CB 0x00000800 /* recording source: 0 = ADC, 1 = MPEG */
245 #define CTRL_CCB_INTRM 0x00000400 /* 1 = CCB "voice" ints enabled */
246 #define CTRL_PDLEV0 0x00000000 /* power down level */
247 #define CTRL_PDLEV1 0x00000100
248 #define CTRL_PDLEV2 0x00000200
249 #define CTRL_PDLEV3 0x00000300
250 #define CTRL_BREQ 0x00000080 /* 1 = test mode (internal mem test) */
251 #define CTRL_DAC1_EN 0x00000040 /* enable DAC1 */
252 #define CTRL_DAC2_EN 0x00000020 /* enable DAC2 */
253 #define CTRL_ADC_EN 0x00000010 /* enable ADC */
254 #define CTRL_UART_EN 0x00000008 /* enable MIDI uart */
255 #define CTRL_JYSTK_EN 0x00000004 /* enable Joystick port */
256 #define CTRL_XTALCLKDIS 0x00000002 /* 1 = disable crystal clock input */
257 #define CTRL_PCICLKDIS 0x00000001 /* 1 = disable PCI clock distribution */
260 #define STAT_INTR 0x80000000 /* wired or of all interrupt bits */
261 #define CSTAT_5880_AC97_RST 0x20000000 /* CT5880 Reset bit */
262 #define STAT_EN_SPDIF 0x00040000 /* enable S/PDIF circuitry */
263 #define STAT_TS_SPDIF 0x00020000 /* test S/PDIF circuitry */
264 #define STAT_TESTMODE 0x00010000 /* test ASIC */
265 #define STAT_SYNC_ERR 0x00000100 /* 1 = codec sync error */
266 #define STAT_VC 0x000000c0 /* CCB int source, 0=DAC1, 1=DAC2, 2=ADC, 3=undef */
268 #define STAT_MPWR 0x00000020 /* power level interrupt */
269 #define STAT_MCCB 0x00000010 /* CCB int pending */
270 #define STAT_UART 0x00000008 /* UART int pending */
271 #define STAT_DAC1 0x00000004 /* DAC1 int pending */
272 #define STAT_DAC2 0x00000002 /* DAC2 int pending */
273 #define STAT_ADC 0x00000001 /* ADC int pending */
275 #define USTAT_RXINT 0x80 /* UART rx int pending */
276 #define USTAT_TXINT 0x04 /* UART tx int pending */
277 #define USTAT_TXRDY 0x02 /* UART tx ready */
278 #define USTAT_RXRDY 0x01 /* UART rx ready */
280 #define UCTRL_RXINTEN 0x80 /* 1 = enable RX ints */
281 #define UCTRL_TXINTEN 0x60 /* TX int enable field mask */
282 #define UCTRL_ENA_TXINT 0x20 /* enable TX int */
283 #define UCTRL_CNTRL 0x03 /* control field */
284 #define UCTRL_CNTRL_SWR 0x03 /* software reset command */
286 /* sample rate converter */
287 #define SRC_OKSTATE 1
289 #define SRC_RAMADDR_MASK 0xfe000000
290 #define SRC_RAMADDR_SHIFT 25
291 #define SRC_DAC1FREEZE (1UL << 21)
292 #define SRC_DAC2FREEZE (1UL << 20)
293 #define SRC_ADCFREEZE (1UL << 19)
296 #define SRC_WE 0x01000000 /* read/write control for SRC RAM */
297 #define SRC_BUSY 0x00800000 /* SRC busy */
298 #define SRC_DIS 0x00400000 /* 1 = disable SRC */
299 #define SRC_DDAC1 0x00200000 /* 1 = disable accum update for DAC1 */
300 #define SRC_DDAC2 0x00100000 /* 1 = disable accum update for DAC2 */
301 #define SRC_DADC 0x00080000 /* 1 = disable accum update for ADC2 */
302 #define SRC_CTLMASK 0x00780000
303 #define SRC_RAMDATA_MASK 0x0000ffff
304 #define SRC_RAMDATA_SHIFT 0
306 #define SRCREG_ADC 0x78
307 #define SRCREG_DAC1 0x70
308 #define SRCREG_DAC2 0x74
309 #define SRCREG_VOL_ADC 0x6c
310 #define SRCREG_VOL_DAC1 0x7c
311 #define SRCREG_VOL_DAC2 0x7e
313 #define SRCREG_TRUNC_N 0x00
314 #define SRCREG_INT_REGS 0x01
315 #define SRCREG_ACCUM_FRAC 0x02
316 #define SRCREG_VFREQ_FRAC 0x03
318 #define CODEC_PIRD 0x00800000 /* 0 = write AC97 register */
319 #define CODEC_PIADD_MASK 0x007f0000
320 #define CODEC_PIADD_SHIFT 16
321 #define CODEC_PIDAT_MASK 0x0000ffff
322 #define CODEC_PIDAT_SHIFT 0
324 #define CODEC_RDY 0x80000000 /* AC97 read data valid */
325 #define CODEC_WIP 0x40000000 /* AC97 write in progress */
326 #define CODEC_PORD 0x00800000 /* 0 = write AC97 register */
327 #define CODEC_POADD_MASK 0x007f0000
328 #define CODEC_POADD_SHIFT 16
329 #define CODEC_PODAT_MASK 0x0000ffff
330 #define CODEC_PODAT_SHIFT 0
333 #define LEGACY_JFAST 0x80000000 /* fast joystick timing */
334 #define LEGACY_FIRQ 0x01000000 /* force IRQ */
336 #define SCTRL_DACTEST 0x00400000 /* 1 = DAC test, test vector generation purposes */
337 #define SCTRL_P2ENDINC 0x00380000 /* */
338 #define SCTRL_SH_P2ENDINC 19
339 #define SCTRL_P2STINC 0x00070000 /* */
340 #define SCTRL_SH_P2STINC 16
341 #define SCTRL_R1LOOPSEL 0x00008000 /* 0 = loop mode */
342 #define SCTRL_P2LOOPSEL 0x00004000 /* 0 = loop mode */
343 #define SCTRL_P1LOOPSEL 0x00002000 /* 0 = loop mode */
344 #define SCTRL_P2PAUSE 0x00001000 /* 1 = pause mode */
345 #define SCTRL_P1PAUSE 0x00000800 /* 1 = pause mode */
346 #define SCTRL_R1INTEN 0x00000400 /* enable interrupt */
347 #define SCTRL_P2INTEN 0x00000200 /* enable interrupt */
348 #define SCTRL_P1INTEN 0x00000100 /* enable interrupt */
349 #define SCTRL_P1SCTRLD 0x00000080 /* reload sample count register for DAC1 */
350 #define SCTRL_P2DACSEN 0x00000040 /* 1 = DAC2 play back last sample when disabled */
351 #define SCTRL_R1SEB 0x00000020 /* 1 = 16bit */
352 #define SCTRL_R1SMB 0x00000010 /* 1 = stereo */
353 #define SCTRL_R1FMT 0x00000030 /* format mask */
354 #define SCTRL_SH_R1FMT 4
355 #define SCTRL_P2SEB 0x00000008 /* 1 = 16bit */
356 #define SCTRL_P2SMB 0x00000004 /* 1 = stereo */
357 #define SCTRL_P2FMT 0x0000000c /* format mask */
358 #define SCTRL_SH_P2FMT 2
359 #define SCTRL_P1SEB 0x00000002 /* 1 = 16bit */
360 #define SCTRL_P1SMB 0x00000001 /* 1 = stereo */
361 #define SCTRL_P1FMT 0x00000003 /* format mask */
362 #define SCTRL_SH_P1FMT 0
366 #define POLL_COUNT 0x1000
367 #define FMODE_DAC 4 /* slight misuse of mode_t */
369 /* MIDI buffer sizes */
371 #define MIDIINBUF 256
372 #define MIDIOUTBUF 256
374 #define FMODE_MIDI_SHIFT 3
375 #define FMODE_MIDI_READ (FMODE_READ << FMODE_MIDI_SHIFT)
376 #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
378 #define ES1371_MODULE_NAME "es1371"
379 #define PFX ES1371_MODULE_NAME ": "
381 /* --------------------------------------------------------------------- */
383 struct es1371_state {
387 /* list of es1371 devices */
388 struct list_head devs;
390 /* the corresponding pci_dev structure */
393 /* soundcore stuff */
398 /* hardware resources */
399 unsigned long io; /* long for SPARC */
405 u8 rev; /* the chip revision */
408 int spdif_volume; /* S/PDIF output is enabled if != -1 */
411 /* debug /proc entry */
412 struct proc_dir_entry *ps;
413 #endif /* ES1371_DEBUG */
415 struct ac97_codec codec;
420 unsigned dac1rate, dac2rate, adcrate;
423 struct semaphore open_sem;
425 wait_queue_head_t open_wait;
433 unsigned hwptr, swptr;
434 unsigned total_bytes;
436 unsigned error; /* over/underrun */
437 wait_queue_head_t wait;
438 /* redundant, but makes calculations easier */
441 unsigned fragsamples;
445 unsigned endcleared:1;
447 unsigned ossfragshift;
449 unsigned subdivision;
450 } dma_dac1, dma_dac2, dma_adc;
454 unsigned ird, iwr, icnt;
455 unsigned ord, owr, ocnt;
456 wait_queue_head_t iwait;
457 wait_queue_head_t owait;
458 unsigned char ibuf[MIDIINBUF];
459 unsigned char obuf[MIDIOUTBUF];
462 struct gameport gameport;
463 struct semaphore sem;
466 /* --------------------------------------------------------------------- */
468 static LIST_HEAD(devs);
470 /* --------------------------------------------------------------------- */
472 static inline unsigned ld2(unsigned int x)
497 /* --------------------------------------------------------------------- */
499 static unsigned wait_src_ready(struct es1371_state *s)
503 for (t = 0; t < POLL_COUNT; t++) {
504 if (!((r = inl(s->io + ES1371_REG_SRCONV)) & SRC_BUSY))
508 printk(KERN_DEBUG PFX "sample rate converter timeout r = 0x%08x\n", r);
512 static unsigned src_read(struct es1371_state *s, unsigned reg)
514 unsigned int temp,i,orig;
517 temp = wait_src_ready (s);
519 /* we can only access the SRC at certain times, make sure
520 we're allowed to before we read */
523 /* expose the SRC state bits */
524 outl ( (temp & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT) | 0x10000UL,
525 s->io + ES1371_REG_SRCONV);
527 /* now, wait for busy and the correct time to read */
528 temp = wait_src_ready (s);
530 if ( (temp & 0x00870000UL ) != ( SRC_OKSTATE << 16 )){
531 /* wait for the right state */
532 for (i=0; i<POLL_COUNT; i++){
533 temp = inl (s->io + ES1371_REG_SRCONV);
534 if ( (temp & 0x00870000UL ) == ( SRC_OKSTATE << 16 ))
539 /* hide the state bits */
540 outl ((orig & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT), s->io + ES1371_REG_SRCONV);
546 static void src_write(struct es1371_state *s, unsigned reg, unsigned data)
551 r = wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC);
552 r |= (reg << SRC_RAMADDR_SHIFT) & SRC_RAMADDR_MASK;
553 r |= (data << SRC_RAMDATA_SHIFT) & SRC_RAMDATA_MASK;
554 outl(r | SRC_WE, s->io + ES1371_REG_SRCONV);
558 /* --------------------------------------------------------------------- */
560 /* most of the following here is black magic */
561 static void set_adc_rate(struct es1371_state *s, unsigned rate)
564 unsigned int n, truncm, freq;
571 if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
573 truncm = (21 * n - 1) | 1;
574 freq = ((48000UL << 15) / rate) * n;
575 s->adcrate = (48000UL << 15) / (freq / n);
576 spin_lock_irqsave(&s->lock, flags);
580 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
581 (((239 - truncm) >> 1) << 9) | (n << 4));
585 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
586 0x8000 | (((119 - truncm) >> 1) << 9) | (n << 4));
588 src_write(s, SRCREG_ADC+SRCREG_INT_REGS,
589 (src_read(s, SRCREG_ADC+SRCREG_INT_REGS) & 0x00ff) |
590 ((freq >> 5) & 0xfc00));
591 src_write(s, SRCREG_ADC+SRCREG_VFREQ_FRAC, freq & 0x7fff);
592 src_write(s, SRCREG_VOL_ADC, n << 8);
593 src_write(s, SRCREG_VOL_ADC+1, n << 8);
594 spin_unlock_irqrestore(&s->lock, flags);
598 static void set_dac1_rate(struct es1371_state *s, unsigned rate)
601 unsigned int freq, r;
607 freq = ((rate << 15) + 1500) / 3000;
608 s->dac1rate = (freq * 3000 + 16384) >> 15;
609 spin_lock_irqsave(&s->lock, flags);
610 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC)) | SRC_DDAC1;
611 outl(r, s->io + ES1371_REG_SRCONV);
612 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS,
613 (src_read(s, SRCREG_DAC1+SRCREG_INT_REGS) & 0x00ff) |
614 ((freq >> 5) & 0xfc00));
615 src_write(s, SRCREG_DAC1+SRCREG_VFREQ_FRAC, freq & 0x7fff);
616 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC));
617 outl(r, s->io + ES1371_REG_SRCONV);
618 spin_unlock_irqrestore(&s->lock, flags);
621 static void set_dac2_rate(struct es1371_state *s, unsigned rate)
624 unsigned int freq, r;
630 freq = ((rate << 15) + 1500) / 3000;
631 s->dac2rate = (freq * 3000 + 16384) >> 15;
632 spin_lock_irqsave(&s->lock, flags);
633 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC)) | SRC_DDAC2;
634 outl(r, s->io + ES1371_REG_SRCONV);
635 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS,
636 (src_read(s, SRCREG_DAC2+SRCREG_INT_REGS) & 0x00ff) |
637 ((freq >> 5) & 0xfc00));
638 src_write(s, SRCREG_DAC2+SRCREG_VFREQ_FRAC, freq & 0x7fff);
639 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC));
640 outl(r, s->io + ES1371_REG_SRCONV);
641 spin_unlock_irqrestore(&s->lock, flags);
644 /* --------------------------------------------------------------------- */
646 static void __init src_init(struct es1371_state *s)
650 /* before we enable or disable the SRC we need
651 to wait for it to become ready */
654 outl(SRC_DIS, s->io + ES1371_REG_SRCONV);
656 for (i = 0; i < 0x80; i++)
659 src_write(s, SRCREG_DAC1+SRCREG_TRUNC_N, 16 << 4);
660 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS, 16 << 10);
661 src_write(s, SRCREG_DAC2+SRCREG_TRUNC_N, 16 << 4);
662 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS, 16 << 10);
663 src_write(s, SRCREG_VOL_ADC, 1 << 12);
664 src_write(s, SRCREG_VOL_ADC+1, 1 << 12);
665 src_write(s, SRCREG_VOL_DAC1, 1 << 12);
666 src_write(s, SRCREG_VOL_DAC1+1, 1 << 12);
667 src_write(s, SRCREG_VOL_DAC2, 1 << 12);
668 src_write(s, SRCREG_VOL_DAC2+1, 1 << 12);
669 set_adc_rate(s, 22050);
670 set_dac1_rate(s, 22050);
671 set_dac2_rate(s, 22050);
674 * enabling the sample rate converter without properly programming
675 * its parameters causes the chip to lock up (the SRC busy bit will
676 * be stuck high, and I've found no way to rectify this other than
680 outl(0, s->io+ES1371_REG_SRCONV);
683 /* --------------------------------------------------------------------- */
685 static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
687 struct es1371_state *s = (struct es1371_state *)codec->private_data;
691 for (t = 0; t < POLL_COUNT; t++)
692 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
694 spin_lock_irqsave(&s->lock, flags);
696 /* save the current state for later */
697 x = wait_src_ready(s);
699 /* enable SRC state data in SRC mux */
700 outl((x & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC)) | 0x00010000,
701 s->io+ES1371_REG_SRCONV);
703 /* wait for not busy (state 0) first to avoid
705 for (t=0; t<POLL_COUNT; t++){
706 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
711 /* wait for a SAFE time to write addr/data and then do it, dammit */
712 for (t=0; t<POLL_COUNT; t++){
713 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
718 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) |
719 ((data << CODEC_PODAT_SHIFT) & CODEC_PODAT_MASK), s->io+ES1371_REG_CODEC);
721 /* restore SRC reg */
723 outl(x, s->io+ES1371_REG_SRCONV);
724 spin_unlock_irqrestore(&s->lock, flags);
727 static u16 rdcodec(struct ac97_codec *codec, u8 addr)
729 struct es1371_state *s = (struct es1371_state *)codec->private_data;
733 /* wait for WIP to go away */
734 for (t = 0; t < 0x1000; t++)
735 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
737 spin_lock_irqsave(&s->lock, flags);
739 /* save the current state for later */
740 x = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC));
742 /* enable SRC state data in SRC mux */
743 outl( x | 0x00010000,
744 s->io+ES1371_REG_SRCONV);
746 /* wait for not busy (state 0) first to avoid
748 for (t=0; t<POLL_COUNT; t++){
749 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
754 /* wait for a SAFE time to write addr/data and then do it, dammit */
755 for (t=0; t<POLL_COUNT; t++){
756 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
761 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) | CODEC_PORD, s->io+ES1371_REG_CODEC);
762 /* restore SRC reg */
764 outl(x, s->io+ES1371_REG_SRCONV);
765 spin_unlock_irqrestore(&s->lock, flags);
767 /* wait for WIP again */
768 for (t = 0; t < 0x1000; t++)
769 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
772 /* now wait for the stinkin' data (RDY) */
773 for (t = 0; t < POLL_COUNT; t++)
774 if ((x = inl(s->io+ES1371_REG_CODEC)) & CODEC_RDY)
777 return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
780 /* --------------------------------------------------------------------- */
782 static inline void stop_adc(struct es1371_state *s)
786 spin_lock_irqsave(&s->lock, flags);
787 s->ctrl &= ~CTRL_ADC_EN;
788 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
789 spin_unlock_irqrestore(&s->lock, flags);
792 static inline void stop_dac1(struct es1371_state *s)
796 spin_lock_irqsave(&s->lock, flags);
797 s->ctrl &= ~CTRL_DAC1_EN;
798 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
799 spin_unlock_irqrestore(&s->lock, flags);
802 static inline void stop_dac2(struct es1371_state *s)
806 spin_lock_irqsave(&s->lock, flags);
807 s->ctrl &= ~CTRL_DAC2_EN;
808 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
809 spin_unlock_irqrestore(&s->lock, flags);
812 static void start_dac1(struct es1371_state *s)
815 unsigned fragremain, fshift;
817 spin_lock_irqsave(&s->lock, flags);
818 if (!(s->ctrl & CTRL_DAC1_EN) && (s->dma_dac1.mapped || s->dma_dac1.count > 0)
819 && s->dma_dac1.ready) {
820 s->ctrl |= CTRL_DAC1_EN;
821 s->sctrl = (s->sctrl & ~(SCTRL_P1LOOPSEL | SCTRL_P1PAUSE | SCTRL_P1SCTRLD)) | SCTRL_P1INTEN;
822 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
823 fragremain = ((- s->dma_dac1.hwptr) & (s->dma_dac1.fragsize-1));
824 fshift = sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
825 if (fragremain < 2*fshift)
826 fragremain = s->dma_dac1.fragsize;
827 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
828 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
829 outl((s->dma_dac1.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
831 spin_unlock_irqrestore(&s->lock, flags);
834 static void start_dac2(struct es1371_state *s)
837 unsigned fragremain, fshift;
839 spin_lock_irqsave(&s->lock, flags);
840 if (!(s->ctrl & CTRL_DAC2_EN) && (s->dma_dac2.mapped || s->dma_dac2.count > 0)
841 && s->dma_dac2.ready) {
842 s->ctrl |= CTRL_DAC2_EN;
843 s->sctrl = (s->sctrl & ~(SCTRL_P2LOOPSEL | SCTRL_P2PAUSE | SCTRL_P2DACSEN |
844 SCTRL_P2ENDINC | SCTRL_P2STINC)) | SCTRL_P2INTEN |
845 (((s->sctrl & SCTRL_P2FMT) ? 2 : 1) << SCTRL_SH_P2ENDINC) |
846 (0 << SCTRL_SH_P2STINC);
847 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
848 fragremain = ((- s->dma_dac2.hwptr) & (s->dma_dac2.fragsize-1));
849 fshift = sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
850 if (fragremain < 2*fshift)
851 fragremain = s->dma_dac2.fragsize;
852 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
853 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
854 outl((s->dma_dac2.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
856 spin_unlock_irqrestore(&s->lock, flags);
859 static void start_adc(struct es1371_state *s)
862 unsigned fragremain, fshift;
864 spin_lock_irqsave(&s->lock, flags);
865 if (!(s->ctrl & CTRL_ADC_EN) && (s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
866 && s->dma_adc.ready) {
867 s->ctrl |= CTRL_ADC_EN;
868 s->sctrl = (s->sctrl & ~SCTRL_R1LOOPSEL) | SCTRL_R1INTEN;
869 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
870 fragremain = ((- s->dma_adc.hwptr) & (s->dma_adc.fragsize-1));
871 fshift = sample_shift[(s->sctrl & SCTRL_R1FMT) >> SCTRL_SH_R1FMT];
872 if (fragremain < 2*fshift)
873 fragremain = s->dma_adc.fragsize;
874 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
875 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
876 outl((s->dma_adc.fragsize >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
878 spin_unlock_irqrestore(&s->lock, flags);
881 /* --------------------------------------------------------------------- */
883 #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
884 #define DMABUF_MINORDER 1
887 static inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db)
889 struct page *page, *pend;
892 /* undo marking the pages as reserved */
893 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
894 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
895 mem_map_unreserve(page);
896 pci_free_consistent(s->dev, PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
899 db->mapped = db->ready = 0;
902 static int prog_dmabuf(struct es1371_state *s, struct dmabuf *db, unsigned rate, unsigned fmt, unsigned reg)
907 struct page *page, *pend;
909 db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
911 db->ready = db->mapped = 0;
912 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
913 if ((db->rawbuf = pci_alloc_consistent(s->dev, PAGE_SIZE << order, &db->dmaaddr)))
917 db->buforder = order;
918 /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
919 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
920 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
921 mem_map_reserve(page);
923 fmt &= ES1371_FMT_MASK;
924 bytepersec = rate << sample_shift[fmt];
925 bufs = PAGE_SIZE << db->buforder;
926 if (db->ossfragshift) {
927 if ((1000 << db->ossfragshift) < bytepersec)
928 db->fragshift = ld2(bytepersec/1000);
930 db->fragshift = db->ossfragshift;
932 db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
933 if (db->fragshift < 3)
936 db->numfrag = bufs >> db->fragshift;
937 while (db->numfrag < 4 && db->fragshift > 3) {
939 db->numfrag = bufs >> db->fragshift;
941 db->fragsize = 1 << db->fragshift;
942 if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
943 db->numfrag = db->ossmaxfrags;
944 db->fragsamples = db->fragsize >> sample_shift[fmt];
945 db->dmasize = db->numfrag << db->fragshift;
946 memset(db->rawbuf, (fmt & ES1371_FMT_S16) ? 0 : 0x80, db->dmasize);
947 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
948 outl(db->dmaaddr, s->io+(reg & 0xff));
949 outl((db->dmasize >> 2)-1, s->io+((reg + 4) & 0xff));
955 static inline int prog_dmabuf_adc(struct es1371_state *s)
958 return prog_dmabuf(s, &s->dma_adc, s->adcrate, (s->sctrl >> SCTRL_SH_R1FMT) & ES1371_FMT_MASK,
959 ES1371_REG_ADC_FRAMEADR);
962 static inline int prog_dmabuf_dac2(struct es1371_state *s)
965 return prog_dmabuf(s, &s->dma_dac2, s->dac2rate, (s->sctrl >> SCTRL_SH_P2FMT) & ES1371_FMT_MASK,
966 ES1371_REG_DAC2_FRAMEADR);
969 static inline int prog_dmabuf_dac1(struct es1371_state *s)
972 return prog_dmabuf(s, &s->dma_dac1, s->dac1rate, (s->sctrl >> SCTRL_SH_P1FMT) & ES1371_FMT_MASK,
973 ES1371_REG_DAC1_FRAMEADR);
976 static inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg)
978 unsigned hwptr, diff;
980 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
981 hwptr = (inl(s->io+(reg & 0xff)) >> 14) & 0x3fffc;
982 diff = (db->dmasize + hwptr - db->hwptr) % db->dmasize;
987 static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
989 if (bptr + len > bsize) {
990 unsigned x = bsize - bptr;
991 memset(((char *)buf) + bptr, c, x);
995 memset(((char *)buf) + bptr, c, len);
998 /* call with spinlock held! */
999 static void es1371_update_ptr(struct es1371_state *s)
1003 /* update ADC pointer */
1004 if (s->ctrl & CTRL_ADC_EN) {
1005 diff = get_hwptr(s, &s->dma_adc, ES1371_REG_ADC_FRAMECNT);
1006 s->dma_adc.total_bytes += diff;
1007 s->dma_adc.count += diff;
1008 if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
1009 wake_up(&s->dma_adc.wait);
1010 if (!s->dma_adc.mapped) {
1011 if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
1012 s->ctrl &= ~CTRL_ADC_EN;
1013 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1018 /* update DAC1 pointer */
1019 if (s->ctrl & CTRL_DAC1_EN) {
1020 diff = get_hwptr(s, &s->dma_dac1, ES1371_REG_DAC1_FRAMECNT);
1021 s->dma_dac1.total_bytes += diff;
1022 if (s->dma_dac1.mapped) {
1023 s->dma_dac1.count += diff;
1024 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
1025 wake_up(&s->dma_dac1.wait);
1027 s->dma_dac1.count -= diff;
1028 if (s->dma_dac1.count <= 0) {
1029 s->ctrl &= ~CTRL_DAC1_EN;
1030 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1031 s->dma_dac1.error++;
1032 } else if (s->dma_dac1.count <= (signed)s->dma_dac1.fragsize && !s->dma_dac1.endcleared) {
1033 clear_advance(s->dma_dac1.rawbuf, s->dma_dac1.dmasize, s->dma_dac1.swptr,
1034 s->dma_dac1.fragsize, (s->sctrl & SCTRL_P1SEB) ? 0 : 0x80);
1035 s->dma_dac1.endcleared = 1;
1037 if (s->dma_dac1.count + (signed)s->dma_dac1.fragsize <= (signed)s->dma_dac1.dmasize)
1038 wake_up(&s->dma_dac1.wait);
1041 /* update DAC2 pointer */
1042 if (s->ctrl & CTRL_DAC2_EN) {
1043 diff = get_hwptr(s, &s->dma_dac2, ES1371_REG_DAC2_FRAMECNT);
1044 s->dma_dac2.total_bytes += diff;
1045 if (s->dma_dac2.mapped) {
1046 s->dma_dac2.count += diff;
1047 if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
1048 wake_up(&s->dma_dac2.wait);
1050 s->dma_dac2.count -= diff;
1051 if (s->dma_dac2.count <= 0) {
1052 s->ctrl &= ~CTRL_DAC2_EN;
1053 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1054 s->dma_dac2.error++;
1055 } else if (s->dma_dac2.count <= (signed)s->dma_dac2.fragsize && !s->dma_dac2.endcleared) {
1056 clear_advance(s->dma_dac2.rawbuf, s->dma_dac2.dmasize, s->dma_dac2.swptr,
1057 s->dma_dac2.fragsize, (s->sctrl & SCTRL_P2SEB) ? 0 : 0x80);
1058 s->dma_dac2.endcleared = 1;
1060 if (s->dma_dac2.count + (signed)s->dma_dac2.fragsize <= (signed)s->dma_dac2.dmasize)
1061 wake_up(&s->dma_dac2.wait);
1066 /* hold spinlock for the following! */
1067 static void es1371_handle_midi(struct es1371_state *s)
1072 if (!(s->ctrl & CTRL_UART_EN))
1075 while (inb(s->io+ES1371_REG_UART_STATUS) & USTAT_RXRDY) {
1076 ch = inb(s->io+ES1371_REG_UART_DATA);
1077 if (s->midi.icnt < MIDIINBUF) {
1078 s->midi.ibuf[s->midi.iwr] = ch;
1079 s->midi.iwr = (s->midi.iwr + 1) % MIDIINBUF;
1085 wake_up(&s->midi.iwait);
1087 while ((inb(s->io+ES1371_REG_UART_STATUS) & USTAT_TXRDY) && s->midi.ocnt > 0) {
1088 outb(s->midi.obuf[s->midi.ord], s->io+ES1371_REG_UART_DATA);
1089 s->midi.ord = (s->midi.ord + 1) % MIDIOUTBUF;
1091 if (s->midi.ocnt < MIDIOUTBUF-16)
1095 wake_up(&s->midi.owait);
1096 outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL);
1099 static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1101 struct es1371_state *s = (struct es1371_state *)dev_id;
1102 unsigned int intsrc, sctl;
1104 /* fastpath out, to ease interrupt sharing */
1105 intsrc = inl(s->io+ES1371_REG_STATUS);
1106 if (!(intsrc & 0x80000000))
1108 spin_lock(&s->lock);
1109 /* clear audio interrupts first */
1111 if (intsrc & STAT_ADC)
1112 sctl &= ~SCTRL_R1INTEN;
1113 if (intsrc & STAT_DAC1)
1114 sctl &= ~SCTRL_P1INTEN;
1115 if (intsrc & STAT_DAC2)
1116 sctl &= ~SCTRL_P2INTEN;
1117 outl(sctl, s->io+ES1371_REG_SERIAL_CONTROL);
1118 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1119 es1371_update_ptr(s);
1120 es1371_handle_midi(s);
1121 spin_unlock(&s->lock);
1124 /* --------------------------------------------------------------------- */
1126 static const char invalid_magic[] = KERN_CRIT PFX "invalid magic value\n";
1128 #define VALIDATE_STATE(s) \
1130 if (!(s) || (s)->magic != ES1371_MAGIC) { \
1131 printk(invalid_magic); \
1136 /* --------------------------------------------------------------------- */
1138 /* Conversion table for S/PDIF PCM volume emulation through the SRC */
1139 /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */
1140 static const unsigned short DACVolTable[101] =
1142 0x1000, 0x0f2a, 0x0e60, 0x0da0, 0x0cea, 0x0c3e, 0x0b9a, 0x0aff,
1143 0x0a6d, 0x09e1, 0x095e, 0x08e1, 0x086a, 0x07fa, 0x078f, 0x072a,
1144 0x06cb, 0x0670, 0x061a, 0x05c9, 0x057b, 0x0532, 0x04ed, 0x04ab,
1145 0x046d, 0x0432, 0x03fa, 0x03c5, 0x0392, 0x0363, 0x0335, 0x030b,
1146 0x02e2, 0x02bc, 0x0297, 0x0275, 0x0254, 0x0235, 0x0217, 0x01fb,
1147 0x01e1, 0x01c8, 0x01b0, 0x0199, 0x0184, 0x0170, 0x015d, 0x014b,
1148 0x0139, 0x0129, 0x0119, 0x010b, 0x00fd, 0x00f0, 0x00e3, 0x00d7,
1149 0x00cc, 0x00c1, 0x00b7, 0x00ae, 0x00a5, 0x009c, 0x0094, 0x008c,
1150 0x0085, 0x007e, 0x0077, 0x0071, 0x006b, 0x0066, 0x0060, 0x005b,
1151 0x0057, 0x0052, 0x004e, 0x004a, 0x0046, 0x0042, 0x003f, 0x003c,
1152 0x0038, 0x0036, 0x0033, 0x0030, 0x002e, 0x002b, 0x0029, 0x0027,
1153 0x0025, 0x0023, 0x0021, 0x001f, 0x001e, 0x001c, 0x001b, 0x0019,
1154 0x0018, 0x0017, 0x0016, 0x0014, 0x0000
1158 * when we are in S/PDIF mode, we want to disable any analog output so
1159 * we filter the mixer ioctls
1161 static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg)
1163 struct es1371_state *s = (struct es1371_state *)codec->private_data;
1165 unsigned long flags;
1166 unsigned int left, right;
1169 /* filter mixer ioctls to catch PCM and MASTER volume when in S/PDIF mode */
1170 if (s->spdif_volume == -1)
1171 return codec->mixer_ioctl(codec, cmd, arg);
1173 case SOUND_MIXER_WRITE_VOLUME:
1176 case SOUND_MIXER_WRITE_PCM: /* use SRC for PCM volume */
1177 if (get_user(val, (int *)arg))
1179 right = ((val >> 8) & 0xff);
1180 left = (val & 0xff);
1185 s->spdif_volume = (right << 8) | left;
1186 spin_lock_irqsave(&s->lock, flags);
1187 src_write(s, SRCREG_VOL_DAC2, DACVolTable[100 - left]);
1188 src_write(s, SRCREG_VOL_DAC2+1, DACVolTable[100 - right]);
1189 spin_unlock_irqrestore(&s->lock, flags);
1192 case SOUND_MIXER_READ_PCM:
1193 return put_user(s->spdif_volume, (int *)arg);
1195 return codec->mixer_ioctl(codec, cmd, arg);
1198 /* --------------------------------------------------------------------- */
1201 * AC97 Mixer Register to Connections mapping of the Concert 97 board
1203 * AC97_MASTER_VOL_STEREO Line Out
1204 * AC97_MASTER_VOL_MONO TAD Output
1205 * AC97_PCBEEP_VOL none
1206 * AC97_PHONE_VOL TAD Input (mono)
1207 * AC97_MIC_VOL MIC Input (mono)
1208 * AC97_LINEIN_VOL Line Input (stereo)
1209 * AC97_CD_VOL CD Input (stereo)
1210 * AC97_VIDEO_VOL none
1211 * AC97_AUX_VOL Aux Input (stereo)
1212 * AC97_PCMOUT_VOL Wave Output (stereo)
1215 static int es1371_open_mixdev(struct inode *inode, struct file *file)
1217 int minor = MINOR(inode->i_rdev);
1218 struct list_head *list;
1219 struct es1371_state *s;
1221 for (list = devs.next; ; list = list->next) {
1224 s = list_entry(list, struct es1371_state, devs);
1225 if (s->codec.dev_mixer == minor)
1229 file->private_data = s;
1233 static int es1371_release_mixdev(struct inode *inode, struct file *file)
1235 struct es1371_state *s = (struct es1371_state *)file->private_data;
1241 static int es1371_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1243 struct es1371_state *s = (struct es1371_state *)file->private_data;
1244 struct ac97_codec *codec = &s->codec;
1246 return mixdev_ioctl(codec, cmd, arg);
1249 static /*const*/ struct file_operations es1371_mixer_fops = {
1252 ioctl: es1371_ioctl_mixdev,
1253 open: es1371_open_mixdev,
1254 release: es1371_release_mixdev,
1257 /* --------------------------------------------------------------------- */
1259 static int drain_dac1(struct es1371_state *s, int nonblock)
1261 DECLARE_WAITQUEUE(wait, current);
1262 unsigned long flags;
1265 if (s->dma_dac1.mapped || !s->dma_dac1.ready)
1267 add_wait_queue(&s->dma_dac1.wait, &wait);
1269 __set_current_state(TASK_INTERRUPTIBLE);
1270 spin_lock_irqsave(&s->lock, flags);
1271 count = s->dma_dac1.count;
1272 spin_unlock_irqrestore(&s->lock, flags);
1275 if (signal_pending(current))
1278 remove_wait_queue(&s->dma_dac1.wait, &wait);
1279 set_current_state(TASK_RUNNING);
1282 tmo = 3 * HZ * (count + s->dma_dac1.fragsize) / 2 / s->dac1rate;
1283 tmo >>= sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
1284 if (!schedule_timeout(tmo + 1))
1285 DBG(printk(KERN_DEBUG PFX "dac1 dma timed out??\n");)
1287 remove_wait_queue(&s->dma_dac1.wait, &wait);
1288 set_current_state(TASK_RUNNING);
1289 if (signal_pending(current))
1290 return -ERESTARTSYS;
1294 static int drain_dac2(struct es1371_state *s, int nonblock)
1296 DECLARE_WAITQUEUE(wait, current);
1297 unsigned long flags;
1300 if (s->dma_dac2.mapped || !s->dma_dac2.ready)
1302 add_wait_queue(&s->dma_dac2.wait, &wait);
1304 __set_current_state(TASK_UNINTERRUPTIBLE);
1305 spin_lock_irqsave(&s->lock, flags);
1306 count = s->dma_dac2.count;
1307 spin_unlock_irqrestore(&s->lock, flags);
1310 if (signal_pending(current))
1313 remove_wait_queue(&s->dma_dac2.wait, &wait);
1314 set_current_state(TASK_RUNNING);
1317 tmo = 3 * HZ * (count + s->dma_dac2.fragsize) / 2 / s->dac2rate;
1318 tmo >>= sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
1319 if (!schedule_timeout(tmo + 1))
1320 DBG(printk(KERN_DEBUG PFX "dac2 dma timed out??\n");)
1322 remove_wait_queue(&s->dma_dac2.wait, &wait);
1323 set_current_state(TASK_RUNNING);
1324 if (signal_pending(current))
1325 return -ERESTARTSYS;
1329 /* --------------------------------------------------------------------- */
1331 static ssize_t es1371_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
1333 struct es1371_state *s = (struct es1371_state *)file->private_data;
1334 DECLARE_WAITQUEUE(wait, current);
1336 unsigned long flags;
1341 if (ppos != &file->f_pos)
1343 if (s->dma_adc.mapped)
1345 if (!access_ok(VERIFY_WRITE, buffer, count))
1348 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1351 add_wait_queue(&s->dma_adc.wait, &wait);
1353 spin_lock_irqsave(&s->lock, flags);
1354 swptr = s->dma_adc.swptr;
1355 cnt = s->dma_adc.dmasize-swptr;
1356 if (s->dma_adc.count < cnt)
1357 cnt = s->dma_adc.count;
1359 __set_current_state(TASK_INTERRUPTIBLE);
1360 spin_unlock_irqrestore(&s->lock, flags);
1364 if (s->dma_adc.enabled)
1366 if (file->f_flags & O_NONBLOCK) {
1373 if (signal_pending(current)) {
1379 if (s->dma_adc.mapped)
1386 if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
1391 swptr = (swptr + cnt) % s->dma_adc.dmasize;
1392 spin_lock_irqsave(&s->lock, flags);
1393 s->dma_adc.swptr = swptr;
1394 s->dma_adc.count -= cnt;
1395 spin_unlock_irqrestore(&s->lock, flags);
1399 if (s->dma_adc.enabled)
1405 remove_wait_queue(&s->dma_adc.wait, &wait);
1406 set_current_state(TASK_RUNNING);
1410 static ssize_t es1371_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
1412 struct es1371_state *s = (struct es1371_state *)file->private_data;
1413 DECLARE_WAITQUEUE(wait, current);
1415 unsigned long flags;
1420 if (ppos != &file->f_pos)
1422 if (s->dma_dac2.mapped)
1424 if (!access_ok(VERIFY_READ, buffer, count))
1427 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1430 add_wait_queue(&s->dma_dac2.wait, &wait);
1432 spin_lock_irqsave(&s->lock, flags);
1433 if (s->dma_dac2.count < 0) {
1434 s->dma_dac2.count = 0;
1435 s->dma_dac2.swptr = s->dma_dac2.hwptr;
1437 swptr = s->dma_dac2.swptr;
1438 cnt = s->dma_dac2.dmasize-swptr;
1439 if (s->dma_dac2.count + cnt > s->dma_dac2.dmasize)
1440 cnt = s->dma_dac2.dmasize - s->dma_dac2.count;
1442 __set_current_state(TASK_INTERRUPTIBLE);
1443 spin_unlock_irqrestore(&s->lock, flags);
1447 if (s->dma_dac2.enabled)
1449 if (file->f_flags & O_NONBLOCK) {
1456 if (signal_pending(current)) {
1462 if (s->dma_dac2.mapped)
1469 if (copy_from_user(s->dma_dac2.rawbuf + swptr, buffer, cnt)) {
1474 swptr = (swptr + cnt) % s->dma_dac2.dmasize;
1475 spin_lock_irqsave(&s->lock, flags);
1476 s->dma_dac2.swptr = swptr;
1477 s->dma_dac2.count += cnt;
1478 s->dma_dac2.endcleared = 0;
1479 spin_unlock_irqrestore(&s->lock, flags);
1483 if (s->dma_dac2.enabled)
1489 remove_wait_queue(&s->dma_dac2.wait, &wait);
1491 set_current_state(TASK_RUNNING);
1495 /* No kernel lock - we have our own spinlock */
1496 static unsigned int es1371_poll(struct file *file, struct poll_table_struct *wait)
1498 struct es1371_state *s = (struct es1371_state *)file->private_data;
1499 unsigned long flags;
1500 unsigned int mask = 0;
1503 if (file->f_mode & FMODE_WRITE) {
1504 if (!s->dma_dac2.ready && prog_dmabuf_dac2(s))
1506 poll_wait(file, &s->dma_dac2.wait, wait);
1508 if (file->f_mode & FMODE_READ) {
1509 if (!s->dma_adc.ready && prog_dmabuf_adc(s))
1511 poll_wait(file, &s->dma_adc.wait, wait);
1513 spin_lock_irqsave(&s->lock, flags);
1514 es1371_update_ptr(s);
1515 if (file->f_mode & FMODE_READ) {
1516 if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
1517 mask |= POLLIN | POLLRDNORM;
1519 if (file->f_mode & FMODE_WRITE) {
1520 if (s->dma_dac2.mapped) {
1521 if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
1522 mask |= POLLOUT | POLLWRNORM;
1524 if ((signed)s->dma_dac2.dmasize >= s->dma_dac2.count + (signed)s->dma_dac2.fragsize)
1525 mask |= POLLOUT | POLLWRNORM;
1528 spin_unlock_irqrestore(&s->lock, flags);
1532 static int es1371_mmap(struct file *file, struct vm_area_struct *vma)
1534 struct es1371_state *s = (struct es1371_state *)file->private_data;
1543 if (vma->vm_flags & VM_WRITE) {
1544 if ((ret = prog_dmabuf_dac2(s)) != 0) {
1548 } else if (vma->vm_flags & VM_READ) {
1549 if ((ret = prog_dmabuf_adc(s)) != 0) {
1557 if (vma->vm_pgoff != 0) {
1561 size = vma->vm_end - vma->vm_start;
1562 if (size > (PAGE_SIZE << db->buforder)) {
1566 if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf), size, vma->vm_page_prot)) {
1577 static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1579 struct es1371_state *s = (struct es1371_state *)file->private_data;
1580 unsigned long flags;
1581 audio_buf_info abinfo;
1584 int val, mapped, ret;
1587 mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac2.mapped) ||
1588 ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
1590 case OSS_GETVERSION:
1591 return put_user(SOUND_VERSION, (int *)arg);
1593 case SNDCTL_DSP_SYNC:
1594 if (file->f_mode & FMODE_WRITE)
1595 return drain_dac2(s, 0/*file->f_flags & O_NONBLOCK*/);
1598 case SNDCTL_DSP_SETDUPLEX:
1601 case SNDCTL_DSP_GETCAPS:
1602 return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
1604 case SNDCTL_DSP_RESET:
1605 if (file->f_mode & FMODE_WRITE) {
1608 s->dma_dac2.swptr = s->dma_dac2.hwptr = s->dma_dac2.count = s->dma_dac2.total_bytes = 0;
1610 if (file->f_mode & FMODE_READ) {
1613 s->dma_adc.swptr = s->dma_adc.hwptr = s->dma_adc.count = s->dma_adc.total_bytes = 0;
1617 case SNDCTL_DSP_SPEED:
1618 if (get_user(val, (int *)arg))
1621 if (file->f_mode & FMODE_READ) {
1623 s->dma_adc.ready = 0;
1624 set_adc_rate(s, val);
1626 if (file->f_mode & FMODE_WRITE) {
1628 s->dma_dac2.ready = 0;
1629 set_dac2_rate(s, val);
1632 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
1634 case SNDCTL_DSP_STEREO:
1635 if (get_user(val, (int *)arg))
1637 if (file->f_mode & FMODE_READ) {
1639 s->dma_adc.ready = 0;
1640 spin_lock_irqsave(&s->lock, flags);
1642 s->sctrl |= SCTRL_R1SMB;
1644 s->sctrl &= ~SCTRL_R1SMB;
1645 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1646 spin_unlock_irqrestore(&s->lock, flags);
1648 if (file->f_mode & FMODE_WRITE) {
1650 s->dma_dac2.ready = 0;
1651 spin_lock_irqsave(&s->lock, flags);
1653 s->sctrl |= SCTRL_P2SMB;
1655 s->sctrl &= ~SCTRL_P2SMB;
1656 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1657 spin_unlock_irqrestore(&s->lock, flags);
1661 case SNDCTL_DSP_CHANNELS:
1662 if (get_user(val, (int *)arg))
1665 if (file->f_mode & FMODE_READ) {
1667 s->dma_adc.ready = 0;
1668 spin_lock_irqsave(&s->lock, flags);
1670 s->sctrl |= SCTRL_R1SMB;
1672 s->sctrl &= ~SCTRL_R1SMB;
1673 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1674 spin_unlock_irqrestore(&s->lock, flags);
1676 if (file->f_mode & FMODE_WRITE) {
1678 s->dma_dac2.ready = 0;
1679 spin_lock_irqsave(&s->lock, flags);
1681 s->sctrl |= SCTRL_P2SMB;
1683 s->sctrl &= ~SCTRL_P2SMB;
1684 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1685 spin_unlock_irqrestore(&s->lock, flags);
1688 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
1690 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
1691 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
1693 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
1694 if (get_user(val, (int *)arg))
1696 if (val != AFMT_QUERY) {
1697 if (file->f_mode & FMODE_READ) {
1699 s->dma_adc.ready = 0;
1700 spin_lock_irqsave(&s->lock, flags);
1701 if (val == AFMT_S16_LE)
1702 s->sctrl |= SCTRL_R1SEB;
1704 s->sctrl &= ~SCTRL_R1SEB;
1705 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1706 spin_unlock_irqrestore(&s->lock, flags);
1708 if (file->f_mode & FMODE_WRITE) {
1710 s->dma_dac2.ready = 0;
1711 spin_lock_irqsave(&s->lock, flags);
1712 if (val == AFMT_S16_LE)
1713 s->sctrl |= SCTRL_P2SEB;
1715 s->sctrl &= ~SCTRL_P2SEB;
1716 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1717 spin_unlock_irqrestore(&s->lock, flags);
1720 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ?
1721 AFMT_S16_LE : AFMT_U8, (int *)arg);
1723 case SNDCTL_DSP_POST:
1726 case SNDCTL_DSP_GETTRIGGER:
1728 if (file->f_mode & FMODE_READ && s->ctrl & CTRL_ADC_EN)
1729 val |= PCM_ENABLE_INPUT;
1730 if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN)
1731 val |= PCM_ENABLE_OUTPUT;
1732 return put_user(val, (int *)arg);
1734 case SNDCTL_DSP_SETTRIGGER:
1735 if (get_user(val, (int *)arg))
1737 if (file->f_mode & FMODE_READ) {
1738 if (val & PCM_ENABLE_INPUT) {
1739 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1741 s->dma_adc.enabled = 1;
1744 s->dma_adc.enabled = 0;
1748 if (file->f_mode & FMODE_WRITE) {
1749 if (val & PCM_ENABLE_OUTPUT) {
1750 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1752 s->dma_dac2.enabled = 1;
1755 s->dma_dac2.enabled = 0;
1761 case SNDCTL_DSP_GETOSPACE:
1762 if (!(file->f_mode & FMODE_WRITE))
1764 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1766 spin_lock_irqsave(&s->lock, flags);
1767 es1371_update_ptr(s);
1768 abinfo.fragsize = s->dma_dac2.fragsize;
1769 count = s->dma_dac2.count;
1772 abinfo.bytes = s->dma_dac2.dmasize - count;
1773 abinfo.fragstotal = s->dma_dac2.numfrag;
1774 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;
1775 spin_unlock_irqrestore(&s->lock, flags);
1776 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1778 case SNDCTL_DSP_GETISPACE:
1779 if (!(file->f_mode & FMODE_READ))
1781 if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
1783 spin_lock_irqsave(&s->lock, flags);
1784 es1371_update_ptr(s);
1785 abinfo.fragsize = s->dma_adc.fragsize;
1786 count = s->dma_adc.count;
1789 abinfo.bytes = count;
1790 abinfo.fragstotal = s->dma_adc.numfrag;
1791 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;
1792 spin_unlock_irqrestore(&s->lock, flags);
1793 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1795 case SNDCTL_DSP_NONBLOCK:
1796 file->f_flags |= O_NONBLOCK;
1799 case SNDCTL_DSP_GETODELAY:
1800 if (!(file->f_mode & FMODE_WRITE))
1802 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1804 spin_lock_irqsave(&s->lock, flags);
1805 es1371_update_ptr(s);
1806 count = s->dma_dac2.count;
1807 spin_unlock_irqrestore(&s->lock, flags);
1810 return put_user(count, (int *)arg);
1812 case SNDCTL_DSP_GETIPTR:
1813 if (!(file->f_mode & FMODE_READ))
1815 if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
1817 spin_lock_irqsave(&s->lock, flags);
1818 es1371_update_ptr(s);
1819 cinfo.bytes = s->dma_adc.total_bytes;
1820 count = s->dma_adc.count;
1823 cinfo.blocks = count >> s->dma_adc.fragshift;
1824 cinfo.ptr = s->dma_adc.hwptr;
1825 if (s->dma_adc.mapped)
1826 s->dma_adc.count &= s->dma_adc.fragsize-1;
1827 spin_unlock_irqrestore(&s->lock, flags);
1828 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
1830 case SNDCTL_DSP_GETOPTR:
1831 if (!(file->f_mode & FMODE_WRITE))
1833 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1835 spin_lock_irqsave(&s->lock, flags);
1836 es1371_update_ptr(s);
1837 cinfo.bytes = s->dma_dac2.total_bytes;
1838 count = s->dma_dac2.count;
1841 cinfo.blocks = count >> s->dma_dac2.fragshift;
1842 cinfo.ptr = s->dma_dac2.hwptr;
1843 if (s->dma_dac2.mapped)
1844 s->dma_dac2.count &= s->dma_dac2.fragsize-1;
1845 spin_unlock_irqrestore(&s->lock, flags);
1846 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
1848 case SNDCTL_DSP_GETBLKSIZE:
1849 if (file->f_mode & FMODE_WRITE) {
1850 if ((val = prog_dmabuf_dac2(s)))
1852 return put_user(s->dma_dac2.fragsize, (int *)arg);
1854 if ((val = prog_dmabuf_adc(s)))
1856 return put_user(s->dma_adc.fragsize, (int *)arg);
1858 case SNDCTL_DSP_SETFRAGMENT:
1859 if (get_user(val, (int *)arg))
1861 if (file->f_mode & FMODE_READ) {
1862 s->dma_adc.ossfragshift = val & 0xffff;
1863 s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
1864 if (s->dma_adc.ossfragshift < 4)
1865 s->dma_adc.ossfragshift = 4;
1866 if (s->dma_adc.ossfragshift > 15)
1867 s->dma_adc.ossfragshift = 15;
1868 if (s->dma_adc.ossmaxfrags < 4)
1869 s->dma_adc.ossmaxfrags = 4;
1871 if (file->f_mode & FMODE_WRITE) {
1872 s->dma_dac2.ossfragshift = val & 0xffff;
1873 s->dma_dac2.ossmaxfrags = (val >> 16) & 0xffff;
1874 if (s->dma_dac2.ossfragshift < 4)
1875 s->dma_dac2.ossfragshift = 4;
1876 if (s->dma_dac2.ossfragshift > 15)
1877 s->dma_dac2.ossfragshift = 15;
1878 if (s->dma_dac2.ossmaxfrags < 4)
1879 s->dma_dac2.ossmaxfrags = 4;
1883 case SNDCTL_DSP_SUBDIVIDE:
1884 if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
1885 (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
1887 if (get_user(val, (int *)arg))
1889 if (val != 1 && val != 2 && val != 4)
1891 if (file->f_mode & FMODE_READ)
1892 s->dma_adc.subdivision = val;
1893 if (file->f_mode & FMODE_WRITE)
1894 s->dma_dac2.subdivision = val;
1897 case SOUND_PCM_READ_RATE:
1898 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, (int *)arg);
1900 case SOUND_PCM_READ_CHANNELS:
1901 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, (int *)arg);
1903 case SOUND_PCM_READ_BITS:
1904 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ? 16 : 8, (int *)arg);
1906 case SOUND_PCM_WRITE_FILTER:
1907 case SNDCTL_DSP_SETSYNCRO:
1908 case SOUND_PCM_READ_FILTER:
1912 return mixdev_ioctl(&s->codec, cmd, arg);
1915 static int es1371_open(struct inode *inode, struct file *file)
1917 int minor = MINOR(inode->i_rdev);
1918 DECLARE_WAITQUEUE(wait, current);
1919 unsigned long flags;
1920 struct list_head *list;
1921 struct es1371_state *s;
1923 for (list = devs.next; ; list = list->next) {
1926 s = list_entry(list, struct es1371_state, devs);
1927 if (!((s->dev_audio ^ minor) & ~0xf))
1931 file->private_data = s;
1932 /* wait for device to become free */
1934 while (s->open_mode & file->f_mode) {
1935 if (file->f_flags & O_NONBLOCK) {
1939 add_wait_queue(&s->open_wait, &wait);
1940 __set_current_state(TASK_INTERRUPTIBLE);
1943 remove_wait_queue(&s->open_wait, &wait);
1944 set_current_state(TASK_RUNNING);
1945 if (signal_pending(current))
1946 return -ERESTARTSYS;
1949 if (file->f_mode & FMODE_READ) {
1950 s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
1951 s->dma_adc.enabled = 1;
1952 set_adc_rate(s, 8000);
1954 if (file->f_mode & FMODE_WRITE) {
1955 s->dma_dac2.ossfragshift = s->dma_dac2.ossmaxfrags = s->dma_dac2.subdivision = 0;
1956 s->dma_dac2.enabled = 1;
1957 set_dac2_rate(s, 8000);
1959 spin_lock_irqsave(&s->lock, flags);
1960 if (file->f_mode & FMODE_READ) {
1961 s->sctrl &= ~SCTRL_R1FMT;
1962 if ((minor & 0xf) == SND_DEV_DSP16)
1963 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_R1FMT;
1965 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_R1FMT;
1967 if (file->f_mode & FMODE_WRITE) {
1968 s->sctrl &= ~SCTRL_P2FMT;
1969 if ((minor & 0xf) == SND_DEV_DSP16)
1970 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P2FMT;
1972 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P2FMT;
1974 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1975 spin_unlock_irqrestore(&s->lock, flags);
1976 s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
1978 init_MUTEX(&s->sem);
1982 static int es1371_release(struct inode *inode, struct file *file)
1984 struct es1371_state *s = (struct es1371_state *)file->private_data;
1988 if (file->f_mode & FMODE_WRITE)
1989 drain_dac2(s, file->f_flags & O_NONBLOCK);
1991 if (file->f_mode & FMODE_WRITE) {
1993 dealloc_dmabuf(s, &s->dma_dac2);
1995 if (file->f_mode & FMODE_READ) {
1997 dealloc_dmabuf(s, &s->dma_adc);
1999 s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
2001 wake_up(&s->open_wait);
2006 static /*const*/ struct file_operations es1371_audio_fops = {
2010 write: es1371_write,
2012 ioctl: es1371_ioctl,
2015 release: es1371_release,
2018 /* --------------------------------------------------------------------- */
2020 static ssize_t es1371_write_dac(struct file *file, const char *buffer, size_t count, loff_t *ppos)
2022 struct es1371_state *s = (struct es1371_state *)file->private_data;
2023 DECLARE_WAITQUEUE(wait, current);
2025 unsigned long flags;
2030 if (ppos != &file->f_pos)
2032 if (s->dma_dac1.mapped)
2034 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
2036 if (!access_ok(VERIFY_READ, buffer, count))
2038 add_wait_queue(&s->dma_dac1.wait, &wait);
2040 spin_lock_irqsave(&s->lock, flags);
2041 if (s->dma_dac1.count < 0) {
2042 s->dma_dac1.count = 0;
2043 s->dma_dac1.swptr = s->dma_dac1.hwptr;
2045 swptr = s->dma_dac1.swptr;
2046 cnt = s->dma_dac1.dmasize-swptr;
2047 if (s->dma_dac1.count + cnt > s->dma_dac1.dmasize)
2048 cnt = s->dma_dac1.dmasize - s->dma_dac1.count;
2050 __set_current_state(TASK_INTERRUPTIBLE);
2051 spin_unlock_irqrestore(&s->lock, flags);
2055 if (s->dma_dac1.enabled)
2057 if (file->f_flags & O_NONBLOCK) {
2063 if (signal_pending(current)) {
2070 if (copy_from_user(s->dma_dac1.rawbuf + swptr, buffer, cnt)) {
2075 swptr = (swptr + cnt) % s->dma_dac1.dmasize;
2076 spin_lock_irqsave(&s->lock, flags);
2077 s->dma_dac1.swptr = swptr;
2078 s->dma_dac1.count += cnt;
2079 s->dma_dac1.endcleared = 0;
2080 spin_unlock_irqrestore(&s->lock, flags);
2084 if (s->dma_dac1.enabled)
2087 remove_wait_queue(&s->dma_dac1.wait, &wait);
2088 set_current_state(TASK_RUNNING);
2092 /* No kernel lock - we have our own spinlock */
2093 static unsigned int es1371_poll_dac(struct file *file, struct poll_table_struct *wait)
2095 struct es1371_state *s = (struct es1371_state *)file->private_data;
2096 unsigned long flags;
2097 unsigned int mask = 0;
2100 if (!s->dma_dac1.ready && prog_dmabuf_dac1(s))
2102 poll_wait(file, &s->dma_dac1.wait, wait);
2103 spin_lock_irqsave(&s->lock, flags);
2104 es1371_update_ptr(s);
2105 if (s->dma_dac1.mapped) {
2106 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
2107 mask |= POLLOUT | POLLWRNORM;
2109 if ((signed)s->dma_dac1.dmasize >= s->dma_dac1.count + (signed)s->dma_dac1.fragsize)
2110 mask |= POLLOUT | POLLWRNORM;
2112 spin_unlock_irqrestore(&s->lock, flags);
2116 static int es1371_mmap_dac(struct file *file, struct vm_area_struct *vma)
2118 struct es1371_state *s = (struct es1371_state *)file->private_data;
2123 if (!(vma->vm_flags & VM_WRITE))
2126 if ((ret = prog_dmabuf_dac1(s)) != 0)
2129 if (vma->vm_pgoff != 0)
2131 size = vma->vm_end - vma->vm_start;
2132 if (size > (PAGE_SIZE << s->dma_dac1.buforder))
2135 if (remap_page_range(vma->vm_start, virt_to_phys(s->dma_dac1.rawbuf), size, vma->vm_page_prot))
2137 s->dma_dac1.mapped = 1;
2144 static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
2146 struct es1371_state *s = (struct es1371_state *)file->private_data;
2147 unsigned long flags;
2148 audio_buf_info abinfo;
2155 case OSS_GETVERSION:
2156 return put_user(SOUND_VERSION, (int *)arg);
2158 case SNDCTL_DSP_SYNC:
2159 return drain_dac1(s, 0/*file->f_flags & O_NONBLOCK*/);
2161 case SNDCTL_DSP_SETDUPLEX:
2164 case SNDCTL_DSP_GETCAPS:
2165 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
2167 case SNDCTL_DSP_RESET:
2170 s->dma_dac1.swptr = s->dma_dac1.hwptr = s->dma_dac1.count = s->dma_dac1.total_bytes = 0;
2173 case SNDCTL_DSP_SPEED:
2174 if (get_user(val, (int *)arg))
2178 s->dma_dac1.ready = 0;
2179 set_dac1_rate(s, val);
2181 return put_user(s->dac1rate, (int *)arg);
2183 case SNDCTL_DSP_STEREO:
2184 if (get_user(val, (int *)arg))
2187 s->dma_dac1.ready = 0;
2188 spin_lock_irqsave(&s->lock, flags);
2190 s->sctrl |= SCTRL_P1SMB;
2192 s->sctrl &= ~SCTRL_P1SMB;
2193 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2194 spin_unlock_irqrestore(&s->lock, flags);
2197 case SNDCTL_DSP_CHANNELS:
2198 if (get_user(val, (int *)arg))
2202 s->dma_dac1.ready = 0;
2203 spin_lock_irqsave(&s->lock, flags);
2205 s->sctrl |= SCTRL_P1SMB;
2207 s->sctrl &= ~SCTRL_P1SMB;
2208 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2209 spin_unlock_irqrestore(&s->lock, flags);
2211 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
2213 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
2214 return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
2216 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
2217 if (get_user(val, (int *)arg))
2219 if (val != AFMT_QUERY) {
2221 s->dma_dac1.ready = 0;
2222 spin_lock_irqsave(&s->lock, flags);
2223 if (val == AFMT_S16_LE)
2224 s->sctrl |= SCTRL_P1SEB;
2226 s->sctrl &= ~SCTRL_P1SEB;
2227 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2228 spin_unlock_irqrestore(&s->lock, flags);
2230 return put_user((s->sctrl & SCTRL_P1SEB) ? AFMT_S16_LE : AFMT_U8, (int *)arg);
2232 case SNDCTL_DSP_POST:
2235 case SNDCTL_DSP_GETTRIGGER:
2236 return put_user((s->ctrl & CTRL_DAC1_EN) ? PCM_ENABLE_OUTPUT : 0, (int *)arg);
2238 case SNDCTL_DSP_SETTRIGGER:
2239 if (get_user(val, (int *)arg))
2241 if (val & PCM_ENABLE_OUTPUT) {
2242 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
2244 s->dma_dac1.enabled = 1;
2247 s->dma_dac1.enabled = 0;
2252 case SNDCTL_DSP_GETOSPACE:
2253 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2255 spin_lock_irqsave(&s->lock, flags);
2256 es1371_update_ptr(s);
2257 abinfo.fragsize = s->dma_dac1.fragsize;
2258 count = s->dma_dac1.count;
2261 abinfo.bytes = s->dma_dac1.dmasize - count;
2262 abinfo.fragstotal = s->dma_dac1.numfrag;
2263 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;
2264 spin_unlock_irqrestore(&s->lock, flags);
2265 return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2267 case SNDCTL_DSP_NONBLOCK:
2268 file->f_flags |= O_NONBLOCK;
2271 case SNDCTL_DSP_GETODELAY:
2272 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2274 spin_lock_irqsave(&s->lock, flags);
2275 es1371_update_ptr(s);
2276 count = s->dma_dac1.count;
2277 spin_unlock_irqrestore(&s->lock, flags);
2280 return put_user(count, (int *)arg);
2282 case SNDCTL_DSP_GETOPTR:
2283 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2285 spin_lock_irqsave(&s->lock, flags);
2286 es1371_update_ptr(s);
2287 cinfo.bytes = s->dma_dac1.total_bytes;
2288 count = s->dma_dac1.count;
2291 cinfo.blocks = count >> s->dma_dac1.fragshift;
2292 cinfo.ptr = s->dma_dac1.hwptr;
2293 if (s->dma_dac1.mapped)
2294 s->dma_dac1.count &= s->dma_dac1.fragsize-1;
2295 spin_unlock_irqrestore(&s->lock, flags);
2296 return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2298 case SNDCTL_DSP_GETBLKSIZE:
2299 if ((val = prog_dmabuf_dac1(s)))
2301 return put_user(s->dma_dac1.fragsize, (int *)arg);
2303 case SNDCTL_DSP_SETFRAGMENT:
2304 if (get_user(val, (int *)arg))
2306 s->dma_dac1.ossfragshift = val & 0xffff;
2307 s->dma_dac1.ossmaxfrags = (val >> 16) & 0xffff;
2308 if (s->dma_dac1.ossfragshift < 4)
2309 s->dma_dac1.ossfragshift = 4;
2310 if (s->dma_dac1.ossfragshift > 15)
2311 s->dma_dac1.ossfragshift = 15;
2312 if (s->dma_dac1.ossmaxfrags < 4)
2313 s->dma_dac1.ossmaxfrags = 4;
2316 case SNDCTL_DSP_SUBDIVIDE:
2317 if (s->dma_dac1.subdivision)
2319 if (get_user(val, (int *)arg))
2321 if (val != 1 && val != 2 && val != 4)
2323 s->dma_dac1.subdivision = val;
2326 case SOUND_PCM_READ_RATE:
2327 return put_user(s->dac1rate, (int *)arg);
2329 case SOUND_PCM_READ_CHANNELS:
2330 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, (int *)arg);
2332 case SOUND_PCM_READ_BITS:
2333 return put_user((s->sctrl & SCTRL_P1SEB) ? 16 : 8, (int *)arg);
2335 case SOUND_PCM_WRITE_FILTER:
2336 case SNDCTL_DSP_SETSYNCRO:
2337 case SOUND_PCM_READ_FILTER:
2341 return mixdev_ioctl(&s->codec, cmd, arg);
2344 static int es1371_open_dac(struct inode *inode, struct file *file)
2346 int minor = MINOR(inode->i_rdev);
2347 DECLARE_WAITQUEUE(wait, current);
2348 unsigned long flags;
2349 struct list_head *list;
2350 struct es1371_state *s;
2352 for (list = devs.next; ; list = list->next) {
2355 s = list_entry(list, struct es1371_state, devs);
2356 if (!((s->dev_dac ^ minor) & ~0xf))
2360 /* we allow opening with O_RDWR, most programs do it although they will only write */
2362 if (file->f_mode & FMODE_READ)
2365 if (!(file->f_mode & FMODE_WRITE))
2367 file->private_data = s;
2368 /* wait for device to become free */
2370 while (s->open_mode & FMODE_DAC) {
2371 if (file->f_flags & O_NONBLOCK) {
2375 add_wait_queue(&s->open_wait, &wait);
2376 __set_current_state(TASK_INTERRUPTIBLE);
2379 remove_wait_queue(&s->open_wait, &wait);
2380 set_current_state(TASK_RUNNING);
2381 if (signal_pending(current))
2382 return -ERESTARTSYS;
2385 s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
2386 s->dma_dac1.enabled = 1;
2387 set_dac1_rate(s, 8000);
2388 spin_lock_irqsave(&s->lock, flags);
2389 s->sctrl &= ~SCTRL_P1FMT;
2390 if ((minor & 0xf) == SND_DEV_DSP16)
2391 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P1FMT;
2393 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P1FMT;
2394 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2395 spin_unlock_irqrestore(&s->lock, flags);
2396 s->open_mode |= FMODE_DAC;
2401 static int es1371_release_dac(struct inode *inode, struct file *file)
2403 struct es1371_state *s = (struct es1371_state *)file->private_data;
2407 drain_dac1(s, file->f_flags & O_NONBLOCK);
2410 dealloc_dmabuf(s, &s->dma_dac1);
2411 s->open_mode &= ~FMODE_DAC;
2413 wake_up(&s->open_wait);
2418 static /*const*/ struct file_operations es1371_dac_fops = {
2421 write: es1371_write_dac,
2422 poll: es1371_poll_dac,
2423 ioctl: es1371_ioctl_dac,
2424 mmap: es1371_mmap_dac,
2425 open: es1371_open_dac,
2426 release: es1371_release_dac,
2429 /* --------------------------------------------------------------------- */
2431 static ssize_t es1371_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
2433 struct es1371_state *s = (struct es1371_state *)file->private_data;
2434 DECLARE_WAITQUEUE(wait, current);
2436 unsigned long flags;
2441 if (ppos != &file->f_pos)
2443 if (!access_ok(VERIFY_WRITE, buffer, count))
2448 add_wait_queue(&s->midi.iwait, &wait);
2450 spin_lock_irqsave(&s->lock, flags);
2452 cnt = MIDIINBUF - ptr;
2453 if (s->midi.icnt < cnt)
2456 __set_current_state(TASK_INTERRUPTIBLE);
2457 spin_unlock_irqrestore(&s->lock, flags);
2461 if (file->f_flags & O_NONBLOCK) {
2467 if (signal_pending(current)) {
2474 if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt)) {
2479 ptr = (ptr + cnt) % MIDIINBUF;
2480 spin_lock_irqsave(&s->lock, flags);
2482 s->midi.icnt -= cnt;
2483 spin_unlock_irqrestore(&s->lock, flags);
2489 __set_current_state(TASK_RUNNING);
2490 remove_wait_queue(&s->midi.iwait, &wait);
2494 static ssize_t es1371_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
2496 struct es1371_state *s = (struct es1371_state *)file->private_data;
2497 DECLARE_WAITQUEUE(wait, current);
2499 unsigned long flags;
2504 if (ppos != &file->f_pos)
2506 if (!access_ok(VERIFY_READ, buffer, count))
2511 add_wait_queue(&s->midi.owait, &wait);
2513 spin_lock_irqsave(&s->lock, flags);
2515 cnt = MIDIOUTBUF - ptr;
2516 if (s->midi.ocnt + cnt > MIDIOUTBUF)
2517 cnt = MIDIOUTBUF - s->midi.ocnt;
2519 __set_current_state(TASK_INTERRUPTIBLE);
2520 es1371_handle_midi(s);
2522 spin_unlock_irqrestore(&s->lock, flags);
2526 if (file->f_flags & O_NONBLOCK) {
2532 if (signal_pending(current)) {
2539 if (copy_from_user(s->midi.obuf + ptr, buffer, cnt)) {
2544 ptr = (ptr + cnt) % MIDIOUTBUF;
2545 spin_lock_irqsave(&s->lock, flags);
2547 s->midi.ocnt += cnt;
2548 spin_unlock_irqrestore(&s->lock, flags);
2552 spin_lock_irqsave(&s->lock, flags);
2553 es1371_handle_midi(s);
2554 spin_unlock_irqrestore(&s->lock, flags);
2556 __set_current_state(TASK_RUNNING);
2557 remove_wait_queue(&s->midi.owait, &wait);
2561 /* No kernel lock - we have our own spinlock */
2562 static unsigned int es1371_midi_poll(struct file *file, struct poll_table_struct *wait)
2564 struct es1371_state *s = (struct es1371_state *)file->private_data;
2565 unsigned long flags;
2566 unsigned int mask = 0;
2569 if (file->f_mode & FMODE_WRITE)
2570 poll_wait(file, &s->midi.owait, wait);
2571 if (file->f_mode & FMODE_READ)
2572 poll_wait(file, &s->midi.iwait, wait);
2573 spin_lock_irqsave(&s->lock, flags);
2574 if (file->f_mode & FMODE_READ) {
2575 if (s->midi.icnt > 0)
2576 mask |= POLLIN | POLLRDNORM;
2578 if (file->f_mode & FMODE_WRITE) {
2579 if (s->midi.ocnt < MIDIOUTBUF)
2580 mask |= POLLOUT | POLLWRNORM;
2582 spin_unlock_irqrestore(&s->lock, flags);
2586 static int es1371_midi_open(struct inode *inode, struct file *file)
2588 int minor = MINOR(inode->i_rdev);
2589 DECLARE_WAITQUEUE(wait, current);
2590 unsigned long flags;
2591 struct list_head *list;
2592 struct es1371_state *s;
2594 for (list = devs.next; ; list = list->next) {
2597 s = list_entry(list, struct es1371_state, devs);
2598 if (s->dev_midi == minor)
2602 file->private_data = s;
2603 /* wait for device to become free */
2605 while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
2606 if (file->f_flags & O_NONBLOCK) {
2610 add_wait_queue(&s->open_wait, &wait);
2611 __set_current_state(TASK_INTERRUPTIBLE);
2614 remove_wait_queue(&s->open_wait, &wait);
2615 set_current_state(TASK_RUNNING);
2616 if (signal_pending(current))
2617 return -ERESTARTSYS;
2620 spin_lock_irqsave(&s->lock, flags);
2621 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2622 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2623 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2624 outb(UCTRL_CNTRL_SWR, s->io+ES1371_REG_UART_CONTROL);
2625 outb(0, s->io+ES1371_REG_UART_CONTROL);
2626 outb(0, s->io+ES1371_REG_UART_TEST);
2628 if (file->f_mode & FMODE_READ) {
2629 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2631 if (file->f_mode & FMODE_WRITE) {
2632 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2634 s->ctrl |= CTRL_UART_EN;
2635 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2636 es1371_handle_midi(s);
2637 spin_unlock_irqrestore(&s->lock, flags);
2638 s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
2643 static int es1371_midi_release(struct inode *inode, struct file *file)
2645 struct es1371_state *s = (struct es1371_state *)file->private_data;
2646 DECLARE_WAITQUEUE(wait, current);
2647 unsigned long flags;
2648 unsigned count, tmo;
2652 if (file->f_mode & FMODE_WRITE) {
2653 add_wait_queue(&s->midi.owait, &wait);
2655 __set_current_state(TASK_INTERRUPTIBLE);
2656 spin_lock_irqsave(&s->lock, flags);
2657 count = s->midi.ocnt;
2658 spin_unlock_irqrestore(&s->lock, flags);
2661 if (signal_pending(current))
2663 if (file->f_flags & O_NONBLOCK) {
2666 tmo = (count * HZ) / 3100;
2667 if (!schedule_timeout(tmo ? : 1) && tmo)
2668 printk(KERN_DEBUG PFX "midi timed out??\n");
2670 remove_wait_queue(&s->midi.owait, &wait);
2671 set_current_state(TASK_RUNNING);
2674 s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
2675 spin_lock_irqsave(&s->lock, flags);
2676 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2677 s->ctrl &= ~CTRL_UART_EN;
2678 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2680 spin_unlock_irqrestore(&s->lock, flags);
2682 wake_up(&s->open_wait);
2687 static /*const*/ struct file_operations es1371_midi_fops = {
2690 read: es1371_midi_read,
2691 write: es1371_midi_write,
2692 poll: es1371_midi_poll,
2693 open: es1371_midi_open,
2694 release: es1371_midi_release,
2697 /* --------------------------------------------------------------------- */
2700 * for debugging purposes, we'll create a proc device that dumps the
2705 static int proc_es1371_dump (char *buf, char **start, off_t fpos, int length, int *eof, void *data)
2707 struct es1371_state *s;
2710 if (list_empty(&devs))
2712 s = list_entry(devs.next, struct es1371_state, devs);
2713 /* print out header */
2714 len += sprintf(buf + len, "\t\tCreative ES137x Debug Dump-o-matic\n");
2716 /* print out CODEC state */
2717 len += sprintf (buf + len, "AC97 CODEC state\n");
2718 for (cnt=0; cnt <= 0x7e; cnt = cnt +2)
2719 len+= sprintf (buf + len, "reg:0x%02x val:0x%04x\n", cnt, rdcodec(&s->codec, cnt));
2726 *start = buf + fpos;
2727 if ((len -= fpos) > length)
2733 #endif /* ES1371_DEBUG */
2735 /* --------------------------------------------------------------------- */
2737 /* maximum number of devices; only used for command line params */
2740 static int joystick[NR_DEVICE] = { 0, };
2741 static int spdif[NR_DEVICE] = { 0, };
2742 static int nomix[NR_DEVICE] = { 0, };
2744 static unsigned int devindex = 0;
2745 static int amplifier = 0;
2747 MODULE_PARM(joystick, "1-" __MODULE_STRING(NR_DEVICE) "i");
2748 MODULE_PARM_DESC(joystick, "sets address and enables joystick interface (still need separate driver)");
2749 MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
2750 MODULE_PARM_DESC(spdif, "if 1 the output is in S/PDIF digital mode");
2751 MODULE_PARM(nomix, "1-" __MODULE_STRING(NR_DEVICE) "i");
2752 MODULE_PARM_DESC(nomix, "if 1 no analog audio is mixed to the digital output");
2753 MODULE_PARM(amplifier, "i");
2754 MODULE_PARM_DESC(amplifier, "Set to 1 if the machine needs the amp control enabling (many laptops)");
2756 MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
2757 MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver");
2758 MODULE_LICENSE("GPL");
2761 /* --------------------------------------------------------------------- */
2763 static struct initvol {
2766 } initvol[] __initdata = {
2767 { SOUND_MIXER_WRITE_LINE, 0x4040 },
2768 { SOUND_MIXER_WRITE_CD, 0x4040 },
2769 { MIXER_WRITE(SOUND_MIXER_VIDEO), 0x4040 },
2770 { SOUND_MIXER_WRITE_LINE1, 0x4040 },
2771 { SOUND_MIXER_WRITE_PCM, 0x4040 },
2772 { SOUND_MIXER_WRITE_VOLUME, 0x4040 },
2773 { MIXER_WRITE(SOUND_MIXER_PHONEOUT), 0x4040 },
2774 { SOUND_MIXER_WRITE_OGAIN, 0x4040 },
2775 { MIXER_WRITE(SOUND_MIXER_PHONEIN), 0x4040 },
2776 { SOUND_MIXER_WRITE_SPEAKER, 0x4040 },
2777 { SOUND_MIXER_WRITE_MIC, 0x4040 },
2778 { SOUND_MIXER_WRITE_RECLEV, 0x4040 },
2779 { SOUND_MIXER_WRITE_IGAIN, 0x4040 }
2785 } amplifier_needed[] =
2787 { 0x107B, 0x2150 }, /* Gateway Solo 2150 */
2788 { 0x13BD, 0x100C }, /* Mebius PC-MJ100V */
2789 { 0x1102, 0x5938 }, /* Targa Xtender 300 */
2790 { 0x1102, 0x8938 }, /* IPC notebook */
2791 { PCI_ANY_ID, PCI_ANY_ID }
2795 static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
2797 struct es1371_state *s;
2799 int i, val, res = -1;
2805 if ((res=pci_enable_device(pcidev)))
2808 if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_IO))
2810 if (pcidev->irq == 0)
2812 i = pci_set_dma_mask(pcidev, 0xffffffff);
2814 printk(KERN_WARNING "es1371: architecture does not support 32bit PCI busmaster DMA\n");
2817 if (!(s = kmalloc(sizeof(struct es1371_state), GFP_KERNEL))) {
2818 printk(KERN_WARNING PFX "out of memory\n");
2821 memset(s, 0, sizeof(struct es1371_state));
2822 init_waitqueue_head(&s->dma_adc.wait);
2823 init_waitqueue_head(&s->dma_dac1.wait);
2824 init_waitqueue_head(&s->dma_dac2.wait);
2825 init_waitqueue_head(&s->open_wait);
2826 init_waitqueue_head(&s->midi.iwait);
2827 init_waitqueue_head(&s->midi.owait);
2828 init_MUTEX(&s->open_sem);
2829 spin_lock_init(&s->lock);
2830 s->magic = ES1371_MAGIC;
2832 s->io = pci_resource_start(pcidev, 0);
2833 s->irq = pcidev->irq;
2834 s->vendor = pcidev->vendor;
2835 s->device = pcidev->device;
2836 pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev);
2837 s->codec.private_data = s;
2839 s->codec.codec_read = rdcodec;
2840 s->codec.codec_write = wrcodec;
2841 printk(KERN_INFO PFX "found chip, vendor id 0x%04x device id 0x%04x revision 0x%02x\n",
2842 s->vendor, s->device, s->rev);
2843 if (!request_region(s->io, ES1371_EXTENT, "es1371")) {
2844 printk(KERN_ERR PFX "io ports %#lx-%#lx in use\n", s->io, s->io+ES1371_EXTENT-1);
2848 if ((res=request_irq(s->irq, es1371_interrupt, SA_SHIRQ, "es1371",s))) {
2849 printk(KERN_ERR PFX "irq %u in use\n", s->irq);
2852 printk(KERN_INFO PFX "found es1371 rev %d at io %#lx irq %u\n"
2853 KERN_INFO PFX "features: joystick 0x%x\n", s->rev, s->io, s->irq, joystick[devindex]);
2854 /* register devices */
2855 if ((res=(s->dev_audio = register_sound_dsp(&es1371_audio_fops,-1))<0))
2857 if ((res=(s->codec.dev_mixer = register_sound_mixer(&es1371_mixer_fops, -1)) < 0))
2859 if ((res=(s->dev_dac = register_sound_dsp(&es1371_dac_fops, -1)) < 0))
2861 if ((res=(s->dev_midi = register_sound_midi(&es1371_midi_fops, -1))<0 ))
2864 /* intialize the debug proc device */
2865 s->ps = create_proc_read_entry("es1371",0,NULL,proc_es1371_dump,NULL);
2866 #endif /* ES1371_DEBUG */
2868 /* initialize codec registers */
2871 /* Check amplifier requirements */
2874 s->ctrl |= CTRL_GPIO_OUT0;
2875 else for(idx = 0; amplifier_needed[idx].svid != PCI_ANY_ID; idx++)
2877 if(pcidev->subsystem_vendor == amplifier_needed[idx].svid &&
2878 pcidev->subsystem_device == amplifier_needed[idx].sdid)
2880 s->ctrl |= CTRL_GPIO_OUT0; /* turn internal amplifier on */
2881 printk(KERN_INFO PFX "Enabling internal amplifier.\n");
2885 if ((joystick[devindex] & ~0x18) == 0x200) {
2886 if (!request_region(joystick[devindex], JOY_EXTENT, "es1371"))
2887 printk(KERN_ERR PFX "joystick address 0x%x already in use\n", joystick[devindex]);
2889 s->ctrl |= CTRL_JYSTK_EN | (((joystick[devindex] >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
2890 s->gameport.io = joystick[devindex];
2892 } else if (joystick[devindex] == 1) {
2893 for (i = 0x218; i >= 0x200; i -= 0x08) {
2894 if (request_region(i, JOY_EXTENT, "es1371")) {
2895 s->ctrl |= CTRL_JYSTK_EN | (((i >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
2900 if (!s->gameport.io)
2901 printk(KERN_ERR PFX "no free joystick address found\n");
2905 s->spdif_volume = -1;
2906 /* check to see if s/pdif mode is being requested */
2907 if (spdif[devindex]) {
2909 printk(KERN_INFO PFX "enabling S/PDIF output\n");
2910 s->spdif_volume = 0;
2911 cssr |= STAT_EN_SPDIF;
2912 s->ctrl |= CTRL_SPDIFEN_B;
2913 if (nomix[devindex]) /* don't mix analog inputs to s/pdif output */
2914 s->ctrl |= CTRL_RECEN_B;
2916 printk(KERN_ERR PFX "revision %d does not support S/PDIF\n", s->rev);
2919 /* initialize the chips */
2920 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2921 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2922 outl(0, s->io+ES1371_REG_LEGACY);
2923 pci_set_master(pcidev); /* enable bus mastering */
2924 /* if we are a 5880 turn on the AC97 */
2925 if (s->vendor == PCI_VENDOR_ID_ENSONIQ &&
2926 ((s->device == PCI_DEVICE_ID_ENSONIQ_CT5880 && s->rev >= CT5880REV_CT5880_C) ||
2927 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A) ||
2928 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_ES1373_8))) {
2929 cssr |= CSTAT_5880_AC97_RST;
2930 outl(cssr, s->io+ES1371_REG_STATUS);
2931 /* need to delay around 20ms(bleech) to give
2932 some CODECs enough time to wakeup */
2933 tmo = jiffies + (HZ / 50) + 1;
2935 tmo2 = tmo - jiffies;
2938 schedule_timeout(tmo2);
2941 /* AC97 warm reset to start the bitclk */
2942 outl(s->ctrl | CTRL_SYNCRES, s->io+ES1371_REG_CONTROL);
2944 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2945 /* init the sample rate converter */
2948 if (!ac97_probe_codec(&s->codec)) {
2952 /* set default values */
2956 val = SOUND_MASK_LINE;
2957 mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
2958 for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
2959 val = initvol[i].vol;
2960 mixdev_ioctl(&s->codec, initvol[i].mixch, (unsigned long)&val);
2962 /* mute master and PCM when in S/PDIF mode */
2963 if (s->spdif_volume != -1) {
2965 s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_VOLUME, (unsigned long)&val);
2966 s->codec.mixer_ioctl(&s->codec, SOUND_MIXER_WRITE_PCM, (unsigned long)&val);
2969 /* turn on S/PDIF output driver if requested */
2970 outl(cssr, s->io+ES1371_REG_STATUS);
2971 /* register gameport */
2973 gameport_register_port(&s->gameport);
2974 /* store it in the driver field */
2975 pci_set_drvdata(pcidev, s);
2976 /* put it into driver list */
2977 list_add_tail(&s->devs, &devs);
2978 /* increment devindex */
2979 if (devindex < NR_DEVICE-1)
2985 release_region(s->gameport.io, JOY_EXTENT);
2987 unregister_sound_dsp(s->dev_dac);
2989 unregister_sound_mixer(s->codec.dev_mixer);
2991 unregister_sound_dsp(s->dev_audio);
2993 printk(KERN_ERR PFX "cannot register misc device\n");
2994 free_irq(s->irq, s);
2996 release_region(s->io, ES1371_EXTENT);
3002 static void __devinit es1371_remove(struct pci_dev *dev)
3004 struct es1371_state *s = pci_get_drvdata(dev);
3011 remove_proc_entry("es1371", NULL);
3012 #endif /* ES1371_DEBUG */
3013 outl(0, s->io+ES1371_REG_CONTROL); /* switch everything off */
3014 outl(0, s->io+ES1371_REG_SERIAL_CONTROL); /* clear serial interrupts */
3016 free_irq(s->irq, s);
3017 if (s->gameport.io) {
3018 gameport_unregister_port(&s->gameport);
3019 release_region(s->gameport.io, JOY_EXTENT);
3021 release_region(s->io, ES1371_EXTENT);
3022 unregister_sound_dsp(s->dev_audio);
3023 unregister_sound_mixer(s->codec.dev_mixer);
3024 unregister_sound_dsp(s->dev_dac);
3025 unregister_sound_midi(s->dev_midi);
3027 pci_set_drvdata(dev, NULL);
3030 static struct pci_device_id id_table[] __devinitdata = {
3031 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1371, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3032 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_CT5880, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3033 { PCI_VENDOR_ID_ECTIVA, PCI_DEVICE_ID_ECTIVA_EV1938, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3037 MODULE_DEVICE_TABLE(pci, id_table);
3039 static struct pci_driver es1371_driver = {
3042 probe: es1371_probe,
3043 remove: es1371_remove
3046 static int __init init_es1371(void)
3048 if (!pci_present()) /* No PCI bus in this machine! */
3050 printk(KERN_INFO PFX "version v0.32 time " __TIME__ " " __DATE__ "\n");
3051 return pci_module_init(&es1371_driver);
3054 static void __exit cleanup_es1371(void)
3056 printk(KERN_INFO PFX "unloading\n");
3057 pci_unregister_driver(&es1371_driver);
3060 module_init(init_es1371);
3061 module_exit(cleanup_es1371);
3063 /* --------------------------------------------------------------------- */
3067 /* format is: es1371=[joystick] */
3069 static int __init es1371_setup(char *str)
3071 static unsigned __initdata nr_dev = 0;
3073 if (nr_dev >= NR_DEVICE)
3075 if (get_option(&str, &joystick[nr_dev]) == 2)
3076 (void)get_option(&str, &spdif[nr_dev]);
3081 __setup("es1371=", es1371_setup);