Lines Matching refs:psc_dma

32 	struct psc_dma *psc_dma = _psc_dma;  in psc_dma_status_irq()  local
33 struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs; in psc_dma_status_irq()
39 if (psc_dma->playback.active && (isr & MPC52xx_PSC_IMR_TXEMP)) in psc_dma_status_irq()
40 psc_dma->stats.underrun_count++; in psc_dma_status_irq()
43 if (psc_dma->capture.active && (isr & MPC52xx_PSC_IMR_ORERR)) in psc_dma_status_irq()
44 psc_dma->stats.overrun_count++; in psc_dma_status_irq()
80 spin_lock(&s->psc_dma->lock); in psc_dma_bcom_irq()
91 spin_unlock(&s->psc_dma->lock); in psc_dma_bcom_irq()
118 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in psc_dma_trigger() local
120 struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma); in psc_dma_trigger()
121 struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs; in psc_dma_trigger()
128 dev_dbg(psc_dma->dev, "START: stream=%i fbits=%u ps=%u #p=%u\n", in psc_dma_trigger()
142 spin_lock_irqsave(&psc_dma->lock, flags); in psc_dma_trigger()
154 spin_unlock_irqrestore(&psc_dma->lock, flags); in psc_dma_trigger()
161 dev_dbg(psc_dma->dev, "STOP: stream=%i periods_count=%i\n", in psc_dma_trigger()
165 spin_lock_irqsave(&psc_dma->lock, flags); in psc_dma_trigger()
171 spin_unlock_irqrestore(&psc_dma->lock, flags); in psc_dma_trigger()
176 dev_dbg(psc_dma->dev, "unhandled trigger: stream=%i cmd=%i\n", in psc_dma_trigger()
183 if (psc_dma->playback.active) in psc_dma_trigger()
185 if (psc_dma->capture.active) in psc_dma_trigger()
187 out_be16(&regs->isr_imr.imr, psc_dma->imr | imr); in psc_dma_trigger()
220 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in psc_dma_open() local
224 dev_dbg(psc_dma->dev, "psc_dma_open(substream=%p)\n", substream); in psc_dma_open()
227 s = &psc_dma->capture; in psc_dma_open()
229 s = &psc_dma->playback; in psc_dma_open()
248 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in psc_dma_close() local
251 dev_dbg(psc_dma->dev, "psc_dma_close(substream=%p)\n", substream); in psc_dma_close()
254 s = &psc_dma->capture; in psc_dma_close()
256 s = &psc_dma->playback; in psc_dma_close()
258 if (!psc_dma->playback.active && in psc_dma_close()
259 !psc_dma->capture.active) { in psc_dma_close()
262 out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr); in psc_dma_close()
263 out_8(&psc_dma->psc_regs->command, 4 << 4); /* reset error */ in psc_dma_close()
274 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in psc_dma_pointer() local
279 s = &psc_dma->capture; in psc_dma_pointer()
281 s = &psc_dma->playback; in psc_dma_pointer()
372 struct psc_dma *psc_dma; in mpc5200_audio_dma_create() local
392 psc_dma = kzalloc(sizeof *psc_dma, GFP_KERNEL); in mpc5200_audio_dma_create()
393 if (!psc_dma) { in mpc5200_audio_dma_create()
405 spin_lock_init(&psc_dma->lock); in mpc5200_audio_dma_create()
406 mutex_init(&psc_dma->mutex); in mpc5200_audio_dma_create()
407 psc_dma->id = be32_to_cpu(*prop); in mpc5200_audio_dma_create()
408 psc_dma->irq = irq; in mpc5200_audio_dma_create()
409 psc_dma->psc_regs = regs; in mpc5200_audio_dma_create()
410 psc_dma->fifo_regs = regs + sizeof *psc_dma->psc_regs; in mpc5200_audio_dma_create()
411 psc_dma->dev = &op->dev; in mpc5200_audio_dma_create()
412 psc_dma->playback.psc_dma = psc_dma; in mpc5200_audio_dma_create()
413 psc_dma->capture.psc_dma = psc_dma; in mpc5200_audio_dma_create()
414 snprintf(psc_dma->name, sizeof psc_dma->name, "PSC%u", psc_dma->id); in mpc5200_audio_dma_create()
419 psc_dma->capture.bcom_task = in mpc5200_audio_dma_create()
420 bcom_psc_gen_bd_rx_init(psc_dma->id, 10, fifo, 512); in mpc5200_audio_dma_create()
421 psc_dma->playback.bcom_task = in mpc5200_audio_dma_create()
422 bcom_psc_gen_bd_tx_init(psc_dma->id, 10, fifo); in mpc5200_audio_dma_create()
423 if (!psc_dma->capture.bcom_task || in mpc5200_audio_dma_create()
424 !psc_dma->playback.bcom_task) { in mpc5200_audio_dma_create()
431 out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr); in mpc5200_audio_dma_create()
433 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_RX); in mpc5200_audio_dma_create()
435 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_TX); in mpc5200_audio_dma_create()
437 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_ERR_STAT); in mpc5200_audio_dma_create()
439 out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_SEL_MODE_REG_1); in mpc5200_audio_dma_create()
445 out_8(&psc_dma->psc_regs->mode, 0); in mpc5200_audio_dma_create()
446 out_8(&psc_dma->psc_regs->mode, 0); in mpc5200_audio_dma_create()
449 out_be16(&psc_dma->fifo_regs->rfalarm, 0x100); in mpc5200_audio_dma_create()
450 out_8(&psc_dma->fifo_regs->rfcntl, 0x4); in mpc5200_audio_dma_create()
451 out_be16(&psc_dma->fifo_regs->tfalarm, 0x100); in mpc5200_audio_dma_create()
452 out_8(&psc_dma->fifo_regs->tfcntl, 0x7); in mpc5200_audio_dma_create()
455 psc_dma->playback.irq = in mpc5200_audio_dma_create()
456 bcom_get_task_irq(psc_dma->playback.bcom_task); in mpc5200_audio_dma_create()
457 psc_dma->capture.irq = in mpc5200_audio_dma_create()
458 bcom_get_task_irq(psc_dma->capture.bcom_task); in mpc5200_audio_dma_create()
460 rc = request_irq(psc_dma->irq, &psc_dma_status_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
461 "psc-dma-status", psc_dma); in mpc5200_audio_dma_create()
462 rc |= request_irq(psc_dma->capture.irq, &psc_dma_bcom_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
463 "psc-dma-capture", &psc_dma->capture); in mpc5200_audio_dma_create()
464 rc |= request_irq(psc_dma->playback.irq, &psc_dma_bcom_irq, IRQF_SHARED, in mpc5200_audio_dma_create()
465 "psc-dma-playback", &psc_dma->playback); in mpc5200_audio_dma_create()
472 dev_set_drvdata(&op->dev, psc_dma); in mpc5200_audio_dma_create()
478 free_irq(psc_dma->irq, psc_dma); in mpc5200_audio_dma_create()
479 free_irq(psc_dma->capture.irq, &psc_dma->capture); in mpc5200_audio_dma_create()
480 free_irq(psc_dma->playback.irq, &psc_dma->playback); in mpc5200_audio_dma_create()
482 kfree(psc_dma); in mpc5200_audio_dma_create()
491 struct psc_dma *psc_dma = dev_get_drvdata(&op->dev); in mpc5200_audio_dma_destroy() local
495 bcom_gen_bd_rx_release(psc_dma->capture.bcom_task); in mpc5200_audio_dma_destroy()
496 bcom_gen_bd_tx_release(psc_dma->playback.bcom_task); in mpc5200_audio_dma_destroy()
499 free_irq(psc_dma->irq, psc_dma); in mpc5200_audio_dma_destroy()
500 free_irq(psc_dma->capture.irq, &psc_dma->capture); in mpc5200_audio_dma_destroy()
501 free_irq(psc_dma->playback.irq, &psc_dma->playback); in mpc5200_audio_dma_destroy()
503 iounmap(psc_dma->psc_regs); in mpc5200_audio_dma_destroy()
504 kfree(psc_dma); in mpc5200_audio_dma_destroy()