Skip to content

Commit b59b3cb

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 b12e830 commit b59b3cb

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
@@ -147,6 +147,12 @@ struct bcm2835_desc {
147147
*/
148148
#define MAX_LITE_TRANSFER (SZ_64K - 4)
149149

150+
/*
151+
* Transfers larger than 32k cause issues with the bcm2708-i2s driver,
152+
* so limit transfer size to 32k as bcm2708-dmaengine did.
153+
*/
154+
#define MAX_CYCLIC_LITE_TRANSFER SZ_32K
155+
150156
static inline struct bcm2835_dmadev *to_bcm2835_dma_dev(struct dma_device *d)
151157
{
152158
return container_of(d, struct bcm2835_dmadev, ddev);
@@ -415,7 +421,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic(
415421
d->c = c;
416422
d->dir = direction;
417423
if (c->ch >= 8) /* LITE channel */
418-
max_size = MAX_LITE_TRANSFER;
424+
max_size = MAX_CYCLIC_LITE_TRANSFER;
419425
else
420426
max_size = MAX_NORMAL_TRANSFER;
421427
period_len = min(period_len, max_size);

0 commit comments

Comments
 (0)