Lines Matching refs:aacirun

180 aaci_chan_wait_ready(struct aaci_runtime *aacirun, unsigned long mask)
187 val = readl(aacirun->base + AACI_SR);
209 struct aaci_runtime *aacirun = &aaci->capture;
213 if (!aacirun->substream || !aacirun->start) {
215 writel(0, aacirun->base + AACI_IE);
219 spin_lock(&aacirun->lock);
221 ptr = aacirun->ptr;
223 unsigned int len = aacirun->fifo_bytes;
226 if (aacirun->bytes <= 0) {
227 aacirun->bytes += aacirun->period;
230 if (!(aacirun->cr & CR_EN))
233 val = readl(aacirun->base + AACI_SR);
239 aacirun->bytes -= len;
247 : "r" (aacirun->fifo)
250 if (ptr >= aacirun->end)
251 ptr = aacirun->start;
255 aacirun->ptr = ptr;
257 spin_unlock(&aacirun->lock);
260 snd_pcm_period_elapsed(aacirun->substream);
269 struct aaci_runtime *aacirun = &aaci->playback;
273 if (!aacirun->substream || !aacirun->start) {
275 writel(0, aacirun->base + AACI_IE);
279 spin_lock(&aacirun->lock);
281 ptr = aacirun->ptr;
283 unsigned int len = aacirun->fifo_bytes;
286 if (aacirun->bytes <= 0) {
287 aacirun->bytes += aacirun->period;
290 if (!(aacirun->cr & CR_EN))
293 val = readl(aacirun->base + AACI_SR);
299 aacirun->bytes -= len;
307 : "r" (aacirun->fifo)
310 if (ptr >= aacirun->end)
311 ptr = aacirun->start;
315 aacirun->ptr = ptr;
317 spin_unlock(&aacirun->lock);
320 snd_pcm_period_elapsed(aacirun->substream);
403 struct aaci_runtime *aacirun;
407 aacirun = &aaci->playback;
409 aacirun = &aaci->capture;
412 aacirun->substream = substream;
413 runtime->private_data = aacirun;
415 runtime->hw.rates = aacirun->pcm->rates;
429 if (aacirun->pcm->r[1].slots)
459 struct aaci_runtime *aacirun = substream->runtime->private_data;
461 WARN_ON(aacirun->cr & CR_EN);
463 aacirun->substream = NULL;
475 struct aaci_runtime *aacirun = substream->runtime->private_data;
480 WARN_ON(aacirun->cr & CR_EN);
482 if (aacirun->pcm_open)
483 snd_ac97_pcm_close(aacirun->pcm);
484 aacirun->pcm_open = 0;
499 struct aaci_runtime *aacirun = substream->runtime->private_data;
507 if (aacirun->pcm_open) {
508 snd_ac97_pcm_close(aacirun->pcm);
509 aacirun->pcm_open = 0;
516 err = snd_ac97_pcm_open(aacirun->pcm, rate, channels,
517 aacirun->pcm->r[dbl].slots);
519 aacirun->pcm_open = err == 0;
520 aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16;
521 aacirun->cr |= channels_to_slotmask[channels + dbl * 2];
528 aacirun->fifo_bytes = aaci->fifo_depth * 4 / 2;
536 struct aaci_runtime *aacirun = runtime->private_data;
538 aacirun->period = snd_pcm_lib_period_bytes(substream);
539 aacirun->start = runtime->dma_area;
540 aacirun->end = aacirun->start + snd_pcm_lib_buffer_bytes(substream);
541 aacirun->ptr = aacirun->start;
542 aacirun->bytes = aacirun->period;
550 struct aaci_runtime *aacirun = runtime->private_data;
551 ssize_t bytes = aacirun->ptr - aacirun->start;
560 static void aaci_pcm_playback_stop(struct aaci_runtime *aacirun)
564 ie = readl(aacirun->base + AACI_IE);
566 writel(ie, aacirun->base + AACI_IE);
567 aacirun->cr &= ~CR_EN;
568 aaci_chan_wait_ready(aacirun, SR_TXB);
569 writel(aacirun->cr, aacirun->base + AACI_TXCR);
572 static void aaci_pcm_playback_start(struct aaci_runtime *aacirun)
576 aaci_chan_wait_ready(aacirun, SR_TXB);
577 aacirun->cr |= CR_EN;
579 ie = readl(aacirun->base + AACI_IE);
581 writel(ie, aacirun->base + AACI_IE);
582 writel(aacirun->cr, aacirun->base + AACI_TXCR);
587 struct aaci_runtime *aacirun = substream->runtime->private_data;
591 spin_lock_irqsave(&aacirun->lock, flags);
595 aaci_pcm_playback_start(aacirun);
599 aaci_pcm_playback_start(aacirun);
603 aaci_pcm_playback_stop(aacirun);
607 aaci_pcm_playback_stop(aacirun);
620 spin_unlock_irqrestore(&aacirun->lock, flags);
635 static void aaci_pcm_capture_stop(struct aaci_runtime *aacirun)
639 aaci_chan_wait_ready(aacirun, SR_RXB);
641 ie = readl(aacirun->base + AACI_IE);
643 writel(ie, aacirun->base+AACI_IE);
645 aacirun->cr &= ~CR_EN;
647 writel(aacirun->cr, aacirun->base + AACI_RXCR);
650 static void aaci_pcm_capture_start(struct aaci_runtime *aacirun)
654 aaci_chan_wait_ready(aacirun, SR_RXB);
658 aacirun->cr |= 0xf << 17;
661 aacirun->cr |= CR_EN;
662 writel(aacirun->cr, aacirun->base + AACI_RXCR);
664 ie = readl(aacirun->base + AACI_IE);
666 writel(ie, aacirun->base + AACI_IE);
671 struct aaci_runtime *aacirun = substream->runtime->private_data;
675 spin_lock_irqsave(&aacirun->lock, flags);
679 aaci_pcm_capture_start(aacirun);
683 aaci_pcm_capture_start(aacirun);
687 aaci_pcm_capture_stop(aacirun);
691 aaci_pcm_capture_stop(aacirun);
704 spin_unlock_irqrestore(&aacirun->lock, flags);
938 struct aaci_runtime *aacirun = &aaci->playback;
945 writel(CR_FEN | CR_SZ16 | CR_EN, aacirun->base + AACI_TXCR);
947 for (i = 0; !(readl(aacirun->base + AACI_SR) & SR_TXFF) && i < 4096; i++)
948 writel(0, aacirun->fifo);
950 writel(0, aacirun->base + AACI_TXCR);