Lines Matching refs:aacirun

183 aaci_chan_wait_ready(struct aaci_runtime *aacirun, unsigned long mask)  in aaci_chan_wait_ready()  argument
190 val = readl(aacirun->base + AACI_SR); in aaci_chan_wait_ready()
212 struct aaci_runtime *aacirun = &aaci->capture; in aaci_fifo_irq() local
216 if (!aacirun->substream || !aacirun->start) { in aaci_fifo_irq()
218 writel(0, aacirun->base + AACI_IE); in aaci_fifo_irq()
222 spin_lock(&aacirun->lock); in aaci_fifo_irq()
224 ptr = aacirun->ptr; in aaci_fifo_irq()
226 unsigned int len = aacirun->fifo_bytes; in aaci_fifo_irq()
229 if (aacirun->bytes <= 0) { in aaci_fifo_irq()
230 aacirun->bytes += aacirun->period; in aaci_fifo_irq()
233 if (!(aacirun->cr & CR_EN)) in aaci_fifo_irq()
236 val = readl(aacirun->base + AACI_SR); in aaci_fifo_irq()
242 aacirun->bytes -= len; in aaci_fifo_irq()
250 : "r" (aacirun->fifo) in aaci_fifo_irq()
253 if (ptr >= aacirun->end) in aaci_fifo_irq()
254 ptr = aacirun->start; in aaci_fifo_irq()
258 aacirun->ptr = ptr; in aaci_fifo_irq()
260 spin_unlock(&aacirun->lock); in aaci_fifo_irq()
263 snd_pcm_period_elapsed(aacirun->substream); in aaci_fifo_irq()
272 struct aaci_runtime *aacirun = &aaci->playback; in aaci_fifo_irq() local
276 if (!aacirun->substream || !aacirun->start) { in aaci_fifo_irq()
278 writel(0, aacirun->base + AACI_IE); in aaci_fifo_irq()
282 spin_lock(&aacirun->lock); in aaci_fifo_irq()
284 ptr = aacirun->ptr; in aaci_fifo_irq()
286 unsigned int len = aacirun->fifo_bytes; in aaci_fifo_irq()
289 if (aacirun->bytes <= 0) { in aaci_fifo_irq()
290 aacirun->bytes += aacirun->period; in aaci_fifo_irq()
293 if (!(aacirun->cr & CR_EN)) in aaci_fifo_irq()
296 val = readl(aacirun->base + AACI_SR); in aaci_fifo_irq()
302 aacirun->bytes -= len; in aaci_fifo_irq()
310 : "r" (aacirun->fifo) in aaci_fifo_irq()
313 if (ptr >= aacirun->end) in aaci_fifo_irq()
314 ptr = aacirun->start; in aaci_fifo_irq()
318 aacirun->ptr = ptr; in aaci_fifo_irq()
320 spin_unlock(&aacirun->lock); in aaci_fifo_irq()
323 snd_pcm_period_elapsed(aacirun->substream); in aaci_fifo_irq()
406 struct aaci_runtime *aacirun; in aaci_pcm_open() local
410 aacirun = &aaci->playback; in aaci_pcm_open()
412 aacirun = &aaci->capture; in aaci_pcm_open()
415 aacirun->substream = substream; in aaci_pcm_open()
416 runtime->private_data = aacirun; in aaci_pcm_open()
418 runtime->hw.rates = aacirun->pcm->rates; in aaci_pcm_open()
432 if (aacirun->pcm->r[1].slots) in aaci_pcm_open()
462 struct aaci_runtime *aacirun = substream->runtime->private_data; in aaci_pcm_close() local
464 WARN_ON(aacirun->cr & CR_EN); in aaci_pcm_close()
466 aacirun->substream = NULL; in aaci_pcm_close()
478 struct aaci_runtime *aacirun = substream->runtime->private_data; in aaci_pcm_hw_free() local
483 WARN_ON(aacirun->cr & CR_EN); in aaci_pcm_hw_free()
485 if (aacirun->pcm_open) in aaci_pcm_hw_free()
486 snd_ac97_pcm_close(aacirun->pcm); in aaci_pcm_hw_free()
487 aacirun->pcm_open = 0; in aaci_pcm_hw_free()
507 struct aaci_runtime *aacirun = substream->runtime->private_data; in aaci_pcm_hw_params() local
514 if (aacirun->pcm_open) { in aaci_pcm_hw_params()
515 snd_ac97_pcm_close(aacirun->pcm); in aaci_pcm_hw_params()
516 aacirun->pcm_open = 0; in aaci_pcm_hw_params()
528 err = snd_ac97_pcm_open(aacirun->pcm, rate, channels, in aaci_pcm_hw_params()
529 aacirun->pcm->r[dbl].slots); in aaci_pcm_hw_params()
531 aacirun->pcm_open = err == 0; in aaci_pcm_hw_params()
532 aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16; in aaci_pcm_hw_params()
533 aacirun->cr |= channels_to_slotmask[channels + dbl * 2]; in aaci_pcm_hw_params()
540 aacirun->fifo_bytes = aaci->fifo_depth * 4 / 2; in aaci_pcm_hw_params()
549 struct aaci_runtime *aacirun = runtime->private_data; in aaci_pcm_prepare() local
551 aacirun->period = snd_pcm_lib_period_bytes(substream); in aaci_pcm_prepare()
552 aacirun->start = runtime->dma_area; in aaci_pcm_prepare()
553 aacirun->end = aacirun->start + snd_pcm_lib_buffer_bytes(substream); in aaci_pcm_prepare()
554 aacirun->ptr = aacirun->start; in aaci_pcm_prepare()
555 aacirun->bytes = aacirun->period; in aaci_pcm_prepare()
563 struct aaci_runtime *aacirun = runtime->private_data; in aaci_pcm_pointer() local
564 ssize_t bytes = aacirun->ptr - aacirun->start; in aaci_pcm_pointer()
573 static void aaci_pcm_playback_stop(struct aaci_runtime *aacirun) in aaci_pcm_playback_stop() argument
577 ie = readl(aacirun->base + AACI_IE); in aaci_pcm_playback_stop()
579 writel(ie, aacirun->base + AACI_IE); in aaci_pcm_playback_stop()
580 aacirun->cr &= ~CR_EN; in aaci_pcm_playback_stop()
581 aaci_chan_wait_ready(aacirun, SR_TXB); in aaci_pcm_playback_stop()
582 writel(aacirun->cr, aacirun->base + AACI_TXCR); in aaci_pcm_playback_stop()
585 static void aaci_pcm_playback_start(struct aaci_runtime *aacirun) in aaci_pcm_playback_start() argument
589 aaci_chan_wait_ready(aacirun, SR_TXB); in aaci_pcm_playback_start()
590 aacirun->cr |= CR_EN; in aaci_pcm_playback_start()
592 ie = readl(aacirun->base + AACI_IE); in aaci_pcm_playback_start()
594 writel(ie, aacirun->base + AACI_IE); in aaci_pcm_playback_start()
595 writel(aacirun->cr, aacirun->base + AACI_TXCR); in aaci_pcm_playback_start()
600 struct aaci_runtime *aacirun = substream->runtime->private_data; in aaci_pcm_playback_trigger() local
604 spin_lock_irqsave(&aacirun->lock, flags); in aaci_pcm_playback_trigger()
608 aaci_pcm_playback_start(aacirun); in aaci_pcm_playback_trigger()
612 aaci_pcm_playback_start(aacirun); in aaci_pcm_playback_trigger()
616 aaci_pcm_playback_stop(aacirun); in aaci_pcm_playback_trigger()
620 aaci_pcm_playback_stop(aacirun); in aaci_pcm_playback_trigger()
633 spin_unlock_irqrestore(&aacirun->lock, flags); in aaci_pcm_playback_trigger()
649 static void aaci_pcm_capture_stop(struct aaci_runtime *aacirun) in aaci_pcm_capture_stop() argument
653 aaci_chan_wait_ready(aacirun, SR_RXB); in aaci_pcm_capture_stop()
655 ie = readl(aacirun->base + AACI_IE); in aaci_pcm_capture_stop()
657 writel(ie, aacirun->base+AACI_IE); in aaci_pcm_capture_stop()
659 aacirun->cr &= ~CR_EN; in aaci_pcm_capture_stop()
661 writel(aacirun->cr, aacirun->base + AACI_RXCR); in aaci_pcm_capture_stop()
664 static void aaci_pcm_capture_start(struct aaci_runtime *aacirun) in aaci_pcm_capture_start() argument
668 aaci_chan_wait_ready(aacirun, SR_RXB); in aaci_pcm_capture_start()
672 aacirun->cr |= 0xf << 17; in aaci_pcm_capture_start()
675 aacirun->cr |= CR_EN; in aaci_pcm_capture_start()
676 writel(aacirun->cr, aacirun->base + AACI_RXCR); in aaci_pcm_capture_start()
678 ie = readl(aacirun->base + AACI_IE); in aaci_pcm_capture_start()
680 writel(ie, aacirun->base + AACI_IE); in aaci_pcm_capture_start()
685 struct aaci_runtime *aacirun = substream->runtime->private_data; in aaci_pcm_capture_trigger() local
689 spin_lock_irqsave(&aacirun->lock, flags); in aaci_pcm_capture_trigger()
693 aaci_pcm_capture_start(aacirun); in aaci_pcm_capture_trigger()
697 aaci_pcm_capture_start(aacirun); in aaci_pcm_capture_trigger()
701 aaci_pcm_capture_stop(aacirun); in aaci_pcm_capture_trigger()
705 aaci_pcm_capture_stop(aacirun); in aaci_pcm_capture_trigger()
718 spin_unlock_irqrestore(&aacirun->lock, flags); in aaci_pcm_capture_trigger()
953 struct aaci_runtime *aacirun = &aaci->playback; in aaci_size_fifo() local
960 writel(CR_FEN | CR_SZ16 | CR_EN, aacirun->base + AACI_TXCR); in aaci_size_fifo()
962 for (i = 0; !(readl(aacirun->base + AACI_SR) & SR_TXFF) && i < 4096; i++) in aaci_size_fifo()
963 writel(0, aacirun->fifo); in aaci_size_fifo()
965 writel(0, aacirun->base + AACI_TXCR); in aaci_size_fifo()