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 * /dev/dsp standard /dev/dsp device, (mostly) OSS compatible
26 * /dev/mixer standard /dev/mixer device, (mostly) OSS compatible
27 * /dev/dsp1 additional DAC, like /dev/dsp, but outputs to mixer "SYNTH" setting
28 * /dev/midi simple MIDI UART interface, no ioctl
30 * NOTE: the card does not have any FM/Wavetable synthesizer, it is supposed
31 * to be done in software. That is what /dev/dac is for. By now (Q2 1998)
32 * there are several MIDI to PCM (WAV) packages, one of them is timidity.
35 * 04.06.1998 0.1 Initial release
36 * Mixer stuff should be overhauled; especially optional AC97 mixer bits
37 * should be detected. This results in strange behaviour of some mixer
38 * settings, like master volume and mic.
39 * 08.06.1998 0.2 First release using Alan Cox' soundcore instead of miscdevice
40 * 03.08.1998 0.3 Do not include modversions.h
41 * Now mixer behaviour can basically be selected between
42 * "OSS documented" and "OSS actual" behaviour
43 * 31.08.1998 0.4 Fix realplayer problems - dac.count issues
44 * 27.10.1998 0.5 Fix joystick support
45 * -- Oliver Neukum (c188@org.chemie.uni-muenchen.de)
46 * 10.12.1998 0.6 Fix drain_dac trying to wait on not yet initialized DMA
47 * 23.12.1998 0.7 Fix a few f_file & FMODE_ bugs
48 * Don't wake up app until there are fragsize bytes to read/write
49 * 06.01.1999 0.8 remove the silly SA_INTERRUPT flag.
50 * hopefully killed the egcs section type conflict
51 * 12.03.1999 0.9 cinfo.blocks should be reset after GETxPTR ioctl.
52 * reported by Johan Maes <joma@telindus.be>
53 * 22.03.1999 0.10 return EAGAIN instead of EBUSY when O_NONBLOCK
54 * read/write cannot be executed
55 * 07.04.1999 0.11 implemented the following ioctl's: SOUND_PCM_READ_RATE,
56 * SOUND_PCM_READ_CHANNELS, SOUND_PCM_READ_BITS;
57 * Alpha fixes reported by Peter Jones <pjones@redhat.com>
58 * Another Alpha fix (wait_src_ready in init routine)
59 * reported by "Ivan N. Kokshaysky" <ink@jurassic.park.msu.ru>
60 * Note: joystick address handling might still be wrong on archs
62 * 15.06.1999 0.12 Fix bad allocation bug.
63 * Thanks to Deti Fliegl <fliegl@in.tum.de>
64 * 28.06.1999 0.13 Add pci_set_master
65 * 03.08.1999 0.14 adapt to Linus' new __setup/__initcall
66 * added kernel command line option "es1371=joystickaddr"
67 * removed CONFIG_SOUND_ES1371_JOYPORT_BOOT kludge
68 * 10.08.1999 0.15 (Re)added S/PDIF module option for cards revision >= 4.
69 * Initial version by Dave Platt <dplatt@snulbug.mtview.ca.us>.
70 * module_init/__setup fixes
71 * 08.16.1999 0.16 Joe Cotellese <joec@ensoniq.com>
72 * Added detection for ES1371 revision ID so that we can
73 * detect the ES1373 and later parts.
74 * added AC97 #defines for readability
75 * added a /proc file system for dumping hardware state
76 * updated SRC and CODEC w/r functions to accommodate bugs
77 * in some versions of the ES137x chips.
78 * 31.08.1999 0.17 add spin_lock_init
79 * replaced current->state = x with set_current_state(x)
80 * 03.09.1999 0.18 change read semantics for MIDI to match
81 * OSS more closely; remove possible wakeup race
82 * 21.10.1999 0.19 Round sampling rates, requested by
83 * Kasamatsu Kenichi <t29w0267@ip.media.kyoto-u.ac.jp>
84 * 27.10.1999 0.20 Added SigmaTel 3D enhancement string
85 * Codec ID printing changes
86 * 28.10.1999 0.21 More waitqueue races fixed
87 * Joe Cotellese <joec@ensoniq.com>
88 * Changed PCI detection routine so we can more easily
89 * detect ES137x chip and derivatives.
90 * 05.01.2000 0.22 Should now work with rev7 boards; patch by
91 * Eric Lemar, elemar@cs.washington.edu
92 * 08.01.2000 0.23 Prevent some ioctl's from returning bad count values on underrun/overrun;
93 * Tim Janik's BSE (Bedevilled Sound Engine) found this
94 * 07.02.2000 0.24 Use pci_alloc_consistent and pci_register_driver
95 * 07.02.2000 0.25 Use ac97_codec
96 * 01.03.2000 0.26 SPDIF patch by Mikael Bouillot <mikael.bouillot@bigfoot.com>
98 * 21.11.2000 0.27 Initialize dma buffers in poll, otherwise poll may return a bogus mask
99 * 12.12.2000 0.28 More dma buffer initializations, patch from
100 * Tjeerd Mulder <tjeerd.mulder@fujitsu-siemens.com>
101 * 05.01.2001 0.29 Hopefully updates will not be required anymore when Creative bumps
102 * the CT5880 revision.
103 * suggested by Stephan Müller <smueller@chronox.de>
104 * 31.01.2001 0.30 Register/Unregister gameport
105 * Fix SETTRIGGER non OSS API conformity
106 * 14.07.2001 0.31 Add list of laptops needing amplifier control
107 * 03.01.2003 0.32 open_mode fixes from Georg Acher <acher@in.tum.de>
110 /*****************************************************************************/
112 #include <linux/interrupt.h>
113 #include <linux/module.h>
114 #include <linux/string.h>
115 #include <linux/ioport.h>
116 #include <linux/sched.h>
117 #include <linux/delay.h>
118 #include <linux/sound.h>
119 #include <linux/slab.h>
120 #include <linux/soundcard.h>
121 #include <linux/pci.h>
122 #include <linux/init.h>
123 #include <linux/poll.h>
124 #include <linux/bitops.h>
125 #include <linux/proc_fs.h>
126 #include <linux/spinlock.h>
127 #include <linux/smp_lock.h>
128 #include <linux/ac97_codec.h>
129 #include <linux/gameport.h>
130 #include <linux/wait.h>
131 #include <linux/dma-mapping.h>
134 #include <asm/page.h>
135 #include <asm/uaccess.h>
137 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
138 #define SUPPORT_JOYSTICK
141 /* --------------------------------------------------------------------- */
143 #undef OSS_DOCUMENTED_MIXER_SEMANTICS
146 /*#define DBG(x) {x}*/
148 /* --------------------------------------------------------------------- */
150 #ifndef PCI_VENDOR_ID_ENSONIQ
151 #define PCI_VENDOR_ID_ENSONIQ 0x1274
154 #ifndef PCI_VENDOR_ID_ECTIVA
155 #define PCI_VENDOR_ID_ECTIVA 0x1102
158 #ifndef PCI_DEVICE_ID_ENSONIQ_ES1371
159 #define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371
162 #ifndef PCI_DEVICE_ID_ENSONIQ_CT5880
163 #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880
166 #ifndef PCI_DEVICE_ID_ECTIVA_EV1938
167 #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938
171 /* This is a little confusing because all ES1371 compatible chips have the
172 same DEVICE_ID, the only thing differentiating them is the REV_ID field.
173 This is only significant if you want to enable features on the later parts.
174 Yes, I know it's stupid and why didn't we use the sub IDs?
176 #define ES1371REV_ES1373_A 0x04
177 #define ES1371REV_ES1373_B 0x06
178 #define ES1371REV_CT5880_A 0x07
179 #define CT5880REV_CT5880_C 0x02
180 #define CT5880REV_CT5880_D 0x03
181 #define ES1371REV_ES1371_B 0x09
182 #define EV1938REV_EV1938_A 0x00
183 #define ES1371REV_ES1373_8 0x08
185 #define ES1371_MAGIC ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
187 #define ES1371_EXTENT 0x40
190 #define ES1371_REG_CONTROL 0x00
191 #define ES1371_REG_STATUS 0x04 /* on the 5880 it is control/status */
192 #define ES1371_REG_UART_DATA 0x08
193 #define ES1371_REG_UART_STATUS 0x09
194 #define ES1371_REG_UART_CONTROL 0x09
195 #define ES1371_REG_UART_TEST 0x0a
196 #define ES1371_REG_MEMPAGE 0x0c
197 #define ES1371_REG_SRCONV 0x10
198 #define ES1371_REG_CODEC 0x14
199 #define ES1371_REG_LEGACY 0x18
200 #define ES1371_REG_SERIAL_CONTROL 0x20
201 #define ES1371_REG_DAC1_SCOUNT 0x24
202 #define ES1371_REG_DAC2_SCOUNT 0x28
203 #define ES1371_REG_ADC_SCOUNT 0x2c
205 #define ES1371_REG_DAC1_FRAMEADR 0xc30
206 #define ES1371_REG_DAC1_FRAMECNT 0xc34
207 #define ES1371_REG_DAC2_FRAMEADR 0xc38
208 #define ES1371_REG_DAC2_FRAMECNT 0xc3c
209 #define ES1371_REG_ADC_FRAMEADR 0xd30
210 #define ES1371_REG_ADC_FRAMECNT 0xd34
212 #define ES1371_FMT_U8_MONO 0
213 #define ES1371_FMT_U8_STEREO 1
214 #define ES1371_FMT_S16_MONO 2
215 #define ES1371_FMT_S16_STEREO 3
216 #define ES1371_FMT_STEREO 1
217 #define ES1371_FMT_S16 2
218 #define ES1371_FMT_MASK 3
220 static const unsigned sample_size[] = { 1, 2, 2, 4 };
221 static const unsigned sample_shift[] = { 0, 1, 1, 2 };
223 #define CTRL_RECEN_B 0x08000000 /* 1 = don't mix analog in to digital out */
224 #define CTRL_SPDIFEN_B 0x04000000
225 #define CTRL_JOY_SHIFT 24
226 #define CTRL_JOY_MASK 3
227 #define CTRL_JOY_200 0x00000000 /* joystick base address */
228 #define CTRL_JOY_208 0x01000000
229 #define CTRL_JOY_210 0x02000000
230 #define CTRL_JOY_218 0x03000000
231 #define CTRL_GPIO_IN0 0x00100000 /* general purpose inputs/outputs */
232 #define CTRL_GPIO_IN1 0x00200000
233 #define CTRL_GPIO_IN2 0x00400000
234 #define CTRL_GPIO_IN3 0x00800000
235 #define CTRL_GPIO_OUT0 0x00010000
236 #define CTRL_GPIO_OUT1 0x00020000
237 #define CTRL_GPIO_OUT2 0x00040000
238 #define CTRL_GPIO_OUT3 0x00080000
239 #define CTRL_MSFMTSEL 0x00008000 /* MPEG serial data fmt: 0 = Sony, 1 = I2S */
240 #define CTRL_SYNCRES 0x00004000 /* AC97 warm reset */
241 #define CTRL_ADCSTOP 0x00002000 /* stop ADC transfers */
242 #define CTRL_PWR_INTRM 0x00001000 /* 1 = power level ints enabled */
243 #define CTRL_M_CB 0x00000800 /* recording source: 0 = ADC, 1 = MPEG */
244 #define CTRL_CCB_INTRM 0x00000400 /* 1 = CCB "voice" ints enabled */
245 #define CTRL_PDLEV0 0x00000000 /* power down level */
246 #define CTRL_PDLEV1 0x00000100
247 #define CTRL_PDLEV2 0x00000200
248 #define CTRL_PDLEV3 0x00000300
249 #define CTRL_BREQ 0x00000080 /* 1 = test mode (internal mem test) */
250 #define CTRL_DAC1_EN 0x00000040 /* enable DAC1 */
251 #define CTRL_DAC2_EN 0x00000020 /* enable DAC2 */
252 #define CTRL_ADC_EN 0x00000010 /* enable ADC */
253 #define CTRL_UART_EN 0x00000008 /* enable MIDI uart */
254 #define CTRL_JYSTK_EN 0x00000004 /* enable Joystick port */
255 #define CTRL_XTALCLKDIS 0x00000002 /* 1 = disable crystal clock input */
256 #define CTRL_PCICLKDIS 0x00000001 /* 1 = disable PCI clock distribution */
259 #define STAT_INTR 0x80000000 /* wired or of all interrupt bits */
260 #define CSTAT_5880_AC97_RST 0x20000000 /* CT5880 Reset bit */
261 #define STAT_EN_SPDIF 0x00040000 /* enable S/PDIF circuitry */
262 #define STAT_TS_SPDIF 0x00020000 /* test S/PDIF circuitry */
263 #define STAT_TESTMODE 0x00010000 /* test ASIC */
264 #define STAT_SYNC_ERR 0x00000100 /* 1 = codec sync error */
265 #define STAT_VC 0x000000c0 /* CCB int source, 0=DAC1, 1=DAC2, 2=ADC, 3=undef */
267 #define STAT_MPWR 0x00000020 /* power level interrupt */
268 #define STAT_MCCB 0x00000010 /* CCB int pending */
269 #define STAT_UART 0x00000008 /* UART int pending */
270 #define STAT_DAC1 0x00000004 /* DAC1 int pending */
271 #define STAT_DAC2 0x00000002 /* DAC2 int pending */
272 #define STAT_ADC 0x00000001 /* ADC int pending */
274 #define USTAT_RXINT 0x80 /* UART rx int pending */
275 #define USTAT_TXINT 0x04 /* UART tx int pending */
276 #define USTAT_TXRDY 0x02 /* UART tx ready */
277 #define USTAT_RXRDY 0x01 /* UART rx ready */
279 #define UCTRL_RXINTEN 0x80 /* 1 = enable RX ints */
280 #define UCTRL_TXINTEN 0x60 /* TX int enable field mask */
281 #define UCTRL_ENA_TXINT 0x20 /* enable TX int */
282 #define UCTRL_CNTRL 0x03 /* control field */
283 #define UCTRL_CNTRL_SWR 0x03 /* software reset command */
285 /* sample rate converter */
286 #define SRC_OKSTATE 1
288 #define SRC_RAMADDR_MASK 0xfe000000
289 #define SRC_RAMADDR_SHIFT 25
290 #define SRC_DAC1FREEZE (1UL << 21)
291 #define SRC_DAC2FREEZE (1UL << 20)
292 #define SRC_ADCFREEZE (1UL << 19)
295 #define SRC_WE 0x01000000 /* read/write control for SRC RAM */
296 #define SRC_BUSY 0x00800000 /* SRC busy */
297 #define SRC_DIS 0x00400000 /* 1 = disable SRC */
298 #define SRC_DDAC1 0x00200000 /* 1 = disable accum update for DAC1 */
299 #define SRC_DDAC2 0x00100000 /* 1 = disable accum update for DAC2 */
300 #define SRC_DADC 0x00080000 /* 1 = disable accum update for ADC2 */
301 #define SRC_CTLMASK 0x00780000
302 #define SRC_RAMDATA_MASK 0x0000ffff
303 #define SRC_RAMDATA_SHIFT 0
305 #define SRCREG_ADC 0x78
306 #define SRCREG_DAC1 0x70
307 #define SRCREG_DAC2 0x74
308 #define SRCREG_VOL_ADC 0x6c
309 #define SRCREG_VOL_DAC1 0x7c
310 #define SRCREG_VOL_DAC2 0x7e
312 #define SRCREG_TRUNC_N 0x00
313 #define SRCREG_INT_REGS 0x01
314 #define SRCREG_ACCUM_FRAC 0x02
315 #define SRCREG_VFREQ_FRAC 0x03
317 #define CODEC_PIRD 0x00800000 /* 0 = write AC97 register */
318 #define CODEC_PIADD_MASK 0x007f0000
319 #define CODEC_PIADD_SHIFT 16
320 #define CODEC_PIDAT_MASK 0x0000ffff
321 #define CODEC_PIDAT_SHIFT 0
323 #define CODEC_RDY 0x80000000 /* AC97 read data valid */
324 #define CODEC_WIP 0x40000000 /* AC97 write in progress */
325 #define CODEC_PORD 0x00800000 /* 0 = write AC97 register */
326 #define CODEC_POADD_MASK 0x007f0000
327 #define CODEC_POADD_SHIFT 16
328 #define CODEC_PODAT_MASK 0x0000ffff
329 #define CODEC_PODAT_SHIFT 0
332 #define LEGACY_JFAST 0x80000000 /* fast joystick timing */
333 #define LEGACY_FIRQ 0x01000000 /* force IRQ */
335 #define SCTRL_DACTEST 0x00400000 /* 1 = DAC test, test vector generation purposes */
336 #define SCTRL_P2ENDINC 0x00380000 /* */
337 #define SCTRL_SH_P2ENDINC 19
338 #define SCTRL_P2STINC 0x00070000 /* */
339 #define SCTRL_SH_P2STINC 16
340 #define SCTRL_R1LOOPSEL 0x00008000 /* 0 = loop mode */
341 #define SCTRL_P2LOOPSEL 0x00004000 /* 0 = loop mode */
342 #define SCTRL_P1LOOPSEL 0x00002000 /* 0 = loop mode */
343 #define SCTRL_P2PAUSE 0x00001000 /* 1 = pause mode */
344 #define SCTRL_P1PAUSE 0x00000800 /* 1 = pause mode */
345 #define SCTRL_R1INTEN 0x00000400 /* enable interrupt */
346 #define SCTRL_P2INTEN 0x00000200 /* enable interrupt */
347 #define SCTRL_P1INTEN 0x00000100 /* enable interrupt */
348 #define SCTRL_P1SCTRLD 0x00000080 /* reload sample count register for DAC1 */
349 #define SCTRL_P2DACSEN 0x00000040 /* 1 = DAC2 play back last sample when disabled */
350 #define SCTRL_R1SEB 0x00000020 /* 1 = 16bit */
351 #define SCTRL_R1SMB 0x00000010 /* 1 = stereo */
352 #define SCTRL_R1FMT 0x00000030 /* format mask */
353 #define SCTRL_SH_R1FMT 4
354 #define SCTRL_P2SEB 0x00000008 /* 1 = 16bit */
355 #define SCTRL_P2SMB 0x00000004 /* 1 = stereo */
356 #define SCTRL_P2FMT 0x0000000c /* format mask */
357 #define SCTRL_SH_P2FMT 2
358 #define SCTRL_P1SEB 0x00000002 /* 1 = 16bit */
359 #define SCTRL_P1SMB 0x00000001 /* 1 = stereo */
360 #define SCTRL_P1FMT 0x00000003 /* format mask */
361 #define SCTRL_SH_P1FMT 0
365 #define POLL_COUNT 0x1000
366 #define FMODE_DAC 4 /* slight misuse of mode_t */
368 /* MIDI buffer sizes */
370 #define MIDIINBUF 256
371 #define MIDIOUTBUF 256
373 #define FMODE_MIDI_SHIFT 3
374 #define FMODE_MIDI_READ (FMODE_READ << FMODE_MIDI_SHIFT)
375 #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
377 #define ES1371_MODULE_NAME "es1371"
378 #define PFX ES1371_MODULE_NAME ": "
380 /* --------------------------------------------------------------------- */
382 struct es1371_state {
386 /* list of es1371 devices */
387 struct list_head devs;
389 /* the corresponding pci_dev structure */
392 /* soundcore stuff */
397 /* hardware resources */
398 unsigned long io; /* long for SPARC */
404 u8 rev; /* the chip revision */
407 int spdif_volume; /* S/PDIF output is enabled if != -1 */
410 /* debug /proc entry */
411 struct proc_dir_entry *ps;
412 #endif /* ES1371_DEBUG */
414 struct ac97_codec *codec;
419 unsigned dac1rate, dac2rate, adcrate;
422 struct semaphore open_sem;
424 wait_queue_head_t open_wait;
432 unsigned hwptr, swptr;
433 unsigned total_bytes;
435 unsigned error; /* over/underrun */
436 wait_queue_head_t wait;
437 /* redundant, but makes calculations easier */
440 unsigned fragsamples;
444 unsigned endcleared:1;
446 unsigned ossfragshift;
448 unsigned subdivision;
449 } dma_dac1, dma_dac2, dma_adc;
453 unsigned ird, iwr, icnt;
454 unsigned ord, owr, ocnt;
455 wait_queue_head_t iwait;
456 wait_queue_head_t owait;
457 unsigned char ibuf[MIDIINBUF];
458 unsigned char obuf[MIDIOUTBUF];
461 #ifdef SUPPORT_JOYSTICK
462 struct gameport *gameport;
465 struct semaphore sem;
468 /* --------------------------------------------------------------------- */
470 static LIST_HEAD(devs);
472 /* --------------------------------------------------------------------- */
474 static inline unsigned ld2(unsigned int x)
499 /* --------------------------------------------------------------------- */
501 static unsigned wait_src_ready(struct es1371_state *s)
505 for (t = 0; t < POLL_COUNT; t++) {
506 if (!((r = inl(s->io + ES1371_REG_SRCONV)) & SRC_BUSY))
510 printk(KERN_DEBUG PFX "sample rate converter timeout r = 0x%08x\n", r);
514 static unsigned src_read(struct es1371_state *s, unsigned reg)
516 unsigned int temp,i,orig;
519 temp = wait_src_ready (s);
521 /* we can only access the SRC at certain times, make sure
522 we're allowed to before we read */
525 /* expose the SRC state bits */
526 outl ( (temp & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT) | 0x10000UL,
527 s->io + ES1371_REG_SRCONV);
529 /* now, wait for busy and the correct time to read */
530 temp = wait_src_ready (s);
532 if ( (temp & 0x00870000UL ) != ( SRC_OKSTATE << 16 )){
533 /* wait for the right state */
534 for (i=0; i<POLL_COUNT; i++){
535 temp = inl (s->io + ES1371_REG_SRCONV);
536 if ( (temp & 0x00870000UL ) == ( SRC_OKSTATE << 16 ))
541 /* hide the state bits */
542 outl ((orig & SRC_CTLMASK) | (reg << SRC_RAMADDR_SHIFT), s->io + ES1371_REG_SRCONV);
548 static void src_write(struct es1371_state *s, unsigned reg, unsigned data)
553 r = wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC);
554 r |= (reg << SRC_RAMADDR_SHIFT) & SRC_RAMADDR_MASK;
555 r |= (data << SRC_RAMDATA_SHIFT) & SRC_RAMDATA_MASK;
556 outl(r | SRC_WE, s->io + ES1371_REG_SRCONV);
560 /* --------------------------------------------------------------------- */
562 /* most of the following here is black magic */
563 static void set_adc_rate(struct es1371_state *s, unsigned rate)
566 unsigned int n, truncm, freq;
573 if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
575 truncm = (21 * n - 1) | 1;
576 freq = ((48000UL << 15) / rate) * n;
577 s->adcrate = (48000UL << 15) / (freq / n);
578 spin_lock_irqsave(&s->lock, flags);
582 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
583 (((239 - truncm) >> 1) << 9) | (n << 4));
587 src_write(s, SRCREG_ADC+SRCREG_TRUNC_N,
588 0x8000 | (((119 - truncm) >> 1) << 9) | (n << 4));
590 src_write(s, SRCREG_ADC+SRCREG_INT_REGS,
591 (src_read(s, SRCREG_ADC+SRCREG_INT_REGS) & 0x00ff) |
592 ((freq >> 5) & 0xfc00));
593 src_write(s, SRCREG_ADC+SRCREG_VFREQ_FRAC, freq & 0x7fff);
594 src_write(s, SRCREG_VOL_ADC, n << 8);
595 src_write(s, SRCREG_VOL_ADC+1, n << 8);
596 spin_unlock_irqrestore(&s->lock, flags);
600 static void set_dac1_rate(struct es1371_state *s, unsigned rate)
603 unsigned int freq, r;
609 freq = ((rate << 15) + 1500) / 3000;
610 s->dac1rate = (freq * 3000 + 16384) >> 15;
611 spin_lock_irqsave(&s->lock, flags);
612 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC)) | SRC_DDAC1;
613 outl(r, s->io + ES1371_REG_SRCONV);
614 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS,
615 (src_read(s, SRCREG_DAC1+SRCREG_INT_REGS) & 0x00ff) |
616 ((freq >> 5) & 0xfc00));
617 src_write(s, SRCREG_DAC1+SRCREG_VFREQ_FRAC, freq & 0x7fff);
618 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC2 | SRC_DADC));
619 outl(r, s->io + ES1371_REG_SRCONV);
620 spin_unlock_irqrestore(&s->lock, flags);
623 static void set_dac2_rate(struct es1371_state *s, unsigned rate)
626 unsigned int freq, r;
632 freq = ((rate << 15) + 1500) / 3000;
633 s->dac2rate = (freq * 3000 + 16384) >> 15;
634 spin_lock_irqsave(&s->lock, flags);
635 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC)) | SRC_DDAC2;
636 outl(r, s->io + ES1371_REG_SRCONV);
637 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS,
638 (src_read(s, SRCREG_DAC2+SRCREG_INT_REGS) & 0x00ff) |
639 ((freq >> 5) & 0xfc00));
640 src_write(s, SRCREG_DAC2+SRCREG_VFREQ_FRAC, freq & 0x7fff);
641 r = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DADC));
642 outl(r, s->io + ES1371_REG_SRCONV);
643 spin_unlock_irqrestore(&s->lock, flags);
646 /* --------------------------------------------------------------------- */
648 static void __devinit src_init(struct es1371_state *s)
652 /* before we enable or disable the SRC we need
653 to wait for it to become ready */
656 outl(SRC_DIS, s->io + ES1371_REG_SRCONV);
658 for (i = 0; i < 0x80; i++)
661 src_write(s, SRCREG_DAC1+SRCREG_TRUNC_N, 16 << 4);
662 src_write(s, SRCREG_DAC1+SRCREG_INT_REGS, 16 << 10);
663 src_write(s, SRCREG_DAC2+SRCREG_TRUNC_N, 16 << 4);
664 src_write(s, SRCREG_DAC2+SRCREG_INT_REGS, 16 << 10);
665 src_write(s, SRCREG_VOL_ADC, 1 << 12);
666 src_write(s, SRCREG_VOL_ADC+1, 1 << 12);
667 src_write(s, SRCREG_VOL_DAC1, 1 << 12);
668 src_write(s, SRCREG_VOL_DAC1+1, 1 << 12);
669 src_write(s, SRCREG_VOL_DAC2, 1 << 12);
670 src_write(s, SRCREG_VOL_DAC2+1, 1 << 12);
671 set_adc_rate(s, 22050);
672 set_dac1_rate(s, 22050);
673 set_dac2_rate(s, 22050);
676 * enabling the sample rate converter without properly programming
677 * its parameters causes the chip to lock up (the SRC busy bit will
678 * be stuck high, and I've found no way to rectify this other than
682 outl(0, s->io+ES1371_REG_SRCONV);
685 /* --------------------------------------------------------------------- */
687 static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
689 struct es1371_state *s = (struct es1371_state *)codec->private_data;
693 spin_lock_irqsave(&s->lock, flags);
694 for (t = 0; t < POLL_COUNT; t++)
695 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
698 /* save the current state for later */
699 x = wait_src_ready(s);
701 /* enable SRC state data in SRC mux */
702 outl((x & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC)) | 0x00010000,
703 s->io+ES1371_REG_SRCONV);
705 /* wait for not busy (state 0) first to avoid
707 for (t=0; t<POLL_COUNT; t++){
708 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
713 /* wait for a SAFE time to write addr/data and then do it, dammit */
714 for (t=0; t<POLL_COUNT; t++){
715 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
720 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) |
721 ((data << CODEC_PODAT_SHIFT) & CODEC_PODAT_MASK), s->io+ES1371_REG_CODEC);
723 /* restore SRC reg */
725 outl(x, s->io+ES1371_REG_SRCONV);
726 spin_unlock_irqrestore(&s->lock, flags);
729 static u16 rdcodec(struct ac97_codec *codec, u8 addr)
731 struct es1371_state *s = (struct es1371_state *)codec->private_data;
735 spin_lock_irqsave(&s->lock, flags);
737 /* wait for WIP to go away */
738 for (t = 0; t < 0x1000; t++)
739 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
742 /* save the current state for later */
743 x = (wait_src_ready(s) & (SRC_DIS | SRC_DDAC1 | SRC_DDAC2 | SRC_DADC));
745 /* enable SRC state data in SRC mux */
746 outl( x | 0x00010000,
747 s->io+ES1371_REG_SRCONV);
749 /* wait for not busy (state 0) first to avoid
751 for (t=0; t<POLL_COUNT; t++){
752 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0 )
757 /* wait for a SAFE time to write addr/data and then do it, dammit */
758 for (t=0; t<POLL_COUNT; t++){
759 if((inl(s->io+ES1371_REG_SRCONV) & 0x00870000) ==0x00010000)
764 outl(((addr << CODEC_POADD_SHIFT) & CODEC_POADD_MASK) | CODEC_PORD, s->io+ES1371_REG_CODEC);
765 /* restore SRC reg */
767 outl(x, s->io+ES1371_REG_SRCONV);
769 /* wait for WIP again */
770 for (t = 0; t < 0x1000; t++)
771 if (!(inl(s->io+ES1371_REG_CODEC) & CODEC_WIP))
774 /* now wait for the stinkin' data (RDY) */
775 for (t = 0; t < POLL_COUNT; t++)
776 if ((x = inl(s->io+ES1371_REG_CODEC)) & CODEC_RDY)
779 spin_unlock_irqrestore(&s->lock, flags);
780 return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
783 /* --------------------------------------------------------------------- */
785 static inline void stop_adc(struct es1371_state *s)
789 spin_lock_irqsave(&s->lock, flags);
790 s->ctrl &= ~CTRL_ADC_EN;
791 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
792 spin_unlock_irqrestore(&s->lock, flags);
795 static inline void stop_dac1(struct es1371_state *s)
799 spin_lock_irqsave(&s->lock, flags);
800 s->ctrl &= ~CTRL_DAC1_EN;
801 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
802 spin_unlock_irqrestore(&s->lock, flags);
805 static inline void stop_dac2(struct es1371_state *s)
809 spin_lock_irqsave(&s->lock, flags);
810 s->ctrl &= ~CTRL_DAC2_EN;
811 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
812 spin_unlock_irqrestore(&s->lock, flags);
815 static void start_dac1(struct es1371_state *s)
818 unsigned fragremain, fshift;
820 spin_lock_irqsave(&s->lock, flags);
821 if (!(s->ctrl & CTRL_DAC1_EN) && (s->dma_dac1.mapped || s->dma_dac1.count > 0)
822 && s->dma_dac1.ready) {
823 s->ctrl |= CTRL_DAC1_EN;
824 s->sctrl = (s->sctrl & ~(SCTRL_P1LOOPSEL | SCTRL_P1PAUSE | SCTRL_P1SCTRLD)) | SCTRL_P1INTEN;
825 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
826 fragremain = ((- s->dma_dac1.hwptr) & (s->dma_dac1.fragsize-1));
827 fshift = sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
828 if (fragremain < 2*fshift)
829 fragremain = s->dma_dac1.fragsize;
830 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
831 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
832 outl((s->dma_dac1.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC1_SCOUNT);
834 spin_unlock_irqrestore(&s->lock, flags);
837 static void start_dac2(struct es1371_state *s)
840 unsigned fragremain, fshift;
842 spin_lock_irqsave(&s->lock, flags);
843 if (!(s->ctrl & CTRL_DAC2_EN) && (s->dma_dac2.mapped || s->dma_dac2.count > 0)
844 && s->dma_dac2.ready) {
845 s->ctrl |= CTRL_DAC2_EN;
846 s->sctrl = (s->sctrl & ~(SCTRL_P2LOOPSEL | SCTRL_P2PAUSE | SCTRL_P2DACSEN |
847 SCTRL_P2ENDINC | SCTRL_P2STINC)) | SCTRL_P2INTEN |
848 (((s->sctrl & SCTRL_P2FMT) ? 2 : 1) << SCTRL_SH_P2ENDINC) |
849 (0 << SCTRL_SH_P2STINC);
850 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
851 fragremain = ((- s->dma_dac2.hwptr) & (s->dma_dac2.fragsize-1));
852 fshift = sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
853 if (fragremain < 2*fshift)
854 fragremain = s->dma_dac2.fragsize;
855 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
856 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
857 outl((s->dma_dac2.fragsize >> fshift) - 1, s->io+ES1371_REG_DAC2_SCOUNT);
859 spin_unlock_irqrestore(&s->lock, flags);
862 static void start_adc(struct es1371_state *s)
865 unsigned fragremain, fshift;
867 spin_lock_irqsave(&s->lock, flags);
868 if (!(s->ctrl & CTRL_ADC_EN) && (s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
869 && s->dma_adc.ready) {
870 s->ctrl |= CTRL_ADC_EN;
871 s->sctrl = (s->sctrl & ~SCTRL_R1LOOPSEL) | SCTRL_R1INTEN;
872 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
873 fragremain = ((- s->dma_adc.hwptr) & (s->dma_adc.fragsize-1));
874 fshift = sample_shift[(s->sctrl & SCTRL_R1FMT) >> SCTRL_SH_R1FMT];
875 if (fragremain < 2*fshift)
876 fragremain = s->dma_adc.fragsize;
877 outl((fragremain >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
878 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
879 outl((s->dma_adc.fragsize >> fshift) - 1, s->io+ES1371_REG_ADC_SCOUNT);
881 spin_unlock_irqrestore(&s->lock, flags);
884 /* --------------------------------------------------------------------- */
886 #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
887 #define DMABUF_MINORDER 1
890 static inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db)
892 struct page *page, *pend;
895 /* undo marking the pages as reserved */
896 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
897 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
898 ClearPageReserved(page);
899 pci_free_consistent(s->dev, PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
902 db->mapped = db->ready = 0;
905 static int prog_dmabuf(struct es1371_state *s, struct dmabuf *db, unsigned rate, unsigned fmt, unsigned reg)
910 struct page *page, *pend;
912 db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
914 db->ready = db->mapped = 0;
915 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
916 if ((db->rawbuf = pci_alloc_consistent(s->dev, PAGE_SIZE << order, &db->dmaaddr)))
920 db->buforder = order;
921 /* now mark the pages as reserved; otherwise remap_pfn_range doesn't do what we want */
922 pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
923 for (page = virt_to_page(db->rawbuf); page <= pend; page++)
924 SetPageReserved(page);
926 fmt &= ES1371_FMT_MASK;
927 bytepersec = rate << sample_shift[fmt];
928 bufs = PAGE_SIZE << db->buforder;
929 if (db->ossfragshift) {
930 if ((1000 << db->ossfragshift) < bytepersec)
931 db->fragshift = ld2(bytepersec/1000);
933 db->fragshift = db->ossfragshift;
935 db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
936 if (db->fragshift < 3)
939 db->numfrag = bufs >> db->fragshift;
940 while (db->numfrag < 4 && db->fragshift > 3) {
942 db->numfrag = bufs >> db->fragshift;
944 db->fragsize = 1 << db->fragshift;
945 if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
946 db->numfrag = db->ossmaxfrags;
947 db->fragsamples = db->fragsize >> sample_shift[fmt];
948 db->dmasize = db->numfrag << db->fragshift;
949 memset(db->rawbuf, (fmt & ES1371_FMT_S16) ? 0 : 0x80, db->dmasize);
950 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
951 outl(db->dmaaddr, s->io+(reg & 0xff));
952 outl((db->dmasize >> 2)-1, s->io+((reg + 4) & 0xff));
958 static inline int prog_dmabuf_adc(struct es1371_state *s)
961 return prog_dmabuf(s, &s->dma_adc, s->adcrate, (s->sctrl >> SCTRL_SH_R1FMT) & ES1371_FMT_MASK,
962 ES1371_REG_ADC_FRAMEADR);
965 static inline int prog_dmabuf_dac2(struct es1371_state *s)
968 return prog_dmabuf(s, &s->dma_dac2, s->dac2rate, (s->sctrl >> SCTRL_SH_P2FMT) & ES1371_FMT_MASK,
969 ES1371_REG_DAC2_FRAMEADR);
972 static inline int prog_dmabuf_dac1(struct es1371_state *s)
975 return prog_dmabuf(s, &s->dma_dac1, s->dac1rate, (s->sctrl >> SCTRL_SH_P1FMT) & ES1371_FMT_MASK,
976 ES1371_REG_DAC1_FRAMEADR);
979 static inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg)
981 unsigned hwptr, diff;
983 outl((reg >> 8) & 15, s->io+ES1371_REG_MEMPAGE);
984 hwptr = (inl(s->io+(reg & 0xff)) >> 14) & 0x3fffc;
985 diff = (db->dmasize + hwptr - db->hwptr) % db->dmasize;
990 static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c)
992 if (bptr + len > bsize) {
993 unsigned x = bsize - bptr;
994 memset(((char *)buf) + bptr, c, x);
998 memset(((char *)buf) + bptr, c, len);
1001 /* call with spinlock held! */
1002 static void es1371_update_ptr(struct es1371_state *s)
1006 /* update ADC pointer */
1007 if (s->ctrl & CTRL_ADC_EN) {
1008 diff = get_hwptr(s, &s->dma_adc, ES1371_REG_ADC_FRAMECNT);
1009 s->dma_adc.total_bytes += diff;
1010 s->dma_adc.count += diff;
1011 if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
1012 wake_up(&s->dma_adc.wait);
1013 if (!s->dma_adc.mapped) {
1014 if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
1015 s->ctrl &= ~CTRL_ADC_EN;
1016 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1021 /* update DAC1 pointer */
1022 if (s->ctrl & CTRL_DAC1_EN) {
1023 diff = get_hwptr(s, &s->dma_dac1, ES1371_REG_DAC1_FRAMECNT);
1024 s->dma_dac1.total_bytes += diff;
1025 if (s->dma_dac1.mapped) {
1026 s->dma_dac1.count += diff;
1027 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
1028 wake_up(&s->dma_dac1.wait);
1030 s->dma_dac1.count -= diff;
1031 if (s->dma_dac1.count <= 0) {
1032 s->ctrl &= ~CTRL_DAC1_EN;
1033 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1034 s->dma_dac1.error++;
1035 } else if (s->dma_dac1.count <= (signed)s->dma_dac1.fragsize && !s->dma_dac1.endcleared) {
1036 clear_advance(s->dma_dac1.rawbuf, s->dma_dac1.dmasize, s->dma_dac1.swptr,
1037 s->dma_dac1.fragsize, (s->sctrl & SCTRL_P1SEB) ? 0 : 0x80);
1038 s->dma_dac1.endcleared = 1;
1040 if (s->dma_dac1.count + (signed)s->dma_dac1.fragsize <= (signed)s->dma_dac1.dmasize)
1041 wake_up(&s->dma_dac1.wait);
1044 /* update DAC2 pointer */
1045 if (s->ctrl & CTRL_DAC2_EN) {
1046 diff = get_hwptr(s, &s->dma_dac2, ES1371_REG_DAC2_FRAMECNT);
1047 s->dma_dac2.total_bytes += diff;
1048 if (s->dma_dac2.mapped) {
1049 s->dma_dac2.count += diff;
1050 if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
1051 wake_up(&s->dma_dac2.wait);
1053 s->dma_dac2.count -= diff;
1054 if (s->dma_dac2.count <= 0) {
1055 s->ctrl &= ~CTRL_DAC2_EN;
1056 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
1057 s->dma_dac2.error++;
1058 } else if (s->dma_dac2.count <= (signed)s->dma_dac2.fragsize && !s->dma_dac2.endcleared) {
1059 clear_advance(s->dma_dac2.rawbuf, s->dma_dac2.dmasize, s->dma_dac2.swptr,
1060 s->dma_dac2.fragsize, (s->sctrl & SCTRL_P2SEB) ? 0 : 0x80);
1061 s->dma_dac2.endcleared = 1;
1063 if (s->dma_dac2.count + (signed)s->dma_dac2.fragsize <= (signed)s->dma_dac2.dmasize)
1064 wake_up(&s->dma_dac2.wait);
1069 /* hold spinlock for the following! */
1070 static void es1371_handle_midi(struct es1371_state *s)
1075 if (!(s->ctrl & CTRL_UART_EN))
1078 while (inb(s->io+ES1371_REG_UART_STATUS) & USTAT_RXRDY) {
1079 ch = inb(s->io+ES1371_REG_UART_DATA);
1080 if (s->midi.icnt < MIDIINBUF) {
1081 s->midi.ibuf[s->midi.iwr] = ch;
1082 s->midi.iwr = (s->midi.iwr + 1) % MIDIINBUF;
1088 wake_up(&s->midi.iwait);
1090 while ((inb(s->io+ES1371_REG_UART_STATUS) & USTAT_TXRDY) && s->midi.ocnt > 0) {
1091 outb(s->midi.obuf[s->midi.ord], s->io+ES1371_REG_UART_DATA);
1092 s->midi.ord = (s->midi.ord + 1) % MIDIOUTBUF;
1094 if (s->midi.ocnt < MIDIOUTBUF-16)
1098 wake_up(&s->midi.owait);
1099 outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL);
1102 static irqreturn_t es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1104 struct es1371_state *s = (struct es1371_state *)dev_id;
1105 unsigned int intsrc, sctl;
1107 /* fastpath out, to ease interrupt sharing */
1108 intsrc = inl(s->io+ES1371_REG_STATUS);
1109 if (!(intsrc & 0x80000000))
1111 spin_lock(&s->lock);
1112 /* clear audio interrupts first */
1114 if (intsrc & STAT_ADC)
1115 sctl &= ~SCTRL_R1INTEN;
1116 if (intsrc & STAT_DAC1)
1117 sctl &= ~SCTRL_P1INTEN;
1118 if (intsrc & STAT_DAC2)
1119 sctl &= ~SCTRL_P2INTEN;
1120 outl(sctl, s->io+ES1371_REG_SERIAL_CONTROL);
1121 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1122 es1371_update_ptr(s);
1123 es1371_handle_midi(s);
1124 spin_unlock(&s->lock);
1128 /* --------------------------------------------------------------------- */
1130 static const char invalid_magic[] = KERN_CRIT PFX "invalid magic value\n";
1132 #define VALIDATE_STATE(s) \
1134 if (!(s) || (s)->magic != ES1371_MAGIC) { \
1135 printk(invalid_magic); \
1140 /* --------------------------------------------------------------------- */
1142 /* Conversion table for S/PDIF PCM volume emulation through the SRC */
1143 /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */
1144 static const unsigned short DACVolTable[101] =
1146 0x1000, 0x0f2a, 0x0e60, 0x0da0, 0x0cea, 0x0c3e, 0x0b9a, 0x0aff,
1147 0x0a6d, 0x09e1, 0x095e, 0x08e1, 0x086a, 0x07fa, 0x078f, 0x072a,
1148 0x06cb, 0x0670, 0x061a, 0x05c9, 0x057b, 0x0532, 0x04ed, 0x04ab,
1149 0x046d, 0x0432, 0x03fa, 0x03c5, 0x0392, 0x0363, 0x0335, 0x030b,
1150 0x02e2, 0x02bc, 0x0297, 0x0275, 0x0254, 0x0235, 0x0217, 0x01fb,
1151 0x01e1, 0x01c8, 0x01b0, 0x0199, 0x0184, 0x0170, 0x015d, 0x014b,
1152 0x0139, 0x0129, 0x0119, 0x010b, 0x00fd, 0x00f0, 0x00e3, 0x00d7,
1153 0x00cc, 0x00c1, 0x00b7, 0x00ae, 0x00a5, 0x009c, 0x0094, 0x008c,
1154 0x0085, 0x007e, 0x0077, 0x0071, 0x006b, 0x0066, 0x0060, 0x005b,
1155 0x0057, 0x0052, 0x004e, 0x004a, 0x0046, 0x0042, 0x003f, 0x003c,
1156 0x0038, 0x0036, 0x0033, 0x0030, 0x002e, 0x002b, 0x0029, 0x0027,
1157 0x0025, 0x0023, 0x0021, 0x001f, 0x001e, 0x001c, 0x001b, 0x0019,
1158 0x0018, 0x0017, 0x0016, 0x0014, 0x0000
1162 * when we are in S/PDIF mode, we want to disable any analog output so
1163 * we filter the mixer ioctls
1165 static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg)
1167 struct es1371_state *s = (struct es1371_state *)codec->private_data;
1169 unsigned long flags;
1170 unsigned int left, right;
1173 /* filter mixer ioctls to catch PCM and MASTER volume when in S/PDIF mode */
1174 if (s->spdif_volume == -1)
1175 return codec->mixer_ioctl(codec, cmd, arg);
1177 case SOUND_MIXER_WRITE_VOLUME:
1180 case SOUND_MIXER_WRITE_PCM: /* use SRC for PCM volume */
1181 if (get_user(val, (int __user *)arg))
1183 right = ((val >> 8) & 0xff);
1184 left = (val & 0xff);
1189 s->spdif_volume = (right << 8) | left;
1190 spin_lock_irqsave(&s->lock, flags);
1191 src_write(s, SRCREG_VOL_DAC2, DACVolTable[100 - left]);
1192 src_write(s, SRCREG_VOL_DAC2+1, DACVolTable[100 - right]);
1193 spin_unlock_irqrestore(&s->lock, flags);
1196 case SOUND_MIXER_READ_PCM:
1197 return put_user(s->spdif_volume, (int __user *)arg);
1199 return codec->mixer_ioctl(codec, cmd, arg);
1202 /* --------------------------------------------------------------------- */
1205 * AC97 Mixer Register to Connections mapping of the Concert 97 board
1207 * AC97_MASTER_VOL_STEREO Line Out
1208 * AC97_MASTER_VOL_MONO TAD Output
1209 * AC97_PCBEEP_VOL none
1210 * AC97_PHONE_VOL TAD Input (mono)
1211 * AC97_MIC_VOL MIC Input (mono)
1212 * AC97_LINEIN_VOL Line Input (stereo)
1213 * AC97_CD_VOL CD Input (stereo)
1214 * AC97_VIDEO_VOL none
1215 * AC97_AUX_VOL Aux Input (stereo)
1216 * AC97_PCMOUT_VOL Wave Output (stereo)
1219 static int es1371_open_mixdev(struct inode *inode, struct file *file)
1221 int minor = iminor(inode);
1222 struct list_head *list;
1223 struct es1371_state *s;
1225 for (list = devs.next; ; list = list->next) {
1228 s = list_entry(list, struct es1371_state, devs);
1229 if (s->codec->dev_mixer == minor)
1233 file->private_data = s;
1234 return nonseekable_open(inode, file);
1237 static int es1371_release_mixdev(struct inode *inode, struct file *file)
1239 struct es1371_state *s = (struct es1371_state *)file->private_data;
1245 static int es1371_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1247 struct es1371_state *s = (struct es1371_state *)file->private_data;
1248 struct ac97_codec *codec = s->codec;
1250 return mixdev_ioctl(codec, cmd, arg);
1253 static /*const*/ struct file_operations es1371_mixer_fops = {
1254 .owner = THIS_MODULE,
1255 .llseek = no_llseek,
1256 .ioctl = es1371_ioctl_mixdev,
1257 .open = es1371_open_mixdev,
1258 .release = es1371_release_mixdev,
1261 /* --------------------------------------------------------------------- */
1263 static int drain_dac1(struct es1371_state *s, int nonblock)
1265 DECLARE_WAITQUEUE(wait, current);
1266 unsigned long flags;
1269 if (s->dma_dac1.mapped || !s->dma_dac1.ready)
1271 add_wait_queue(&s->dma_dac1.wait, &wait);
1273 __set_current_state(TASK_INTERRUPTIBLE);
1274 spin_lock_irqsave(&s->lock, flags);
1275 count = s->dma_dac1.count;
1276 spin_unlock_irqrestore(&s->lock, flags);
1279 if (signal_pending(current))
1282 remove_wait_queue(&s->dma_dac1.wait, &wait);
1283 set_current_state(TASK_RUNNING);
1286 tmo = 3 * HZ * (count + s->dma_dac1.fragsize) / 2 / s->dac1rate;
1287 tmo >>= sample_shift[(s->sctrl & SCTRL_P1FMT) >> SCTRL_SH_P1FMT];
1288 if (!schedule_timeout(tmo + 1))
1289 DBG(printk(KERN_DEBUG PFX "dac1 dma timed out??\n");)
1291 remove_wait_queue(&s->dma_dac1.wait, &wait);
1292 set_current_state(TASK_RUNNING);
1293 if (signal_pending(current))
1294 return -ERESTARTSYS;
1298 static int drain_dac2(struct es1371_state *s, int nonblock)
1300 DECLARE_WAITQUEUE(wait, current);
1301 unsigned long flags;
1304 if (s->dma_dac2.mapped || !s->dma_dac2.ready)
1306 add_wait_queue(&s->dma_dac2.wait, &wait);
1308 __set_current_state(TASK_UNINTERRUPTIBLE);
1309 spin_lock_irqsave(&s->lock, flags);
1310 count = s->dma_dac2.count;
1311 spin_unlock_irqrestore(&s->lock, flags);
1314 if (signal_pending(current))
1317 remove_wait_queue(&s->dma_dac2.wait, &wait);
1318 set_current_state(TASK_RUNNING);
1321 tmo = 3 * HZ * (count + s->dma_dac2.fragsize) / 2 / s->dac2rate;
1322 tmo >>= sample_shift[(s->sctrl & SCTRL_P2FMT) >> SCTRL_SH_P2FMT];
1323 if (!schedule_timeout(tmo + 1))
1324 DBG(printk(KERN_DEBUG PFX "dac2 dma timed out??\n");)
1326 remove_wait_queue(&s->dma_dac2.wait, &wait);
1327 set_current_state(TASK_RUNNING);
1328 if (signal_pending(current))
1329 return -ERESTARTSYS;
1333 /* --------------------------------------------------------------------- */
1335 static ssize_t es1371_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
1337 struct es1371_state *s = (struct es1371_state *)file->private_data;
1338 DECLARE_WAITQUEUE(wait, current);
1340 unsigned long flags;
1345 if (s->dma_adc.mapped)
1347 if (!access_ok(VERIFY_WRITE, buffer, count))
1350 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1353 add_wait_queue(&s->dma_adc.wait, &wait);
1355 spin_lock_irqsave(&s->lock, flags);
1356 swptr = s->dma_adc.swptr;
1357 cnt = s->dma_adc.dmasize-swptr;
1358 if (s->dma_adc.count < cnt)
1359 cnt = s->dma_adc.count;
1361 __set_current_state(TASK_INTERRUPTIBLE);
1362 spin_unlock_irqrestore(&s->lock, flags);
1366 if (s->dma_adc.enabled)
1368 if (file->f_flags & O_NONBLOCK) {
1375 if (signal_pending(current)) {
1381 if (s->dma_adc.mapped)
1388 if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
1393 swptr = (swptr + cnt) % s->dma_adc.dmasize;
1394 spin_lock_irqsave(&s->lock, flags);
1395 s->dma_adc.swptr = swptr;
1396 s->dma_adc.count -= cnt;
1397 spin_unlock_irqrestore(&s->lock, flags);
1401 if (s->dma_adc.enabled)
1407 remove_wait_queue(&s->dma_adc.wait, &wait);
1408 set_current_state(TASK_RUNNING);
1412 static ssize_t es1371_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
1414 struct es1371_state *s = (struct es1371_state *)file->private_data;
1415 DECLARE_WAITQUEUE(wait, current);
1417 unsigned long flags;
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_pfn_range(vma, vma->vm_start,
1567 virt_to_phys(db->rawbuf) >> PAGE_SHIFT,
1568 size, vma->vm_page_prot)) {
1579 static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1581 struct es1371_state *s = (struct es1371_state *)file->private_data;
1582 unsigned long flags;
1583 audio_buf_info abinfo;
1586 int val, mapped, ret;
1587 void __user *argp = (void __user *)arg;
1588 int __user *p = argp;
1591 mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac2.mapped) ||
1592 ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
1594 case OSS_GETVERSION:
1595 return put_user(SOUND_VERSION, p);
1597 case SNDCTL_DSP_SYNC:
1598 if (file->f_mode & FMODE_WRITE)
1599 return drain_dac2(s, 0/*file->f_flags & O_NONBLOCK*/);
1602 case SNDCTL_DSP_SETDUPLEX:
1605 case SNDCTL_DSP_GETCAPS:
1606 return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, p);
1608 case SNDCTL_DSP_RESET:
1609 if (file->f_mode & FMODE_WRITE) {
1611 synchronize_irq(s->irq);
1612 s->dma_dac2.swptr = s->dma_dac2.hwptr = s->dma_dac2.count = s->dma_dac2.total_bytes = 0;
1614 if (file->f_mode & FMODE_READ) {
1616 synchronize_irq(s->irq);
1617 s->dma_adc.swptr = s->dma_adc.hwptr = s->dma_adc.count = s->dma_adc.total_bytes = 0;
1621 case SNDCTL_DSP_SPEED:
1622 if (get_user(val, p))
1625 if (file->f_mode & FMODE_READ) {
1627 s->dma_adc.ready = 0;
1628 set_adc_rate(s, val);
1630 if (file->f_mode & FMODE_WRITE) {
1632 s->dma_dac2.ready = 0;
1633 set_dac2_rate(s, val);
1636 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, p);
1638 case SNDCTL_DSP_STEREO:
1639 if (get_user(val, p))
1641 if (file->f_mode & FMODE_READ) {
1643 s->dma_adc.ready = 0;
1644 spin_lock_irqsave(&s->lock, flags);
1646 s->sctrl |= SCTRL_R1SMB;
1648 s->sctrl &= ~SCTRL_R1SMB;
1649 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1650 spin_unlock_irqrestore(&s->lock, flags);
1652 if (file->f_mode & FMODE_WRITE) {
1654 s->dma_dac2.ready = 0;
1655 spin_lock_irqsave(&s->lock, flags);
1657 s->sctrl |= SCTRL_P2SMB;
1659 s->sctrl &= ~SCTRL_P2SMB;
1660 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1661 spin_unlock_irqrestore(&s->lock, flags);
1665 case SNDCTL_DSP_CHANNELS:
1666 if (get_user(val, p))
1669 if (file->f_mode & FMODE_READ) {
1671 s->dma_adc.ready = 0;
1672 spin_lock_irqsave(&s->lock, flags);
1674 s->sctrl |= SCTRL_R1SMB;
1676 s->sctrl &= ~SCTRL_R1SMB;
1677 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1678 spin_unlock_irqrestore(&s->lock, flags);
1680 if (file->f_mode & FMODE_WRITE) {
1682 s->dma_dac2.ready = 0;
1683 spin_lock_irqsave(&s->lock, flags);
1685 s->sctrl |= SCTRL_P2SMB;
1687 s->sctrl &= ~SCTRL_P2SMB;
1688 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1689 spin_unlock_irqrestore(&s->lock, flags);
1692 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, p);
1694 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
1695 return put_user(AFMT_S16_LE|AFMT_U8, p);
1697 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
1698 if (get_user(val, p))
1700 if (val != AFMT_QUERY) {
1701 if (file->f_mode & FMODE_READ) {
1703 s->dma_adc.ready = 0;
1704 spin_lock_irqsave(&s->lock, flags);
1705 if (val == AFMT_S16_LE)
1706 s->sctrl |= SCTRL_R1SEB;
1708 s->sctrl &= ~SCTRL_R1SEB;
1709 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1710 spin_unlock_irqrestore(&s->lock, flags);
1712 if (file->f_mode & FMODE_WRITE) {
1714 s->dma_dac2.ready = 0;
1715 spin_lock_irqsave(&s->lock, flags);
1716 if (val == AFMT_S16_LE)
1717 s->sctrl |= SCTRL_P2SEB;
1719 s->sctrl &= ~SCTRL_P2SEB;
1720 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1721 spin_unlock_irqrestore(&s->lock, flags);
1724 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ?
1725 AFMT_S16_LE : AFMT_U8, p);
1727 case SNDCTL_DSP_POST:
1730 case SNDCTL_DSP_GETTRIGGER:
1732 if (file->f_mode & FMODE_READ && s->ctrl & CTRL_ADC_EN)
1733 val |= PCM_ENABLE_INPUT;
1734 if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN)
1735 val |= PCM_ENABLE_OUTPUT;
1736 return put_user(val, p);
1738 case SNDCTL_DSP_SETTRIGGER:
1739 if (get_user(val, p))
1741 if (file->f_mode & FMODE_READ) {
1742 if (val & PCM_ENABLE_INPUT) {
1743 if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s)))
1745 s->dma_adc.enabled = 1;
1748 s->dma_adc.enabled = 0;
1752 if (file->f_mode & FMODE_WRITE) {
1753 if (val & PCM_ENABLE_OUTPUT) {
1754 if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s)))
1756 s->dma_dac2.enabled = 1;
1759 s->dma_dac2.enabled = 0;
1765 case SNDCTL_DSP_GETOSPACE:
1766 if (!(file->f_mode & FMODE_WRITE))
1768 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1770 spin_lock_irqsave(&s->lock, flags);
1771 es1371_update_ptr(s);
1772 abinfo.fragsize = s->dma_dac2.fragsize;
1773 count = s->dma_dac2.count;
1776 abinfo.bytes = s->dma_dac2.dmasize - count;
1777 abinfo.fragstotal = s->dma_dac2.numfrag;
1778 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;
1779 spin_unlock_irqrestore(&s->lock, flags);
1780 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1782 case SNDCTL_DSP_GETISPACE:
1783 if (!(file->f_mode & FMODE_READ))
1785 if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
1787 spin_lock_irqsave(&s->lock, flags);
1788 es1371_update_ptr(s);
1789 abinfo.fragsize = s->dma_adc.fragsize;
1790 count = s->dma_adc.count;
1793 abinfo.bytes = count;
1794 abinfo.fragstotal = s->dma_adc.numfrag;
1795 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;
1796 spin_unlock_irqrestore(&s->lock, flags);
1797 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
1799 case SNDCTL_DSP_NONBLOCK:
1800 file->f_flags |= O_NONBLOCK;
1803 case SNDCTL_DSP_GETODELAY:
1804 if (!(file->f_mode & FMODE_WRITE))
1806 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1808 spin_lock_irqsave(&s->lock, flags);
1809 es1371_update_ptr(s);
1810 count = s->dma_dac2.count;
1811 spin_unlock_irqrestore(&s->lock, flags);
1814 return put_user(count, p);
1816 case SNDCTL_DSP_GETIPTR:
1817 if (!(file->f_mode & FMODE_READ))
1819 if (!s->dma_adc.ready && (val = prog_dmabuf_adc(s)) != 0)
1821 spin_lock_irqsave(&s->lock, flags);
1822 es1371_update_ptr(s);
1823 cinfo.bytes = s->dma_adc.total_bytes;
1824 count = s->dma_adc.count;
1827 cinfo.blocks = count >> s->dma_adc.fragshift;
1828 cinfo.ptr = s->dma_adc.hwptr;
1829 if (s->dma_adc.mapped)
1830 s->dma_adc.count &= s->dma_adc.fragsize-1;
1831 spin_unlock_irqrestore(&s->lock, flags);
1832 if (copy_to_user(argp, &cinfo, sizeof(cinfo)))
1836 case SNDCTL_DSP_GETOPTR:
1837 if (!(file->f_mode & FMODE_WRITE))
1839 if (!s->dma_dac2.ready && (val = prog_dmabuf_dac2(s)) != 0)
1841 spin_lock_irqsave(&s->lock, flags);
1842 es1371_update_ptr(s);
1843 cinfo.bytes = s->dma_dac2.total_bytes;
1844 count = s->dma_dac2.count;
1847 cinfo.blocks = count >> s->dma_dac2.fragshift;
1848 cinfo.ptr = s->dma_dac2.hwptr;
1849 if (s->dma_dac2.mapped)
1850 s->dma_dac2.count &= s->dma_dac2.fragsize-1;
1851 spin_unlock_irqrestore(&s->lock, flags);
1852 if (copy_to_user(argp, &cinfo, sizeof(cinfo)))
1856 case SNDCTL_DSP_GETBLKSIZE:
1857 if (file->f_mode & FMODE_WRITE) {
1858 if ((val = prog_dmabuf_dac2(s)))
1860 return put_user(s->dma_dac2.fragsize, p);
1862 if ((val = prog_dmabuf_adc(s)))
1864 return put_user(s->dma_adc.fragsize, p);
1866 case SNDCTL_DSP_SETFRAGMENT:
1867 if (get_user(val, p))
1869 if (file->f_mode & FMODE_READ) {
1870 s->dma_adc.ossfragshift = val & 0xffff;
1871 s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
1872 if (s->dma_adc.ossfragshift < 4)
1873 s->dma_adc.ossfragshift = 4;
1874 if (s->dma_adc.ossfragshift > 15)
1875 s->dma_adc.ossfragshift = 15;
1876 if (s->dma_adc.ossmaxfrags < 4)
1877 s->dma_adc.ossmaxfrags = 4;
1879 if (file->f_mode & FMODE_WRITE) {
1880 s->dma_dac2.ossfragshift = val & 0xffff;
1881 s->dma_dac2.ossmaxfrags = (val >> 16) & 0xffff;
1882 if (s->dma_dac2.ossfragshift < 4)
1883 s->dma_dac2.ossfragshift = 4;
1884 if (s->dma_dac2.ossfragshift > 15)
1885 s->dma_dac2.ossfragshift = 15;
1886 if (s->dma_dac2.ossmaxfrags < 4)
1887 s->dma_dac2.ossmaxfrags = 4;
1891 case SNDCTL_DSP_SUBDIVIDE:
1892 if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
1893 (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
1895 if (get_user(val, p))
1897 if (val != 1 && val != 2 && val != 4)
1899 if (file->f_mode & FMODE_READ)
1900 s->dma_adc.subdivision = val;
1901 if (file->f_mode & FMODE_WRITE)
1902 s->dma_dac2.subdivision = val;
1905 case SOUND_PCM_READ_RATE:
1906 return put_user((file->f_mode & FMODE_READ) ? s->adcrate : s->dac2rate, p);
1908 case SOUND_PCM_READ_CHANNELS:
1909 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SMB : SCTRL_P2SMB)) ? 2 : 1, p);
1911 case SOUND_PCM_READ_BITS:
1912 return put_user((s->sctrl & ((file->f_mode & FMODE_READ) ? SCTRL_R1SEB : SCTRL_P2SEB)) ? 16 : 8, p);
1914 case SOUND_PCM_WRITE_FILTER:
1915 case SNDCTL_DSP_SETSYNCRO:
1916 case SOUND_PCM_READ_FILTER:
1920 return mixdev_ioctl(s->codec, cmd, arg);
1923 static int es1371_open(struct inode *inode, struct file *file)
1925 int minor = iminor(inode);
1926 DECLARE_WAITQUEUE(wait, current);
1927 unsigned long flags;
1928 struct list_head *list;
1929 struct es1371_state *s;
1931 for (list = devs.next; ; list = list->next) {
1934 s = list_entry(list, struct es1371_state, devs);
1935 if (!((s->dev_audio ^ minor) & ~0xf))
1939 file->private_data = s;
1940 /* wait for device to become free */
1942 while (s->open_mode & file->f_mode) {
1943 if (file->f_flags & O_NONBLOCK) {
1947 add_wait_queue(&s->open_wait, &wait);
1948 __set_current_state(TASK_INTERRUPTIBLE);
1951 remove_wait_queue(&s->open_wait, &wait);
1952 set_current_state(TASK_RUNNING);
1953 if (signal_pending(current))
1954 return -ERESTARTSYS;
1957 if (file->f_mode & FMODE_READ) {
1958 s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
1959 s->dma_adc.enabled = 1;
1960 set_adc_rate(s, 8000);
1962 if (file->f_mode & FMODE_WRITE) {
1963 s->dma_dac2.ossfragshift = s->dma_dac2.ossmaxfrags = s->dma_dac2.subdivision = 0;
1964 s->dma_dac2.enabled = 1;
1965 set_dac2_rate(s, 8000);
1967 spin_lock_irqsave(&s->lock, flags);
1968 if (file->f_mode & FMODE_READ) {
1969 s->sctrl &= ~SCTRL_R1FMT;
1970 if ((minor & 0xf) == SND_DEV_DSP16)
1971 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_R1FMT;
1973 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_R1FMT;
1975 if (file->f_mode & FMODE_WRITE) {
1976 s->sctrl &= ~SCTRL_P2FMT;
1977 if ((minor & 0xf) == SND_DEV_DSP16)
1978 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P2FMT;
1980 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P2FMT;
1982 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
1983 spin_unlock_irqrestore(&s->lock, flags);
1984 s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
1986 init_MUTEX(&s->sem);
1987 return nonseekable_open(inode, file);
1990 static int es1371_release(struct inode *inode, struct file *file)
1992 struct es1371_state *s = (struct es1371_state *)file->private_data;
1996 if (file->f_mode & FMODE_WRITE)
1997 drain_dac2(s, file->f_flags & O_NONBLOCK);
1999 if (file->f_mode & FMODE_WRITE) {
2001 dealloc_dmabuf(s, &s->dma_dac2);
2003 if (file->f_mode & FMODE_READ) {
2005 dealloc_dmabuf(s, &s->dma_adc);
2007 s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
2009 wake_up(&s->open_wait);
2014 static /*const*/ struct file_operations es1371_audio_fops = {
2015 .owner = THIS_MODULE,
2016 .llseek = no_llseek,
2017 .read = es1371_read,
2018 .write = es1371_write,
2019 .poll = es1371_poll,
2020 .ioctl = es1371_ioctl,
2021 .mmap = es1371_mmap,
2022 .open = es1371_open,
2023 .release = es1371_release,
2026 /* --------------------------------------------------------------------- */
2028 static ssize_t es1371_write_dac(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
2030 struct es1371_state *s = (struct es1371_state *)file->private_data;
2031 DECLARE_WAITQUEUE(wait, current);
2033 unsigned long flags;
2038 if (s->dma_dac1.mapped)
2040 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
2042 if (!access_ok(VERIFY_READ, buffer, count))
2044 add_wait_queue(&s->dma_dac1.wait, &wait);
2046 spin_lock_irqsave(&s->lock, flags);
2047 if (s->dma_dac1.count < 0) {
2048 s->dma_dac1.count = 0;
2049 s->dma_dac1.swptr = s->dma_dac1.hwptr;
2051 swptr = s->dma_dac1.swptr;
2052 cnt = s->dma_dac1.dmasize-swptr;
2053 if (s->dma_dac1.count + cnt > s->dma_dac1.dmasize)
2054 cnt = s->dma_dac1.dmasize - s->dma_dac1.count;
2056 __set_current_state(TASK_INTERRUPTIBLE);
2057 spin_unlock_irqrestore(&s->lock, flags);
2061 if (s->dma_dac1.enabled)
2063 if (file->f_flags & O_NONBLOCK) {
2069 if (signal_pending(current)) {
2076 if (copy_from_user(s->dma_dac1.rawbuf + swptr, buffer, cnt)) {
2081 swptr = (swptr + cnt) % s->dma_dac1.dmasize;
2082 spin_lock_irqsave(&s->lock, flags);
2083 s->dma_dac1.swptr = swptr;
2084 s->dma_dac1.count += cnt;
2085 s->dma_dac1.endcleared = 0;
2086 spin_unlock_irqrestore(&s->lock, flags);
2090 if (s->dma_dac1.enabled)
2093 remove_wait_queue(&s->dma_dac1.wait, &wait);
2094 set_current_state(TASK_RUNNING);
2098 /* No kernel lock - we have our own spinlock */
2099 static unsigned int es1371_poll_dac(struct file *file, struct poll_table_struct *wait)
2101 struct es1371_state *s = (struct es1371_state *)file->private_data;
2102 unsigned long flags;
2103 unsigned int mask = 0;
2106 if (!s->dma_dac1.ready && prog_dmabuf_dac1(s))
2108 poll_wait(file, &s->dma_dac1.wait, wait);
2109 spin_lock_irqsave(&s->lock, flags);
2110 es1371_update_ptr(s);
2111 if (s->dma_dac1.mapped) {
2112 if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
2113 mask |= POLLOUT | POLLWRNORM;
2115 if ((signed)s->dma_dac1.dmasize >= s->dma_dac1.count + (signed)s->dma_dac1.fragsize)
2116 mask |= POLLOUT | POLLWRNORM;
2118 spin_unlock_irqrestore(&s->lock, flags);
2122 static int es1371_mmap_dac(struct file *file, struct vm_area_struct *vma)
2124 struct es1371_state *s = (struct es1371_state *)file->private_data;
2129 if (!(vma->vm_flags & VM_WRITE))
2132 if ((ret = prog_dmabuf_dac1(s)) != 0)
2135 if (vma->vm_pgoff != 0)
2137 size = vma->vm_end - vma->vm_start;
2138 if (size > (PAGE_SIZE << s->dma_dac1.buforder))
2141 if (remap_pfn_range(vma, vma->vm_start,
2142 virt_to_phys(s->dma_dac1.rawbuf) >> PAGE_SHIFT,
2143 size, vma->vm_page_prot))
2145 s->dma_dac1.mapped = 1;
2152 static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
2154 struct es1371_state *s = (struct es1371_state *)file->private_data;
2155 unsigned long flags;
2156 audio_buf_info abinfo;
2160 int __user *p = (int __user *)arg;
2164 case OSS_GETVERSION:
2165 return put_user(SOUND_VERSION, p);
2167 case SNDCTL_DSP_SYNC:
2168 return drain_dac1(s, 0/*file->f_flags & O_NONBLOCK*/);
2170 case SNDCTL_DSP_SETDUPLEX:
2173 case SNDCTL_DSP_GETCAPS:
2174 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, p);
2176 case SNDCTL_DSP_RESET:
2178 synchronize_irq(s->irq);
2179 s->dma_dac1.swptr = s->dma_dac1.hwptr = s->dma_dac1.count = s->dma_dac1.total_bytes = 0;
2182 case SNDCTL_DSP_SPEED:
2183 if (get_user(val, p))
2187 s->dma_dac1.ready = 0;
2188 set_dac1_rate(s, val);
2190 return put_user(s->dac1rate, p);
2192 case SNDCTL_DSP_STEREO:
2193 if (get_user(val, p))
2196 s->dma_dac1.ready = 0;
2197 spin_lock_irqsave(&s->lock, flags);
2199 s->sctrl |= SCTRL_P1SMB;
2201 s->sctrl &= ~SCTRL_P1SMB;
2202 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2203 spin_unlock_irqrestore(&s->lock, flags);
2206 case SNDCTL_DSP_CHANNELS:
2207 if (get_user(val, p))
2211 s->dma_dac1.ready = 0;
2212 spin_lock_irqsave(&s->lock, flags);
2214 s->sctrl |= SCTRL_P1SMB;
2216 s->sctrl &= ~SCTRL_P1SMB;
2217 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2218 spin_unlock_irqrestore(&s->lock, flags);
2220 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, p);
2222 case SNDCTL_DSP_GETFMTS: /* Returns a mask */
2223 return put_user(AFMT_S16_LE|AFMT_U8, p);
2225 case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
2226 if (get_user(val, p))
2228 if (val != AFMT_QUERY) {
2230 s->dma_dac1.ready = 0;
2231 spin_lock_irqsave(&s->lock, flags);
2232 if (val == AFMT_S16_LE)
2233 s->sctrl |= SCTRL_P1SEB;
2235 s->sctrl &= ~SCTRL_P1SEB;
2236 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2237 spin_unlock_irqrestore(&s->lock, flags);
2239 return put_user((s->sctrl & SCTRL_P1SEB) ? AFMT_S16_LE : AFMT_U8, p);
2241 case SNDCTL_DSP_POST:
2244 case SNDCTL_DSP_GETTRIGGER:
2245 return put_user((s->ctrl & CTRL_DAC1_EN) ? PCM_ENABLE_OUTPUT : 0, p);
2247 case SNDCTL_DSP_SETTRIGGER:
2248 if (get_user(val, p))
2250 if (val & PCM_ENABLE_OUTPUT) {
2251 if (!s->dma_dac1.ready && (ret = prog_dmabuf_dac1(s)))
2253 s->dma_dac1.enabled = 1;
2256 s->dma_dac1.enabled = 0;
2261 case SNDCTL_DSP_GETOSPACE:
2262 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2264 spin_lock_irqsave(&s->lock, flags);
2265 es1371_update_ptr(s);
2266 abinfo.fragsize = s->dma_dac1.fragsize;
2267 count = s->dma_dac1.count;
2270 abinfo.bytes = s->dma_dac1.dmasize - count;
2271 abinfo.fragstotal = s->dma_dac1.numfrag;
2272 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;
2273 spin_unlock_irqrestore(&s->lock, flags);
2274 return copy_to_user((void __user *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2276 case SNDCTL_DSP_NONBLOCK:
2277 file->f_flags |= O_NONBLOCK;
2280 case SNDCTL_DSP_GETODELAY:
2281 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2283 spin_lock_irqsave(&s->lock, flags);
2284 es1371_update_ptr(s);
2285 count = s->dma_dac1.count;
2286 spin_unlock_irqrestore(&s->lock, flags);
2289 return put_user(count, p);
2291 case SNDCTL_DSP_GETOPTR:
2292 if (!s->dma_dac1.ready && (val = prog_dmabuf_dac1(s)) != 0)
2294 spin_lock_irqsave(&s->lock, flags);
2295 es1371_update_ptr(s);
2296 cinfo.bytes = s->dma_dac1.total_bytes;
2297 count = s->dma_dac1.count;
2300 cinfo.blocks = count >> s->dma_dac1.fragshift;
2301 cinfo.ptr = s->dma_dac1.hwptr;
2302 if (s->dma_dac1.mapped)
2303 s->dma_dac1.count &= s->dma_dac1.fragsize-1;
2304 spin_unlock_irqrestore(&s->lock, flags);
2305 if (copy_to_user((void __user *)arg, &cinfo, sizeof(cinfo)))
2309 case SNDCTL_DSP_GETBLKSIZE:
2310 if ((val = prog_dmabuf_dac1(s)))
2312 return put_user(s->dma_dac1.fragsize, p);
2314 case SNDCTL_DSP_SETFRAGMENT:
2315 if (get_user(val, p))
2317 s->dma_dac1.ossfragshift = val & 0xffff;
2318 s->dma_dac1.ossmaxfrags = (val >> 16) & 0xffff;
2319 if (s->dma_dac1.ossfragshift < 4)
2320 s->dma_dac1.ossfragshift = 4;
2321 if (s->dma_dac1.ossfragshift > 15)
2322 s->dma_dac1.ossfragshift = 15;
2323 if (s->dma_dac1.ossmaxfrags < 4)
2324 s->dma_dac1.ossmaxfrags = 4;
2327 case SNDCTL_DSP_SUBDIVIDE:
2328 if (s->dma_dac1.subdivision)
2330 if (get_user(val, p))
2332 if (val != 1 && val != 2 && val != 4)
2334 s->dma_dac1.subdivision = val;
2337 case SOUND_PCM_READ_RATE:
2338 return put_user(s->dac1rate, p);
2340 case SOUND_PCM_READ_CHANNELS:
2341 return put_user((s->sctrl & SCTRL_P1SMB) ? 2 : 1, p);
2343 case SOUND_PCM_READ_BITS:
2344 return put_user((s->sctrl & SCTRL_P1SEB) ? 16 : 8, p);
2346 case SOUND_PCM_WRITE_FILTER:
2347 case SNDCTL_DSP_SETSYNCRO:
2348 case SOUND_PCM_READ_FILTER:
2352 return mixdev_ioctl(s->codec, cmd, arg);
2355 static int es1371_open_dac(struct inode *inode, struct file *file)
2357 int minor = iminor(inode);
2358 DECLARE_WAITQUEUE(wait, current);
2359 unsigned long flags;
2360 struct list_head *list;
2361 struct es1371_state *s;
2363 for (list = devs.next; ; list = list->next) {
2366 s = list_entry(list, struct es1371_state, devs);
2367 if (!((s->dev_dac ^ minor) & ~0xf))
2371 /* we allow opening with O_RDWR, most programs do it although they will only write */
2373 if (file->f_mode & FMODE_READ)
2376 if (!(file->f_mode & FMODE_WRITE))
2378 file->private_data = s;
2379 /* wait for device to become free */
2381 while (s->open_mode & FMODE_DAC) {
2382 if (file->f_flags & O_NONBLOCK) {
2386 add_wait_queue(&s->open_wait, &wait);
2387 __set_current_state(TASK_INTERRUPTIBLE);
2390 remove_wait_queue(&s->open_wait, &wait);
2391 set_current_state(TASK_RUNNING);
2392 if (signal_pending(current))
2393 return -ERESTARTSYS;
2396 s->dma_dac1.ossfragshift = s->dma_dac1.ossmaxfrags = s->dma_dac1.subdivision = 0;
2397 s->dma_dac1.enabled = 1;
2398 set_dac1_rate(s, 8000);
2399 spin_lock_irqsave(&s->lock, flags);
2400 s->sctrl &= ~SCTRL_P1FMT;
2401 if ((minor & 0xf) == SND_DEV_DSP16)
2402 s->sctrl |= ES1371_FMT_S16_MONO << SCTRL_SH_P1FMT;
2404 s->sctrl |= ES1371_FMT_U8_MONO << SCTRL_SH_P1FMT;
2405 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2406 spin_unlock_irqrestore(&s->lock, flags);
2407 s->open_mode |= FMODE_DAC;
2409 return nonseekable_open(inode, file);
2412 static int es1371_release_dac(struct inode *inode, struct file *file)
2414 struct es1371_state *s = (struct es1371_state *)file->private_data;
2418 drain_dac1(s, file->f_flags & O_NONBLOCK);
2421 dealloc_dmabuf(s, &s->dma_dac1);
2422 s->open_mode &= ~FMODE_DAC;
2424 wake_up(&s->open_wait);
2429 static /*const*/ struct file_operations es1371_dac_fops = {
2430 .owner = THIS_MODULE,
2431 .llseek = no_llseek,
2432 .write = es1371_write_dac,
2433 .poll = es1371_poll_dac,
2434 .ioctl = es1371_ioctl_dac,
2435 .mmap = es1371_mmap_dac,
2436 .open = es1371_open_dac,
2437 .release = es1371_release_dac,
2440 /* --------------------------------------------------------------------- */
2442 static ssize_t es1371_midi_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
2444 struct es1371_state *s = (struct es1371_state *)file->private_data;
2445 DECLARE_WAITQUEUE(wait, current);
2447 unsigned long flags;
2452 if (!access_ok(VERIFY_WRITE, buffer, count))
2457 add_wait_queue(&s->midi.iwait, &wait);
2459 spin_lock_irqsave(&s->lock, flags);
2461 cnt = MIDIINBUF - ptr;
2462 if (s->midi.icnt < cnt)
2465 __set_current_state(TASK_INTERRUPTIBLE);
2466 spin_unlock_irqrestore(&s->lock, flags);
2470 if (file->f_flags & O_NONBLOCK) {
2476 if (signal_pending(current)) {
2483 if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt)) {
2488 ptr = (ptr + cnt) % MIDIINBUF;
2489 spin_lock_irqsave(&s->lock, flags);
2491 s->midi.icnt -= cnt;
2492 spin_unlock_irqrestore(&s->lock, flags);
2498 __set_current_state(TASK_RUNNING);
2499 remove_wait_queue(&s->midi.iwait, &wait);
2503 static ssize_t es1371_midi_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
2505 struct es1371_state *s = (struct es1371_state *)file->private_data;
2506 DECLARE_WAITQUEUE(wait, current);
2508 unsigned long flags;
2513 if (!access_ok(VERIFY_READ, buffer, count))
2518 add_wait_queue(&s->midi.owait, &wait);
2520 spin_lock_irqsave(&s->lock, flags);
2522 cnt = MIDIOUTBUF - ptr;
2523 if (s->midi.ocnt + cnt > MIDIOUTBUF)
2524 cnt = MIDIOUTBUF - s->midi.ocnt;
2526 __set_current_state(TASK_INTERRUPTIBLE);
2527 es1371_handle_midi(s);
2529 spin_unlock_irqrestore(&s->lock, flags);
2533 if (file->f_flags & O_NONBLOCK) {
2539 if (signal_pending(current)) {
2546 if (copy_from_user(s->midi.obuf + ptr, buffer, cnt)) {
2551 ptr = (ptr + cnt) % MIDIOUTBUF;
2552 spin_lock_irqsave(&s->lock, flags);
2554 s->midi.ocnt += cnt;
2555 spin_unlock_irqrestore(&s->lock, flags);
2559 spin_lock_irqsave(&s->lock, flags);
2560 es1371_handle_midi(s);
2561 spin_unlock_irqrestore(&s->lock, flags);
2563 __set_current_state(TASK_RUNNING);
2564 remove_wait_queue(&s->midi.owait, &wait);
2568 /* No kernel lock - we have our own spinlock */
2569 static unsigned int es1371_midi_poll(struct file *file, struct poll_table_struct *wait)
2571 struct es1371_state *s = (struct es1371_state *)file->private_data;
2572 unsigned long flags;
2573 unsigned int mask = 0;
2576 if (file->f_mode & FMODE_WRITE)
2577 poll_wait(file, &s->midi.owait, wait);
2578 if (file->f_mode & FMODE_READ)
2579 poll_wait(file, &s->midi.iwait, wait);
2580 spin_lock_irqsave(&s->lock, flags);
2581 if (file->f_mode & FMODE_READ) {
2582 if (s->midi.icnt > 0)
2583 mask |= POLLIN | POLLRDNORM;
2585 if (file->f_mode & FMODE_WRITE) {
2586 if (s->midi.ocnt < MIDIOUTBUF)
2587 mask |= POLLOUT | POLLWRNORM;
2589 spin_unlock_irqrestore(&s->lock, flags);
2593 static int es1371_midi_open(struct inode *inode, struct file *file)
2595 int minor = iminor(inode);
2596 DECLARE_WAITQUEUE(wait, current);
2597 unsigned long flags;
2598 struct list_head *list;
2599 struct es1371_state *s;
2601 for (list = devs.next; ; list = list->next) {
2604 s = list_entry(list, struct es1371_state, devs);
2605 if (s->dev_midi == minor)
2609 file->private_data = s;
2610 /* wait for device to become free */
2612 while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
2613 if (file->f_flags & O_NONBLOCK) {
2617 add_wait_queue(&s->open_wait, &wait);
2618 __set_current_state(TASK_INTERRUPTIBLE);
2621 remove_wait_queue(&s->open_wait, &wait);
2622 set_current_state(TASK_RUNNING);
2623 if (signal_pending(current))
2624 return -ERESTARTSYS;
2627 spin_lock_irqsave(&s->lock, flags);
2628 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2629 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2630 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2631 outb(UCTRL_CNTRL_SWR, s->io+ES1371_REG_UART_CONTROL);
2632 outb(0, s->io+ES1371_REG_UART_CONTROL);
2633 outb(0, s->io+ES1371_REG_UART_TEST);
2635 if (file->f_mode & FMODE_READ) {
2636 s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
2638 if (file->f_mode & FMODE_WRITE) {
2639 s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
2641 s->ctrl |= CTRL_UART_EN;
2642 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2643 es1371_handle_midi(s);
2644 spin_unlock_irqrestore(&s->lock, flags);
2645 s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
2647 return nonseekable_open(inode, file);
2650 static int es1371_midi_release(struct inode *inode, struct file *file)
2652 struct es1371_state *s = (struct es1371_state *)file->private_data;
2653 DECLARE_WAITQUEUE(wait, current);
2654 unsigned long flags;
2655 unsigned count, tmo;
2659 if (file->f_mode & FMODE_WRITE) {
2660 add_wait_queue(&s->midi.owait, &wait);
2662 __set_current_state(TASK_INTERRUPTIBLE);
2663 spin_lock_irqsave(&s->lock, flags);
2664 count = s->midi.ocnt;
2665 spin_unlock_irqrestore(&s->lock, flags);
2668 if (signal_pending(current))
2670 if (file->f_flags & O_NONBLOCK)
2672 tmo = (count * HZ) / 3100;
2673 if (!schedule_timeout(tmo ? : 1) && tmo)
2674 printk(KERN_DEBUG PFX "midi timed out??\n");
2676 remove_wait_queue(&s->midi.owait, &wait);
2677 set_current_state(TASK_RUNNING);
2680 s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
2681 spin_lock_irqsave(&s->lock, flags);
2682 if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
2683 s->ctrl &= ~CTRL_UART_EN;
2684 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2686 spin_unlock_irqrestore(&s->lock, flags);
2688 wake_up(&s->open_wait);
2693 static /*const*/ struct file_operations es1371_midi_fops = {
2694 .owner = THIS_MODULE,
2695 .llseek = no_llseek,
2696 .read = es1371_midi_read,
2697 .write = es1371_midi_write,
2698 .poll = es1371_midi_poll,
2699 .open = es1371_midi_open,
2700 .release = es1371_midi_release,
2703 /* --------------------------------------------------------------------- */
2706 * for debugging purposes, we'll create a proc device that dumps the
2711 static int proc_es1371_dump (char *buf, char **start, off_t fpos, int length, int *eof, void *data)
2713 struct es1371_state *s;
2716 if (list_empty(&devs))
2718 s = list_entry(devs.next, struct es1371_state, devs);
2719 /* print out header */
2720 len += sprintf(buf + len, "\t\tCreative ES137x Debug Dump-o-matic\n");
2722 /* print out CODEC state */
2723 len += sprintf (buf + len, "AC97 CODEC state\n");
2724 for (cnt=0; cnt <= 0x7e; cnt = cnt +2)
2725 len+= sprintf (buf + len, "reg:0x%02x val:0x%04x\n", cnt, rdcodec(s->codec, cnt));
2732 *start = buf + fpos;
2733 if ((len -= fpos) > length)
2739 #endif /* ES1371_DEBUG */
2741 /* --------------------------------------------------------------------- */
2743 /* maximum number of devices; only used for command line params */
2746 static int spdif[NR_DEVICE];
2747 static int nomix[NR_DEVICE];
2748 static int amplifier[NR_DEVICE];
2750 static unsigned int devindex;
2752 module_param_array(spdif, bool, NULL, 0);
2753 MODULE_PARM_DESC(spdif, "if 1 the output is in S/PDIF digital mode");
2754 module_param_array(nomix, bool, NULL, 0);
2755 MODULE_PARM_DESC(nomix, "if 1 no analog audio is mixed to the digital output");
2756 module_param_array(amplifier, bool, NULL, 0);
2757 MODULE_PARM_DESC(amplifier, "Set to 1 if the machine needs the amp control enabling (many laptops)");
2759 MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
2760 MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver");
2761 MODULE_LICENSE("GPL");
2764 /* --------------------------------------------------------------------- */
2766 static struct initvol {
2769 } initvol[] __devinitdata = {
2770 { SOUND_MIXER_WRITE_LINE, 0x4040 },
2771 { SOUND_MIXER_WRITE_CD, 0x4040 },
2772 { MIXER_WRITE(SOUND_MIXER_VIDEO), 0x4040 },
2773 { SOUND_MIXER_WRITE_LINE1, 0x4040 },
2774 { SOUND_MIXER_WRITE_PCM, 0x4040 },
2775 { SOUND_MIXER_WRITE_VOLUME, 0x4040 },
2776 { MIXER_WRITE(SOUND_MIXER_PHONEOUT), 0x4040 },
2777 { SOUND_MIXER_WRITE_OGAIN, 0x4040 },
2778 { MIXER_WRITE(SOUND_MIXER_PHONEIN), 0x4040 },
2779 { SOUND_MIXER_WRITE_SPEAKER, 0x4040 },
2780 { SOUND_MIXER_WRITE_MIC, 0x4040 },
2781 { SOUND_MIXER_WRITE_RECLEV, 0x4040 },
2782 { SOUND_MIXER_WRITE_IGAIN, 0x4040 }
2788 } amplifier_needed[] =
2790 { 0x107B, 0x2150 }, /* Gateway Solo 2150 */
2791 { 0x13BD, 0x100C }, /* Mebius PC-MJ100V */
2792 { 0x1102, 0x5938 }, /* Targa Xtender 300 */
2793 { 0x1102, 0x8938 }, /* IPC notebook */
2794 { PCI_ANY_ID, PCI_ANY_ID }
2797 #ifdef SUPPORT_JOYSTICK
2799 static int __devinit es1371_register_gameport(struct es1371_state *s)
2801 struct gameport *gp;
2804 for (gpio = 0x218; gpio >= 0x200; gpio -= 0x08)
2805 if (request_region(gpio, JOY_EXTENT, "es1371"))
2809 printk(KERN_ERR PFX "no free joystick address found\n");
2813 s->gameport = gp = gameport_allocate_port();
2815 printk(KERN_ERR PFX "can not allocate memory for gameport\n");
2816 release_region(gpio, JOY_EXTENT);
2820 gameport_set_name(gp, "ESS1371 Gameport");
2821 gameport_set_phys(gp, "isa%04x/gameport0", gpio);
2822 gp->dev.parent = &s->dev->dev;
2825 s->ctrl |= CTRL_JYSTK_EN | (((gpio >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT);
2826 outl(s->ctrl, s->io + ES1371_REG_CONTROL);
2828 gameport_register_port(gp);
2833 static inline void es1371_unregister_gameport(struct es1371_state *s)
2836 int gpio = s->gameport->io;
2837 gameport_unregister_port(s->gameport);
2838 release_region(gpio, JOY_EXTENT);
2844 static inline int es1371_register_gameport(struct es1371_state *s) { return -ENOSYS; }
2845 static inline void es1371_unregister_gameport(struct es1371_state *s) { }
2846 #endif /* SUPPORT_JOYSTICK */
2849 static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
2851 struct es1371_state *s;
2853 int i, val, res = -1;
2859 if ((res=pci_enable_device(pcidev)))
2862 if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_IO))
2864 if (pcidev->irq == 0)
2866 i = pci_set_dma_mask(pcidev, DMA_32BIT_MASK);
2868 printk(KERN_WARNING "es1371: architecture does not support 32bit PCI busmaster DMA\n");
2871 if (!(s = kmalloc(sizeof(struct es1371_state), GFP_KERNEL))) {
2872 printk(KERN_WARNING PFX "out of memory\n");
2875 memset(s, 0, sizeof(struct es1371_state));
2877 s->codec = ac97_alloc_codec();
2878 if(s->codec == NULL)
2881 init_waitqueue_head(&s->dma_adc.wait);
2882 init_waitqueue_head(&s->dma_dac1.wait);
2883 init_waitqueue_head(&s->dma_dac2.wait);
2884 init_waitqueue_head(&s->open_wait);
2885 init_waitqueue_head(&s->midi.iwait);
2886 init_waitqueue_head(&s->midi.owait);
2887 init_MUTEX(&s->open_sem);
2888 spin_lock_init(&s->lock);
2889 s->magic = ES1371_MAGIC;
2891 s->io = pci_resource_start(pcidev, 0);
2892 s->irq = pcidev->irq;
2893 s->vendor = pcidev->vendor;
2894 s->device = pcidev->device;
2895 pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev);
2896 s->codec->private_data = s;
2898 s->codec->codec_read = rdcodec;
2899 s->codec->codec_write = wrcodec;
2900 printk(KERN_INFO PFX "found chip, vendor id 0x%04x device id 0x%04x revision 0x%02x\n",
2901 s->vendor, s->device, s->rev);
2902 if (!request_region(s->io, ES1371_EXTENT, "es1371")) {
2903 printk(KERN_ERR PFX "io ports %#lx-%#lx in use\n", s->io, s->io+ES1371_EXTENT-1);
2907 if ((res=request_irq(s->irq, es1371_interrupt, SA_SHIRQ, "es1371",s))) {
2908 printk(KERN_ERR PFX "irq %u in use\n", s->irq);
2911 printk(KERN_INFO PFX "found es1371 rev %d at io %#lx irq %u\n",
2912 s->rev, s->io, s->irq);
2913 /* register devices */
2914 if ((res=(s->dev_audio = register_sound_dsp(&es1371_audio_fops,-1)))<0)
2916 if ((res=(s->codec->dev_mixer = register_sound_mixer(&es1371_mixer_fops, -1))) < 0)
2918 if ((res=(s->dev_dac = register_sound_dsp(&es1371_dac_fops, -1))) < 0)
2920 if ((res=(s->dev_midi = register_sound_midi(&es1371_midi_fops, -1)))<0 )
2923 /* initialize the debug proc device */
2924 s->ps = create_proc_read_entry("es1371",0,NULL,proc_es1371_dump,NULL);
2925 #endif /* ES1371_DEBUG */
2927 /* initialize codec registers */
2930 /* Check amplifier requirements */
2932 if (amplifier[devindex])
2933 s->ctrl |= CTRL_GPIO_OUT0;
2934 else for(idx = 0; amplifier_needed[idx].svid != PCI_ANY_ID; idx++)
2936 if(pcidev->subsystem_vendor == amplifier_needed[idx].svid &&
2937 pcidev->subsystem_device == amplifier_needed[idx].sdid)
2939 s->ctrl |= CTRL_GPIO_OUT0; /* turn internal amplifier on */
2940 printk(KERN_INFO PFX "Enabling internal amplifier.\n");
2946 s->spdif_volume = -1;
2947 /* check to see if s/pdif mode is being requested */
2948 if (spdif[devindex]) {
2950 printk(KERN_INFO PFX "enabling S/PDIF output\n");
2951 s->spdif_volume = 0;
2952 cssr |= STAT_EN_SPDIF;
2953 s->ctrl |= CTRL_SPDIFEN_B;
2954 if (nomix[devindex]) /* don't mix analog inputs to s/pdif output */
2955 s->ctrl |= CTRL_RECEN_B;
2957 printk(KERN_ERR PFX "revision %d does not support S/PDIF\n", s->rev);
2960 /* initialize the chips */
2961 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2962 outl(s->sctrl, s->io+ES1371_REG_SERIAL_CONTROL);
2963 outl(LEGACY_JFAST, s->io+ES1371_REG_LEGACY);
2964 pci_set_master(pcidev); /* enable bus mastering */
2965 /* if we are a 5880 turn on the AC97 */
2966 if (s->vendor == PCI_VENDOR_ID_ENSONIQ &&
2967 ((s->device == PCI_DEVICE_ID_ENSONIQ_CT5880 && s->rev >= CT5880REV_CT5880_C) ||
2968 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A) ||
2969 (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_ES1373_8))) {
2970 cssr |= CSTAT_5880_AC97_RST;
2971 outl(cssr, s->io+ES1371_REG_STATUS);
2972 /* need to delay around 20ms(bleech) to give
2973 some CODECs enough time to wakeup */
2974 tmo = jiffies + (HZ / 50) + 1;
2976 tmo2 = tmo - jiffies;
2979 schedule_timeout(tmo2);
2982 /* AC97 warm reset to start the bitclk */
2983 outl(s->ctrl | CTRL_SYNCRES, s->io+ES1371_REG_CONTROL);
2985 outl(s->ctrl, s->io+ES1371_REG_CONTROL);
2986 /* init the sample rate converter */
2989 if (!ac97_probe_codec(s->codec)) {
2993 /* set default values */
2997 val = SOUND_MASK_LINE;
2998 mixdev_ioctl(s->codec, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
2999 for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
3000 val = initvol[i].vol;
3001 mixdev_ioctl(s->codec, initvol[i].mixch, (unsigned long)&val);
3003 /* mute master and PCM when in S/PDIF mode */
3004 if (s->spdif_volume != -1) {
3006 s->codec->mixer_ioctl(s->codec, SOUND_MIXER_WRITE_VOLUME, (unsigned long)&val);
3007 s->codec->mixer_ioctl(s->codec, SOUND_MIXER_WRITE_PCM, (unsigned long)&val);
3010 /* turn on S/PDIF output driver if requested */
3011 outl(cssr, s->io+ES1371_REG_STATUS);
3013 es1371_register_gameport(s);
3015 /* store it in the driver field */
3016 pci_set_drvdata(pcidev, s);
3017 /* put it into driver list */
3018 list_add_tail(&s->devs, &devs);
3019 /* increment devindex */
3020 if (devindex < NR_DEVICE-1)
3027 remove_proc_entry("es1371", NULL);
3029 unregister_sound_midi(s->dev_midi);
3031 unregister_sound_dsp(s->dev_dac);
3033 unregister_sound_mixer(s->codec->dev_mixer);
3035 unregister_sound_dsp(s->dev_audio);
3037 printk(KERN_ERR PFX "cannot register misc device\n");
3038 free_irq(s->irq, s);
3040 release_region(s->io, ES1371_EXTENT);
3043 ac97_release_codec(s->codec);
3048 static void __devexit es1371_remove(struct pci_dev *dev)
3050 struct es1371_state *s = pci_get_drvdata(dev);
3057 remove_proc_entry("es1371", NULL);
3058 #endif /* ES1371_DEBUG */
3059 outl(0, s->io+ES1371_REG_CONTROL); /* switch everything off */
3060 outl(0, s->io+ES1371_REG_SERIAL_CONTROL); /* clear serial interrupts */
3061 synchronize_irq(s->irq);
3062 free_irq(s->irq, s);
3063 es1371_unregister_gameport(s);
3064 release_region(s->io, ES1371_EXTENT);
3065 unregister_sound_dsp(s->dev_audio);
3066 unregister_sound_mixer(s->codec->dev_mixer);
3067 unregister_sound_dsp(s->dev_dac);
3068 unregister_sound_midi(s->dev_midi);
3069 ac97_release_codec(s->codec);
3071 pci_set_drvdata(dev, NULL);
3074 static struct pci_device_id id_table[] = {
3075 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1371, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3076 { PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_CT5880, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3077 { PCI_VENDOR_ID_ECTIVA, PCI_DEVICE_ID_ECTIVA_EV1938, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
3081 MODULE_DEVICE_TABLE(pci, id_table);
3083 static struct pci_driver es1371_driver = {
3085 .id_table = id_table,
3086 .probe = es1371_probe,
3087 .remove = __devexit_p(es1371_remove),
3090 static int __init init_es1371(void)
3092 printk(KERN_INFO PFX "version v0.32 time " __TIME__ " " __DATE__ "\n");
3093 return pci_register_driver(&es1371_driver);
3096 static void __exit cleanup_es1371(void)
3098 printk(KERN_INFO PFX "unloading\n");
3099 pci_unregister_driver(&es1371_driver);
3102 module_init(init_es1371);
3103 module_exit(cleanup_es1371);
3105 /* --------------------------------------------------------------------- */
3109 /* format is: es1371=[spdif,[nomix,[amplifier]]] */
3111 static int __init es1371_setup(char *str)
3113 static unsigned __initdata nr_dev = 0;
3115 if (nr_dev >= NR_DEVICE)
3119 ((get_option(&str, &spdif[nr_dev]) == 2)
3120 && (get_option(&str, &nomix[nr_dev]) == 2)
3121 && (get_option(&str, &lifier[nr_dev])));
3127 __setup("es1371=", es1371_setup);