2 * ALI ali5455 and friends ICH driver for Linux
3 * LEI HU <Lei_Hu@ali.com.tw>
6 * drivers/sound/i810_audio
8 * The ALi 5455 is similar but not quite identical to the Intel ICH
9 * series of controllers. Its easier to keep the driver seperated from
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 * ALi 5455 theory of operation
29 * The chipset provides three DMA channels that talk to an AC97
30 * CODEC (AC97 is a digital/analog mixer standard). At its simplest
31 * you get 48Khz audio with basic volume and mixer controls. At the
32 * best you get rate adaption in the codec. We set the card up so
33 * that we never take completion interrupts but instead keep the card
34 * chasing its tail around a ring buffer. This is needed for mmap
35 * mode audio and happens to work rather well for non-mmap modes too.
37 * The board has one output channel for PCM audio (supported) and
38 * a stereo line in and mono microphone input. Again these are normally
39 * locked to 48Khz only. Right now recording is not finished.
41 * There is no midi support, no synth support. Use timidity. To get
42 * esd working you need to use esd -r 48000 as it won't probe 48KHz
43 * by default. mpg123 can't handle 48Khz only audio so use xmms.
45 * If you need to force a specific rate set the clocking= option
49 #include <linux/module.h>
50 #include <linux/version.h>
51 #include <linux/string.h>
52 #include <linux/ctype.h>
53 #include <linux/ioport.h>
54 #include <linux/sched.h>
55 #include <linux/delay.h>
56 #include <linux/sound.h>
57 #include <linux/slab.h>
58 #include <linux/soundcard.h>
59 #include <linux/pci.h>
62 #include <linux/init.h>
63 #include <linux/poll.h>
64 #include <linux/spinlock.h>
65 #include <linux/smp_lock.h>
66 #include <linux/ac97_codec.h>
67 #include <linux/wrapper.h>
68 #include <asm/uaccess.h>
69 #include <asm/hardirq.h>
71 #ifndef PCI_DEVICE_ID_ALI_5455
72 #define PCI_DEVICE_ID_ALI_5455 0x5455
75 #ifndef PCI_VENDOR_ID_ALI
76 #define PCI_VENDOR_ID_ALI 0x10b9
79 static int strict_clocking = 0;
80 static unsigned int clocking = 0;
81 static unsigned int codec_pcmout_share_spdif_locked = 0;
82 static unsigned int codec_independent_spdif_locked = 0;
83 static unsigned int controller_pcmout_share_spdif_locked = 0;
84 static unsigned int controller_independent_spdif_locked = 0;
85 static unsigned int globel = 0;
89 #define CODEC_SPDIFOUT_RUNNING 8
90 #define CONTROLLER_SPDIFOUT_RUNNING 4
92 #define SPDIF_ENABLE_OUTPUT 4 /* bits 0,1 are PCM */
94 #define ALI5455_FMT_16BIT 1
95 #define ALI5455_FMT_STEREO 2
96 #define ALI5455_FMT_MASK 3
98 #define SPDIF_ON 0x0004
99 #define SURR_ON 0x0010
100 #define CENTER_LFE_ON 0x0020
101 #define VOL_MUTED 0x8000
104 #define ALI_SPDIF_OUT_CH_STATUS 0xbf
105 /* the 810's array of pointers to data buffers */
108 #define BUSADDR_MASK 0xFFFFFFFE
110 #define CON_IOC 0x80000000 /* interrupt on completion */
111 #define CON_BUFPAD 0x40000000 /* pad underrun with last sample, else 0 */
112 #define CON_BUFLEN_MASK 0x0000ffff /* buffer length in samples */
116 /* an instance of the ali channel */
119 /* these sg guys should probably be allocated
120 seperately as nocache. Must be 8 byte aligned */
121 struct sg_item sg[SG_LEN]; /* 32*8 */
129 * we have 3 seperate dma engines. pcm in, pcm out, and mic.
130 * each dma engine has controlling registers. These goofy
131 * names are from the datasheet, but make it easy to write
132 * code while leafing through it.
135 #define ENUM_ENGINE(PRE,DIG) \
137 PRE##_BDBAR = 0x##DIG##0, /* Buffer Descriptor list Base Address */ \
138 PRE##_CIV = 0x##DIG##4, /* Current Index Value */ \
139 PRE##_LVI = 0x##DIG##5, /* Last Valid Index */ \
140 PRE##_SR = 0x##DIG##6, /* Status Register */ \
141 PRE##_PICB = 0x##DIG##8, /* Position In Current Buffer */ \
142 PRE##_CR = 0x##DIG##b /* Control Register */ \
145 ENUM_ENGINE(OFF, 0); /* Offsets */
146 ENUM_ENGINE(PI, 4); /* PCM In */
147 ENUM_ENGINE(PO, 5); /* PCM Out */
148 ENUM_ENGINE(MC, 6); /* Mic In */
149 ENUM_ENGINE(CODECSPDIFOUT, 7); /* CODEC SPDIF OUT */
150 ENUM_ENGINE(CONTROLLERSPDIFIN, A); /* CONTROLLER SPDIF In */
151 ENUM_ENGINE(CONTROLLERSPDIFOUT, B); /* CONTROLLER SPDIF OUT */
155 ALI_SCR = 0x00, /* System Control Register */
156 ALI_SSR = 0x04, /* System Status Register */
157 ALI_DMACR = 0x08, /* DMA Control Register */
158 ALI_FIFOCR1 = 0x0c, /* FIFO Control Register 1 */
159 ALI_INTERFACECR = 0x10, /* Interface Control Register */
160 ALI_INTERRUPTCR = 0x14, /* Interrupt control Register */
161 ALI_INTERRUPTSR = 0x18, /* Interrupt Status Register */
162 ALI_FIFOCR2 = 0x1c, /* FIFO Control Register 2 */
163 ALI_CPR = 0x20, /* Command Port Register */
164 ALI_SPR = 0x24, /* Status Port Register */
165 ALI_FIFOCR3 = 0x2c, /* FIFO Control Register 3 */
166 ALI_TTSR = 0x30, /* Transmit Tag Slot Register */
167 ALI_RTSR = 0x34, /* Receive Tag Slot Register */
168 ALI_CSPSR = 0x38, /* Command/Status Port Status Register */
169 ALI_CAS = 0x3c, /* Codec Write Semaphore Register */
170 ALI_SPDIFCSR = 0xf8, /* spdif channel status register */
171 ALI_SPDIFICS = 0xfc /* spdif interface control/status */
174 // x-status register(x:pcm in ,pcm out, mic in,)
175 /* interrupts for a dma engine */
176 #define DMA_INT_FIFO (1<<4) /* fifo under/over flow */
177 #define DMA_INT_COMPLETE (1<<3) /* buffer read/write complete and ioc set */
178 #define DMA_INT_LVI (1<<2) /* last valid done */
179 #define DMA_INT_CELV (1<<1) /* last valid is current */
180 #define DMA_INT_DCH (1) /* DMA Controller Halted (happens on LVI interrupts) */ //not eqult intel
181 #define DMA_INT_MASK (DMA_INT_FIFO|DMA_INT_COMPLETE|DMA_INT_LVI)
183 /* interrupts for the whole chip */// by interrupt status register finish
185 #define INT_SPDIFOUT (1<<23) /* controller spdif out INTERRUPT */
186 #define INT_SPDIFIN (1<<22)
187 #define INT_CODECSPDIFOUT (1<<19)
188 #define INT_MICIN (1<<18)
189 #define INT_PCMOUT (1<<17)
190 #define INT_PCMIN (1<<16)
191 #define INT_CPRAIS (1<<7)
192 #define INT_SPRAIS (1<<5)
193 #define INT_GPIO (1<<1)
194 #define INT_MASK (INT_SPDIFOUT|INT_CODECSPDIFOUT|INT_MICIN|INT_PCMOUT|INT_PCMIN)
196 #define DRIVER_VERSION "0.02ac"
198 /* magic numbers to protect our data structures */
199 #define ALI5455_CARD_MAGIC 0x5072696E /* "Prin" */
200 #define ALI5455_STATE_MAGIC 0x63657373 /* "cess" */
201 #define ALI5455_DMA_MASK 0xffffffff /* DMA buffer mask for pci_alloc_consist */
202 #define NR_HW_CH 5 //I think 5 channel
204 /* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */
207 /* Please note that an 8bit mono stream is not valid on this card, you must have a 16bit */
208 /* stream at a minimum for this card to be happy */
209 static const unsigned sample_size[] = { 1, 2, 2, 4 };
210 /* Samples are 16bit values, so we are shifting to a word, not to a byte, hence shift */
211 /* values are one less than might be expected */
212 static const unsigned sample_shift[] = { -1, 0, 0, 1 };
215 static char *card_names[] = {
219 static struct pci_device_id ali_pci_tbl[] __initdata = {
220 {PCI_VENDOR_ID_ALI, PCI_DEVICE_ID_ALI_5455,
221 PCI_ANY_ID, PCI_ANY_ID, 0, 0, ALI5455},
225 MODULE_DEVICE_TABLE(pci, ali_pci_tbl);
228 #define PM_SUSPENDED(card) (card->pm_suspended)
230 #define PM_SUSPENDED(card) (0)
233 /* "software" or virtual channel, an instance of opened /dev/dsp */
236 struct ali_card *card; /* Card info */
238 /* single open lock mechanism, only used for recording */
239 struct semaphore open_sem;
240 wait_queue_head_t open_wait;
245 /* virtual channel number */
249 unsigned int pm_saved_dac_rate, pm_saved_adc_rate;
252 /* wave sample stuff */
254 unsigned char fmt, enable, trigger;
256 /* hardware channel */
257 struct ali_channel *read_channel;
258 struct ali_channel *write_channel;
259 struct ali_channel *codec_spdifout_channel;
260 struct ali_channel *controller_spdifout_channel;
262 /* OSS buffer management stuff */
264 dma_addr_t dma_handle;
269 /* our buffer acts like a circular ring */
270 unsigned hwptr; /* where dma last started, updated by update_ptr */
271 unsigned swptr; /* where driver last clear/filled, updated by read/write */
272 int count; /* bytes to be consumed or been generated by dma machine */
273 unsigned total_bytes; /* total bytes dmaed by hardware */
275 unsigned error; /* number of over/underruns */
276 wait_queue_head_t wait; /* put process on wait queue when no more space in buffer */
278 /* redundant, but makes calculations easier */
279 /* what the hardware uses */
282 unsigned fragsamples;
284 /* what we tell the user to expect */
286 unsigned userfragsize;
291 unsigned update_flag;
292 unsigned ossfragsize;
293 unsigned ossmaxfrags;
294 unsigned subdivision;
300 struct ali_channel channel[5];
303 /* We keep ali5455 cards in a linked list */
304 struct ali_card *next;
306 /* The ali has a certain amount of cross channel interaction
307 so we use a single per card lock */
310 /* PCI device stuff */
311 struct pci_dev *pci_dev;
315 u32 pm_save_state[64 / sizeof(u32)];
316 int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97];
318 /* soundcore stuff */
321 /* structures for abstraction of hardware facilities, codecs, banks and channels */
322 struct ac97_codec *ac97_codec[NR_AC97];
323 struct ali_state *states[NR_HW_CH];
329 /* hardware resources */
330 unsigned long iobase;
334 /* Function support */
335 struct ali_channel *(*alloc_pcm_channel) (struct ali_card *);
336 struct ali_channel *(*alloc_rec_pcm_channel) (struct ali_card *);
337 struct ali_channel *(*alloc_rec_mic_channel) (struct ali_card *);
338 struct ali_channel *(*alloc_codec_spdifout_channel) (struct ali_card *);
339 struct ali_channel *(*alloc_controller_spdifout_channel) (struct ali_card *);
340 void (*free_pcm_channel) (struct ali_card *, int chan);
342 /* We have a *very* long init time possibly, so use this to block */
343 /* attempts to open our devices before we are ready (stops oops'es) */
348 static struct ali_card *devs = NULL;
350 static int ali_open_mixdev(struct inode *inode, struct file *file);
351 static int ali_ioctl_mixdev(struct inode *inode, struct file *file,
352 unsigned int cmd, unsigned long arg);
353 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg);
354 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data);
356 static struct ali_channel *ali_alloc_pcm_channel(struct ali_card *card)
358 if (card->channel[1].used == 1)
360 card->channel[1].used = 1;
361 return &card->channel[1];
364 static struct ali_channel *ali_alloc_rec_pcm_channel(struct ali_card *card)
366 if (card->channel[0].used == 1)
368 card->channel[0].used = 1;
369 return &card->channel[0];
372 static struct ali_channel *ali_alloc_rec_mic_channel(struct ali_card *card)
374 if (card->channel[2].used == 1)
376 card->channel[2].used = 1;
377 return &card->channel[2];
380 static struct ali_channel *ali_alloc_codec_spdifout_channel(struct ali_card *card)
382 if (card->channel[3].used == 1)
384 card->channel[3].used = 1;
385 return &card->channel[3];
388 static struct ali_channel *ali_alloc_controller_spdifout_channel(struct ali_card *card)
390 if (card->channel[4].used == 1)
392 card->channel[4].used = 1;
393 return &card->channel[4];
395 static void ali_free_pcm_channel(struct ali_card *card, int channel)
397 card->channel[channel].used = 0;
401 //add support codec spdif out
402 static int ali_valid_spdif_rate(struct ac97_codec *codec, int rate)
404 unsigned long id = 0L;
406 id = (ali_ac97_get(codec, AC97_VENDOR_ID1) << 16);
407 id |= ali_ac97_get(codec, AC97_VENDOR_ID2) & 0xffff;
409 case 0x41445361: /* AD1886 */
414 case 0x414c4720: /* ALC650 */
419 default: /* all other codecs, until we know otherwiae */
420 if (rate == 48000 || rate == 44100 || rate == 32000) {
428 /* ali_set_spdif_output
430 * Configure the S/PDIF output transmitter. When we turn on
431 * S/PDIF, we turn off the analog output. This may not be
432 * the right thing to do.
435 * The DSP sample rate must already be set to a supported
436 * S/PDIF rate (32kHz, 44.1kHz, or 48kHz) or we abort.
438 static void ali_set_spdif_output(struct ali_state *state, int slots,
443 struct ac97_codec *codec = state->card->ac97_codec[0];
445 if (!(state->card->ac97_features & 4)) {
446 state->card->ac97_status &= ~SPDIF_ON;
448 if (slots == -1) { /* Turn off S/PDIF */
449 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
450 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
452 /* If the volume wasn't muted before we turned on S/PDIF, unmute it */
453 if (!(state->card->ac97_status & VOL_MUTED)) {
454 aud_reg = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
455 ali_ac97_set(codec, AC97_MASTER_VOL_STEREO,
456 (aud_reg & ~VOL_MUTED));
458 state->card->ac97_status &= ~(VOL_MUTED | SPDIF_ON);
462 vol = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
463 state->card->ac97_status = vol & VOL_MUTED;
465 /* Set S/PDIF transmitter sample rate */
466 aud_reg = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
469 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_32K;
472 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_44K;
475 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_48K;
478 /* turn off S/PDIF */
479 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
480 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
481 state->card->ac97_status &= ~SPDIF_ON;
485 ali_ac97_set(codec, AC97_SPDIF_CONTROL, aud_reg);
487 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
488 aud_reg = (aud_reg & AC97_EA_SLOT_MASK) | slots | AC97_EA_SPDIF;
489 ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
491 aud_reg = ali_ac97_get(codec, AC97_POWER_CONTROL);
493 ali_ac97_set(codec, AC97_POWER_CONTROL, aud_reg);
496 state->card->ac97_status |= SPDIF_ON;
498 /* Check to make sure the configuration is valid */
499 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
500 if (!(aud_reg & 0x0400)) {
501 /* turn off S/PDIF */
502 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
503 state->card->ac97_status &= ~SPDIF_ON;
506 if (codec_independent_spdif_locked > 0) {
507 aud_reg = ali_ac97_get(codec, 0x6a);
508 ali_ac97_set(codec, 0x6a, (aud_reg & 0xefff));
510 /* Mute the analog output */
511 /* Should this only mute the PCM volume??? */
515 /* ali_set_dac_channels
517 * Configure the codec's multi-channel DACs
519 * The logic is backwards. Setting the bit to 1 turns off the DAC.
521 * What about the ICH? We currently configure it using the
522 * SNDCTL_DSP_CHANNELS ioctl. If we're turnning on the DAC,
523 * does that imply that we want the ICH set to support
527 * vailidate that the codec really supports these DACs
528 * before turning them on.
530 static void ali_set_dac_channels(struct ali_state *state, int channel)
533 struct ac97_codec *codec = state->card->ac97_codec[0];
535 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
536 aud_reg |= AC97_EA_PRI | AC97_EA_PRJ | AC97_EA_PRK;
537 state->card->ac97_status &= ~(SURR_ON | CENTER_LFE_ON);
540 case 2: /* always enabled */
543 aud_reg &= ~AC97_EA_PRJ;
544 state->card->ac97_status |= SURR_ON;
547 aud_reg &= ~(AC97_EA_PRJ | AC97_EA_PRI | AC97_EA_PRK);
548 state->card->ac97_status |= SURR_ON | CENTER_LFE_ON;
553 ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
557 /* set playback sample rate */
558 static unsigned int ali_set_dac_rate(struct ali_state *state,
561 struct dmabuf *dmabuf = &state->dmabuf;
563 struct ac97_codec *codec = state->card->ac97_codec[0];
565 if (!(state->card->ac97_features & 0x0001)) {
566 dmabuf->rate = clocking;
577 * Adjust for misclocked crap
580 rate = (rate * clocking) / 48000;
582 if (strict_clocking && rate < 8000) {
584 dmabuf->rate = (rate * 48000) / clocking;
587 new_rate = ac97_set_dac_rate(codec, rate);
588 if (new_rate != rate) {
589 dmabuf->rate = (new_rate * 48000) / clocking;
595 /* set recording sample rate */
596 static unsigned int ali_set_adc_rate(struct ali_state *state,
599 struct dmabuf *dmabuf = &state->dmabuf;
601 struct ac97_codec *codec = state->card->ac97_codec[0];
603 if (!(state->card->ac97_features & 0x0001)) {
604 dmabuf->rate = clocking;
615 * Adjust for misclocked crap
618 rate = (rate * clocking) / 48000;
619 if (strict_clocking && rate < 8000) {
621 dmabuf->rate = (rate * 48000) / clocking;
624 new_rate = ac97_set_adc_rate(codec, rate);
626 if (new_rate != rate) {
627 dmabuf->rate = (new_rate * 48000) / clocking;
633 /* set codec independent spdifout sample rate */
634 static unsigned int ali_set_codecspdifout_rate(struct ali_state *state,
637 struct dmabuf *dmabuf = &state->dmabuf;
639 if (!(state->card->ac97_features & 0x0001)) {
640 dmabuf->rate = clocking;
653 /* set controller independent spdif out function sample rate */
654 static void ali_set_spdifout_rate(struct ali_state *state,
657 unsigned char ch_st_sel;
658 unsigned short status_rate;
673 ch_st_sel = inb(state->card->iobase + ALI_SPDIFICS) & ALI_SPDIF_OUT_CH_STATUS; //select spdif_out
675 ch_st_sel |= 0x80; //select right
676 outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
677 outb(status_rate | 0x20, (state->card->iobase + ALI_SPDIFCSR + 2));
679 ch_st_sel &= (~0x80); //select left
680 outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
681 outw(status_rate | 0x10, (state->card->iobase + ALI_SPDIFCSR + 2));
684 /* get current playback/recording dma buffer pointer (byte offset from LBA),
685 called with spinlock held! */
687 static inline unsigned ali_get_dma_addr(struct ali_state *state, int rec)
689 struct dmabuf *dmabuf = &state->dmabuf;
690 unsigned int civ, offset, port, port_picb;
697 port = state->card->iobase + dmabuf->read_channel->port;
699 port = state->card->iobase + dmabuf->codec_spdifout_channel->port;
701 port = state->card->iobase + dmabuf->controller_spdifout_channel->port;
703 port = state->card->iobase + dmabuf->write_channel->port;
705 port_picb = port + OFF_PICB;
708 civ = inb(port + OFF_CIV) & 31;
709 offset = inw(port_picb);
710 /* Must have a delay here! */
714 /* Reread both registers and make sure that that total
715 * offset from the first reading to the second is 0.
716 * There is an issue with SiS hardware where it will count
717 * picb down to 0, then update civ to the next value,
718 * then set the new picb to fragsize bytes. We can catch
719 * it between the civ update and the picb update, making
720 * it look as though we are 1 fragsize ahead of where we
721 * are. The next to we get the address though, it will
722 * be back in thdelay is more than long enough
723 * that we won't have to worry about the chip still being
724 * out of sync with reality ;-)
726 } while (civ != (inb(port + OFF_CIV) & 31) || offset != inw(port_picb));
728 data = ((civ + 1) * dmabuf->fragsize - (2 * offset)) % dmabuf->dmasize;
729 if (inw(port_picb) == 0)
735 /* Stop recording (lock held) */
736 static inline void __stop_adc(struct ali_state *state)
738 struct dmabuf *dmabuf = &state->dmabuf;
739 struct ali_card *card = state->card;
741 dmabuf->enable &= ~ADC_RUNNING;
743 outl((1 << 18) | (1 << 16), card->iobase + ALI_DMACR);
746 outb(0, card->iobase + PI_CR);
747 while (inb(card->iobase + PI_CR) != 0);
749 // now clear any latent interrupt bits (like the halt bit)
750 outb(inb(card->iobase + PI_SR) | 0x001e, card->iobase + PI_SR);
751 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMIN, card->iobase + ALI_INTERRUPTSR);
754 static void stop_adc(struct ali_state *state)
756 struct ali_card *card = state->card;
758 spin_lock_irqsave(&card->lock, flags);
760 spin_unlock_irqrestore(&card->lock, flags);
763 static inline void __start_adc(struct ali_state *state)
765 struct dmabuf *dmabuf = &state->dmabuf;
767 if (dmabuf->count < dmabuf->dmasize && dmabuf->ready
768 && !dmabuf->enable && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
769 dmabuf->enable |= ADC_RUNNING;
770 outb((1 << 4) | (1 << 2), state->card->iobase + PI_CR);
771 if (state->card->channel[0].used == 1)
772 outl(1, state->card->iobase + ALI_DMACR); // DMA CONTROL REGISTRER
774 if (state->card->channel[2].used == 1)
775 outl((1 << 2), state->card->iobase + ALI_DMACR); //DMA CONTROL REGISTER
780 static void start_adc(struct ali_state *state)
782 struct ali_card *card = state->card;
785 spin_lock_irqsave(&card->lock, flags);
787 spin_unlock_irqrestore(&card->lock, flags);
790 /* stop playback (lock held) */
791 static inline void __stop_dac(struct ali_state *state)
793 struct dmabuf *dmabuf = &state->dmabuf;
794 struct ali_card *card = state->card;
796 dmabuf->enable &= ~DAC_RUNNING;
797 outl(0x00020000, card->iobase + 0x08);
798 outb(0, card->iobase + PO_CR);
799 while (inb(card->iobase + PO_CR) != 0)
802 outb(inb(card->iobase + PO_SR) | 0x001e, card->iobase + PO_SR);
804 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMOUT, card->iobase + ALI_INTERRUPTSR);
807 static void stop_dac(struct ali_state *state)
809 struct ali_card *card = state->card;
811 spin_lock_irqsave(&card->lock, flags);
813 spin_unlock_irqrestore(&card->lock, flags);
816 static inline void __start_dac(struct ali_state *state)
818 struct dmabuf *dmabuf = &state->dmabuf;
819 if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
820 (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
821 dmabuf->enable |= DAC_RUNNING;
822 outb((1 << 4) | (1 << 2), state->card->iobase + PO_CR);
823 outl((1 << 1), state->card->iobase + 0x08); //dma control register
827 static void start_dac(struct ali_state *state)
829 struct ali_card *card = state->card;
831 spin_lock_irqsave(&card->lock, flags);
833 spin_unlock_irqrestore(&card->lock, flags);
836 /* stop codec and controller spdif out (lock held) */
837 static inline void __stop_spdifout(struct ali_state *state)
839 struct dmabuf *dmabuf = &state->dmabuf;
840 struct ali_card *card = state->card;
842 if (codec_independent_spdif_locked > 0) {
843 dmabuf->enable &= ~CODEC_SPDIFOUT_RUNNING;
844 outl((1 << 19), card->iobase + 0x08);
845 outb(0, card->iobase + CODECSPDIFOUT_CR);
847 while (inb(card->iobase + CODECSPDIFOUT_CR) != 0)
850 outb(inb(card->iobase + CODECSPDIFOUT_SR) | 0x001e, card->iobase + CODECSPDIFOUT_SR);
851 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_CODECSPDIFOUT, card->iobase + ALI_INTERRUPTSR);
853 if (controller_independent_spdif_locked > 0) {
854 dmabuf->enable &= ~CONTROLLER_SPDIFOUT_RUNNING;
855 outl((1 << 23), card->iobase + 0x08);
856 outb(0, card->iobase + CONTROLLERSPDIFOUT_CR);
857 while (inb(card->iobase + CONTROLLERSPDIFOUT_CR) != 0)
859 outb(inb(card->iobase + CONTROLLERSPDIFOUT_SR) | 0x001e, card->iobase + CONTROLLERSPDIFOUT_SR);
860 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_SPDIFOUT, card->iobase + ALI_INTERRUPTSR);
865 static void stop_spdifout(struct ali_state *state)
867 struct ali_card *card = state->card;
869 spin_lock_irqsave(&card->lock, flags);
870 __stop_spdifout(state);
871 spin_unlock_irqrestore(&card->lock, flags);
874 static inline void __start_spdifout(struct ali_state *state)
876 struct dmabuf *dmabuf = &state->dmabuf;
877 if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
878 (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
879 if (codec_independent_spdif_locked > 0) {
880 dmabuf->enable |= CODEC_SPDIFOUT_RUNNING;
881 outb((1 << 4) | (1 << 2), state->card->iobase + CODECSPDIFOUT_CR);
882 outl((1 << 3), state->card->iobase + 0x08); //dma control register
884 if (controller_independent_spdif_locked > 0) {
885 dmabuf->enable |= CONTROLLER_SPDIFOUT_RUNNING;
886 outb((1 << 4) | (1 << 2), state->card->iobase + CONTROLLERSPDIFOUT_CR);
887 outl((1 << 7), state->card->iobase + 0x08); //dma control register
893 static void start_spdifout(struct ali_state *state)
895 struct ali_card *card = state->card;
897 spin_lock_irqsave(&card->lock, flags);
898 __start_spdifout(state);
899 spin_unlock_irqrestore(&card->lock, flags);
902 #define DMABUF_DEFAULTORDER (16-PAGE_SHIFT)
903 #define DMABUF_MINORDER 1
905 /* allocate DMA buffer, playback , recording,spdif out buffer should be allocated seperately */
906 static int alloc_dmabuf(struct ali_state *state)
908 struct dmabuf *dmabuf = &state->dmabuf;
911 struct page *page, *pend;
913 /* If we don't have any oss frag params, then use our default ones */
914 if (dmabuf->ossmaxfrags == 0)
915 dmabuf->ossmaxfrags = 4;
916 if (dmabuf->ossfragsize == 0)
917 dmabuf->ossfragsize = (PAGE_SIZE << DMABUF_DEFAULTORDER) / dmabuf->ossmaxfrags;
918 size = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
920 if (dmabuf->rawbuf && (PAGE_SIZE << dmabuf->buforder) == size)
922 /* alloc enough to satisfy the oss params */
923 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
924 if ((PAGE_SIZE << order) > size)
926 if ((rawbuf = pci_alloc_consistent(state->card->pci_dev,
928 &dmabuf->dma_handle)))
934 dmabuf->ready = dmabuf->mapped = 0;
935 dmabuf->rawbuf = rawbuf;
936 dmabuf->buforder = order;
938 /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
939 pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
940 for (page = virt_to_page(rawbuf); page <= pend; page++)
941 mem_map_reserve(page);
945 /* free DMA buffer */
946 static void dealloc_dmabuf(struct ali_state *state)
948 struct dmabuf *dmabuf = &state->dmabuf;
949 struct page *page, *pend;
951 if (dmabuf->rawbuf) {
952 /* undo marking the pages as reserved */
953 pend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
954 for (page = virt_to_page(dmabuf->rawbuf); page <= pend; page++)
955 mem_map_unreserve(page);
956 pci_free_consistent(state->card->pci_dev,
957 PAGE_SIZE << dmabuf->buforder,
958 dmabuf->rawbuf, dmabuf->dma_handle);
960 dmabuf->rawbuf = NULL;
961 dmabuf->mapped = dmabuf->ready = 0;
964 static int prog_dmabuf(struct ali_state *state, unsigned rec)
966 struct dmabuf *dmabuf = &state->dmabuf;
967 struct ali_channel *c = NULL;
974 spin_lock_irqsave(&state->card->lock, flags);
975 if (dmabuf->enable & DAC_RUNNING)
977 if (dmabuf->enable & ADC_RUNNING)
979 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
980 __stop_spdifout(state);
981 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
982 __stop_spdifout(state);
984 dmabuf->total_bytes = 0;
985 dmabuf->count = dmabuf->error = 0;
986 dmabuf->swptr = dmabuf->hwptr = 0;
987 spin_unlock_irqrestore(&state->card->lock, flags);
989 /* allocate DMA buffer, let alloc_dmabuf determine if we are already
990 * allocated well enough or if we should replace the current buffer
991 * (assuming one is already allocated, if it isn't, then allocate it).
993 if ((ret = alloc_dmabuf(state)))
996 /* FIXME: figure out all this OSS fragment stuff */
997 /* I did, it now does what it should according to the OSS API. DL */
998 /* We may not have realloced our dmabuf, but the fragment size to
999 * fragment number ratio may have changed, so go ahead and reprogram
1003 dmabuf->dmasize = PAGE_SIZE << dmabuf->buforder;
1004 dmabuf->numfrag = SG_LEN;
1005 dmabuf->fragsize = dmabuf->dmasize / dmabuf->numfrag;
1006 dmabuf->fragsamples = dmabuf->fragsize >> 1;
1007 dmabuf->userfragsize = dmabuf->ossfragsize;
1008 dmabuf->userfrags = dmabuf->dmasize / dmabuf->ossfragsize;
1010 memset(dmabuf->rawbuf, 0, dmabuf->dmasize);
1012 if (dmabuf->ossmaxfrags == 4) {
1014 dmabuf->fragshift = 2;
1015 } else if (dmabuf->ossmaxfrags == 8) {
1017 dmabuf->fragshift = 3;
1018 } else if (dmabuf->ossmaxfrags == 16) {
1020 dmabuf->fragshift = 4;
1023 dmabuf->fragshift = 5;
1026 * Now set up the ring
1030 c = dmabuf->read_channel;
1032 c = dmabuf->codec_spdifout_channel;
1034 c = dmabuf->controller_spdifout_channel;
1036 c = dmabuf->write_channel;
1040 * Load up 32 sg entries and take an interrupt at half
1041 * way (we might want more interrupts later..)
1043 for (i = 0; i < dmabuf->numfrag; i++) {
1045 virt_to_bus(dmabuf->rawbuf +
1046 dmabuf->fragsize * i);
1047 // the card will always be doing 16bit stereo
1048 sg->control = dmabuf->fragsamples;
1049 sg->control |= CON_BUFPAD; //I modify
1050 // set us up to get IOC interrupts as often as needed to
1051 // satisfy numfrag requirements, no more
1052 if (((i + 1) % fragint) == 0) {
1053 sg->control |= CON_IOC;
1057 spin_lock_irqsave(&state->card->lock, flags);
1058 outb(2, state->card->iobase + c->port + OFF_CR); /* reset DMA machine */
1059 outl(virt_to_bus(&c->sg[0]), state->card->iobase + c->port + OFF_BDBAR);
1060 outb(0, state->card->iobase + c->port + OFF_CIV);
1061 outb(0, state->card->iobase + c->port + OFF_LVI);
1062 spin_unlock_irqrestore(&state->card->lock, flags);
1064 /* set the ready flag for the dma buffer */
1069 static void __ali_update_lvi(struct ali_state *state, int rec)
1071 struct dmabuf *dmabuf = &state->dmabuf;
1073 port = state->card->iobase;
1075 port += dmabuf->read_channel->port;
1077 port += dmabuf->codec_spdifout_channel->port;
1079 port += dmabuf->controller_spdifout_channel->port;
1081 port += dmabuf->write_channel->port;
1082 /* if we are currently stopped, then our CIV is actually set to our
1083 * *last* sg segment and we are ready to wrap to the next. However,
1084 * if we set our LVI to the last sg segment, then it won't wrap to
1085 * the next sg segment, it won't even get a start. So, instead, when
1086 * we are stopped, we set both the LVI value and also we increment
1087 * the CIV value to the next sg segment to be played so that when
1088 * we call start_{dac,adc}, things will operate properly
1090 if (!dmabuf->enable && dmabuf->ready) {
1091 if (rec && dmabuf->count < dmabuf->dmasize && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
1092 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1094 while (! (inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1096 } else if (!rec && dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
1097 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1099 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1101 } else if (rec && dmabuf->count && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
1102 if (codec_independent_spdif_locked > 0) {
1103 // outb((inb(port+OFF_CIV))&31, port+OFF_LVI);
1104 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1105 __start_spdifout(state);
1106 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1109 if (controller_independent_spdif_locked > 0) {
1110 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1111 __start_spdifout(state);
1112 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1119 /* swptr - 1 is the tail of our transfer */
1120 x = (dmabuf->dmasize + dmabuf->swptr - 1) % dmabuf->dmasize;
1121 x /= dmabuf->fragsize;
1122 outb(x, port + OFF_LVI);
1125 static void ali_update_lvi(struct ali_state *state, int rec)
1127 struct dmabuf *dmabuf = &state->dmabuf;
1128 unsigned long flags;
1131 spin_lock_irqsave(&state->card->lock, flags);
1132 __ali_update_lvi(state, rec);
1133 spin_unlock_irqrestore(&state->card->lock, flags);
1136 /* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */
1137 static void ali_update_ptr(struct ali_state *state)
1139 struct dmabuf *dmabuf = &state->dmabuf;
1143 /* error handling and process wake up for DAC */
1144 if (dmabuf->enable == ADC_RUNNING) {
1145 /* update hardware pointer */
1146 hwptr = ali_get_dma_addr(state, 1);
1147 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1148 dmabuf->hwptr = hwptr;
1149 dmabuf->total_bytes += diff;
1150 dmabuf->count += diff;
1151 if (dmabuf->count > dmabuf->dmasize) {
1152 /* buffer underrun or buffer overrun */
1153 /* this is normal for the end of a read */
1154 /* only give an error if we went past the */
1155 /* last valid sg entry */
1156 if ((inb(state->card->iobase + PI_CIV) & 31) != (inb(state->card->iobase + PI_LVI) & 31)) {
1157 printk(KERN_WARNING "ali_audio: DMA overrun on read\n");
1161 if (dmabuf->count > dmabuf->userfragsize)
1162 wake_up(&dmabuf->wait);
1164 /* error handling and process wake up for DAC */
1165 if (dmabuf->enable == DAC_RUNNING) {
1166 /* update hardware pointer */
1167 hwptr = ali_get_dma_addr(state, 0);
1169 (dmabuf->dmasize + hwptr -
1170 dmabuf->hwptr) % dmabuf->dmasize;
1171 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
1172 printk("DAC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
1174 dmabuf->hwptr = hwptr;
1175 dmabuf->total_bytes += diff;
1176 dmabuf->count -= diff;
1177 if (dmabuf->count < 0) {
1178 /* buffer underrun or buffer overrun */
1179 /* this is normal for the end of a write */
1180 /* only give an error if we went past the */
1181 /* last valid sg entry */
1182 if ((inb(state->card->iobase + PO_CIV) & 31) != (inb(state->card->iobase + PO_LVI) & 31)) {
1183 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
1184 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n",
1185 inb(state->card->iobase + PO_CIV) & 31,
1186 inb(state->card->iobase + PO_LVI) & 31,
1192 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1193 wake_up(&dmabuf->wait);
1196 /* error handling and process wake up for CODEC SPDIF OUT */
1197 if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
1198 /* update hardware pointer */
1199 hwptr = ali_get_dma_addr(state, 2);
1200 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1201 dmabuf->hwptr = hwptr;
1202 dmabuf->total_bytes += diff;
1203 dmabuf->count -= diff;
1204 if (dmabuf->count < 0) {
1205 /* buffer underrun or buffer overrun */
1206 /* this is normal for the end of a write */
1207 /* only give an error if we went past the */
1208 /* last valid sg entry */
1209 if ((inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31)) {
1210 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
1211 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n",
1212 inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31,
1213 inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31,
1214 dmabuf->hwptr, dmabuf->count);
1218 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1219 wake_up(&dmabuf->wait);
1221 /* error handling and process wake up for CONTROLLER SPDIF OUT */
1222 if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
1223 /* update hardware pointer */
1224 hwptr = ali_get_dma_addr(state, 3);
1225 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1226 dmabuf->hwptr = hwptr;
1227 dmabuf->total_bytes += diff;
1228 dmabuf->count -= diff;
1229 if (dmabuf->count < 0) {
1230 /* buffer underrun or buffer overrun */
1231 /* this is normal for the end of a write */
1232 /* only give an error if we went past the */
1233 /* last valid sg entry */
1234 if ((inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31)) {
1236 "ali_audio: DMA overrun on write\n");
1237 printk("ali_audio: CIV %d, LVI %d, hwptr %x, "
1239 inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31,
1240 inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31,
1241 dmabuf->hwptr, dmabuf->count);
1245 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1246 wake_up(&dmabuf->wait);
1250 static inline int ali_get_free_write_space(struct
1254 struct dmabuf *dmabuf = &state->dmabuf;
1256 ali_update_ptr(state);
1257 // catch underruns during playback
1258 if (dmabuf->count < 0) {
1260 dmabuf->swptr = dmabuf->hwptr;
1262 free = dmabuf->dmasize - dmabuf->count;
1263 free -= (dmabuf->hwptr % dmabuf->fragsize);
1269 static inline int ali_get_available_read_data(struct
1273 struct dmabuf *dmabuf = &state->dmabuf;
1275 ali_update_ptr(state);
1276 // catch overruns during record
1277 if (dmabuf->count > dmabuf->dmasize) {
1278 dmabuf->count = dmabuf->dmasize;
1279 dmabuf->swptr = dmabuf->hwptr;
1281 avail = dmabuf->count;
1282 avail -= (dmabuf->hwptr % dmabuf->fragsize);
1288 static int drain_dac(struct ali_state *state, int signals_allowed)
1291 DECLARE_WAITQUEUE(wait, current);
1292 struct dmabuf *dmabuf = &state->dmabuf;
1293 unsigned long flags;
1298 if (dmabuf->mapped) {
1302 add_wait_queue(&dmabuf->wait, &wait);
1305 spin_lock_irqsave(&state->card->lock, flags);
1306 ali_update_ptr(state);
1307 count = dmabuf->count;
1308 spin_unlock_irqrestore(&state->card->lock, flags);
1312 * This will make sure that our LVI is correct, that our
1313 * pointer is updated, and that the DAC is running. We
1314 * have to force the setting of dmabuf->trigger to avoid
1315 * any possible deadlocks.
1317 if (!dmabuf->enable) {
1318 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1319 ali_update_lvi(state, 0);
1321 if (signal_pending(current) && signals_allowed) {
1325 /* It seems that we have to set the current state to
1326 * TASK_INTERRUPTIBLE every time to make the process
1327 * really go to sleep. This also has to be *after* the
1328 * update_ptr() call because update_ptr is likely to
1329 * do a wake_up() which will unset this before we ever
1330 * try to sleep, resuling in a tight loop in this code
1331 * instead of actually sleeping and waiting for an
1332 * interrupt to wake us up!
1334 set_current_state(TASK_INTERRUPTIBLE);
1336 * set the timeout to significantly longer than it *should*
1337 * take for the DAC to drain the DMA buffer
1339 tmo = (count * HZ) / (dmabuf->rate);
1340 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1341 printk(KERN_ERR "ali_audio: drain_dac, dma timeout?\n");
1346 set_current_state(TASK_RUNNING);
1347 remove_wait_queue(&dmabuf->wait, &wait);
1348 if (count > 0 && signal_pending(current) && signals_allowed)
1349 return -ERESTARTSYS;
1355 static int drain_spdifout(struct ali_state *state, int signals_allowed)
1358 DECLARE_WAITQUEUE(wait, current);
1359 struct dmabuf *dmabuf = &state->dmabuf;
1360 unsigned long flags;
1365 if (dmabuf->mapped) {
1366 stop_spdifout(state);
1369 add_wait_queue(&dmabuf->wait, &wait);
1372 spin_lock_irqsave(&state->card->lock, flags);
1373 ali_update_ptr(state);
1374 count = dmabuf->count;
1375 spin_unlock_irqrestore(&state->card->lock, flags);
1379 * This will make sure that our LVI is correct, that our
1380 * pointer is updated, and that the DAC is running. We
1381 * have to force the setting of dmabuf->trigger to avoid
1382 * any possible deadlocks.
1384 if (!dmabuf->enable) {
1385 if (codec_independent_spdif_locked > 0) {
1386 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1387 ali_update_lvi(state, 2);
1389 if (controller_independent_spdif_locked > 0) {
1390 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1391 ali_update_lvi(state, 3);
1395 if (signal_pending(current) && signals_allowed) {
1399 /* It seems that we have to set the current state to
1400 * TASK_INTERRUPTIBLE every time to make the process
1401 * really go to sleep. This also has to be *after* the
1402 * update_ptr() call because update_ptr is likely to
1403 * do a wake_up() which will unset this before we ever
1404 * try to sleep, resuling in a tight loop in this code
1405 * instead of actually sleeping and waiting for an
1406 * interrupt to wake us up!
1408 set_current_state(TASK_INTERRUPTIBLE);
1410 * set the timeout to significantly longer than it *should*
1411 * take for the DAC to drain the DMA buffer
1413 tmo = (count * HZ) / (dmabuf->rate);
1414 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1415 printk(KERN_ERR "ali_audio: drain_spdifout, dma timeout?\n");
1420 set_current_state(TASK_RUNNING);
1421 remove_wait_queue(&dmabuf->wait, &wait);
1422 if (count > 0 && signal_pending(current) && signals_allowed)
1423 return -ERESTARTSYS;
1424 stop_spdifout(state);
1428 static void ali_channel_interrupt(struct ali_card *card)
1432 for (i = 0; i < NR_HW_CH; i++) {
1433 struct ali_state *state = card->states[i];
1434 struct ali_channel *c = NULL;
1435 struct dmabuf *dmabuf;
1436 unsigned long port = card->iobase;
1440 if (!state->dmabuf.ready)
1442 dmabuf = &state->dmabuf;
1443 if (codec_independent_spdif_locked > 0) {
1444 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
1445 c = dmabuf->codec_spdifout_channel;
1448 if (controller_independent_spdif_locked > 0) {
1449 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1450 c = dmabuf->controller_spdifout_channel;
1452 if (dmabuf->enable & DAC_RUNNING) {
1453 c = dmabuf->write_channel;
1454 } else if (dmabuf->enable & ADC_RUNNING) {
1455 c = dmabuf->read_channel;
1462 status = inw(port + OFF_SR);
1464 if (status & DMA_INT_COMPLETE) {
1465 /* only wake_up() waiters if this interrupt signals
1466 * us being beyond a userfragsize of data open or
1467 * available, and ali_update_ptr() does that for
1470 ali_update_ptr(state);
1473 if (status & DMA_INT_LVI) {
1474 ali_update_ptr(state);
1475 wake_up(&dmabuf->wait);
1477 if (dmabuf->enable & DAC_RUNNING)
1478 count = dmabuf->count;
1479 else if (dmabuf->enable & ADC_RUNNING)
1480 count = dmabuf->dmasize - dmabuf->count;
1481 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1482 count = dmabuf->count;
1483 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1484 count = dmabuf->count;
1488 if (dmabuf->enable & DAC_RUNNING)
1489 outl((1 << 1), state->card->iobase + ALI_DMACR);
1490 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1491 outl((1 << 3), state->card->iobase + ALI_DMACR);
1492 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1493 outl((1 << 7), state->card->iobase + ALI_DMACR);
1495 if (dmabuf->enable & DAC_RUNNING)
1497 if (dmabuf->enable & ADC_RUNNING)
1499 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1500 __stop_spdifout(state);
1501 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1502 __stop_spdifout(state);
1504 wake_up(&dmabuf->wait);
1508 if (!(status & DMA_INT_DCH)) {
1509 ali_update_ptr(state);
1510 wake_up(&dmabuf->wait);
1511 if (dmabuf->enable & DAC_RUNNING)
1512 count = dmabuf->count;
1513 else if (dmabuf->enable & ADC_RUNNING)
1514 count = dmabuf->dmasize - dmabuf->count;
1515 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1516 count = dmabuf->count;
1517 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1518 count = dmabuf->count;
1523 if (dmabuf->enable & DAC_RUNNING)
1524 outl((1 << 1), state->card->iobase + ALI_DMACR);
1525 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1526 outl((1 << 3), state->card->iobase + ALI_DMACR);
1527 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1528 outl((1 << 7), state->card->iobase + ALI_DMACR);
1530 if (dmabuf->enable & DAC_RUNNING)
1532 if (dmabuf->enable & ADC_RUNNING)
1534 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1535 __stop_spdifout(state);
1536 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1537 __stop_spdifout(state);
1539 wake_up(&dmabuf->wait);
1542 outw(status & DMA_INT_MASK, port + OFF_SR);
1546 static void ali_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1548 struct ali_card *card = (struct ali_card *) dev_id;
1552 spin_lock(&card->lock);
1553 status = inl(card->iobase + ALI_INTERRUPTSR);
1554 if (!(status & INT_MASK)) {
1555 spin_unlock(&card->lock);
1556 return; /* not for us */
1559 if (codec_independent_spdif_locked > 0) {
1562 status2 = inw(card->iobase + 0x76);
1563 outw(status2 | 0x000c, card->iobase + 0x76);
1565 if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
1566 ali_channel_interrupt(card);
1569 if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
1570 ali_channel_interrupt(card);
1574 outl(status & INT_MASK, card->iobase + ALI_INTERRUPTSR);
1575 spin_unlock(&card->lock);
1578 /* in this loop, dmabuf.count signifies the amount of data that is
1579 waiting to be copied to the user's buffer. It is filled by the dma
1580 machine and drained by this loop. */
1582 static ssize_t ali_read(struct file *file, char *buffer,
1583 size_t count, loff_t * ppos)
1585 struct ali_state *state = (struct ali_state *) file->private_data;
1586 struct ali_card *card = state ? state->card : 0;
1587 struct dmabuf *dmabuf = &state->dmabuf;
1589 unsigned long flags;
1592 DECLARE_WAITQUEUE(waita, current);
1594 printk("ali_audio: ali_read called, count = %d\n", count);
1596 if (ppos != &file->f_pos)
1600 if (dmabuf->enable & DAC_RUNNING)
1602 if (!dmabuf->read_channel) {
1604 dmabuf->read_channel = card->alloc_rec_pcm_channel(card);
1605 if (!dmabuf->read_channel) {
1609 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
1611 if (!access_ok(VERIFY_WRITE, buffer, count))
1614 add_wait_queue(&dmabuf->wait, &waita);
1616 set_current_state(TASK_INTERRUPTIBLE);
1617 spin_lock_irqsave(&card->lock, flags);
1618 if (PM_SUSPENDED(card)) {
1619 spin_unlock_irqrestore(&card->lock, flags);
1621 if (signal_pending(current)) {
1628 swptr = dmabuf->swptr;
1629 cnt = ali_get_available_read_data(state);
1630 // this is to make the copy_to_user simpler below
1631 if (cnt > (dmabuf->dmasize - swptr))
1632 cnt = dmabuf->dmasize - swptr;
1633 spin_unlock_irqrestore(&card->lock, flags);
1636 /* Lop off the last two bits to force the code to always
1637 * write in full samples. This keeps software that sets
1638 * O_NONBLOCK but doesn't check the return value of the
1639 * write call from getting things out of state where they
1640 * think a full 4 byte sample was written when really only
1641 * a portion was, resulting in odd sound and stereo
1648 * Don't let us deadlock. The ADC won't start if
1649 * dmabuf->trigger isn't set. A call to SETTRIGGER
1650 * could have turned it off after we set it to on
1653 dmabuf->trigger = PCM_ENABLE_INPUT;
1655 * This does three things. Updates LVI to be correct,
1656 * makes sure the ADC is running, and updates the
1659 ali_update_lvi(state, 1);
1660 if (file->f_flags & O_NONBLOCK) {
1665 /* Set the timeout to how long it would take to fill
1666 * two of our buffers. If we haven't been woke up
1667 * by then, then we know something is wrong.
1669 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1671 /* There are two situations when sleep_on_timeout returns, one is when
1672 the interrupt is serviced correctly and the process is waked up by
1673 ISR ON TIME. Another is when timeout is expired, which means that
1674 either interrupt is NOT serviced correctly (pending interrupt) or it
1675 is TOO LATE for the process to be scheduled to run (scheduler latency)
1676 which results in a (potential) buffer overrun. And worse, there is
1677 NOTHING we can do to prevent it. */
1678 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1680 "ali_audio: recording schedule timeout, "
1681 "dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
1682 dmabuf->dmasize, dmabuf->fragsize,
1683 dmabuf->count, dmabuf->hwptr,
1685 /* a buffer overrun, we delay the recovery until next time the
1686 while loop begin and we REALLY have space to record */
1688 if (signal_pending(current)) {
1689 ret = ret ? ret : -ERESTARTSYS;
1695 if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
1701 swptr = (swptr + cnt) % dmabuf->dmasize;
1702 spin_lock_irqsave(&card->lock, flags);
1703 if (PM_SUSPENDED(card)) {
1704 spin_unlock_irqrestore(&card->lock, flags);
1707 dmabuf->swptr = swptr;
1708 dmabuf->count -= cnt;
1709 spin_unlock_irqrestore(&card->lock, flags);
1715 ali_update_lvi(state, 1);
1716 set_current_state(TASK_RUNNING);
1717 remove_wait_queue(&dmabuf->wait, &waita);
1721 /* in this loop, dmabuf.count signifies the amount of data that is waiting to be dma to
1722 the soundcard. it is drained by the dma machine and filled by this loop. */
1723 static ssize_t ali_write(struct file *file,
1724 const char *buffer, size_t count, loff_t * ppos)
1726 struct ali_state *state = (struct ali_state *) file->private_data;
1727 struct ali_card *card = state ? state->card : 0;
1728 struct dmabuf *dmabuf = &state->dmabuf;
1730 unsigned long flags;
1731 unsigned int swptr = 0;
1733 DECLARE_WAITQUEUE(waita, current);
1735 printk("ali_audio: ali_write called, count = %d\n", count);
1737 if (ppos != &file->f_pos)
1741 if (dmabuf->enable & ADC_RUNNING)
1743 if (codec_independent_spdif_locked > 0) {
1744 if (!dmabuf->codec_spdifout_channel) {
1746 dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card);
1747 if (!dmabuf->codec_spdifout_channel)
1751 if (controller_independent_spdif_locked > 0) {
1752 if (!dmabuf->controller_spdifout_channel) {
1754 dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card);
1755 if (!dmabuf->controller_spdifout_channel)
1759 if (!dmabuf->write_channel) {
1761 dmabuf->write_channel =
1762 card->alloc_pcm_channel(card);
1763 if (!dmabuf->write_channel)
1769 if (codec_independent_spdif_locked > 0) {
1770 if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
1773 if (controller_independent_spdif_locked > 0) {
1774 if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
1778 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
1782 if (!access_ok(VERIFY_READ, buffer, count))
1785 add_wait_queue(&dmabuf->wait, &waita);
1787 set_current_state(TASK_INTERRUPTIBLE);
1788 spin_lock_irqsave(&state->card->lock, flags);
1789 if (PM_SUSPENDED(card)) {
1790 spin_unlock_irqrestore(&card->lock, flags);
1792 if (signal_pending(current)) {
1800 swptr = dmabuf->swptr;
1801 cnt = ali_get_free_write_space(state);
1802 /* Bound the maximum size to how much we can copy to the
1803 * dma buffer before we hit the end. If we have more to
1804 * copy then it will get done in a second pass of this
1805 * loop starting from the beginning of the buffer.
1807 if (cnt > (dmabuf->dmasize - swptr))
1808 cnt = dmabuf->dmasize - swptr;
1809 spin_unlock_irqrestore(&state->card->lock, flags);
1812 "ali_audio: ali_write: %d bytes available space\n",
1817 /* Lop off the last two bits to force the code to always
1818 * write in full samples. This keeps software that sets
1819 * O_NONBLOCK but doesn't check the return value of the
1820 * write call from getting things out of state where they
1821 * think a full 4 byte sample was written when really only
1822 * a portion was, resulting in odd sound and stereo
1828 // There is data waiting to be played
1830 * Force the trigger setting since we would
1831 * deadlock with it set any other way
1833 if (codec_independent_spdif_locked > 0) {
1834 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1835 ali_update_lvi(state, 2);
1837 if (controller_independent_spdif_locked > 0) {
1838 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1839 ali_update_lvi(state, 3);
1842 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1843 ali_update_lvi(state, 0);
1846 if (file->f_flags & O_NONBLOCK) {
1851 /* Not strictly correct but works */
1852 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1853 /* There are two situations when sleep_on_timeout returns, one is when
1854 the interrupt is serviced correctly and the process is waked up by
1855 ISR ON TIME. Another is when timeout is expired, which means that
1856 either interrupt is NOT serviced correctly (pending interrupt) or it
1857 is TOO LATE for the process to be scheduled to run (scheduler latency)
1858 which results in a (potential) buffer underrun. And worse, there is
1859 NOTHING we can do to prevent it. */
1861 /* FIXME - do timeout handling here !! */
1863 if (signal_pending(current)) {
1870 if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {
1876 swptr = (swptr + cnt) % dmabuf->dmasize;
1877 spin_lock_irqsave(&state->card->lock, flags);
1878 if (PM_SUSPENDED(card)) {
1879 spin_unlock_irqrestore(&card->lock, flags);
1883 dmabuf->swptr = swptr;
1884 dmabuf->count += cnt;
1888 spin_unlock_irqrestore(&state->card->lock, flags);
1890 if (swptr % dmabuf->fragsize) {
1891 x = dmabuf->fragsize - (swptr % dmabuf->fragsize);
1892 memset(dmabuf->rawbuf + swptr, '\0', x);
1895 if (codec_independent_spdif_locked > 0) {
1896 ali_update_lvi(state, 2);
1898 if (controller_independent_spdif_locked > 0) {
1899 ali_update_lvi(state, 3);
1901 ali_update_lvi(state, 0);
1904 set_current_state(TASK_RUNNING);
1905 remove_wait_queue(&dmabuf->wait, &waita);
1909 /* No kernel lock - we have our own spinlock */
1910 static unsigned int ali_poll(struct file *file, struct poll_table_struct
1913 struct ali_state *state = (struct ali_state *) file->private_data;
1914 struct dmabuf *dmabuf = &state->dmabuf;
1915 unsigned long flags;
1916 unsigned int mask = 0;
1919 poll_wait(file, &dmabuf->wait, wait);
1920 spin_lock_irqsave(&state->card->lock, flags);
1921 ali_update_ptr(state);
1922 if (file->f_mode & FMODE_READ && dmabuf->enable & ADC_RUNNING) {
1923 if (dmabuf->count >= (signed) dmabuf->fragsize)
1924 mask |= POLLIN | POLLRDNORM;
1926 if (file->f_mode & FMODE_WRITE && (dmabuf->enable & (DAC_RUNNING|CODEC_SPDIFOUT_RUNNING|CONTROLLER_SPDIFOUT_RUNNING))) {
1927 if ((signed) dmabuf->dmasize >= dmabuf->count + (signed) dmabuf->fragsize)
1928 mask |= POLLOUT | POLLWRNORM;
1930 spin_unlock_irqrestore(&state->card->lock, flags);
1934 static int ali_mmap(struct file *file, struct vm_area_struct *vma)
1936 struct ali_state *state = (struct ali_state *) file->private_data;
1937 struct dmabuf *dmabuf = &state->dmabuf;
1941 if (vma->vm_flags & VM_WRITE) {
1942 if (!dmabuf->write_channel && (dmabuf->write_channel = state->card->alloc_pcm_channel(state->card)) == NULL) {
1947 if (vma->vm_flags & VM_READ) {
1948 if (!dmabuf->read_channel && (dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card)) == NULL) {
1953 if ((ret = prog_dmabuf(state, 0)) != 0)
1956 if (vma->vm_pgoff != 0)
1958 size = vma->vm_end - vma->vm_start;
1959 if (size > (PAGE_SIZE << dmabuf->buforder))
1962 if (remap_page_range(vma->vm_start, virt_to_phys(dmabuf->rawbuf), size, vma->vm_page_prot))
1965 dmabuf->trigger = 0;
1972 static int ali_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1974 struct ali_state *state = (struct ali_state *) file->private_data;
1975 struct ali_channel *c = NULL;
1976 struct dmabuf *dmabuf = &state->dmabuf;
1977 unsigned long flags;
1978 audio_buf_info abinfo;
1982 struct ac97_codec *codec = state->card->ac97_codec[0];
1984 printk("ali_audio: ali_ioctl, arg=0x%x, cmd=",
1985 arg ? *(int *) arg : 0);
1988 case OSS_GETVERSION:
1990 printk("OSS_GETVERSION\n");
1992 return put_user(SOUND_VERSION, (int *) arg);
1993 case SNDCTL_DSP_RESET:
1995 printk("SNDCTL_DSP_RESET\n");
1997 spin_lock_irqsave(&state->card->lock, flags);
1998 if (dmabuf->enable == DAC_RUNNING) {
1999 c = dmabuf->write_channel;
2002 if (dmabuf->enable == ADC_RUNNING) {
2003 c = dmabuf->read_channel;
2006 if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
2007 c = dmabuf->codec_spdifout_channel;
2008 __stop_spdifout(state);
2010 if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
2011 c = dmabuf->controller_spdifout_channel;
2012 __stop_spdifout(state);
2015 outb(2, state->card->iobase + c->port + OFF_CR); /* reset DMA machine */
2016 outl(virt_to_bus(&c->sg[0]),
2017 state->card->iobase + c->port + OFF_BDBAR);
2018 outb(0, state->card->iobase + c->port + OFF_CIV);
2019 outb(0, state->card->iobase + c->port + OFF_LVI);
2022 spin_unlock_irqrestore(&state->card->lock, flags);
2025 dmabuf->swptr = dmabuf->hwptr = 0;
2026 dmabuf->count = dmabuf->total_bytes = 0;
2028 case SNDCTL_DSP_SYNC:
2030 printk("SNDCTL_DSP_SYNC\n");
2032 if (codec_independent_spdif_locked > 0) {
2033 if (dmabuf->enable != CODEC_SPDIFOUT_RUNNING
2034 || file->f_flags & O_NONBLOCK)
2036 if ((val = drain_spdifout(state, 1)))
2039 if (controller_independent_spdif_locked > 0) {
2040 if (dmabuf->enable !=
2041 CONTROLLER_SPDIFOUT_RUNNING
2042 || file->f_flags & O_NONBLOCK)
2044 if ((val = drain_spdifout(state, 1)))
2047 if (dmabuf->enable != DAC_RUNNING
2048 || file->f_flags & O_NONBLOCK)
2050 if ((val = drain_dac(state, 1)))
2054 dmabuf->total_bytes = 0;
2056 case SNDCTL_DSP_SPEED: /* set smaple rate */
2058 printk("SNDCTL_DSP_SPEED\n");
2060 if (get_user(val, (int *) arg))
2063 if (file->f_mode & FMODE_WRITE) {
2064 if ((state->card->ac97_status & SPDIF_ON)) { /* S/PDIF Enabled */
2065 /* RELTEK ALC650 only support 48000, need to check that */
2066 if (ali_valid_spdif_rate(codec, val)) {
2067 if (codec_independent_spdif_locked > 0) {
2068 ali_set_spdif_output(state, -1, 0);
2069 stop_spdifout(state);
2071 /* I add test codec independent spdif out */
2072 spin_lock_irqsave(&state->card->lock, flags);
2073 ali_set_codecspdifout_rate(state, val); // I modified
2074 spin_unlock_irqrestore(&state->card->lock, flags);
2075 /* Set S/PDIF transmitter rate. */
2076 i_scr = inl(state->card->iobase + ALI_SCR);
2077 if ((i_scr & 0x00300000) == 0x00100000) {
2078 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2080 if ((i_scr&0x00300000) == 0x00200000)
2082 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2084 if ((i_scr & 0x00300000) == 0x00300000) {
2085 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2087 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2092 if (!(state->card->ac97_status & SPDIF_ON)) {
2096 if (controller_independent_spdif_locked > 0)
2098 stop_spdifout(state);
2100 spin_lock_irqsave(&state->card->lock, flags);
2101 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
2102 spin_unlock_irqrestore(&state->card->lock, flags);
2105 ali_set_spdif_output(state, -1, 0);
2108 spin_lock_irqsave(&state->card->lock, flags);
2109 ali_set_dac_rate(state, val);
2110 spin_unlock_irqrestore(&state->card->lock, flags);
2111 /* Set S/PDIF transmitter rate. */
2112 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, val);
2113 if (!(state->card->ac97_status & SPDIF_ON))
2119 } else { /* Not a valid rate for S/PDIF, ignore it */
2125 spin_lock_irqsave(&state->card->lock, flags);
2126 ali_set_dac_rate(state, val);
2127 spin_unlock_irqrestore(&state->card->lock, flags);
2130 if (file->f_mode & FMODE_READ) {
2133 spin_lock_irqsave(&state->card->lock, flags);
2134 ali_set_adc_rate(state, val);
2135 spin_unlock_irqrestore(&state->card->lock, flags);
2138 return put_user(dmabuf->rate, (int *) arg);
2139 case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
2141 printk("SNDCTL_DSP_STEREO\n");
2143 if (dmabuf->enable & DAC_RUNNING) {
2146 if (dmabuf->enable & ADC_RUNNING) {
2149 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
2150 stop_spdifout(state);
2152 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
2153 stop_spdifout(state);
2155 return put_user(1, (int *) arg);
2156 case SNDCTL_DSP_GETBLKSIZE:
2157 if (file->f_mode & FMODE_WRITE) {
2158 if (codec_independent_spdif_locked > 0) {
2159 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)))
2162 if (controller_independent_spdif_locked > 0) {
2163 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)))
2166 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)))
2172 if (file->f_mode & FMODE_READ) {
2173 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)))
2177 printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize);
2179 return put_user(dmabuf->userfragsize, (int *) arg);
2180 case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format */
2182 printk("SNDCTL_DSP_GETFMTS\n");
2184 return put_user(AFMT_S16_LE, (int *) arg);
2185 case SNDCTL_DSP_SETFMT: /* Select sample format */
2187 printk("SNDCTL_DSP_SETFMT\n");
2189 return put_user(AFMT_S16_LE, (int *) arg);
2190 case SNDCTL_DSP_CHANNELS: // add support 4,6 channel
2192 printk("SNDCTL_DSP_CHANNELS\n");
2194 if (get_user(val, (int *) arg))
2197 if (dmabuf->enable & DAC_RUNNING) {
2200 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
2201 stop_spdifout(state);
2203 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
2204 stop_spdifout(state);
2206 if (dmabuf->enable & ADC_RUNNING) {
2210 return put_user(state->card->channels, (int *) arg);
2213 i_scr = inl(state->card->iobase + ALI_SCR);
2214 /* Current # of channels enabled */
2215 if (i_scr & 0x00000100)
2217 else if (i_scr & 0x00000200)
2222 case 2: /* 2 channels is always supported */
2223 if (codec_independent_spdif_locked > 0) {
2224 outl(((i_scr & 0xfffffcff) | 0x00100000), (state->card->iobase + ALI_SCR));
2226 outl((i_scr & 0xfffffcff), (state->card->iobase + ALI_SCR));
2227 /* Do we need to change mixer settings???? */
2229 case 4: /* Supported on some chipsets, better check first */
2230 if (codec_independent_spdif_locked > 0) {
2231 outl(((i_scr & 0xfffffcff) | 0x00000100 | 0x00200000), (state->card->iobase + ALI_SCR));
2233 outl(((i_scr & 0xfffffcff) | 0x00000100), (state->card->iobase + ALI_SCR));
2235 case 6: /* Supported on some chipsets, better check first */
2236 if (codec_independent_spdif_locked > 0) {
2237 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000 | 0x00300000), (state->card->iobase + ALI_SCR));
2239 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000), (state->card->iobase + ALI_SCR));
2241 default: /* nothing else is ever supported by the chipset */
2245 return put_user(val, (int *) arg);
2246 case SNDCTL_DSP_POST: /* the user has sent all data and is notifying us */
2247 /* we update the swptr to the end of the last sg segment then return */
2249 printk("SNDCTL_DSP_POST\n");
2251 if (codec_independent_spdif_locked > 0) {
2252 if (!dmabuf->ready || (dmabuf->enable != CODEC_SPDIFOUT_RUNNING))
2255 if (controller_independent_spdif_locked > 0) {
2256 if (!dmabuf->ready || (dmabuf->enable != CONTROLLER_SPDIFOUT_RUNNING))
2259 if (!dmabuf->ready || (dmabuf->enable != DAC_RUNNING))
2263 if ((dmabuf->swptr % dmabuf->fragsize) != 0) {
2264 val = dmabuf->fragsize - (dmabuf->swptr % dmabuf->fragsize);
2265 dmabuf->swptr += val;
2266 dmabuf->count += val;
2269 case SNDCTL_DSP_SUBDIVIDE:
2270 if (dmabuf->subdivision)
2272 if (get_user(val, (int *) arg))
2274 if (val != 1 && val != 2 && val != 4)
2277 printk("SNDCTL_DSP_SUBDIVIDE %d\n", val);
2279 dmabuf->subdivision = val;
2282 case SNDCTL_DSP_SETFRAGMENT:
2283 if (get_user(val, (int *) arg))
2285 dmabuf->ossfragsize = 1 << (val & 0xffff);
2286 dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
2287 if (!dmabuf->ossfragsize || !dmabuf->ossmaxfrags)
2290 * Bound the frag size into our allowed range of 256 - 4096
2292 if (dmabuf->ossfragsize < 256)
2293 dmabuf->ossfragsize = 256;
2294 else if (dmabuf->ossfragsize > 4096)
2295 dmabuf->ossfragsize = 4096;
2297 * The numfrags could be something reasonable, or it could
2298 * be 0xffff meaning "Give me as much as possible". So,
2299 * we check the numfrags * fragsize doesn't exceed our
2300 * 64k buffer limit, nor is it less than our 8k minimum.
2301 * If it fails either one of these checks, then adjust the
2302 * number of fragments, not the size of them. It's OK if
2303 * our number of fragments doesn't equal 32 or anything
2304 * like our hardware based number now since we are using
2305 * a different frag count for the hardware. Before we get
2306 * into this though, bound the maxfrags to avoid overflow
2307 * issues. A reasonable bound would be 64k / 256 since our
2308 * maximum buffer size is 64k and our minimum frag size is
2309 * 256. On the other end, our minimum buffer size is 8k and
2310 * our maximum frag size is 4k, so the lower bound should
2313 if (dmabuf->ossmaxfrags > 256)
2314 dmabuf->ossmaxfrags = 256;
2315 else if (dmabuf->ossmaxfrags < 2)
2316 dmabuf->ossmaxfrags = 2;
2317 val = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
2318 while (val < 8192) {
2320 dmabuf->ossmaxfrags <<= 1;
2322 while (val > 65536) {
2324 dmabuf->ossmaxfrags >>= 1;
2328 printk("SNDCTL_DSP_SETFRAGMENT 0x%x, %d, %d\n", val,
2329 dmabuf->ossfragsize, dmabuf->ossmaxfrags);
2332 case SNDCTL_DSP_GETOSPACE:
2333 if (!(file->f_mode & FMODE_WRITE))
2335 if (codec_independent_spdif_locked > 0) {
2336 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
2339 if (controller_independent_spdif_locked > 0) {
2340 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
2343 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2347 spin_lock_irqsave(&state->card->lock, flags);
2348 ali_update_ptr(state);
2349 abinfo.fragsize = dmabuf->userfragsize;
2350 abinfo.fragstotal = dmabuf->userfrags;
2352 abinfo.bytes = dmabuf->dmasize;
2354 abinfo.bytes = ali_get_free_write_space(state);
2355 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2356 spin_unlock_irqrestore(&state->card->lock, flags);
2357 #if defined(DEBUG) || defined(DEBUG_MMAP)
2358 printk("SNDCTL_DSP_GETOSPACE %d, %d, %d, %d\n",
2359 abinfo.bytes, abinfo.fragsize, abinfo.fragments,
2362 return copy_to_user((void *) arg, &abinfo,
2363 sizeof(abinfo)) ? -EFAULT : 0;
2364 case SNDCTL_DSP_GETOPTR:
2365 if (!(file->f_mode & FMODE_WRITE))
2367 if (codec_independent_spdif_locked > 0) {
2368 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
2371 if (controller_independent_spdif_locked > 0) {
2372 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
2375 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2379 spin_lock_irqsave(&state->card->lock, flags);
2380 val = ali_get_free_write_space(state);
2381 cinfo.bytes = dmabuf->total_bytes;
2382 cinfo.ptr = dmabuf->hwptr;
2383 cinfo.blocks = val / dmabuf->userfragsize;
2384 if (codec_independent_spdif_locked > 0) {
2385 if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
2386 dmabuf->count += val;
2387 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2388 __ali_update_lvi(state, 2);
2391 if (controller_independent_spdif_locked > 0) {
2392 if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
2393 dmabuf->count += val;
2394 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2395 __ali_update_lvi(state, 3);
2398 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
2399 dmabuf->count += val;
2400 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2401 __ali_update_lvi(state, 0);
2405 spin_unlock_irqrestore(&state->card->lock, flags);
2406 #if defined(DEBUG) || defined(DEBUG_MMAP)
2407 printk("SNDCTL_DSP_GETOPTR %d, %d, %d, %d\n", cinfo.bytes,
2408 cinfo.blocks, cinfo.ptr, dmabuf->count);
2410 return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
2411 case SNDCTL_DSP_GETISPACE:
2412 if (!(file->f_mode & FMODE_READ))
2414 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
2416 spin_lock_irqsave(&state->card->lock, flags);
2417 abinfo.bytes = ali_get_available_read_data(state);
2418 abinfo.fragsize = dmabuf->userfragsize;
2419 abinfo.fragstotal = dmabuf->userfrags;
2420 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2421 spin_unlock_irqrestore(&state->card->lock, flags);
2422 #if defined(DEBUG) || defined(DEBUG_MMAP)
2423 printk("SNDCTL_DSP_GETISPACE %d, %d, %d, %d\n",
2424 abinfo.bytes, abinfo.fragsize, abinfo.fragments,
2427 return copy_to_user((void *) arg, &abinfo,
2428 sizeof(abinfo)) ? -EFAULT : 0;
2429 case SNDCTL_DSP_GETIPTR:
2430 if (!(file->f_mode & FMODE_READ))
2432 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2434 spin_lock_irqsave(&state->card->lock, flags);
2435 val = ali_get_available_read_data(state);
2436 cinfo.bytes = dmabuf->total_bytes;
2437 cinfo.blocks = val / dmabuf->userfragsize;
2438 cinfo.ptr = dmabuf->hwptr;
2439 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
2440 dmabuf->count -= val;
2441 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2442 __ali_update_lvi(state, 1);
2444 spin_unlock_irqrestore(&state->card->lock, flags);
2445 #if defined(DEBUG) || defined(DEBUG_MMAP)
2446 printk("SNDCTL_DSP_GETIPTR %d, %d, %d, %d\n", cinfo.bytes,
2447 cinfo.blocks, cinfo.ptr, dmabuf->count);
2449 return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
2450 case SNDCTL_DSP_NONBLOCK:
2452 printk("SNDCTL_DSP_NONBLOCK\n");
2454 file->f_flags |= O_NONBLOCK;
2456 case SNDCTL_DSP_GETCAPS:
2458 printk("SNDCTL_DSP_GETCAPS\n");
2460 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER |
2461 DSP_CAP_MMAP | DSP_CAP_BIND, (int *) arg);
2462 case SNDCTL_DSP_GETTRIGGER:
2465 printk("SNDCTL_DSP_GETTRIGGER 0x%x\n", dmabuf->trigger);
2467 return put_user(dmabuf->trigger, (int *) arg);
2468 case SNDCTL_DSP_SETTRIGGER:
2469 if (get_user(val, (int *) arg))
2471 #if defined(DEBUG) || defined(DEBUG_MMAP)
2472 printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
2474 if (!(val & PCM_ENABLE_INPUT) && dmabuf->enable == ADC_RUNNING) {
2477 if (!(val & PCM_ENABLE_OUTPUT) && dmabuf->enable == DAC_RUNNING) {
2480 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
2481 stop_spdifout(state);
2483 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
2484 stop_spdifout(state);
2486 dmabuf->trigger = val;
2487 if (val & PCM_ENABLE_OUTPUT && !(dmabuf->enable & DAC_RUNNING)) {
2488 if (!dmabuf->write_channel) {
2490 dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
2491 if (!dmabuf->write_channel)
2494 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
2496 if (dmabuf->mapped) {
2497 spin_lock_irqsave(&state->card->lock, flags);
2498 ali_update_ptr(state);
2500 dmabuf->swptr = dmabuf->hwptr;
2501 dmabuf->count = ali_get_free_write_space(state);
2502 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2503 __ali_update_lvi(state, 0);
2504 spin_unlock_irqrestore(&state->card->lock,
2509 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CODEC_SPDIFOUT_RUNNING)) {
2510 if (!dmabuf->codec_spdifout_channel) {
2512 dmabuf->codec_spdifout_channel = state->card->alloc_codec_spdifout_channel(state->card);
2513 if (!dmabuf->codec_spdifout_channel)
2516 if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
2518 if (dmabuf->mapped) {
2519 spin_lock_irqsave(&state->card->lock, flags);
2520 ali_update_ptr(state);
2522 dmabuf->swptr = dmabuf->hwptr;
2523 dmabuf->count = ali_get_free_write_space(state);
2524 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2525 __ali_update_lvi(state, 2);
2526 spin_unlock_irqrestore(&state->card->lock,
2529 start_spdifout(state);
2531 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)) {
2532 if (!dmabuf->controller_spdifout_channel) {
2534 dmabuf->controller_spdifout_channel = state->card->alloc_controller_spdifout_channel(state->card);
2535 if (!dmabuf->controller_spdifout_channel)
2538 if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
2540 if (dmabuf->mapped) {
2541 spin_lock_irqsave(&state->card->lock, flags);
2542 ali_update_ptr(state);
2544 dmabuf->swptr = dmabuf->hwptr;
2545 dmabuf->count = ali_get_free_write_space(state);
2546 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2547 __ali_update_lvi(state, 3);
2548 spin_unlock_irqrestore(&state->card->lock, flags);
2550 start_spdifout(state);
2552 if (val & PCM_ENABLE_INPUT && !(dmabuf->enable & ADC_RUNNING)) {
2553 if (!dmabuf->read_channel) {
2555 dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
2556 if (!dmabuf->read_channel)
2559 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
2561 if (dmabuf->mapped) {
2562 spin_lock_irqsave(&state->card->lock,
2564 ali_update_ptr(state);
2565 dmabuf->swptr = dmabuf->hwptr;
2567 spin_unlock_irqrestore(&state->card->lock, flags);
2569 ali_update_lvi(state, 1);
2573 case SNDCTL_DSP_SETDUPLEX:
2575 printk("SNDCTL_DSP_SETDUPLEX\n");
2578 case SNDCTL_DSP_GETODELAY:
2579 if (!(file->f_mode & FMODE_WRITE))
2581 spin_lock_irqsave(&state->card->lock, flags);
2582 ali_update_ptr(state);
2583 val = dmabuf->count;
2584 spin_unlock_irqrestore(&state->card->lock, flags);
2586 printk("SNDCTL_DSP_GETODELAY %d\n", dmabuf->count);
2588 return put_user(val, (int *) arg);
2589 case SOUND_PCM_READ_RATE:
2591 printk("SOUND_PCM_READ_RATE %d\n", dmabuf->rate);
2593 return put_user(dmabuf->rate, (int *) arg);
2594 case SOUND_PCM_READ_CHANNELS:
2596 printk("SOUND_PCM_READ_CHANNELS\n");
2598 return put_user(2, (int *) arg);
2599 case SOUND_PCM_READ_BITS:
2601 printk("SOUND_PCM_READ_BITS\n");
2603 return put_user(AFMT_S16_LE, (int *) arg);
2604 case SNDCTL_DSP_SETSPDIF: /* Set S/PDIF Control register */
2606 printk("SNDCTL_DSP_SETSPDIF\n");
2608 if (get_user(val, (int *) arg))
2610 /* Check to make sure the codec supports S/PDIF transmitter */
2611 if ((state->card->ac97_features & 4)) {
2612 /* mask out the transmitter speed bits so the user can't set them */
2614 /* Add the current transmitter speed bits to the passed value */
2615 ret = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
2616 val |= (ret & 0x3000);
2617 ali_ac97_set(codec, AC97_SPDIF_CONTROL, val);
2618 if (ali_ac97_get(codec, AC97_SPDIF_CONTROL) != val) {
2619 printk(KERN_ERR "ali_audio: Unable to set S/PDIF configuration to 0x%04x.\n", val);
2625 printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
2627 return put_user(val, (int *) arg);
2628 case SNDCTL_DSP_GETSPDIF: /* Get S/PDIF Control register */
2630 printk("SNDCTL_DSP_GETSPDIF\n");
2632 if (get_user(val, (int *) arg))
2634 /* Check to make sure the codec supports S/PDIF transmitter */
2635 if (!(state->card->ac97_features & 4)) {
2637 printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
2641 val = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
2644 return put_user(val, (int *) arg);
2645 //end add support spdif out
2646 //add support 4,6 channel
2647 case SNDCTL_DSP_GETCHANNELMASK:
2649 printk("SNDCTL_DSP_GETCHANNELMASK\n");
2651 if (get_user(val, (int *) arg))
2653 /* Based on AC'97 DAC support, not ICH hardware */
2654 val = DSP_BIND_FRONT;
2655 if (state->card->ac97_features & 0x0004)
2656 val |= DSP_BIND_SPDIF;
2657 if (state->card->ac97_features & 0x0080)
2658 val |= DSP_BIND_SURR;
2659 if (state->card->ac97_features & 0x0140)
2660 val |= DSP_BIND_CENTER_LFE;
2661 return put_user(val, (int *) arg);
2662 case SNDCTL_DSP_BIND_CHANNEL:
2664 printk("SNDCTL_DSP_BIND_CHANNEL\n");
2666 if (get_user(val, (int *) arg))
2668 if (val == DSP_BIND_QUERY) {
2669 val = DSP_BIND_FRONT; /* Always report this as being enabled */
2670 if (state->card->ac97_status & SPDIF_ON)
2671 val |= DSP_BIND_SPDIF;
2673 if (state->card->ac97_status & SURR_ON)
2674 val |= DSP_BIND_SURR;
2676 ac97_status & CENTER_LFE_ON)
2677 val |= DSP_BIND_CENTER_LFE;
2679 } else { /* Not a query, set it */
2680 if (!(file->f_mode & FMODE_WRITE))
2682 if (dmabuf->enable == DAC_RUNNING) {
2685 if (val & DSP_BIND_SPDIF) { /* Turn on SPDIF */
2686 /* Ok, this should probably define what slots
2687 * to use. For now, we'll only set it to the
2690 * non multichannel codec maps to slots 3&4
2691 * 2 channel codec maps to slots 7&8
2692 * 4 channel codec maps to slots 6&9
2693 * 6 channel codec maps to slots 10&11
2695 * there should be some way for the app to
2696 * select the slot assignment.
2698 i_scr = inl(state->card->iobase + ALI_SCR);
2699 if (codec_independent_spdif_locked > 0) {
2701 if ((i_scr & 0x00300000) == 0x00100000) {
2702 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2704 if ((i_scr & 0x00300000) == 0x00200000) {
2705 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2707 if ((i_scr & 0x00300000) == 0x00300000) {
2708 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2712 } else { /* codec spdif out (pcm out share ) */
2713 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, dmabuf->rate); //I do not modify
2716 if (!(state->card->ac97_status & SPDIF_ON))
2717 val &= ~DSP_BIND_SPDIF;
2721 /* Turn off S/PDIF if it was on */
2722 if (state->card->ac97_status & SPDIF_ON)
2723 ali_set_spdif_output(state, -1, 0);
2725 val & (DSP_BIND_FRONT | DSP_BIND_SURR |
2726 DSP_BIND_CENTER_LFE);
2728 case DSP_BIND_FRONT:
2731 case DSP_BIND_FRONT | DSP_BIND_SURR:
2734 case DSP_BIND_FRONT | DSP_BIND_SURR | DSP_BIND_CENTER_LFE:
2738 val = DSP_BIND_FRONT;
2742 ali_set_dac_channels(state, channels);
2743 /* check that they really got turned on */
2744 if (!state->card->ac97_status & SURR_ON)
2745 val &= ~DSP_BIND_SURR;
2747 ac97_status & CENTER_LFE_ON)
2748 val &= ~DSP_BIND_CENTER_LFE;
2751 return put_user(val, (int *) arg);
2752 case SNDCTL_DSP_MAPINBUF:
2753 case SNDCTL_DSP_MAPOUTBUF:
2754 case SNDCTL_DSP_SETSYNCRO:
2755 case SOUND_PCM_WRITE_FILTER:
2756 case SOUND_PCM_READ_FILTER:
2762 static int ali_open(struct inode *inode, struct file *file)
2765 struct ali_card *card = devs;
2766 struct ali_state *state = NULL;
2767 struct dmabuf *dmabuf = NULL;
2770 /* find an available virtual channel (instance of /dev/dsp) */
2772 while (card != NULL) {
2775 * If we are initializing and then fail, card could go
2776 * away unuexpectedly while we are in the for() loop.
2777 * So, check for card on each iteration before we check
2778 * for card->initializing to avoid a possible oops.
2779 * This usually only matters for times when the driver is
2780 * autoloaded by kmod.
2782 for (i = 0; i < 50 && card && card->initializing; i++) {
2783 set_current_state(TASK_UNINTERRUPTIBLE);
2784 schedule_timeout(HZ / 20);
2787 for (i = 0; i < NR_HW_CH && card && !card->initializing; i++) {
2788 if (card->states[i] == NULL) {
2789 state = card->states[i] = (struct ali_state *) kmalloc(sizeof(struct ali_state), GFP_KERNEL);
2792 memset(state, 0, sizeof(struct ali_state));
2793 dmabuf = &state->dmabuf;
2800 /* no more virtual channel avaiable */
2804 /* initialize the virtual channel */
2808 state->magic = ALI5455_STATE_MAGIC;
2809 init_waitqueue_head(&dmabuf->wait);
2810 init_MUTEX(&state->open_sem);
2811 file->private_data = state;
2812 dmabuf->trigger = 0;
2813 /* allocate hardware channels */
2814 if (file->f_mode & FMODE_READ) {
2815 if ((dmabuf->read_channel =
2816 card->alloc_rec_pcm_channel(card)) == NULL) {
2817 kfree(card->states[i]);
2818 card->states[i] = NULL;
2821 dmabuf->trigger |= PCM_ENABLE_INPUT;
2822 ali_set_adc_rate(state, 8000);
2824 if (file->f_mode & FMODE_WRITE) {
2825 if (codec_independent_spdif_locked > 0) {
2826 if ((dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card)) == NULL) {
2827 kfree(card->states[i]);
2828 card->states[i] = NULL;
2831 dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
2832 ali_set_codecspdifout_rate(state, codec_independent_spdif_locked); //It must add
2833 i_scr = inl(state->card->iobase + ALI_SCR);
2834 if ((i_scr & 0x00300000) == 0x00100000) {
2835 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2837 if ((i_scr & 0x00300000) == 0x00200000) {
2838 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2840 if ((i_scr & 0x00300000) == 0x00300000) {
2841 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2843 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2849 if (controller_independent_spdif_locked > 0) {
2850 if ((dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card)) == NULL) {
2851 kfree(card->states[i]);
2852 card->states[i] = NULL;
2855 dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
2856 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
2858 if ((dmabuf->write_channel = card->alloc_pcm_channel(card)) == NULL) {
2859 kfree(card->states[i]);
2860 card->states[i] = NULL;
2863 /* Initialize to 8kHz? What if we don't support 8kHz? */
2864 /* Let's change this to check for S/PDIF stuff */
2866 dmabuf->trigger |= PCM_ENABLE_OUTPUT;
2867 if (codec_pcmout_share_spdif_locked) {
2868 ali_set_dac_rate(state, codec_pcmout_share_spdif_locked);
2869 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, codec_pcmout_share_spdif_locked);
2871 ali_set_dac_rate(state, 8000);
2878 /* set default sample format. According to OSS Programmer's Guide /dev/dsp
2879 should be default to unsigned 8-bits, mono, with sample rate 8kHz and
2880 /dev/dspW will accept 16-bits sample, but we don't support those so we
2881 set it immediately to stereo and 16bit, which is all we do support */
2882 dmabuf->fmt |= ALI5455_FMT_16BIT | ALI5455_FMT_STEREO;
2883 dmabuf->ossfragsize = 0;
2884 dmabuf->ossmaxfrags = 0;
2885 dmabuf->subdivision = 0;
2886 state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
2887 outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
2888 outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
2892 static int ali_release(struct inode *inode, struct file *file)
2894 struct ali_state *state = (struct ali_state *) file->private_data;
2895 struct ali_card *card = state->card;
2896 struct dmabuf *dmabuf = &state->dmabuf;
2897 unsigned long flags;
2900 /* stop DMA state machine and free DMA buffers/channels */
2901 if (dmabuf->trigger & PCM_ENABLE_OUTPUT)
2902 drain_dac(state, 0);
2904 if (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)
2905 drain_spdifout(state, 0);
2907 if (dmabuf->trigger & PCM_ENABLE_INPUT)
2910 spin_lock_irqsave(&card->lock, flags);
2911 dealloc_dmabuf(state);
2912 if (file->f_mode & FMODE_WRITE) {
2913 if (codec_independent_spdif_locked > 0) {
2914 state->card->free_pcm_channel(state->card, dmabuf->codec_spdifout_channel->num);
2916 if (controller_independent_spdif_locked > 0)
2917 state->card->free_pcm_channel(state->card,
2918 dmabuf->controller_spdifout_channel->num);
2919 else state->card->free_pcm_channel(state->card,
2920 dmabuf->write_channel->num);
2923 if (file->f_mode & FMODE_READ)
2924 state->card->free_pcm_channel(state->card, dmabuf->read_channel->num);
2926 state->card->states[state->virt] = NULL;
2928 spin_unlock_irqrestore(&card->lock, flags);
2933 static /*const */ struct file_operations ali_audio_fops = {
2942 release:ali_release,
2945 /* Read AC97 codec registers */
2946 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg)
2948 struct ali_card *card = dev->private_data;
2951 unsigned short int data, count, addr1, addr2;
2953 while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
2958 for (count = 0; count < 0x7f; count++) {
2959 val = inb(card->iobase + ALI_CSPSR);
2965 outw(reg, (card->iobase + ALI_CPR) + 2);
2966 for (count = 0; count < 0x7f; count++) {
2967 val = inb(card->iobase + ALI_CSPSR);
2969 data = inw(card->iobase + ALI_SPR);
2970 addr2 = inw((card->iobase + ALI_SPR) + 2);
2978 return ((u16) data);
2981 /* write ac97 codec register */
2983 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
2985 struct ali_card *card = dev->private_data;
2987 unsigned long flags;
2989 unsigned short int count;
2991 while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
2994 for (count = 0; count < 0x7f; count++) {
2995 val = inb(card->iobase + ALI_CSPSR);
2999 if (count == 0x7f) {
3000 printk(KERN_WARNING "ali_ac96_set: AC97 codec register access timed out. \n");
3003 outw(data, (card->iobase + ALI_CPR));
3004 outb(reg, (card->iobase + ALI_CPR) + 2);
3005 for (count = 0; count < 0x7f; count++) {
3006 val = inb(card->iobase + ALI_CSPSR);
3010 if (count == 0x7f) {
3011 printk(KERN_WARNING "ali_ac96_set: AC97 codec register access timed out. \n");
3017 /* OSS /dev/mixer file operation methods */
3019 static int ali_open_mixdev(struct inode *inode, struct file *file)
3022 int minor = MINOR(inode->i_rdev);
3023 struct ali_card *card = devs;
3024 for (card = devs; card != NULL; card = card->next) {
3026 * If we are initializing and then fail, card could go
3027 * away unuexpectedly while we are in the for() loop.
3028 * So, check for card on each iteration before we check
3029 * for card->initializing to avoid a possible oops.
3030 * This usually only matters for times when the driver is
3031 * autoloaded by kmod.
3033 for (i = 0; i < 50 && card && card->initializing; i++) {
3034 set_current_state(TASK_UNINTERRUPTIBLE);
3035 schedule_timeout(HZ / 20);
3037 for (i = 0; i < NR_AC97 && card && !card->initializing; i++)
3038 if (card->ac97_codec[i] != NULL
3039 && card->ac97_codec[i]->dev_mixer == minor) {
3040 file->private_data = card->ac97_codec[i];
3047 static int ali_ioctl_mixdev(struct inode *inode,
3049 unsigned int cmd, unsigned long arg)
3051 struct ac97_codec *codec = (struct ac97_codec *) file->private_data;
3052 return codec->mixer_ioctl(codec, cmd, arg);
3055 static /*const */ struct file_operations ali_mixer_fops = {
3058 ioctl:ali_ioctl_mixdev,
3059 open:ali_open_mixdev,
3062 /* AC97 codec initialisation. These small functions exist so we don't
3063 duplicate code between module init and apm resume */
3065 static inline int ali_ac97_exists(struct ali_card *card, int ac97_number)
3068 u32 reg = inl(card->iobase + ALI_RTSR);
3072 reg = inl(card->iobase + ALI_RTSR);
3076 outl(reg | 0x00000040,
3077 card->iobase + 0x34);
3085 reg = inl(card->iobase + ALI_RTSR);
3089 outl(reg | 0x00000080,
3090 card->iobase + 0x34);
3103 static inline int ali_ac97_enable_variable_rate(struct ac97_codec *codec)
3105 ali_ac97_set(codec, AC97_EXTENDED_STATUS, 9);
3106 ali_ac97_set(codec, AC97_EXTENDED_STATUS, ali_ac97_get(codec, AC97_EXTENDED_STATUS) | 0xE800);
3107 return (ali_ac97_get(codec, AC97_EXTENDED_STATUS) & 1);
3111 static int ali_ac97_probe_and_powerup(struct ali_card *card, struct ac97_codec *codec)
3113 /* Returns 0 on failure */
3116 if (ac97_probe_codec(codec) == 0)
3118 /* ac97_probe_codec is success ,then begin to init codec */
3119 ali_ac97_set(codec, AC97_RESET, 0xffff);
3120 if (card->channel[0].used == 1) {
3121 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
3122 ali_ac97_set(codec, AC97_LINEIN_VOL, 0x0808);
3123 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
3126 if (card->channel[2].used == 1) //if MICin then init codec
3128 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
3129 ali_ac97_set(codec, AC97_MIC_VOL, 0x8808);
3130 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
3131 ali_ac97_set(codec, AC97_RECORD_GAIN_MIC, 0x0000);
3134 ali_ac97_set(codec, AC97_MASTER_VOL_STEREO, 0x0000);
3135 ali_ac97_set(codec, AC97_HEADPHONE_VOL, 0x0000);
3136 ali_ac97_set(codec, AC97_PCMOUT_VOL, 0x0000);
3137 ali_ac97_set(codec, AC97_CD_VOL, 0x0808);
3138 ali_ac97_set(codec, AC97_VIDEO_VOL, 0x0808);
3139 ali_ac97_set(codec, AC97_AUX_VOL, 0x0808);
3140 ali_ac97_set(codec, AC97_PHONE_VOL, 0x8048);
3141 ali_ac97_set(codec, AC97_PCBEEP_VOL, 0x0000);
3142 ali_ac97_set(codec, AC97_GENERAL_PURPOSE, AC97_GP_MIX);
3143 ali_ac97_set(codec, AC97_MASTER_VOL_MONO, 0x0000);
3144 ali_ac97_set(codec, 0x38, 0x0000);
3145 addr = ali_ac97_get(codec, 0x2a);
3146 ali_ac97_set(codec, 0x2a, addr | 0x0001);
3147 addr = ali_ac97_get(codec, 0x2a);
3148 addr = ali_ac97_get(codec, 0x28);
3149 ali_ac97_set(codec, 0x2c, 0xbb80);
3150 addr = ali_ac97_get(codec, 0x2c);
3151 /* power it all up */
3152 ali_ac97_set(codec, AC97_POWER_CONTROL,
3153 ali_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00);
3154 /* wait for analog ready */
3155 for (i = 10; i && ((ali_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--) {
3156 set_current_state(TASK_UNINTERRUPTIBLE);
3157 schedule_timeout(HZ / 20);
3165 /* I clone ali5455(2.4.7 ) not clone i810_audio(2.4.18) */
3167 static int ali_reset_5455(struct ali_card *card)
3169 outl(0x80000003, card->iobase + ALI_SCR);
3170 outl(0x83838383, card->iobase + ALI_FIFOCR1);
3171 outl(0x83838383, card->iobase + ALI_FIFOCR2);
3172 if (controller_pcmout_share_spdif_locked > 0) {
3173 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
3174 card->iobase + ALI_SPDIFICS);
3175 outl(0x0408000a, card->iobase + ALI_INTERFACECR);
3177 if (codec_independent_spdif_locked > 0) {
3178 outl((inl(card->iobase + ALI_SCR) | 0x00100000), card->iobase + ALI_SCR); // now I select slot 7 & 8
3179 outl(0x00200000, card->iobase + ALI_INTERFACECR); //enable codec independent spdifout
3181 outl(0x04080002, card->iobase + ALI_INTERFACECR);
3184 outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
3185 outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
3186 if (controller_independent_spdif_locked > 0)
3187 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
3188 card->iobase + ALI_SPDIFICS);
3193 static int ali_ac97_random_init_stuff(struct ali_card
3196 u32 reg = inl(card->iobase + ALI_SCR);
3198 reg = inl(card->iobase + ALI_SCR);
3199 if ((reg & 2) == 0) /* Cold required */
3202 reg |= 1; /* Warm */
3203 reg &= ~0x80000000; /* ACLink on */
3204 outl(reg, card->iobase + ALI_SCR);
3207 if ((inl(card->iobase + 0x18) & (1 << 1)) == 0)
3209 current->state = TASK_UNINTERRUPTIBLE;
3210 schedule_timeout(HZ / 20);
3214 printk(KERN_ERR "ali_audio: AC'97 reset failed.\n");
3218 set_current_state(TASK_UNINTERRUPTIBLE);
3219 schedule_timeout(HZ / 2);
3223 /* AC97 codec initialisation. */
3225 static int __init ali_ac97_init(struct ali_card *card)
3228 int total_channels = 0;
3229 struct ac97_codec *codec;
3232 if (!ali_ac97_random_init_stuff(card))
3235 /* Number of channels supported */
3236 /* What about the codec? Just because the ICH supports */
3237 /* multiple channels doesn't mean the codec does. */
3238 /* we'll have to modify this in the codec section below */
3239 /* to reflect what the codec has. */
3240 /* ICH and ICH0 only support 2 channels so don't bother */
3242 inl(card->iobase + ALI_CPR);
3245 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3247 /* Assume codec isn't available until we go through the
3249 card->ac97_codec[num_ac97] = NULL;
3250 /* The ICH programmer's reference says you should */
3251 /* check the ready status before probing. So we chk */
3252 /* What do we do if it's not ready? Wait and try */
3253 /* again, or abort? */
3254 if (!ali_ac97_exists(card, num_ac97)) {
3256 printk(KERN_ERR "ali_audio: Primary codec not ready.\n");
3260 if ((codec = kmalloc(sizeof(struct ac97_codec), GFP_KERNEL)) == NULL)
3262 memset(codec, 0, sizeof(struct ac97_codec));
3263 /* initialize some basic codec information, other fields will be filled
3264 in ac97_probe_codec */
3265 codec->private_data = card;
3266 codec->id = num_ac97;
3267 codec->codec_read = ali_ac97_get;
3268 codec->codec_write = ali_ac97_set;
3269 if (!ali_ac97_probe_and_powerup(card, codec)) {
3270 printk(KERN_ERR "ali_audio: timed out waiting for codec %d analog ready",
3273 break; /* it didn't work */
3276 /* Store state information about S/PDIF transmitter */
3277 card->ac97_status = 0;
3278 /* Don't attempt to get eid until powerup is complete */
3279 eid = ali_ac97_get(codec, AC97_EXTENDED_ID);
3280 if (eid == 0xFFFFFF) {
3281 printk(KERN_ERR "ali_audio: no codec attached ?\n");
3286 card->ac97_features = eid;
3287 /* Now check the codec for useful features to make up for
3288 the dumbness of the ali5455 hardware engine */
3289 if (!(eid & 0x0001))
3291 "ali_audio: only 48Khz playback available.\n");
3293 if (!ali_ac97_enable_variable_rate(codec)) {
3295 "ali_audio: Codec refused to allow VRA, using 48Khz only.\n");
3296 card->ac97_features &= ~1;
3300 /* Determine how many channels the codec(s) support */
3301 /* - The primary codec always supports 2 */
3302 /* - If the codec supports AMAP, surround DACs will */
3303 /* automaticlly get assigned to slots. */
3304 /* * Check for surround DACs and increment if */
3306 /* - Else check if the codec is revision 2.2 */
3307 /* * If surround DACs exist, assign them to slots */
3308 /* and increment channel count. */
3310 /* All of this only applies to ICH2 and above. ICH */
3311 /* and ICH0 only support 2 channels. ICH2 will only */
3312 /* support multiple codecs in a "split audio" config. */
3313 /* as described above. */
3315 /* TODO: Remove all the debugging messages! */
3317 if ((eid & 0xc000) == 0) /* primary codec */
3318 total_channels += 2;
3319 if ((codec->dev_mixer = register_sound_mixer(&ali_mixer_fops, -1)) < 0) {
3320 printk(KERN_ERR "ali_audio: couldn't register mixer!\n");
3324 card->ac97_codec[num_ac97] = codec;
3326 /* pick the minimum of channels supported by ICHx or codec(s) */
3327 card->channels = (card->channels > total_channels) ? total_channels : card->channels;
3331 static void __init ali_configure_clocking(void)
3333 struct ali_card *card;
3334 struct ali_state *state;
3335 struct dmabuf *dmabuf;
3336 unsigned int i, offset, new_offset;
3337 unsigned long flags;
3340 /* We could try to set the clocking for multiple cards, but can you even have
3341 * more than one ali in a machine? Besides, clocking is global, so unless
3342 * someone actually thinks more than one ali in a machine is possible and
3343 * decides to rewrite that little bit, setting the rate for more than one card
3344 * is a waste of time.
3347 state = card->states[0] = (struct ali_state *)
3348 kmalloc(sizeof(struct ali_state), GFP_KERNEL);
3351 memset(state, 0, sizeof(struct ali_state));
3352 dmabuf = &state->dmabuf;
3353 dmabuf->write_channel = card->alloc_pcm_channel(card);
3356 state->magic = ALI5455_STATE_MAGIC;
3357 init_waitqueue_head(&dmabuf->wait);
3358 init_MUTEX(&state->open_sem);
3359 dmabuf->fmt = ALI5455_FMT_STEREO | ALI5455_FMT_16BIT;
3360 dmabuf->trigger = PCM_ENABLE_OUTPUT;
3361 ali_set_dac_rate(state, 48000);
3362 if (prog_dmabuf(state, 0) != 0)
3363 goto config_out_nodmabuf;
3365 if (dmabuf->dmasize < 16384)
3368 dmabuf->count = dmabuf->dmasize;
3369 outb(31, card->iobase + dmabuf->write_channel->port + OFF_LVI);
3374 offset = ali_get_dma_addr(state, 0);
3376 new_offset = ali_get_dma_addr(state, 0);
3379 outb(2, card->iobase + dmabuf->write_channel->port + OFF_CR);
3380 restore_flags(flags);
3382 i = new_offset - offset;
3387 if (i > 48500 || i < 47500) {
3388 clocking = clocking * clocking / i;
3391 dealloc_dmabuf(state);
3392 config_out_nodmabuf:
3393 state->card->free_pcm_channel(state->card, state->dmabuf. write_channel->num);
3395 card->states[0] = NULL;
3399 /* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered
3400 until "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
3402 static int __init ali_probe(struct pci_dev *pci_dev, const struct pci_device_id
3405 struct ali_card *card;
3406 if (pci_enable_device(pci_dev))
3408 if (pci_set_dma_mask(pci_dev, ALI5455_DMA_MASK)) {
3409 printk(KERN_ERR "ali5455: architecture does not support"
3410 " 32bit PCI busmaster DMA\n");
3414 if ((card = kmalloc(sizeof(struct ali_card), GFP_KERNEL)) == NULL) {
3415 printk(KERN_ERR "ali_audio: out of memory\n");
3418 memset(card, 0, sizeof(*card));
3419 card->initializing = 1;
3420 card->iobase = pci_resource_start(pci_dev, 0);
3421 card->pci_dev = pci_dev;
3422 card->pci_id = pci_id->device;
3423 card->irq = pci_dev->irq;
3425 card->magic = ALI5455_CARD_MAGIC;
3427 card->pm_suspended = 0;
3429 spin_lock_init(&card->lock);
3431 pci_set_master(pci_dev);
3432 printk(KERN_INFO "ali: %s found at IO 0x%04lx, IRQ %d\n",
3433 card_names[pci_id->driver_data], card->iobase, card->irq);
3434 card->alloc_pcm_channel = ali_alloc_pcm_channel;
3435 card->alloc_rec_pcm_channel = ali_alloc_rec_pcm_channel;
3436 card->alloc_rec_mic_channel = ali_alloc_rec_mic_channel;
3437 card->alloc_codec_spdifout_channel = ali_alloc_codec_spdifout_channel;
3438 card->alloc_controller_spdifout_channel = ali_alloc_controller_spdifout_channel;
3439 card->free_pcm_channel = ali_free_pcm_channel;
3440 card->channel[0].offset = 0;
3441 card->channel[0].port = 0x40;
3442 card->channel[0].num = 0;
3443 card->channel[1].offset = 0;
3444 card->channel[1].port = 0x50;
3445 card->channel[1].num = 1;
3446 card->channel[2].offset = 0;
3447 card->channel[2].port = 0x60;
3448 card->channel[2].num = 2;
3449 card->channel[3].offset = 0;
3450 card->channel[3].port = 0x70;
3451 card->channel[3].num = 3;
3452 card->channel[4].offset = 0;
3453 card->channel[4].port = 0xb0;
3454 card->channel[4].num = 4;
3455 /* claim our iospace and irq */
3456 request_region(card->iobase, 256, card_names[pci_id->driver_data]);
3457 if (request_irq(card->irq, &ali_interrupt, SA_SHIRQ,
3458 card_names[pci_id->driver_data], card)) {
3459 printk(KERN_ERR "ali_audio: unable to allocate irq %d\n",
3461 release_region(card->iobase, 256);
3466 if (ali_reset_5455(card) <= 0) {
3467 unregister_sound_dsp(card->dev_audio);
3468 release_region(card->iobase, 256);
3469 free_irq(card->irq, card);
3474 /* initialize AC97 codec and register /dev/mixer */
3475 if (ali_ac97_init(card) < 0) {
3476 release_region(card->iobase, 256);
3477 free_irq(card->irq, card);
3482 pci_set_drvdata(pci_dev, card);
3484 if (clocking == 0) {
3486 ali_configure_clocking();
3489 /* register /dev/dsp */
3490 if ((card->dev_audio = register_sound_dsp(&ali_audio_fops, -1)) < 0) {
3492 printk(KERN_ERR"ali_audio: couldn't register DSP device!\n");
3493 release_region(card->iobase, 256);
3494 free_irq(card->irq, card);
3495 for (i = 0; i < NR_AC97; i++)
3496 if (card->ac97_codec[i] != NULL) {
3497 unregister_sound_mixer(card->ac97_codec[i]->dev_mixer);
3498 kfree(card->ac97_codec[i]);
3503 card->initializing = 0;
3507 static void __devexit ali_remove(struct pci_dev *pci_dev)
3510 struct ali_card *card = pci_get_drvdata(pci_dev);
3511 /* free hardware resources */
3512 free_irq(card->irq, devs);
3513 release_region(card->iobase, 256);
3514 /* unregister audio devices */
3515 for (i = 0; i < NR_AC97; i++)
3516 if (card->ac97_codec[i] != NULL) {
3517 unregister_sound_mixer(card->ac97_codec[i]->
3519 kfree(card->ac97_codec[i]);
3520 card->ac97_codec[i] = NULL;
3522 unregister_sound_dsp(card->dev_audio);
3527 static int ali_pm_suspend(struct pci_dev *dev, u32 pm_state)
3529 struct ali_card *card = pci_get_drvdata(dev);
3530 struct ali_state *state;
3531 unsigned long flags;
3532 struct dmabuf *dmabuf;
3537 spin_lock_irqsave(&card->lock, flags);
3538 card->pm_suspended = 1;
3539 for (i = 0; i < NR_HW_CH; i++) {
3540 state = card->states[i];
3543 /* this happens only if there are open files */
3544 dmabuf = &state->dmabuf;
3545 if (dmabuf->enable & DAC_RUNNING ||
3547 && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) {
3548 state->pm_saved_dac_rate = dmabuf->rate;
3551 state->pm_saved_dac_rate = 0;
3553 if (dmabuf->enable & ADC_RUNNING) {
3554 state->pm_saved_adc_rate = dmabuf->rate;
3557 state->pm_saved_adc_rate = 0;
3560 dmabuf->swptr = dmabuf->hwptr = 0;
3561 dmabuf->count = dmabuf->total_bytes = 0;
3564 spin_unlock_irqrestore(&card->lock, flags);
3565 /* save mixer settings */
3566 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3567 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3570 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
3571 if ((supported_mixer(codec, i)) && (codec->read_mixer)) {
3572 card->pm_saved_mixer_settings[i][num_ac97] = codec->read_mixer(codec, i);
3576 pci_save_state(dev, card->pm_save_state); /* XXX do we need this? */
3577 pci_disable_device(dev); /* disable busmastering */
3578 pci_set_power_state(dev, 3); /* Zzz. */
3583 static int ali_pm_resume(struct pci_dev *dev)
3585 int num_ac97, i = 0;
3586 struct ali_card *card = pci_get_drvdata(dev);
3587 pci_enable_device(dev);
3588 pci_restore_state(dev, card->pm_save_state);
3589 /* observation of a toshiba portege 3440ct suggests that the
3590 hardware has to be more or less completely reinitialized from
3591 scratch after an apm suspend. Works For Me. -dan */
3592 ali_ac97_random_init_stuff(card);
3593 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3594 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3595 /* check they haven't stolen the hardware while we were
3597 if (!codec || !ali_ac97_exists(card, num_ac97)) {
3603 if (!ali_ac97_probe_and_powerup(card, codec))
3605 if ((card->ac97_features & 0x0001)) {
3606 /* at probe time we found we could do variable
3607 rates, but APM suspend has made it forget
3608 its magical powers */
3609 if (!ali_ac97_enable_variable_rate(codec))
3612 /* we lost our mixer settings, so restore them */
3613 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
3614 if (supported_mixer(codec, i)) {
3615 int val = card->pm_saved_mixer_settings[i][num_ac97];
3616 codec->mixer_state[i] = val;
3617 codec->write_mixer(codec, i,
3619 ((val >> 8) & 0xff));
3624 /* we need to restore the sample rate from whatever it was */
3625 for (i = 0; i < NR_HW_CH; i++) {
3626 struct ali_state *state = card->states[i];
3628 if (state->pm_saved_adc_rate)
3629 ali_set_adc_rate(state, state->pm_saved_adc_rate);
3630 if (state->pm_saved_dac_rate)
3631 ali_set_dac_rate(state, state->pm_saved_dac_rate);
3635 card->pm_suspended = 0;
3636 /* any processes that were reading/writing during the suspend
3637 probably ended up here */
3638 for (i = 0; i < NR_HW_CH; i++) {
3639 struct ali_state *state = card->states[i];
3641 wake_up(&state->dmabuf.wait);
3645 #endif /* CONFIG_PM */
3648 MODULE_DESCRIPTION("ALI 5455 audio support");
3649 MODULE_LICENSE("GPL");
3650 MODULE_PARM(clocking, "i");
3651 MODULE_PARM(strict_clocking, "i");
3652 MODULE_PARM(codec_pcmout_share_spdif_locked, "i");
3653 MODULE_PARM(codec_independent_spdif_locked, "i");
3654 MODULE_PARM(controller_pcmout_share_spdif_locked, "i");
3655 MODULE_PARM(controller_independent_spdif_locked, "i");
3656 #define ALI5455_MODULE_NAME "ali5455"
3657 static struct pci_driver ali_pci_driver = {
3658 name:ALI5455_MODULE_NAME, id_table:ali_pci_tbl, probe:ali_probe,
3659 remove:__devexit_p(ali_remove),
3661 suspend:ali_pm_suspend, resume:ali_pm_resume,
3662 #endif /* CONFIG_PM */
3665 static int __init ali_init_module(void)
3667 if (!pci_present()) /* No PCI bus in this machine! */
3669 printk(KERN_INFO "ALI 5455 + AC97 Audio, version "
3670 DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
3672 if (codec_independent_spdif_locked > 0) {
3673 if (codec_independent_spdif_locked == 32000
3674 || codec_independent_spdif_locked == 44100
3675 || codec_independent_spdif_locked == 48000) {
3676 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_independent_spdif_locked);
3678 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3679 codec_independent_spdif_locked = 0;
3682 if (controller_independent_spdif_locked > 0) {
3683 if (controller_independent_spdif_locked == 32000
3684 || controller_independent_spdif_locked == 44100
3685 || controller_independent_spdif_locked == 48000) {
3686 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", controller_independent_spdif_locked);
3688 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3689 controller_independent_spdif_locked = 0;
3693 if (codec_pcmout_share_spdif_locked > 0) {
3694 if (codec_pcmout_share_spdif_locked == 32000
3695 || codec_pcmout_share_spdif_locked == 44100
3696 || codec_pcmout_share_spdif_locked == 48000) {
3697 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_pcmout_share_spdif_locked);
3699 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3700 codec_pcmout_share_spdif_locked = 0;
3703 if (controller_pcmout_share_spdif_locked > 0) {
3704 if (controller_pcmout_share_spdif_locked == 32000
3705 || controller_pcmout_share_spdif_locked == 44100
3706 || controller_pcmout_share_spdif_locked == 48000) {
3707 printk(KERN_INFO "ali_audio: Enabling controller S/PDIF at sample rate %dHz.\n", controller_pcmout_share_spdif_locked);
3709 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3710 controller_pcmout_share_spdif_locked = 0;
3713 if (!pci_register_driver(&ali_pci_driver)) {
3714 pci_unregister_driver(&ali_pci_driver);
3720 static void __exit ali_cleanup_module(void)
3722 pci_unregister_driver(&ali_pci_driver);
3725 module_init(ali_init_module);
3726 module_exit(ali_cleanup_module);