Commit 156ae092 authored by Shawn Guo's avatar Shawn Guo Committed by Vinod Koul

dmaengine: zx: fix residue calculation

The dma residue is defined as the free space to end of transfer buffer,
which could be multiple segments chained together.  So the residue
calculation in zx_dma_tx_status() works for both slave_sg and cyclic
case.  But unfortunately, the 'index' is wrong.  It should plus one,
because the current segment is already occupied and shouldn't be counted
into free space.

This fixes the HDMI audio noise issue we see on ZX296718 with SPDIF
interface.
Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
Reviewed-by: default avatarJun Nie <jun.nie@linaro.org>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent fc318d64
...@@ -365,7 +365,8 @@ static enum dma_status zx_dma_tx_status(struct dma_chan *chan, ...@@ -365,7 +365,8 @@ static enum dma_status zx_dma_tx_status(struct dma_chan *chan,
bytes = 0; bytes = 0;
clli = zx_dma_get_curr_lli(p); clli = zx_dma_get_curr_lli(p);
index = (clli - ds->desc_hw_lli) / sizeof(struct zx_desc_hw); index = (clli - ds->desc_hw_lli) /
sizeof(struct zx_desc_hw) + 1;
for (; index < ds->desc_num; index++) { for (; index < ds->desc_num; index++) {
bytes += ds->desc_hw[index].src_x; bytes += ds->desc_hw[index].src_x;
/* end of lli */ /* end of lli */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment