struct jz4780_dma_desc *desc, unsigned int next_sg)
 {
        struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
-       unsigned int residue, count;
+       unsigned int count = 0;
        unsigned int i;
 
-       residue = 0;
-
        for (i = next_sg; i < desc->count; i++)
-               residue += (desc->desc[i].dtc & GENMASK(23, 0)) <<
-                       jzchan->transfer_shift;
+               count += desc->desc[i].dtc & GENMASK(23, 0);
 
-       if (next_sg != 0) {
-               count = jz4780_dma_chn_readl(jzdma, jzchan->id,
+       if (next_sg != 0)
+               count += jz4780_dma_chn_readl(jzdma, jzchan->id,
                                         JZ_DMA_REG_DTC);
-               residue += count << jzchan->transfer_shift;
-       }
 
-       return residue;
+       return count << jzchan->transfer_shift;
 }
 
 static enum dma_status jz4780_dma_tx_status(struct dma_chan *chan,