1 /*****************************************************************************/
4 * es1371.c -- Creative Ensoniq ES1371.
6 * Copyright (C) 1998-2000 Thomas Sailer (sailer@ife.ee.ethz.ch)
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 * Special thanks to Ensoniq
25 * Module command line parameters:
26 * joystick must be set to the base I/O-Port to be used for
27 * the gameport. Legal values are 0x200, 0x208, 0x210 and 0x218.
28 * The gameport is mirrored eight times.
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
107 /*****************************************************************************/
109 #include <linux/version.h>
110 #include <linux/module.h>
111 #include <linux/string.h>
112 #include <linux/ioport.h>
113 #include <linux/sched.h>
114 #include <linux/delay.h>
115 #include <linux/sound.h>
116 #include <linux/malloc.h>
117 #include <linux/soundcard.h>
118 #include <linux/pci.h>
119 #include <linux/init.h>
120 #include <linux/poll.h>
121 #include <linux/bitops.h>
122 #include <linux/proc_fs.h>
123 #include <linux/spinlock.h>
124 #include <linux/smp_lock.h>
125 #include <linux/ac97_codec.h>
126 #include <linux/wrapper.h>
129 #include <asm/uaccess.h>
130 #include <asm/hardirq.h>
132 /* --------------------------------------------------------------------- */
134 #undef OSS_DOCUMENTED_MIXER_SEMANTICS
137 /*#define DBG(x) {x}*/
139 /* --------------------------------------------------------------------- */
141 #ifndef PCI_VENDOR_ID_ENSONIQ
142 #define PCI_VENDOR_ID_ENSONIQ 0x1274
145 #ifndef PCI_VENDOR_ID_ECTIVA
146 #define PCI_VENDOR_ID_ECTIVA 0x1102
149 #ifndef PCI_DEVICE_ID_ENSONIQ_ES1371
150 #define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371
153 #ifndef PCI_DEVICE_ID_ENSONIQ_CT5880
154 #define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880
157 #ifndef PCI_DEVICE_ID_ECTIVA_EV1938
158 #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938
162 /* This is a little confusing because all ES1371 compatible chips have the
163 same DEVICE_ID, the only thing differentiating them is the REV_ID field.
164 This is only significant if you want to enable features on the later parts.
165 Yes, I know it's stupid and why didn't we use the sub IDs?
167 #define ES1371REV_ES1373_A 0x04
168 #define ES1371REV_ES1373_B 0x06
169 #define ES1371REV_CT5880_A 0x07
170 #define CT5880REV_CT5880_C 0x02
171 #define ES1371REV_ES1371_B 0x09
172 #define EV1938REV_EV1938_A 0x00
173 #define ES1371REV_ES1373_8 0x08
175 #define ES1371_MAGIC ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
177 #define ES1371_EXTENT 0x40
180 #define ES1371_REG_CONTROL 0x00
181 #define ES1371_REG_STATUS 0x04 /* on the 5880 it is control/status */
182 #define ES1371_REG_UART_DATA 0x08
183 #define ES1371_REG_UART_STATUS 0x09
184 #define ES1371_REG_UART_CONTROL 0x09
185 #define ES1371_REG_UART_TEST 0x0a
186 #define ES1371_REG_MEMPAGE 0x0c
187 #define ES1371_REG_SRCONV 0x10
188 #define ES1371_REG_CODEC 0x14
189 #define ES1371_REG_LEGACY 0x18
190 #define ES1371_REG_SERIAL_CONTROL 0x20
191 #define ES1371_REG_DAC1_SCOUNT 0x24
192 #define ES1371_REG_DAC2_SCOUNT 0x28
193 #define ES1371_REG_ADC_SCOUNT 0x2c
195 #define ES1371_REG_DAC1_FRAMEADR 0xc30
196 #define ES1371_REG_DAC1_FRAMECNT 0xc34
197 #define ES1371_REG_DAC2_FRAMEADR 0xc38
198 #define ES1371_REG_DAC2_FRAMECNT 0xc3c
199 #define ES1371_REG_ADC_FRAMEADR 0xd30
200 #define ES1371_REG_ADC_FRAMECNT 0xd34
202 #define ES1371_FMT_U8_MONO 0
203 #define ES1371_FMT_U8_STEREO 1
204 #define ES1371_FMT_S16_MONO 2
205 #define ES1371_FMT_S16_STEREO 3
206 #define ES1371_FMT_STEREO 1
207 #define ES1371_FMT_S16 2
208 #define ES1371_FMT_MASK 3
210 static const unsigned sample_size
[] = { 1, 2, 2, 4 };
211 static const unsigned sample_shift
[] = { 0, 1, 1, 2 };
213 #define CTRL_RECEN_B 0x08000000 /* 1 = don't mix analog in to digital out */
214 #define CTRL_SPDIFEN_B 0x04000000
215 #define CTRL_JOY_SHIFT 24
216 #define CTRL_JOY_MASK 3
217 #define CTRL_JOY_200 0x00000000 /* joystick base address */
218 #define CTRL_JOY_208 0x01000000
219 #define CTRL_JOY_210 0x02000000
220 #define CTRL_JOY_218 0x03000000
221 #define CTRL_GPIO_IN0 0x00100000 /* general purpose inputs/outputs */
222 #define CTRL_GPIO_IN1 0x00200000
223 #define CTRL_GPIO_IN2 0x00400000
224 #define CTRL_GPIO_IN3 0x00800000
225 #define CTRL_GPIO_OUT0 0x00010000
226 #define CTRL_GPIO_OUT1 0x00020000
227 #define CTRL_GPIO_OUT2 0x00040000
228 #define CTRL_GPIO_OUT3 0x00080000
229 #define CTRL_MSFMTSEL 0x00008000 /* MPEG serial data fmt: 0 = Sony, 1 = I2S */
230 #define CTRL_SYNCRES 0x00004000 /* AC97 warm reset */
231 #define CTRL_ADCSTOP 0x00002000 /* stop ADC transfers */
232 #define CTRL_PWR_INTRM 0x00001000 /* 1 = power level ints enabled */
233 #define CTRL_M_CB 0x00000800 /* recording source: 0 = ADC, 1 = MPEG */
234 #define CTRL_CCB_INTRM 0x00000400 /* 1 = CCB "voice" ints enabled */
235 #define CTRL_PDLEV0 0x00000000 /* power down level */
236 #define CTRL_PDLEV1 0x00000100
237 #define CTRL_PDLEV2 0x00000200
238 #define CTRL_PDLEV3 0x00000300
239 #define CTRL_BREQ 0x00000080 /* 1 = test mode (internal mem test) */
240 #define CTRL_DAC1_EN 0x00000040 /* enable DAC1 */
241 #define CTRL_DAC2_EN 0x00000020 /* enable DAC2 */
242 #define CTRL_ADC_EN 0x00000010 /* enable ADC */
243 #define CTRL_UART_EN 0x00000008 /* enable MIDI uart */
244 #define CTRL_JYSTK_EN 0x00000004 /* enable Joystick port */
245 #define CTRL_XTALCLKDIS 0x00000002 /* 1 = disable crystal clock input */
246 #define CTRL_PCICLKDIS 0x00000001 /* 1 = disable PCI clock distribution */
249 #define STAT_INTR 0x80000000 /* wired or of all interrupt bits */
250 #define CSTAT_5880_AC97_RST 0x20000000 /* CT5880 Reset bit */
251 #define STAT_EN_SPDIF 0x00040000 /* enable S/PDIF circuitry */
252 #define STAT_TS_SPDIF 0x00020000 /* test S/PDIF circuitry */
253 #define STAT_TESTMODE 0x00010000 /* test ASIC */
254 #define STAT_SYNC_ERR 0x00000100 /* 1 = codec sync error */
255 #define STAT_VC 0x000000c0 /* CCB int source, 0=DAC1, 1=DAC2, 2=ADC, 3=undef */
257 #define STAT_MPWR 0x00000020 /* power level interrupt */
258 #define STAT_MCCB 0x00000010 /* CCB int pending */
259 #define STAT_UART 0x00000008 /* UART int pending */
260 #define STAT_DAC1 0x00000004 /* DAC1 int pending */
261 #define STAT_DAC2 0x00000002 /* DAC2 int pending */
262 #define STAT_ADC 0x00000001 /* ADC int pending */
264 #define USTAT_RXINT 0x80 /* UART rx int pending */
265 #define USTAT_TXINT 0x04 /* UART tx int pending */
266 #define USTAT_TXRDY 0x02 /* UART tx ready */
267 #define USTAT_RXRDY 0x01 /* UART rx ready */
269 #define UCTRL_RXINTEN 0x80 /* 1 = enable RX ints */
270 #define UCTRL_TXINTEN 0x60 /* TX int enable field mask */
271 #define UCTRL_ENA_TXINT 0x20 /* enable TX int */
272 #define UCTRL_CNTRL 0x03 /* control field */
273 #define UCTRL_CNTRL_SWR 0x03 /* software reset command */
275 /* sample rate converter */
276 #define SRC_OKSTATE 1
278 #define SRC_RAMADDR_MASK 0xfe000000
279 #define SRC_RAMADDR_SHIFT 25
280 #define SRC_DAC1FREEZE (1UL << 21)
281 #define SRC_DAC2FREEZE (1UL << 20)
282 #define SRC_ADCFREEZE (1UL << 19)
285 #define SRC_WE 0x01000000 /* read/write control for SRC RAM */
286 #define SRC_BUSY 0x00800000 /* SRC busy */
287 #define SRC_DIS 0x00400000 /* 1 = disable SRC */
288 #define SRC_DDAC1 0x00200000 /* 1 = disable accum update for DAC1 */
289 #define SRC_DDAC2 0x00100000 /* 1 = disable accum update for DAC2 */
290 #define SRC_DADC 0x00080000 /* 1 = disable accum update for ADC2 */
291 #define SRC_CTLMASK 0x00780000
292 #define SRC_RAMDATA_MASK 0x0000ffff
293 #define SRC_RAMDATA_SHIFT 0
295 #define SRCREG_ADC 0x78
296 #define SRCREG_DAC1 0x70
297 #define SRCREG_DAC2 0x74
298 #define SRCREG_VOL_ADC 0x6c
299 #define SRCREG_VOL_DAC1 0x7c
300 #define SRCREG_VOL_DAC2 0x7e
302 #define SRCREG_TRUNC_N 0x00
303 #define SRCREG_INT_REGS 0x01
304 #define SRCREG_ACCUM_FRAC 0x02
305 #define SRCREG_VFREQ_FRAC 0x03
307 #define CODEC_PIRD 0x00800000 /* 0 = write AC97 register */
308 #define CODEC_PIADD_MASK 0x007f0000
309 #define CODEC_PIADD_SHIFT 16
310 #define CODEC_PIDAT_MASK 0x0000ffff
311 #define CODEC_PIDAT_SHIFT 0
313 #define CODEC_RDY 0x80000000 /* AC97 read data valid */
314 #define CODEC_WIP 0x40000000 /* AC97 write in progress */
315 #define CODEC_PORD 0x00800000 /* 0 = write AC97 register */
316 #define CODEC_POADD_MASK 0x007f0000
317 #define CODEC_POADD_SHIFT 16
318 #define CODEC_PODAT_MASK 0x0000ffff
319 #define CODEC_PODAT_SHIFT 0
322 #define LEGACY_JFAST 0x80000000 /* fast joystick timing */
323 #define LEGACY_FIRQ 0x01000000 /* force IRQ */
325 #define SCTRL_DACTEST 0x00400000 /* 1 = DAC test, test vector generation purposes */
326 #define SCTRL_P2ENDINC 0x00380000 /* */
327 #define SCTRL_SH_P2ENDINC 19
328 #define SCTRL_P2STINC 0x00070000 /* */
329 #define SCTRL_SH_P2STINC 16
330 #define SCTRL_R1LOOPSEL 0x00008000 /* 0 = loop mode */
331 #define SCTRL_P2LOOPSEL 0x00004000 /* 0 = loop mode */
332 #define SCTRL_P1LOOPSEL 0x00002000 /* 0 = loop mode */
333 #define SCTRL_P2PAUSE 0x00001000 /* 1 = pause mode */
334 #define SCTRL_P1PAUSE 0x00000800 /* 1 = pause mode */
335 #define SCTRL_R1INTEN 0x00000400 /* enable interrupt */
336 #define SCTRL_P2INTEN 0x00000200 /* enable interrupt */
337 #define SCTRL_P1INTEN 0x00000100 /* enable interrupt */
338 #define SCTRL_P1SCTRLD 0x00000080 /* reload sample count register for DAC1 */
339 #define SCTRL_P2DACSEN 0x00000040 /* 1 = DAC2 play back last sample when disabled */
340 #define SCTRL_R1SEB 0x00000020 /* 1 = 16bit */
341 #define SCTRL_R1SMB 0x00000010 /* 1 = stereo */
342 #define SCTRL_R1FMT 0x00000030 /* format mask */
343 #define SCTRL_SH_R1FMT 4
344 #define SCTRL_P2SEB 0x00000008 /* 1 = 16bit */
345 #define SCTRL_P2SMB 0x00000004 /* 1 = stereo */
346 #define SCTRL_P2FMT 0x0000000c /* format mask */
347 #define SCTRL_SH_P2FMT 2
348 #define SCTRL_P1SEB 0x00000002 /* 1 = 16bit */
349 #define SCTRL_P1SMB 0x00000001 /* 1 = stereo */
350 #define SCTRL_P1FMT 0x00000003 /* format mask */
351 #define SCTRL_SH_P1FMT 0
355 #define POLL_COUNT 0x1000
356 #define FMODE_DAC 4 /* slight misuse of mode_t */
358 /* MIDI buffer sizes */
360 #define MIDIINBUF 256
361 #define MIDIOUTBUF 256
363 #define FMODE_MIDI_SHIFT 3
364 #define FMODE_MIDI_READ (FMODE_READ << FMODE_MIDI_SHIFT)
365 #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
367 #define ES1371_MODULE_NAME "es1371"
368 #define PFX ES1371_MODULE_NAME ": "
370 /* --------------------------------------------------------------------- */
372 struct es1371_state
{
376 /* list of es1371 devices */
377 struct list_head devs
;
379 /* the corresponding pci_dev structure */
382 /* soundcore stuff */
387 /* hardware resources */
388 unsigned long io
; /* long for SPARC */
394 u8 rev
; /* the chip revision */
397 int spdif_volume
; /* S/PDIF output is enabled if != -1 */
400 /* debug /proc entry */
401 struct proc_dir_entry
*ps
;
402 #endif /* ES1371_DEBUG */
404 struct ac97_codec codec
;
409 unsigned dac1rate
, dac2rate
, adcrate
;
412 struct semaphore open_sem
;
414 wait_queue_head_t open_wait
;
422 unsigned hwptr
, swptr
;
423 unsigned total_bytes
;
425 unsigned error
; /* over/underrun */
426 wait_queue_head_t wait
;
427 /* redundant, but makes calculations easier */
430 unsigned fragsamples
;
434 unsigned endcleared
:1;
435 unsigned ossfragshift
;
437 unsigned subdivision
;
438 } dma_dac1
, dma_dac2
, dma_adc
;
442 unsigned ird
, iwr
, icnt
;
443 unsigned ord
, owr
, ocnt
;
444 wait_queue_head_t iwait
;
445 wait_queue_head_t owait
;
446 unsigned char ibuf
[MIDIINBUF
];
447 unsigned char obuf
[MIDIOUTBUF
];
451 /* --------------------------------------------------------------------- */
453 static LIST_HEAD(devs
);
455 /* --------------------------------------------------------------------- */
457 extern inline unsigned ld2(unsigned int x
)
482 /* --------------------------------------------------------------------- */
484 static unsigned wait_src_ready(struct es1371_state
*s
)
488 for (t
= 0; t
< POLL_COUNT
; t
++) {
489 if (!((r
= inl(s
->io
+ ES1371_REG_SRCONV
)) & SRC_BUSY
))
493 printk(KERN_DEBUG PFX
"sample rate converter timeout r = 0x%08x\n", r
);
497 static unsigned src_read(struct es1371_state
*s
, unsigned reg
)
499 unsigned int temp
,i
,orig
;
502 temp
= wait_src_ready (s
);
504 /* we can only access the SRC at certain times, make sure
505 we're allowed to before we read */
508 /* expose the SRC state bits */
509 outl ( (temp
& SRC_CTLMASK
) | (reg
<< SRC_RAMADDR_SHIFT
) | 0x10000UL
,
510 s
->io
+ ES1371_REG_SRCONV
);
512 /* now, wait for busy and the correct time to read */
513 temp
= wait_src_ready (s
);
515 if ( (temp
& 0x00870000UL
) != ( SRC_OKSTATE
<< 16 )){
516 /* wait for the right state */
517 for (i
=0; i
<POLL_COUNT
; i
++){
518 temp
= inl (s
->io
+ ES1371_REG_SRCONV
);
519 if ( (temp
& 0x00870000UL
) == ( SRC_OKSTATE
<< 16 ))
524 /* hide the state bits */
525 outl ((orig
& SRC_CTLMASK
) | (reg
<< SRC_RAMADDR_SHIFT
), s
->io
+ ES1371_REG_SRCONV
);
531 static void src_write(struct es1371_state
*s
, unsigned reg
, unsigned data
)
536 r
= wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC1
| SRC_DDAC2
| SRC_DADC
);
537 r
|= (reg
<< SRC_RAMADDR_SHIFT
) & SRC_RAMADDR_MASK
;
538 r
|= (data
<< SRC_RAMDATA_SHIFT
) & SRC_RAMDATA_MASK
;
539 outl(r
| SRC_WE
, s
->io
+ ES1371_REG_SRCONV
);
543 /* --------------------------------------------------------------------- */
545 /* most of the following here is black magic */
546 static void set_adc_rate(struct es1371_state
*s
, unsigned rate
)
549 unsigned int n
, truncm
, freq
;
556 if ((1 << n
) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
558 truncm
= (21 * n
- 1) | 1;
559 freq
= ((48000UL << 15) / rate
) * n
;
560 s
->adcrate
= (48000UL << 15) / (freq
/ n
);
561 spin_lock_irqsave(&s
->lock
, flags
);
565 src_write(s
, SRCREG_ADC
+SRCREG_TRUNC_N
,
566 (((239 - truncm
) >> 1) << 9) | (n
<< 4));
570 src_write(s
, SRCREG_ADC
+SRCREG_TRUNC_N
,
571 0x8000 | (((119 - truncm
) >> 1) << 9) | (n
<< 4));
573 src_write(s
, SRCREG_ADC
+SRCREG_INT_REGS
,
574 (src_read(s
, SRCREG_ADC
+SRCREG_INT_REGS
) & 0x00ff) |
575 ((freq
>> 5) & 0xfc00));
576 src_write(s
, SRCREG_ADC
+SRCREG_VFREQ_FRAC
, freq
& 0x7fff);
577 src_write(s
, SRCREG_VOL_ADC
, n
<< 8);
578 src_write(s
, SRCREG_VOL_ADC
+1, n
<< 8);
579 spin_unlock_irqrestore(&s
->lock
, flags
);
583 static void set_dac1_rate(struct es1371_state
*s
, unsigned rate
)
586 unsigned int freq
, r
;
592 freq
= ((rate
<< 15) + 1500) / 3000;
593 s
->dac1rate
= (freq
* 3000 + 16384) >> 15;
594 spin_lock_irqsave(&s
->lock
, flags
);
595 r
= (wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC2
| SRC_DADC
)) | SRC_DDAC1
;
596 outl(r
, s
->io
+ ES1371_REG_SRCONV
);
597 src_write(s
, SRCREG_DAC1
+SRCREG_INT_REGS
,
598 (src_read(s
, SRCREG_DAC1
+SRCREG_INT_REGS
) & 0x00ff) |
599 ((freq
>> 5) & 0xfc00));
600 src_write(s
, SRCREG_DAC1
+SRCREG_VFREQ_FRAC
, freq
& 0x7fff);
601 r
= (wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC2
| SRC_DADC
));
602 outl(r
, s
->io
+ ES1371_REG_SRCONV
);
603 spin_unlock_irqrestore(&s
->lock
, flags
);
606 static void set_dac2_rate(struct es1371_state
*s
, unsigned rate
)
609 unsigned int freq
, r
;
615 freq
= ((rate
<< 15) + 1500) / 3000;
616 s
->dac2rate
= (freq
* 3000 + 16384) >> 15;
617 spin_lock_irqsave(&s
->lock
, flags
);
618 r
= (wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC1
| SRC_DADC
)) | SRC_DDAC2
;
619 outl(r
, s
->io
+ ES1371_REG_SRCONV
);
620 src_write(s
, SRCREG_DAC2
+SRCREG_INT_REGS
,
621 (src_read(s
, SRCREG_DAC2
+SRCREG_INT_REGS
) & 0x00ff) |
622 ((freq
>> 5) & 0xfc00));
623 src_write(s
, SRCREG_DAC2
+SRCREG_VFREQ_FRAC
, freq
& 0x7fff);
624 r
= (wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC1
| SRC_DADC
));
625 outl(r
, s
->io
+ ES1371_REG_SRCONV
);
626 spin_unlock_irqrestore(&s
->lock
, flags
);
629 /* --------------------------------------------------------------------- */
631 static void __init
src_init(struct es1371_state
*s
)
635 /* before we enable or disable the SRC we need
636 to wait for it to become ready */
639 outl(SRC_DIS
, s
->io
+ ES1371_REG_SRCONV
);
641 for (i
= 0; i
< 0x80; i
++)
644 src_write(s
, SRCREG_DAC1
+SRCREG_TRUNC_N
, 16 << 4);
645 src_write(s
, SRCREG_DAC1
+SRCREG_INT_REGS
, 16 << 10);
646 src_write(s
, SRCREG_DAC2
+SRCREG_TRUNC_N
, 16 << 4);
647 src_write(s
, SRCREG_DAC2
+SRCREG_INT_REGS
, 16 << 10);
648 src_write(s
, SRCREG_VOL_ADC
, 1 << 12);
649 src_write(s
, SRCREG_VOL_ADC
+1, 1 << 12);
650 src_write(s
, SRCREG_VOL_DAC1
, 1 << 12);
651 src_write(s
, SRCREG_VOL_DAC1
+1, 1 << 12);
652 src_write(s
, SRCREG_VOL_DAC2
, 1 << 12);
653 src_write(s
, SRCREG_VOL_DAC2
+1, 1 << 12);
654 set_adc_rate(s
, 22050);
655 set_dac1_rate(s
, 22050);
656 set_dac2_rate(s
, 22050);
659 * enabling the sample rate converter without properly programming
660 * its parameters causes the chip to lock up (the SRC busy bit will
661 * be stuck high, and I've found no way to rectify this other than
665 outl(0, s
->io
+ES1371_REG_SRCONV
);
668 /* --------------------------------------------------------------------- */
670 static void wrcodec(struct ac97_codec
*codec
, u8 addr
, u16 data
)
672 struct es1371_state
*s
= (struct es1371_state
*)codec
->private_data
;
676 for (t
= 0; t
< POLL_COUNT
; t
++)
677 if (!(inl(s
->io
+ES1371_REG_CODEC
) & CODEC_WIP
))
679 spin_lock_irqsave(&s
->lock
, flags
);
681 /* save the current state for later */
682 x
= wait_src_ready(s
);
684 /* enable SRC state data in SRC mux */
685 outl((x
& (SRC_DIS
| SRC_DDAC1
| SRC_DDAC2
| SRC_DADC
)) | 0x00010000,
686 s
->io
+ES1371_REG_SRCONV
);
688 /* wait for not busy (state 0) first to avoid
690 for (t
=0; t
<POLL_COUNT
; t
++){
691 if((inl(s
->io
+ES1371_REG_SRCONV
) & 0x00870000) ==0 )
696 /* wait for a SAFE time to write addr/data and then do it, dammit */
697 for (t
=0; t
<POLL_COUNT
; t
++){
698 if((inl(s
->io
+ES1371_REG_SRCONV
) & 0x00870000) ==0x00010000)
703 outl(((addr
<< CODEC_POADD_SHIFT
) & CODEC_POADD_MASK
) |
704 ((data
<< CODEC_PODAT_SHIFT
) & CODEC_PODAT_MASK
), s
->io
+ES1371_REG_CODEC
);
706 /* restore SRC reg */
708 outl(x
, s
->io
+ES1371_REG_SRCONV
);
709 spin_unlock_irqrestore(&s
->lock
, flags
);
712 static u16
rdcodec(struct ac97_codec
*codec
, u8 addr
)
714 struct es1371_state
*s
= (struct es1371_state
*)codec
->private_data
;
718 /* wait for WIP to go away */
719 for (t
= 0; t
< 0x1000; t
++)
720 if (!(inl(s
->io
+ES1371_REG_CODEC
) & CODEC_WIP
))
722 spin_lock_irqsave(&s
->lock
, flags
);
724 /* save the current state for later */
725 x
= (wait_src_ready(s
) & (SRC_DIS
| SRC_DDAC1
| SRC_DDAC2
| SRC_DADC
));
727 /* enable SRC state data in SRC mux */
728 outl( x
| 0x00010000,
729 s
->io
+ES1371_REG_SRCONV
);
731 /* wait for not busy (state 0) first to avoid
733 for (t
=0; t
<POLL_COUNT
; t
++){
734 if((inl(s
->io
+ES1371_REG_SRCONV
) & 0x00870000) ==0 )
739 /* wait for a SAFE time to write addr/data and then do it, dammit */
740 for (t
=0; t
<POLL_COUNT
; t
++){
741 if((inl(s
->io
+ES1371_REG_SRCONV
) & 0x00870000) ==0x00010000)
746 outl(((addr
<< CODEC_POADD_SHIFT
) & CODEC_POADD_MASK
) | CODEC_PORD
, s
->io
+ES1371_REG_CODEC
);
747 /* restore SRC reg */
749 outl(x
, s
->io
+ES1371_REG_SRCONV
);
750 spin_unlock_irqrestore(&s
->lock
, flags
);
752 /* wait for WIP again */
753 for (t
= 0; t
< 0x1000; t
++)
754 if (!(inl(s
->io
+ES1371_REG_CODEC
) & CODEC_WIP
))
757 /* now wait for the stinkin' data (RDY) */
758 for (t
= 0; t
< POLL_COUNT
; t
++)
759 if ((x
= inl(s
->io
+ES1371_REG_CODEC
)) & CODEC_RDY
)
762 return ((x
& CODEC_PIDAT_MASK
) >> CODEC_PIDAT_SHIFT
);
765 /* --------------------------------------------------------------------- */
767 extern inline void stop_adc(struct es1371_state
*s
)
771 spin_lock_irqsave(&s
->lock
, flags
);
772 s
->ctrl
&= ~CTRL_ADC_EN
;
773 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
774 spin_unlock_irqrestore(&s
->lock
, flags
);
777 extern inline void stop_dac1(struct es1371_state
*s
)
781 spin_lock_irqsave(&s
->lock
, flags
);
782 s
->ctrl
&= ~CTRL_DAC1_EN
;
783 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
784 spin_unlock_irqrestore(&s
->lock
, flags
);
787 extern inline void stop_dac2(struct es1371_state
*s
)
791 spin_lock_irqsave(&s
->lock
, flags
);
792 s
->ctrl
&= ~CTRL_DAC2_EN
;
793 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
794 spin_unlock_irqrestore(&s
->lock
, flags
);
797 static void start_dac1(struct es1371_state
*s
)
800 unsigned fragremain
, fshift
;
802 spin_lock_irqsave(&s
->lock
, flags
);
803 if (!(s
->ctrl
& CTRL_DAC1_EN
) && (s
->dma_dac1
.mapped
|| s
->dma_dac1
.count
> 0)
804 && s
->dma_dac1
.ready
) {
805 s
->ctrl
|= CTRL_DAC1_EN
;
806 s
->sctrl
= (s
->sctrl
& ~(SCTRL_P1LOOPSEL
| SCTRL_P1PAUSE
| SCTRL_P1SCTRLD
)) | SCTRL_P1INTEN
;
807 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
808 fragremain
= ((- s
->dma_dac1
.hwptr
) & (s
->dma_dac1
.fragsize
-1));
809 fshift
= sample_shift
[(s
->sctrl
& SCTRL_P1FMT
) >> SCTRL_SH_P1FMT
];
810 if (fragremain
< 2*fshift
)
811 fragremain
= s
->dma_dac1
.fragsize
;
812 outl((fragremain
>> fshift
) - 1, s
->io
+ES1371_REG_DAC1_SCOUNT
);
813 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
814 outl((s
->dma_dac1
.fragsize
>> fshift
) - 1, s
->io
+ES1371_REG_DAC1_SCOUNT
);
816 spin_unlock_irqrestore(&s
->lock
, flags
);
819 static void start_dac2(struct es1371_state
*s
)
822 unsigned fragremain
, fshift
;
824 spin_lock_irqsave(&s
->lock
, flags
);
825 if (!(s
->ctrl
& CTRL_DAC2_EN
) && (s
->dma_dac2
.mapped
|| s
->dma_dac2
.count
> 0)
826 && s
->dma_dac2
.ready
) {
827 s
->ctrl
|= CTRL_DAC2_EN
;
828 s
->sctrl
= (s
->sctrl
& ~(SCTRL_P2LOOPSEL
| SCTRL_P2PAUSE
| SCTRL_P2DACSEN
|
829 SCTRL_P2ENDINC
| SCTRL_P2STINC
)) | SCTRL_P2INTEN
|
830 (((s
->sctrl
& SCTRL_P2FMT
) ? 2 : 1) << SCTRL_SH_P2ENDINC
) |
831 (0 << SCTRL_SH_P2STINC
);
832 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
833 fragremain
= ((- s
->dma_dac2
.hwptr
) & (s
->dma_dac2
.fragsize
-1));
834 fshift
= sample_shift
[(s
->sctrl
& SCTRL_P2FMT
) >> SCTRL_SH_P2FMT
];
835 if (fragremain
< 2*fshift
)
836 fragremain
= s
->dma_dac2
.fragsize
;
837 outl((fragremain
>> fshift
) - 1, s
->io
+ES1371_REG_DAC2_SCOUNT
);
838 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
839 outl((s
->dma_dac2
.fragsize
>> fshift
) - 1, s
->io
+ES1371_REG_DAC2_SCOUNT
);
841 spin_unlock_irqrestore(&s
->lock
, flags
);
844 static void start_adc(struct es1371_state
*s
)
847 unsigned fragremain
, fshift
;
849 spin_lock_irqsave(&s
->lock
, flags
);
850 if (!(s
->ctrl
& CTRL_ADC_EN
) && (s
->dma_adc
.mapped
|| s
->dma_adc
.count
< (signed)(s
->dma_adc
.dmasize
- 2*s
->dma_adc
.fragsize
))
851 && s
->dma_adc
.ready
) {
852 s
->ctrl
|= CTRL_ADC_EN
;
853 s
->sctrl
= (s
->sctrl
& ~SCTRL_R1LOOPSEL
) | SCTRL_R1INTEN
;
854 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
855 fragremain
= ((- s
->dma_adc
.hwptr
) & (s
->dma_adc
.fragsize
-1));
856 fshift
= sample_shift
[(s
->sctrl
& SCTRL_R1FMT
) >> SCTRL_SH_R1FMT
];
857 if (fragremain
< 2*fshift
)
858 fragremain
= s
->dma_adc
.fragsize
;
859 outl((fragremain
>> fshift
) - 1, s
->io
+ES1371_REG_ADC_SCOUNT
);
860 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
861 outl((s
->dma_adc
.fragsize
>> fshift
) - 1, s
->io
+ES1371_REG_ADC_SCOUNT
);
863 spin_unlock_irqrestore(&s
->lock
, flags
);
866 /* --------------------------------------------------------------------- */
868 #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
869 #define DMABUF_MINORDER 1
872 extern inline void dealloc_dmabuf(struct es1371_state
*s
, struct dmabuf
*db
)
874 struct page
*page
, *pend
;
877 /* undo marking the pages as reserved */
878 pend
= virt_to_page(db
->rawbuf
+ (PAGE_SIZE
<< db
->buforder
) - 1);
879 for (page
= virt_to_page(db
->rawbuf
); page
<= pend
; page
++)
880 mem_map_unreserve(page
);
881 pci_free_consistent(s
->dev
, PAGE_SIZE
<< db
->buforder
, db
->rawbuf
, db
->dmaaddr
);
884 db
->mapped
= db
->ready
= 0;
887 static int prog_dmabuf(struct es1371_state
*s
, struct dmabuf
*db
, unsigned rate
, unsigned fmt
, unsigned reg
)
892 struct page
*page
, *pend
;
894 db
->hwptr
= db
->swptr
= db
->total_bytes
= db
->count
= db
->error
= db
->endcleared
= 0;
896 db
->ready
= db
->mapped
= 0;
897 for (order
= DMABUF_DEFAULTORDER
; order
>= DMABUF_MINORDER
; order
--)
898 if ((db
->rawbuf
= pci_alloc_consistent(s
->dev
, PAGE_SIZE
<< order
, &db
->dmaaddr
)))
902 db
->buforder
= order
;
903 /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
904 pend
= virt_to_page(db
->rawbuf
+ (PAGE_SIZE
<< db
->buforder
) - 1);
905 for (page
= virt_to_page(db
->rawbuf
); page
<= pend
; page
++)
906 mem_map_reserve(page
);
908 fmt
&= ES1371_FMT_MASK
;
909 bytepersec
= rate
<< sample_shift
[fmt
];
910 bufs
= PAGE_SIZE
<< db
->buforder
;
911 if (db
->ossfragshift
) {
912 if ((1000 << db
->ossfragshift
) < bytepersec
)
913 db
->fragshift
= ld2(bytepersec
/1000);
915 db
->fragshift
= db
->ossfragshift
;
917 db
->fragshift
= ld2(bytepersec
/100/(db
->subdivision
? db
->subdivision
: 1));
918 if (db
->fragshift
< 3)
921 db
->numfrag
= bufs
>> db
->fragshift
;
922 while (db
->numfrag
< 4 && db
->fragshift
> 3) {
924 db
->numfrag
= bufs
>> db
->fragshift
;
926 db
->fragsize
= 1 << db
->fragshift
;
927 if (db
->ossmaxfrags
>= 4 && db
->ossmaxfrags
< db
->numfrag
)
928 db
->numfrag
= db
->ossmaxfrags
;
929 db
->fragsamples
= db
->fragsize
>> sample_shift
[fmt
];
930 db
->dmasize
= db
->numfrag
<< db
->fragshift
;
931 memset(db
->rawbuf
, (fmt
& ES1371_FMT_S16
) ? 0 : 0x80, db
->dmasize
);
932 outl((reg
>> 8) & 15, s
->io
+ES1371_REG_MEMPAGE
);
933 outl(db
->dmaaddr
, s
->io
+(reg
& 0xff));
934 outl((db
->dmasize
>> 2)-1, s
->io
+((reg
+ 4) & 0xff));
939 extern inline int prog_dmabuf_adc(struct es1371_state
*s
)
942 return prog_dmabuf(s
, &s
->dma_adc
, s
->adcrate
, (s
->sctrl
>> SCTRL_SH_R1FMT
) & ES1371_FMT_MASK
,
943 ES1371_REG_ADC_FRAMEADR
);
946 extern inline int prog_dmabuf_dac2(struct es1371_state
*s
)
949 return prog_dmabuf(s
, &s
->dma_dac2
, s
->dac2rate
, (s
->sctrl
>> SCTRL_SH_P2FMT
) & ES1371_FMT_MASK
,
950 ES1371_REG_DAC2_FRAMEADR
);
953 extern inline int prog_dmabuf_dac1(struct es1371_state
*s
)
956 return prog_dmabuf(s
, &s
->dma_dac1
, s
->dac1rate
, (s
->sctrl
>> SCTRL_SH_P1FMT
) & ES1371_FMT_MASK
,
957 ES1371_REG_DAC1_FRAMEADR
);
960 extern inline unsigned get_hwptr(struct es1371_state
*s
, struct dmabuf
*db
, unsigned reg
)
962 unsigned hwptr
, diff
;
964 outl((reg
>> 8) & 15, s
->io
+ES1371_REG_MEMPAGE
);
965 hwptr
= (inl(s
->io
+(reg
& 0xff)) >> 14) & 0x3fffc;
966 diff
= (db
->dmasize
+ hwptr
- db
->hwptr
) % db
->dmasize
;
971 extern inline void clear_advance(void *buf
, unsigned bsize
, unsigned bptr
, unsigned len
, unsigned char c
)
973 if (bptr
+ len
> bsize
) {
974 unsigned x
= bsize
- bptr
;
975 memset(((char *)buf
) + bptr
, c
, x
);
979 memset(((char *)buf
) + bptr
, c
, len
);
982 /* call with spinlock held! */
983 static void es1371_update_ptr(struct es1371_state
*s
)
987 /* update ADC pointer */
988 if (s
->ctrl
& CTRL_ADC_EN
) {
989 diff
= get_hwptr(s
, &s
->dma_adc
, ES1371_REG_ADC_FRAMECNT
);
990 s
->dma_adc
.total_bytes
+= diff
;
991 s
->dma_adc
.count
+= diff
;
992 if (s
->dma_adc
.count
>= (signed)s
->dma_adc
.fragsize
)
993 wake_up(&s
->dma_adc
.wait
);
994 if (!s
->dma_adc
.mapped
) {
995 if (s
->dma_adc
.count
> (signed)(s
->dma_adc
.dmasize
- ((3 * s
->dma_adc
.fragsize
) >> 1))) {
996 s
->ctrl
&= ~CTRL_ADC_EN
;
997 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
1002 /* update DAC1 pointer */
1003 if (s
->ctrl
& CTRL_DAC1_EN
) {
1004 diff
= get_hwptr(s
, &s
->dma_dac1
, ES1371_REG_DAC1_FRAMECNT
);
1005 s
->dma_dac1
.total_bytes
+= diff
;
1006 if (s
->dma_dac1
.mapped
) {
1007 s
->dma_dac1
.count
+= diff
;
1008 if (s
->dma_dac1
.count
>= (signed)s
->dma_dac1
.fragsize
)
1009 wake_up(&s
->dma_dac1
.wait
);
1011 s
->dma_dac1
.count
-= diff
;
1012 if (s
->dma_dac1
.count
<= 0) {
1013 s
->ctrl
&= ~CTRL_DAC1_EN
;
1014 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
1015 s
->dma_dac1
.error
++;
1016 } else if (s
->dma_dac1
.count
<= (signed)s
->dma_dac1
.fragsize
&& !s
->dma_dac1
.endcleared
) {
1017 clear_advance(s
->dma_dac1
.rawbuf
, s
->dma_dac1
.dmasize
, s
->dma_dac1
.swptr
,
1018 s
->dma_dac1
.fragsize
, (s
->sctrl
& SCTRL_P1SEB
) ? 0 : 0x80);
1019 s
->dma_dac1
.endcleared
= 1;
1021 if (s
->dma_dac1
.count
+ (signed)s
->dma_dac1
.fragsize
<= (signed)s
->dma_dac1
.dmasize
)
1022 wake_up(&s
->dma_dac1
.wait
);
1025 /* update DAC2 pointer */
1026 if (s
->ctrl
& CTRL_DAC2_EN
) {
1027 diff
= get_hwptr(s
, &s
->dma_dac2
, ES1371_REG_DAC2_FRAMECNT
);
1028 s
->dma_dac2
.total_bytes
+= diff
;
1029 if (s
->dma_dac2
.mapped
) {
1030 s
->dma_dac2
.count
+= diff
;
1031 if (s
->dma_dac2
.count
>= (signed)s
->dma_dac2
.fragsize
)
1032 wake_up(&s
->dma_dac2
.wait
);
1034 s
->dma_dac2
.count
-= diff
;
1035 if (s
->dma_dac2
.count
<= 0) {
1036 s
->ctrl
&= ~CTRL_DAC2_EN
;
1037 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
1038 s
->dma_dac2
.error
++;
1039 } else if (s
->dma_dac2
.count
<= (signed)s
->dma_dac2
.fragsize
&& !s
->dma_dac2
.endcleared
) {
1040 clear_advance(s
->dma_dac2
.rawbuf
, s
->dma_dac2
.dmasize
, s
->dma_dac2
.swptr
,
1041 s
->dma_dac2
.fragsize
, (s
->sctrl
& SCTRL_P2SEB
) ? 0 : 0x80);
1042 s
->dma_dac2
.endcleared
= 1;
1044 if (s
->dma_dac2
.count
+ (signed)s
->dma_dac2
.fragsize
<= (signed)s
->dma_dac2
.dmasize
)
1045 wake_up(&s
->dma_dac2
.wait
);
1050 /* hold spinlock for the following! */
1051 static void es1371_handle_midi(struct es1371_state
*s
)
1056 if (!(s
->ctrl
& CTRL_UART_EN
))
1059 while (inb(s
->io
+ES1371_REG_UART_STATUS
) & USTAT_RXRDY
) {
1060 ch
= inb(s
->io
+ES1371_REG_UART_DATA
);
1061 if (s
->midi
.icnt
< MIDIINBUF
) {
1062 s
->midi
.ibuf
[s
->midi
.iwr
] = ch
;
1063 s
->midi
.iwr
= (s
->midi
.iwr
+ 1) % MIDIINBUF
;
1069 wake_up(&s
->midi
.iwait
);
1071 while ((inb(s
->io
+ES1371_REG_UART_STATUS
) & USTAT_TXRDY
) && s
->midi
.ocnt
> 0) {
1072 outb(s
->midi
.obuf
[s
->midi
.ord
], s
->io
+ES1371_REG_UART_DATA
);
1073 s
->midi
.ord
= (s
->midi
.ord
+ 1) % MIDIOUTBUF
;
1075 if (s
->midi
.ocnt
< MIDIOUTBUF
-16)
1079 wake_up(&s
->midi
.owait
);
1080 outb((s
->midi
.ocnt
> 0) ? UCTRL_RXINTEN
| UCTRL_ENA_TXINT
: UCTRL_RXINTEN
, s
->io
+ES1371_REG_UART_CONTROL
);
1083 static void es1371_interrupt(int irq
, void *dev_id
, struct pt_regs
*regs
)
1085 struct es1371_state
*s
= (struct es1371_state
*)dev_id
;
1086 unsigned int intsrc
, sctl
;
1088 /* fastpath out, to ease interrupt sharing */
1089 intsrc
= inl(s
->io
+ES1371_REG_STATUS
);
1090 if (!(intsrc
& 0x80000000))
1092 spin_lock(&s
->lock
);
1093 /* clear audio interrupts first */
1095 if (intsrc
& STAT_ADC
)
1096 sctl
&= ~SCTRL_R1INTEN
;
1097 if (intsrc
& STAT_DAC1
)
1098 sctl
&= ~SCTRL_P1INTEN
;
1099 if (intsrc
& STAT_DAC2
)
1100 sctl
&= ~SCTRL_P2INTEN
;
1101 outl(sctl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1102 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1103 es1371_update_ptr(s
);
1104 es1371_handle_midi(s
);
1105 spin_unlock(&s
->lock
);
1108 /* --------------------------------------------------------------------- */
1110 static const char invalid_magic
[] = KERN_CRIT PFX
"invalid magic value\n";
1112 #define VALIDATE_STATE(s) \
1114 if (!(s) || (s)->magic != ES1371_MAGIC) { \
1115 printk(invalid_magic); \
1120 /* --------------------------------------------------------------------- */
1122 static loff_t
es1371_llseek(struct file
*file
, loff_t offset
, int origin
)
1127 /* --------------------------------------------------------------------- */
1129 /* Conversion table for S/PDIF PCM volume emulation through the SRC */
1130 /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */
1131 static const unsigned short DACVolTable
[101] =
1133 0x1000, 0x0f2a, 0x0e60, 0x0da0, 0x0cea, 0x0c3e, 0x0b9a, 0x0aff,
1134 0x0a6d, 0x09e1, 0x095e, 0x08e1, 0x086a, 0x07fa, 0x078f, 0x072a,
1135 0x06cb, 0x0670, 0x061a, 0x05c9, 0x057b, 0x0532, 0x04ed, 0x04ab,
1136 0x046d, 0x0432, 0x03fa, 0x03c5, 0x0392, 0x0363, 0x0335, 0x030b,
1137 0x02e2, 0x02bc, 0x0297, 0x0275, 0x0254, 0x0235, 0x0217, 0x01fb,
1138 0x01e1, 0x01c8, 0x01b0, 0x0199, 0x0184, 0x0170, 0x015d, 0x014b,
1139 0x0139, 0x0129, 0x0119, 0x010b, 0x00fd, 0x00f0, 0x00e3, 0x00d7,
1140 0x00cc, 0x00c1, 0x00b7, 0x00ae, 0x00a5, 0x009c, 0x0094, 0x008c,
1141 0x0085, 0x007e, 0x0077, 0x0071, 0x006b, 0x0066, 0x0060, 0x005b,
1142 0x0057, 0x0052, 0x004e, 0x004a, 0x0046, 0x0042, 0x003f, 0x003c,
1143 0x0038, 0x0036, 0x0033, 0x0030, 0x002e, 0x002b, 0x0029, 0x0027,
1144 0x0025, 0x0023, 0x0021, 0x001f, 0x001e, 0x001c, 0x001b, 0x0019,
1145 0x0018, 0x0017, 0x0016, 0x0014, 0x0000
1149 * when we are in S/PDIF mode, we want to disable any analog output so
1150 * we filter the mixer ioctls
1152 static int mixdev_ioctl(struct ac97_codec
*codec
, unsigned int cmd
, unsigned long arg
)
1154 struct es1371_state
*s
= (struct es1371_state
*)codec
->private_data
;
1156 unsigned long flags
;
1157 unsigned int left
, right
;
1160 /* filter mixer ioctls to catch PCM and MASTER volume when in S/PDIF mode */
1161 if (s
->spdif_volume
== -1)
1162 return codec
->mixer_ioctl(codec
, cmd
, arg
);
1164 case SOUND_MIXER_WRITE_VOLUME
:
1167 case SOUND_MIXER_WRITE_PCM
: /* use SRC for PCM volume */
1168 if (get_user(val
, (int *)arg
))
1170 right
= ((val
>> 8) & 0xff);
1171 left
= (val
& 0xff);
1176 s
->spdif_volume
= (right
<< 8) | left
;
1177 spin_lock_irqsave(&s
->lock
, flags
);
1178 src_write(s
, SRCREG_VOL_DAC2
, DACVolTable
[100 - left
]);
1179 src_write(s
, SRCREG_VOL_DAC2
+1, DACVolTable
[100 - right
]);
1180 spin_unlock_irqrestore(&s
->lock
, flags
);
1183 case SOUND_MIXER_READ_PCM
:
1184 return put_user(s
->spdif_volume
, (int *)arg
);
1186 return codec
->mixer_ioctl(codec
, cmd
, arg
);
1189 /* --------------------------------------------------------------------- */
1192 * AC97 Mixer Register to Connections mapping of the Concert 97 board
1194 * AC97_MASTER_VOL_STEREO Line Out
1195 * AC97_MASTER_VOL_MONO TAD Output
1196 * AC97_PCBEEP_VOL none
1197 * AC97_PHONE_VOL TAD Input (mono)
1198 * AC97_MIC_VOL MIC Input (mono)
1199 * AC97_LINEIN_VOL Line Input (stereo)
1200 * AC97_CD_VOL CD Input (stereo)
1201 * AC97_VIDEO_VOL none
1202 * AC97_AUX_VOL Aux Input (stereo)
1203 * AC97_PCMOUT_VOL Wave Output (stereo)
1206 static int es1371_open_mixdev(struct inode
*inode
, struct file
*file
)
1208 int minor
= MINOR(inode
->i_rdev
);
1209 struct list_head
*list
;
1210 struct es1371_state
*s
;
1212 for (list
= devs
.next
; ; list
= list
->next
) {
1215 s
= list_entry(list
, struct es1371_state
, devs
);
1216 if (s
->codec
.dev_mixer
== minor
)
1220 file
->private_data
= s
;
1224 static int es1371_release_mixdev(struct inode
*inode
, struct file
*file
)
1226 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1232 static int es1371_ioctl_mixdev(struct inode
*inode
, struct file
*file
, unsigned int cmd
, unsigned long arg
)
1234 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1235 struct ac97_codec
*codec
= &s
->codec
;
1237 return mixdev_ioctl(codec
, cmd
, arg
);
1240 static /*const*/ struct file_operations es1371_mixer_fops
= {
1242 llseek
: es1371_llseek
,
1243 ioctl
: es1371_ioctl_mixdev
,
1244 open
: es1371_open_mixdev
,
1245 release
: es1371_release_mixdev
,
1248 /* --------------------------------------------------------------------- */
1250 static int drain_dac1(struct es1371_state
*s
, int nonblock
)
1252 DECLARE_WAITQUEUE(wait
, current
);
1253 unsigned long flags
;
1256 if (s
->dma_dac1
.mapped
|| !s
->dma_dac1
.ready
)
1258 add_wait_queue(&s
->dma_dac1
.wait
, &wait
);
1260 __set_current_state(TASK_INTERRUPTIBLE
);
1261 spin_lock_irqsave(&s
->lock
, flags
);
1262 count
= s
->dma_dac1
.count
;
1263 spin_unlock_irqrestore(&s
->lock
, flags
);
1266 if (signal_pending(current
))
1269 remove_wait_queue(&s
->dma_dac1
.wait
, &wait
);
1270 set_current_state(TASK_RUNNING
);
1273 tmo
= 3 * HZ
* (count
+ s
->dma_dac1
.fragsize
) / 2 / s
->dac1rate
;
1274 tmo
>>= sample_shift
[(s
->sctrl
& SCTRL_P1FMT
) >> SCTRL_SH_P1FMT
];
1275 if (!schedule_timeout(tmo
+ 1))
1276 DBG(printk(KERN_DEBUG PFX
"dac1 dma timed out??\n");)
1278 remove_wait_queue(&s
->dma_dac1
.wait
, &wait
);
1279 set_current_state(TASK_RUNNING
);
1280 if (signal_pending(current
))
1281 return -ERESTARTSYS
;
1285 static int drain_dac2(struct es1371_state
*s
, int nonblock
)
1287 DECLARE_WAITQUEUE(wait
, current
);
1288 unsigned long flags
;
1291 if (s
->dma_dac2
.mapped
|| !s
->dma_dac2
.ready
)
1293 add_wait_queue(&s
->dma_dac2
.wait
, &wait
);
1295 __set_current_state(TASK_UNINTERRUPTIBLE
);
1296 spin_lock_irqsave(&s
->lock
, flags
);
1297 count
= s
->dma_dac2
.count
;
1298 spin_unlock_irqrestore(&s
->lock
, flags
);
1301 if (signal_pending(current
))
1304 remove_wait_queue(&s
->dma_dac2
.wait
, &wait
);
1305 set_current_state(TASK_RUNNING
);
1308 tmo
= 3 * HZ
* (count
+ s
->dma_dac2
.fragsize
) / 2 / s
->dac2rate
;
1309 tmo
>>= sample_shift
[(s
->sctrl
& SCTRL_P2FMT
) >> SCTRL_SH_P2FMT
];
1310 if (!schedule_timeout(tmo
+ 1))
1311 DBG(printk(KERN_DEBUG PFX
"dac2 dma timed out??\n");)
1313 remove_wait_queue(&s
->dma_dac2
.wait
, &wait
);
1314 set_current_state(TASK_RUNNING
);
1315 if (signal_pending(current
))
1316 return -ERESTARTSYS
;
1320 /* --------------------------------------------------------------------- */
1322 static ssize_t
es1371_read(struct file
*file
, char *buffer
, size_t count
, loff_t
*ppos
)
1324 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1325 DECLARE_WAITQUEUE(wait
, current
);
1327 unsigned long flags
;
1332 if (ppos
!= &file
->f_pos
)
1334 if (s
->dma_adc
.mapped
)
1336 if (!s
->dma_adc
.ready
&& (ret
= prog_dmabuf_adc(s
)))
1338 if (!access_ok(VERIFY_WRITE
, buffer
, count
))
1341 add_wait_queue(&s
->dma_adc
.wait
, &wait
);
1343 spin_lock_irqsave(&s
->lock
, flags
);
1344 swptr
= s
->dma_adc
.swptr
;
1345 cnt
= s
->dma_adc
.dmasize
-swptr
;
1346 if (s
->dma_adc
.count
< cnt
)
1347 cnt
= s
->dma_adc
.count
;
1349 __set_current_state(TASK_INTERRUPTIBLE
);
1350 spin_unlock_irqrestore(&s
->lock
, flags
);
1355 if (file
->f_flags
& O_NONBLOCK
) {
1361 if (signal_pending(current
)) {
1368 if (copy_to_user(buffer
, s
->dma_adc
.rawbuf
+ swptr
, cnt
)) {
1373 swptr
= (swptr
+ cnt
) % s
->dma_adc
.dmasize
;
1374 spin_lock_irqsave(&s
->lock
, flags
);
1375 s
->dma_adc
.swptr
= swptr
;
1376 s
->dma_adc
.count
-= cnt
;
1377 spin_unlock_irqrestore(&s
->lock
, flags
);
1383 remove_wait_queue(&s
->dma_adc
.wait
, &wait
);
1384 set_current_state(TASK_RUNNING
);
1388 static ssize_t
es1371_write(struct file
*file
, const char *buffer
, size_t count
, loff_t
*ppos
)
1390 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1391 DECLARE_WAITQUEUE(wait
, current
);
1393 unsigned long flags
;
1398 if (ppos
!= &file
->f_pos
)
1400 if (s
->dma_dac2
.mapped
)
1402 if (!s
->dma_dac2
.ready
&& (ret
= prog_dmabuf_dac2(s
)))
1404 if (!access_ok(VERIFY_READ
, buffer
, count
))
1407 add_wait_queue(&s
->dma_dac2
.wait
, &wait
);
1409 spin_lock_irqsave(&s
->lock
, flags
);
1410 if (s
->dma_dac2
.count
< 0) {
1411 s
->dma_dac2
.count
= 0;
1412 s
->dma_dac2
.swptr
= s
->dma_dac2
.hwptr
;
1414 swptr
= s
->dma_dac2
.swptr
;
1415 cnt
= s
->dma_dac2
.dmasize
-swptr
;
1416 if (s
->dma_dac2
.count
+ cnt
> s
->dma_dac2
.dmasize
)
1417 cnt
= s
->dma_dac2
.dmasize
- s
->dma_dac2
.count
;
1419 __set_current_state(TASK_INTERRUPTIBLE
);
1420 spin_unlock_irqrestore(&s
->lock
, flags
);
1425 if (file
->f_flags
& O_NONBLOCK
) {
1431 if (signal_pending(current
)) {
1438 if (copy_from_user(s
->dma_dac2
.rawbuf
+ swptr
, buffer
, cnt
)) {
1443 swptr
= (swptr
+ cnt
) % s
->dma_dac2
.dmasize
;
1444 spin_lock_irqsave(&s
->lock
, flags
);
1445 s
->dma_dac2
.swptr
= swptr
;
1446 s
->dma_dac2
.count
+= cnt
;
1447 s
->dma_dac2
.endcleared
= 0;
1448 spin_unlock_irqrestore(&s
->lock
, flags
);
1454 remove_wait_queue(&s
->dma_dac2
.wait
, &wait
);
1455 set_current_state(TASK_RUNNING
);
1459 /* No kernel lock - we have our own spinlock */
1460 static unsigned int es1371_poll(struct file
*file
, struct poll_table_struct
*wait
)
1462 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1463 unsigned long flags
;
1464 unsigned int mask
= 0;
1467 if (file
->f_mode
& FMODE_WRITE
) {
1468 if (!s
->dma_dac2
.ready
&& prog_dmabuf_dac2(s
))
1470 poll_wait(file
, &s
->dma_dac2
.wait
, wait
);
1472 if (file
->f_mode
& FMODE_READ
) {
1473 if (!s
->dma_adc
.ready
&& prog_dmabuf_adc(s
))
1475 poll_wait(file
, &s
->dma_adc
.wait
, wait
);
1477 spin_lock_irqsave(&s
->lock
, flags
);
1478 es1371_update_ptr(s
);
1479 if (file
->f_mode
& FMODE_READ
) {
1480 if (s
->dma_adc
.count
>= (signed)s
->dma_adc
.fragsize
)
1481 mask
|= POLLIN
| POLLRDNORM
;
1483 if (file
->f_mode
& FMODE_WRITE
) {
1484 if (s
->dma_dac2
.mapped
) {
1485 if (s
->dma_dac2
.count
>= (signed)s
->dma_dac2
.fragsize
)
1486 mask
|= POLLOUT
| POLLWRNORM
;
1488 if ((signed)s
->dma_dac2
.dmasize
>= s
->dma_dac2
.count
+ (signed)s
->dma_dac2
.fragsize
)
1489 mask
|= POLLOUT
| POLLWRNORM
;
1492 spin_unlock_irqrestore(&s
->lock
, flags
);
1496 static int es1371_mmap(struct file
*file
, struct vm_area_struct
*vma
)
1498 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1505 if (vma
->vm_flags
& VM_WRITE
) {
1506 if ((ret
= prog_dmabuf_dac2(s
)) != 0) {
1511 } else if (vma
->vm_flags
& VM_READ
) {
1512 if ((ret
= prog_dmabuf_adc(s
)) != 0) {
1521 if (vma
->vm_pgoff
!= 0) {
1525 size
= vma
->vm_end
- vma
->vm_start
;
1526 if (size
> (PAGE_SIZE
<< db
->buforder
)) {
1530 if (remap_page_range(vma
->vm_start
, virt_to_phys(db
->rawbuf
), size
, vma
->vm_page_prot
)) {
1539 static int es1371_ioctl(struct inode
*inode
, struct file
*file
, unsigned int cmd
, unsigned long arg
)
1541 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1542 unsigned long flags
;
1543 audio_buf_info abinfo
;
1546 int val
, mapped
, ret
;
1549 mapped
= ((file
->f_mode
& FMODE_WRITE
) && s
->dma_dac2
.mapped
) ||
1550 ((file
->f_mode
& FMODE_READ
) && s
->dma_adc
.mapped
);
1552 case OSS_GETVERSION
:
1553 return put_user(SOUND_VERSION
, (int *)arg
);
1555 case SNDCTL_DSP_SYNC
:
1556 if (file
->f_mode
& FMODE_WRITE
)
1557 return drain_dac2(s
, 0/*file->f_flags & O_NONBLOCK*/);
1560 case SNDCTL_DSP_SETDUPLEX
:
1563 case SNDCTL_DSP_GETCAPS
:
1564 return put_user(DSP_CAP_DUPLEX
| DSP_CAP_REALTIME
| DSP_CAP_TRIGGER
| DSP_CAP_MMAP
, (int *)arg
);
1566 case SNDCTL_DSP_RESET
:
1567 if (file
->f_mode
& FMODE_WRITE
) {
1570 s
->dma_dac2
.swptr
= s
->dma_dac2
.hwptr
= s
->dma_dac2
.count
= s
->dma_dac2
.total_bytes
= 0;
1572 if (file
->f_mode
& FMODE_READ
) {
1575 s
->dma_adc
.swptr
= s
->dma_adc
.hwptr
= s
->dma_adc
.count
= s
->dma_adc
.total_bytes
= 0;
1579 case SNDCTL_DSP_SPEED
:
1580 if (get_user(val
, (int *)arg
))
1583 if (file
->f_mode
& FMODE_READ
) {
1585 s
->dma_adc
.ready
= 0;
1586 set_adc_rate(s
, val
);
1588 if (file
->f_mode
& FMODE_WRITE
) {
1590 s
->dma_dac2
.ready
= 0;
1591 set_dac2_rate(s
, val
);
1594 return put_user((file
->f_mode
& FMODE_READ
) ? s
->adcrate
: s
->dac2rate
, (int *)arg
);
1596 case SNDCTL_DSP_STEREO
:
1597 if (get_user(val
, (int *)arg
))
1599 if (file
->f_mode
& FMODE_READ
) {
1601 s
->dma_adc
.ready
= 0;
1602 spin_lock_irqsave(&s
->lock
, flags
);
1604 s
->sctrl
|= SCTRL_R1SMB
;
1606 s
->sctrl
&= ~SCTRL_R1SMB
;
1607 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1608 spin_unlock_irqrestore(&s
->lock
, flags
);
1610 if (file
->f_mode
& FMODE_WRITE
) {
1612 s
->dma_dac2
.ready
= 0;
1613 spin_lock_irqsave(&s
->lock
, flags
);
1615 s
->sctrl
|= SCTRL_P2SMB
;
1617 s
->sctrl
&= ~SCTRL_P2SMB
;
1618 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1619 spin_unlock_irqrestore(&s
->lock
, flags
);
1623 case SNDCTL_DSP_CHANNELS
:
1624 if (get_user(val
, (int *)arg
))
1627 if (file
->f_mode
& FMODE_READ
) {
1629 s
->dma_adc
.ready
= 0;
1630 spin_lock_irqsave(&s
->lock
, flags
);
1632 s
->sctrl
|= SCTRL_R1SMB
;
1634 s
->sctrl
&= ~SCTRL_R1SMB
;
1635 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1636 spin_unlock_irqrestore(&s
->lock
, flags
);
1638 if (file
->f_mode
& FMODE_WRITE
) {
1640 s
->dma_dac2
.ready
= 0;
1641 spin_lock_irqsave(&s
->lock
, flags
);
1643 s
->sctrl
|= SCTRL_P2SMB
;
1645 s
->sctrl
&= ~SCTRL_P2SMB
;
1646 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1647 spin_unlock_irqrestore(&s
->lock
, flags
);
1650 return put_user((s
->sctrl
& ((file
->f_mode
& FMODE_READ
) ? SCTRL_R1SMB
: SCTRL_P2SMB
)) ? 2 : 1, (int *)arg
);
1652 case SNDCTL_DSP_GETFMTS
: /* Returns a mask */
1653 return put_user(AFMT_S16_LE
|AFMT_U8
, (int *)arg
);
1655 case SNDCTL_DSP_SETFMT
: /* Selects ONE fmt*/
1656 if (get_user(val
, (int *)arg
))
1658 if (val
!= AFMT_QUERY
) {
1659 if (file
->f_mode
& FMODE_READ
) {
1661 s
->dma_adc
.ready
= 0;
1662 spin_lock_irqsave(&s
->lock
, flags
);
1663 if (val
== AFMT_S16_LE
)
1664 s
->sctrl
|= SCTRL_R1SEB
;
1666 s
->sctrl
&= ~SCTRL_R1SEB
;
1667 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1668 spin_unlock_irqrestore(&s
->lock
, flags
);
1670 if (file
->f_mode
& FMODE_WRITE
) {
1672 s
->dma_dac2
.ready
= 0;
1673 spin_lock_irqsave(&s
->lock
, flags
);
1674 if (val
== AFMT_S16_LE
)
1675 s
->sctrl
|= SCTRL_P2SEB
;
1677 s
->sctrl
&= ~SCTRL_P2SEB
;
1678 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1679 spin_unlock_irqrestore(&s
->lock
, flags
);
1682 return put_user((s
->sctrl
& ((file
->f_mode
& FMODE_READ
) ? SCTRL_R1SEB
: SCTRL_P2SEB
)) ?
1683 AFMT_S16_LE
: AFMT_U8
, (int *)arg
);
1685 case SNDCTL_DSP_POST
:
1688 case SNDCTL_DSP_GETTRIGGER
:
1690 if (file
->f_mode
& FMODE_READ
&& s
->ctrl
& CTRL_ADC_EN
)
1691 val
|= PCM_ENABLE_INPUT
;
1692 if (file
->f_mode
& FMODE_WRITE
&& s
->ctrl
& CTRL_DAC2_EN
)
1693 val
|= PCM_ENABLE_OUTPUT
;
1694 return put_user(val
, (int *)arg
);
1696 case SNDCTL_DSP_SETTRIGGER
:
1697 if (get_user(val
, (int *)arg
))
1699 if (file
->f_mode
& FMODE_READ
) {
1700 if (val
& PCM_ENABLE_INPUT
) {
1701 if (!s
->dma_adc
.ready
&& (ret
= prog_dmabuf_adc(s
)))
1707 if (file
->f_mode
& FMODE_WRITE
) {
1708 if (val
& PCM_ENABLE_OUTPUT
) {
1709 if (!s
->dma_dac2
.ready
&& (ret
= prog_dmabuf_dac2(s
)))
1717 case SNDCTL_DSP_GETOSPACE
:
1718 if (!(file
->f_mode
& FMODE_WRITE
))
1720 if (!s
->dma_dac2
.ready
&& (ret
= prog_dmabuf_dac2(s
)))
1722 spin_lock_irqsave(&s
->lock
, flags
);
1723 es1371_update_ptr(s
);
1724 abinfo
.fragsize
= s
->dma_dac2
.fragsize
;
1725 count
= s
->dma_dac2
.count
;
1728 abinfo
.bytes
= s
->dma_dac2
.dmasize
- count
;
1729 abinfo
.fragstotal
= s
->dma_dac2
.numfrag
;
1730 abinfo
.fragments
= abinfo
.bytes
>> s
->dma_dac2
.fragshift
;
1731 spin_unlock_irqrestore(&s
->lock
, flags
);
1732 return copy_to_user((void *)arg
, &abinfo
, sizeof(abinfo
)) ? -EFAULT
: 0;
1734 case SNDCTL_DSP_GETISPACE
:
1735 if (!(file
->f_mode
& FMODE_READ
))
1737 if (!s
->dma_adc
.ready
&& (ret
= prog_dmabuf_adc(s
)))
1739 spin_lock_irqsave(&s
->lock
, flags
);
1740 es1371_update_ptr(s
);
1741 abinfo
.fragsize
= s
->dma_adc
.fragsize
;
1742 count
= s
->dma_adc
.count
;
1745 abinfo
.bytes
= count
;
1746 abinfo
.fragstotal
= s
->dma_adc
.numfrag
;
1747 abinfo
.fragments
= abinfo
.bytes
>> s
->dma_adc
.fragshift
;
1748 spin_unlock_irqrestore(&s
->lock
, flags
);
1749 return copy_to_user((void *)arg
, &abinfo
, sizeof(abinfo
)) ? -EFAULT
: 0;
1751 case SNDCTL_DSP_NONBLOCK
:
1752 file
->f_flags
|= O_NONBLOCK
;
1755 case SNDCTL_DSP_GETODELAY
:
1756 if (!(file
->f_mode
& FMODE_WRITE
))
1758 if (!s
->dma_dac2
.ready
&& (ret
= prog_dmabuf_dac2(s
)))
1760 spin_lock_irqsave(&s
->lock
, flags
);
1761 es1371_update_ptr(s
);
1762 count
= s
->dma_dac2
.count
;
1763 spin_unlock_irqrestore(&s
->lock
, flags
);
1766 return put_user(count
, (int *)arg
);
1768 case SNDCTL_DSP_GETIPTR
:
1769 if (!(file
->f_mode
& FMODE_READ
))
1771 if (!s
->dma_adc
.ready
&& (ret
= prog_dmabuf_adc(s
)))
1773 spin_lock_irqsave(&s
->lock
, flags
);
1774 es1371_update_ptr(s
);
1775 cinfo
.bytes
= s
->dma_adc
.total_bytes
;
1776 count
= s
->dma_adc
.count
;
1779 cinfo
.blocks
= count
>> s
->dma_adc
.fragshift
;
1780 cinfo
.ptr
= s
->dma_adc
.hwptr
;
1781 if (s
->dma_adc
.mapped
)
1782 s
->dma_adc
.count
&= s
->dma_adc
.fragsize
-1;
1783 spin_unlock_irqrestore(&s
->lock
, flags
);
1784 return copy_to_user((void *)arg
, &cinfo
, sizeof(cinfo
));
1786 case SNDCTL_DSP_GETOPTR
:
1787 if (!(file
->f_mode
& FMODE_WRITE
))
1789 if (!s
->dma_dac2
.ready
&& (ret
= prog_dmabuf_dac2(s
)))
1791 spin_lock_irqsave(&s
->lock
, flags
);
1792 es1371_update_ptr(s
);
1793 cinfo
.bytes
= s
->dma_dac2
.total_bytes
;
1794 count
= s
->dma_dac2
.count
;
1797 cinfo
.blocks
= count
>> s
->dma_dac2
.fragshift
;
1798 cinfo
.ptr
= s
->dma_dac2
.hwptr
;
1799 if (s
->dma_dac2
.mapped
)
1800 s
->dma_dac2
.count
&= s
->dma_dac2
.fragsize
-1;
1801 spin_unlock_irqrestore(&s
->lock
, flags
);
1802 return copy_to_user((void *)arg
, &cinfo
, sizeof(cinfo
));
1804 case SNDCTL_DSP_GETBLKSIZE
:
1805 if (file
->f_mode
& FMODE_WRITE
) {
1806 if ((val
= prog_dmabuf_dac2(s
)))
1808 return put_user(s
->dma_dac2
.fragsize
, (int *)arg
);
1810 if ((val
= prog_dmabuf_adc(s
)))
1812 return put_user(s
->dma_adc
.fragsize
, (int *)arg
);
1814 case SNDCTL_DSP_SETFRAGMENT
:
1815 if (get_user(val
, (int *)arg
))
1817 if (file
->f_mode
& FMODE_READ
) {
1818 s
->dma_adc
.ossfragshift
= val
& 0xffff;
1819 s
->dma_adc
.ossmaxfrags
= (val
>> 16) & 0xffff;
1820 if (s
->dma_adc
.ossfragshift
< 4)
1821 s
->dma_adc
.ossfragshift
= 4;
1822 if (s
->dma_adc
.ossfragshift
> 15)
1823 s
->dma_adc
.ossfragshift
= 15;
1824 if (s
->dma_adc
.ossmaxfrags
< 4)
1825 s
->dma_adc
.ossmaxfrags
= 4;
1827 if (file
->f_mode
& FMODE_WRITE
) {
1828 s
->dma_dac2
.ossfragshift
= val
& 0xffff;
1829 s
->dma_dac2
.ossmaxfrags
= (val
>> 16) & 0xffff;
1830 if (s
->dma_dac2
.ossfragshift
< 4)
1831 s
->dma_dac2
.ossfragshift
= 4;
1832 if (s
->dma_dac2
.ossfragshift
> 15)
1833 s
->dma_dac2
.ossfragshift
= 15;
1834 if (s
->dma_dac2
.ossmaxfrags
< 4)
1835 s
->dma_dac2
.ossmaxfrags
= 4;
1839 case SNDCTL_DSP_SUBDIVIDE
:
1840 if ((file
->f_mode
& FMODE_READ
&& s
->dma_adc
.subdivision
) ||
1841 (file
->f_mode
& FMODE_WRITE
&& s
->dma_dac2
.subdivision
))
1843 if (get_user(val
, (int *)arg
))
1845 if (val
!= 1 && val
!= 2 && val
!= 4)
1847 if (file
->f_mode
& FMODE_READ
)
1848 s
->dma_adc
.subdivision
= val
;
1849 if (file
->f_mode
& FMODE_WRITE
)
1850 s
->dma_dac2
.subdivision
= val
;
1853 case SOUND_PCM_READ_RATE
:
1854 return put_user((file
->f_mode
& FMODE_READ
) ? s
->adcrate
: s
->dac2rate
, (int *)arg
);
1856 case SOUND_PCM_READ_CHANNELS
:
1857 return put_user((s
->sctrl
& ((file
->f_mode
& FMODE_READ
) ? SCTRL_R1SMB
: SCTRL_P2SMB
)) ? 2 : 1, (int *)arg
);
1859 case SOUND_PCM_READ_BITS
:
1860 return put_user((s
->sctrl
& ((file
->f_mode
& FMODE_READ
) ? SCTRL_R1SEB
: SCTRL_P2SEB
)) ? 16 : 8, (int *)arg
);
1862 case SOUND_PCM_WRITE_FILTER
:
1863 case SNDCTL_DSP_SETSYNCRO
:
1864 case SOUND_PCM_READ_FILTER
:
1868 return mixdev_ioctl(&s
->codec
, cmd
, arg
);
1871 static int es1371_open(struct inode
*inode
, struct file
*file
)
1873 int minor
= MINOR(inode
->i_rdev
);
1874 DECLARE_WAITQUEUE(wait
, current
);
1875 unsigned long flags
;
1876 struct list_head
*list
;
1877 struct es1371_state
*s
;
1879 for (list
= devs
.next
; ; list
= list
->next
) {
1882 s
= list_entry(list
, struct es1371_state
, devs
);
1883 if (!((s
->dev_audio
^ minor
) & ~0xf))
1887 file
->private_data
= s
;
1888 /* wait for device to become free */
1890 while (s
->open_mode
& file
->f_mode
) {
1891 if (file
->f_flags
& O_NONBLOCK
) {
1895 add_wait_queue(&s
->open_wait
, &wait
);
1896 __set_current_state(TASK_INTERRUPTIBLE
);
1899 remove_wait_queue(&s
->open_wait
, &wait
);
1900 set_current_state(TASK_RUNNING
);
1901 if (signal_pending(current
))
1902 return -ERESTARTSYS
;
1905 if (file
->f_mode
& FMODE_READ
) {
1906 s
->dma_adc
.ossfragshift
= s
->dma_adc
.ossmaxfrags
= s
->dma_adc
.subdivision
= 0;
1907 set_adc_rate(s
, 8000);
1909 if (file
->f_mode
& FMODE_WRITE
) {
1910 s
->dma_dac2
.ossfragshift
= s
->dma_dac2
.ossmaxfrags
= s
->dma_dac2
.subdivision
= 0;
1911 set_dac2_rate(s
, 8000);
1913 spin_lock_irqsave(&s
->lock
, flags
);
1914 if (file
->f_mode
& FMODE_READ
) {
1915 s
->sctrl
&= ~SCTRL_R1FMT
;
1916 if ((minor
& 0xf) == SND_DEV_DSP16
)
1917 s
->sctrl
|= ES1371_FMT_S16_MONO
<< SCTRL_SH_R1FMT
;
1919 s
->sctrl
|= ES1371_FMT_U8_MONO
<< SCTRL_SH_R1FMT
;
1921 if (file
->f_mode
& FMODE_WRITE
) {
1922 s
->sctrl
&= ~SCTRL_P2FMT
;
1923 if ((minor
& 0xf) == SND_DEV_DSP16
)
1924 s
->sctrl
|= ES1371_FMT_S16_MONO
<< SCTRL_SH_P2FMT
;
1926 s
->sctrl
|= ES1371_FMT_U8_MONO
<< SCTRL_SH_P2FMT
;
1928 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
1929 spin_unlock_irqrestore(&s
->lock
, flags
);
1930 s
->open_mode
|= file
->f_mode
& (FMODE_READ
| FMODE_WRITE
);
1935 static int es1371_release(struct inode
*inode
, struct file
*file
)
1937 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1941 if (file
->f_mode
& FMODE_WRITE
)
1942 drain_dac2(s
, file
->f_flags
& O_NONBLOCK
);
1944 if (file
->f_mode
& FMODE_WRITE
) {
1946 dealloc_dmabuf(s
, &s
->dma_dac2
);
1948 if (file
->f_mode
& FMODE_READ
) {
1950 dealloc_dmabuf(s
, &s
->dma_adc
);
1952 s
->open_mode
&= (~file
->f_mode
) & (FMODE_READ
|FMODE_WRITE
);
1954 wake_up(&s
->open_wait
);
1959 static /*const*/ struct file_operations es1371_audio_fops
= {
1961 llseek
: es1371_llseek
,
1963 write
: es1371_write
,
1965 ioctl
: es1371_ioctl
,
1968 release
: es1371_release
,
1971 /* --------------------------------------------------------------------- */
1973 static ssize_t
es1371_write_dac(struct file
*file
, const char *buffer
, size_t count
, loff_t
*ppos
)
1975 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
1976 DECLARE_WAITQUEUE(wait
, current
);
1978 unsigned long flags
;
1983 if (ppos
!= &file
->f_pos
)
1985 if (s
->dma_dac1
.mapped
)
1987 if (!s
->dma_dac1
.ready
&& (ret
= prog_dmabuf_dac1(s
)))
1989 if (!access_ok(VERIFY_READ
, buffer
, count
))
1991 add_wait_queue(&s
->dma_dac1
.wait
, &wait
);
1993 spin_lock_irqsave(&s
->lock
, flags
);
1994 if (s
->dma_dac1
.count
< 0) {
1995 s
->dma_dac1
.count
= 0;
1996 s
->dma_dac1
.swptr
= s
->dma_dac1
.hwptr
;
1998 swptr
= s
->dma_dac1
.swptr
;
1999 cnt
= s
->dma_dac1
.dmasize
-swptr
;
2000 if (s
->dma_dac1
.count
+ cnt
> s
->dma_dac1
.dmasize
)
2001 cnt
= s
->dma_dac1
.dmasize
- s
->dma_dac1
.count
;
2003 __set_current_state(TASK_INTERRUPTIBLE
);
2004 spin_unlock_irqrestore(&s
->lock
, flags
);
2009 if (file
->f_flags
& O_NONBLOCK
) {
2015 if (signal_pending(current
)) {
2022 if (copy_from_user(s
->dma_dac1
.rawbuf
+ swptr
, buffer
, cnt
)) {
2027 swptr
= (swptr
+ cnt
) % s
->dma_dac1
.dmasize
;
2028 spin_lock_irqsave(&s
->lock
, flags
);
2029 s
->dma_dac1
.swptr
= swptr
;
2030 s
->dma_dac1
.count
+= cnt
;
2031 s
->dma_dac1
.endcleared
= 0;
2032 spin_unlock_irqrestore(&s
->lock
, flags
);
2038 remove_wait_queue(&s
->dma_dac1
.wait
, &wait
);
2039 set_current_state(TASK_RUNNING
);
2043 /* No kernel lock - we have our own spinlock */
2044 static unsigned int es1371_poll_dac(struct file
*file
, struct poll_table_struct
*wait
)
2046 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2047 unsigned long flags
;
2048 unsigned int mask
= 0;
2051 if (!s
->dma_dac1
.ready
&& prog_dmabuf_dac1(s
))
2053 poll_wait(file
, &s
->dma_dac1
.wait
, wait
);
2054 spin_lock_irqsave(&s
->lock
, flags
);
2055 es1371_update_ptr(s
);
2056 if (s
->dma_dac1
.mapped
) {
2057 if (s
->dma_dac1
.count
>= (signed)s
->dma_dac1
.fragsize
)
2058 mask
|= POLLOUT
| POLLWRNORM
;
2060 if ((signed)s
->dma_dac1
.dmasize
>= s
->dma_dac1
.count
+ (signed)s
->dma_dac1
.fragsize
)
2061 mask
|= POLLOUT
| POLLWRNORM
;
2063 spin_unlock_irqrestore(&s
->lock
, flags
);
2067 static int es1371_mmap_dac(struct file
*file
, struct vm_area_struct
*vma
)
2069 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2074 if (!(vma
->vm_flags
& VM_WRITE
))
2077 if ((ret
= prog_dmabuf_dac1(s
)) != 0)
2080 if (vma
->vm_pgoff
!= 0)
2082 size
= vma
->vm_end
- vma
->vm_start
;
2083 if (size
> (PAGE_SIZE
<< s
->dma_dac1
.buforder
))
2086 if (remap_page_range(vma
->vm_start
, virt_to_phys(s
->dma_dac1
.rawbuf
), size
, vma
->vm_page_prot
))
2088 s
->dma_dac1
.mapped
= 1;
2095 static int es1371_ioctl_dac(struct inode
*inode
, struct file
*file
, unsigned int cmd
, unsigned long arg
)
2097 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2098 unsigned long flags
;
2099 audio_buf_info abinfo
;
2106 case OSS_GETVERSION
:
2107 return put_user(SOUND_VERSION
, (int *)arg
);
2109 case SNDCTL_DSP_SYNC
:
2110 return drain_dac1(s
, 0/*file->f_flags & O_NONBLOCK*/);
2112 case SNDCTL_DSP_SETDUPLEX
:
2115 case SNDCTL_DSP_GETCAPS
:
2116 return put_user(DSP_CAP_REALTIME
| DSP_CAP_TRIGGER
| DSP_CAP_MMAP
, (int *)arg
);
2118 case SNDCTL_DSP_RESET
:
2121 s
->dma_dac1
.swptr
= s
->dma_dac1
.hwptr
= s
->dma_dac1
.count
= s
->dma_dac1
.total_bytes
= 0;
2124 case SNDCTL_DSP_SPEED
:
2125 if (get_user(val
, (int *)arg
))
2129 s
->dma_dac1
.ready
= 0;
2130 set_dac1_rate(s
, val
);
2132 return put_user(s
->dac1rate
, (int *)arg
);
2134 case SNDCTL_DSP_STEREO
:
2135 if (get_user(val
, (int *)arg
))
2138 s
->dma_dac1
.ready
= 0;
2139 spin_lock_irqsave(&s
->lock
, flags
);
2141 s
->sctrl
|= SCTRL_P1SMB
;
2143 s
->sctrl
&= ~SCTRL_P1SMB
;
2144 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
2145 spin_unlock_irqrestore(&s
->lock
, flags
);
2148 case SNDCTL_DSP_CHANNELS
:
2149 if (get_user(val
, (int *)arg
))
2153 s
->dma_dac1
.ready
= 0;
2154 spin_lock_irqsave(&s
->lock
, flags
);
2156 s
->sctrl
|= SCTRL_P1SMB
;
2158 s
->sctrl
&= ~SCTRL_P1SMB
;
2159 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
2160 spin_unlock_irqrestore(&s
->lock
, flags
);
2162 return put_user((s
->sctrl
& SCTRL_P1SMB
) ? 2 : 1, (int *)arg
);
2164 case SNDCTL_DSP_GETFMTS
: /* Returns a mask */
2165 return put_user(AFMT_S16_LE
|AFMT_U8
, (int *)arg
);
2167 case SNDCTL_DSP_SETFMT
: /* Selects ONE fmt*/
2168 if (get_user(val
, (int *)arg
))
2170 if (val
!= AFMT_QUERY
) {
2172 s
->dma_dac1
.ready
= 0;
2173 spin_lock_irqsave(&s
->lock
, flags
);
2174 if (val
== AFMT_S16_LE
)
2175 s
->sctrl
|= SCTRL_P1SEB
;
2177 s
->sctrl
&= ~SCTRL_P1SEB
;
2178 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
2179 spin_unlock_irqrestore(&s
->lock
, flags
);
2181 return put_user((s
->sctrl
& SCTRL_P1SEB
) ? AFMT_S16_LE
: AFMT_U8
, (int *)arg
);
2183 case SNDCTL_DSP_POST
:
2186 case SNDCTL_DSP_GETTRIGGER
:
2187 return put_user((s
->ctrl
& CTRL_DAC1_EN
) ? PCM_ENABLE_OUTPUT
: 0, (int *)arg
);
2189 case SNDCTL_DSP_SETTRIGGER
:
2190 if (get_user(val
, (int *)arg
))
2192 if (val
& PCM_ENABLE_OUTPUT
) {
2193 if (!s
->dma_dac1
.ready
&& (ret
= prog_dmabuf_dac1(s
)))
2200 case SNDCTL_DSP_GETOSPACE
:
2201 if (!(s
->ctrl
& CTRL_DAC1_EN
) && (val
= prog_dmabuf_dac1(s
)) != 0)
2203 spin_lock_irqsave(&s
->lock
, flags
);
2204 es1371_update_ptr(s
);
2205 abinfo
.fragsize
= s
->dma_dac1
.fragsize
;
2206 count
= s
->dma_dac1
.count
;
2209 abinfo
.bytes
= s
->dma_dac1
.dmasize
- count
;
2210 abinfo
.fragstotal
= s
->dma_dac1
.numfrag
;
2211 abinfo
.fragments
= abinfo
.bytes
>> s
->dma_dac1
.fragshift
;
2212 spin_unlock_irqrestore(&s
->lock
, flags
);
2213 return copy_to_user((void *)arg
, &abinfo
, sizeof(abinfo
)) ? -EFAULT
: 0;
2215 case SNDCTL_DSP_NONBLOCK
:
2216 file
->f_flags
|= O_NONBLOCK
;
2219 case SNDCTL_DSP_GETODELAY
:
2220 spin_lock_irqsave(&s
->lock
, flags
);
2221 es1371_update_ptr(s
);
2222 count
= s
->dma_dac1
.count
;
2223 spin_unlock_irqrestore(&s
->lock
, flags
);
2226 return put_user(count
, (int *)arg
);
2228 case SNDCTL_DSP_GETOPTR
:
2229 if (!(file
->f_mode
& FMODE_WRITE
))
2231 spin_lock_irqsave(&s
->lock
, flags
);
2232 es1371_update_ptr(s
);
2233 cinfo
.bytes
= s
->dma_dac1
.total_bytes
;
2234 count
= s
->dma_dac1
.count
;
2237 cinfo
.blocks
= count
>> s
->dma_dac1
.fragshift
;
2238 cinfo
.ptr
= s
->dma_dac1
.hwptr
;
2239 if (s
->dma_dac1
.mapped
)
2240 s
->dma_dac1
.count
&= s
->dma_dac1
.fragsize
-1;
2241 spin_unlock_irqrestore(&s
->lock
, flags
);
2242 return copy_to_user((void *)arg
, &cinfo
, sizeof(cinfo
));
2244 case SNDCTL_DSP_GETBLKSIZE
:
2245 if ((val
= prog_dmabuf_dac1(s
)))
2247 return put_user(s
->dma_dac1
.fragsize
, (int *)arg
);
2249 case SNDCTL_DSP_SETFRAGMENT
:
2250 if (get_user(val
, (int *)arg
))
2252 s
->dma_dac1
.ossfragshift
= val
& 0xffff;
2253 s
->dma_dac1
.ossmaxfrags
= (val
>> 16) & 0xffff;
2254 if (s
->dma_dac1
.ossfragshift
< 4)
2255 s
->dma_dac1
.ossfragshift
= 4;
2256 if (s
->dma_dac1
.ossfragshift
> 15)
2257 s
->dma_dac1
.ossfragshift
= 15;
2258 if (s
->dma_dac1
.ossmaxfrags
< 4)
2259 s
->dma_dac1
.ossmaxfrags
= 4;
2262 case SNDCTL_DSP_SUBDIVIDE
:
2263 if (s
->dma_dac1
.subdivision
)
2265 if (get_user(val
, (int *)arg
))
2267 if (val
!= 1 && val
!= 2 && val
!= 4)
2269 s
->dma_dac1
.subdivision
= val
;
2272 case SOUND_PCM_READ_RATE
:
2273 return put_user(s
->dac1rate
, (int *)arg
);
2275 case SOUND_PCM_READ_CHANNELS
:
2276 return put_user((s
->sctrl
& SCTRL_P1SMB
) ? 2 : 1, (int *)arg
);
2278 case SOUND_PCM_READ_BITS
:
2279 return put_user((s
->sctrl
& SCTRL_P1SEB
) ? 16 : 8, (int *)arg
);
2281 case SOUND_PCM_WRITE_FILTER
:
2282 case SNDCTL_DSP_SETSYNCRO
:
2283 case SOUND_PCM_READ_FILTER
:
2287 return mixdev_ioctl(&s
->codec
, cmd
, arg
);
2290 static int es1371_open_dac(struct inode
*inode
, struct file
*file
)
2292 int minor
= MINOR(inode
->i_rdev
);
2293 DECLARE_WAITQUEUE(wait
, current
);
2294 unsigned long flags
;
2295 struct list_head
*list
;
2296 struct es1371_state
*s
;
2298 for (list
= devs
.next
; ; list
= list
->next
) {
2301 s
= list_entry(list
, struct es1371_state
, devs
);
2302 if (!((s
->dev_dac
^ minor
) & ~0xf))
2306 /* we allow opening with O_RDWR, most programs do it although they will only write */
2308 if (file
->f_mode
& FMODE_READ
)
2311 if (!(file
->f_mode
& FMODE_WRITE
))
2313 file
->private_data
= s
;
2314 /* wait for device to become free */
2316 while (s
->open_mode
& FMODE_DAC
) {
2317 if (file
->f_flags
& O_NONBLOCK
) {
2321 add_wait_queue(&s
->open_wait
, &wait
);
2322 __set_current_state(TASK_INTERRUPTIBLE
);
2325 remove_wait_queue(&s
->open_wait
, &wait
);
2326 set_current_state(TASK_RUNNING
);
2327 if (signal_pending(current
))
2328 return -ERESTARTSYS
;
2331 s
->dma_dac1
.ossfragshift
= s
->dma_dac1
.ossmaxfrags
= s
->dma_dac1
.subdivision
= 0;
2332 set_dac1_rate(s
, 8000);
2333 spin_lock_irqsave(&s
->lock
, flags
);
2334 s
->sctrl
&= ~SCTRL_P1FMT
;
2335 if ((minor
& 0xf) == SND_DEV_DSP16
)
2336 s
->sctrl
|= ES1371_FMT_S16_MONO
<< SCTRL_SH_P1FMT
;
2338 s
->sctrl
|= ES1371_FMT_U8_MONO
<< SCTRL_SH_P1FMT
;
2339 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
2340 spin_unlock_irqrestore(&s
->lock
, flags
);
2341 s
->open_mode
|= FMODE_DAC
;
2346 static int es1371_release_dac(struct inode
*inode
, struct file
*file
)
2348 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2352 drain_dac1(s
, file
->f_flags
& O_NONBLOCK
);
2355 dealloc_dmabuf(s
, &s
->dma_dac1
);
2356 s
->open_mode
&= ~FMODE_DAC
;
2358 wake_up(&s
->open_wait
);
2363 static /*const*/ struct file_operations es1371_dac_fops
= {
2365 llseek
: es1371_llseek
,
2366 write
: es1371_write_dac
,
2367 poll
: es1371_poll_dac
,
2368 ioctl
: es1371_ioctl_dac
,
2369 mmap
: es1371_mmap_dac
,
2370 open
: es1371_open_dac
,
2371 release
: es1371_release_dac
,
2374 /* --------------------------------------------------------------------- */
2376 static ssize_t
es1371_midi_read(struct file
*file
, char *buffer
, size_t count
, loff_t
*ppos
)
2378 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2379 DECLARE_WAITQUEUE(wait
, current
);
2381 unsigned long flags
;
2386 if (ppos
!= &file
->f_pos
)
2388 if (!access_ok(VERIFY_WRITE
, buffer
, count
))
2393 add_wait_queue(&s
->midi
.iwait
, &wait
);
2395 spin_lock_irqsave(&s
->lock
, flags
);
2397 cnt
= MIDIINBUF
- ptr
;
2398 if (s
->midi
.icnt
< cnt
)
2401 __set_current_state(TASK_INTERRUPTIBLE
);
2402 spin_unlock_irqrestore(&s
->lock
, flags
);
2406 if (file
->f_flags
& O_NONBLOCK
) {
2412 if (signal_pending(current
)) {
2419 if (copy_to_user(buffer
, s
->midi
.ibuf
+ ptr
, cnt
)) {
2424 ptr
= (ptr
+ cnt
) % MIDIINBUF
;
2425 spin_lock_irqsave(&s
->lock
, flags
);
2427 s
->midi
.icnt
-= cnt
;
2428 spin_unlock_irqrestore(&s
->lock
, flags
);
2434 __set_current_state(TASK_RUNNING
);
2435 remove_wait_queue(&s
->midi
.iwait
, &wait
);
2439 static ssize_t
es1371_midi_write(struct file
*file
, const char *buffer
, size_t count
, loff_t
*ppos
)
2441 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2442 DECLARE_WAITQUEUE(wait
, current
);
2444 unsigned long flags
;
2449 if (ppos
!= &file
->f_pos
)
2451 if (!access_ok(VERIFY_READ
, buffer
, count
))
2456 add_wait_queue(&s
->midi
.owait
, &wait
);
2458 spin_lock_irqsave(&s
->lock
, flags
);
2460 cnt
= MIDIOUTBUF
- ptr
;
2461 if (s
->midi
.ocnt
+ cnt
> MIDIOUTBUF
)
2462 cnt
= MIDIOUTBUF
- s
->midi
.ocnt
;
2464 __set_current_state(TASK_INTERRUPTIBLE
);
2465 es1371_handle_midi(s
);
2467 spin_unlock_irqrestore(&s
->lock
, flags
);
2471 if (file
->f_flags
& O_NONBLOCK
) {
2477 if (signal_pending(current
)) {
2484 if (copy_from_user(s
->midi
.obuf
+ ptr
, buffer
, cnt
)) {
2489 ptr
= (ptr
+ cnt
) % MIDIOUTBUF
;
2490 spin_lock_irqsave(&s
->lock
, flags
);
2492 s
->midi
.ocnt
+= cnt
;
2493 spin_unlock_irqrestore(&s
->lock
, flags
);
2497 spin_lock_irqsave(&s
->lock
, flags
);
2498 es1371_handle_midi(s
);
2499 spin_unlock_irqrestore(&s
->lock
, flags
);
2501 __set_current_state(TASK_RUNNING
);
2502 remove_wait_queue(&s
->midi
.owait
, &wait
);
2506 /* No kernel lock - we have our own spinlock */
2507 static unsigned int es1371_midi_poll(struct file
*file
, struct poll_table_struct
*wait
)
2509 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2510 unsigned long flags
;
2511 unsigned int mask
= 0;
2514 if (file
->f_mode
& FMODE_WRITE
)
2515 poll_wait(file
, &s
->midi
.owait
, wait
);
2516 if (file
->f_mode
& FMODE_READ
)
2517 poll_wait(file
, &s
->midi
.iwait
, wait
);
2518 spin_lock_irqsave(&s
->lock
, flags
);
2519 if (file
->f_mode
& FMODE_READ
) {
2520 if (s
->midi
.icnt
> 0)
2521 mask
|= POLLIN
| POLLRDNORM
;
2523 if (file
->f_mode
& FMODE_WRITE
) {
2524 if (s
->midi
.ocnt
< MIDIOUTBUF
)
2525 mask
|= POLLOUT
| POLLWRNORM
;
2527 spin_unlock_irqrestore(&s
->lock
, flags
);
2531 static int es1371_midi_open(struct inode
*inode
, struct file
*file
)
2533 int minor
= MINOR(inode
->i_rdev
);
2534 DECLARE_WAITQUEUE(wait
, current
);
2535 unsigned long flags
;
2536 struct list_head
*list
;
2537 struct es1371_state
*s
;
2539 for (list
= devs
.next
; ; list
= list
->next
) {
2542 s
= list_entry(list
, struct es1371_state
, devs
);
2543 if (s
->dev_midi
== minor
)
2547 file
->private_data
= s
;
2548 /* wait for device to become free */
2550 while (s
->open_mode
& (file
->f_mode
<< FMODE_MIDI_SHIFT
)) {
2551 if (file
->f_flags
& O_NONBLOCK
) {
2555 add_wait_queue(&s
->open_wait
, &wait
);
2556 __set_current_state(TASK_INTERRUPTIBLE
);
2559 remove_wait_queue(&s
->open_wait
, &wait
);
2560 set_current_state(TASK_RUNNING
);
2561 if (signal_pending(current
))
2562 return -ERESTARTSYS
;
2565 spin_lock_irqsave(&s
->lock
, flags
);
2566 if (!(s
->open_mode
& (FMODE_MIDI_READ
| FMODE_MIDI_WRITE
))) {
2567 s
->midi
.ird
= s
->midi
.iwr
= s
->midi
.icnt
= 0;
2568 s
->midi
.ord
= s
->midi
.owr
= s
->midi
.ocnt
= 0;
2569 outb(UCTRL_CNTRL_SWR
, s
->io
+ES1371_REG_UART_CONTROL
);
2570 outb(0, s
->io
+ES1371_REG_UART_CONTROL
);
2571 outb(0, s
->io
+ES1371_REG_UART_TEST
);
2573 if (file
->f_mode
& FMODE_READ
) {
2574 s
->midi
.ird
= s
->midi
.iwr
= s
->midi
.icnt
= 0;
2576 if (file
->f_mode
& FMODE_WRITE
) {
2577 s
->midi
.ord
= s
->midi
.owr
= s
->midi
.ocnt
= 0;
2579 s
->ctrl
|= CTRL_UART_EN
;
2580 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
2581 es1371_handle_midi(s
);
2582 spin_unlock_irqrestore(&s
->lock
, flags
);
2583 s
->open_mode
|= (file
->f_mode
<< FMODE_MIDI_SHIFT
) & (FMODE_MIDI_READ
| FMODE_MIDI_WRITE
);
2588 static int es1371_midi_release(struct inode
*inode
, struct file
*file
)
2590 struct es1371_state
*s
= (struct es1371_state
*)file
->private_data
;
2591 DECLARE_WAITQUEUE(wait
, current
);
2592 unsigned long flags
;
2593 unsigned count
, tmo
;
2597 if (file
->f_mode
& FMODE_WRITE
) {
2598 add_wait_queue(&s
->midi
.owait
, &wait
);
2600 __set_current_state(TASK_INTERRUPTIBLE
);
2601 spin_lock_irqsave(&s
->lock
, flags
);
2602 count
= s
->midi
.ocnt
;
2603 spin_unlock_irqrestore(&s
->lock
, flags
);
2606 if (signal_pending(current
))
2608 if (file
->f_flags
& O_NONBLOCK
) {
2609 remove_wait_queue(&s
->midi
.owait
, &wait
);
2610 set_current_state(TASK_RUNNING
);
2613 tmo
= (count
* HZ
) / 3100;
2614 if (!schedule_timeout(tmo
? : 1) && tmo
)
2615 printk(KERN_DEBUG PFX
"midi timed out??\n");
2617 remove_wait_queue(&s
->midi
.owait
, &wait
);
2618 set_current_state(TASK_RUNNING
);
2621 s
->open_mode
&= (~(file
->f_mode
<< FMODE_MIDI_SHIFT
)) & (FMODE_MIDI_READ
|FMODE_MIDI_WRITE
);
2622 spin_lock_irqsave(&s
->lock
, flags
);
2623 if (!(s
->open_mode
& (FMODE_MIDI_READ
| FMODE_MIDI_WRITE
))) {
2624 s
->ctrl
&= ~CTRL_UART_EN
;
2625 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
2627 spin_unlock_irqrestore(&s
->lock
, flags
);
2629 wake_up(&s
->open_wait
);
2634 static /*const*/ struct file_operations es1371_midi_fops
= {
2636 llseek
: es1371_llseek
,
2637 read
: es1371_midi_read
,
2638 write
: es1371_midi_write
,
2639 poll
: es1371_midi_poll
,
2640 open
: es1371_midi_open
,
2641 release
: es1371_midi_release
,
2644 /* --------------------------------------------------------------------- */
2647 * for debugging purposes, we'll create a proc device that dumps the
2652 static int proc_es1371_dump (char *buf
, char **start
, off_t fpos
, int length
, int *eof
, void *data
)
2654 struct es1371_state
*s
;
2657 if (list_empty(&devs
))
2659 s
= list_entry(devs
.next
, struct es1371_state
, devs
);
2660 /* print out header */
2661 len
+= sprintf(buf
+ len
, "\t\tCreative ES137x Debug Dump-o-matic\n");
2663 /* print out CODEC state */
2664 len
+= sprintf (buf
+ len
, "AC97 CODEC state\n");
2665 for (cnt
=0; cnt
<= 0x7e; cnt
= cnt
+2)
2666 len
+= sprintf (buf
+ len
, "reg:0x%02x val:0x%04x\n", cnt
, rdcodec(&s
->codec
, cnt
));
2673 *start
= buf
+ fpos
;
2674 if ((len
-= fpos
) > length
)
2680 #endif /* ES1371_DEBUG */
2682 /* --------------------------------------------------------------------- */
2684 /* maximum number of devices; only used for command line params */
2687 static int joystick
[NR_DEVICE
] = { 0, };
2688 static int spdif
[NR_DEVICE
] = { 0, };
2689 static int nomix
[NR_DEVICE
] = { 0, };
2691 static unsigned int devindex
= 0;
2693 MODULE_PARM(joystick
, "1-" __MODULE_STRING(NR_DEVICE
) "i");
2694 MODULE_PARM_DESC(joystick
, "sets address and enables joystick interface (still need separate driver)");
2695 MODULE_PARM(spdif
, "1-" __MODULE_STRING(NR_DEVICE
) "i");
2696 MODULE_PARM_DESC(spdif
, "if 1 the output is in S/PDIF digital mode");
2697 MODULE_PARM(nomix
, "1-" __MODULE_STRING(NR_DEVICE
) "i");
2698 MODULE_PARM_DESC(nomix
, "if 1 no analog audio is mixed to the digital output");
2700 MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
2701 MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver");
2703 /* --------------------------------------------------------------------- */
2705 static struct initvol
{
2708 } initvol
[] __initdata
= {
2709 { SOUND_MIXER_WRITE_LINE
, 0x4040 },
2710 { SOUND_MIXER_WRITE_CD
, 0x4040 },
2711 { MIXER_WRITE(SOUND_MIXER_VIDEO
), 0x4040 },
2712 { SOUND_MIXER_WRITE_LINE1
, 0x4040 },
2713 { SOUND_MIXER_WRITE_PCM
, 0x4040 },
2714 { SOUND_MIXER_WRITE_VOLUME
, 0x4040 },
2715 { MIXER_WRITE(SOUND_MIXER_PHONEOUT
), 0x4040 },
2716 { SOUND_MIXER_WRITE_OGAIN
, 0x4040 },
2717 { MIXER_WRITE(SOUND_MIXER_PHONEIN
), 0x4040 },
2718 { SOUND_MIXER_WRITE_SPEAKER
, 0x4040 },
2719 { SOUND_MIXER_WRITE_MIC
, 0x4040 },
2720 { SOUND_MIXER_WRITE_RECLEV
, 0x4040 },
2721 { SOUND_MIXER_WRITE_IGAIN
, 0x4040 }
2724 #define RSRCISIOREGION(dev,num) (pci_resource_start((dev), (num)) != 0 && \
2725 (pci_resource_flags((dev), (num)) & IORESOURCE_IO))
2727 static int __devinit
es1371_probe(struct pci_dev
*pcidev
, const struct pci_device_id
*pciid
)
2729 struct es1371_state
*s
;
2736 if (!RSRCISIOREGION(pcidev
, 0))
2738 if (pcidev
->irq
== 0)
2740 if (!pci_dma_supported(pcidev
, 0xffffffff)) {
2741 printk(KERN_WARNING
"es1371: architecture does not support 32bit PCI busmaster DMA\n");
2744 if (!(s
= kmalloc(sizeof(struct es1371_state
), GFP_KERNEL
))) {
2745 printk(KERN_WARNING PFX
"out of memory\n");
2748 memset(s
, 0, sizeof(struct es1371_state
));
2749 init_waitqueue_head(&s
->dma_adc
.wait
);
2750 init_waitqueue_head(&s
->dma_dac1
.wait
);
2751 init_waitqueue_head(&s
->dma_dac2
.wait
);
2752 init_waitqueue_head(&s
->open_wait
);
2753 init_waitqueue_head(&s
->midi
.iwait
);
2754 init_waitqueue_head(&s
->midi
.owait
);
2755 init_MUTEX(&s
->open_sem
);
2756 spin_lock_init(&s
->lock
);
2757 s
->magic
= ES1371_MAGIC
;
2759 s
->io
= pci_resource_start(pcidev
, 0);
2760 s
->irq
= pcidev
->irq
;
2761 s
->vendor
= pcidev
->vendor
;
2762 s
->device
= pcidev
->device
;
2763 pci_read_config_byte(pcidev
, PCI_REVISION_ID
, &s
->rev
);
2764 s
->codec
.private_data
= s
;
2766 s
->codec
.codec_read
= rdcodec
;
2767 s
->codec
.codec_write
= wrcodec
;
2768 printk(KERN_INFO PFX
"found chip, vendor id 0x%04x device id 0x%04x revision 0x%02x\n",
2769 s
->vendor
, s
->device
, s
->rev
);
2770 if (!request_region(s
->io
, ES1371_EXTENT
, "es1371")) {
2771 printk(KERN_ERR PFX
"io ports %#lx-%#lx in use\n", s
->io
, s
->io
+ES1371_EXTENT
-1);
2774 if (pci_enable_device(pcidev
))
2776 if (request_irq(s
->irq
, es1371_interrupt
, SA_SHIRQ
, "es1371", s
)) {
2777 printk(KERN_ERR PFX
"irq %u in use\n", s
->irq
);
2780 printk(KERN_INFO PFX
"found es1371 rev %d at io %#lx irq %u\n"
2781 KERN_INFO PFX
"features: joystick 0x%x\n", s
->rev
, s
->io
, s
->irq
, joystick
[devindex
]);
2782 /* register devices */
2783 if ((s
->dev_audio
= register_sound_dsp(&es1371_audio_fops
, -1)) < 0)
2785 if ((s
->codec
.dev_mixer
= register_sound_mixer(&es1371_mixer_fops
, -1)) < 0)
2787 if ((s
->dev_dac
= register_sound_dsp(&es1371_dac_fops
, -1)) < 0)
2789 if ((s
->dev_midi
= register_sound_midi(&es1371_midi_fops
, -1)) < 0)
2792 /* intialize the debug proc device */
2793 s
->ps
= create_proc_read_entry("es1371",0,NULL
,proc_es1371_dump
,NULL
);
2794 #endif /* ES1371_DEBUG */
2796 /* initialize codec registers */
2798 if (pcidev
->subsystem_vendor
== 0x107b && pcidev
->subsystem_device
== 0x2150) {
2799 s
->ctrl
|= CTRL_GPIO_OUT0
;
2800 printk(KERN_INFO PFX
"Running On Gateway 2000 Solo 2510 - Amp On \n");
2802 if ((joystick
[devindex
] & ~0x18) == 0x200) {
2803 if (check_region(joystick
[devindex
], JOY_EXTENT
))
2804 printk(KERN_ERR PFX
"joystick address 0x%x already in use\n", joystick
[devindex
]);
2806 s
->ctrl
|= CTRL_JYSTK_EN
| (((joystick
[devindex
] >> 3) & CTRL_JOY_MASK
) << CTRL_JOY_SHIFT
);
2811 s
->spdif_volume
= -1;
2812 /* check to see if s/pdif mode is being requested */
2813 if (spdif
[devindex
]) {
2815 printk(KERN_INFO PFX
"enabling S/PDIF output\n");
2816 s
->spdif_volume
= 0;
2817 cssr
|= STAT_EN_SPDIF
;
2818 s
->ctrl
|= CTRL_SPDIFEN_B
;
2819 if (nomix
[devindex
]) /* don't mix analog inputs to s/pdif output */
2820 s
->ctrl
|= CTRL_RECEN_B
;
2822 printk(KERN_ERR PFX
"revision %d does not support S/PDIF\n", s
->rev
);
2825 /* initialize the chips */
2826 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
2827 outl(s
->sctrl
, s
->io
+ES1371_REG_SERIAL_CONTROL
);
2828 outl(0, s
->io
+ES1371_REG_LEGACY
);
2829 pci_set_master(pcidev
); /* enable bus mastering */
2830 /* if we are a 5880 turn on the AC97 */
2831 if (s
->vendor
== PCI_VENDOR_ID_ENSONIQ
&&
2832 ((s
->device
== PCI_DEVICE_ID_ENSONIQ_CT5880
&& s
->rev
== CT5880REV_CT5880_C
) ||
2833 (s
->device
== PCI_DEVICE_ID_ENSONIQ_ES1371
&& s
->rev
== ES1371REV_CT5880_A
) ||
2834 (s
->device
== PCI_DEVICE_ID_ENSONIQ_ES1371
&& s
->rev
== ES1371REV_ES1373_8
))) {
2835 cssr
|= CSTAT_5880_AC97_RST
;
2836 outl(cssr
, s
->io
+ES1371_REG_STATUS
);
2837 /* need to delay around 20ms(bleech) to give
2838 some CODECs enough time to wakeup */
2839 tmo
= jiffies
+ (HZ
/ 50) + 1;
2841 tmo2
= tmo
- jiffies
;
2844 schedule_timeout(tmo2
);
2847 /* AC97 warm reset to start the bitclk */
2848 outl(s
->ctrl
| CTRL_SYNCRES
, s
->io
+ES1371_REG_CONTROL
);
2850 outl(s
->ctrl
, s
->io
+ES1371_REG_CONTROL
);
2851 /* init the sample rate converter */
2854 if (!ac97_probe_codec(&s
->codec
))
2856 /* set default values */
2860 val
= SOUND_MASK_LINE
;
2861 mixdev_ioctl(&s
->codec
, SOUND_MIXER_WRITE_RECSRC
, (unsigned long)&val
);
2862 for (i
= 0; i
< sizeof(initvol
)/sizeof(initvol
[0]); i
++) {
2863 val
= initvol
[i
].vol
;
2864 mixdev_ioctl(&s
->codec
, initvol
[i
].mixch
, (unsigned long)&val
);
2866 /* mute master and PCM when in S/PDIF mode */
2867 if (s
->spdif_volume
!= -1) {
2869 s
->codec
.mixer_ioctl(&s
->codec
, SOUND_MIXER_WRITE_VOLUME
, (unsigned long)&val
);
2870 s
->codec
.mixer_ioctl(&s
->codec
, SOUND_MIXER_WRITE_PCM
, (unsigned long)&val
);
2873 /* turn on S/PDIF output driver if requested */
2874 outl(cssr
, s
->io
+ES1371_REG_STATUS
);
2875 /* store it in the driver field */
2876 pci_set_drvdata(pcidev
, s
);
2877 pcidev
->dma_mask
= 0xffffffff;
2878 /* put it into driver list */
2879 list_add_tail(&s
->devs
, &devs
);
2880 /* increment devindex */
2881 if (devindex
< NR_DEVICE
-1)
2886 unregister_sound_dsp(s
->dev_dac
);
2888 unregister_sound_mixer(s
->codec
.dev_mixer
);
2890 unregister_sound_dsp(s
->dev_audio
);
2892 printk(KERN_ERR PFX
"cannot register misc device\n");
2893 free_irq(s
->irq
, s
);
2895 release_region(s
->io
, ES1371_EXTENT
);
2901 static void __devinit
es1371_remove(struct pci_dev
*dev
)
2903 struct es1371_state
*s
= pci_get_drvdata(dev
);
2910 remove_proc_entry("es1371", NULL
);
2911 #endif /* ES1371_DEBUG */
2912 outl(0, s
->io
+ES1371_REG_CONTROL
); /* switch everything off */
2913 outl(0, s
->io
+ES1371_REG_SERIAL_CONTROL
); /* clear serial interrupts */
2915 free_irq(s
->irq
, s
);
2916 release_region(s
->io
, ES1371_EXTENT
);
2917 unregister_sound_dsp(s
->dev_audio
);
2918 unregister_sound_mixer(s
->codec
.dev_mixer
);
2919 unregister_sound_dsp(s
->dev_dac
);
2920 unregister_sound_midi(s
->dev_midi
);
2922 pci_set_drvdata(dev
, NULL
);
2925 static struct pci_device_id id_table
[] __devinitdata
= {
2926 { PCI_VENDOR_ID_ENSONIQ
, PCI_DEVICE_ID_ENSONIQ_ES1371
, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0 },
2927 { PCI_VENDOR_ID_ENSONIQ
, PCI_DEVICE_ID_ENSONIQ_CT5880
, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0 },
2928 { PCI_VENDOR_ID_ECTIVA
, PCI_DEVICE_ID_ECTIVA_EV1938
, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0 },
2932 MODULE_DEVICE_TABLE(pci
, id_table
);
2934 static struct pci_driver es1371_driver
= {
2937 probe
: es1371_probe
,
2938 remove
: es1371_remove
2941 static int __init
init_es1371(void)
2943 if (!pci_present()) /* No PCI bus in this machine! */
2945 printk(KERN_INFO PFX
"version v0.27 time " __TIME__
" " __DATE__
"\n");
2946 return pci_module_init(&es1371_driver
);
2949 static void __exit
cleanup_es1371(void)
2951 printk(KERN_INFO PFX
"unloading\n");
2952 pci_unregister_driver(&es1371_driver
);
2955 module_init(init_es1371
);
2956 module_exit(cleanup_es1371
);
2958 /* --------------------------------------------------------------------- */
2962 /* format is: es1371=[joystick] */
2964 static int __init
es1371_setup(char *str
)
2966 static unsigned __initdata nr_dev
= 0;
2968 if (nr_dev
>= NR_DEVICE
)
2970 if (get_option(&str
, &joystick
[nr_dev
]) == 2)
2971 (void)get_option(&str
, &spdif
[nr_dev
]);
2976 __setup("es1371=", es1371_setup
);