Skip to content

Commit 0bbc1e2

Browse files
HiassofTpopcornmix
authored andcommitted
bcm2835-dma: Limit cyclic transfers on lite channels to 32k
Transfers larger than 32k cause repeated clicking with I2S soundcards. The exact reason is yet unknown, so limit to 32k as bcm2708-dmaengine did as an intermediate fix.
1 parent 48e2f15 commit 0bbc1e2

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

drivers/dma/bcm2835-dma.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ struct bcm2835_desc {
141141
*/
142142
#define MAX_LITE_TRANSFER (SZ_64K - 4)
143143

144+
/*
145+
* Transfers larger than 32k cause issues with the bcm2708-i2s driver,
146+
* so limit transfer size to 32k as bcm2708-dmaengine did.
147+
*/
148+
#define MAX_CYCLIC_LITE_TRANSFER SZ_32K
149+
144150
static inline struct bcm2835_dmadev *to_bcm2835_dma_dev(struct dma_device *d)
145151
{
146152
return container_of(d, struct bcm2835_dmadev, ddev);
@@ -397,7 +403,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic(
397403

398404
d->dir = direction;
399405
if (c->ch >= 8) /* LITE channel */
400-
max_size = MAX_LITE_TRANSFER;
406+
max_size = MAX_CYCLIC_LITE_TRANSFER;
401407
else
402408
max_size = MAX_NORMAL_TRANSFER;
403409
period_len = min(period_len, max_size);

0 commit comments

Comments
 (0)