LF-3941: dmaengine: imx-sdma: fix audio noise with multi-fifo script
authorRobin Gong <yibin.gong@nxp.com>
Tue, 15 Jun 2021 13:32:13 +0000 (21:32 +0800)
committerJosep Orga <jorga@somdevices.com>
Tue, 27 Jun 2023 14:02:31 +0000 (16:02 +0200)
Correct chn_real_count for multi-fifo script.

Signed-off-by: Robin Gong <yibin.gong@nxp.com>
Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
(cherry picked from commit 7a5f2c72fc2954853bb090af115555630ebd5116)

drivers/dma/imx-sdma.c

index 8c8dedd..31fee48 100644 (file)
@@ -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;