Lines Matching refs:psc_dma

30 	struct psc_dma *psc_dma = _psc_dma;  in psc_dma_status_irq()  local
31 struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs; in psc_dma_status_irq()
37 if (psc_dma->playback.active && (isr & MPC52xx_PSC_IMR_TXEMP)) in psc_dma_status_irq()
38 psc_dma->stats.underrun_count++; in psc_dma_status_irq()
41 if (psc_dma->capture.active && (isr & MPC52xx_PSC_IMR_ORERR)) in psc_dma_status_irq()
42 psc_dma->stats.overrun_count++; in psc_dma_status_irq()
78 spin_lock(&s->psc_dma->lock); in psc_dma_bcom_irq()
89 spin_unlock(&s->psc_dma->lock); in psc_dma_bcom_irq()
114 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai); in psc_dma_trigger() local
116 struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma); in psc_dma_trigger()
117 struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs; in psc_dma_trigger()
124 dev_dbg(psc_dma->dev, "START: stream=%i fbits=%u ps=%u #p=%u\n", in psc_dma_trigger()
138 spin_lock_irqsave(&psc_dma->lock, flags); in psc_dma_trigger()
150 spin_unlock_irqrestore(&psc_dma->lock, flags); in psc_dma_trigger()
157 dev_dbg(psc_dma->dev, "STOP: stream=%i periods_count=%i\n", in psc_dma_trigger()
161 spin_lock_irqsave(&psc_dma->lock, flags); in psc_dma_trigger()
167 spin_unlock_irqrestore(&psc_dma->lock, flags); in psc_dma_trigger()
172 dev_dbg(psc_dma->dev, "unhandled trigger: stream=%i cmd=%i\n", in psc_dma_trigger()
179 if (psc_dma->playback.active) in psc_dma_trigger()
181 if (psc_dma->capture.active) in psc_dma_trigger()
183 out_be16(&regs->isr_imr.imr, psc_dma->imr | imr); in psc_dma_trigger()
215 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai); in psc_dma_open() local
219 dev_dbg(psc_dma->dev, "psc_dma_open(substream=%p)\n", substream); in psc_dma_open()
222 s = &psc_dma->capture; in psc_dma_open()
224 s = &psc_dma->playback; in psc_dma_open()
242 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai); in psc_dma_close() local
245 dev_dbg(psc_dma->dev, "psc_dma_close(substream=%p)\n", substream); in psc_dma_close()
248 s = &psc_dma->capture; in psc_dma_close()
250 s = &psc_dma->playback; in psc_dma_close()
252 if (!psc_dma->playback.active && in psc_dma_close()
253 !psc_dma->capture.active) { in psc_dma_close()
256 out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr); in psc_dma_close()
257 out_8(&psc_dma->psc_regs->command, 4 << 4); /* reset error */ in psc_dma_close()
267 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai); in psc_dma_pointer() local
272 s = &psc_dma->capture; in psc_dma_pointer()
274 s = &psc_dma->playback; in psc_dma_pointer()
305 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai); in psc_dma_new() local
369 struct psc_dma *psc_dma; in mpc5200_audio_dma_create() local
389 psc_dma = kzalloc(sizeof *psc_dma, GFP_KERNEL); in mpc5200_audio_dma_create()
390 if (!psc_dma) { in mpc5200_audio_dma_create()
402 spin_lock_init(&psc_dma->lock); in mpc5200_audio_dma_create()
403 mutex_init(&psc_dma->mutex); in mpc5200_audio_dma_create()
404 psc_dma->id = be32_to_cpu(*prop); in mpc5200_audio_dma_create()
405 psc_dma->irq = irq; in mpc5200_audio_dma_create()
406 psc_dma->psc_regs = regs; in mpc5200_audio_dma_create()
407 psc_dma->fifo_regs = regs + sizeof *psc_dma->psc_regs; in mpc5200_audio_dma_create()
408 psc_dma->dev = &op->dev; in mpc5200_audio_dma_create()
409 psc_dma->playback.psc_dma = psc_dma; in mpc5200_audio_dma_create()
410 psc_dma->capture.psc_dma = psc_dma; in mpc5200_audio_dma_create()
411 snprintf(psc_dma->name, sizeof psc_dma->name, "PSC%u", psc_dma->id); in mpc5200_audio_dma_create()
416 psc_dma->capture.bcom_task = in mpc5200_audio_dma_create()
417 bcom_psc_gen_bd_rx_init(psc_dma->id, 10, fifo, 512); in mpc5200_audio_dma_create()
418 psc_dma->playback.bcom_task = in mpc5200_audio_dma_create()
419 bcom_psc_gen_bd_tx_init(psc_dma->id, 10, fifo); in mpc5200_audio_dma_create()
420 if (!psc_dma->capture.bcom_task || in mpc5200_audio_dma_create()
421 !psc_dma->playback.bcom_task) { in mpc5200_audio_dma_create()
428 out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr); in mpc5200_audio_dma_create()
430 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_RX); in mpc5200_audio_dma_create()
432 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_TX); in mpc5200_audio_dma_create()
434 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_ERR_STAT); in mpc5200_audio_dma_create()
436 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_SEL_MODE_REG_1); in mpc5200_audio_dma_create()
442 out_8(&psc_dma->psc_regs->mode, 0); in mpc5200_audio_dma_create()
443 out_8(&psc_dma->psc_regs->mode, 0); in mpc5200_audio_dma_create()
446 out_be16(&psc_dma->fifo_regs->rfalarm, 0x100); in mpc5200_audio_dma_create()
447 out_8(&psc_dma->fifo_regs->rfcntl, 0x4); in mpc5200_audio_dma_create()
448 out_be16(&psc_dma->fifo_regs->tfalarm, 0x100); in mpc5200_audio_dma_create()
449 out_8(&psc_dma->fifo_regs->tfcntl, 0x7); in mpc5200_audio_dma_create()
452 psc_dma->playback.irq = in mpc5200_audio_dma_create()
453 bcom_get_task_irq(psc_dma->playback.bcom_task); in mpc5200_audio_dma_create()
454 psc_dma->capture.irq = in mpc5200_audio_dma_create()
455 bcom_get_task_irq(psc_dma->capture.bcom_task); in mpc5200_audio_dma_create()
457 rc = request_irq(psc_dma->irq, &psc_dma_status_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
458 "psc-dma-status", psc_dma); in mpc5200_audio_dma_create()
459 rc |= request_irq(psc_dma->capture.irq, &psc_dma_bcom_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
460 "psc-dma-capture", &psc_dma->capture); in mpc5200_audio_dma_create()
461 rc |= request_irq(psc_dma->playback.irq, &psc_dma_bcom_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
462 "psc-dma-playback", &psc_dma->playback); in mpc5200_audio_dma_create()
469 dev_set_drvdata(&op->dev, psc_dma); in mpc5200_audio_dma_create()
474 free_irq(psc_dma->irq, psc_dma); in mpc5200_audio_dma_create()
475 free_irq(psc_dma->capture.irq, &psc_dma->capture); in mpc5200_audio_dma_create()
476 free_irq(psc_dma->playback.irq, &psc_dma->playback); in mpc5200_audio_dma_create()
478 kfree(psc_dma); in mpc5200_audio_dma_create()
487 struct psc_dma *psc_dma = dev_get_drvdata(&op->dev); in mpc5200_audio_dma_destroy() local
493 bcom_gen_bd_rx_release(psc_dma->capture.bcom_task); in mpc5200_audio_dma_destroy()
494 bcom_gen_bd_tx_release(psc_dma->playback.bcom_task); in mpc5200_audio_dma_destroy()
497 free_irq(psc_dma->irq, psc_dma); in mpc5200_audio_dma_destroy()
498 free_irq(psc_dma->capture.irq, &psc_dma->capture); in mpc5200_audio_dma_destroy()
499 free_irq(psc_dma->playback.irq, &psc_dma->playback); in mpc5200_audio_dma_destroy()
501 iounmap(psc_dma->psc_regs); in mpc5200_audio_dma_destroy()
502 kfree(psc_dma); in mpc5200_audio_dma_destroy()