mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
dmaengine: bcm2835: Fix cyclic DMA period splitting
The code responsible for splitting periods into chunks that can be handled by the DMA controller missed to update total_len, the number of bytes processed in the current period, when there are more chunks to follow. Therefore total_len was stuck at 0 and the code didn't work at all. This resulted in a wrong control block layout and audio issues because the cyclic DMA callback wasn't executing on period boundaries. Fix this by adding the missing total_len update. Signed-off-by: Matthias Reichl <hias@horus.com> Signed-off-by: Martin Sperl <kernel@martin.sperl.org> Tested-by: Clive Messer <clive.messer@digitaldreamtime.co.uk> Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
c1ae3cfa0e
commit
2201ac6129
@ -251,8 +251,11 @@ static void bcm2835_dma_create_cb_set_length(
|
||||
*/
|
||||
|
||||
/* have we filled in period_length yet? */
|
||||
if (*total_len + control_block->length < period_len)
|
||||
if (*total_len + control_block->length < period_len) {
|
||||
/* update number of bytes in this period so far */
|
||||
*total_len += control_block->length;
|
||||
return;
|
||||
}
|
||||
|
||||
/* calculate the length that remains to reach period_length */
|
||||
control_block->length = period_len - *total_len;
|
||||
|
Loading…
Reference in New Issue
Block a user