[ARM] 3302/1: make pci=firmware the default for ixp2000
[linux-2.6/openmoko-kernel/knife-kernel.git] / sound / oss / i810_audio.c
blobabc242abd5b111ba5dea82c2d51889a26a9a45b6
1 /*
2 * Intel i810 and friends ICH driver for Linux
3 * Alan Cox <alan@redhat.com>
5 * Built from:
6 * Low level code: Zach Brown (original nonworking i810 OSS driver)
7 * Jaroslav Kysela <perex@suse.cz> (working ALSA driver)
9 * Framework: Thomas Sailer <sailer@ife.ee.ethz.ch>
10 * Extended by: Zach Brown <zab@redhat.com>
11 * and others..
13 * Hardware Provided By:
14 * Analog Devices (A major AC97 codec maker)
15 * Intel Corp (you've probably heard of them already)
17 * AC97 clues and assistance provided by
18 * Analog Devices
19 * Zach 'Fufu' Brown
20 * Jeff Garzik
22 * This program is free software; you can redistribute it and/or modify
23 * it under the terms of the GNU General Public License as published by
24 * the Free Software Foundation; either version 2 of the License, or
25 * (at your option) any later version.
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU General Public License for more details.
32 * You should have received a copy of the GNU General Public License
33 * along with this program; if not, write to the Free Software
34 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
37 * Intel 810 theory of operation
39 * The chipset provides three DMA channels that talk to an AC97
40 * CODEC (AC97 is a digital/analog mixer standard). At its simplest
41 * you get 48Khz audio with basic volume and mixer controls. At the
42 * best you get rate adaption in the codec. We set the card up so
43 * that we never take completion interrupts but instead keep the card
44 * chasing its tail around a ring buffer. This is needed for mmap
45 * mode audio and happens to work rather well for non-mmap modes too.
47 * The board has one output channel for PCM audio (supported) and
48 * a stereo line in and mono microphone input. Again these are normally
49 * locked to 48Khz only. Right now recording is not finished.
51 * There is no midi support, no synth support. Use timidity. To get
52 * esd working you need to use esd -r 48000 as it won't probe 48KHz
53 * by default. mpg123 can't handle 48Khz only audio so use xmms.
55 * Fix The Sound On Dell
57 * Not everyone uses 48KHz. We know of no way to detect this reliably
58 * and certainly not to get the right data. If your i810 audio sounds
59 * stupid you may need to investigate other speeds. According to Analog
60 * they tend to use a 14.318MHz clock which gives you a base rate of
61 * 41194Hz.
63 * This is available via the 'ftsodell=1' option.
65 * If you need to force a specific rate set the clocking= option
67 * This driver is cursed. (Ben LaHaise)
69 * ICH 3 caveats
70 * Intel errata #7 for ICH3 IO. We need to disable SMI stuff
71 * when codec probing. [Not Yet Done]
73 * ICH 4 caveats
75 * The ICH4 has the feature, that the codec ID doesn't have to be
76 * congruent with the IO connection.
78 * Therefore, from driver version 0.23 on, there is a "codec ID" <->
79 * "IO register base offset" mapping (card->ac97_id_map) field.
81 * Juergen "George" Sawinski (jsaw)
84 #include <linux/module.h>
85 #include <linux/string.h>
86 #include <linux/ctype.h>
87 #include <linux/ioport.h>
88 #include <linux/sched.h>
89 #include <linux/delay.h>
90 #include <linux/sound.h>
91 #include <linux/slab.h>
92 #include <linux/soundcard.h>
93 #include <linux/pci.h>
94 #include <linux/interrupt.h>
95 #include <asm/io.h>
96 #include <asm/dma.h>
97 #include <linux/init.h>
98 #include <linux/poll.h>
99 #include <linux/spinlock.h>
100 #include <linux/smp_lock.h>
101 #include <linux/ac97_codec.h>
102 #include <linux/bitops.h>
103 #include <asm/uaccess.h>
105 #define DRIVER_VERSION "1.01"
107 #define MODULOP2(a, b) ((a) & ((b) - 1))
108 #define MASKP2(a, b) ((a) & ~((b) - 1))
110 static int ftsodell;
111 static int strict_clocking;
112 static unsigned int clocking;
113 static int spdif_locked;
114 static int ac97_quirk = AC97_TUNE_DEFAULT;
116 //#define DEBUG
117 //#define DEBUG2
118 //#define DEBUG_INTERRUPTS
119 //#define DEBUG_MMAP
120 //#define DEBUG_MMIO
122 #define ADC_RUNNING 1
123 #define DAC_RUNNING 2
125 #define I810_FMT_16BIT 1
126 #define I810_FMT_STEREO 2
127 #define I810_FMT_MASK 3
129 #define SPDIF_ON 0x0004
130 #define SURR_ON 0x0010
131 #define CENTER_LFE_ON 0x0020
132 #define VOL_MUTED 0x8000
134 /* the 810's array of pointers to data buffers */
136 struct sg_item {
137 #define BUSADDR_MASK 0xFFFFFFFE
138 u32 busaddr;
139 #define CON_IOC 0x80000000 /* interrupt on completion */
140 #define CON_BUFPAD 0x40000000 /* pad underrun with last sample, else 0 */
141 #define CON_BUFLEN_MASK 0x0000ffff /* buffer length in samples */
142 u32 control;
145 /* an instance of the i810 channel */
146 #define SG_LEN 32
147 struct i810_channel
149 /* these sg guys should probably be allocated
150 separately as nocache. Must be 8 byte aligned */
151 struct sg_item sg[SG_LEN]; /* 32*8 */
152 u32 offset; /* 4 */
153 u32 port; /* 4 */
154 u32 used;
155 u32 num;
159 * we have 3 separate dma engines. pcm in, pcm out, and mic.
160 * each dma engine has controlling registers. These goofy
161 * names are from the datasheet, but make it easy to write
162 * code while leafing through it.
164 * ICH4 has 6 dma engines, pcm in, pcm out, mic, pcm in 2,
165 * mic in 2, s/pdif. Of special interest is the fact that
166 * the upper 3 DMA engines on the ICH4 *must* be accessed
167 * via mmio access instead of pio access.
170 #define ENUM_ENGINE(PRE,DIG) \
171 enum { \
172 PRE##_BASE = 0x##DIG##0, /* Base Address */ \
173 PRE##_BDBAR = 0x##DIG##0, /* Buffer Descriptor list Base Address */ \
174 PRE##_CIV = 0x##DIG##4, /* Current Index Value */ \
175 PRE##_LVI = 0x##DIG##5, /* Last Valid Index */ \
176 PRE##_SR = 0x##DIG##6, /* Status Register */ \
177 PRE##_PICB = 0x##DIG##8, /* Position In Current Buffer */ \
178 PRE##_PIV = 0x##DIG##a, /* Prefetched Index Value */ \
179 PRE##_CR = 0x##DIG##b /* Control Register */ \
182 ENUM_ENGINE(OFF,0); /* Offsets */
183 ENUM_ENGINE(PI,0); /* PCM In */
184 ENUM_ENGINE(PO,1); /* PCM Out */
185 ENUM_ENGINE(MC,2); /* Mic In */
187 enum {
188 GLOB_CNT = 0x2c, /* Global Control */
189 GLOB_STA = 0x30, /* Global Status */
190 CAS = 0x34 /* Codec Write Semaphore Register */
193 ENUM_ENGINE(MC2,4); /* Mic In 2 */
194 ENUM_ENGINE(PI2,5); /* PCM In 2 */
195 ENUM_ENGINE(SP,6); /* S/PDIF */
197 enum {
198 SDM = 0x80 /* SDATA_IN Map Register */
201 /* interrupts for a dma engine */
202 #define DMA_INT_FIFO (1<<4) /* fifo under/over flow */
203 #define DMA_INT_COMPLETE (1<<3) /* buffer read/write complete and ioc set */
204 #define DMA_INT_LVI (1<<2) /* last valid done */
205 #define DMA_INT_CELV (1<<1) /* last valid is current */
206 #define DMA_INT_DCH (1) /* DMA Controller Halted (happens on LVI interrupts) */
207 #define DMA_INT_MASK (DMA_INT_FIFO|DMA_INT_COMPLETE|DMA_INT_LVI)
209 /* interrupts for the whole chip */
210 #define INT_SEC (1<<11)
211 #define INT_PRI (1<<10)
212 #define INT_MC (1<<7)
213 #define INT_PO (1<<6)
214 #define INT_PI (1<<5)
215 #define INT_MO (1<<2)
216 #define INT_NI (1<<1)
217 #define INT_GPI (1<<0)
218 #define INT_MASK (INT_SEC|INT_PRI|INT_MC|INT_PO|INT_PI|INT_MO|INT_NI|INT_GPI)
220 /* magic numbers to protect our data structures */
221 #define I810_CARD_MAGIC 0x5072696E /* "Prin" */
222 #define I810_STATE_MAGIC 0x63657373 /* "cess" */
223 #define I810_DMA_MASK 0xffffffff /* DMA buffer mask for pci_alloc_consist */
224 #define NR_HW_CH 3
226 /* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */
227 #define NR_AC97 4
229 /* Please note that an 8bit mono stream is not valid on this card, you must have a 16bit */
230 /* stream at a minimum for this card to be happy */
231 static const unsigned sample_size[] = { 1, 2, 2, 4 };
232 /* Samples are 16bit values, so we are shifting to a word, not to a byte, hence shift */
233 /* values are one less than might be expected */
234 static const unsigned sample_shift[] = { -1, 0, 0, 1 };
236 enum {
237 ICH82801AA = 0,
238 ICH82901AB,
239 INTEL440MX,
240 INTELICH2,
241 INTELICH3,
242 INTELICH4,
243 INTELICH5,
244 SI7012,
245 NVIDIA_NFORCE,
246 AMD768,
247 AMD8111
250 static char * card_names[] = {
251 "Intel ICH 82801AA",
252 "Intel ICH 82901AB",
253 "Intel 440MX",
254 "Intel ICH2",
255 "Intel ICH3",
256 "Intel ICH4",
257 "Intel ICH5",
258 "SiS 7012",
259 "NVIDIA nForce Audio",
260 "AMD 768",
261 "AMD-8111 IOHub"
264 /* These are capabilities (and bugs) the chipsets _can_ have */
265 static struct {
266 int16_t nr_ac97;
267 #define CAP_MMIO 0x0001
268 #define CAP_20BIT_AUDIO_SUPPORT 0x0002
269 u_int16_t flags;
270 } card_cap[] = {
271 { 1, 0x0000 }, /* ICH82801AA */
272 { 1, 0x0000 }, /* ICH82901AB */
273 { 1, 0x0000 }, /* INTEL440MX */
274 { 1, 0x0000 }, /* INTELICH2 */
275 { 2, 0x0000 }, /* INTELICH3 */
276 { 3, 0x0003 }, /* INTELICH4 */
277 { 3, 0x0003 }, /* INTELICH5 */
278 /*@FIXME to be verified*/ { 2, 0x0000 }, /* SI7012 */
279 /*@FIXME to be verified*/ { 2, 0x0000 }, /* NVIDIA_NFORCE */
280 /*@FIXME to be verified*/ { 2, 0x0000 }, /* AMD768 */
281 /*@FIXME to be verified*/ { 3, 0x0001 }, /* AMD8111 */
284 static struct pci_device_id i810_pci_tbl [] = {
285 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_5,
286 PCI_ANY_ID, PCI_ANY_ID, 0, 0, ICH82801AA},
287 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_5,
288 PCI_ANY_ID, PCI_ANY_ID, 0, 0, ICH82901AB},
289 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_440MX,
290 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTEL440MX},
291 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_4,
292 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH2},
293 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_5,
294 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH3},
295 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_5,
296 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH4},
297 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_5,
298 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH5},
299 {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_7012,
300 PCI_ANY_ID, PCI_ANY_ID, 0, 0, SI7012},
301 {PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_MCP1_AUDIO,
302 PCI_ANY_ID, PCI_ANY_ID, 0, 0, NVIDIA_NFORCE},
303 {PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO,
304 PCI_ANY_ID, PCI_ANY_ID, 0, 0, NVIDIA_NFORCE},
305 {PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO,
306 PCI_ANY_ID, PCI_ANY_ID, 0, 0, NVIDIA_NFORCE},
307 {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7445,
308 PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD768},
309 {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_AUDIO,
310 PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD8111},
311 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_5,
312 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH4},
313 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_18,
314 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH4},
315 {PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_AUDIO,
316 PCI_ANY_ID, PCI_ANY_ID, 0, 0, NVIDIA_NFORCE},
317 {0,}
320 MODULE_DEVICE_TABLE (pci, i810_pci_tbl);
322 #ifdef CONFIG_PM
323 #define PM_SUSPENDED(card) (card->pm_suspended)
324 #else
325 #define PM_SUSPENDED(card) (0)
326 #endif
328 /* "software" or virtual channel, an instance of opened /dev/dsp */
329 struct i810_state {
330 unsigned int magic;
331 struct i810_card *card; /* Card info */
333 /* single open lock mechanism, only used for recording */
334 struct semaphore open_sem;
335 wait_queue_head_t open_wait;
337 /* file mode */
338 mode_t open_mode;
340 /* virtual channel number */
341 int virt;
343 #ifdef CONFIG_PM
344 unsigned int pm_saved_dac_rate,pm_saved_adc_rate;
345 #endif
346 struct dmabuf {
347 /* wave sample stuff */
348 unsigned int rate;
349 unsigned char fmt, enable, trigger;
351 /* hardware channel */
352 struct i810_channel *read_channel;
353 struct i810_channel *write_channel;
355 /* OSS buffer management stuff */
356 void *rawbuf;
357 dma_addr_t dma_handle;
358 unsigned buforder;
359 unsigned numfrag;
360 unsigned fragshift;
362 /* our buffer acts like a circular ring */
363 unsigned hwptr; /* where dma last started, updated by update_ptr */
364 unsigned swptr; /* where driver last clear/filled, updated by read/write */
365 int count; /* bytes to be consumed or been generated by dma machine */
366 unsigned total_bytes; /* total bytes dmaed by hardware */
368 unsigned error; /* number of over/underruns */
369 wait_queue_head_t wait; /* put process on wait queue when no more space in buffer */
371 /* redundant, but makes calculations easier */
372 /* what the hardware uses */
373 unsigned dmasize;
374 unsigned fragsize;
375 unsigned fragsamples;
377 /* what we tell the user to expect */
378 unsigned userfrags;
379 unsigned userfragsize;
381 /* OSS stuff */
382 unsigned mapped:1;
383 unsigned ready:1;
384 unsigned update_flag;
385 unsigned ossfragsize;
386 unsigned ossmaxfrags;
387 unsigned subdivision;
388 } dmabuf;
392 struct i810_card {
393 unsigned int magic;
395 /* We keep i810 cards in a linked list */
396 struct i810_card *next;
398 /* The i810 has a certain amount of cross channel interaction
399 so we use a single per card lock */
400 spinlock_t lock;
402 /* Control AC97 access serialization */
403 spinlock_t ac97_lock;
405 /* PCI device stuff */
406 struct pci_dev * pci_dev;
407 u16 pci_id;
408 u16 pci_id_internal; /* used to access card_cap[] */
409 #ifdef CONFIG_PM
410 u16 pm_suspended;
411 int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97];
412 #endif
413 /* soundcore stuff */
414 int dev_audio;
416 /* structures for abstraction of hardware facilities, codecs, banks and channels*/
417 u16 ac97_id_map[NR_AC97];
418 struct ac97_codec *ac97_codec[NR_AC97];
419 struct i810_state *states[NR_HW_CH];
420 struct i810_channel *channel; /* 1:1 to states[] but diff. lifetime */
421 dma_addr_t chandma;
423 u16 ac97_features;
424 u16 ac97_status;
425 u16 channels;
427 /* hardware resources */
428 unsigned long ac97base;
429 unsigned long iobase;
430 u32 irq;
432 unsigned long ac97base_mmio_phys;
433 unsigned long iobase_mmio_phys;
434 u_int8_t __iomem *ac97base_mmio;
435 u_int8_t __iomem *iobase_mmio;
437 int use_mmio;
439 /* Function support */
440 struct i810_channel *(*alloc_pcm_channel)(struct i810_card *);
441 struct i810_channel *(*alloc_rec_pcm_channel)(struct i810_card *);
442 struct i810_channel *(*alloc_rec_mic_channel)(struct i810_card *);
443 void (*free_pcm_channel)(struct i810_card *, int chan);
445 /* We have a *very* long init time possibly, so use this to block */
446 /* attempts to open our devices before we are ready (stops oops'es) */
447 int initializing;
450 /* extract register offset from codec struct */
451 #define IO_REG_OFF(codec) (((struct i810_card *) codec->private_data)->ac97_id_map[codec->id])
453 #define I810_IOREAD(size, type, card, off) \
454 ({ \
455 type val; \
456 if (card->use_mmio) \
457 val=read##size(card->iobase_mmio+off); \
458 else \
459 val=in##size(card->iobase+off); \
460 val; \
463 #define I810_IOREADL(card, off) I810_IOREAD(l, u32, card, off)
464 #define I810_IOREADW(card, off) I810_IOREAD(w, u16, card, off)
465 #define I810_IOREADB(card, off) I810_IOREAD(b, u8, card, off)
467 #define I810_IOWRITE(size, val, card, off) \
468 ({ \
469 if (card->use_mmio) \
470 write##size(val, card->iobase_mmio+off); \
471 else \
472 out##size(val, card->iobase+off); \
475 #define I810_IOWRITEL(val, card, off) I810_IOWRITE(l, val, card, off)
476 #define I810_IOWRITEW(val, card, off) I810_IOWRITE(w, val, card, off)
477 #define I810_IOWRITEB(val, card, off) I810_IOWRITE(b, val, card, off)
479 #define GET_CIV(card, port) MODULOP2(I810_IOREADB((card), (port) + OFF_CIV), SG_LEN)
480 #define GET_LVI(card, port) MODULOP2(I810_IOREADB((card), (port) + OFF_LVI), SG_LEN)
482 /* set LVI from CIV */
483 #define CIV_TO_LVI(card, port, off) \
484 I810_IOWRITEB(MODULOP2(GET_CIV((card), (port)) + (off), SG_LEN), (card), (port) + OFF_LVI)
486 static struct ac97_quirk ac97_quirks[] __devinitdata = {
488 .vendor = 0x0e11,
489 .device = 0x00b8,
490 .name = "Compaq Evo D510C",
491 .type = AC97_TUNE_HP_ONLY
494 .vendor = 0x1028,
495 .device = 0x00d8,
496 .name = "Dell Precision 530", /* AD1885 */
497 .type = AC97_TUNE_HP_ONLY
500 .vendor = 0x1028,
501 .device = 0x0126,
502 .name = "Dell Optiplex GX260", /* AD1981A */
503 .type = AC97_TUNE_HP_ONLY
506 .vendor = 0x1028,
507 .device = 0x012d,
508 .name = "Dell Precision 450", /* AD1981B*/
509 .type = AC97_TUNE_HP_ONLY
511 { /* FIXME: which codec? */
512 .vendor = 0x103c,
513 .device = 0x00c3,
514 .name = "Hewlett-Packard onboard",
515 .type = AC97_TUNE_HP_ONLY
518 .vendor = 0x103c,
519 .device = 0x12f1,
520 .name = "HP xw8200", /* AD1981B*/
521 .type = AC97_TUNE_HP_ONLY
524 .vendor = 0x103c,
525 .device = 0x3008,
526 .name = "HP xw4200", /* AD1981B*/
527 .type = AC97_TUNE_HP_ONLY
530 .vendor = 0x10f1,
531 .device = 0x2665,
532 .name = "Fujitsu-Siemens Celsius", /* AD1981? */
533 .type = AC97_TUNE_HP_ONLY
536 .vendor = 0x10f1,
537 .device = 0x2885,
538 .name = "AMD64 Mobo", /* ALC650 */
539 .type = AC97_TUNE_HP_ONLY
542 .vendor = 0x110a,
543 .device = 0x0056,
544 .name = "Fujitsu-Siemens Scenic", /* AD1981? */
545 .type = AC97_TUNE_HP_ONLY
548 .vendor = 0x11d4,
549 .device = 0x5375,
550 .name = "ADI AD1985 (discrete)",
551 .type = AC97_TUNE_HP_ONLY
554 .vendor = 0x1462,
555 .device = 0x5470,
556 .name = "MSI P4 ATX 645 Ultra",
557 .type = AC97_TUNE_HP_ONLY
560 .vendor = 0x1734,
561 .device = 0x0088,
562 .name = "Fujitsu-Siemens D1522", /* AD1981 */
563 .type = AC97_TUNE_HP_ONLY
566 .vendor = 0x8086,
567 .device = 0x4856,
568 .name = "Intel D845WN (82801BA)",
569 .type = AC97_TUNE_SWAP_HP
572 .vendor = 0x8086,
573 .device = 0x4d44,
574 .name = "Intel D850EMV2", /* AD1885 */
575 .type = AC97_TUNE_HP_ONLY
578 .vendor = 0x8086,
579 .device = 0x4d56,
580 .name = "Intel ICH/AD1885",
581 .type = AC97_TUNE_HP_ONLY
584 .vendor = 0x1028,
585 .device = 0x012d,
586 .name = "Dell Precision 450", /* AD1981B*/
587 .type = AC97_TUNE_HP_ONLY
590 .vendor = 0x103c,
591 .device = 0x3008,
592 .name = "HP xw4200", /* AD1981B*/
593 .type = AC97_TUNE_HP_ONLY
596 .vendor = 0x103c,
597 .device = 0x12f1,
598 .name = "HP xw8200", /* AD1981B*/
599 .type = AC97_TUNE_HP_ONLY
601 { } /* terminator */
604 static struct i810_card *devs = NULL;
606 static int i810_open_mixdev(struct inode *inode, struct file *file);
607 static int i810_ioctl_mixdev(struct inode *inode, struct file *file,
608 unsigned int cmd, unsigned long arg);
609 static u16 i810_ac97_get(struct ac97_codec *dev, u8 reg);
610 static void i810_ac97_set(struct ac97_codec *dev, u8 reg, u16 data);
611 static u16 i810_ac97_get_mmio(struct ac97_codec *dev, u8 reg);
612 static void i810_ac97_set_mmio(struct ac97_codec *dev, u8 reg, u16 data);
613 static u16 i810_ac97_get_io(struct ac97_codec *dev, u8 reg);
614 static void i810_ac97_set_io(struct ac97_codec *dev, u8 reg, u16 data);
616 static struct i810_channel *i810_alloc_pcm_channel(struct i810_card *card)
618 if(card->channel[1].used==1)
619 return NULL;
620 card->channel[1].used=1;
621 return &card->channel[1];
624 static struct i810_channel *i810_alloc_rec_pcm_channel(struct i810_card *card)
626 if(card->channel[0].used==1)
627 return NULL;
628 card->channel[0].used=1;
629 return &card->channel[0];
632 static struct i810_channel *i810_alloc_rec_mic_channel(struct i810_card *card)
634 if(card->channel[2].used==1)
635 return NULL;
636 card->channel[2].used=1;
637 return &card->channel[2];
640 static void i810_free_pcm_channel(struct i810_card *card, int channel)
642 card->channel[channel].used=0;
645 static int i810_valid_spdif_rate ( struct ac97_codec *codec, int rate )
647 unsigned long id = 0L;
649 id = (i810_ac97_get(codec, AC97_VENDOR_ID1) << 16);
650 id |= i810_ac97_get(codec, AC97_VENDOR_ID2) & 0xffff;
651 #ifdef DEBUG
652 printk ( "i810_audio: codec = %s, codec_id = 0x%08lx\n", codec->name, id);
653 #endif
654 switch ( id ) {
655 case 0x41445361: /* AD1886 */
656 if (rate == 48000) {
657 return 1;
659 break;
660 default: /* all other codecs, until we know otherwiae */
661 if (rate == 48000 || rate == 44100 || rate == 32000) {
662 return 1;
664 break;
666 return (0);
669 /* i810_set_spdif_output
671 * Configure the S/PDIF output transmitter. When we turn on
672 * S/PDIF, we turn off the analog output. This may not be
673 * the right thing to do.
675 * Assumptions:
676 * The DSP sample rate must already be set to a supported
677 * S/PDIF rate (32kHz, 44.1kHz, or 48kHz) or we abort.
679 static int i810_set_spdif_output(struct i810_state *state, int slots, int rate)
681 int vol;
682 int aud_reg;
683 int r = 0;
684 struct ac97_codec *codec = state->card->ac97_codec[0];
686 if(!codec->codec_ops->digital) {
687 state->card->ac97_status &= ~SPDIF_ON;
688 } else {
689 if ( slots == -1 ) { /* Turn off S/PDIF */
690 codec->codec_ops->digital(codec, 0, 0, 0);
691 /* If the volume wasn't muted before we turned on S/PDIF, unmute it */
692 if ( !(state->card->ac97_status & VOL_MUTED) ) {
693 aud_reg = i810_ac97_get(codec, AC97_MASTER_VOL_STEREO);
694 i810_ac97_set(codec, AC97_MASTER_VOL_STEREO, (aud_reg & ~VOL_MUTED));
696 state->card->ac97_status &= ~(VOL_MUTED | SPDIF_ON);
697 return 0;
700 vol = i810_ac97_get(codec, AC97_MASTER_VOL_STEREO);
701 state->card->ac97_status = vol & VOL_MUTED;
703 r = codec->codec_ops->digital(codec, slots, rate, 0);
705 if(r)
706 state->card->ac97_status |= SPDIF_ON;
707 else
708 state->card->ac97_status &= ~SPDIF_ON;
710 /* Mute the analog output */
711 /* Should this only mute the PCM volume??? */
712 i810_ac97_set(codec, AC97_MASTER_VOL_STEREO, (vol | VOL_MUTED));
714 return r;
717 /* i810_set_dac_channels
719 * Configure the codec's multi-channel DACs
721 * The logic is backwards. Setting the bit to 1 turns off the DAC.
723 * What about the ICH? We currently configure it using the
724 * SNDCTL_DSP_CHANNELS ioctl. If we're turnning on the DAC,
725 * does that imply that we want the ICH set to support
726 * these channels?
728 * TODO:
729 * vailidate that the codec really supports these DACs
730 * before turning them on.
732 static void i810_set_dac_channels(struct i810_state *state, int channel)
734 int aud_reg;
735 struct ac97_codec *codec = state->card->ac97_codec[0];
737 /* No codec, no setup */
739 if(codec == NULL)
740 return;
742 aud_reg = i810_ac97_get(codec, AC97_EXTENDED_STATUS);
743 aud_reg |= AC97_EA_PRI | AC97_EA_PRJ | AC97_EA_PRK;
744 state->card->ac97_status &= ~(SURR_ON | CENTER_LFE_ON);
746 switch ( channel ) {
747 case 2: /* always enabled */
748 break;
749 case 4:
750 aud_reg &= ~AC97_EA_PRJ;
751 state->card->ac97_status |= SURR_ON;
752 break;
753 case 6:
754 aud_reg &= ~(AC97_EA_PRJ | AC97_EA_PRI | AC97_EA_PRK);
755 state->card->ac97_status |= SURR_ON | CENTER_LFE_ON;
756 break;
757 default:
758 break;
760 i810_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
765 /* set playback sample rate */
766 static unsigned int i810_set_dac_rate(struct i810_state * state, unsigned int rate)
768 struct dmabuf *dmabuf = &state->dmabuf;
769 u32 new_rate;
770 struct ac97_codec *codec=state->card->ac97_codec[0];
772 if(!(state->card->ac97_features&0x0001))
774 dmabuf->rate = clocking;
775 #ifdef DEBUG
776 printk("Asked for %d Hz, but ac97_features says we only do %dHz. Sorry!\n",
777 rate,clocking);
778 #endif
779 return clocking;
782 if (rate > 48000)
783 rate = 48000;
784 if (rate < 8000)
785 rate = 8000;
786 dmabuf->rate = rate;
789 * Adjust for misclocked crap
791 rate = ( rate * clocking)/48000;
792 if(strict_clocking && rate < 8000) {
793 rate = 8000;
794 dmabuf->rate = (rate * 48000)/clocking;
797 new_rate=ac97_set_dac_rate(codec, rate);
798 if(new_rate != rate) {
799 dmabuf->rate = (new_rate * 48000)/clocking;
801 #ifdef DEBUG
802 printk("i810_audio: called i810_set_dac_rate : asked for %d, got %d\n", rate, dmabuf->rate);
803 #endif
804 rate = new_rate;
805 return dmabuf->rate;
808 /* set recording sample rate */
809 static unsigned int i810_set_adc_rate(struct i810_state * state, unsigned int rate)
811 struct dmabuf *dmabuf = &state->dmabuf;
812 u32 new_rate;
813 struct ac97_codec *codec=state->card->ac97_codec[0];
815 if(!(state->card->ac97_features&0x0001))
817 dmabuf->rate = clocking;
818 return clocking;
821 if (rate > 48000)
822 rate = 48000;
823 if (rate < 8000)
824 rate = 8000;
825 dmabuf->rate = rate;
828 * Adjust for misclocked crap
831 rate = ( rate * clocking)/48000;
832 if(strict_clocking && rate < 8000) {
833 rate = 8000;
834 dmabuf->rate = (rate * 48000)/clocking;
837 new_rate = ac97_set_adc_rate(codec, rate);
839 if(new_rate != rate) {
840 dmabuf->rate = (new_rate * 48000)/clocking;
841 rate = new_rate;
843 #ifdef DEBUG
844 printk("i810_audio: called i810_set_adc_rate : rate = %d/%d\n", dmabuf->rate, rate);
845 #endif
846 return dmabuf->rate;
849 /* get current playback/recording dma buffer pointer (byte offset from LBA),
850 called with spinlock held! */
852 static inline unsigned i810_get_dma_addr(struct i810_state *state, int rec)
854 struct dmabuf *dmabuf = &state->dmabuf;
855 unsigned int civ, offset, port, port_picb, bytes = 2;
857 if (!dmabuf->enable)
858 return 0;
860 if (rec)
861 port = dmabuf->read_channel->port;
862 else
863 port = dmabuf->write_channel->port;
865 if(state->card->pci_id == PCI_DEVICE_ID_SI_7012) {
866 port_picb = port + OFF_SR;
867 bytes = 1;
868 } else
869 port_picb = port + OFF_PICB;
871 do {
872 civ = GET_CIV(state->card, port);
873 offset = I810_IOREADW(state->card, port_picb);
874 /* Must have a delay here! */
875 if(offset == 0)
876 udelay(1);
877 /* Reread both registers and make sure that that total
878 * offset from the first reading to the second is 0.
879 * There is an issue with SiS hardware where it will count
880 * picb down to 0, then update civ to the next value,
881 * then set the new picb to fragsize bytes. We can catch
882 * it between the civ update and the picb update, making
883 * it look as though we are 1 fragsize ahead of where we
884 * are. The next to we get the address though, it will
885 * be back in the right place, and we will suddenly think
886 * we just went forward dmasize - fragsize bytes, causing
887 * totally stupid *huge* dma overrun messages. We are
888 * assuming that the 1us delay is more than long enough
889 * that we won't have to worry about the chip still being
890 * out of sync with reality ;-)
892 } while (civ != GET_CIV(state->card, port) || offset != I810_IOREADW(state->card, port_picb));
894 return (((civ + 1) * dmabuf->fragsize - (bytes * offset))
895 % dmabuf->dmasize);
898 /* Stop recording (lock held) */
899 static inline void __stop_adc(struct i810_state *state)
901 struct dmabuf *dmabuf = &state->dmabuf;
902 struct i810_card *card = state->card;
904 dmabuf->enable &= ~ADC_RUNNING;
905 I810_IOWRITEB(0, card, PI_CR);
906 // wait for the card to acknowledge shutdown
907 while( I810_IOREADB(card, PI_CR) != 0 ) ;
908 // now clear any latent interrupt bits (like the halt bit)
909 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
910 I810_IOWRITEB( I810_IOREADB(card, PI_PICB), card, PI_PICB );
911 else
912 I810_IOWRITEB( I810_IOREADB(card, PI_SR), card, PI_SR );
913 I810_IOWRITEL( I810_IOREADL(card, GLOB_STA) & INT_PI, card, GLOB_STA);
916 static void stop_adc(struct i810_state *state)
918 struct i810_card *card = state->card;
919 unsigned long flags;
921 spin_lock_irqsave(&card->lock, flags);
922 __stop_adc(state);
923 spin_unlock_irqrestore(&card->lock, flags);
926 static inline void __start_adc(struct i810_state *state)
928 struct dmabuf *dmabuf = &state->dmabuf;
930 if (dmabuf->count < dmabuf->dmasize && dmabuf->ready && !dmabuf->enable &&
931 (dmabuf->trigger & PCM_ENABLE_INPUT)) {
932 dmabuf->enable |= ADC_RUNNING;
933 // Interrupt enable, LVI enable, DMA enable
934 I810_IOWRITEB(0x10 | 0x04 | 0x01, state->card, PI_CR);
938 static void start_adc(struct i810_state *state)
940 struct i810_card *card = state->card;
941 unsigned long flags;
943 spin_lock_irqsave(&card->lock, flags);
944 __start_adc(state);
945 spin_unlock_irqrestore(&card->lock, flags);
948 /* stop playback (lock held) */
949 static inline void __stop_dac(struct i810_state *state)
951 struct dmabuf *dmabuf = &state->dmabuf;
952 struct i810_card *card = state->card;
954 dmabuf->enable &= ~DAC_RUNNING;
955 I810_IOWRITEB(0, card, PO_CR);
956 // wait for the card to acknowledge shutdown
957 while( I810_IOREADB(card, PO_CR) != 0 ) ;
958 // now clear any latent interrupt bits (like the halt bit)
959 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
960 I810_IOWRITEB( I810_IOREADB(card, PO_PICB), card, PO_PICB );
961 else
962 I810_IOWRITEB( I810_IOREADB(card, PO_SR), card, PO_SR );
963 I810_IOWRITEL( I810_IOREADL(card, GLOB_STA) & INT_PO, card, GLOB_STA);
966 static void stop_dac(struct i810_state *state)
968 struct i810_card *card = state->card;
969 unsigned long flags;
971 spin_lock_irqsave(&card->lock, flags);
972 __stop_dac(state);
973 spin_unlock_irqrestore(&card->lock, flags);
976 static inline void __start_dac(struct i810_state *state)
978 struct dmabuf *dmabuf = &state->dmabuf;
980 if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
981 (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
982 dmabuf->enable |= DAC_RUNNING;
983 // Interrupt enable, LVI enable, DMA enable
984 I810_IOWRITEB(0x10 | 0x04 | 0x01, state->card, PO_CR);
987 static void start_dac(struct i810_state *state)
989 struct i810_card *card = state->card;
990 unsigned long flags;
992 spin_lock_irqsave(&card->lock, flags);
993 __start_dac(state);
994 spin_unlock_irqrestore(&card->lock, flags);
997 #define DMABUF_DEFAULTORDER (16-PAGE_SHIFT)
998 #define DMABUF_MINORDER 1
1000 /* allocate DMA buffer, playback and recording buffer should be allocated separately */
1001 static int alloc_dmabuf(struct i810_state *state)
1003 struct dmabuf *dmabuf = &state->dmabuf;
1004 void *rawbuf= NULL;
1005 int order, size;
1006 struct page *page, *pend;
1008 /* If we don't have any oss frag params, then use our default ones */
1009 if(dmabuf->ossmaxfrags == 0)
1010 dmabuf->ossmaxfrags = 4;
1011 if(dmabuf->ossfragsize == 0)
1012 dmabuf->ossfragsize = (PAGE_SIZE<<DMABUF_DEFAULTORDER)/dmabuf->ossmaxfrags;
1013 size = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
1015 if(dmabuf->rawbuf && (PAGE_SIZE << dmabuf->buforder) == size)
1016 return 0;
1017 /* alloc enough to satisfy the oss params */
1018 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
1019 if ( (PAGE_SIZE<<order) > size )
1020 continue;
1021 if ((rawbuf = pci_alloc_consistent(state->card->pci_dev,
1022 PAGE_SIZE << order,
1023 &dmabuf->dma_handle)))
1024 break;
1026 if (!rawbuf)
1027 return -ENOMEM;
1030 #ifdef DEBUG
1031 printk("i810_audio: allocated %ld (order = %d) bytes at %p\n",
1032 PAGE_SIZE << order, order, rawbuf);
1033 #endif
1035 dmabuf->ready = dmabuf->mapped = 0;
1036 dmabuf->rawbuf = rawbuf;
1037 dmabuf->buforder = order;
1039 /* now mark the pages as reserved; otherwise remap_pfn_range doesn't do what we want */
1040 pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
1041 for (page = virt_to_page(rawbuf); page <= pend; page++)
1042 SetPageReserved(page);
1044 return 0;
1047 /* free DMA buffer */
1048 static void dealloc_dmabuf(struct i810_state *state)
1050 struct dmabuf *dmabuf = &state->dmabuf;
1051 struct page *page, *pend;
1053 if (dmabuf->rawbuf) {
1054 /* undo marking the pages as reserved */
1055 pend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
1056 for (page = virt_to_page(dmabuf->rawbuf); page <= pend; page++)
1057 ClearPageReserved(page);
1058 pci_free_consistent(state->card->pci_dev, PAGE_SIZE << dmabuf->buforder,
1059 dmabuf->rawbuf, dmabuf->dma_handle);
1061 dmabuf->rawbuf = NULL;
1062 dmabuf->mapped = dmabuf->ready = 0;
1065 static int prog_dmabuf(struct i810_state *state, unsigned rec)
1067 struct dmabuf *dmabuf = &state->dmabuf;
1068 struct i810_channel *c;
1069 struct sg_item *sg;
1070 unsigned long flags;
1071 int ret;
1072 unsigned fragint;
1073 int i;
1075 spin_lock_irqsave(&state->card->lock, flags);
1076 if(dmabuf->enable & DAC_RUNNING)
1077 __stop_dac(state);
1078 if(dmabuf->enable & ADC_RUNNING)
1079 __stop_adc(state);
1080 dmabuf->total_bytes = 0;
1081 dmabuf->count = dmabuf->error = 0;
1082 dmabuf->swptr = dmabuf->hwptr = 0;
1083 spin_unlock_irqrestore(&state->card->lock, flags);
1085 /* allocate DMA buffer, let alloc_dmabuf determine if we are already
1086 * allocated well enough or if we should replace the current buffer
1087 * (assuming one is already allocated, if it isn't, then allocate it).
1089 if ((ret = alloc_dmabuf(state)))
1090 return ret;
1092 /* FIXME: figure out all this OSS fragment stuff */
1093 /* I did, it now does what it should according to the OSS API. DL */
1094 /* We may not have realloced our dmabuf, but the fragment size to
1095 * fragment number ratio may have changed, so go ahead and reprogram
1096 * things
1098 dmabuf->dmasize = PAGE_SIZE << dmabuf->buforder;
1099 dmabuf->numfrag = SG_LEN;
1100 dmabuf->fragsize = dmabuf->dmasize/dmabuf->numfrag;
1101 dmabuf->fragsamples = dmabuf->fragsize >> 1;
1102 dmabuf->fragshift = ffs(dmabuf->fragsize) - 1;
1103 dmabuf->userfragsize = dmabuf->ossfragsize;
1104 dmabuf->userfrags = dmabuf->dmasize/dmabuf->ossfragsize;
1106 memset(dmabuf->rawbuf, 0, dmabuf->dmasize);
1108 if(dmabuf->ossmaxfrags == 4) {
1109 fragint = 8;
1110 } else if (dmabuf->ossmaxfrags == 8) {
1111 fragint = 4;
1112 } else if (dmabuf->ossmaxfrags == 16) {
1113 fragint = 2;
1114 } else {
1115 fragint = 1;
1118 * Now set up the ring
1120 if(dmabuf->read_channel)
1121 c = dmabuf->read_channel;
1122 else
1123 c = dmabuf->write_channel;
1124 while(c != NULL) {
1125 sg=&c->sg[0];
1127 * Load up 32 sg entries and take an interrupt at half
1128 * way (we might want more interrupts later..)
1131 for(i=0;i<dmabuf->numfrag;i++)
1133 sg->busaddr=(u32)dmabuf->dma_handle+dmabuf->fragsize*i;
1134 // the card will always be doing 16bit stereo
1135 sg->control=dmabuf->fragsamples;
1136 if(state->card->pci_id == PCI_DEVICE_ID_SI_7012)
1137 sg->control <<= 1;
1138 sg->control|=CON_BUFPAD;
1139 // set us up to get IOC interrupts as often as needed to
1140 // satisfy numfrag requirements, no more
1141 if( ((i+1) % fragint) == 0) {
1142 sg->control|=CON_IOC;
1144 sg++;
1146 spin_lock_irqsave(&state->card->lock, flags);
1147 I810_IOWRITEB(2, state->card, c->port+OFF_CR); /* reset DMA machine */
1148 while( I810_IOREADB(state->card, c->port+OFF_CR) & 0x02 ) ;
1149 I810_IOWRITEL((u32)state->card->chandma +
1150 c->num*sizeof(struct i810_channel),
1151 state->card, c->port+OFF_BDBAR);
1152 CIV_TO_LVI(state->card, c->port, 0);
1154 spin_unlock_irqrestore(&state->card->lock, flags);
1156 if(c != dmabuf->write_channel)
1157 c = dmabuf->write_channel;
1158 else
1159 c = NULL;
1162 /* set the ready flag for the dma buffer */
1163 dmabuf->ready = 1;
1165 #ifdef DEBUG
1166 printk("i810_audio: prog_dmabuf, sample rate = %d, format = %d,\n\tnumfrag = %d, "
1167 "fragsize = %d dmasize = %d\n",
1168 dmabuf->rate, dmabuf->fmt, dmabuf->numfrag,
1169 dmabuf->fragsize, dmabuf->dmasize);
1170 #endif
1172 return 0;
1175 static void __i810_update_lvi(struct i810_state *state, int rec)
1177 struct dmabuf *dmabuf = &state->dmabuf;
1178 int x, port;
1179 int trigger;
1180 int count, fragsize;
1181 void (*start)(struct i810_state *);
1183 count = dmabuf->count;
1184 if (rec) {
1185 port = dmabuf->read_channel->port;
1186 trigger = PCM_ENABLE_INPUT;
1187 start = __start_adc;
1188 count = dmabuf->dmasize - count;
1189 } else {
1190 port = dmabuf->write_channel->port;
1191 trigger = PCM_ENABLE_OUTPUT;
1192 start = __start_dac;
1195 /* Do not process partial fragments. */
1196 fragsize = dmabuf->fragsize;
1197 if (count < fragsize)
1198 return;
1200 /* if we are currently stopped, then our CIV is actually set to our
1201 * *last* sg segment and we are ready to wrap to the next. However,
1202 * if we set our LVI to the last sg segment, then it won't wrap to
1203 * the next sg segment, it won't even get a start. So, instead, when
1204 * we are stopped, we set both the LVI value and also we increment
1205 * the CIV value to the next sg segment to be played so that when
1206 * we call start, things will operate properly. Since the CIV can't
1207 * be written to directly for this purpose, we set the LVI to CIV + 1
1208 * temporarily. Once the engine has started we set the LVI to its
1209 * final value.
1211 if (!dmabuf->enable && dmabuf->ready) {
1212 if (!(dmabuf->trigger & trigger))
1213 return;
1215 CIV_TO_LVI(state->card, port, 1);
1217 start(state);
1218 while (!(I810_IOREADB(state->card, port + OFF_CR) & ((1<<4) | (1<<2))))
1222 /* MASKP2(swptr, fragsize) - 1 is the tail of our transfer */
1223 x = MODULOP2(MASKP2(dmabuf->swptr, fragsize) - 1, dmabuf->dmasize);
1224 x >>= dmabuf->fragshift;
1225 I810_IOWRITEB(x, state->card, port + OFF_LVI);
1228 static void i810_update_lvi(struct i810_state *state, int rec)
1230 struct dmabuf *dmabuf = &state->dmabuf;
1231 unsigned long flags;
1233 if(!dmabuf->ready)
1234 return;
1235 spin_lock_irqsave(&state->card->lock, flags);
1236 __i810_update_lvi(state, rec);
1237 spin_unlock_irqrestore(&state->card->lock, flags);
1240 /* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */
1241 static void i810_update_ptr(struct i810_state *state)
1243 struct dmabuf *dmabuf = &state->dmabuf;
1244 unsigned hwptr;
1245 unsigned fragmask, dmamask;
1246 int diff;
1248 fragmask = MASKP2(~0, dmabuf->fragsize);
1249 dmamask = MODULOP2(~0, dmabuf->dmasize);
1251 /* error handling and process wake up for ADC */
1252 if (dmabuf->enable == ADC_RUNNING) {
1253 /* update hardware pointer */
1254 hwptr = i810_get_dma_addr(state, 1) & fragmask;
1255 diff = (hwptr - dmabuf->hwptr) & dmamask;
1256 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
1257 printk("ADC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
1258 #endif
1259 dmabuf->hwptr = hwptr;
1260 dmabuf->total_bytes += diff;
1261 dmabuf->count += diff;
1262 if (dmabuf->count > dmabuf->dmasize) {
1263 /* buffer underrun or buffer overrun */
1264 /* this is normal for the end of a read */
1265 /* only give an error if we went past the */
1266 /* last valid sg entry */
1267 if (GET_CIV(state->card, PI_BASE) !=
1268 GET_LVI(state->card, PI_BASE)) {
1269 printk(KERN_WARNING "i810_audio: DMA overrun on read\n");
1270 dmabuf->error++;
1273 if (diff)
1274 wake_up(&dmabuf->wait);
1276 /* error handling and process wake up for DAC */
1277 if (dmabuf->enable == DAC_RUNNING) {
1278 /* update hardware pointer */
1279 hwptr = i810_get_dma_addr(state, 0) & fragmask;
1280 diff = (hwptr - dmabuf->hwptr) & dmamask;
1281 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
1282 printk("DAC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
1283 #endif
1284 dmabuf->hwptr = hwptr;
1285 dmabuf->total_bytes += diff;
1286 dmabuf->count -= diff;
1287 if (dmabuf->count < 0) {
1288 /* buffer underrun or buffer overrun */
1289 /* this is normal for the end of a write */
1290 /* only give an error if we went past the */
1291 /* last valid sg entry */
1292 if (GET_CIV(state->card, PO_BASE) !=
1293 GET_LVI(state->card, PO_BASE)) {
1294 printk(KERN_WARNING "i810_audio: DMA overrun on write\n");
1295 printk("i810_audio: CIV %d, LVI %d, hwptr %x, "
1296 "count %d\n",
1297 GET_CIV(state->card, PO_BASE),
1298 GET_LVI(state->card, PO_BASE),
1299 dmabuf->hwptr, dmabuf->count);
1300 dmabuf->error++;
1303 if (diff)
1304 wake_up(&dmabuf->wait);
1308 static inline int i810_get_free_write_space(struct i810_state *state)
1310 struct dmabuf *dmabuf = &state->dmabuf;
1311 int free;
1313 i810_update_ptr(state);
1314 // catch underruns during playback
1315 if (dmabuf->count < 0) {
1316 dmabuf->count = 0;
1317 dmabuf->swptr = dmabuf->hwptr;
1319 free = dmabuf->dmasize - dmabuf->count;
1320 if(free < 0)
1321 return(0);
1322 return(free);
1325 static inline int i810_get_available_read_data(struct i810_state *state)
1327 struct dmabuf *dmabuf = &state->dmabuf;
1328 int avail;
1330 i810_update_ptr(state);
1331 // catch overruns during record
1332 if (dmabuf->count > dmabuf->dmasize) {
1333 dmabuf->count = dmabuf->dmasize;
1334 dmabuf->swptr = dmabuf->hwptr;
1336 avail = dmabuf->count;
1337 if(avail < 0)
1338 return(0);
1339 return(avail);
1342 static inline void fill_partial_frag(struct dmabuf *dmabuf)
1344 unsigned fragsize;
1345 unsigned swptr, len;
1347 fragsize = dmabuf->fragsize;
1348 swptr = dmabuf->swptr;
1349 len = fragsize - MODULOP2(dmabuf->swptr, fragsize);
1350 if (len == fragsize)
1351 return;
1353 memset(dmabuf->rawbuf + swptr, '\0', len);
1354 dmabuf->swptr = MODULOP2(swptr + len, dmabuf->dmasize);
1355 dmabuf->count += len;
1358 static int drain_dac(struct i810_state *state, int signals_allowed)
1360 DECLARE_WAITQUEUE(wait, current);
1361 struct dmabuf *dmabuf = &state->dmabuf;
1362 unsigned long flags;
1363 unsigned long tmo;
1364 int count;
1366 if (!dmabuf->ready)
1367 return 0;
1368 if(dmabuf->mapped) {
1369 stop_dac(state);
1370 return 0;
1373 spin_lock_irqsave(&state->card->lock, flags);
1375 fill_partial_frag(dmabuf);
1378 * This will make sure that our LVI is correct, that our
1379 * pointer is updated, and that the DAC is running. We
1380 * have to force the setting of dmabuf->trigger to avoid
1381 * any possible deadlocks.
1383 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1384 __i810_update_lvi(state, 0);
1386 spin_unlock_irqrestore(&state->card->lock, flags);
1388 add_wait_queue(&dmabuf->wait, &wait);
1389 for (;;) {
1391 spin_lock_irqsave(&state->card->lock, flags);
1392 i810_update_ptr(state);
1393 count = dmabuf->count;
1395 /* It seems that we have to set the current state to
1396 * TASK_INTERRUPTIBLE every time to make the process
1397 * really go to sleep. This also has to be *after* the
1398 * update_ptr() call because update_ptr is likely to
1399 * do a wake_up() which will unset this before we ever
1400 * try to sleep, resuling in a tight loop in this code
1401 * instead of actually sleeping and waiting for an
1402 * interrupt to wake us up!
1404 __set_current_state(signals_allowed ?
1405 TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
1406 spin_unlock_irqrestore(&state->card->lock, flags);
1408 if (count <= 0)
1409 break;
1411 if (signal_pending(current) && signals_allowed) {
1412 break;
1416 * set the timeout to significantly longer than it *should*
1417 * take for the DAC to drain the DMA buffer
1419 tmo = (count * HZ) / (dmabuf->rate);
1420 if (!schedule_timeout(tmo >= 2 ? tmo : 2)){
1421 printk(KERN_ERR "i810_audio: drain_dac, dma timeout?\n");
1422 count = 0;
1423 break;
1426 set_current_state(TASK_RUNNING);
1427 remove_wait_queue(&dmabuf->wait, &wait);
1428 if(count > 0 && signal_pending(current) && signals_allowed)
1429 return -ERESTARTSYS;
1430 stop_dac(state);
1431 return 0;
1434 static void i810_channel_interrupt(struct i810_card *card)
1436 int i, count;
1438 #ifdef DEBUG_INTERRUPTS
1439 printk("CHANNEL ");
1440 #endif
1441 for(i=0;i<NR_HW_CH;i++)
1443 struct i810_state *state = card->states[i];
1444 struct i810_channel *c;
1445 struct dmabuf *dmabuf;
1446 unsigned long port;
1447 u16 status;
1449 if(!state)
1450 continue;
1451 if(!state->dmabuf.ready)
1452 continue;
1453 dmabuf = &state->dmabuf;
1454 if(dmabuf->enable & DAC_RUNNING) {
1455 c=dmabuf->write_channel;
1456 } else if(dmabuf->enable & ADC_RUNNING) {
1457 c=dmabuf->read_channel;
1458 } else /* This can occur going from R/W to close */
1459 continue;
1461 port = c->port;
1463 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
1464 status = I810_IOREADW(card, port + OFF_PICB);
1465 else
1466 status = I810_IOREADW(card, port + OFF_SR);
1468 #ifdef DEBUG_INTERRUPTS
1469 printk("NUM %d PORT %X IRQ ( ST%d ", c->num, c->port, status);
1470 #endif
1471 if(status & DMA_INT_COMPLETE)
1473 /* only wake_up() waiters if this interrupt signals
1474 * us being beyond a userfragsize of data open or
1475 * available, and i810_update_ptr() does that for
1476 * us
1478 i810_update_ptr(state);
1479 #ifdef DEBUG_INTERRUPTS
1480 printk("COMP %d ", dmabuf->hwptr /
1481 dmabuf->fragsize);
1482 #endif
1484 if(status & (DMA_INT_LVI | DMA_INT_DCH))
1486 /* wake_up() unconditionally on LVI and DCH */
1487 i810_update_ptr(state);
1488 wake_up(&dmabuf->wait);
1489 #ifdef DEBUG_INTERRUPTS
1490 if(status & DMA_INT_LVI)
1491 printk("LVI ");
1492 if(status & DMA_INT_DCH)
1493 printk("DCH -");
1494 #endif
1495 count = dmabuf->count;
1496 if(dmabuf->enable & ADC_RUNNING)
1497 count = dmabuf->dmasize - count;
1498 if (count >= (int)dmabuf->fragsize) {
1499 I810_IOWRITEB(I810_IOREADB(card, port+OFF_CR) | 1, card, port+OFF_CR);
1500 #ifdef DEBUG_INTERRUPTS
1501 printk(" CONTINUE ");
1502 #endif
1503 } else {
1504 if (dmabuf->enable & DAC_RUNNING)
1505 __stop_dac(state);
1506 if (dmabuf->enable & ADC_RUNNING)
1507 __stop_adc(state);
1508 dmabuf->enable = 0;
1509 #ifdef DEBUG_INTERRUPTS
1510 printk(" STOP ");
1511 #endif
1514 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
1515 I810_IOWRITEW(status & DMA_INT_MASK, card, port + OFF_PICB);
1516 else
1517 I810_IOWRITEW(status & DMA_INT_MASK, card, port + OFF_SR);
1519 #ifdef DEBUG_INTERRUPTS
1520 printk(")\n");
1521 #endif
1524 static irqreturn_t i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1526 struct i810_card *card = (struct i810_card *)dev_id;
1527 u32 status;
1529 spin_lock(&card->lock);
1531 status = I810_IOREADL(card, GLOB_STA);
1533 if(!(status & INT_MASK))
1535 spin_unlock(&card->lock);
1536 return IRQ_NONE; /* not for us */
1539 if(status & (INT_PO|INT_PI|INT_MC))
1540 i810_channel_interrupt(card);
1542 /* clear 'em */
1543 I810_IOWRITEL(status & INT_MASK, card, GLOB_STA);
1544 spin_unlock(&card->lock);
1545 return IRQ_HANDLED;
1548 /* in this loop, dmabuf.count signifies the amount of data that is
1549 waiting to be copied to the user's buffer. It is filled by the dma
1550 machine and drained by this loop. */
1552 static ssize_t i810_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
1554 struct i810_state *state = (struct i810_state *)file->private_data;
1555 struct i810_card *card=state ? state->card : NULL;
1556 struct dmabuf *dmabuf = &state->dmabuf;
1557 ssize_t ret;
1558 unsigned long flags;
1559 unsigned int swptr;
1560 int cnt;
1561 int pending;
1562 DECLARE_WAITQUEUE(waita, current);
1564 #ifdef DEBUG2
1565 printk("i810_audio: i810_read called, count = %d\n", count);
1566 #endif
1568 if (dmabuf->mapped)
1569 return -ENXIO;
1570 if (dmabuf->enable & DAC_RUNNING)
1571 return -ENODEV;
1572 if (!dmabuf->read_channel) {
1573 dmabuf->ready = 0;
1574 dmabuf->read_channel = card->alloc_rec_pcm_channel(card);
1575 if (!dmabuf->read_channel) {
1576 return -EBUSY;
1579 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
1580 return ret;
1581 if (!access_ok(VERIFY_WRITE, buffer, count))
1582 return -EFAULT;
1583 ret = 0;
1585 pending = 0;
1587 add_wait_queue(&dmabuf->wait, &waita);
1588 while (count > 0) {
1589 set_current_state(TASK_INTERRUPTIBLE);
1590 spin_lock_irqsave(&card->lock, flags);
1591 if (PM_SUSPENDED(card)) {
1592 spin_unlock_irqrestore(&card->lock, flags);
1593 schedule();
1594 if (signal_pending(current)) {
1595 if (!ret) ret = -EAGAIN;
1596 break;
1598 continue;
1600 cnt = i810_get_available_read_data(state);
1601 swptr = dmabuf->swptr;
1602 // this is to make the copy_to_user simpler below
1603 if(cnt > (dmabuf->dmasize - swptr))
1604 cnt = dmabuf->dmasize - swptr;
1605 spin_unlock_irqrestore(&card->lock, flags);
1607 if (cnt > count)
1608 cnt = count;
1609 if (cnt <= 0) {
1610 unsigned long tmo;
1612 * Don't let us deadlock. The ADC won't start if
1613 * dmabuf->trigger isn't set. A call to SETTRIGGER
1614 * could have turned it off after we set it to on
1615 * previously.
1617 dmabuf->trigger = PCM_ENABLE_INPUT;
1619 * This does three things. Updates LVI to be correct,
1620 * makes sure the ADC is running, and updates the
1621 * hwptr.
1623 i810_update_lvi(state,1);
1624 if (file->f_flags & O_NONBLOCK) {
1625 if (!ret) ret = -EAGAIN;
1626 goto done;
1628 /* Set the timeout to how long it would take to fill
1629 * two of our buffers. If we haven't been woke up
1630 * by then, then we know something is wrong.
1632 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1633 /* There are two situations when sleep_on_timeout returns, one is when
1634 the interrupt is serviced correctly and the process is waked up by
1635 ISR ON TIME. Another is when timeout is expired, which means that
1636 either interrupt is NOT serviced correctly (pending interrupt) or it
1637 is TOO LATE for the process to be scheduled to run (scheduler latency)
1638 which results in a (potential) buffer overrun. And worse, there is
1639 NOTHING we can do to prevent it. */
1640 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1641 #ifdef DEBUG
1642 printk(KERN_ERR "i810_audio: recording schedule timeout, "
1643 "dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
1644 dmabuf->dmasize, dmabuf->fragsize, dmabuf->count,
1645 dmabuf->hwptr, dmabuf->swptr);
1646 #endif
1647 /* a buffer overrun, we delay the recovery until next time the
1648 while loop begin and we REALLY have space to record */
1650 if (signal_pending(current)) {
1651 ret = ret ? ret : -ERESTARTSYS;
1652 goto done;
1654 continue;
1657 if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
1658 if (!ret) ret = -EFAULT;
1659 goto done;
1662 swptr = MODULOP2(swptr + cnt, dmabuf->dmasize);
1664 spin_lock_irqsave(&card->lock, flags);
1666 if (PM_SUSPENDED(card)) {
1667 spin_unlock_irqrestore(&card->lock, flags);
1668 continue;
1670 dmabuf->swptr = swptr;
1671 pending = dmabuf->count -= cnt;
1672 spin_unlock_irqrestore(&card->lock, flags);
1674 count -= cnt;
1675 buffer += cnt;
1676 ret += cnt;
1678 done:
1679 pending = dmabuf->dmasize - pending;
1680 if (dmabuf->enable || pending >= dmabuf->userfragsize)
1681 i810_update_lvi(state, 1);
1682 set_current_state(TASK_RUNNING);
1683 remove_wait_queue(&dmabuf->wait, &waita);
1685 return ret;
1688 /* in this loop, dmabuf.count signifies the amount of data that is waiting to be dma to
1689 the soundcard. it is drained by the dma machine and filled by this loop. */
1690 static ssize_t i810_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
1692 struct i810_state *state = (struct i810_state *)file->private_data;
1693 struct i810_card *card=state ? state->card : NULL;
1694 struct dmabuf *dmabuf = &state->dmabuf;
1695 ssize_t ret;
1696 unsigned long flags;
1697 unsigned int swptr = 0;
1698 int pending;
1699 int cnt;
1700 DECLARE_WAITQUEUE(waita, current);
1702 #ifdef DEBUG2
1703 printk("i810_audio: i810_write called, count = %d\n", count);
1704 #endif
1706 if (dmabuf->mapped)
1707 return -ENXIO;
1708 if (dmabuf->enable & ADC_RUNNING)
1709 return -ENODEV;
1710 if (!dmabuf->write_channel) {
1711 dmabuf->ready = 0;
1712 dmabuf->write_channel = card->alloc_pcm_channel(card);
1713 if(!dmabuf->write_channel)
1714 return -EBUSY;
1716 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
1717 return ret;
1718 if (!access_ok(VERIFY_READ, buffer, count))
1719 return -EFAULT;
1720 ret = 0;
1722 pending = 0;
1724 add_wait_queue(&dmabuf->wait, &waita);
1725 while (count > 0) {
1726 set_current_state(TASK_INTERRUPTIBLE);
1727 spin_lock_irqsave(&state->card->lock, flags);
1728 if (PM_SUSPENDED(card)) {
1729 spin_unlock_irqrestore(&card->lock, flags);
1730 schedule();
1731 if (signal_pending(current)) {
1732 if (!ret) ret = -EAGAIN;
1733 break;
1735 continue;
1738 cnt = i810_get_free_write_space(state);
1739 swptr = dmabuf->swptr;
1740 /* Bound the maximum size to how much we can copy to the
1741 * dma buffer before we hit the end. If we have more to
1742 * copy then it will get done in a second pass of this
1743 * loop starting from the beginning of the buffer.
1745 if(cnt > (dmabuf->dmasize - swptr))
1746 cnt = dmabuf->dmasize - swptr;
1747 spin_unlock_irqrestore(&state->card->lock, flags);
1749 #ifdef DEBUG2
1750 printk(KERN_INFO "i810_audio: i810_write: %d bytes available space\n", cnt);
1751 #endif
1752 if (cnt > count)
1753 cnt = count;
1754 if (cnt <= 0) {
1755 unsigned long tmo;
1756 // There is data waiting to be played
1758 * Force the trigger setting since we would
1759 * deadlock with it set any other way
1761 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1762 i810_update_lvi(state,0);
1763 if (file->f_flags & O_NONBLOCK) {
1764 if (!ret) ret = -EAGAIN;
1765 goto ret;
1767 /* Not strictly correct but works */
1768 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1769 /* There are two situations when sleep_on_timeout returns, one is when
1770 the interrupt is serviced correctly and the process is waked up by
1771 ISR ON TIME. Another is when timeout is expired, which means that
1772 either interrupt is NOT serviced correctly (pending interrupt) or it
1773 is TOO LATE for the process to be scheduled to run (scheduler latency)
1774 which results in a (potential) buffer underrun. And worse, there is
1775 NOTHING we can do to prevent it. */
1776 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1777 #ifdef DEBUG
1778 printk(KERN_ERR "i810_audio: playback schedule timeout, "
1779 "dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
1780 dmabuf->dmasize, dmabuf->fragsize, dmabuf->count,
1781 dmabuf->hwptr, dmabuf->swptr);
1782 #endif
1783 /* a buffer underrun, we delay the recovery until next time the
1784 while loop begin and we REALLY have data to play */
1785 //return ret;
1787 if (signal_pending(current)) {
1788 if (!ret) ret = -ERESTARTSYS;
1789 goto ret;
1791 continue;
1793 if (copy_from_user(dmabuf->rawbuf+swptr,buffer,cnt)) {
1794 if (!ret) ret = -EFAULT;
1795 goto ret;
1798 swptr = MODULOP2(swptr + cnt, dmabuf->dmasize);
1800 spin_lock_irqsave(&state->card->lock, flags);
1801 if (PM_SUSPENDED(card)) {
1802 spin_unlock_irqrestore(&card->lock, flags);
1803 continue;
1806 dmabuf->swptr = swptr;
1807 pending = dmabuf->count += cnt;
1809 count -= cnt;
1810 buffer += cnt;
1811 ret += cnt;
1812 spin_unlock_irqrestore(&state->card->lock, flags);
1814 ret:
1815 if (dmabuf->enable || pending >= dmabuf->userfragsize)
1816 i810_update_lvi(state, 0);
1817 set_current_state(TASK_RUNNING);
1818 remove_wait_queue(&dmabuf->wait, &waita);
1820 return ret;
1823 /* No kernel lock - we have our own spinlock */
1824 static unsigned int i810_poll(struct file *file, struct poll_table_struct *wait)
1826 struct i810_state *state = (struct i810_state *)file->private_data;
1827 struct dmabuf *dmabuf = &state->dmabuf;
1828 unsigned long flags;
1829 unsigned int mask = 0;
1831 if(!dmabuf->ready)
1832 return 0;
1833 poll_wait(file, &dmabuf->wait, wait);
1834 spin_lock_irqsave(&state->card->lock, flags);
1835 if (dmabuf->enable & ADC_RUNNING ||
1836 dmabuf->trigger & PCM_ENABLE_INPUT) {
1837 if (i810_get_available_read_data(state) >=
1838 (signed)dmabuf->userfragsize)
1839 mask |= POLLIN | POLLRDNORM;
1841 if (dmabuf->enable & DAC_RUNNING ||
1842 dmabuf->trigger & PCM_ENABLE_OUTPUT) {
1843 if (i810_get_free_write_space(state) >=
1844 (signed)dmabuf->userfragsize)
1845 mask |= POLLOUT | POLLWRNORM;
1847 spin_unlock_irqrestore(&state->card->lock, flags);
1848 return mask;
1851 static int i810_mmap(struct file *file, struct vm_area_struct *vma)
1853 struct i810_state *state = (struct i810_state *)file->private_data;
1854 struct dmabuf *dmabuf = &state->dmabuf;
1855 int ret = -EINVAL;
1856 unsigned long size;
1858 lock_kernel();
1859 if (vma->vm_flags & VM_WRITE) {
1860 if (!dmabuf->write_channel &&
1861 (dmabuf->write_channel =
1862 state->card->alloc_pcm_channel(state->card)) == NULL) {
1863 ret = -EBUSY;
1864 goto out;
1867 if (vma->vm_flags & VM_READ) {
1868 if (!dmabuf->read_channel &&
1869 (dmabuf->read_channel =
1870 state->card->alloc_rec_pcm_channel(state->card)) == NULL) {
1871 ret = -EBUSY;
1872 goto out;
1875 if ((ret = prog_dmabuf(state, 0)) != 0)
1876 goto out;
1878 ret = -EINVAL;
1879 if (vma->vm_pgoff != 0)
1880 goto out;
1881 size = vma->vm_end - vma->vm_start;
1882 if (size > (PAGE_SIZE << dmabuf->buforder))
1883 goto out;
1884 ret = -EAGAIN;
1885 if (remap_pfn_range(vma, vma->vm_start,
1886 virt_to_phys(dmabuf->rawbuf) >> PAGE_SHIFT,
1887 size, vma->vm_page_prot))
1888 goto out;
1889 dmabuf->mapped = 1;
1890 dmabuf->trigger = 0;
1891 ret = 0;
1892 #ifdef DEBUG_MMAP
1893 printk("i810_audio: mmap'ed %ld bytes of data space\n", size);
1894 #endif
1895 out:
1896 unlock_kernel();
1897 return ret;
1900 static int i810_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1902 struct i810_state *state = (struct i810_state *)file->private_data;
1903 struct i810_channel *c = NULL;
1904 struct dmabuf *dmabuf = &state->dmabuf;
1905 unsigned long flags;
1906 audio_buf_info abinfo;
1907 count_info cinfo;
1908 unsigned int i_glob_cnt;
1909 int val = 0, ret;
1910 struct ac97_codec *codec = state->card->ac97_codec[0];
1911 void __user *argp = (void __user *)arg;
1912 int __user *p = argp;
1914 #ifdef DEBUG
1915 printk("i810_audio: i810_ioctl, arg=0x%x, cmd=", arg ? *p : 0);
1916 #endif
1918 switch (cmd)
1920 case OSS_GETVERSION:
1921 #ifdef DEBUG
1922 printk("OSS_GETVERSION\n");
1923 #endif
1924 return put_user(SOUND_VERSION, p);
1926 case SNDCTL_DSP_RESET:
1927 #ifdef DEBUG
1928 printk("SNDCTL_DSP_RESET\n");
1929 #endif
1930 spin_lock_irqsave(&state->card->lock, flags);
1931 if (dmabuf->enable == DAC_RUNNING) {
1932 c = dmabuf->write_channel;
1933 __stop_dac(state);
1935 if (dmabuf->enable == ADC_RUNNING) {
1936 c = dmabuf->read_channel;
1937 __stop_adc(state);
1939 if (c != NULL) {
1940 I810_IOWRITEB(2, state->card, c->port+OFF_CR); /* reset DMA machine */
1941 while ( I810_IOREADB(state->card, c->port+OFF_CR) & 2 )
1942 cpu_relax();
1943 I810_IOWRITEL((u32)state->card->chandma +
1944 c->num*sizeof(struct i810_channel),
1945 state->card, c->port+OFF_BDBAR);
1946 CIV_TO_LVI(state->card, c->port, 0);
1949 spin_unlock_irqrestore(&state->card->lock, flags);
1950 synchronize_irq(state->card->pci_dev->irq);
1951 dmabuf->ready = 0;
1952 dmabuf->swptr = dmabuf->hwptr = 0;
1953 dmabuf->count = dmabuf->total_bytes = 0;
1954 return 0;
1956 case SNDCTL_DSP_SYNC:
1957 #ifdef DEBUG
1958 printk("SNDCTL_DSP_SYNC\n");
1959 #endif
1960 if (dmabuf->enable != DAC_RUNNING || file->f_flags & O_NONBLOCK)
1961 return 0;
1962 if((val = drain_dac(state, 1)))
1963 return val;
1964 dmabuf->total_bytes = 0;
1965 return 0;
1967 case SNDCTL_DSP_SPEED: /* set smaple rate */
1968 #ifdef DEBUG
1969 printk("SNDCTL_DSP_SPEED\n");
1970 #endif
1971 if (get_user(val, p))
1972 return -EFAULT;
1973 if (val >= 0) {
1974 if (file->f_mode & FMODE_WRITE) {
1975 if ( (state->card->ac97_status & SPDIF_ON) ) { /* S/PDIF Enabled */
1976 /* AD1886 only supports 48000, need to check that */
1977 if ( i810_valid_spdif_rate ( codec, val ) ) {
1978 /* Set DAC rate */
1979 i810_set_spdif_output ( state, -1, 0 );
1980 stop_dac(state);
1981 dmabuf->ready = 0;
1982 spin_lock_irqsave(&state->card->lock, flags);
1983 i810_set_dac_rate(state, val);
1984 spin_unlock_irqrestore(&state->card->lock, flags);
1985 /* Set S/PDIF transmitter rate. */
1986 i810_set_spdif_output ( state, AC97_EA_SPSA_3_4, val );
1987 if ( ! (state->card->ac97_status & SPDIF_ON) ) {
1988 val = dmabuf->rate;
1990 } else { /* Not a valid rate for S/PDIF, ignore it */
1991 val = dmabuf->rate;
1993 } else {
1994 stop_dac(state);
1995 dmabuf->ready = 0;
1996 spin_lock_irqsave(&state->card->lock, flags);
1997 i810_set_dac_rate(state, val);
1998 spin_unlock_irqrestore(&state->card->lock, flags);
2001 if (file->f_mode & FMODE_READ) {
2002 stop_adc(state);
2003 dmabuf->ready = 0;
2004 spin_lock_irqsave(&state->card->lock, flags);
2005 i810_set_adc_rate(state, val);
2006 spin_unlock_irqrestore(&state->card->lock, flags);
2009 return put_user(dmabuf->rate, p);
2011 case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
2012 #ifdef DEBUG
2013 printk("SNDCTL_DSP_STEREO\n");
2014 #endif
2015 if (dmabuf->enable & DAC_RUNNING) {
2016 stop_dac(state);
2018 if (dmabuf->enable & ADC_RUNNING) {
2019 stop_adc(state);
2021 return put_user(1, p);
2023 case SNDCTL_DSP_GETBLKSIZE:
2024 if (file->f_mode & FMODE_WRITE) {
2025 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)))
2026 return val;
2028 if (file->f_mode & FMODE_READ) {
2029 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)))
2030 return val;
2032 #ifdef DEBUG
2033 printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize);
2034 #endif
2035 return put_user(dmabuf->userfragsize, p);
2037 case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/
2038 #ifdef DEBUG
2039 printk("SNDCTL_DSP_GETFMTS\n");
2040 #endif
2041 return put_user(AFMT_S16_LE, p);
2043 case SNDCTL_DSP_SETFMT: /* Select sample format */
2044 #ifdef DEBUG
2045 printk("SNDCTL_DSP_SETFMT\n");
2046 #endif
2047 return put_user(AFMT_S16_LE, p);
2049 case SNDCTL_DSP_CHANNELS:
2050 #ifdef DEBUG
2051 printk("SNDCTL_DSP_CHANNELS\n");
2052 #endif
2053 if (get_user(val, p))
2054 return -EFAULT;
2056 if (val > 0) {
2057 if (dmabuf->enable & DAC_RUNNING) {
2058 stop_dac(state);
2060 if (dmabuf->enable & ADC_RUNNING) {
2061 stop_adc(state);
2063 } else {
2064 return put_user(state->card->channels, p);
2067 /* ICH and ICH0 only support 2 channels */
2068 if ( state->card->pci_id == PCI_DEVICE_ID_INTEL_82801AA_5
2069 || state->card->pci_id == PCI_DEVICE_ID_INTEL_82801AB_5)
2070 return put_user(2, p);
2072 /* Multi-channel support was added with ICH2. Bits in */
2073 /* Global Status and Global Control register are now */
2074 /* used to indicate this. */
2076 i_glob_cnt = I810_IOREADL(state->card, GLOB_CNT);
2078 /* Current # of channels enabled */
2079 if ( i_glob_cnt & 0x0100000 )
2080 ret = 4;
2081 else if ( i_glob_cnt & 0x0200000 )
2082 ret = 6;
2083 else
2084 ret = 2;
2086 switch ( val ) {
2087 case 2: /* 2 channels is always supported */
2088 I810_IOWRITEL(i_glob_cnt & 0xffcfffff,
2089 state->card, GLOB_CNT);
2090 /* Do we need to change mixer settings???? */
2091 break;
2092 case 4: /* Supported on some chipsets, better check first */
2093 if ( state->card->channels >= 4 ) {
2094 I810_IOWRITEL((i_glob_cnt & 0xffcfffff) | 0x100000,
2095 state->card, GLOB_CNT);
2096 /* Do we need to change mixer settings??? */
2097 } else {
2098 val = ret;
2100 break;
2101 case 6: /* Supported on some chipsets, better check first */
2102 if ( state->card->channels >= 6 ) {
2103 I810_IOWRITEL((i_glob_cnt & 0xffcfffff) | 0x200000,
2104 state->card, GLOB_CNT);
2105 /* Do we need to change mixer settings??? */
2106 } else {
2107 val = ret;
2109 break;
2110 default: /* nothing else is ever supported by the chipset */
2111 val = ret;
2112 break;
2115 return put_user(val, p);
2117 case SNDCTL_DSP_POST: /* the user has sent all data and is notifying us */
2118 /* we update the swptr to the end of the last sg segment then return */
2119 #ifdef DEBUG
2120 printk("SNDCTL_DSP_POST\n");
2121 #endif
2122 if(!dmabuf->ready || (dmabuf->enable != DAC_RUNNING))
2123 return 0;
2124 if((dmabuf->swptr % dmabuf->fragsize) != 0) {
2125 val = dmabuf->fragsize - (dmabuf->swptr % dmabuf->fragsize);
2126 dmabuf->swptr += val;
2127 dmabuf->count += val;
2129 return 0;
2131 case SNDCTL_DSP_SUBDIVIDE:
2132 if (dmabuf->subdivision)
2133 return -EINVAL;
2134 if (get_user(val, p))
2135 return -EFAULT;
2136 if (val != 1 && val != 2 && val != 4)
2137 return -EINVAL;
2138 #ifdef DEBUG
2139 printk("SNDCTL_DSP_SUBDIVIDE %d\n", val);
2140 #endif
2141 dmabuf->subdivision = val;
2142 dmabuf->ready = 0;
2143 return 0;
2145 case SNDCTL_DSP_SETFRAGMENT:
2146 if (get_user(val, p))
2147 return -EFAULT;
2149 dmabuf->ossfragsize = 1<<(val & 0xffff);
2150 dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
2151 if (!dmabuf->ossfragsize || !dmabuf->ossmaxfrags)
2152 return -EINVAL;
2154 * Bound the frag size into our allowed range of 256 - 4096
2156 if (dmabuf->ossfragsize < 256)
2157 dmabuf->ossfragsize = 256;
2158 else if (dmabuf->ossfragsize > 4096)
2159 dmabuf->ossfragsize = 4096;
2161 * The numfrags could be something reasonable, or it could
2162 * be 0xffff meaning "Give me as much as possible". So,
2163 * we check the numfrags * fragsize doesn't exceed our
2164 * 64k buffer limit, nor is it less than our 8k minimum.
2165 * If it fails either one of these checks, then adjust the
2166 * number of fragments, not the size of them. It's OK if
2167 * our number of fragments doesn't equal 32 or anything
2168 * like our hardware based number now since we are using
2169 * a different frag count for the hardware. Before we get
2170 * into this though, bound the maxfrags to avoid overflow
2171 * issues. A reasonable bound would be 64k / 256 since our
2172 * maximum buffer size is 64k and our minimum frag size is
2173 * 256. On the other end, our minimum buffer size is 8k and
2174 * our maximum frag size is 4k, so the lower bound should
2175 * be 2.
2178 if(dmabuf->ossmaxfrags > 256)
2179 dmabuf->ossmaxfrags = 256;
2180 else if (dmabuf->ossmaxfrags < 2)
2181 dmabuf->ossmaxfrags = 2;
2183 val = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
2184 while (val < 8192) {
2185 val <<= 1;
2186 dmabuf->ossmaxfrags <<= 1;
2188 while (val > 65536) {
2189 val >>= 1;
2190 dmabuf->ossmaxfrags >>= 1;
2192 dmabuf->ready = 0;
2193 #ifdef DEBUG
2194 printk("SNDCTL_DSP_SETFRAGMENT 0x%x, %d, %d\n", val,
2195 dmabuf->ossfragsize, dmabuf->ossmaxfrags);
2196 #endif
2198 return 0;
2200 case SNDCTL_DSP_GETOSPACE:
2201 if (!(file->f_mode & FMODE_WRITE))
2202 return -EINVAL;
2203 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2204 return val;
2205 spin_lock_irqsave(&state->card->lock, flags);
2206 i810_update_ptr(state);
2207 abinfo.fragsize = dmabuf->userfragsize;
2208 abinfo.fragstotal = dmabuf->userfrags;
2209 if (dmabuf->mapped)
2210 abinfo.bytes = dmabuf->dmasize;
2211 else
2212 abinfo.bytes = i810_get_free_write_space(state);
2213 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2214 spin_unlock_irqrestore(&state->card->lock, flags);
2215 #if defined(DEBUG) || defined(DEBUG_MMAP)
2216 printk("SNDCTL_DSP_GETOSPACE %d, %d, %d, %d\n", abinfo.bytes,
2217 abinfo.fragsize, abinfo.fragments, abinfo.fragstotal);
2218 #endif
2219 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2221 case SNDCTL_DSP_GETOPTR:
2222 if (!(file->f_mode & FMODE_WRITE))
2223 return -EINVAL;
2224 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2225 return val;
2226 spin_lock_irqsave(&state->card->lock, flags);
2227 val = i810_get_free_write_space(state);
2228 cinfo.bytes = dmabuf->total_bytes;
2229 cinfo.ptr = dmabuf->hwptr;
2230 cinfo.blocks = val/dmabuf->userfragsize;
2231 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
2232 dmabuf->count += val;
2233 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2234 __i810_update_lvi(state, 0);
2236 spin_unlock_irqrestore(&state->card->lock, flags);
2237 #if defined(DEBUG) || defined(DEBUG_MMAP)
2238 printk("SNDCTL_DSP_GETOPTR %d, %d, %d, %d\n", cinfo.bytes,
2239 cinfo.blocks, cinfo.ptr, dmabuf->count);
2240 #endif
2241 return copy_to_user(argp, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2243 case SNDCTL_DSP_GETISPACE:
2244 if (!(file->f_mode & FMODE_READ))
2245 return -EINVAL;
2246 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
2247 return val;
2248 spin_lock_irqsave(&state->card->lock, flags);
2249 abinfo.bytes = i810_get_available_read_data(state);
2250 abinfo.fragsize = dmabuf->userfragsize;
2251 abinfo.fragstotal = dmabuf->userfrags;
2252 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2253 spin_unlock_irqrestore(&state->card->lock, flags);
2254 #if defined(DEBUG) || defined(DEBUG_MMAP)
2255 printk("SNDCTL_DSP_GETISPACE %d, %d, %d, %d\n", abinfo.bytes,
2256 abinfo.fragsize, abinfo.fragments, abinfo.fragstotal);
2257 #endif
2258 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2260 case SNDCTL_DSP_GETIPTR:
2261 if (!(file->f_mode & FMODE_READ))
2262 return -EINVAL;
2263 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2264 return val;
2265 spin_lock_irqsave(&state->card->lock, flags);
2266 val = i810_get_available_read_data(state);
2267 cinfo.bytes = dmabuf->total_bytes;
2268 cinfo.blocks = val/dmabuf->userfragsize;
2269 cinfo.ptr = dmabuf->hwptr;
2270 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
2271 dmabuf->count -= val;
2272 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2273 __i810_update_lvi(state, 1);
2275 spin_unlock_irqrestore(&state->card->lock, flags);
2276 #if defined(DEBUG) || defined(DEBUG_MMAP)
2277 printk("SNDCTL_DSP_GETIPTR %d, %d, %d, %d\n", cinfo.bytes,
2278 cinfo.blocks, cinfo.ptr, dmabuf->count);
2279 #endif
2280 return copy_to_user(argp, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2282 case SNDCTL_DSP_NONBLOCK:
2283 #ifdef DEBUG
2284 printk("SNDCTL_DSP_NONBLOCK\n");
2285 #endif
2286 file->f_flags |= O_NONBLOCK;
2287 return 0;
2289 case SNDCTL_DSP_GETCAPS:
2290 #ifdef DEBUG
2291 printk("SNDCTL_DSP_GETCAPS\n");
2292 #endif
2293 return put_user(DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP|DSP_CAP_BIND,
2296 case SNDCTL_DSP_GETTRIGGER:
2297 val = 0;
2298 #ifdef DEBUG
2299 printk("SNDCTL_DSP_GETTRIGGER 0x%x\n", dmabuf->trigger);
2300 #endif
2301 return put_user(dmabuf->trigger, p);
2303 case SNDCTL_DSP_SETTRIGGER:
2304 if (get_user(val, p))
2305 return -EFAULT;
2306 #if defined(DEBUG) || defined(DEBUG_MMAP)
2307 printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
2308 #endif
2309 /* silently ignore invalid PCM_ENABLE_xxx bits,
2310 * like the other drivers do
2312 if (!(file->f_mode & FMODE_READ ))
2313 val &= ~PCM_ENABLE_INPUT;
2314 if (!(file->f_mode & FMODE_WRITE ))
2315 val &= ~PCM_ENABLE_OUTPUT;
2316 if((file->f_mode & FMODE_READ) && !(val & PCM_ENABLE_INPUT) && dmabuf->enable == ADC_RUNNING) {
2317 stop_adc(state);
2319 if((file->f_mode & FMODE_WRITE) && !(val & PCM_ENABLE_OUTPUT) && dmabuf->enable == DAC_RUNNING) {
2320 stop_dac(state);
2322 dmabuf->trigger = val;
2323 if((val & PCM_ENABLE_OUTPUT) && !(dmabuf->enable & DAC_RUNNING)) {
2324 if (!dmabuf->write_channel) {
2325 dmabuf->ready = 0;
2326 dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
2327 if (!dmabuf->write_channel)
2328 return -EBUSY;
2330 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
2331 return ret;
2332 if (dmabuf->mapped) {
2333 spin_lock_irqsave(&state->card->lock, flags);
2334 i810_update_ptr(state);
2335 dmabuf->count = 0;
2336 dmabuf->swptr = dmabuf->hwptr;
2337 dmabuf->count = i810_get_free_write_space(state);
2338 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2339 spin_unlock_irqrestore(&state->card->lock, flags);
2341 i810_update_lvi(state, 0);
2342 start_dac(state);
2344 if((val & PCM_ENABLE_INPUT) && !(dmabuf->enable & ADC_RUNNING)) {
2345 if (!dmabuf->read_channel) {
2346 dmabuf->ready = 0;
2347 dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
2348 if (!dmabuf->read_channel)
2349 return -EBUSY;
2351 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
2352 return ret;
2353 if (dmabuf->mapped) {
2354 spin_lock_irqsave(&state->card->lock, flags);
2355 i810_update_ptr(state);
2356 dmabuf->swptr = dmabuf->hwptr;
2357 dmabuf->count = 0;
2358 spin_unlock_irqrestore(&state->card->lock, flags);
2360 i810_update_lvi(state, 1);
2361 start_adc(state);
2363 return 0;
2365 case SNDCTL_DSP_SETDUPLEX:
2366 #ifdef DEBUG
2367 printk("SNDCTL_DSP_SETDUPLEX\n");
2368 #endif
2369 return -EINVAL;
2371 case SNDCTL_DSP_GETODELAY:
2372 if (!(file->f_mode & FMODE_WRITE))
2373 return -EINVAL;
2374 spin_lock_irqsave(&state->card->lock, flags);
2375 i810_update_ptr(state);
2376 val = dmabuf->count;
2377 spin_unlock_irqrestore(&state->card->lock, flags);
2378 #ifdef DEBUG
2379 printk("SNDCTL_DSP_GETODELAY %d\n", dmabuf->count);
2380 #endif
2381 return put_user(val, p);
2383 case SOUND_PCM_READ_RATE:
2384 #ifdef DEBUG
2385 printk("SOUND_PCM_READ_RATE %d\n", dmabuf->rate);
2386 #endif
2387 return put_user(dmabuf->rate, p);
2389 case SOUND_PCM_READ_CHANNELS:
2390 #ifdef DEBUG
2391 printk("SOUND_PCM_READ_CHANNELS\n");
2392 #endif
2393 return put_user(2, p);
2395 case SOUND_PCM_READ_BITS:
2396 #ifdef DEBUG
2397 printk("SOUND_PCM_READ_BITS\n");
2398 #endif
2399 return put_user(AFMT_S16_LE, p);
2401 case SNDCTL_DSP_SETSPDIF: /* Set S/PDIF Control register */
2402 #ifdef DEBUG
2403 printk("SNDCTL_DSP_SETSPDIF\n");
2404 #endif
2405 if (get_user(val, p))
2406 return -EFAULT;
2408 /* Check to make sure the codec supports S/PDIF transmitter */
2410 if((state->card->ac97_features & 4)) {
2411 /* mask out the transmitter speed bits so the user can't set them */
2412 val &= ~0x3000;
2414 /* Add the current transmitter speed bits to the passed value */
2415 ret = i810_ac97_get(codec, AC97_SPDIF_CONTROL);
2416 val |= (ret & 0x3000);
2418 i810_ac97_set(codec, AC97_SPDIF_CONTROL, val);
2419 if(i810_ac97_get(codec, AC97_SPDIF_CONTROL) != val ) {
2420 printk(KERN_ERR "i810_audio: Unable to set S/PDIF configuration to 0x%04x.\n", val);
2421 return -EFAULT;
2424 #ifdef DEBUG
2425 else
2426 printk(KERN_WARNING "i810_audio: S/PDIF transmitter not avalible.\n");
2427 #endif
2428 return put_user(val, p);
2430 case SNDCTL_DSP_GETSPDIF: /* Get S/PDIF Control register */
2431 #ifdef DEBUG
2432 printk("SNDCTL_DSP_GETSPDIF\n");
2433 #endif
2434 if (get_user(val, p))
2435 return -EFAULT;
2437 /* Check to make sure the codec supports S/PDIF transmitter */
2439 if(!(state->card->ac97_features & 4)) {
2440 #ifdef DEBUG
2441 printk(KERN_WARNING "i810_audio: S/PDIF transmitter not avalible.\n");
2442 #endif
2443 val = 0;
2444 } else {
2445 val = i810_ac97_get(codec, AC97_SPDIF_CONTROL);
2447 //return put_user((val & 0xcfff), p);
2448 return put_user(val, p);
2450 case SNDCTL_DSP_GETCHANNELMASK:
2451 #ifdef DEBUG
2452 printk("SNDCTL_DSP_GETCHANNELMASK\n");
2453 #endif
2454 if (get_user(val, p))
2455 return -EFAULT;
2457 /* Based on AC'97 DAC support, not ICH hardware */
2458 val = DSP_BIND_FRONT;
2459 if ( state->card->ac97_features & 0x0004 )
2460 val |= DSP_BIND_SPDIF;
2462 if ( state->card->ac97_features & 0x0080 )
2463 val |= DSP_BIND_SURR;
2464 if ( state->card->ac97_features & 0x0140 )
2465 val |= DSP_BIND_CENTER_LFE;
2467 return put_user(val, p);
2469 case SNDCTL_DSP_BIND_CHANNEL:
2470 #ifdef DEBUG
2471 printk("SNDCTL_DSP_BIND_CHANNEL\n");
2472 #endif
2473 if (get_user(val, p))
2474 return -EFAULT;
2475 if ( val == DSP_BIND_QUERY ) {
2476 val = DSP_BIND_FRONT; /* Always report this as being enabled */
2477 if ( state->card->ac97_status & SPDIF_ON )
2478 val |= DSP_BIND_SPDIF;
2479 else {
2480 if ( state->card->ac97_status & SURR_ON )
2481 val |= DSP_BIND_SURR;
2482 if ( state->card->ac97_status & CENTER_LFE_ON )
2483 val |= DSP_BIND_CENTER_LFE;
2485 } else { /* Not a query, set it */
2486 if (!(file->f_mode & FMODE_WRITE))
2487 return -EINVAL;
2488 if ( dmabuf->enable == DAC_RUNNING ) {
2489 stop_dac(state);
2491 if ( val & DSP_BIND_SPDIF ) { /* Turn on SPDIF */
2492 /* Ok, this should probably define what slots
2493 * to use. For now, we'll only set it to the
2494 * defaults:
2496 * non multichannel codec maps to slots 3&4
2497 * 2 channel codec maps to slots 7&8
2498 * 4 channel codec maps to slots 6&9
2499 * 6 channel codec maps to slots 10&11
2501 * there should be some way for the app to
2502 * select the slot assignment.
2505 i810_set_spdif_output ( state, AC97_EA_SPSA_3_4, dmabuf->rate );
2506 if ( !(state->card->ac97_status & SPDIF_ON) )
2507 val &= ~DSP_BIND_SPDIF;
2508 } else {
2509 int mask;
2510 int channels;
2512 /* Turn off S/PDIF if it was on */
2513 if ( state->card->ac97_status & SPDIF_ON )
2514 i810_set_spdif_output ( state, -1, 0 );
2516 mask = val & (DSP_BIND_FRONT | DSP_BIND_SURR | DSP_BIND_CENTER_LFE);
2517 switch (mask) {
2518 case DSP_BIND_FRONT:
2519 channels = 2;
2520 break;
2521 case DSP_BIND_FRONT|DSP_BIND_SURR:
2522 channels = 4;
2523 break;
2524 case DSP_BIND_FRONT|DSP_BIND_SURR|DSP_BIND_CENTER_LFE:
2525 channels = 6;
2526 break;
2527 default:
2528 val = DSP_BIND_FRONT;
2529 channels = 2;
2530 break;
2532 i810_set_dac_channels ( state, channels );
2534 /* check that they really got turned on */
2535 if (!(state->card->ac97_status & SURR_ON))
2536 val &= ~DSP_BIND_SURR;
2537 if (!(state->card->ac97_status & CENTER_LFE_ON))
2538 val &= ~DSP_BIND_CENTER_LFE;
2541 return put_user(val, p);
2543 case SNDCTL_DSP_MAPINBUF:
2544 case SNDCTL_DSP_MAPOUTBUF:
2545 case SNDCTL_DSP_SETSYNCRO:
2546 case SOUND_PCM_WRITE_FILTER:
2547 case SOUND_PCM_READ_FILTER:
2548 #ifdef DEBUG
2549 printk("SNDCTL_* -EINVAL\n");
2550 #endif
2551 return -EINVAL;
2553 return -EINVAL;
2556 static int i810_open(struct inode *inode, struct file *file)
2558 int i = 0;
2559 struct i810_card *card = devs;
2560 struct i810_state *state = NULL;
2561 struct dmabuf *dmabuf = NULL;
2563 /* find an avaiable virtual channel (instance of /dev/dsp) */
2564 while (card != NULL) {
2566 * If we are initializing and then fail, card could go
2567 * away unuexpectedly while we are in the for() loop.
2568 * So, check for card on each iteration before we check
2569 * for card->initializing to avoid a possible oops.
2570 * This usually only matters for times when the driver is
2571 * autoloaded by kmod.
2573 for (i = 0; i < 50 && card && card->initializing; i++) {
2574 set_current_state(TASK_UNINTERRUPTIBLE);
2575 schedule_timeout(HZ/20);
2577 for (i = 0; i < NR_HW_CH && card && !card->initializing; i++) {
2578 if (card->states[i] == NULL) {
2579 state = card->states[i] = (struct i810_state *)
2580 kmalloc(sizeof(struct i810_state), GFP_KERNEL);
2581 if (state == NULL)
2582 return -ENOMEM;
2583 memset(state, 0, sizeof(struct i810_state));
2584 dmabuf = &state->dmabuf;
2585 goto found_virt;
2588 card = card->next;
2590 /* no more virtual channel avaiable */
2591 if (!state)
2592 return -ENODEV;
2594 found_virt:
2595 /* initialize the virtual channel */
2596 state->virt = i;
2597 state->card = card;
2598 state->magic = I810_STATE_MAGIC;
2599 init_waitqueue_head(&dmabuf->wait);
2600 init_MUTEX(&state->open_sem);
2601 file->private_data = state;
2602 dmabuf->trigger = 0;
2604 /* allocate hardware channels */
2605 if(file->f_mode & FMODE_READ) {
2606 if((dmabuf->read_channel = card->alloc_rec_pcm_channel(card)) == NULL) {
2607 kfree (card->states[i]);
2608 card->states[i] = NULL;
2609 return -EBUSY;
2611 dmabuf->trigger |= PCM_ENABLE_INPUT;
2612 i810_set_adc_rate(state, 8000);
2614 if(file->f_mode & FMODE_WRITE) {
2615 if((dmabuf->write_channel = card->alloc_pcm_channel(card)) == NULL) {
2616 /* make sure we free the record channel allocated above */
2617 if(file->f_mode & FMODE_READ)
2618 card->free_pcm_channel(card,dmabuf->read_channel->num);
2619 kfree (card->states[i]);
2620 card->states[i] = NULL;
2621 return -EBUSY;
2623 /* Initialize to 8kHz? What if we don't support 8kHz? */
2624 /* Let's change this to check for S/PDIF stuff */
2626 dmabuf->trigger |= PCM_ENABLE_OUTPUT;
2627 if ( spdif_locked ) {
2628 i810_set_dac_rate(state, spdif_locked);
2629 i810_set_spdif_output(state, AC97_EA_SPSA_3_4, spdif_locked);
2630 } else {
2631 i810_set_dac_rate(state, 8000);
2632 /* Put the ACLink in 2 channel mode by default */
2633 i = I810_IOREADL(card, GLOB_CNT);
2634 I810_IOWRITEL(i & 0xffcfffff, card, GLOB_CNT);
2638 /* set default sample format. According to OSS Programmer's Guide /dev/dsp
2639 should be default to unsigned 8-bits, mono, with sample rate 8kHz and
2640 /dev/dspW will accept 16-bits sample, but we don't support those so we
2641 set it immediately to stereo and 16bit, which is all we do support */
2642 dmabuf->fmt |= I810_FMT_16BIT | I810_FMT_STEREO;
2643 dmabuf->ossfragsize = 0;
2644 dmabuf->ossmaxfrags = 0;
2645 dmabuf->subdivision = 0;
2647 state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
2649 return nonseekable_open(inode, file);
2652 static int i810_release(struct inode *inode, struct file *file)
2654 struct i810_state *state = (struct i810_state *)file->private_data;
2655 struct i810_card *card = state->card;
2656 struct dmabuf *dmabuf = &state->dmabuf;
2657 unsigned long flags;
2659 lock_kernel();
2661 /* stop DMA state machine and free DMA buffers/channels */
2662 if(dmabuf->trigger & PCM_ENABLE_OUTPUT) {
2663 drain_dac(state, 0);
2665 if(dmabuf->trigger & PCM_ENABLE_INPUT) {
2666 stop_adc(state);
2668 spin_lock_irqsave(&card->lock, flags);
2669 dealloc_dmabuf(state);
2670 if (file->f_mode & FMODE_WRITE) {
2671 state->card->free_pcm_channel(state->card, dmabuf->write_channel->num);
2673 if (file->f_mode & FMODE_READ) {
2674 state->card->free_pcm_channel(state->card, dmabuf->read_channel->num);
2677 state->card->states[state->virt] = NULL;
2678 kfree(state);
2679 spin_unlock_irqrestore(&card->lock, flags);
2680 unlock_kernel();
2682 return 0;
2685 static /*const*/ struct file_operations i810_audio_fops = {
2686 .owner = THIS_MODULE,
2687 .llseek = no_llseek,
2688 .read = i810_read,
2689 .write = i810_write,
2690 .poll = i810_poll,
2691 .ioctl = i810_ioctl,
2692 .mmap = i810_mmap,
2693 .open = i810_open,
2694 .release = i810_release,
2697 /* Write AC97 codec registers */
2699 static u16 i810_ac97_get_mmio(struct ac97_codec *dev, u8 reg)
2701 struct i810_card *card = dev->private_data;
2702 int count = 100;
2703 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2705 while(count-- && (readb(card->iobase_mmio + CAS) & 1))
2706 udelay(1);
2708 #ifdef DEBUG_MMIO
2710 u16 ans = readw(card->ac97base_mmio + reg_set);
2711 printk(KERN_DEBUG "i810_audio: ac97_get_mmio(%d) -> 0x%04X\n", ((int) reg_set) & 0xffff, (u32) ans);
2712 return ans;
2714 #else
2715 return readw(card->ac97base_mmio + reg_set);
2716 #endif
2719 static u16 i810_ac97_get_io(struct ac97_codec *dev, u8 reg)
2721 struct i810_card *card = dev->private_data;
2722 int count = 100;
2723 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2725 while(count-- && (I810_IOREADB(card, CAS) & 1))
2726 udelay(1);
2728 return inw(card->ac97base + reg_set);
2731 static void i810_ac97_set_mmio(struct ac97_codec *dev, u8 reg, u16 data)
2733 struct i810_card *card = dev->private_data;
2734 int count = 100;
2735 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2737 while(count-- && (readb(card->iobase_mmio + CAS) & 1))
2738 udelay(1);
2740 writew(data, card->ac97base_mmio + reg_set);
2742 #ifdef DEBUG_MMIO
2743 printk(KERN_DEBUG "i810_audio: ac97_set_mmio(0x%04X, %d)\n", (u32) data, ((int) reg_set) & 0xffff);
2744 #endif
2747 static void i810_ac97_set_io(struct ac97_codec *dev, u8 reg, u16 data)
2749 struct i810_card *card = dev->private_data;
2750 int count = 100;
2751 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2753 while(count-- && (I810_IOREADB(card, CAS) & 1))
2754 udelay(1);
2756 outw(data, card->ac97base + reg_set);
2759 static u16 i810_ac97_get(struct ac97_codec *dev, u8 reg)
2761 struct i810_card *card = dev->private_data;
2762 u16 ret;
2764 spin_lock(&card->ac97_lock);
2765 if (card->use_mmio) {
2766 ret = i810_ac97_get_mmio(dev, reg);
2768 else {
2769 ret = i810_ac97_get_io(dev, reg);
2771 spin_unlock(&card->ac97_lock);
2773 return ret;
2776 static void i810_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
2778 struct i810_card *card = dev->private_data;
2780 spin_lock(&card->ac97_lock);
2781 if (card->use_mmio) {
2782 i810_ac97_set_mmio(dev, reg, data);
2784 else {
2785 i810_ac97_set_io(dev, reg, data);
2787 spin_unlock(&card->ac97_lock);
2791 /* OSS /dev/mixer file operation methods */
2793 static int i810_open_mixdev(struct inode *inode, struct file *file)
2795 int i;
2796 int minor = iminor(inode);
2797 struct i810_card *card = devs;
2799 for (card = devs; card != NULL; card = card->next) {
2801 * If we are initializing and then fail, card could go
2802 * away unuexpectedly while we are in the for() loop.
2803 * So, check for card on each iteration before we check
2804 * for card->initializing to avoid a possible oops.
2805 * This usually only matters for times when the driver is
2806 * autoloaded by kmod.
2808 for (i = 0; i < 50 && card && card->initializing; i++) {
2809 set_current_state(TASK_UNINTERRUPTIBLE);
2810 schedule_timeout(HZ/20);
2812 for (i = 0; i < NR_AC97 && card && !card->initializing; i++)
2813 if (card->ac97_codec[i] != NULL &&
2814 card->ac97_codec[i]->dev_mixer == minor) {
2815 file->private_data = card->ac97_codec[i];
2816 return nonseekable_open(inode, file);
2819 return -ENODEV;
2822 static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd,
2823 unsigned long arg)
2825 struct ac97_codec *codec = (struct ac97_codec *)file->private_data;
2827 return codec->mixer_ioctl(codec, cmd, arg);
2830 static /*const*/ struct file_operations i810_mixer_fops = {
2831 .owner = THIS_MODULE,
2832 .llseek = no_llseek,
2833 .ioctl = i810_ioctl_mixdev,
2834 .open = i810_open_mixdev,
2837 /* AC97 codec initialisation. These small functions exist so we don't
2838 duplicate code between module init and apm resume */
2840 static inline int i810_ac97_exists(struct i810_card *card, int ac97_number)
2842 u32 reg = I810_IOREADL(card, GLOB_STA);
2843 switch (ac97_number) {
2844 case 0:
2845 return reg & (1<<8);
2846 case 1:
2847 return reg & (1<<9);
2848 case 2:
2849 return reg & (1<<28);
2851 return 0;
2854 static inline int i810_ac97_enable_variable_rate(struct ac97_codec *codec)
2856 i810_ac97_set(codec, AC97_EXTENDED_STATUS, 9);
2857 i810_ac97_set(codec,AC97_EXTENDED_STATUS,
2858 i810_ac97_get(codec, AC97_EXTENDED_STATUS)|0xE800);
2860 return (i810_ac97_get(codec, AC97_EXTENDED_STATUS)&1);
2864 static int i810_ac97_probe_and_powerup(struct i810_card *card,struct ac97_codec *codec)
2866 /* Returns 0 on failure */
2867 int i;
2869 if (ac97_probe_codec(codec) == 0) return 0;
2871 /* power it all up */
2872 i810_ac97_set(codec, AC97_POWER_CONTROL,
2873 i810_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00);
2875 /* wait for analog ready */
2876 for (i=100; i && ((i810_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--)
2878 set_current_state(TASK_UNINTERRUPTIBLE);
2879 schedule_timeout(HZ/20);
2881 return i;
2884 static int is_new_ich(u16 pci_id)
2886 switch (pci_id) {
2887 case PCI_DEVICE_ID_INTEL_82801DB_5:
2888 case PCI_DEVICE_ID_INTEL_82801EB_5:
2889 case PCI_DEVICE_ID_INTEL_ESB_5:
2890 case PCI_DEVICE_ID_INTEL_ICH6_18:
2891 return 1;
2892 default:
2893 break;
2896 return 0;
2899 static inline int ich_use_mmio(struct i810_card *card)
2901 return is_new_ich(card->pci_id) && card->use_mmio;
2905 * i810_ac97_power_up_bus - bring up AC97 link
2906 * @card : ICH audio device to power up
2908 * Bring up the ACLink AC97 codec bus
2911 static int i810_ac97_power_up_bus(struct i810_card *card)
2913 u32 reg = I810_IOREADL(card, GLOB_CNT);
2914 int i;
2915 int primary_codec_id = 0;
2917 if((reg&2)==0) /* Cold required */
2918 reg|=2;
2919 else
2920 reg|=4; /* Warm */
2922 reg&=~8; /* ACLink on */
2924 /* At this point we deassert AC_RESET # */
2925 I810_IOWRITEL(reg , card, GLOB_CNT);
2927 /* We must now allow time for the Codec initialisation.
2928 600mS is the specified time */
2930 for(i=0;i<10;i++)
2932 if((I810_IOREADL(card, GLOB_CNT)&4)==0)
2933 break;
2935 set_current_state(TASK_UNINTERRUPTIBLE);
2936 schedule_timeout(HZ/20);
2938 if(i==10)
2940 printk(KERN_ERR "i810_audio: AC'97 reset failed.\n");
2941 return 0;
2944 set_current_state(TASK_UNINTERRUPTIBLE);
2945 schedule_timeout(HZ/2);
2948 * See if the primary codec comes ready. This must happen
2949 * before we start doing DMA stuff
2951 /* see i810_ac97_init for the next 10 lines (jsaw) */
2952 if (card->use_mmio)
2953 readw(card->ac97base_mmio);
2954 else
2955 inw(card->ac97base);
2956 if (ich_use_mmio(card)) {
2957 primary_codec_id = (int) readl(card->iobase_mmio + SDM) & 0x3;
2958 printk(KERN_INFO "i810_audio: Primary codec has ID %d\n",
2959 primary_codec_id);
2962 if(! i810_ac97_exists(card, primary_codec_id))
2964 printk(KERN_INFO "i810_audio: Codec not ready.. wait.. ");
2965 set_current_state(TASK_UNINTERRUPTIBLE);
2966 schedule_timeout(HZ); /* actually 600mS by the spec */
2968 if(i810_ac97_exists(card, primary_codec_id))
2969 printk("OK\n");
2970 else
2971 printk("no response.\n");
2973 if (card->use_mmio)
2974 readw(card->ac97base_mmio);
2975 else
2976 inw(card->ac97base);
2977 return 1;
2980 static int __devinit i810_ac97_init(struct i810_card *card)
2982 int num_ac97 = 0;
2983 int ac97_id;
2984 int total_channels = 0;
2985 int nr_ac97_max = card_cap[card->pci_id_internal].nr_ac97;
2986 struct ac97_codec *codec;
2987 u16 eid;
2988 u32 reg;
2990 if(!i810_ac97_power_up_bus(card)) return 0;
2992 /* Number of channels supported */
2993 /* What about the codec? Just because the ICH supports */
2994 /* multiple channels doesn't mean the codec does. */
2995 /* we'll have to modify this in the codec section below */
2996 /* to reflect what the codec has. */
2997 /* ICH and ICH0 only support 2 channels so don't bother */
2998 /* to check.... */
3000 card->channels = 2;
3001 reg = I810_IOREADL(card, GLOB_STA);
3002 if ( reg & 0x0200000 )
3003 card->channels = 6;
3004 else if ( reg & 0x0100000 )
3005 card->channels = 4;
3006 printk(KERN_INFO "i810_audio: Audio Controller supports %d channels.\n", card->channels);
3007 printk(KERN_INFO "i810_audio: Defaulting to base 2 channel mode.\n");
3008 reg = I810_IOREADL(card, GLOB_CNT);
3009 I810_IOWRITEL(reg & 0xffcfffff, card, GLOB_CNT);
3011 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++)
3012 card->ac97_codec[num_ac97] = NULL;
3014 /*@FIXME I don't know, if I'm playing to safe here... (jsaw) */
3015 if ((nr_ac97_max > 2) && !card->use_mmio) nr_ac97_max = 2;
3017 for (num_ac97 = 0; num_ac97 < nr_ac97_max; num_ac97++) {
3018 /* codec reset */
3019 printk(KERN_INFO "i810_audio: Resetting connection %d\n", num_ac97);
3020 if (card->use_mmio)
3021 readw(card->ac97base_mmio + 0x80*num_ac97);
3022 else
3023 inw(card->ac97base + 0x80*num_ac97);
3025 /* If we have the SDATA_IN Map Register, as on ICH4, we
3026 do not loop thru all possible codec IDs but thru all
3027 possible IO channels. Bit 0:1 of SDM then holds the
3028 last codec ID spoken to.
3030 if (ich_use_mmio(card)) {
3031 ac97_id = (int) readl(card->iobase_mmio + SDM) & 0x3;
3032 printk(KERN_INFO "i810_audio: Connection %d with codec id %d\n",
3033 num_ac97, ac97_id);
3035 else {
3036 ac97_id = num_ac97;
3039 /* The ICH programmer's reference says you should */
3040 /* check the ready status before probing. So we chk */
3041 /* What do we do if it's not ready? Wait and try */
3042 /* again, or abort? */
3043 if (!i810_ac97_exists(card, ac97_id)) {
3044 if(num_ac97 == 0)
3045 printk(KERN_ERR "i810_audio: Primary codec not ready.\n");
3048 if ((codec = ac97_alloc_codec()) == NULL)
3049 return -ENOMEM;
3051 /* initialize some basic codec information, other fields will be filled
3052 in ac97_probe_codec */
3053 codec->private_data = card;
3054 codec->id = ac97_id;
3055 card->ac97_id_map[ac97_id] = num_ac97 * 0x80;
3057 if (card->use_mmio) {
3058 codec->codec_read = i810_ac97_get_mmio;
3059 codec->codec_write = i810_ac97_set_mmio;
3061 else {
3062 codec->codec_read = i810_ac97_get_io;
3063 codec->codec_write = i810_ac97_set_io;
3066 if(!i810_ac97_probe_and_powerup(card,codec)) {
3067 printk(KERN_ERR "i810_audio: timed out waiting for codec %d analog ready.\n", ac97_id);
3068 ac97_release_codec(codec);
3069 break; /* it didn't work */
3071 /* Store state information about S/PDIF transmitter */
3072 card->ac97_status = 0;
3074 /* Don't attempt to get eid until powerup is complete */
3075 eid = i810_ac97_get(codec, AC97_EXTENDED_ID);
3077 if(eid==0xFFFF)
3079 printk(KERN_WARNING "i810_audio: no codec attached ?\n");
3080 ac97_release_codec(codec);
3081 break;
3084 /* Check for an AC97 1.0 soft modem (ID1) */
3086 if(codec->modem)
3088 printk(KERN_WARNING "i810_audio: codec %d is a softmodem - skipping.\n", ac97_id);
3089 ac97_release_codec(codec);
3090 continue;
3093 card->ac97_features = eid;
3095 /* Now check the codec for useful features to make up for
3096 the dumbness of the 810 hardware engine */
3098 if(!(eid&0x0001))
3099 printk(KERN_WARNING "i810_audio: only 48Khz playback available.\n");
3100 else
3102 if(!i810_ac97_enable_variable_rate(codec)) {
3103 printk(KERN_WARNING "i810_audio: Codec refused to allow VRA, using 48Khz only.\n");
3104 card->ac97_features&=~1;
3108 /* Turn on the amplifier */
3110 codec->codec_write(codec, AC97_POWER_CONTROL,
3111 codec->codec_read(codec, AC97_POWER_CONTROL) & ~0x8000);
3113 /* Determine how many channels the codec(s) support */
3114 /* - The primary codec always supports 2 */
3115 /* - If the codec supports AMAP, surround DACs will */
3116 /* automaticlly get assigned to slots. */
3117 /* * Check for surround DACs and increment if */
3118 /* found. */
3119 /* - Else check if the codec is revision 2.2 */
3120 /* * If surround DACs exist, assign them to slots */
3121 /* and increment channel count. */
3123 /* All of this only applies to ICH2 and above. ICH */
3124 /* and ICH0 only support 2 channels. ICH2 will only */
3125 /* support multiple codecs in a "split audio" config. */
3126 /* as described above. */
3128 /* TODO: Remove all the debugging messages! */
3130 if((eid & 0xc000) == 0) /* primary codec */
3131 total_channels += 2;
3133 if(eid & 0x200) { /* GOOD, AMAP support */
3134 if (eid & 0x0080) /* L/R Surround channels */
3135 total_channels += 2;
3136 if (eid & 0x0140) /* LFE and Center channels */
3137 total_channels += 2;
3138 printk("i810_audio: AC'97 codec %d supports AMAP, total channels = %d\n", ac97_id, total_channels);
3139 } else if (eid & 0x0400) { /* this only works on 2.2 compliant codecs */
3140 eid &= 0xffcf;
3141 if((eid & 0xc000) != 0) {
3142 switch ( total_channels ) {
3143 case 2:
3144 /* Set dsa1, dsa0 to 01 */
3145 eid |= 0x0010;
3146 break;
3147 case 4:
3148 /* Set dsa1, dsa0 to 10 */
3149 eid |= 0x0020;
3150 break;
3151 case 6:
3152 /* Set dsa1, dsa0 to 11 */
3153 eid |= 0x0030;
3154 break;
3156 total_channels += 2;
3158 i810_ac97_set(codec, AC97_EXTENDED_ID, eid);
3159 eid = i810_ac97_get(codec, AC97_EXTENDED_ID);
3160 printk("i810_audio: AC'97 codec %d, new EID value = 0x%04x\n", ac97_id, eid);
3161 if (eid & 0x0080) /* L/R Surround channels */
3162 total_channels += 2;
3163 if (eid & 0x0140) /* LFE and Center channels */
3164 total_channels += 2;
3165 printk("i810_audio: AC'97 codec %d, DAC map configured, total channels = %d\n", ac97_id, total_channels);
3166 } else {
3167 printk("i810_audio: AC'97 codec %d Unable to map surround DAC's (or DAC's not present), total channels = %d\n", ac97_id, total_channels);
3170 if ((codec->dev_mixer = register_sound_mixer(&i810_mixer_fops, -1)) < 0) {
3171 printk(KERN_ERR "i810_audio: couldn't register mixer!\n");
3172 ac97_release_codec(codec);
3173 break;
3176 card->ac97_codec[num_ac97] = codec;
3179 /* tune up the primary codec */
3180 ac97_tune_hardware(card->pci_dev, ac97_quirks, ac97_quirk);
3182 /* pick the minimum of channels supported by ICHx or codec(s) */
3183 card->channels = (card->channels > total_channels)?total_channels:card->channels;
3185 return num_ac97;
3188 static void __devinit i810_configure_clocking (void)
3190 struct i810_card *card;
3191 struct i810_state *state;
3192 struct dmabuf *dmabuf;
3193 unsigned int i, offset, new_offset;
3194 unsigned long flags;
3196 card = devs;
3197 /* We could try to set the clocking for multiple cards, but can you even have
3198 * more than one i810 in a machine? Besides, clocking is global, so unless
3199 * someone actually thinks more than one i810 in a machine is possible and
3200 * decides to rewrite that little bit, setting the rate for more than one card
3201 * is a waste of time.
3203 if(card != NULL) {
3204 state = card->states[0] = (struct i810_state *)
3205 kmalloc(sizeof(struct i810_state), GFP_KERNEL);
3206 if (state == NULL)
3207 return;
3208 memset(state, 0, sizeof(struct i810_state));
3209 dmabuf = &state->dmabuf;
3211 dmabuf->write_channel = card->alloc_pcm_channel(card);
3212 state->virt = 0;
3213 state->card = card;
3214 state->magic = I810_STATE_MAGIC;
3215 init_waitqueue_head(&dmabuf->wait);
3216 init_MUTEX(&state->open_sem);
3217 dmabuf->fmt = I810_FMT_STEREO | I810_FMT_16BIT;
3218 dmabuf->trigger = PCM_ENABLE_OUTPUT;
3219 i810_set_spdif_output(state, -1, 0);
3220 i810_set_dac_channels(state, 2);
3221 i810_set_dac_rate(state, 48000);
3222 if(prog_dmabuf(state, 0) != 0) {
3223 goto config_out_nodmabuf;
3225 if(dmabuf->dmasize < 16384) {
3226 goto config_out;
3228 dmabuf->count = dmabuf->dmasize;
3229 CIV_TO_LVI(card, dmabuf->write_channel->port, -1);
3230 local_irq_save(flags);
3231 start_dac(state);
3232 offset = i810_get_dma_addr(state, 0);
3233 mdelay(50);
3234 new_offset = i810_get_dma_addr(state, 0);
3235 stop_dac(state);
3236 local_irq_restore(flags);
3237 i = new_offset - offset;
3238 #ifdef DEBUG_INTERRUPTS
3239 printk("i810_audio: %d bytes in 50 milliseconds\n", i);
3240 #endif
3241 if(i == 0)
3242 goto config_out;
3243 i = i / 4 * 20;
3244 if (i > 48500 || i < 47500) {
3245 clocking = clocking * clocking / i;
3246 printk("i810_audio: setting clocking to %d\n", clocking);
3248 config_out:
3249 dealloc_dmabuf(state);
3250 config_out_nodmabuf:
3251 state->card->free_pcm_channel(state->card,state->dmabuf.write_channel->num);
3252 kfree(state);
3253 card->states[0] = NULL;
3257 /* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered
3258 until "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
3260 static int __devinit i810_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
3262 struct i810_card *card;
3264 if (pci_enable_device(pci_dev))
3265 return -EIO;
3267 if (pci_set_dma_mask(pci_dev, I810_DMA_MASK)) {
3268 printk(KERN_ERR "i810_audio: architecture does not support"
3269 " 32bit PCI busmaster DMA\n");
3270 return -ENODEV;
3273 if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) {
3274 printk(KERN_ERR "i810_audio: out of memory\n");
3275 return -ENOMEM;
3277 memset(card, 0, sizeof(*card));
3279 card->initializing = 1;
3280 card->pci_dev = pci_dev;
3281 card->pci_id = pci_id->device;
3282 card->ac97base = pci_resource_start (pci_dev, 0);
3283 card->iobase = pci_resource_start (pci_dev, 1);
3285 if (!(card->ac97base) || !(card->iobase)) {
3286 card->ac97base = 0;
3287 card->iobase = 0;
3290 /* if chipset could have mmio capability, check it */
3291 if (card_cap[pci_id->driver_data].flags & CAP_MMIO) {
3292 card->ac97base_mmio_phys = pci_resource_start (pci_dev, 2);
3293 card->iobase_mmio_phys = pci_resource_start (pci_dev, 3);
3295 if ((card->ac97base_mmio_phys) && (card->iobase_mmio_phys)) {
3296 card->use_mmio = 1;
3298 else {
3299 card->ac97base_mmio_phys = 0;
3300 card->iobase_mmio_phys = 0;
3304 if (!(card->use_mmio) && (!(card->iobase) || !(card->ac97base))) {
3305 printk(KERN_ERR "i810_audio: No I/O resources available.\n");
3306 goto out_mem;
3309 card->irq = pci_dev->irq;
3310 card->next = devs;
3311 card->magic = I810_CARD_MAGIC;
3312 #ifdef CONFIG_PM
3313 card->pm_suspended=0;
3314 #endif
3315 spin_lock_init(&card->lock);
3316 spin_lock_init(&card->ac97_lock);
3317 devs = card;
3319 pci_set_master(pci_dev);
3321 printk(KERN_INFO "i810: %s found at IO 0x%04lx and 0x%04lx, "
3322 "MEM 0x%04lx and 0x%04lx, IRQ %d\n",
3323 card_names[pci_id->driver_data],
3324 card->iobase, card->ac97base,
3325 card->ac97base_mmio_phys, card->iobase_mmio_phys,
3326 card->irq);
3328 card->alloc_pcm_channel = i810_alloc_pcm_channel;
3329 card->alloc_rec_pcm_channel = i810_alloc_rec_pcm_channel;
3330 card->alloc_rec_mic_channel = i810_alloc_rec_mic_channel;
3331 card->free_pcm_channel = i810_free_pcm_channel;
3333 if ((card->channel = pci_alloc_consistent(pci_dev,
3334 sizeof(struct i810_channel)*NR_HW_CH, &card->chandma)) == NULL) {
3335 printk(KERN_ERR "i810: cannot allocate channel DMA memory\n");
3336 goto out_mem;
3339 { /* We may dispose of this altogether some time soon, so... */
3340 struct i810_channel *cp = card->channel;
3342 cp[0].offset = 0;
3343 cp[0].port = 0x00;
3344 cp[0].num = 0;
3345 cp[1].offset = 0;
3346 cp[1].port = 0x10;
3347 cp[1].num = 1;
3348 cp[2].offset = 0;
3349 cp[2].port = 0x20;
3350 cp[2].num = 2;
3353 /* claim our iospace and irq */
3354 if (!request_region(card->iobase, 64, card_names[pci_id->driver_data])) {
3355 printk(KERN_ERR "i810_audio: unable to allocate region %lx\n", card->iobase);
3356 goto out_region1;
3358 if (!request_region(card->ac97base, 256, card_names[pci_id->driver_data])) {
3359 printk(KERN_ERR "i810_audio: unable to allocate region %lx\n", card->ac97base);
3360 goto out_region2;
3363 if (card->use_mmio) {
3364 if (request_mem_region(card->ac97base_mmio_phys, 512, "ich_audio MMBAR")) {
3365 if ((card->ac97base_mmio = ioremap(card->ac97base_mmio_phys, 512))) { /*@FIXME can ioremap fail? don't know (jsaw) */
3366 if (request_mem_region(card->iobase_mmio_phys, 256, "ich_audio MBBAR")) {
3367 if ((card->iobase_mmio = ioremap(card->iobase_mmio_phys, 256))) {
3368 printk(KERN_INFO "i810: %s mmio at 0x%04lx and 0x%04lx\n",
3369 card_names[pci_id->driver_data],
3370 (unsigned long) card->ac97base_mmio,
3371 (unsigned long) card->iobase_mmio);
3373 else {
3374 iounmap(card->ac97base_mmio);
3375 release_mem_region(card->ac97base_mmio_phys, 512);
3376 release_mem_region(card->iobase_mmio_phys, 512);
3377 card->use_mmio = 0;
3380 else {
3381 iounmap(card->ac97base_mmio);
3382 release_mem_region(card->ac97base_mmio_phys, 512);
3383 card->use_mmio = 0;
3387 else {
3388 card->use_mmio = 0;
3392 /* initialize AC97 codec and register /dev/mixer */
3393 if (i810_ac97_init(card) <= 0)
3394 goto out_iospace;
3395 pci_set_drvdata(pci_dev, card);
3397 if(clocking == 0) {
3398 clocking = 48000;
3399 i810_configure_clocking();
3402 /* register /dev/dsp */
3403 if ((card->dev_audio = register_sound_dsp(&i810_audio_fops, -1)) < 0) {
3404 int i;
3405 printk(KERN_ERR "i810_audio: couldn't register DSP device!\n");
3406 for (i = 0; i < NR_AC97; i++)
3407 if (card->ac97_codec[i] != NULL) {
3408 unregister_sound_mixer(card->ac97_codec[i]->dev_mixer);
3409 ac97_release_codec(card->ac97_codec[i]);
3411 goto out_iospace;
3414 if (request_irq(card->irq, &i810_interrupt, SA_SHIRQ,
3415 card_names[pci_id->driver_data], card)) {
3416 printk(KERN_ERR "i810_audio: unable to allocate irq %d\n", card->irq);
3417 goto out_iospace;
3421 card->initializing = 0;
3422 return 0;
3424 out_iospace:
3425 if (card->use_mmio) {
3426 iounmap(card->ac97base_mmio);
3427 iounmap(card->iobase_mmio);
3428 release_mem_region(card->ac97base_mmio_phys, 512);
3429 release_mem_region(card->iobase_mmio_phys, 256);
3431 release_region(card->ac97base, 256);
3432 out_region2:
3433 release_region(card->iobase, 64);
3434 out_region1:
3435 pci_free_consistent(pci_dev, sizeof(struct i810_channel)*NR_HW_CH,
3436 card->channel, card->chandma);
3437 out_mem:
3438 kfree(card);
3439 return -ENODEV;
3442 static void __devexit i810_remove(struct pci_dev *pci_dev)
3444 int i;
3445 struct i810_card *card = pci_get_drvdata(pci_dev);
3446 /* free hardware resources */
3447 free_irq(card->irq, devs);
3448 release_region(card->iobase, 64);
3449 release_region(card->ac97base, 256);
3450 pci_free_consistent(pci_dev, sizeof(struct i810_channel)*NR_HW_CH,
3451 card->channel, card->chandma);
3452 if (card->use_mmio) {
3453 iounmap(card->ac97base_mmio);
3454 iounmap(card->iobase_mmio);
3455 release_mem_region(card->ac97base_mmio_phys, 512);
3456 release_mem_region(card->iobase_mmio_phys, 256);
3459 /* unregister audio devices */
3460 for (i = 0; i < NR_AC97; i++)
3461 if (card->ac97_codec[i] != NULL) {
3462 unregister_sound_mixer(card->ac97_codec[i]->dev_mixer);
3463 ac97_release_codec(card->ac97_codec[i]);
3464 card->ac97_codec[i] = NULL;
3466 unregister_sound_dsp(card->dev_audio);
3467 kfree(card);
3470 #ifdef CONFIG_PM
3471 static int i810_pm_suspend(struct pci_dev *dev, pm_message_t pm_state)
3473 struct i810_card *card = pci_get_drvdata(dev);
3474 struct i810_state *state;
3475 unsigned long flags;
3476 struct dmabuf *dmabuf;
3477 int i,num_ac97;
3478 #ifdef DEBUG
3479 printk("i810_audio: i810_pm_suspend called\n");
3480 #endif
3481 if(!card) return 0;
3482 spin_lock_irqsave(&card->lock, flags);
3483 card->pm_suspended=1;
3484 for(i=0;i<NR_HW_CH;i++) {
3485 state = card->states[i];
3486 if(!state) continue;
3487 /* this happens only if there are open files */
3488 dmabuf = &state->dmabuf;
3489 if(dmabuf->enable & DAC_RUNNING ||
3490 (dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) {
3491 state->pm_saved_dac_rate=dmabuf->rate;
3492 stop_dac(state);
3493 } else {
3494 state->pm_saved_dac_rate=0;
3496 if(dmabuf->enable & ADC_RUNNING) {
3497 state->pm_saved_adc_rate=dmabuf->rate;
3498 stop_adc(state);
3499 } else {
3500 state->pm_saved_adc_rate=0;
3502 dmabuf->ready = 0;
3503 dmabuf->swptr = dmabuf->hwptr = 0;
3504 dmabuf->count = dmabuf->total_bytes = 0;
3507 spin_unlock_irqrestore(&card->lock, flags);
3509 /* save mixer settings */
3510 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3511 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3512 if(!codec) continue;
3513 for(i=0;i< SOUND_MIXER_NRDEVICES ;i++) {
3514 if((supported_mixer(codec,i)) &&
3515 (codec->read_mixer)) {
3516 card->pm_saved_mixer_settings[i][num_ac97]=
3517 codec->read_mixer(codec,i);
3521 pci_save_state(dev); /* XXX do we need this? */
3522 pci_disable_device(dev); /* disable busmastering */
3523 pci_set_power_state(dev,3); /* Zzz. */
3525 return 0;
3529 static int i810_pm_resume(struct pci_dev *dev)
3531 int num_ac97,i=0;
3532 struct i810_card *card=pci_get_drvdata(dev);
3533 pci_enable_device(dev);
3534 pci_restore_state (dev);
3536 /* observation of a toshiba portege 3440ct suggests that the
3537 hardware has to be more or less completely reinitialized from
3538 scratch after an apm suspend. Works For Me. -dan */
3540 i810_ac97_power_up_bus(card);
3542 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3543 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3544 /* check they haven't stolen the hardware while we were
3545 away */
3546 if(!codec || !i810_ac97_exists(card,num_ac97)) {
3547 if(num_ac97) continue;
3548 else BUG();
3550 if(!i810_ac97_probe_and_powerup(card,codec)) BUG();
3552 if((card->ac97_features&0x0001)) {
3553 /* at probe time we found we could do variable
3554 rates, but APM suspend has made it forget
3555 its magical powers */
3556 if(!i810_ac97_enable_variable_rate(codec)) BUG();
3558 /* we lost our mixer settings, so restore them */
3559 for(i=0;i< SOUND_MIXER_NRDEVICES ;i++) {
3560 if(supported_mixer(codec,i)){
3561 int val=card->
3562 pm_saved_mixer_settings[i][num_ac97];
3563 codec->mixer_state[i]=val;
3564 codec->write_mixer(codec,i,
3565 (val & 0xff) ,
3566 ((val >> 8) & 0xff) );
3571 /* we need to restore the sample rate from whatever it was */
3572 for(i=0;i<NR_HW_CH;i++) {
3573 struct i810_state * state=card->states[i];
3574 if(state) {
3575 if(state->pm_saved_adc_rate)
3576 i810_set_adc_rate(state,state->pm_saved_adc_rate);
3577 if(state->pm_saved_dac_rate)
3578 i810_set_dac_rate(state,state->pm_saved_dac_rate);
3583 card->pm_suspended = 0;
3585 /* any processes that were reading/writing during the suspend
3586 probably ended up here */
3587 for(i=0;i<NR_HW_CH;i++) {
3588 struct i810_state *state = card->states[i];
3589 if(state) wake_up(&state->dmabuf.wait);
3592 return 0;
3594 #endif /* CONFIG_PM */
3596 MODULE_AUTHOR("The Linux kernel team");
3597 MODULE_DESCRIPTION("Intel 810 audio support");
3598 MODULE_LICENSE("GPL");
3599 module_param(ftsodell, int, 0444);
3600 module_param(clocking, uint, 0444);
3601 module_param(strict_clocking, int, 0444);
3602 module_param(spdif_locked, int, 0444);
3604 #define I810_MODULE_NAME "i810_audio"
3606 static struct pci_driver i810_pci_driver = {
3607 .name = I810_MODULE_NAME,
3608 .id_table = i810_pci_tbl,
3609 .probe = i810_probe,
3610 .remove = __devexit_p(i810_remove),
3611 #ifdef CONFIG_PM
3612 .suspend = i810_pm_suspend,
3613 .resume = i810_pm_resume,
3614 #endif /* CONFIG_PM */
3618 static int __init i810_init_module (void)
3620 int retval;
3622 printk(KERN_INFO "Intel 810 + AC97 Audio, version "
3623 DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
3625 retval = pci_register_driver(&i810_pci_driver);
3626 if (retval)
3627 return retval;
3629 if(ftsodell != 0) {
3630 printk("i810_audio: ftsodell is now a deprecated option.\n");
3632 if(spdif_locked > 0 ) {
3633 if(spdif_locked == 32000 || spdif_locked == 44100 || spdif_locked == 48000) {
3634 printk("i810_audio: Enabling S/PDIF at sample rate %dHz.\n", spdif_locked);
3635 } else {
3636 printk("i810_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3637 spdif_locked = 0;
3641 return 0;
3644 static void __exit i810_cleanup_module (void)
3646 pci_unregister_driver(&i810_pci_driver);
3649 module_init(i810_init_module);
3650 module_exit(i810_cleanup_module);
3653 Local Variables:
3654 c-basic-offset: 8
3655 End: