From ac3adc283c29ab62f595e12f6a4e0d4885405573 Mon Sep 17 00:00:00 2001 From: Robin Gong Date: Tue, 15 Jun 2021 21:32:13 +0800 Subject: [PATCH] LF-3941: dmaengine: imx-sdma: fix audio noise with multi-fifo script Correct chn_real_count for multi-fifo script. Signed-off-by: Robin Gong Reviewed-by: Shengjiu Wang (cherry picked from commit 7a5f2c72fc2954853bb090af115555630ebd5116) --- drivers/dma/imx-sdma.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 8c8deddd7325..31fee48d6b40 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -965,9 +965,15 @@ static void sdma_update_channel_loop(struct sdma_channel *sdmac) /* * We use bd->mode.count to calculate the residue, since contains * the number of bytes present in the current buffer descriptor. + * Note: in IMX_DMATYPE_MULTI_SAI case, bd->mode.count used as + * remaining bytes instead so that one register could be saved. + * so chn_real_count = desc->period_len - bd->mode.count. */ + if (sdmac->peripheral_type == IMX_DMATYPE_MULTI_SAI) + desc->chn_real_count = desc->period_len - bd->mode.count; + else + desc->chn_real_count = bd->mode.count; - desc->chn_real_count = bd->mode.count; bd->mode.status |= BD_DONE; bd->mode.count = desc->period_len; desc->buf_ptail = desc->buf_tail; -- 2.17.1