Lines Matching refs:aacirun

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