Skip to content

Commit ef6bc39

Browse files
HiassofTpopcornmix
authored andcommitted
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 <[email protected]> Signed-off-by: Martin Sperl <[email protected]> Tested-by: Clive Messer <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
1 parent 204050d commit ef6bc39

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

drivers/dma/bcm2835-dma.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,11 @@ static void bcm2835_dma_create_cb_set_length(
253253
*/
254254

255255
/* have we filled in period_length yet? */
256-
if (*total_len + control_block->length < period_len)
256+
if (*total_len + control_block->length < period_len) {
257+
/* update number of bytes in this period so far */
258+
*total_len += control_block->length;
257259
return;
260+
}
258261

259262
/* calculate the length that remains to reach period_length */
260263
control_block->length = period_len - *total_len;

0 commit comments

Comments
 (0)