9 #include <linux/module.h>
12 #include <linux/slab.h>
26 static irqreturn_t psc_dma_status_irq(
int irq,
void *_psc_dma)
32 isr =
in_be16(®s->mpc52xx_psc_isr);
36 psc_dma->
stats.underrun_count++;
40 psc_dma->
stats.overrun_count++;
62 bd = bcom_prepare_next_buffer(s->
bcom_task);
72 static irqreturn_t psc_dma_bcom_irq(
int irq,
void *_psc_dma_stream)
85 psc_dma_bcom_enqueue_next_buffer(s);
99 snd_pcm_set_runtime_buffer(substream,
NULL);
112 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->
cpu_dai);
122 dev_dbg(psc_dma->
dev,
"START: stream=%i fbits=%u ps=%u #p=%u\n",
143 for (i = 0; i < runtime->
periods; i++)
145 psc_dma_bcom_enqueue_next_buffer(s);
148 spin_unlock_irqrestore(&psc_dma->
lock, flags);
155 dev_dbg(psc_dma->
dev,
"STOP: stream=%i periods_count=%i\n",
165 spin_unlock_irqrestore(&psc_dma->
lock, flags);
170 dev_dbg(psc_dma->
dev,
"unhandled trigger: stream=%i cmd=%i\n",
171 substream->
pstr->stream, cmd);
205 .period_bytes_max = 1024 * 1024,
206 .period_bytes_min = 32,
209 .buffer_bytes_max = 2 * 1024 * 1024,
217 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->
cpu_dai);
221 dev_dbg(psc_dma->
dev,
"psc_dma_open(substream=%p)\n", substream);
233 dev_err(substream->
pcm->card->dev,
"invalid buffer size\n");
244 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->
cpu_dai);
247 dev_dbg(psc_dma->
dev,
"psc_dma_close(substream=%p)\n", substream);
269 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->
cpu_dai);
280 return bytes_to_frames(substream->
runtime, count);
287 snd_pcm_set_runtime_buffer(substream, &substream->
dma_buffer);
293 .open = psc_dma_open,
294 .close = psc_dma_close,
295 .hw_free = psc_dma_hw_free,
297 .pointer = psc_dma_pointer,
298 .trigger = psc_dma_trigger,
299 .hw_params = psc_dma_hw_params,
308 struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->
cpu_dai);
315 if (!card->
dev->dma_mask)
316 card->
dev->dma_mask = &psc_dma_dmamask;
317 if (!card->
dev->coherent_dma_mask)
324 goto playback_alloc_err;
331 goto capture_alloc_err;
334 if (rtd->
codec->ac97)
335 rtd->
codec->ac97->private_data = psc_dma;
344 dev_err(card->
dev,
"Cannot allocate buffer(s)\n");
349 static void psc_dma_free(
struct snd_pcm *pcm)
357 for (stream = 0; stream < 2; stream++) {
369 .pcm_new = &psc_dma_new,
370 .pcm_free = &psc_dma_free,
376 struct psc_dma *psc_dma;
391 dev_err(&op->
dev,
"Could not map registers\n");
396 psc_dma = kzalloc(
sizeof *psc_dma,
GFP_KERNEL);
404 if (!prop || size <
sizeof *prop) {
416 psc_dma->
playback.psc_dma = psc_dma;
417 psc_dma->
capture.psc_dma = psc_dma;
427 if (!psc_dma->
capture.bcom_task ||
429 dev_err(&op->
dev,
"Could not allocate bestcomm tasks\n");
460 bcom_get_task_irq(psc_dma->
playback.bcom_task);
462 bcom_get_task_irq(psc_dma->
capture.bcom_task);
465 "psc-dma-status", psc_dma);
467 "psc-dma-capture", &psc_dma->
capture);
469 "psc-dma-playback", &psc_dma->
playback);
496 dev_dbg(&op->
dev,
"mpc5200_audio_dma_destroy()\n");