From 3e7be71d5bec235a3563d8ff4a8c35fee3cc0035 Mon Sep 17 00:00:00 2001 From: Laxman Dewangan Date: Mon, 2 Jul 2012 13:52:07 +0530 Subject: [PATCH] --- yaml --- r: 316650 b: refs/heads/master c: 4a46ba36e25dcff1d30eb1681135c3c10af71c16 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/dma/tegra20-apb-dma.c | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 9f2a40aadd42..508f9ba1eacb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 46fb3f8ef5bde1325b1e58867a3a98dd746511d7 +refs/heads/master: 4a46ba36e25dcff1d30eb1681135c3c10af71c16 diff --git a/trunk/drivers/dma/tegra20-apb-dma.c b/trunk/drivers/dma/tegra20-apb-dma.c index c0836a7a8631..8e0ea2438ce1 100644 --- a/trunk/drivers/dma/tegra20-apb-dma.c +++ b/trunk/drivers/dma/tegra20-apb-dma.c @@ -731,6 +731,7 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc, struct tegra_dma_sg_req *sg_req; enum dma_status ret; unsigned long flags; + unsigned int residual; spin_lock_irqsave(&tdc->lock, flags); @@ -744,9 +745,10 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc, /* Check on wait_ack desc status */ list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { if (dma_desc->txd.cookie == cookie) { - dma_set_residue(txstate, - dma_desc->bytes_requested - - dma_desc->bytes_transferred); + residual = dma_desc->bytes_requested - + (dma_desc->bytes_transferred % + dma_desc->bytes_requested); + dma_set_residue(txstate, residual); ret = dma_desc->dma_status; spin_unlock_irqrestore(&tdc->lock, flags); return ret; @@ -757,9 +759,10 @@ static enum dma_status tegra_dma_tx_status(struct dma_chan *dc, list_for_each_entry(sg_req, &tdc->pending_sg_req, node) { dma_desc = sg_req->dma_desc; if (dma_desc->txd.cookie == cookie) { - dma_set_residue(txstate, - dma_desc->bytes_requested - - dma_desc->bytes_transferred); + residual = dma_desc->bytes_requested - + (dma_desc->bytes_transferred % + dma_desc->bytes_requested); + dma_set_residue(txstate, residual); ret = dma_desc->dma_status; spin_unlock_irqrestore(&tdc->lock, flags); return ret;