]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/plat-samsung/s3c-dma-ops.c
Merge branch 'stable-3.14' of git://git.infradead.org/users/pcmoore/selinux into...
[karo-tx-linux.git] / arch / arm / plat-samsung / s3c-dma-ops.c
index 0cc40aea3f5adbd9a78ff8557f246f476d1b97e2..98b10ba67dc7c84e423be91cf1b868cc422908f1 100644 (file)
@@ -82,7 +82,8 @@ static int s3c_dma_config(unsigned ch, struct samsung_dma_config *param)
 static int s3c_dma_prepare(unsigned ch, struct samsung_dma_prep *param)
 {
        struct cb_data *data;
-       int len = (param->cap == DMA_CYCLIC) ? param->period : param->len;
+       dma_addr_t pos = param->buf;
+       dma_addr_t end = param->buf + param->len;
 
        list_for_each_entry(data, &dma_list, node)
                if (data->ch == ch)
@@ -94,7 +95,15 @@ static int s3c_dma_prepare(unsigned ch, struct samsung_dma_prep *param)
                data->fp_param = param->fp_param;
        }
 
-       s3c2410_dma_enqueue(ch, (void *)data, param->buf, len);
+       if (param->cap != DMA_CYCLIC) {
+               s3c2410_dma_enqueue(ch, (void *)data, param->buf, param->len);
+               return 0;
+       }
+
+       while (pos < end) {
+               s3c2410_dma_enqueue(ch, (void *)data, pos, param->period);
+               pos += param->period;
+       }
 
        return 0;
 }