psc_dma
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
dev_dbg(psc_dma->dev, "START: stream=%i fbits=%u ps=%u #p=%u\n",
spin_lock_irqsave(&psc_dma->lock, flags);
spin_unlock_irqrestore(&psc_dma->lock, flags);
dev_dbg(psc_dma->dev, "STOP: stream=%i periods_count=%i\n",
spin_lock_irqsave(&psc_dma->lock, flags);
spin_unlock_irqrestore(&psc_dma->lock, flags);
dev_dbg(psc_dma->dev, "unhandled trigger: stream=%i cmd=%i\n",
if (psc_dma->playback.active)
if (psc_dma->capture.active)
out_be16(®s->isr_imr.imr, psc_dma->imr | imr);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
dev_dbg(psc_dma->dev, "psc_dma_open(substream=%p)\n", substream);
s = &psc_dma->capture;
s = &psc_dma->playback;
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
dev_dbg(psc_dma->dev, "psc_dma_close(substream=%p)\n", substream);
s = &psc_dma->capture;
s = &psc_dma->playback;
if (!psc_dma->playback.active &&
!psc_dma->capture.active) {
out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr);
out_8(&psc_dma->psc_regs->command, 4 << 4); /* reset error */
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
s = &psc_dma->capture;
s = &psc_dma->playback;
struct psc_dma *psc_dma;
struct psc_dma *psc_dma = _psc_dma;
struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
psc_dma = kzalloc_obj(*psc_dma);
if (!psc_dma)
spin_lock_init(&psc_dma->lock);
mutex_init(&psc_dma->mutex);
psc_dma->id = be32_to_cpu(*prop);
psc_dma->irq = irq;
psc_dma->psc_regs = regs;
psc_dma->fifo_regs = regs + sizeof *psc_dma->psc_regs;
psc_dma->dev = &op->dev;
psc_dma->playback.psc_dma = psc_dma;
psc_dma->capture.psc_dma = psc_dma;
snprintf(psc_dma->name, sizeof(psc_dma->name), "PSC%d", psc_dma->id);
psc_dma->capture.bcom_task =
bcom_psc_gen_bd_rx_init(psc_dma->id, 10, fifo, 512);
psc_dma->playback.bcom_task =
bcom_psc_gen_bd_tx_init(psc_dma->id, 10, fifo);
if (!psc_dma->capture.bcom_task ||
!psc_dma->playback.bcom_task) {
out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr);
out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_RX);
out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_TX);
out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_RST_ERR_STAT);
out_8(&psc_dma->psc_regs->command, MPC52xx_PSC_SEL_MODE_REG_1);
out_8(&psc_dma->psc_regs->mode, 0);
out_8(&psc_dma->psc_regs->mode, 0);
if (psc_dma->playback.active && (isr & MPC52xx_PSC_IMR_TXEMP))
out_be16(&psc_dma->fifo_regs->rfalarm, 0x100);
out_8(&psc_dma->fifo_regs->rfcntl, 0x4);
out_be16(&psc_dma->fifo_regs->tfalarm, 0x100);
out_8(&psc_dma->fifo_regs->tfcntl, 0x7);
psc_dma->playback.irq =
bcom_get_task_irq(psc_dma->playback.bcom_task);
psc_dma->capture.irq =
psc_dma->stats.underrun_count++;
bcom_get_task_irq(psc_dma->capture.bcom_task);
rc = request_irq(psc_dma->irq, &psc_dma_status_irq, IRQF_SHARED,
"psc-dma-status", psc_dma);
rc |= request_irq(psc_dma->capture.irq, &psc_dma_bcom_irq, IRQF_SHARED,
"psc-dma-capture", &psc_dma->capture);
rc |= request_irq(psc_dma->playback.irq, &psc_dma_bcom_irq, IRQF_SHARED,
"psc-dma-playback", &psc_dma->playback);
dev_set_drvdata(&op->dev, psc_dma);
free_irq(psc_dma->irq, psc_dma);
free_irq(psc_dma->capture.irq, &psc_dma->capture);
free_irq(psc_dma->playback.irq, &psc_dma->playback);
kfree(psc_dma);
if (psc_dma->capture.active && (isr & MPC52xx_PSC_IMR_ORERR))
struct psc_dma *psc_dma = dev_get_drvdata(&op->dev);
bcom_gen_bd_rx_release(psc_dma->capture.bcom_task);
bcom_gen_bd_tx_release(psc_dma->playback.bcom_task);
free_irq(psc_dma->irq, psc_dma);
psc_dma->stats.overrun_count++;
free_irq(psc_dma->capture.irq, &psc_dma->capture);
free_irq(psc_dma->playback.irq, &psc_dma->playback);
kfree(psc_dma);
spin_lock(&s->psc_dma->lock);
spin_unlock(&s->psc_dma->lock);
struct psc_dma *psc_dma;
to_psc_dma_stream(struct snd_pcm_substream *substream, struct psc_dma *psc_dma)
return &psc_dma->capture;
return &psc_dma->playback;
out_be32(®s->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_AWR);
out_be32(®s->sicr, psc_dma->sicr);
mutex_unlock(&psc_dma->mutex);
struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
mutex_lock(&psc_dma->mutex);
dev_dbg(psc_dma->dev, "cold reset\n");
mpc5200_psc_ac97_gpio_reset(psc_dma->id);
out_be32(®s->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_ACRB);
mutex_unlock(&psc_dma->mutex);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
dev_dbg(psc_dma->dev, "%s(substream=%p) p_size=%i p_bytes=%i"
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
dev_dbg(psc_dma->dev, "%s(substream=%p)\n", __func__, substream);
out_be32(&psc_dma->psc_regs->ac97_slots, 0x01000000);
out_be32(&psc_dma->psc_regs->ac97_slots, 0x03000000);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(dai);
struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
dev_dbg(psc_dma->dev, "AC97 START: stream=%i\n",
psc_dma->slots |= s->ac97_slot_bits;
out_be32(&psc_dma->psc_regs->ac97_slots, psc_dma->slots);
dev_dbg(psc_dma->dev, "AC97 STOP: stream=%i\n",
psc_dma->slots &= ~(s->ac97_slot_bits);
out_be32(&psc_dma->psc_regs->ac97_slots, psc_dma->slots);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
static struct psc_dma *psc_dma;
psc_dma = dev_get_drvdata(&op->dev);
regs = psc_dma->psc_regs;
psc_dma->imr = 0;
out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr);
psc_dma->sicr = MPC52xx_PSC_SICR_SIM_AC97 | MPC52xx_PSC_SICR_ENAC97;
out_be32(®s->sicr, psc_dma->sicr);
mutex_lock(&psc_dma->mutex);
status = spin_event_timeout(!(in_be16(&psc_dma->psc_regs->sr_csr.status) &
mutex_unlock(&psc_dma->mutex);
in_be32(&psc_dma->psc_regs->ac97_data);
out_be32(&psc_dma->psc_regs->ac97_cmd, (1<<31) | ((reg & 0x7f) << 24));
status = spin_event_timeout((in_be16(&psc_dma->psc_regs->sr_csr.status) &
in_be16(&psc_dma->psc_regs->sr_csr.status));
mutex_unlock(&psc_dma->mutex);
val = in_be32(&psc_dma->psc_regs->ac97_data);
mutex_unlock(&psc_dma->mutex);
mutex_unlock(&psc_dma->mutex);
mutex_lock(&psc_dma->mutex);
status = spin_event_timeout(!(in_be16(&psc_dma->psc_regs->sr_csr.status) &
out_be32(&psc_dma->psc_regs->ac97_cmd,
mutex_unlock(&psc_dma->mutex);
struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
mutex_lock(&psc_dma->mutex);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
dev_dbg(psc_dma->dev, "psc_i2s_set_fmt(cpu_dai=%p, format=%i)\n",
struct psc_dma *psc_dma;
psc_dma = dev_get_drvdata(&op->dev);
regs = psc_dma->psc_regs;
psc_dma->sicr = MPC52xx_PSC_SICR_DTS1 | MPC52xx_PSC_SICR_I2S |
out_be32(&psc_dma->psc_regs->sicr,
psc_dma->sicr | MPC52xx_PSC_SICR_SIM_CODEC_8);
out_8(&psc_dma->psc_regs->command,
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
dev_dbg(psc_dma->dev, "%s(substream=%p) p_size=%i p_bytes=%i"
dev_dbg(psc_dma->dev, "invalid format\n");
out_be32(&psc_dma->psc_regs->sicr, psc_dma->sicr | mode);
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
dev_dbg(psc_dma->dev, "psc_i2s_set_sysclk(cpu_dai=%p, dir=%i)\n",