Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6222263 authored by Qiao Zhou's avatar Qiao Zhou Committed by Vinod Koul
Browse files

dmaengine: mmp_tdma: add DMA_PREP_INTERRUPT flag support



add DMA_PREP_INTERRUPT flag to support no_period_wakeup, in which
user space app doesn't want audio interrupt to wake up audio threads.

Signed-off-by: default avatarQiao Zhou <zhouqiao@marvell.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent e34b731f
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -148,10 +148,16 @@ static void mmp_tdma_chan_set_desc(struct mmp_tdma_chan *tdmac, dma_addr_t phys)
					tdmac->reg_base + TDCR);
}

static void mmp_tdma_enable_chan(struct mmp_tdma_chan *tdmac)
static void mmp_tdma_enable_irq(struct mmp_tdma_chan *tdmac, bool enable)
{
	/* enable irq */
	if (enable)
		writel(TDIMR_COMP, tdmac->reg_base + TDIMR);
	else
		writel(0, tdmac->reg_base + TDIMR);
}

static void mmp_tdma_enable_chan(struct mmp_tdma_chan *tdmac)
{
	/* enable dma chan */
	writel(readl(tdmac->reg_base + TDCR) | TDCR_CHANEN,
					tdmac->reg_base + TDCR);
@@ -163,9 +169,6 @@ static void mmp_tdma_disable_chan(struct mmp_tdma_chan *tdmac)
	writel(readl(tdmac->reg_base + TDCR) & ~TDCR_CHANEN,
					tdmac->reg_base + TDCR);

	/* disable irq */
	writel(0, tdmac->reg_base + TDIMR);

	tdmac->status = DMA_COMPLETE;
}

@@ -434,6 +437,10 @@ static struct dma_async_tx_descriptor *mmp_tdma_prep_dma_cyclic(
		i++;
	}

	/* enable interrupt */
	if (flags & DMA_PREP_INTERRUPT)
		mmp_tdma_enable_irq(tdmac, true);

	tdmac->buf_len = buf_len;
	tdmac->period_len = period_len;
	tdmac->pos = 0;
@@ -455,6 +462,8 @@ static int mmp_tdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
	switch (cmd) {
	case DMA_TERMINATE_ALL:
		mmp_tdma_disable_chan(tdmac);
		/* disable interrupt */
		mmp_tdma_enable_irq(tdmac, false);
		break;
	case DMA_PAUSE:
		mmp_tdma_pause_chan(tdmac);