2 * Intel i810 and friends ICH driver for Linux
3 * Alan Cox <alan@redhat.com>
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>
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
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
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)
70 * Intel errata #7 for ICH3 IO. We need to disable SMI stuff
71 * when codec probing. [Not Yet Done]
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>
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))
111 static int strict_clocking;
112 static unsigned int clocking;
113 static int spdif_locked;
114 static int ac97_quirk = AC97_TUNE_DEFAULT;
118 //#define DEBUG_INTERRUPTS
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 */
137 #define BUSADDR_MASK 0xFFFFFFFE
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 */
145 /* an instance of the 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 */
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) \
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 */
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 */
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 */
226 /* maxinum number of AC97 codecs connected, AC97 2.0 defined 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 };
250 static char * card_names[] = {
259 "NVIDIA nForce Audio",
264 /* These are capabilities (and bugs) the chipsets _can_ have */
267 #define CAP_MMIO 0x0001
268 #define CAP_20BIT_AUDIO_SUPPORT 0x0002
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},
320 MODULE_DEVICE_TABLE (pci, i810_pci_tbl);
323 #define PM_SUSPENDED(card) (card->pm_suspended)
325 #define PM_SUSPENDED(card) (0)
328 /* "software" or virtual channel, an instance of opened /dev/dsp */
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;
340 /* virtual channel number */
344 unsigned int pm_saved_dac_rate,pm_saved_adc_rate;
347 /* wave sample stuff */
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 */
357 dma_addr_t dma_handle;
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 */
375 unsigned fragsamples;
377 /* what we tell the user to expect */
379 unsigned userfragsize;
384 unsigned update_flag;
385 unsigned ossfragsize;
386 unsigned ossmaxfrags;
387 unsigned subdivision;
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 */
402 /* Control AC97 access serialization */
403 spinlock_t ac97_lock;
405 /* PCI device stuff */
406 struct pci_dev * pci_dev;
408 u16 pci_id_internal; /* used to access card_cap[] */
411 int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97];
413 /* soundcore stuff */
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 */
427 /* hardware resources */
428 unsigned long ac97base;
429 unsigned long iobase;
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;
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) */
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) \
456 if (card->use_mmio) \
457 val=read##size(card->iobase_mmio+off); \
459 val=in##size(card->iobase+off); \
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) \
469 if (card->use_mmio) \
470 write##size(val, card->iobase_mmio+off); \
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 = {
490 .name = "Compaq Evo D510C",
491 .type = AC97_TUNE_HP_ONLY
496 .name = "Dell Precision 530", /* AD1885 */
497 .type = AC97_TUNE_HP_ONLY
502 .name = "Dell Optiplex GX260", /* AD1981A */
503 .type = AC97_TUNE_HP_ONLY
508 .name = "Dell Precision 450", /* AD1981B*/
509 .type = AC97_TUNE_HP_ONLY
511 { /* FIXME: which codec? */
514 .name = "Hewlett-Packard onboard",
515 .type = AC97_TUNE_HP_ONLY
520 .name = "HP xw8200", /* AD1981B*/
521 .type = AC97_TUNE_HP_ONLY
526 .name = "HP xw4200", /* AD1981B*/
527 .type = AC97_TUNE_HP_ONLY
532 .name = "Fujitsu-Siemens Celsius", /* AD1981? */
533 .type = AC97_TUNE_HP_ONLY
538 .name = "AMD64 Mobo", /* ALC650 */
539 .type = AC97_TUNE_HP_ONLY
544 .name = "Fujitsu-Siemens Scenic", /* AD1981? */
545 .type = AC97_TUNE_HP_ONLY
550 .name = "ADI AD1985 (discrete)",
551 .type = AC97_TUNE_HP_ONLY
556 .name = "MSI P4 ATX 645 Ultra",
557 .type = AC97_TUNE_HP_ONLY
562 .name = "Fujitsu-Siemens D1522", /* AD1981 */
563 .type = AC97_TUNE_HP_ONLY
568 .name = "Intel D845WN (82801BA)",
569 .type = AC97_TUNE_SWAP_HP
574 .name = "Intel D850EMV2", /* AD1885 */
575 .type = AC97_TUNE_HP_ONLY
580 .name = "Intel ICH/AD1885",
581 .type = AC97_TUNE_HP_ONLY
586 .name = "Dell Precision 450", /* AD1981B*/
587 .type = AC97_TUNE_HP_ONLY
592 .name = "HP xw4200", /* AD1981B*/
593 .type = AC97_TUNE_HP_ONLY
598 .name = "HP xw8200", /* AD1981B*/
599 .type = AC97_TUNE_HP_ONLY
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)
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)
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)
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;
652 printk ( "i810_audio: codec = %s, codec_id = 0x%08lx\n", codec->name, id);
655 case 0x41445361: /* AD1886 */
660 default: /* all other codecs, until we know otherwiae */
661 if (rate == 48000 || rate == 44100 || rate == 32000) {
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.
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)
684 struct ac97_codec *codec = state->card->ac97_codec[0];
686 if(!codec->codec_ops->digital) {
687 state->card->ac97_status &= ~SPDIF_ON;
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);
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);
706 state->card->ac97_status |= SPDIF_ON;
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));
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
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)
735 struct ac97_codec *codec = state->card->ac97_codec[0];
737 /* No codec, no setup */
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);
747 case 2: /* always enabled */
750 aud_reg &= ~AC97_EA_PRJ;
751 state->card->ac97_status |= SURR_ON;
754 aud_reg &= ~(AC97_EA_PRJ | AC97_EA_PRI | AC97_EA_PRK);
755 state->card->ac97_status |= SURR_ON | CENTER_LFE_ON;
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;
770 struct ac97_codec *codec=state->card->ac97_codec[0];
772 if(!(state->card->ac97_features&0x0001))
774 dmabuf->rate = clocking;
776 printk("Asked for %d Hz, but ac97_features says we only do %dHz. Sorry!\n",
789 * Adjust for misclocked crap
791 rate = ( rate * clocking)/48000;
792 if(strict_clocking && 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;
802 printk("i810_audio: called i810_set_dac_rate : asked for %d, got %d\n", rate, 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;
813 struct ac97_codec *codec=state->card->ac97_codec[0];
815 if(!(state->card->ac97_features&0x0001))
817 dmabuf->rate = clocking;
828 * Adjust for misclocked crap
831 rate = ( rate * clocking)/48000;
832 if(strict_clocking && 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;
844 printk("i810_audio: called i810_set_adc_rate : rate = %d/%d\n", dmabuf->rate, 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;
861 port = dmabuf->read_channel->port;
863 port = dmabuf->write_channel->port;
865 if(state->card->pci_id == PCI_DEVICE_ID_SI_7012) {
866 port_picb = port + OFF_SR;
869 port_picb = port + OFF_PICB;
872 civ = GET_CIV(state->card, port);
873 offset = I810_IOREADW(state->card, port_picb);
874 /* Must have a delay here! */
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))
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 );
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;
921 spin_lock_irqsave(&card->lock, flags);
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;
943 spin_lock_irqsave(&card->lock, flags);
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 );
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;
971 spin_lock_irqsave(&card->lock, flags);
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;
992 spin_lock_irqsave(&card->lock, flags);
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;
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)
1017 /* alloc enough to satisfy the oss params */
1018 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
1019 if ( (PAGE_SIZE<<order) > size )
1021 if ((rawbuf = pci_alloc_consistent(state->card->pci_dev,
1023 &dmabuf->dma_handle)))
1031 printk("i810_audio: allocated %ld (order = %d) bytes at %p\n",
1032 PAGE_SIZE << order, order, rawbuf);
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);
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;
1070 unsigned long flags;
1075 spin_lock_irqsave(&state->card->lock, flags);
1076 if(dmabuf->enable & DAC_RUNNING)
1078 if(dmabuf->enable & ADC_RUNNING)
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)))
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
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) {
1110 } else if (dmabuf->ossmaxfrags == 8) {
1112 } else if (dmabuf->ossmaxfrags == 16) {
1118 * Now set up the ring
1120 if(dmabuf->read_channel)
1121 c = dmabuf->read_channel;
1123 c = dmabuf->write_channel;
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)
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;
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;
1162 /* set the ready flag for the dma buffer */
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);
1175 static void __i810_update_lvi(struct i810_state *state, int rec)
1177 struct dmabuf *dmabuf = &state->dmabuf;
1180 int count, fragsize;
1181 void (*start)(struct i810_state *);
1183 count = dmabuf->count;
1185 port = dmabuf->read_channel->port;
1186 trigger = PCM_ENABLE_INPUT;
1187 start = __start_adc;
1188 count = dmabuf->dmasize - count;
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)
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
1211 if (!dmabuf->enable && dmabuf->ready) {
1212 if (!(dmabuf->trigger & trigger))
1215 CIV_TO_LVI(state->card, port, 1);
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;
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;
1245 unsigned fragmask, dmamask;
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);
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");
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);
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, "
1297 GET_CIV(state->card, PO_BASE),
1298 GET_LVI(state->card, PO_BASE),
1299 dmabuf->hwptr, dmabuf->count);
1304 wake_up(&dmabuf->wait);
1308 static inline int i810_get_free_write_space(struct i810_state *state)
1310 struct dmabuf *dmabuf = &state->dmabuf;
1313 i810_update_ptr(state);
1314 // catch underruns during playback
1315 if (dmabuf->count < 0) {
1317 dmabuf->swptr = dmabuf->hwptr;
1319 free = dmabuf->dmasize - dmabuf->count;
1325 static inline int i810_get_available_read_data(struct i810_state *state)
1327 struct dmabuf *dmabuf = &state->dmabuf;
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;
1342 static inline void fill_partial_frag(struct dmabuf *dmabuf)
1345 unsigned swptr, len;
1347 fragsize = dmabuf->fragsize;
1348 swptr = dmabuf->swptr;
1349 len = fragsize - MODULOP2(dmabuf->swptr, fragsize);
1350 if (len == fragsize)
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;
1368 if(dmabuf->mapped) {
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);
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);
1411 if (signal_pending(current) && signals_allowed) {
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");
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;
1434 static void i810_channel_interrupt(struct i810_card *card)
1438 #ifdef DEBUG_INTERRUPTS
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;
1451 if(!state->dmabuf.ready)
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 */
1463 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
1464 status = I810_IOREADW(card, port + OFF_PICB);
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);
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
1478 i810_update_ptr(state);
1479 #ifdef DEBUG_INTERRUPTS
1480 printk("COMP %d ", dmabuf->hwptr /
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)
1492 if(status & DMA_INT_DCH)
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 ");
1504 if (dmabuf->enable & DAC_RUNNING)
1506 if (dmabuf->enable & ADC_RUNNING)
1509 #ifdef DEBUG_INTERRUPTS
1514 if(card->pci_id == PCI_DEVICE_ID_SI_7012)
1515 I810_IOWRITEW(status & DMA_INT_MASK, card, port + OFF_PICB);
1517 I810_IOWRITEW(status & DMA_INT_MASK, card, port + OFF_SR);
1519 #ifdef DEBUG_INTERRUPTS
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;
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);
1543 I810_IOWRITEL(status & INT_MASK, card, GLOB_STA);
1544 spin_unlock(&card->lock);
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;
1558 unsigned long flags;
1562 DECLARE_WAITQUEUE(waita, current);
1565 printk("i810_audio: i810_read called, count = %d\n", count);
1570 if (dmabuf->enable & DAC_RUNNING)
1572 if (!dmabuf->read_channel) {
1574 dmabuf->read_channel = card->alloc_rec_pcm_channel(card);
1575 if (!dmabuf->read_channel) {
1579 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
1581 if (!access_ok(VERIFY_WRITE, buffer, count))
1587 add_wait_queue(&dmabuf->wait, &waita);
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);
1594 if (signal_pending(current)) {
1595 if (!ret) ret = -EAGAIN;
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);
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
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
1623 i810_update_lvi(state,1);
1624 if (file->f_flags & O_NONBLOCK) {
1625 if (!ret) ret = -EAGAIN;
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)) {
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);
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;
1657 if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
1658 if (!ret) ret = -EFAULT;
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);
1670 dmabuf->swptr = swptr;
1671 pending = dmabuf->count -= cnt;
1672 spin_unlock_irqrestore(&card->lock, flags);
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);
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;
1696 unsigned long flags;
1697 unsigned int swptr = 0;
1700 DECLARE_WAITQUEUE(waita, current);
1703 printk("i810_audio: i810_write called, count = %d\n", count);
1708 if (dmabuf->enable & ADC_RUNNING)
1710 if (!dmabuf->write_channel) {
1712 dmabuf->write_channel = card->alloc_pcm_channel(card);
1713 if(!dmabuf->write_channel)
1716 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
1718 if (!access_ok(VERIFY_READ, buffer, count))
1724 add_wait_queue(&dmabuf->wait, &waita);
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);
1731 if (signal_pending(current)) {
1732 if (!ret) ret = -EAGAIN;
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);
1750 printk(KERN_INFO "i810_audio: i810_write: %d bytes available space\n", cnt);
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;
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)) {
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);
1783 /* a buffer underrun, we delay the recovery until next time the
1784 while loop begin and we REALLY have data to play */
1787 if (signal_pending(current)) {
1788 if (!ret) ret = -ERESTARTSYS;
1793 if (copy_from_user(dmabuf->rawbuf+swptr,buffer,cnt)) {
1794 if (!ret) ret = -EFAULT;
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);
1806 dmabuf->swptr = swptr;
1807 pending = dmabuf->count += cnt;
1812 spin_unlock_irqrestore(&state->card->lock, flags);
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);
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;
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);
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;
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) {
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) {
1875 if ((ret = prog_dmabuf(state, 0)) != 0)
1879 if (vma->vm_pgoff != 0)
1881 size = vma->vm_end - vma->vm_start;
1882 if (size > (PAGE_SIZE << dmabuf->buforder))
1885 if (remap_pfn_range(vma, vma->vm_start,
1886 virt_to_phys(dmabuf->rawbuf) >> PAGE_SHIFT,
1887 size, vma->vm_page_prot))
1890 dmabuf->trigger = 0;
1893 printk("i810_audio: mmap'ed %ld bytes of data space\n", size);
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;
1908 unsigned int i_glob_cnt;
1910 struct ac97_codec *codec = state->card->ac97_codec[0];
1911 void __user *argp = (void __user *)arg;
1912 int __user *p = argp;
1915 printk("i810_audio: i810_ioctl, arg=0x%x, cmd=", arg ? *p : 0);
1920 case OSS_GETVERSION:
1922 printk("OSS_GETVERSION\n");
1924 return put_user(SOUND_VERSION, p);
1926 case SNDCTL_DSP_RESET:
1928 printk("SNDCTL_DSP_RESET\n");
1930 spin_lock_irqsave(&state->card->lock, flags);
1931 if (dmabuf->enable == DAC_RUNNING) {
1932 c = dmabuf->write_channel;
1935 if (dmabuf->enable == ADC_RUNNING) {
1936 c = dmabuf->read_channel;
1940 I810_IOWRITEB(2, state->card, c->port+OFF_CR); /* reset DMA machine */
1941 while ( I810_IOREADB(state->card, c->port+OFF_CR) & 2 )
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);
1952 dmabuf->swptr = dmabuf->hwptr = 0;
1953 dmabuf->count = dmabuf->total_bytes = 0;
1956 case SNDCTL_DSP_SYNC:
1958 printk("SNDCTL_DSP_SYNC\n");
1960 if (dmabuf->enable != DAC_RUNNING || file->f_flags & O_NONBLOCK)
1962 if((val = drain_dac(state, 1)))
1964 dmabuf->total_bytes = 0;
1967 case SNDCTL_DSP_SPEED: /* set smaple rate */
1969 printk("SNDCTL_DSP_SPEED\n");
1971 if (get_user(val, p))
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 ) ) {
1979 i810_set_spdif_output ( state, -1, 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) ) {
1990 } else { /* Not a valid rate for S/PDIF, ignore it */
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) {
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 */
2013 printk("SNDCTL_DSP_STEREO\n");
2015 if (dmabuf->enable & DAC_RUNNING) {
2018 if (dmabuf->enable & ADC_RUNNING) {
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)))
2028 if (file->f_mode & FMODE_READ) {
2029 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)))
2033 printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize);
2035 return put_user(dmabuf->userfragsize, p);
2037 case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/
2039 printk("SNDCTL_DSP_GETFMTS\n");
2041 return put_user(AFMT_S16_LE, p);
2043 case SNDCTL_DSP_SETFMT: /* Select sample format */
2045 printk("SNDCTL_DSP_SETFMT\n");
2047 return put_user(AFMT_S16_LE, p);
2049 case SNDCTL_DSP_CHANNELS:
2051 printk("SNDCTL_DSP_CHANNELS\n");
2053 if (get_user(val, p))
2057 if (dmabuf->enable & DAC_RUNNING) {
2060 if (dmabuf->enable & ADC_RUNNING) {
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 )
2081 else if ( i_glob_cnt & 0x0200000 )
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???? */
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??? */
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??? */
2110 default: /* nothing else is ever supported by the chipset */
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 */
2120 printk("SNDCTL_DSP_POST\n");
2122 if(!dmabuf->ready || (dmabuf->enable != DAC_RUNNING))
2124 if((dmabuf->swptr % dmabuf->fragsize) != 0) {
2125 val = dmabuf->fragsize - (dmabuf->swptr % dmabuf->fragsize);
2126 dmabuf->swptr += val;
2127 dmabuf->count += val;
2131 case SNDCTL_DSP_SUBDIVIDE:
2132 if (dmabuf->subdivision)
2134 if (get_user(val, p))
2136 if (val != 1 && val != 2 && val != 4)
2139 printk("SNDCTL_DSP_SUBDIVIDE %d\n", val);
2141 dmabuf->subdivision = val;
2145 case SNDCTL_DSP_SETFRAGMENT:
2146 if (get_user(val, p))
2149 dmabuf->ossfragsize = 1<<(val & 0xffff);
2150 dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
2151 if (!dmabuf->ossfragsize || !dmabuf->ossmaxfrags)
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
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) {
2186 dmabuf->ossmaxfrags <<= 1;
2188 while (val > 65536) {
2190 dmabuf->ossmaxfrags >>= 1;
2194 printk("SNDCTL_DSP_SETFRAGMENT 0x%x, %d, %d\n", val,
2195 dmabuf->ossfragsize, dmabuf->ossmaxfrags);
2200 case SNDCTL_DSP_GETOSPACE:
2201 if (!(file->f_mode & FMODE_WRITE))
2203 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2205 spin_lock_irqsave(&state->card->lock, flags);
2206 i810_update_ptr(state);
2207 abinfo.fragsize = dmabuf->userfragsize;
2208 abinfo.fragstotal = dmabuf->userfrags;
2210 abinfo.bytes = dmabuf->dmasize;
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);
2219 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2221 case SNDCTL_DSP_GETOPTR:
2222 if (!(file->f_mode & FMODE_WRITE))
2224 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
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);
2241 return copy_to_user(argp, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2243 case SNDCTL_DSP_GETISPACE:
2244 if (!(file->f_mode & FMODE_READ))
2246 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
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);
2258 return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
2260 case SNDCTL_DSP_GETIPTR:
2261 if (!(file->f_mode & FMODE_READ))
2263 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
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);
2280 return copy_to_user(argp, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
2282 case SNDCTL_DSP_NONBLOCK:
2284 printk("SNDCTL_DSP_NONBLOCK\n");
2286 file->f_flags |= O_NONBLOCK;
2289 case SNDCTL_DSP_GETCAPS:
2291 printk("SNDCTL_DSP_GETCAPS\n");
2293 return put_user(DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP|DSP_CAP_BIND,
2296 case SNDCTL_DSP_GETTRIGGER:
2299 printk("SNDCTL_DSP_GETTRIGGER 0x%x\n", dmabuf->trigger);
2301 return put_user(dmabuf->trigger, p);
2303 case SNDCTL_DSP_SETTRIGGER:
2304 if (get_user(val, p))
2306 #if defined(DEBUG) || defined(DEBUG_MMAP)
2307 printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
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) {
2319 if((file->f_mode & FMODE_WRITE) && !(val & PCM_ENABLE_OUTPUT) && dmabuf->enable == DAC_RUNNING) {
2322 dmabuf->trigger = val;
2323 if((val & PCM_ENABLE_OUTPUT) && !(dmabuf->enable & DAC_RUNNING)) {
2324 if (!dmabuf->write_channel) {
2326 dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
2327 if (!dmabuf->write_channel)
2330 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
2332 if (dmabuf->mapped) {
2333 spin_lock_irqsave(&state->card->lock, flags);
2334 i810_update_ptr(state);
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);
2344 if((val & PCM_ENABLE_INPUT) && !(dmabuf->enable & ADC_RUNNING)) {
2345 if (!dmabuf->read_channel) {
2347 dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
2348 if (!dmabuf->read_channel)
2351 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
2353 if (dmabuf->mapped) {
2354 spin_lock_irqsave(&state->card->lock, flags);
2355 i810_update_ptr(state);
2356 dmabuf->swptr = dmabuf->hwptr;
2358 spin_unlock_irqrestore(&state->card->lock, flags);
2360 i810_update_lvi(state, 1);
2365 case SNDCTL_DSP_SETDUPLEX:
2367 printk("SNDCTL_DSP_SETDUPLEX\n");
2371 case SNDCTL_DSP_GETODELAY:
2372 if (!(file->f_mode & FMODE_WRITE))
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);
2379 printk("SNDCTL_DSP_GETODELAY %d\n", dmabuf->count);
2381 return put_user(val, p);
2383 case SOUND_PCM_READ_RATE:
2385 printk("SOUND_PCM_READ_RATE %d\n", dmabuf->rate);
2387 return put_user(dmabuf->rate, p);
2389 case SOUND_PCM_READ_CHANNELS:
2391 printk("SOUND_PCM_READ_CHANNELS\n");
2393 return put_user(2, p);
2395 case SOUND_PCM_READ_BITS:
2397 printk("SOUND_PCM_READ_BITS\n");
2399 return put_user(AFMT_S16_LE, p);
2401 case SNDCTL_DSP_SETSPDIF: /* Set S/PDIF Control register */
2403 printk("SNDCTL_DSP_SETSPDIF\n");
2405 if (get_user(val, p))
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 */
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);
2426 printk(KERN_WARNING "i810_audio: S/PDIF transmitter not avalible.\n");
2428 return put_user(val, p);
2430 case SNDCTL_DSP_GETSPDIF: /* Get S/PDIF Control register */
2432 printk("SNDCTL_DSP_GETSPDIF\n");
2434 if (get_user(val, p))
2437 /* Check to make sure the codec supports S/PDIF transmitter */
2439 if(!(state->card->ac97_features & 4)) {
2441 printk(KERN_WARNING "i810_audio: S/PDIF transmitter not avalible.\n");
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:
2452 printk("SNDCTL_DSP_GETCHANNELMASK\n");
2454 if (get_user(val, p))
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:
2471 printk("SNDCTL_DSP_BIND_CHANNEL\n");
2473 if (get_user(val, p))
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;
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))
2488 if ( dmabuf->enable == DAC_RUNNING ) {
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
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;
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);
2518 case DSP_BIND_FRONT:
2521 case DSP_BIND_FRONT|DSP_BIND_SURR:
2524 case DSP_BIND_FRONT|DSP_BIND_SURR|DSP_BIND_CENTER_LFE:
2528 val = DSP_BIND_FRONT;
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:
2549 printk("SNDCTL_* -EINVAL\n");
2556 static int i810_open(struct inode *inode, struct file *file)
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);
2583 memset(state, 0, sizeof(struct i810_state));
2584 dmabuf = &state->dmabuf;
2590 /* no more virtual channel avaiable */
2595 /* initialize the virtual channel */
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;
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;
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);
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;
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) {
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;
2679 spin_unlock_irqrestore(&card->lock, flags);
2685 static /*const*/ struct file_operations i810_audio_fops = {
2686 .owner = THIS_MODULE,
2687 .llseek = no_llseek,
2689 .write = i810_write,
2691 .ioctl = i810_ioctl,
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;
2703 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2705 while(count-- && (readb(card->iobase_mmio + CAS) & 1))
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);
2715 return readw(card->ac97base_mmio + reg_set);
2719 static u16 i810_ac97_get_io(struct ac97_codec *dev, u8 reg)
2721 struct i810_card *card = dev->private_data;
2723 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2725 while(count-- && (I810_IOREADB(card, CAS) & 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;
2735 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2737 while(count-- && (readb(card->iobase_mmio + CAS) & 1))
2740 writew(data, card->ac97base_mmio + reg_set);
2743 printk(KERN_DEBUG "i810_audio: ac97_set_mmio(0x%04X, %d)\n", (u32) data, ((int) reg_set) & 0xffff);
2747 static void i810_ac97_set_io(struct ac97_codec *dev, u8 reg, u16 data)
2749 struct i810_card *card = dev->private_data;
2751 u16 reg_set = IO_REG_OFF(dev) | (reg&0x7f);
2753 while(count-- && (I810_IOREADB(card, CAS) & 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;
2764 spin_lock(&card->ac97_lock);
2765 if (card->use_mmio) {
2766 ret = i810_ac97_get_mmio(dev, reg);
2769 ret = i810_ac97_get_io(dev, reg);
2771 spin_unlock(&card->ac97_lock);
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);
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)
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);
2822 static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd,
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) {
2845 return reg & (1<<8);
2847 return reg & (1<<9);
2849 return reg & (1<<28);
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 */
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);
2884 static int is_new_ich(u16 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:
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);
2915 int primary_codec_id = 0;
2917 if((reg&2)==0) /* Cold required */
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 */
2932 if((I810_IOREADL(card, GLOB_CNT)&4)==0)
2935 set_current_state(TASK_UNINTERRUPTIBLE);
2936 schedule_timeout(HZ/20);
2940 printk(KERN_ERR "i810_audio: AC'97 reset failed.\n");
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) */
2953 readw(card->ac97base_mmio);
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",
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))
2971 printk("no response.\n");
2974 readw(card->ac97base_mmio);
2976 inw(card->ac97base);
2980 static int __devinit i810_ac97_init(struct i810_card *card)
2984 int total_channels = 0;
2985 int nr_ac97_max = card_cap[card->pci_id_internal].nr_ac97;
2986 struct ac97_codec *codec;
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 */
3001 reg = I810_IOREADL(card, GLOB_STA);
3002 if ( reg & 0x0200000 )
3004 else if ( reg & 0x0100000 )
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++) {
3019 printk(KERN_INFO "i810_audio: Resetting connection %d\n", num_ac97);
3021 readw(card->ac97base_mmio + 0x80*num_ac97);
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",
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)) {
3045 printk(KERN_ERR "i810_audio: Primary codec not ready.\n");
3048 if ((codec = ac97_alloc_codec()) == NULL)
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;
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);
3079 printk(KERN_WARNING "i810_audio: no codec attached ?\n");
3080 ac97_release_codec(codec);
3084 /* Check for an AC97 1.0 soft modem (ID1) */
3088 printk(KERN_WARNING "i810_audio: codec %d is a softmodem - skipping.\n", ac97_id);
3089 ac97_release_codec(codec);
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 */
3099 printk(KERN_WARNING "i810_audio: only 48Khz playback available.\n");
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 */
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 */
3141 if((eid & 0xc000) != 0) {
3142 switch ( total_channels ) {
3144 /* Set dsa1, dsa0 to 01 */
3148 /* Set dsa1, dsa0 to 10 */
3152 /* Set dsa1, dsa0 to 11 */
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);
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);
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;
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;
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.
3204 state = card->states[0] = (struct i810_state *)
3205 kmalloc(sizeof(struct i810_state), GFP_KERNEL);
3208 memset(state, 0, sizeof(struct i810_state));
3209 dmabuf = &state->dmabuf;
3211 dmabuf->write_channel = card->alloc_pcm_channel(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) {
3228 dmabuf->count = dmabuf->dmasize;
3229 CIV_TO_LVI(card, dmabuf->write_channel->port, -1);
3230 local_irq_save(flags);
3232 offset = i810_get_dma_addr(state, 0);
3234 new_offset = i810_get_dma_addr(state, 0);
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);
3244 if (i > 48500 || i < 47500) {
3245 clocking = clocking * clocking / i;
3246 printk("i810_audio: setting clocking to %d\n", clocking);
3249 dealloc_dmabuf(state);
3250 config_out_nodmabuf:
3251 state->card->free_pcm_channel(state->card,state->dmabuf.write_channel->num);
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))
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");
3273 if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) {
3274 printk(KERN_ERR "i810_audio: out of memory\n");
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)) {
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)) {
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");
3309 card->irq = pci_dev->irq;
3311 card->magic = I810_CARD_MAGIC;
3313 card->pm_suspended=0;
3315 spin_lock_init(&card->lock);
3316 spin_lock_init(&card->ac97_lock);
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,
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");
3339 { /* We may dispose of this altogether some time soon, so... */
3340 struct i810_channel *cp = card->channel;
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);
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);
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);
3374 iounmap(card->ac97base_mmio);
3375 release_mem_region(card->ac97base_mmio_phys, 512);
3376 release_mem_region(card->iobase_mmio_phys, 512);
3381 iounmap(card->ac97base_mmio);
3382 release_mem_region(card->ac97base_mmio_phys, 512);
3392 /* initialize AC97 codec and register /dev/mixer */
3393 if (i810_ac97_init(card) <= 0)
3395 pci_set_drvdata(pci_dev, card);
3399 i810_configure_clocking();
3402 /* register /dev/dsp */
3403 if ((card->dev_audio = register_sound_dsp(&i810_audio_fops, -1)) < 0) {
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]);
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);
3421 card->initializing = 0;
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);
3433 release_region(card->iobase, 64);
3435 pci_free_consistent(pci_dev, sizeof(struct i810_channel)*NR_HW_CH,
3436 card->channel, card->chandma);
3442 static void __devexit i810_remove(struct pci_dev *pci_dev)
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);
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;
3479 printk("i810_audio: i810_pm_suspend called\n");
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;
3494 state->pm_saved_dac_rate=0;
3496 if(dmabuf->enable & ADC_RUNNING) {
3497 state->pm_saved_adc_rate=dmabuf->rate;
3500 state->pm_saved_adc_rate=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. */
3529 static int i810_pm_resume(struct pci_dev *dev)
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
3546 if(!codec || !i810_ac97_exists(card,num_ac97)) {
3547 if(num_ac97) continue;
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)){
3562 pm_saved_mixer_settings[i][num_ac97];
3563 codec->mixer_state[i]=val;
3564 codec->write_mixer(codec,i,
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];
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);
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),
3612 .suspend = i810_pm_suspend,
3613 .resume = i810_pm_resume,
3614 #endif /* CONFIG_PM */
3618 static int __init i810_init_module (void)
3622 printk(KERN_INFO "Intel 810 + AC97 Audio, version "
3623 DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
3625 retval = pci_register_driver(&i810_pci_driver);
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);
3636 printk("i810_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
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);