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 separated 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/interrupt.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 separately as nocache. Must be 8 byte aligned */
121 struct sg_item sg[SG_LEN]; /* 32*8 */
129 * we have 3 separate 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[] = {
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 */
309 spinlock_t ac97_lock;
311 /* PCI device stuff */
312 struct pci_dev *pci_dev;
316 u32 pm_save_state[64 / sizeof(u32)];
317 int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97];
319 /* soundcore stuff */
322 /* structures for abstraction of hardware facilities, codecs, banks and channels */
323 struct ac97_codec *ac97_codec[NR_AC97];
324 struct ali_state *states[NR_HW_CH];
330 /* hardware resources */
331 unsigned long iobase;
335 /* Function support */
336 struct ali_channel *(*alloc_pcm_channel) (struct ali_card *);
337 struct ali_channel *(*alloc_rec_pcm_channel) (struct ali_card *);
338 struct ali_channel *(*alloc_rec_mic_channel) (struct ali_card *);
339 struct ali_channel *(*alloc_codec_spdifout_channel) (struct ali_card *);
340 struct ali_channel *(*alloc_controller_spdifout_channel) (struct ali_card *);
341 void (*free_pcm_channel) (struct ali_card *, int chan);
343 /* We have a *very* long init time possibly, so use this to block */
344 /* attempts to open our devices before we are ready (stops oops'es) */
349 static struct ali_card *devs = NULL;
351 static int ali_open_mixdev(struct inode *inode, struct file *file);
352 static int ali_ioctl_mixdev(struct inode *inode, struct file *file,
353 unsigned int cmd, unsigned long arg);
354 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg);
355 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data);
357 static struct ali_channel *ali_alloc_pcm_channel(struct ali_card *card)
359 if (card->channel[1].used == 1)
361 card->channel[1].used = 1;
362 return &card->channel[1];
365 static struct ali_channel *ali_alloc_rec_pcm_channel(struct ali_card *card)
367 if (card->channel[0].used == 1)
369 card->channel[0].used = 1;
370 return &card->channel[0];
373 static struct ali_channel *ali_alloc_rec_mic_channel(struct ali_card *card)
375 if (card->channel[2].used == 1)
377 card->channel[2].used = 1;
378 return &card->channel[2];
381 static struct ali_channel *ali_alloc_codec_spdifout_channel(struct ali_card *card)
383 if (card->channel[3].used == 1)
385 card->channel[3].used = 1;
386 return &card->channel[3];
389 static struct ali_channel *ali_alloc_controller_spdifout_channel(struct ali_card *card)
391 if (card->channel[4].used == 1)
393 card->channel[4].used = 1;
394 return &card->channel[4];
396 static void ali_free_pcm_channel(struct ali_card *card, int channel)
398 card->channel[channel].used = 0;
402 //add support codec spdif out
403 static int ali_valid_spdif_rate(struct ac97_codec *codec, int rate)
405 unsigned long id = 0L;
407 id = (ali_ac97_get(codec, AC97_VENDOR_ID1) << 16);
408 id |= ali_ac97_get(codec, AC97_VENDOR_ID2) & 0xffff;
410 case 0x41445361: /* AD1886 */
415 case 0x414c4720: /* ALC650 */
420 default: /* all other codecs, until we know otherwiae */
421 if (rate == 48000 || rate == 44100 || rate == 32000) {
429 /* ali_set_spdif_output
431 * Configure the S/PDIF output transmitter. When we turn on
432 * S/PDIF, we turn off the analog output. This may not be
433 * the right thing to do.
436 * The DSP sample rate must already be set to a supported
437 * S/PDIF rate (32kHz, 44.1kHz, or 48kHz) or we abort.
439 static void ali_set_spdif_output(struct ali_state *state, int slots,
444 struct ac97_codec *codec = state->card->ac97_codec[0];
446 if (!(state->card->ac97_features & 4)) {
447 state->card->ac97_status &= ~SPDIF_ON;
449 if (slots == -1) { /* Turn off S/PDIF */
450 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
451 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
453 /* If the volume wasn't muted before we turned on S/PDIF, unmute it */
454 if (!(state->card->ac97_status & VOL_MUTED)) {
455 aud_reg = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
456 ali_ac97_set(codec, AC97_MASTER_VOL_STEREO,
457 (aud_reg & ~VOL_MUTED));
459 state->card->ac97_status &= ~(VOL_MUTED | SPDIF_ON);
463 vol = ali_ac97_get(codec, AC97_MASTER_VOL_STEREO);
464 state->card->ac97_status = vol & VOL_MUTED;
466 /* Set S/PDIF transmitter sample rate */
467 aud_reg = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
470 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_32K;
473 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_44K;
476 aud_reg = (aud_reg & AC97_SC_SPSR_MASK) | AC97_SC_SPSR_48K;
479 /* turn off S/PDIF */
480 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
481 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
482 state->card->ac97_status &= ~SPDIF_ON;
486 ali_ac97_set(codec, AC97_SPDIF_CONTROL, aud_reg);
488 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
489 aud_reg = (aud_reg & AC97_EA_SLOT_MASK) | slots | AC97_EA_SPDIF;
490 ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
492 aud_reg = ali_ac97_get(codec, AC97_POWER_CONTROL);
494 ali_ac97_set(codec, AC97_POWER_CONTROL, aud_reg);
497 state->card->ac97_status |= SPDIF_ON;
499 /* Check to make sure the configuration is valid */
500 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
501 if (!(aud_reg & 0x0400)) {
502 /* turn off S/PDIF */
503 ali_ac97_set(codec, AC97_EXTENDED_STATUS, (aud_reg & ~AC97_EA_SPDIF));
504 state->card->ac97_status &= ~SPDIF_ON;
507 if (codec_independent_spdif_locked > 0) {
508 aud_reg = ali_ac97_get(codec, 0x6a);
509 ali_ac97_set(codec, 0x6a, (aud_reg & 0xefff));
511 /* Mute the analog output */
512 /* Should this only mute the PCM volume??? */
516 /* ali_set_dac_channels
518 * Configure the codec's multi-channel DACs
520 * The logic is backwards. Setting the bit to 1 turns off the DAC.
522 * What about the ICH? We currently configure it using the
523 * SNDCTL_DSP_CHANNELS ioctl. If we're turnning on the DAC,
524 * does that imply that we want the ICH set to support
528 * vailidate that the codec really supports these DACs
529 * before turning them on.
531 static void ali_set_dac_channels(struct ali_state *state, int channel)
534 struct ac97_codec *codec = state->card->ac97_codec[0];
536 aud_reg = ali_ac97_get(codec, AC97_EXTENDED_STATUS);
537 aud_reg |= AC97_EA_PRI | AC97_EA_PRJ | AC97_EA_PRK;
538 state->card->ac97_status &= ~(SURR_ON | CENTER_LFE_ON);
541 case 2: /* always enabled */
544 aud_reg &= ~AC97_EA_PRJ;
545 state->card->ac97_status |= SURR_ON;
548 aud_reg &= ~(AC97_EA_PRJ | AC97_EA_PRI | AC97_EA_PRK);
549 state->card->ac97_status |= SURR_ON | CENTER_LFE_ON;
554 ali_ac97_set(codec, AC97_EXTENDED_STATUS, aud_reg);
558 /* set playback sample rate */
559 static unsigned int ali_set_dac_rate(struct ali_state *state,
562 struct dmabuf *dmabuf = &state->dmabuf;
564 struct ac97_codec *codec = state->card->ac97_codec[0];
566 if (!(state->card->ac97_features & 0x0001)) {
567 dmabuf->rate = clocking;
578 * Adjust for misclocked crap
581 rate = (rate * clocking) / 48000;
583 if (strict_clocking && rate < 8000) {
585 dmabuf->rate = (rate * 48000) / clocking;
588 new_rate = ac97_set_dac_rate(codec, rate);
589 if (new_rate != rate) {
590 dmabuf->rate = (new_rate * 48000) / clocking;
596 /* set recording sample rate */
597 static unsigned int ali_set_adc_rate(struct ali_state *state,
600 struct dmabuf *dmabuf = &state->dmabuf;
602 struct ac97_codec *codec = state->card->ac97_codec[0];
604 if (!(state->card->ac97_features & 0x0001)) {
605 dmabuf->rate = clocking;
616 * Adjust for misclocked crap
619 rate = (rate * clocking) / 48000;
620 if (strict_clocking && rate < 8000) {
622 dmabuf->rate = (rate * 48000) / clocking;
625 new_rate = ac97_set_adc_rate(codec, rate);
627 if (new_rate != rate) {
628 dmabuf->rate = (new_rate * 48000) / clocking;
634 /* set codec independent spdifout sample rate */
635 static unsigned int ali_set_codecspdifout_rate(struct ali_state *state,
638 struct dmabuf *dmabuf = &state->dmabuf;
640 if (!(state->card->ac97_features & 0x0001)) {
641 dmabuf->rate = clocking;
654 /* set controller independent spdif out function sample rate */
655 static void ali_set_spdifout_rate(struct ali_state *state,
658 unsigned char ch_st_sel;
659 unsigned short status_rate;
674 ch_st_sel = inb(state->card->iobase + ALI_SPDIFICS) & ALI_SPDIF_OUT_CH_STATUS; //select spdif_out
676 ch_st_sel |= 0x80; //select right
677 outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
678 outb(status_rate | 0x20, (state->card->iobase + ALI_SPDIFCSR + 2));
680 ch_st_sel &= (~0x80); //select left
681 outb(ch_st_sel, (state->card->iobase + ALI_SPDIFICS));
682 outw(status_rate | 0x10, (state->card->iobase + ALI_SPDIFCSR + 2));
685 /* get current playback/recording dma buffer pointer (byte offset from LBA),
686 called with spinlock held! */
688 static inline unsigned ali_get_dma_addr(struct ali_state *state, int rec)
690 struct dmabuf *dmabuf = &state->dmabuf;
691 unsigned int civ, offset, port, port_picb;
698 port = state->card->iobase + dmabuf->read_channel->port;
700 port = state->card->iobase + dmabuf->codec_spdifout_channel->port;
702 port = state->card->iobase + dmabuf->controller_spdifout_channel->port;
704 port = state->card->iobase + dmabuf->write_channel->port;
706 port_picb = port + OFF_PICB;
709 civ = inb(port + OFF_CIV) & 31;
710 offset = inw(port_picb);
711 /* Must have a delay here! */
715 /* Reread both registers and make sure that that total
716 * offset from the first reading to the second is 0.
717 * There is an issue with SiS hardware where it will count
718 * picb down to 0, then update civ to the next value,
719 * then set the new picb to fragsize bytes. We can catch
720 * it between the civ update and the picb update, making
721 * it look as though we are 1 fragsize ahead of where we
722 * are. The next to we get the address though, it will
723 * be back in thdelay is more than long enough
724 * that we won't have to worry about the chip still being
725 * out of sync with reality ;-)
727 } while (civ != (inb(port + OFF_CIV) & 31) || offset != inw(port_picb));
729 data = ((civ + 1) * dmabuf->fragsize - (2 * offset)) % dmabuf->dmasize;
730 if (inw(port_picb) == 0)
736 /* Stop recording (lock held) */
737 static inline void __stop_adc(struct ali_state *state)
739 struct dmabuf *dmabuf = &state->dmabuf;
740 struct ali_card *card = state->card;
742 dmabuf->enable &= ~ADC_RUNNING;
744 outl((1 << 18) | (1 << 16), card->iobase + ALI_DMACR);
747 outb(0, card->iobase + PI_CR);
748 while (inb(card->iobase + PI_CR) != 0);
750 // now clear any latent interrupt bits (like the halt bit)
751 outb(inb(card->iobase + PI_SR) | 0x001e, card->iobase + PI_SR);
752 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMIN, card->iobase + ALI_INTERRUPTSR);
755 static void stop_adc(struct ali_state *state)
757 struct ali_card *card = state->card;
759 spin_lock_irqsave(&card->lock, flags);
761 spin_unlock_irqrestore(&card->lock, flags);
764 static inline void __start_adc(struct ali_state *state)
766 struct dmabuf *dmabuf = &state->dmabuf;
768 if (dmabuf->count < dmabuf->dmasize && dmabuf->ready
769 && !dmabuf->enable && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
770 dmabuf->enable |= ADC_RUNNING;
771 outb((1 << 4) | (1 << 2), state->card->iobase + PI_CR);
772 if (state->card->channel[0].used == 1)
773 outl(1, state->card->iobase + ALI_DMACR); // DMA CONTROL REGISTRER
775 if (state->card->channel[2].used == 1)
776 outl((1 << 2), state->card->iobase + ALI_DMACR); //DMA CONTROL REGISTER
781 static void start_adc(struct ali_state *state)
783 struct ali_card *card = state->card;
786 spin_lock_irqsave(&card->lock, flags);
788 spin_unlock_irqrestore(&card->lock, flags);
791 /* stop playback (lock held) */
792 static inline void __stop_dac(struct ali_state *state)
794 struct dmabuf *dmabuf = &state->dmabuf;
795 struct ali_card *card = state->card;
797 dmabuf->enable &= ~DAC_RUNNING;
798 outl(0x00020000, card->iobase + 0x08);
799 outb(0, card->iobase + PO_CR);
800 while (inb(card->iobase + PO_CR) != 0)
803 outb(inb(card->iobase + PO_SR) | 0x001e, card->iobase + PO_SR);
805 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_PCMOUT, card->iobase + ALI_INTERRUPTSR);
808 static void stop_dac(struct ali_state *state)
810 struct ali_card *card = state->card;
812 spin_lock_irqsave(&card->lock, flags);
814 spin_unlock_irqrestore(&card->lock, flags);
817 static inline void __start_dac(struct ali_state *state)
819 struct dmabuf *dmabuf = &state->dmabuf;
820 if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
821 (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
822 dmabuf->enable |= DAC_RUNNING;
823 outb((1 << 4) | (1 << 2), state->card->iobase + PO_CR);
824 outl((1 << 1), state->card->iobase + 0x08); //dma control register
828 static void start_dac(struct ali_state *state)
830 struct ali_card *card = state->card;
832 spin_lock_irqsave(&card->lock, flags);
834 spin_unlock_irqrestore(&card->lock, flags);
837 /* stop codec and controller spdif out (lock held) */
838 static inline void __stop_spdifout(struct ali_state *state)
840 struct dmabuf *dmabuf = &state->dmabuf;
841 struct ali_card *card = state->card;
843 if (codec_independent_spdif_locked > 0) {
844 dmabuf->enable &= ~CODEC_SPDIFOUT_RUNNING;
845 outl((1 << 19), card->iobase + 0x08);
846 outb(0, card->iobase + CODECSPDIFOUT_CR);
848 while (inb(card->iobase + CODECSPDIFOUT_CR) != 0)
851 outb(inb(card->iobase + CODECSPDIFOUT_SR) | 0x001e, card->iobase + CODECSPDIFOUT_SR);
852 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_CODECSPDIFOUT, card->iobase + ALI_INTERRUPTSR);
854 if (controller_independent_spdif_locked > 0) {
855 dmabuf->enable &= ~CONTROLLER_SPDIFOUT_RUNNING;
856 outl((1 << 23), card->iobase + 0x08);
857 outb(0, card->iobase + CONTROLLERSPDIFOUT_CR);
858 while (inb(card->iobase + CONTROLLERSPDIFOUT_CR) != 0)
860 outb(inb(card->iobase + CONTROLLERSPDIFOUT_SR) | 0x001e, card->iobase + CONTROLLERSPDIFOUT_SR);
861 outl(inl(card->iobase + ALI_INTERRUPTSR) & INT_SPDIFOUT, card->iobase + ALI_INTERRUPTSR);
866 static void stop_spdifout(struct ali_state *state)
868 struct ali_card *card = state->card;
870 spin_lock_irqsave(&card->lock, flags);
871 __stop_spdifout(state);
872 spin_unlock_irqrestore(&card->lock, flags);
875 static inline void __start_spdifout(struct ali_state *state)
877 struct dmabuf *dmabuf = &state->dmabuf;
878 if (dmabuf->count > 0 && dmabuf->ready && !dmabuf->enable &&
879 (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
880 if (codec_independent_spdif_locked > 0) {
881 dmabuf->enable |= CODEC_SPDIFOUT_RUNNING;
882 outb((1 << 4) | (1 << 2), state->card->iobase + CODECSPDIFOUT_CR);
883 outl((1 << 3), state->card->iobase + 0x08); //dma control register
885 if (controller_independent_spdif_locked > 0) {
886 dmabuf->enable |= CONTROLLER_SPDIFOUT_RUNNING;
887 outb((1 << 4) | (1 << 2), state->card->iobase + CONTROLLERSPDIFOUT_CR);
888 outl((1 << 7), state->card->iobase + 0x08); //dma control register
894 static void start_spdifout(struct ali_state *state)
896 struct ali_card *card = state->card;
898 spin_lock_irqsave(&card->lock, flags);
899 __start_spdifout(state);
900 spin_unlock_irqrestore(&card->lock, flags);
903 #define DMABUF_DEFAULTORDER (16-PAGE_SHIFT)
904 #define DMABUF_MINORDER 1
906 /* allocate DMA buffer, playback , recording,spdif out buffer should be allocated separately */
907 static int alloc_dmabuf(struct ali_state *state)
909 struct dmabuf *dmabuf = &state->dmabuf;
912 struct page *page, *pend;
914 /* If we don't have any oss frag params, then use our default ones */
915 if (dmabuf->ossmaxfrags == 0)
916 dmabuf->ossmaxfrags = 4;
917 if (dmabuf->ossfragsize == 0)
918 dmabuf->ossfragsize = (PAGE_SIZE << DMABUF_DEFAULTORDER) / dmabuf->ossmaxfrags;
919 size = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
921 if (dmabuf->rawbuf && (PAGE_SIZE << dmabuf->buforder) == size)
923 /* alloc enough to satisfy the oss params */
924 for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) {
925 if ((PAGE_SIZE << order) > size)
927 if ((rawbuf = pci_alloc_consistent(state->card->pci_dev,
929 &dmabuf->dma_handle)))
935 dmabuf->ready = dmabuf->mapped = 0;
936 dmabuf->rawbuf = rawbuf;
937 dmabuf->buforder = order;
939 /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
940 pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
941 for (page = virt_to_page(rawbuf); page <= pend; page++)
942 SetPageReserved(page);
946 /* free DMA buffer */
947 static void dealloc_dmabuf(struct ali_state *state)
949 struct dmabuf *dmabuf = &state->dmabuf;
950 struct page *page, *pend;
952 if (dmabuf->rawbuf) {
953 /* undo marking the pages as reserved */
954 pend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
955 for (page = virt_to_page(dmabuf->rawbuf); page <= pend; page++)
956 ClearPageReserved(page);
957 pci_free_consistent(state->card->pci_dev,
958 PAGE_SIZE << dmabuf->buforder,
959 dmabuf->rawbuf, dmabuf->dma_handle);
961 dmabuf->rawbuf = NULL;
962 dmabuf->mapped = dmabuf->ready = 0;
965 static int prog_dmabuf(struct ali_state *state, unsigned rec)
967 struct dmabuf *dmabuf = &state->dmabuf;
968 struct ali_channel *c = NULL;
975 spin_lock_irqsave(&state->card->lock, flags);
976 if (dmabuf->enable & DAC_RUNNING)
978 if (dmabuf->enable & ADC_RUNNING)
980 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
981 __stop_spdifout(state);
982 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
983 __stop_spdifout(state);
985 dmabuf->total_bytes = 0;
986 dmabuf->count = dmabuf->error = 0;
987 dmabuf->swptr = dmabuf->hwptr = 0;
988 spin_unlock_irqrestore(&state->card->lock, flags);
990 /* allocate DMA buffer, let alloc_dmabuf determine if we are already
991 * allocated well enough or if we should replace the current buffer
992 * (assuming one is already allocated, if it isn't, then allocate it).
994 if ((ret = alloc_dmabuf(state)))
997 /* FIXME: figure out all this OSS fragment stuff */
998 /* I did, it now does what it should according to the OSS API. DL */
999 /* We may not have realloced our dmabuf, but the fragment size to
1000 * fragment number ratio may have changed, so go ahead and reprogram
1004 dmabuf->dmasize = PAGE_SIZE << dmabuf->buforder;
1005 dmabuf->numfrag = SG_LEN;
1006 dmabuf->fragsize = dmabuf->dmasize / dmabuf->numfrag;
1007 dmabuf->fragsamples = dmabuf->fragsize >> 1;
1008 dmabuf->userfragsize = dmabuf->ossfragsize;
1009 dmabuf->userfrags = dmabuf->dmasize / dmabuf->ossfragsize;
1011 memset(dmabuf->rawbuf, 0, dmabuf->dmasize);
1013 if (dmabuf->ossmaxfrags == 4) {
1015 dmabuf->fragshift = 2;
1016 } else if (dmabuf->ossmaxfrags == 8) {
1018 dmabuf->fragshift = 3;
1019 } else if (dmabuf->ossmaxfrags == 16) {
1021 dmabuf->fragshift = 4;
1024 dmabuf->fragshift = 5;
1027 * Now set up the ring
1031 c = dmabuf->read_channel;
1033 c = dmabuf->codec_spdifout_channel;
1035 c = dmabuf->controller_spdifout_channel;
1037 c = dmabuf->write_channel;
1041 * Load up 32 sg entries and take an interrupt at half
1042 * way (we might want more interrupts later..)
1044 for (i = 0; i < dmabuf->numfrag; i++) {
1046 virt_to_bus(dmabuf->rawbuf +
1047 dmabuf->fragsize * i);
1048 // the card will always be doing 16bit stereo
1049 sg->control = dmabuf->fragsamples;
1050 sg->control |= CON_BUFPAD; //I modify
1051 // set us up to get IOC interrupts as often as needed to
1052 // satisfy numfrag requirements, no more
1053 if (((i + 1) % fragint) == 0) {
1054 sg->control |= CON_IOC;
1058 spin_lock_irqsave(&state->card->lock, flags);
1059 outb(2, state->card->iobase + c->port + OFF_CR); /* reset DMA machine */
1060 outl(virt_to_bus(&c->sg[0]), state->card->iobase + c->port + OFF_BDBAR);
1061 outb(0, state->card->iobase + c->port + OFF_CIV);
1062 outb(0, state->card->iobase + c->port + OFF_LVI);
1063 spin_unlock_irqrestore(&state->card->lock, flags);
1065 /* set the ready flag for the dma buffer */
1070 static void __ali_update_lvi(struct ali_state *state, int rec)
1072 struct dmabuf *dmabuf = &state->dmabuf;
1074 port = state->card->iobase;
1076 port += dmabuf->read_channel->port;
1078 port += dmabuf->codec_spdifout_channel->port;
1080 port += dmabuf->controller_spdifout_channel->port;
1082 port += dmabuf->write_channel->port;
1083 /* if we are currently stopped, then our CIV is actually set to our
1084 * *last* sg segment and we are ready to wrap to the next. However,
1085 * if we set our LVI to the last sg segment, then it won't wrap to
1086 * the next sg segment, it won't even get a start. So, instead, when
1087 * we are stopped, we set both the LVI value and also we increment
1088 * the CIV value to the next sg segment to be played so that when
1089 * we call start_{dac,adc}, things will operate properly
1091 if (!dmabuf->enable && dmabuf->ready) {
1092 if (rec && dmabuf->count < dmabuf->dmasize && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
1093 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1095 while (! (inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1097 } else if (!rec && dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
1098 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1100 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1102 } else if (rec && dmabuf->count && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
1103 if (codec_independent_spdif_locked > 0) {
1104 // outb((inb(port+OFF_CIV))&31, port+OFF_LVI);
1105 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1106 __start_spdifout(state);
1107 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1110 if (controller_independent_spdif_locked > 0) {
1111 outb((inb(port + OFF_CIV) + 1) & 31, port + OFF_LVI);
1112 __start_spdifout(state);
1113 while (!(inb(port + OFF_CR) & ((1 << 4) | (1 << 2))))
1120 /* swptr - 1 is the tail of our transfer */
1121 x = (dmabuf->dmasize + dmabuf->swptr - 1) % dmabuf->dmasize;
1122 x /= dmabuf->fragsize;
1123 outb(x, port + OFF_LVI);
1126 static void ali_update_lvi(struct ali_state *state, int rec)
1128 struct dmabuf *dmabuf = &state->dmabuf;
1129 unsigned long flags;
1132 spin_lock_irqsave(&state->card->lock, flags);
1133 __ali_update_lvi(state, rec);
1134 spin_unlock_irqrestore(&state->card->lock, flags);
1137 /* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */
1138 static void ali_update_ptr(struct ali_state *state)
1140 struct dmabuf *dmabuf = &state->dmabuf;
1144 /* error handling and process wake up for DAC */
1145 if (dmabuf->enable == ADC_RUNNING) {
1146 /* update hardware pointer */
1147 hwptr = ali_get_dma_addr(state, 1);
1148 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1149 dmabuf->hwptr = hwptr;
1150 dmabuf->total_bytes += diff;
1151 dmabuf->count += diff;
1152 if (dmabuf->count > dmabuf->dmasize) {
1153 /* buffer underrun or buffer overrun */
1154 /* this is normal for the end of a read */
1155 /* only give an error if we went past the */
1156 /* last valid sg entry */
1157 if ((inb(state->card->iobase + PI_CIV) & 31) != (inb(state->card->iobase + PI_LVI) & 31)) {
1158 printk(KERN_WARNING "ali_audio: DMA overrun on read\n");
1162 if (dmabuf->count > dmabuf->userfragsize)
1163 wake_up(&dmabuf->wait);
1165 /* error handling and process wake up for DAC */
1166 if (dmabuf->enable == DAC_RUNNING) {
1167 /* update hardware pointer */
1168 hwptr = ali_get_dma_addr(state, 0);
1170 (dmabuf->dmasize + hwptr -
1171 dmabuf->hwptr) % dmabuf->dmasize;
1172 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
1173 printk("DAC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
1175 dmabuf->hwptr = hwptr;
1176 dmabuf->total_bytes += diff;
1177 dmabuf->count -= diff;
1178 if (dmabuf->count < 0) {
1179 /* buffer underrun or buffer overrun */
1180 /* this is normal for the end of a write */
1181 /* only give an error if we went past the */
1182 /* last valid sg entry */
1183 if ((inb(state->card->iobase + PO_CIV) & 31) != (inb(state->card->iobase + PO_LVI) & 31)) {
1184 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
1185 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n",
1186 inb(state->card->iobase + PO_CIV) & 31,
1187 inb(state->card->iobase + PO_LVI) & 31,
1193 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1194 wake_up(&dmabuf->wait);
1197 /* error handling and process wake up for CODEC SPDIF OUT */
1198 if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
1199 /* update hardware pointer */
1200 hwptr = ali_get_dma_addr(state, 2);
1201 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1202 dmabuf->hwptr = hwptr;
1203 dmabuf->total_bytes += diff;
1204 dmabuf->count -= diff;
1205 if (dmabuf->count < 0) {
1206 /* buffer underrun or buffer overrun */
1207 /* this is normal for the end of a write */
1208 /* only give an error if we went past the */
1209 /* last valid sg entry */
1210 if ((inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31)) {
1211 printk(KERN_WARNING "ali_audio: DMA overrun on write\n");
1212 printk(KERN_DEBUG "ali_audio: CIV %d, LVI %d, hwptr %x, count %d\n",
1213 inb(state->card->iobase + CODECSPDIFOUT_CIV) & 31,
1214 inb(state->card->iobase + CODECSPDIFOUT_LVI) & 31,
1215 dmabuf->hwptr, dmabuf->count);
1219 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1220 wake_up(&dmabuf->wait);
1222 /* error handling and process wake up for CONTROLLER SPDIF OUT */
1223 if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
1224 /* update hardware pointer */
1225 hwptr = ali_get_dma_addr(state, 3);
1226 diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
1227 dmabuf->hwptr = hwptr;
1228 dmabuf->total_bytes += diff;
1229 dmabuf->count -= diff;
1230 if (dmabuf->count < 0) {
1231 /* buffer underrun or buffer overrun */
1232 /* this is normal for the end of a write */
1233 /* only give an error if we went past the */
1234 /* last valid sg entry */
1235 if ((inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31) != (inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31)) {
1237 "ali_audio: DMA overrun on write\n");
1238 printk("ali_audio: CIV %d, LVI %d, hwptr %x, "
1240 inb(state->card->iobase + CONTROLLERSPDIFOUT_CIV) & 31,
1241 inb(state->card->iobase + CONTROLLERSPDIFOUT_LVI) & 31,
1242 dmabuf->hwptr, dmabuf->count);
1246 if (dmabuf->count < (dmabuf->dmasize - dmabuf->userfragsize))
1247 wake_up(&dmabuf->wait);
1251 static inline int ali_get_free_write_space(struct
1255 struct dmabuf *dmabuf = &state->dmabuf;
1257 ali_update_ptr(state);
1258 // catch underruns during playback
1259 if (dmabuf->count < 0) {
1261 dmabuf->swptr = dmabuf->hwptr;
1263 free = dmabuf->dmasize - dmabuf->count;
1264 free -= (dmabuf->hwptr % dmabuf->fragsize);
1270 static inline int ali_get_available_read_data(struct
1274 struct dmabuf *dmabuf = &state->dmabuf;
1276 ali_update_ptr(state);
1277 // catch overruns during record
1278 if (dmabuf->count > dmabuf->dmasize) {
1279 dmabuf->count = dmabuf->dmasize;
1280 dmabuf->swptr = dmabuf->hwptr;
1282 avail = dmabuf->count;
1283 avail -= (dmabuf->hwptr % dmabuf->fragsize);
1289 static int drain_dac(struct ali_state *state, int signals_allowed)
1292 DECLARE_WAITQUEUE(wait, current);
1293 struct dmabuf *dmabuf = &state->dmabuf;
1294 unsigned long flags;
1299 if (dmabuf->mapped) {
1303 add_wait_queue(&dmabuf->wait, &wait);
1306 spin_lock_irqsave(&state->card->lock, flags);
1307 ali_update_ptr(state);
1308 count = dmabuf->count;
1309 spin_unlock_irqrestore(&state->card->lock, flags);
1313 * This will make sure that our LVI is correct, that our
1314 * pointer is updated, and that the DAC is running. We
1315 * have to force the setting of dmabuf->trigger to avoid
1316 * any possible deadlocks.
1318 if (!dmabuf->enable) {
1319 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1320 ali_update_lvi(state, 0);
1322 if (signal_pending(current) && signals_allowed) {
1326 /* It seems that we have to set the current state to
1327 * TASK_INTERRUPTIBLE every time to make the process
1328 * really go to sleep. This also has to be *after* the
1329 * update_ptr() call because update_ptr is likely to
1330 * do a wake_up() which will unset this before we ever
1331 * try to sleep, resuling in a tight loop in this code
1332 * instead of actually sleeping and waiting for an
1333 * interrupt to wake us up!
1335 set_current_state(TASK_INTERRUPTIBLE);
1337 * set the timeout to significantly longer than it *should*
1338 * take for the DAC to drain the DMA buffer
1340 tmo = (count * HZ) / (dmabuf->rate);
1341 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1342 printk(KERN_ERR "ali_audio: drain_dac, dma timeout?\n");
1347 set_current_state(TASK_RUNNING);
1348 remove_wait_queue(&dmabuf->wait, &wait);
1349 if (count > 0 && signal_pending(current) && signals_allowed)
1350 return -ERESTARTSYS;
1356 static int drain_spdifout(struct ali_state *state, int signals_allowed)
1359 DECLARE_WAITQUEUE(wait, current);
1360 struct dmabuf *dmabuf = &state->dmabuf;
1361 unsigned long flags;
1366 if (dmabuf->mapped) {
1367 stop_spdifout(state);
1370 add_wait_queue(&dmabuf->wait, &wait);
1373 spin_lock_irqsave(&state->card->lock, flags);
1374 ali_update_ptr(state);
1375 count = dmabuf->count;
1376 spin_unlock_irqrestore(&state->card->lock, flags);
1380 * This will make sure that our LVI is correct, that our
1381 * pointer is updated, and that the DAC is running. We
1382 * have to force the setting of dmabuf->trigger to avoid
1383 * any possible deadlocks.
1385 if (!dmabuf->enable) {
1386 if (codec_independent_spdif_locked > 0) {
1387 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1388 ali_update_lvi(state, 2);
1390 if (controller_independent_spdif_locked > 0) {
1391 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1392 ali_update_lvi(state, 3);
1396 if (signal_pending(current) && signals_allowed) {
1400 /* It seems that we have to set the current state to
1401 * TASK_INTERRUPTIBLE every time to make the process
1402 * really go to sleep. This also has to be *after* the
1403 * update_ptr() call because update_ptr is likely to
1404 * do a wake_up() which will unset this before we ever
1405 * try to sleep, resuling in a tight loop in this code
1406 * instead of actually sleeping and waiting for an
1407 * interrupt to wake us up!
1409 set_current_state(TASK_INTERRUPTIBLE);
1411 * set the timeout to significantly longer than it *should*
1412 * take for the DAC to drain the DMA buffer
1414 tmo = (count * HZ) / (dmabuf->rate);
1415 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1416 printk(KERN_ERR "ali_audio: drain_spdifout, dma timeout?\n");
1421 set_current_state(TASK_RUNNING);
1422 remove_wait_queue(&dmabuf->wait, &wait);
1423 if (count > 0 && signal_pending(current) && signals_allowed)
1424 return -ERESTARTSYS;
1425 stop_spdifout(state);
1429 static void ali_channel_interrupt(struct ali_card *card)
1433 for (i = 0; i < NR_HW_CH; i++) {
1434 struct ali_state *state = card->states[i];
1435 struct ali_channel *c = NULL;
1436 struct dmabuf *dmabuf;
1437 unsigned long port = card->iobase;
1441 if (!state->dmabuf.ready)
1443 dmabuf = &state->dmabuf;
1444 if (codec_independent_spdif_locked > 0) {
1445 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
1446 c = dmabuf->codec_spdifout_channel;
1449 if (controller_independent_spdif_locked > 0) {
1450 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1451 c = dmabuf->controller_spdifout_channel;
1453 if (dmabuf->enable & DAC_RUNNING) {
1454 c = dmabuf->write_channel;
1455 } else if (dmabuf->enable & ADC_RUNNING) {
1456 c = dmabuf->read_channel;
1463 status = inw(port + OFF_SR);
1465 if (status & DMA_INT_COMPLETE) {
1466 /* only wake_up() waiters if this interrupt signals
1467 * us being beyond a userfragsize of data open or
1468 * available, and ali_update_ptr() does that for
1471 ali_update_ptr(state);
1474 if (status & DMA_INT_LVI) {
1475 ali_update_ptr(state);
1476 wake_up(&dmabuf->wait);
1478 if (dmabuf->enable & DAC_RUNNING)
1479 count = dmabuf->count;
1480 else if (dmabuf->enable & ADC_RUNNING)
1481 count = dmabuf->dmasize - dmabuf->count;
1482 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1483 count = dmabuf->count;
1484 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1485 count = dmabuf->count;
1489 if (dmabuf->enable & DAC_RUNNING)
1490 outl((1 << 1), state->card->iobase + ALI_DMACR);
1491 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1492 outl((1 << 3), state->card->iobase + ALI_DMACR);
1493 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1494 outl((1 << 7), state->card->iobase + ALI_DMACR);
1496 if (dmabuf->enable & DAC_RUNNING)
1498 if (dmabuf->enable & ADC_RUNNING)
1500 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1501 __stop_spdifout(state);
1502 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1503 __stop_spdifout(state);
1505 wake_up(&dmabuf->wait);
1509 if (!(status & DMA_INT_DCH)) {
1510 ali_update_ptr(state);
1511 wake_up(&dmabuf->wait);
1512 if (dmabuf->enable & DAC_RUNNING)
1513 count = dmabuf->count;
1514 else if (dmabuf->enable & ADC_RUNNING)
1515 count = dmabuf->dmasize - dmabuf->count;
1516 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1517 count = dmabuf->count;
1518 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1519 count = dmabuf->count;
1524 if (dmabuf->enable & DAC_RUNNING)
1525 outl((1 << 1), state->card->iobase + ALI_DMACR);
1526 else if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1527 outl((1 << 3), state->card->iobase + ALI_DMACR);
1528 else if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1529 outl((1 << 7), state->card->iobase + ALI_DMACR);
1531 if (dmabuf->enable & DAC_RUNNING)
1533 if (dmabuf->enable & ADC_RUNNING)
1535 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING)
1536 __stop_spdifout(state);
1537 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)
1538 __stop_spdifout(state);
1540 wake_up(&dmabuf->wait);
1543 outw(status & DMA_INT_MASK, port + OFF_SR);
1547 static irqreturn_t ali_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1549 struct ali_card *card = (struct ali_card *) dev_id;
1553 spin_lock(&card->lock);
1554 status = inl(card->iobase + ALI_INTERRUPTSR);
1555 if (!(status & INT_MASK)) {
1556 spin_unlock(&card->lock);
1557 return IRQ_NONE; /* not for us */
1560 if (codec_independent_spdif_locked > 0) {
1563 status2 = inw(card->iobase + 0x76);
1564 outw(status2 | 0x000c, card->iobase + 0x76);
1566 if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
1567 ali_channel_interrupt(card);
1570 if (status & (INT_PCMOUT | INT_PCMIN | INT_MICIN | INT_SPDIFOUT | INT_CODECSPDIFOUT))
1571 ali_channel_interrupt(card);
1575 outl(status & INT_MASK, card->iobase + ALI_INTERRUPTSR);
1576 spin_unlock(&card->lock);
1580 /* in this loop, dmabuf.count signifies the amount of data that is
1581 waiting to be copied to the user's buffer. It is filled by the dma
1582 machine and drained by this loop. */
1584 static ssize_t ali_read(struct file *file, char *buffer,
1585 size_t count, loff_t * ppos)
1587 struct ali_state *state = (struct ali_state *) file->private_data;
1588 struct ali_card *card = state ? state->card : 0;
1589 struct dmabuf *dmabuf = &state->dmabuf;
1591 unsigned long flags;
1594 DECLARE_WAITQUEUE(waita, current);
1596 printk("ali_audio: ali_read called, count = %d\n", count);
1598 if (ppos != &file->f_pos)
1602 if (dmabuf->enable & DAC_RUNNING)
1604 if (!dmabuf->read_channel) {
1606 dmabuf->read_channel = card->alloc_rec_pcm_channel(card);
1607 if (!dmabuf->read_channel) {
1611 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
1613 if (!access_ok(VERIFY_WRITE, buffer, count))
1616 add_wait_queue(&dmabuf->wait, &waita);
1618 set_current_state(TASK_INTERRUPTIBLE);
1619 spin_lock_irqsave(&card->lock, flags);
1620 if (PM_SUSPENDED(card)) {
1621 spin_unlock_irqrestore(&card->lock, flags);
1623 if (signal_pending(current)) {
1630 swptr = dmabuf->swptr;
1631 cnt = ali_get_available_read_data(state);
1632 // this is to make the copy_to_user simpler below
1633 if (cnt > (dmabuf->dmasize - swptr))
1634 cnt = dmabuf->dmasize - swptr;
1635 spin_unlock_irqrestore(&card->lock, flags);
1638 /* Lop off the last two bits to force the code to always
1639 * write in full samples. This keeps software that sets
1640 * O_NONBLOCK but doesn't check the return value of the
1641 * write call from getting things out of state where they
1642 * think a full 4 byte sample was written when really only
1643 * a portion was, resulting in odd sound and stereo
1650 * Don't let us deadlock. The ADC won't start if
1651 * dmabuf->trigger isn't set. A call to SETTRIGGER
1652 * could have turned it off after we set it to on
1655 dmabuf->trigger = PCM_ENABLE_INPUT;
1657 * This does three things. Updates LVI to be correct,
1658 * makes sure the ADC is running, and updates the
1661 ali_update_lvi(state, 1);
1662 if (file->f_flags & O_NONBLOCK) {
1667 /* Set the timeout to how long it would take to fill
1668 * two of our buffers. If we haven't been woke up
1669 * by then, then we know something is wrong.
1671 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1673 /* There are two situations when sleep_on_timeout returns, one is when
1674 the interrupt is serviced correctly and the process is waked up by
1675 ISR ON TIME. Another is when timeout is expired, which means that
1676 either interrupt is NOT serviced correctly (pending interrupt) or it
1677 is TOO LATE for the process to be scheduled to run (scheduler latency)
1678 which results in a (potential) buffer overrun. And worse, there is
1679 NOTHING we can do to prevent it. */
1680 if (!schedule_timeout(tmo >= 2 ? tmo : 2)) {
1682 "ali_audio: recording schedule timeout, "
1683 "dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
1684 dmabuf->dmasize, dmabuf->fragsize,
1685 dmabuf->count, dmabuf->hwptr,
1687 /* a buffer overrun, we delay the recovery until next time the
1688 while loop begin and we REALLY have space to record */
1690 if (signal_pending(current)) {
1691 ret = ret ? ret : -ERESTARTSYS;
1697 if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
1703 swptr = (swptr + cnt) % dmabuf->dmasize;
1704 spin_lock_irqsave(&card->lock, flags);
1705 if (PM_SUSPENDED(card)) {
1706 spin_unlock_irqrestore(&card->lock, flags);
1709 dmabuf->swptr = swptr;
1710 dmabuf->count -= cnt;
1711 spin_unlock_irqrestore(&card->lock, flags);
1717 ali_update_lvi(state, 1);
1718 set_current_state(TASK_RUNNING);
1719 remove_wait_queue(&dmabuf->wait, &waita);
1723 /* in this loop, dmabuf.count signifies the amount of data that is waiting to be dma to
1724 the soundcard. it is drained by the dma machine and filled by this loop. */
1725 static ssize_t ali_write(struct file *file,
1726 const char *buffer, size_t count, loff_t * ppos)
1728 struct ali_state *state = (struct ali_state *) file->private_data;
1729 struct ali_card *card = state ? state->card : 0;
1730 struct dmabuf *dmabuf = &state->dmabuf;
1732 unsigned long flags;
1733 unsigned int swptr = 0;
1735 DECLARE_WAITQUEUE(waita, current);
1737 printk("ali_audio: ali_write called, count = %d\n", count);
1739 if (ppos != &file->f_pos)
1743 if (dmabuf->enable & ADC_RUNNING)
1745 if (codec_independent_spdif_locked > 0) {
1746 if (!dmabuf->codec_spdifout_channel) {
1748 dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card);
1749 if (!dmabuf->codec_spdifout_channel)
1753 if (controller_independent_spdif_locked > 0) {
1754 if (!dmabuf->controller_spdifout_channel) {
1756 dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card);
1757 if (!dmabuf->controller_spdifout_channel)
1761 if (!dmabuf->write_channel) {
1763 dmabuf->write_channel =
1764 card->alloc_pcm_channel(card);
1765 if (!dmabuf->write_channel)
1771 if (codec_independent_spdif_locked > 0) {
1772 if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
1775 if (controller_independent_spdif_locked > 0) {
1776 if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
1780 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
1784 if (!access_ok(VERIFY_READ, buffer, count))
1787 add_wait_queue(&dmabuf->wait, &waita);
1789 set_current_state(TASK_INTERRUPTIBLE);
1790 spin_lock_irqsave(&state->card->lock, flags);
1791 if (PM_SUSPENDED(card)) {
1792 spin_unlock_irqrestore(&card->lock, flags);
1794 if (signal_pending(current)) {
1802 swptr = dmabuf->swptr;
1803 cnt = ali_get_free_write_space(state);
1804 /* Bound the maximum size to how much we can copy to the
1805 * dma buffer before we hit the end. If we have more to
1806 * copy then it will get done in a second pass of this
1807 * loop starting from the beginning of the buffer.
1809 if (cnt > (dmabuf->dmasize - swptr))
1810 cnt = dmabuf->dmasize - swptr;
1811 spin_unlock_irqrestore(&state->card->lock, flags);
1814 "ali_audio: ali_write: %d bytes available space\n",
1819 /* Lop off the last two bits to force the code to always
1820 * write in full samples. This keeps software that sets
1821 * O_NONBLOCK but doesn't check the return value of the
1822 * write call from getting things out of state where they
1823 * think a full 4 byte sample was written when really only
1824 * a portion was, resulting in odd sound and stereo
1830 // There is data waiting to be played
1832 * Force the trigger setting since we would
1833 * deadlock with it set any other way
1835 if (codec_independent_spdif_locked > 0) {
1836 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1837 ali_update_lvi(state, 2);
1839 if (controller_independent_spdif_locked > 0) {
1840 dmabuf->trigger = SPDIF_ENABLE_OUTPUT;
1841 ali_update_lvi(state, 3);
1844 dmabuf->trigger = PCM_ENABLE_OUTPUT;
1845 ali_update_lvi(state, 0);
1848 if (file->f_flags & O_NONBLOCK) {
1853 /* Not strictly correct but works */
1854 tmo = (dmabuf->dmasize * HZ * 2) / (dmabuf->rate * 4);
1855 /* There are two situations when sleep_on_timeout returns, one is when
1856 the interrupt is serviced correctly and the process is waked up by
1857 ISR ON TIME. Another is when timeout is expired, which means that
1858 either interrupt is NOT serviced correctly (pending interrupt) or it
1859 is TOO LATE for the process to be scheduled to run (scheduler latency)
1860 which results in a (potential) buffer underrun. And worse, there is
1861 NOTHING we can do to prevent it. */
1863 /* FIXME - do timeout handling here !! */
1865 if (signal_pending(current)) {
1872 if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {
1878 swptr = (swptr + cnt) % dmabuf->dmasize;
1879 spin_lock_irqsave(&state->card->lock, flags);
1880 if (PM_SUSPENDED(card)) {
1881 spin_unlock_irqrestore(&card->lock, flags);
1885 dmabuf->swptr = swptr;
1886 dmabuf->count += cnt;
1890 spin_unlock_irqrestore(&state->card->lock, flags);
1892 if (swptr % dmabuf->fragsize) {
1893 x = dmabuf->fragsize - (swptr % dmabuf->fragsize);
1894 memset(dmabuf->rawbuf + swptr, '\0', x);
1897 if (codec_independent_spdif_locked > 0) {
1898 ali_update_lvi(state, 2);
1900 if (controller_independent_spdif_locked > 0) {
1901 ali_update_lvi(state, 3);
1903 ali_update_lvi(state, 0);
1906 set_current_state(TASK_RUNNING);
1907 remove_wait_queue(&dmabuf->wait, &waita);
1911 /* No kernel lock - we have our own spinlock */
1912 static unsigned int ali_poll(struct file *file, struct poll_table_struct
1915 struct ali_state *state = (struct ali_state *) file->private_data;
1916 struct dmabuf *dmabuf = &state->dmabuf;
1917 unsigned long flags;
1918 unsigned int mask = 0;
1921 poll_wait(file, &dmabuf->wait, wait);
1922 spin_lock_irqsave(&state->card->lock, flags);
1923 ali_update_ptr(state);
1924 if (file->f_mode & FMODE_READ && dmabuf->enable & ADC_RUNNING) {
1925 if (dmabuf->count >= (signed) dmabuf->fragsize)
1926 mask |= POLLIN | POLLRDNORM;
1928 if (file->f_mode & FMODE_WRITE && (dmabuf->enable & (DAC_RUNNING|CODEC_SPDIFOUT_RUNNING|CONTROLLER_SPDIFOUT_RUNNING))) {
1929 if ((signed) dmabuf->dmasize >= dmabuf->count + (signed) dmabuf->fragsize)
1930 mask |= POLLOUT | POLLWRNORM;
1932 spin_unlock_irqrestore(&state->card->lock, flags);
1936 static int ali_mmap(struct file *file, struct vm_area_struct *vma)
1938 struct ali_state *state = (struct ali_state *) file->private_data;
1939 struct dmabuf *dmabuf = &state->dmabuf;
1943 if (vma->vm_flags & VM_WRITE) {
1944 if (!dmabuf->write_channel && (dmabuf->write_channel = state->card->alloc_pcm_channel(state->card)) == NULL) {
1949 if (vma->vm_flags & VM_READ) {
1950 if (!dmabuf->read_channel && (dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card)) == NULL) {
1955 if ((ret = prog_dmabuf(state, 0)) != 0)
1958 if (vma->vm_pgoff != 0)
1960 size = vma->vm_end - vma->vm_start;
1961 if (size > (PAGE_SIZE << dmabuf->buforder))
1964 if (remap_page_range(vma, vma->vm_start, virt_to_phys(dmabuf->rawbuf), size, vma->vm_page_prot))
1967 dmabuf->trigger = 0;
1974 static int ali_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
1976 struct ali_state *state = (struct ali_state *) file->private_data;
1977 struct ali_channel *c = NULL;
1978 struct dmabuf *dmabuf = &state->dmabuf;
1979 unsigned long flags;
1980 audio_buf_info abinfo;
1984 struct ac97_codec *codec = state->card->ac97_codec[0];
1986 printk("ali_audio: ali_ioctl, arg=0x%x, cmd=",
1987 arg ? *(int *) arg : 0);
1990 case OSS_GETVERSION:
1992 printk("OSS_GETVERSION\n");
1994 return put_user(SOUND_VERSION, (int *) arg);
1995 case SNDCTL_DSP_RESET:
1997 printk("SNDCTL_DSP_RESET\n");
1999 spin_lock_irqsave(&state->card->lock, flags);
2000 if (dmabuf->enable == DAC_RUNNING) {
2001 c = dmabuf->write_channel;
2004 if (dmabuf->enable == ADC_RUNNING) {
2005 c = dmabuf->read_channel;
2008 if (dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
2009 c = dmabuf->codec_spdifout_channel;
2010 __stop_spdifout(state);
2012 if (dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
2013 c = dmabuf->controller_spdifout_channel;
2014 __stop_spdifout(state);
2017 outb(2, state->card->iobase + c->port + OFF_CR); /* reset DMA machine */
2018 outl(virt_to_bus(&c->sg[0]),
2019 state->card->iobase + c->port + OFF_BDBAR);
2020 outb(0, state->card->iobase + c->port + OFF_CIV);
2021 outb(0, state->card->iobase + c->port + OFF_LVI);
2024 spin_unlock_irqrestore(&state->card->lock, flags);
2025 synchronize_irq(state->card->pci_dev->irq);
2027 dmabuf->swptr = dmabuf->hwptr = 0;
2028 dmabuf->count = dmabuf->total_bytes = 0;
2030 case SNDCTL_DSP_SYNC:
2032 printk("SNDCTL_DSP_SYNC\n");
2034 if (codec_independent_spdif_locked > 0) {
2035 if (dmabuf->enable != CODEC_SPDIFOUT_RUNNING
2036 || file->f_flags & O_NONBLOCK)
2038 if ((val = drain_spdifout(state, 1)))
2041 if (controller_independent_spdif_locked > 0) {
2042 if (dmabuf->enable !=
2043 CONTROLLER_SPDIFOUT_RUNNING
2044 || file->f_flags & O_NONBLOCK)
2046 if ((val = drain_spdifout(state, 1)))
2049 if (dmabuf->enable != DAC_RUNNING
2050 || file->f_flags & O_NONBLOCK)
2052 if ((val = drain_dac(state, 1)))
2056 dmabuf->total_bytes = 0;
2058 case SNDCTL_DSP_SPEED: /* set smaple rate */
2060 printk("SNDCTL_DSP_SPEED\n");
2062 if (get_user(val, (int *) arg))
2065 if (file->f_mode & FMODE_WRITE) {
2066 if ((state->card->ac97_status & SPDIF_ON)) { /* S/PDIF Enabled */
2067 /* RELTEK ALC650 only support 48000, need to check that */
2068 if (ali_valid_spdif_rate(codec, val)) {
2069 if (codec_independent_spdif_locked > 0) {
2070 ali_set_spdif_output(state, -1, 0);
2071 stop_spdifout(state);
2073 /* I add test codec independent spdif out */
2074 spin_lock_irqsave(&state->card->lock, flags);
2075 ali_set_codecspdifout_rate(state, val); // I modified
2076 spin_unlock_irqrestore(&state->card->lock, flags);
2077 /* Set S/PDIF transmitter rate. */
2078 i_scr = inl(state->card->iobase + ALI_SCR);
2079 if ((i_scr & 0x00300000) == 0x00100000) {
2080 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2082 if ((i_scr&0x00300000) == 0x00200000)
2084 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2086 if ((i_scr & 0x00300000) == 0x00300000) {
2087 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2089 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2094 if (!(state->card->ac97_status & SPDIF_ON)) {
2098 if (controller_independent_spdif_locked > 0)
2100 stop_spdifout(state);
2102 spin_lock_irqsave(&state->card->lock, flags);
2103 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
2104 spin_unlock_irqrestore(&state->card->lock, flags);
2107 ali_set_spdif_output(state, -1, 0);
2110 spin_lock_irqsave(&state->card->lock, flags);
2111 ali_set_dac_rate(state, val);
2112 spin_unlock_irqrestore(&state->card->lock, flags);
2113 /* Set S/PDIF transmitter rate. */
2114 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, val);
2115 if (!(state->card->ac97_status & SPDIF_ON))
2121 } else { /* Not a valid rate for S/PDIF, ignore it */
2127 spin_lock_irqsave(&state->card->lock, flags);
2128 ali_set_dac_rate(state, val);
2129 spin_unlock_irqrestore(&state->card->lock, flags);
2132 if (file->f_mode & FMODE_READ) {
2135 spin_lock_irqsave(&state->card->lock, flags);
2136 ali_set_adc_rate(state, val);
2137 spin_unlock_irqrestore(&state->card->lock, flags);
2140 return put_user(dmabuf->rate, (int *) arg);
2141 case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
2143 printk("SNDCTL_DSP_STEREO\n");
2145 if (dmabuf->enable & DAC_RUNNING) {
2148 if (dmabuf->enable & ADC_RUNNING) {
2151 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
2152 stop_spdifout(state);
2154 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
2155 stop_spdifout(state);
2157 return put_user(1, (int *) arg);
2158 case SNDCTL_DSP_GETBLKSIZE:
2159 if (file->f_mode & FMODE_WRITE) {
2160 if (codec_independent_spdif_locked > 0) {
2161 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)))
2164 if (controller_independent_spdif_locked > 0) {
2165 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)))
2168 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)))
2174 if (file->f_mode & FMODE_READ) {
2175 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)))
2179 printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize);
2181 return put_user(dmabuf->userfragsize, (int *) arg);
2182 case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format */
2184 printk("SNDCTL_DSP_GETFMTS\n");
2186 return put_user(AFMT_S16_LE, (int *) arg);
2187 case SNDCTL_DSP_SETFMT: /* Select sample format */
2189 printk("SNDCTL_DSP_SETFMT\n");
2191 return put_user(AFMT_S16_LE, (int *) arg);
2192 case SNDCTL_DSP_CHANNELS: // add support 4,6 channel
2194 printk("SNDCTL_DSP_CHANNELS\n");
2196 if (get_user(val, (int *) arg))
2199 if (dmabuf->enable & DAC_RUNNING) {
2202 if (dmabuf->enable & CODEC_SPDIFOUT_RUNNING) {
2203 stop_spdifout(state);
2205 if (dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING) {
2206 stop_spdifout(state);
2208 if (dmabuf->enable & ADC_RUNNING) {
2212 return put_user(state->card->channels, (int *) arg);
2215 i_scr = inl(state->card->iobase + ALI_SCR);
2216 /* Current # of channels enabled */
2217 if (i_scr & 0x00000100)
2219 else if (i_scr & 0x00000200)
2224 case 2: /* 2 channels is always supported */
2225 if (codec_independent_spdif_locked > 0) {
2226 outl(((i_scr & 0xfffffcff) | 0x00100000), (state->card->iobase + ALI_SCR));
2228 outl((i_scr & 0xfffffcff), (state->card->iobase + ALI_SCR));
2229 /* Do we need to change mixer settings???? */
2231 case 4: /* Supported on some chipsets, better check first */
2232 if (codec_independent_spdif_locked > 0) {
2233 outl(((i_scr & 0xfffffcff) | 0x00000100 | 0x00200000), (state->card->iobase + ALI_SCR));
2235 outl(((i_scr & 0xfffffcff) | 0x00000100), (state->card->iobase + ALI_SCR));
2237 case 6: /* Supported on some chipsets, better check first */
2238 if (codec_independent_spdif_locked > 0) {
2239 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000 | 0x00300000), (state->card->iobase + ALI_SCR));
2241 outl(((i_scr & 0xfffffcff) | 0x00000200 | 0x00008000), (state->card->iobase + ALI_SCR));
2243 default: /* nothing else is ever supported by the chipset */
2247 return put_user(val, (int *) arg);
2248 case SNDCTL_DSP_POST: /* the user has sent all data and is notifying us */
2249 /* we update the swptr to the end of the last sg segment then return */
2251 printk("SNDCTL_DSP_POST\n");
2253 if (codec_independent_spdif_locked > 0) {
2254 if (!dmabuf->ready || (dmabuf->enable != CODEC_SPDIFOUT_RUNNING))
2257 if (controller_independent_spdif_locked > 0) {
2258 if (!dmabuf->ready || (dmabuf->enable != CONTROLLER_SPDIFOUT_RUNNING))
2261 if (!dmabuf->ready || (dmabuf->enable != DAC_RUNNING))
2265 if ((dmabuf->swptr % dmabuf->fragsize) != 0) {
2266 val = dmabuf->fragsize - (dmabuf->swptr % dmabuf->fragsize);
2267 dmabuf->swptr += val;
2268 dmabuf->count += val;
2271 case SNDCTL_DSP_SUBDIVIDE:
2272 if (dmabuf->subdivision)
2274 if (get_user(val, (int *) arg))
2276 if (val != 1 && val != 2 && val != 4)
2279 printk("SNDCTL_DSP_SUBDIVIDE %d\n", val);
2281 dmabuf->subdivision = val;
2284 case SNDCTL_DSP_SETFRAGMENT:
2285 if (get_user(val, (int *) arg))
2287 dmabuf->ossfragsize = 1 << (val & 0xffff);
2288 dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
2289 if (!dmabuf->ossfragsize || !dmabuf->ossmaxfrags)
2292 * Bound the frag size into our allowed range of 256 - 4096
2294 if (dmabuf->ossfragsize < 256)
2295 dmabuf->ossfragsize = 256;
2296 else if (dmabuf->ossfragsize > 4096)
2297 dmabuf->ossfragsize = 4096;
2299 * The numfrags could be something reasonable, or it could
2300 * be 0xffff meaning "Give me as much as possible". So,
2301 * we check the numfrags * fragsize doesn't exceed our
2302 * 64k buffer limit, nor is it less than our 8k minimum.
2303 * If it fails either one of these checks, then adjust the
2304 * number of fragments, not the size of them. It's OK if
2305 * our number of fragments doesn't equal 32 or anything
2306 * like our hardware based number now since we are using
2307 * a different frag count for the hardware. Before we get
2308 * into this though, bound the maxfrags to avoid overflow
2309 * issues. A reasonable bound would be 64k / 256 since our
2310 * maximum buffer size is 64k and our minimum frag size is
2311 * 256. On the other end, our minimum buffer size is 8k and
2312 * our maximum frag size is 4k, so the lower bound should
2315 if (dmabuf->ossmaxfrags > 256)
2316 dmabuf->ossmaxfrags = 256;
2317 else if (dmabuf->ossmaxfrags < 2)
2318 dmabuf->ossmaxfrags = 2;
2319 val = dmabuf->ossfragsize * dmabuf->ossmaxfrags;
2320 while (val < 8192) {
2322 dmabuf->ossmaxfrags <<= 1;
2324 while (val > 65536) {
2326 dmabuf->ossmaxfrags >>= 1;
2330 printk("SNDCTL_DSP_SETFRAGMENT 0x%x, %d, %d\n", val,
2331 dmabuf->ossfragsize, dmabuf->ossmaxfrags);
2334 case SNDCTL_DSP_GETOSPACE:
2335 if (!(file->f_mode & FMODE_WRITE))
2337 if (codec_independent_spdif_locked > 0) {
2338 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
2341 if (controller_independent_spdif_locked > 0) {
2342 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
2345 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2349 spin_lock_irqsave(&state->card->lock, flags);
2350 ali_update_ptr(state);
2351 abinfo.fragsize = dmabuf->userfragsize;
2352 abinfo.fragstotal = dmabuf->userfrags;
2354 abinfo.bytes = dmabuf->dmasize;
2356 abinfo.bytes = ali_get_free_write_space(state);
2357 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2358 spin_unlock_irqrestore(&state->card->lock, flags);
2359 #if defined(DEBUG) || defined(DEBUG_MMAP)
2360 printk("SNDCTL_DSP_GETOSPACE %d, %d, %d, %d\n",
2361 abinfo.bytes, abinfo.fragsize, abinfo.fragments,
2364 return copy_to_user((void *) arg, &abinfo,
2365 sizeof(abinfo)) ? -EFAULT : 0;
2366 case SNDCTL_DSP_GETOPTR:
2367 if (!(file->f_mode & FMODE_WRITE))
2369 if (codec_independent_spdif_locked > 0) {
2370 if (!dmabuf->ready && (val = prog_dmabuf(state, 2)) != 0)
2373 if (controller_independent_spdif_locked > 0) {
2374 if (!dmabuf->ready && (val = prog_dmabuf(state, 3)) != 0)
2377 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2381 spin_lock_irqsave(&state->card->lock, flags);
2382 val = ali_get_free_write_space(state);
2383 cinfo.bytes = dmabuf->total_bytes;
2384 cinfo.ptr = dmabuf->hwptr;
2385 cinfo.blocks = val / dmabuf->userfragsize;
2386 if (codec_independent_spdif_locked > 0) {
2387 if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
2388 dmabuf->count += val;
2389 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2390 __ali_update_lvi(state, 2);
2393 if (controller_independent_spdif_locked > 0) {
2394 if (dmabuf->mapped && (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)) {
2395 dmabuf->count += val;
2396 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2397 __ali_update_lvi(state, 3);
2400 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_OUTPUT)) {
2401 dmabuf->count += val;
2402 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2403 __ali_update_lvi(state, 0);
2407 spin_unlock_irqrestore(&state->card->lock, flags);
2408 #if defined(DEBUG) || defined(DEBUG_MMAP)
2409 printk("SNDCTL_DSP_GETOPTR %d, %d, %d, %d\n", cinfo.bytes,
2410 cinfo.blocks, cinfo.ptr, dmabuf->count);
2412 return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
2413 case SNDCTL_DSP_GETISPACE:
2414 if (!(file->f_mode & FMODE_READ))
2416 if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)
2418 spin_lock_irqsave(&state->card->lock, flags);
2419 abinfo.bytes = ali_get_available_read_data(state);
2420 abinfo.fragsize = dmabuf->userfragsize;
2421 abinfo.fragstotal = dmabuf->userfrags;
2422 abinfo.fragments = abinfo.bytes / dmabuf->userfragsize;
2423 spin_unlock_irqrestore(&state->card->lock, flags);
2424 #if defined(DEBUG) || defined(DEBUG_MMAP)
2425 printk("SNDCTL_DSP_GETISPACE %d, %d, %d, %d\n",
2426 abinfo.bytes, abinfo.fragsize, abinfo.fragments,
2429 return copy_to_user((void *) arg, &abinfo,
2430 sizeof(abinfo)) ? -EFAULT : 0;
2431 case SNDCTL_DSP_GETIPTR:
2432 if (!(file->f_mode & FMODE_READ))
2434 if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)
2436 spin_lock_irqsave(&state->card->lock, flags);
2437 val = ali_get_available_read_data(state);
2438 cinfo.bytes = dmabuf->total_bytes;
2439 cinfo.blocks = val / dmabuf->userfragsize;
2440 cinfo.ptr = dmabuf->hwptr;
2441 if (dmabuf->mapped && (dmabuf->trigger & PCM_ENABLE_INPUT)) {
2442 dmabuf->count -= val;
2443 dmabuf->swptr = (dmabuf->swptr + val) % dmabuf->dmasize;
2444 __ali_update_lvi(state, 1);
2446 spin_unlock_irqrestore(&state->card->lock, flags);
2447 #if defined(DEBUG) || defined(DEBUG_MMAP)
2448 printk("SNDCTL_DSP_GETIPTR %d, %d, %d, %d\n", cinfo.bytes,
2449 cinfo.blocks, cinfo.ptr, dmabuf->count);
2451 return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
2452 case SNDCTL_DSP_NONBLOCK:
2454 printk("SNDCTL_DSP_NONBLOCK\n");
2456 file->f_flags |= O_NONBLOCK;
2458 case SNDCTL_DSP_GETCAPS:
2460 printk("SNDCTL_DSP_GETCAPS\n");
2462 return put_user(DSP_CAP_REALTIME | DSP_CAP_TRIGGER |
2463 DSP_CAP_MMAP | DSP_CAP_BIND, (int *) arg);
2464 case SNDCTL_DSP_GETTRIGGER:
2467 printk("SNDCTL_DSP_GETTRIGGER 0x%x\n", dmabuf->trigger);
2469 return put_user(dmabuf->trigger, (int *) arg);
2470 case SNDCTL_DSP_SETTRIGGER:
2471 if (get_user(val, (int *) arg))
2473 #if defined(DEBUG) || defined(DEBUG_MMAP)
2474 printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
2476 if (!(val & PCM_ENABLE_INPUT) && dmabuf->enable == ADC_RUNNING) {
2479 if (!(val & PCM_ENABLE_OUTPUT) && dmabuf->enable == DAC_RUNNING) {
2482 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CODEC_SPDIFOUT_RUNNING) {
2483 stop_spdifout(state);
2485 if (!(val & SPDIF_ENABLE_OUTPUT) && dmabuf->enable == CONTROLLER_SPDIFOUT_RUNNING) {
2486 stop_spdifout(state);
2488 dmabuf->trigger = val;
2489 if (val & PCM_ENABLE_OUTPUT && !(dmabuf->enable & DAC_RUNNING)) {
2490 if (!dmabuf->write_channel) {
2492 dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
2493 if (!dmabuf->write_channel)
2496 if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
2498 if (dmabuf->mapped) {
2499 spin_lock_irqsave(&state->card->lock, flags);
2500 ali_update_ptr(state);
2502 dmabuf->swptr = dmabuf->hwptr;
2503 dmabuf->count = ali_get_free_write_space(state);
2504 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2505 __ali_update_lvi(state, 0);
2506 spin_unlock_irqrestore(&state->card->lock,
2511 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CODEC_SPDIFOUT_RUNNING)) {
2512 if (!dmabuf->codec_spdifout_channel) {
2514 dmabuf->codec_spdifout_channel = state->card->alloc_codec_spdifout_channel(state->card);
2515 if (!dmabuf->codec_spdifout_channel)
2518 if (!dmabuf->ready && (ret = prog_dmabuf(state, 2)))
2520 if (dmabuf->mapped) {
2521 spin_lock_irqsave(&state->card->lock, flags);
2522 ali_update_ptr(state);
2524 dmabuf->swptr = dmabuf->hwptr;
2525 dmabuf->count = ali_get_free_write_space(state);
2526 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2527 __ali_update_lvi(state, 2);
2528 spin_unlock_irqrestore(&state->card->lock,
2531 start_spdifout(state);
2533 if (val & SPDIF_ENABLE_OUTPUT && !(dmabuf->enable & CONTROLLER_SPDIFOUT_RUNNING)) {
2534 if (!dmabuf->controller_spdifout_channel) {
2536 dmabuf->controller_spdifout_channel = state->card->alloc_controller_spdifout_channel(state->card);
2537 if (!dmabuf->controller_spdifout_channel)
2540 if (!dmabuf->ready && (ret = prog_dmabuf(state, 3)))
2542 if (dmabuf->mapped) {
2543 spin_lock_irqsave(&state->card->lock, flags);
2544 ali_update_ptr(state);
2546 dmabuf->swptr = dmabuf->hwptr;
2547 dmabuf->count = ali_get_free_write_space(state);
2548 dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
2549 __ali_update_lvi(state, 3);
2550 spin_unlock_irqrestore(&state->card->lock, flags);
2552 start_spdifout(state);
2554 if (val & PCM_ENABLE_INPUT && !(dmabuf->enable & ADC_RUNNING)) {
2555 if (!dmabuf->read_channel) {
2557 dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
2558 if (!dmabuf->read_channel)
2561 if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
2563 if (dmabuf->mapped) {
2564 spin_lock_irqsave(&state->card->lock,
2566 ali_update_ptr(state);
2567 dmabuf->swptr = dmabuf->hwptr;
2569 spin_unlock_irqrestore(&state->card->lock, flags);
2571 ali_update_lvi(state, 1);
2575 case SNDCTL_DSP_SETDUPLEX:
2577 printk("SNDCTL_DSP_SETDUPLEX\n");
2580 case SNDCTL_DSP_GETODELAY:
2581 if (!(file->f_mode & FMODE_WRITE))
2583 spin_lock_irqsave(&state->card->lock, flags);
2584 ali_update_ptr(state);
2585 val = dmabuf->count;
2586 spin_unlock_irqrestore(&state->card->lock, flags);
2588 printk("SNDCTL_DSP_GETODELAY %d\n", dmabuf->count);
2590 return put_user(val, (int *) arg);
2591 case SOUND_PCM_READ_RATE:
2593 printk("SOUND_PCM_READ_RATE %d\n", dmabuf->rate);
2595 return put_user(dmabuf->rate, (int *) arg);
2596 case SOUND_PCM_READ_CHANNELS:
2598 printk("SOUND_PCM_READ_CHANNELS\n");
2600 return put_user(2, (int *) arg);
2601 case SOUND_PCM_READ_BITS:
2603 printk("SOUND_PCM_READ_BITS\n");
2605 return put_user(AFMT_S16_LE, (int *) arg);
2606 case SNDCTL_DSP_SETSPDIF: /* Set S/PDIF Control register */
2608 printk("SNDCTL_DSP_SETSPDIF\n");
2610 if (get_user(val, (int *) arg))
2612 /* Check to make sure the codec supports S/PDIF transmitter */
2613 if ((state->card->ac97_features & 4)) {
2614 /* mask out the transmitter speed bits so the user can't set them */
2616 /* Add the current transmitter speed bits to the passed value */
2617 ret = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
2618 val |= (ret & 0x3000);
2619 ali_ac97_set(codec, AC97_SPDIF_CONTROL, val);
2620 if (ali_ac97_get(codec, AC97_SPDIF_CONTROL) != val) {
2621 printk(KERN_ERR "ali_audio: Unable to set S/PDIF configuration to 0x%04x.\n", val);
2627 printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
2629 return put_user(val, (int *) arg);
2630 case SNDCTL_DSP_GETSPDIF: /* Get S/PDIF Control register */
2632 printk("SNDCTL_DSP_GETSPDIF\n");
2634 if (get_user(val, (int *) arg))
2636 /* Check to make sure the codec supports S/PDIF transmitter */
2637 if (!(state->card->ac97_features & 4)) {
2639 printk(KERN_WARNING "ali_audio: S/PDIF transmitter not avalible.\n");
2643 val = ali_ac97_get(codec, AC97_SPDIF_CONTROL);
2646 return put_user(val, (int *) arg);
2647 //end add support spdif out
2648 //add support 4,6 channel
2649 case SNDCTL_DSP_GETCHANNELMASK:
2651 printk("SNDCTL_DSP_GETCHANNELMASK\n");
2653 if (get_user(val, (int *) arg))
2655 /* Based on AC'97 DAC support, not ICH hardware */
2656 val = DSP_BIND_FRONT;
2657 if (state->card->ac97_features & 0x0004)
2658 val |= DSP_BIND_SPDIF;
2659 if (state->card->ac97_features & 0x0080)
2660 val |= DSP_BIND_SURR;
2661 if (state->card->ac97_features & 0x0140)
2662 val |= DSP_BIND_CENTER_LFE;
2663 return put_user(val, (int *) arg);
2664 case SNDCTL_DSP_BIND_CHANNEL:
2666 printk("SNDCTL_DSP_BIND_CHANNEL\n");
2668 if (get_user(val, (int *) arg))
2670 if (val == DSP_BIND_QUERY) {
2671 val = DSP_BIND_FRONT; /* Always report this as being enabled */
2672 if (state->card->ac97_status & SPDIF_ON)
2673 val |= DSP_BIND_SPDIF;
2675 if (state->card->ac97_status & SURR_ON)
2676 val |= DSP_BIND_SURR;
2678 ac97_status & CENTER_LFE_ON)
2679 val |= DSP_BIND_CENTER_LFE;
2681 } else { /* Not a query, set it */
2682 if (!(file->f_mode & FMODE_WRITE))
2684 if (dmabuf->enable == DAC_RUNNING) {
2687 if (val & DSP_BIND_SPDIF) { /* Turn on SPDIF */
2688 /* Ok, this should probably define what slots
2689 * to use. For now, we'll only set it to the
2692 * non multichannel codec maps to slots 3&4
2693 * 2 channel codec maps to slots 7&8
2694 * 4 channel codec maps to slots 6&9
2695 * 6 channel codec maps to slots 10&11
2697 * there should be some way for the app to
2698 * select the slot assignment.
2700 i_scr = inl(state->card->iobase + ALI_SCR);
2701 if (codec_independent_spdif_locked > 0) {
2703 if ((i_scr & 0x00300000) == 0x00100000) {
2704 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2706 if ((i_scr & 0x00300000) == 0x00200000) {
2707 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2709 if ((i_scr & 0x00300000) == 0x00300000) {
2710 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2714 } else { /* codec spdif out (pcm out share ) */
2715 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, dmabuf->rate); //I do not modify
2718 if (!(state->card->ac97_status & SPDIF_ON))
2719 val &= ~DSP_BIND_SPDIF;
2723 /* Turn off S/PDIF if it was on */
2724 if (state->card->ac97_status & SPDIF_ON)
2725 ali_set_spdif_output(state, -1, 0);
2727 val & (DSP_BIND_FRONT | DSP_BIND_SURR |
2728 DSP_BIND_CENTER_LFE);
2730 case DSP_BIND_FRONT:
2733 case DSP_BIND_FRONT | DSP_BIND_SURR:
2736 case DSP_BIND_FRONT | DSP_BIND_SURR | DSP_BIND_CENTER_LFE:
2740 val = DSP_BIND_FRONT;
2744 ali_set_dac_channels(state, channels);
2745 /* check that they really got turned on */
2746 if (!state->card->ac97_status & SURR_ON)
2747 val &= ~DSP_BIND_SURR;
2749 ac97_status & CENTER_LFE_ON)
2750 val &= ~DSP_BIND_CENTER_LFE;
2753 return put_user(val, (int *) arg);
2754 case SNDCTL_DSP_MAPINBUF:
2755 case SNDCTL_DSP_MAPOUTBUF:
2756 case SNDCTL_DSP_SETSYNCRO:
2757 case SOUND_PCM_WRITE_FILTER:
2758 case SOUND_PCM_READ_FILTER:
2764 static int ali_open(struct inode *inode, struct file *file)
2767 struct ali_card *card = devs;
2768 struct ali_state *state = NULL;
2769 struct dmabuf *dmabuf = NULL;
2772 /* find an available virtual channel (instance of /dev/dsp) */
2774 while (card != NULL) {
2777 * If we are initializing and then fail, card could go
2778 * away unuexpectedly while we are in the for() loop.
2779 * So, check for card on each iteration before we check
2780 * for card->initializing to avoid a possible oops.
2781 * This usually only matters for times when the driver is
2782 * autoloaded by kmod.
2784 for (i = 0; i < 50 && card && card->initializing; i++) {
2785 set_current_state(TASK_UNINTERRUPTIBLE);
2786 schedule_timeout(HZ / 20);
2789 for (i = 0; i < NR_HW_CH && card && !card->initializing; i++) {
2790 if (card->states[i] == NULL) {
2791 state = card->states[i] = (struct ali_state *) kmalloc(sizeof(struct ali_state), GFP_KERNEL);
2794 memset(state, 0, sizeof(struct ali_state));
2795 dmabuf = &state->dmabuf;
2802 /* no more virtual channel avaiable */
2806 /* initialize the virtual channel */
2810 state->magic = ALI5455_STATE_MAGIC;
2811 init_waitqueue_head(&dmabuf->wait);
2812 init_MUTEX(&state->open_sem);
2813 file->private_data = state;
2814 dmabuf->trigger = 0;
2815 /* allocate hardware channels */
2816 if (file->f_mode & FMODE_READ) {
2817 if ((dmabuf->read_channel =
2818 card->alloc_rec_pcm_channel(card)) == NULL) {
2819 kfree(card->states[i]);
2820 card->states[i] = NULL;
2823 dmabuf->trigger |= PCM_ENABLE_INPUT;
2824 ali_set_adc_rate(state, 8000);
2826 if (file->f_mode & FMODE_WRITE) {
2827 if (codec_independent_spdif_locked > 0) {
2828 if ((dmabuf->codec_spdifout_channel = card->alloc_codec_spdifout_channel(card)) == NULL) {
2829 kfree(card->states[i]);
2830 card->states[i] = NULL;
2833 dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
2834 ali_set_codecspdifout_rate(state, codec_independent_spdif_locked); //It must add
2835 i_scr = inl(state->card->iobase + ALI_SCR);
2836 if ((i_scr & 0x00300000) == 0x00100000) {
2837 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2839 if ((i_scr & 0x00300000) == 0x00200000) {
2840 ali_set_spdif_output(state, AC97_EA_SPSA_6_9, codec_independent_spdif_locked);
2842 if ((i_scr & 0x00300000) == 0x00300000) {
2843 ali_set_spdif_output(state, AC97_EA_SPSA_10_11, codec_independent_spdif_locked);
2845 ali_set_spdif_output(state, AC97_EA_SPSA_7_8, codec_independent_spdif_locked);
2851 if (controller_independent_spdif_locked > 0) {
2852 if ((dmabuf->controller_spdifout_channel = card->alloc_controller_spdifout_channel(card)) == NULL) {
2853 kfree(card->states[i]);
2854 card->states[i] = NULL;
2857 dmabuf->trigger |= SPDIF_ENABLE_OUTPUT;
2858 ali_set_spdifout_rate(state, controller_independent_spdif_locked);
2860 if ((dmabuf->write_channel = card->alloc_pcm_channel(card)) == NULL) {
2861 kfree(card->states[i]);
2862 card->states[i] = NULL;
2865 /* Initialize to 8kHz? What if we don't support 8kHz? */
2866 /* Let's change this to check for S/PDIF stuff */
2868 dmabuf->trigger |= PCM_ENABLE_OUTPUT;
2869 if (codec_pcmout_share_spdif_locked) {
2870 ali_set_dac_rate(state, codec_pcmout_share_spdif_locked);
2871 ali_set_spdif_output(state, AC97_EA_SPSA_3_4, codec_pcmout_share_spdif_locked);
2873 ali_set_dac_rate(state, 8000);
2880 /* set default sample format. According to OSS Programmer's Guide /dev/dsp
2881 should be default to unsigned 8-bits, mono, with sample rate 8kHz and
2882 /dev/dspW will accept 16-bits sample, but we don't support those so we
2883 set it immediately to stereo and 16bit, which is all we do support */
2884 dmabuf->fmt |= ALI5455_FMT_16BIT | ALI5455_FMT_STEREO;
2885 dmabuf->ossfragsize = 0;
2886 dmabuf->ossmaxfrags = 0;
2887 dmabuf->subdivision = 0;
2888 state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
2889 outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
2890 outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
2894 static int ali_release(struct inode *inode, struct file *file)
2896 struct ali_state *state = (struct ali_state *) file->private_data;
2897 struct ali_card *card = state->card;
2898 struct dmabuf *dmabuf = &state->dmabuf;
2899 unsigned long flags;
2902 /* stop DMA state machine and free DMA buffers/channels */
2903 if (dmabuf->trigger & PCM_ENABLE_OUTPUT)
2904 drain_dac(state, 0);
2906 if (dmabuf->trigger & SPDIF_ENABLE_OUTPUT)
2907 drain_spdifout(state, 0);
2909 if (dmabuf->trigger & PCM_ENABLE_INPUT)
2912 spin_lock_irqsave(&card->lock, flags);
2913 dealloc_dmabuf(state);
2914 if (file->f_mode & FMODE_WRITE) {
2915 if (codec_independent_spdif_locked > 0) {
2916 state->card->free_pcm_channel(state->card, dmabuf->codec_spdifout_channel->num);
2918 if (controller_independent_spdif_locked > 0)
2919 state->card->free_pcm_channel(state->card,
2920 dmabuf->controller_spdifout_channel->num);
2921 else state->card->free_pcm_channel(state->card,
2922 dmabuf->write_channel->num);
2925 if (file->f_mode & FMODE_READ)
2926 state->card->free_pcm_channel(state->card, dmabuf->read_channel->num);
2928 state->card->states[state->virt] = NULL;
2930 spin_unlock_irqrestore(&card->lock, flags);
2935 static /*const */ struct file_operations ali_audio_fops = {
2944 release:ali_release,
2947 /* Read AC97 codec registers */
2948 static u16 ali_ac97_get(struct ac97_codec *dev, u8 reg)
2950 struct ali_card *card = dev->private_data;
2953 unsigned short int data = 0, count, addr1, addr2 = 0;
2955 spin_lock(&card->ac97_lock);
2956 while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
2961 for (count = 0; count < 0x7f; count++) {
2962 val = inb(card->iobase + ALI_CSPSR);
2968 spin_unlock(&card->ac97_lock);
2971 outw(reg, (card->iobase + ALI_CPR) + 2);
2972 for (count = 0; count < 0x7f; count++) {
2973 val = inb(card->iobase + ALI_CSPSR);
2975 data = inw(card->iobase + ALI_SPR);
2976 addr2 = inw((card->iobase + ALI_SPR) + 2);
2980 spin_unlock(&card->ac97_lock);
2985 return ((u16) data);
2988 /* write ac97 codec register */
2990 static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
2992 struct ali_card *card = dev->private_data;
2995 unsigned short int count;
2997 spin_lock(&card->ac97_lock);
2998 while (count1-- && (inl(card->iobase + ALI_CAS) & 0x80000000))
3001 for (count = 0; count < 0x7f; count++) {
3002 val = inb(card->iobase + ALI_CSPSR);
3006 if (count == 0x7f) {
3007 printk(KERN_WARNING "ali_ac97_set: AC97 codec register access timed out. \n");
3008 spin_unlock(&card->ac97_lock);
3011 outw(data, (card->iobase + ALI_CPR));
3012 outb(reg, (card->iobase + ALI_CPR) + 2);
3013 for (count = 0; count < 0x7f; count++) {
3014 val = inb(card->iobase + ALI_CSPSR);
3018 spin_unlock(&card->ac97_lock);
3020 printk(KERN_WARNING "ali_ac97_set: AC97 codec register access timed out. \n");
3024 /* OSS /dev/mixer file operation methods */
3026 static int ali_open_mixdev(struct inode *inode, struct file *file)
3029 int minor = minor(inode->i_rdev);
3030 struct ali_card *card = devs;
3031 for (card = devs; card != NULL; card = card->next) {
3033 * If we are initializing and then fail, card could go
3034 * away unuexpectedly while we are in the for() loop.
3035 * So, check for card on each iteration before we check
3036 * for card->initializing to avoid a possible oops.
3037 * This usually only matters for times when the driver is
3038 * autoloaded by kmod.
3040 for (i = 0; i < 50 && card && card->initializing; i++) {
3041 set_current_state(TASK_UNINTERRUPTIBLE);
3042 schedule_timeout(HZ / 20);
3044 for (i = 0; i < NR_AC97 && card && !card->initializing; i++)
3045 if (card->ac97_codec[i] != NULL
3046 && card->ac97_codec[i]->dev_mixer == minor) {
3047 file->private_data = card->ac97_codec[i];
3054 static int ali_ioctl_mixdev(struct inode *inode,
3056 unsigned int cmd, unsigned long arg)
3058 struct ac97_codec *codec = (struct ac97_codec *) file->private_data;
3059 return codec->mixer_ioctl(codec, cmd, arg);
3062 static /*const */ struct file_operations ali_mixer_fops = {
3065 ioctl:ali_ioctl_mixdev,
3066 open:ali_open_mixdev,
3069 /* AC97 codec initialisation. These small functions exist so we don't
3070 duplicate code between module init and apm resume */
3072 static inline int ali_ac97_exists(struct ali_card *card, int ac97_number)
3075 u32 reg = inl(card->iobase + ALI_RTSR);
3079 reg = inl(card->iobase + ALI_RTSR);
3083 outl(reg | 0x00000040,
3084 card->iobase + 0x34);
3092 reg = inl(card->iobase + ALI_RTSR);
3096 outl(reg | 0x00000080,
3097 card->iobase + 0x34);
3110 static inline int ali_ac97_enable_variable_rate(struct ac97_codec *codec)
3112 ali_ac97_set(codec, AC97_EXTENDED_STATUS, 9);
3113 ali_ac97_set(codec, AC97_EXTENDED_STATUS, ali_ac97_get(codec, AC97_EXTENDED_STATUS) | 0xE800);
3114 return (ali_ac97_get(codec, AC97_EXTENDED_STATUS) & 1);
3118 static int ali_ac97_probe_and_powerup(struct ali_card *card, struct ac97_codec *codec)
3120 /* Returns 0 on failure */
3123 if (ac97_probe_codec(codec) == 0)
3125 /* ac97_probe_codec is success ,then begin to init codec */
3126 ali_ac97_set(codec, AC97_RESET, 0xffff);
3127 if (card->channel[0].used == 1) {
3128 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
3129 ali_ac97_set(codec, AC97_LINEIN_VOL, 0x0808);
3130 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
3133 if (card->channel[2].used == 1) //if MICin then init codec
3135 ali_ac97_set(codec, AC97_RECORD_SELECT, 0x0000);
3136 ali_ac97_set(codec, AC97_MIC_VOL, 0x8808);
3137 ali_ac97_set(codec, AC97_RECORD_GAIN, 0x0F0F);
3138 ali_ac97_set(codec, AC97_RECORD_GAIN_MIC, 0x0000);
3141 ali_ac97_set(codec, AC97_MASTER_VOL_STEREO, 0x0000);
3142 ali_ac97_set(codec, AC97_HEADPHONE_VOL, 0x0000);
3143 ali_ac97_set(codec, AC97_PCMOUT_VOL, 0x0000);
3144 ali_ac97_set(codec, AC97_CD_VOL, 0x0808);
3145 ali_ac97_set(codec, AC97_VIDEO_VOL, 0x0808);
3146 ali_ac97_set(codec, AC97_AUX_VOL, 0x0808);
3147 ali_ac97_set(codec, AC97_PHONE_VOL, 0x8048);
3148 ali_ac97_set(codec, AC97_PCBEEP_VOL, 0x0000);
3149 ali_ac97_set(codec, AC97_GENERAL_PURPOSE, AC97_GP_MIX);
3150 ali_ac97_set(codec, AC97_MASTER_VOL_MONO, 0x0000);
3151 ali_ac97_set(codec, 0x38, 0x0000);
3152 addr = ali_ac97_get(codec, 0x2a);
3153 ali_ac97_set(codec, 0x2a, addr | 0x0001);
3154 addr = ali_ac97_get(codec, 0x2a);
3155 addr = ali_ac97_get(codec, 0x28);
3156 ali_ac97_set(codec, 0x2c, 0xbb80);
3157 addr = ali_ac97_get(codec, 0x2c);
3158 /* power it all up */
3159 ali_ac97_set(codec, AC97_POWER_CONTROL,
3160 ali_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00);
3161 /* wait for analog ready */
3162 for (i = 10; i && ((ali_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); i--) {
3163 set_current_state(TASK_UNINTERRUPTIBLE);
3164 schedule_timeout(HZ / 20);
3172 /* I clone ali5455(2.4.7 ) not clone i810_audio(2.4.18) */
3174 static int ali_reset_5455(struct ali_card *card)
3176 outl(0x80000003, card->iobase + ALI_SCR);
3177 outl(0x83838383, card->iobase + ALI_FIFOCR1);
3178 outl(0x83838383, card->iobase + ALI_FIFOCR2);
3179 if (controller_pcmout_share_spdif_locked > 0) {
3180 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
3181 card->iobase + ALI_SPDIFICS);
3182 outl(0x0408000a, card->iobase + ALI_INTERFACECR);
3184 if (codec_independent_spdif_locked > 0) {
3185 outl((inl(card->iobase + ALI_SCR) | 0x00100000), card->iobase + ALI_SCR); // now I select slot 7 & 8
3186 outl(0x00200000, card->iobase + ALI_INTERFACECR); //enable codec independent spdifout
3188 outl(0x04080002, card->iobase + ALI_INTERFACECR);
3191 outl(0x00000000, card->iobase + ALI_INTERRUPTCR);
3192 outl(0x00000000, card->iobase + ALI_INTERRUPTSR);
3193 if (controller_independent_spdif_locked > 0)
3194 outl((inl(card->iobase + ALI_SPDIFICS) | 0x00000001),
3195 card->iobase + ALI_SPDIFICS);
3200 static int ali_ac97_random_init_stuff(struct ali_card
3203 u32 reg = inl(card->iobase + ALI_SCR);
3205 reg = inl(card->iobase + ALI_SCR);
3206 if ((reg & 2) == 0) /* Cold required */
3209 reg |= 1; /* Warm */
3210 reg &= ~0x80000000; /* ACLink on */
3211 outl(reg, card->iobase + ALI_SCR);
3214 if ((inl(card->iobase + 0x18) & (1 << 1)) == 0)
3216 current->state = TASK_UNINTERRUPTIBLE;
3217 schedule_timeout(HZ / 20);
3221 printk(KERN_ERR "ali_audio: AC'97 reset failed.\n");
3225 set_current_state(TASK_UNINTERRUPTIBLE);
3226 schedule_timeout(HZ / 2);
3230 /* AC97 codec initialisation. */
3232 static int __init ali_ac97_init(struct ali_card *card)
3235 int total_channels = 0;
3236 struct ac97_codec *codec;
3239 if (!ali_ac97_random_init_stuff(card))
3242 /* Number of channels supported */
3243 /* What about the codec? Just because the ICH supports */
3244 /* multiple channels doesn't mean the codec does. */
3245 /* we'll have to modify this in the codec section below */
3246 /* to reflect what the codec has. */
3247 /* ICH and ICH0 only support 2 channels so don't bother */
3249 inl(card->iobase + ALI_CPR);
3252 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3254 /* Assume codec isn't available until we go through the
3256 card->ac97_codec[num_ac97] = NULL;
3257 /* The ICH programmer's reference says you should */
3258 /* check the ready status before probing. So we chk */
3259 /* What do we do if it's not ready? Wait and try */
3260 /* again, or abort? */
3261 if (!ali_ac97_exists(card, num_ac97)) {
3263 printk(KERN_ERR "ali_audio: Primary codec not ready.\n");
3267 if ((codec = ac97_alloc_codec()) == NULL)
3269 /* initialize some basic codec information, other fields will be filled
3270 in ac97_probe_codec */
3271 codec->private_data = card;
3272 codec->id = num_ac97;
3273 codec->codec_read = ali_ac97_get;
3274 codec->codec_write = ali_ac97_set;
3275 if (!ali_ac97_probe_and_powerup(card, codec)) {
3276 printk(KERN_ERR "ali_audio: timed out waiting for codec %d analog ready",
3279 break; /* it didn't work */
3282 /* Store state information about S/PDIF transmitter */
3283 card->ac97_status = 0;
3284 /* Don't attempt to get eid until powerup is complete */
3285 eid = ali_ac97_get(codec, AC97_EXTENDED_ID);
3286 if (eid == 0xFFFF) {
3287 printk(KERN_ERR "ali_audio: no codec attached ?\n");
3292 card->ac97_features = eid;
3293 /* Now check the codec for useful features to make up for
3294 the dumbness of the ali5455 hardware engine */
3295 if (!(eid & 0x0001))
3297 "ali_audio: only 48Khz playback available.\n");
3299 if (!ali_ac97_enable_variable_rate(codec)) {
3301 "ali_audio: Codec refused to allow VRA, using 48Khz only.\n");
3302 card->ac97_features &= ~1;
3306 /* Determine how many channels the codec(s) support */
3307 /* - The primary codec always supports 2 */
3308 /* - If the codec supports AMAP, surround DACs will */
3309 /* automaticlly get assigned to slots. */
3310 /* * Check for surround DACs and increment if */
3312 /* - Else check if the codec is revision 2.2 */
3313 /* * If surround DACs exist, assign them to slots */
3314 /* and increment channel count. */
3316 /* All of this only applies to ICH2 and above. ICH */
3317 /* and ICH0 only support 2 channels. ICH2 will only */
3318 /* support multiple codecs in a "split audio" config. */
3319 /* as described above. */
3321 /* TODO: Remove all the debugging messages! */
3323 if ((eid & 0xc000) == 0) /* primary codec */
3324 total_channels += 2;
3325 if ((codec->dev_mixer = register_sound_mixer(&ali_mixer_fops, -1)) < 0) {
3326 printk(KERN_ERR "ali_audio: couldn't register mixer!\n");
3330 card->ac97_codec[num_ac97] = codec;
3332 /* pick the minimum of channels supported by ICHx or codec(s) */
3333 card->channels = (card->channels > total_channels) ? total_channels : card->channels;
3337 static void __init ali_configure_clocking(void)
3339 struct ali_card *card;
3340 struct ali_state *state;
3341 struct dmabuf *dmabuf;
3342 unsigned int i, offset, new_offset;
3343 unsigned long flags;
3346 /* We could try to set the clocking for multiple cards, but can you even have
3347 * more than one ali in a machine? Besides, clocking is global, so unless
3348 * someone actually thinks more than one ali in a machine is possible and
3349 * decides to rewrite that little bit, setting the rate for more than one card
3350 * is a waste of time.
3353 state = card->states[0] = (struct ali_state *)
3354 kmalloc(sizeof(struct ali_state), GFP_KERNEL);
3357 memset(state, 0, sizeof(struct ali_state));
3358 dmabuf = &state->dmabuf;
3359 dmabuf->write_channel = card->alloc_pcm_channel(card);
3362 state->magic = ALI5455_STATE_MAGIC;
3363 init_waitqueue_head(&dmabuf->wait);
3364 init_MUTEX(&state->open_sem);
3365 dmabuf->fmt = ALI5455_FMT_STEREO | ALI5455_FMT_16BIT;
3366 dmabuf->trigger = PCM_ENABLE_OUTPUT;
3367 ali_set_dac_rate(state, 48000);
3368 if (prog_dmabuf(state, 0) != 0)
3369 goto config_out_nodmabuf;
3371 if (dmabuf->dmasize < 16384)
3374 dmabuf->count = dmabuf->dmasize;
3375 outb(31, card->iobase + dmabuf->write_channel->port + OFF_LVI);
3377 local_irq_save(flags);
3379 offset = ali_get_dma_addr(state, 0);
3381 new_offset = ali_get_dma_addr(state, 0);
3384 outb(2, card->iobase + dmabuf->write_channel->port + OFF_CR);
3385 local_irq_restore(flags);
3387 i = new_offset - offset;
3392 if (i > 48500 || i < 47500) {
3393 clocking = clocking * clocking / i;
3396 dealloc_dmabuf(state);
3397 config_out_nodmabuf:
3398 state->card->free_pcm_channel(state->card, state->dmabuf. write_channel->num);
3400 card->states[0] = NULL;
3404 /* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered
3405 until "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
3407 static int __init ali_probe(struct pci_dev *pci_dev, const struct pci_device_id
3410 struct ali_card *card;
3411 if (pci_enable_device(pci_dev))
3413 if (pci_set_dma_mask(pci_dev, ALI5455_DMA_MASK)) {
3414 printk(KERN_ERR "ali5455: architecture does not support"
3415 " 32bit PCI busmaster DMA\n");
3419 if ((card = kmalloc(sizeof(struct ali_card), GFP_KERNEL)) == NULL) {
3420 printk(KERN_ERR "ali_audio: out of memory\n");
3423 memset(card, 0, sizeof(*card));
3424 card->initializing = 1;
3425 card->iobase = pci_resource_start(pci_dev, 0);
3426 card->pci_dev = pci_dev;
3427 card->pci_id = pci_id->device;
3428 card->irq = pci_dev->irq;
3430 card->magic = ALI5455_CARD_MAGIC;
3432 card->pm_suspended = 0;
3434 spin_lock_init(&card->lock);
3435 spin_lock_init(&card->ac97_lock);
3437 pci_set_master(pci_dev);
3438 printk(KERN_INFO "ali: %s found at IO 0x%04lx, IRQ %d\n",
3439 card_names[pci_id->driver_data], card->iobase, card->irq);
3440 card->alloc_pcm_channel = ali_alloc_pcm_channel;
3441 card->alloc_rec_pcm_channel = ali_alloc_rec_pcm_channel;
3442 card->alloc_rec_mic_channel = ali_alloc_rec_mic_channel;
3443 card->alloc_codec_spdifout_channel = ali_alloc_codec_spdifout_channel;
3444 card->alloc_controller_spdifout_channel = ali_alloc_controller_spdifout_channel;
3445 card->free_pcm_channel = ali_free_pcm_channel;
3446 card->channel[0].offset = 0;
3447 card->channel[0].port = 0x40;
3448 card->channel[0].num = 0;
3449 card->channel[1].offset = 0;
3450 card->channel[1].port = 0x50;
3451 card->channel[1].num = 1;
3452 card->channel[2].offset = 0;
3453 card->channel[2].port = 0x60;
3454 card->channel[2].num = 2;
3455 card->channel[3].offset = 0;
3456 card->channel[3].port = 0x70;
3457 card->channel[3].num = 3;
3458 card->channel[4].offset = 0;
3459 card->channel[4].port = 0xb0;
3460 card->channel[4].num = 4;
3461 /* claim our iospace and irq */
3462 request_region(card->iobase, 256, card_names[pci_id->driver_data]);
3463 if (request_irq(card->irq, &ali_interrupt, SA_SHIRQ,
3464 card_names[pci_id->driver_data], card)) {
3465 printk(KERN_ERR "ali_audio: unable to allocate irq %d\n",
3467 release_region(card->iobase, 256);
3472 if (ali_reset_5455(card) <= 0) {
3473 unregister_sound_dsp(card->dev_audio);
3474 release_region(card->iobase, 256);
3475 free_irq(card->irq, card);
3480 /* initialize AC97 codec and register /dev/mixer */
3481 if (ali_ac97_init(card) < 0) {
3482 release_region(card->iobase, 256);
3483 free_irq(card->irq, card);
3488 pci_set_drvdata(pci_dev, card);
3490 if (clocking == 0) {
3492 ali_configure_clocking();
3495 /* register /dev/dsp */
3496 if ((card->dev_audio = register_sound_dsp(&ali_audio_fops, -1)) < 0) {
3498 printk(KERN_ERR"ali_audio: couldn't register DSP device!\n");
3499 release_region(card->iobase, 256);
3500 free_irq(card->irq, card);
3501 for (i = 0; i < NR_AC97; i++)
3502 if (card->ac97_codec[i] != NULL) {
3503 unregister_sound_mixer(card->ac97_codec[i]->dev_mixer);
3504 kfree(card->ac97_codec[i]);
3509 card->initializing = 0;
3513 static void __devexit ali_remove(struct pci_dev *pci_dev)
3516 struct ali_card *card = pci_get_drvdata(pci_dev);
3517 /* free hardware resources */
3518 free_irq(card->irq, devs);
3519 release_region(card->iobase, 256);
3520 /* unregister audio devices */
3521 for (i = 0; i < NR_AC97; i++)
3522 if (card->ac97_codec[i] != NULL) {
3523 unregister_sound_mixer(card->ac97_codec[i]->
3525 ac97_release_codec(card->ac97_codec[i]);
3526 card->ac97_codec[i] = NULL;
3528 unregister_sound_dsp(card->dev_audio);
3533 static int ali_pm_suspend(struct pci_dev *dev, u32 pm_state)
3535 struct ali_card *card = pci_get_drvdata(dev);
3536 struct ali_state *state;
3537 unsigned long flags;
3538 struct dmabuf *dmabuf;
3543 spin_lock_irqsave(&card->lock, flags);
3544 card->pm_suspended = 1;
3545 for (i = 0; i < NR_HW_CH; i++) {
3546 state = card->states[i];
3549 /* this happens only if there are open files */
3550 dmabuf = &state->dmabuf;
3551 if (dmabuf->enable & DAC_RUNNING ||
3553 && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) {
3554 state->pm_saved_dac_rate = dmabuf->rate;
3557 state->pm_saved_dac_rate = 0;
3559 if (dmabuf->enable & ADC_RUNNING) {
3560 state->pm_saved_adc_rate = dmabuf->rate;
3563 state->pm_saved_adc_rate = 0;
3566 dmabuf->swptr = dmabuf->hwptr = 0;
3567 dmabuf->count = dmabuf->total_bytes = 0;
3570 spin_unlock_irqrestore(&card->lock, flags);
3571 /* save mixer settings */
3572 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3573 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3576 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
3577 if ((supported_mixer(codec, i)) && (codec->read_mixer)) {
3578 card->pm_saved_mixer_settings[i][num_ac97] = codec->read_mixer(codec, i);
3582 pci_save_state(dev, card->pm_save_state); /* XXX do we need this? */
3583 pci_disable_device(dev); /* disable busmastering */
3584 pci_set_power_state(dev, 3); /* Zzz. */
3589 static int ali_pm_resume(struct pci_dev *dev)
3591 int num_ac97, i = 0;
3592 struct ali_card *card = pci_get_drvdata(dev);
3593 pci_enable_device(dev);
3594 pci_restore_state(dev, card->pm_save_state);
3595 /* observation of a toshiba portege 3440ct suggests that the
3596 hardware has to be more or less completely reinitialized from
3597 scratch after an apm suspend. Works For Me. -dan */
3598 ali_ac97_random_init_stuff(card);
3599 for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) {
3600 struct ac97_codec *codec = card->ac97_codec[num_ac97];
3601 /* check they haven't stolen the hardware while we were
3603 if (!codec || !ali_ac97_exists(card, num_ac97)) {
3609 if (!ali_ac97_probe_and_powerup(card, codec))
3611 if ((card->ac97_features & 0x0001)) {
3612 /* at probe time we found we could do variable
3613 rates, but APM suspend has made it forget
3614 its magical powers */
3615 if (!ali_ac97_enable_variable_rate(codec))
3618 /* we lost our mixer settings, so restore them */
3619 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
3620 if (supported_mixer(codec, i)) {
3621 int val = card->pm_saved_mixer_settings[i][num_ac97];
3622 codec->mixer_state[i] = val;
3623 codec->write_mixer(codec, i,
3625 ((val >> 8) & 0xff));
3630 /* we need to restore the sample rate from whatever it was */
3631 for (i = 0; i < NR_HW_CH; i++) {
3632 struct ali_state *state = card->states[i];
3634 if (state->pm_saved_adc_rate)
3635 ali_set_adc_rate(state, state->pm_saved_adc_rate);
3636 if (state->pm_saved_dac_rate)
3637 ali_set_dac_rate(state, state->pm_saved_dac_rate);
3641 card->pm_suspended = 0;
3642 /* any processes that were reading/writing during the suspend
3643 probably ended up here */
3644 for (i = 0; i < NR_HW_CH; i++) {
3645 struct ali_state *state = card->states[i];
3647 wake_up(&state->dmabuf.wait);
3651 #endif /* CONFIG_PM */
3654 MODULE_DESCRIPTION("ALI 5455 audio support");
3655 MODULE_LICENSE("GPL");
3656 MODULE_PARM(clocking, "i");
3657 MODULE_PARM(strict_clocking, "i");
3658 MODULE_PARM(codec_pcmout_share_spdif_locked, "i");
3659 MODULE_PARM(codec_independent_spdif_locked, "i");
3660 MODULE_PARM(controller_pcmout_share_spdif_locked, "i");
3661 MODULE_PARM(controller_independent_spdif_locked, "i");
3662 #define ALI5455_MODULE_NAME "ali5455"
3663 static struct pci_driver ali_pci_driver = {
3664 name:ALI5455_MODULE_NAME, id_table:ali_pci_tbl, probe:ali_probe,
3665 remove:__devexit_p(ali_remove),
3667 suspend:ali_pm_suspend, resume:ali_pm_resume,
3668 #endif /* CONFIG_PM */
3671 static int __init ali_init_module(void)
3673 printk(KERN_INFO "ALI 5455 + AC97 Audio, version "
3674 DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
3676 if (codec_independent_spdif_locked > 0) {
3677 if (codec_independent_spdif_locked == 32000
3678 || codec_independent_spdif_locked == 44100
3679 || codec_independent_spdif_locked == 48000) {
3680 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_independent_spdif_locked);
3682 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3683 codec_independent_spdif_locked = 0;
3686 if (controller_independent_spdif_locked > 0) {
3687 if (controller_independent_spdif_locked == 32000
3688 || controller_independent_spdif_locked == 44100
3689 || controller_independent_spdif_locked == 48000) {
3690 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", controller_independent_spdif_locked);
3692 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3693 controller_independent_spdif_locked = 0;
3697 if (codec_pcmout_share_spdif_locked > 0) {
3698 if (codec_pcmout_share_spdif_locked == 32000
3699 || codec_pcmout_share_spdif_locked == 44100
3700 || codec_pcmout_share_spdif_locked == 48000) {
3701 printk(KERN_INFO "ali_audio: Enabling S/PDIF at sample rate %dHz.\n", codec_pcmout_share_spdif_locked);
3703 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3704 codec_pcmout_share_spdif_locked = 0;
3707 if (controller_pcmout_share_spdif_locked > 0) {
3708 if (controller_pcmout_share_spdif_locked == 32000
3709 || controller_pcmout_share_spdif_locked == 44100
3710 || controller_pcmout_share_spdif_locked == 48000) {
3711 printk(KERN_INFO "ali_audio: Enabling controller S/PDIF at sample rate %dHz.\n", controller_pcmout_share_spdif_locked);
3713 printk(KERN_INFO "ali_audio: S/PDIF can only be locked to 32000, 44100, or 48000Hz.\n");
3714 controller_pcmout_share_spdif_locked = 0;
3717 if (!pci_register_driver(&ali_pci_driver)) {
3718 pci_unregister_driver(&ali_pci_driver);
3724 static void __exit ali_cleanup_module(void)
3726 pci_unregister_driver(&ali_pci_driver);
3729 module_init(ali_init_module);
3730 module_exit(ali_cleanup_module);