diff options
Diffstat (limited to 'drivers/dma/coh901318_lli.c')
-rw-r--r-- | drivers/dma/coh901318_lli.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/dma/coh901318_lli.c b/drivers/dma/coh901318_lli.c index f5120f238a4d..71d58c1a1e86 100644 --- a/drivers/dma/coh901318_lli.c +++ b/drivers/dma/coh901318_lli.c | |||
@@ -74,6 +74,8 @@ coh901318_lli_alloc(struct coh901318_pool *pool, unsigned int len) | |||
74 | 74 | ||
75 | lli = head; | 75 | lli = head; |
76 | lli->phy_this = phy; | 76 | lli->phy_this = phy; |
77 | lli->link_addr = 0x00000000; | ||
78 | lli->virt_link_addr = 0x00000000U; | ||
77 | 79 | ||
78 | for (i = 1; i < len; i++) { | 80 | for (i = 1; i < len; i++) { |
79 | lli_prev = lli; | 81 | lli_prev = lli; |
@@ -85,13 +87,13 @@ coh901318_lli_alloc(struct coh901318_pool *pool, unsigned int len) | |||
85 | 87 | ||
86 | DEBUGFS_POOL_COUNTER_ADD(pool, 1); | 88 | DEBUGFS_POOL_COUNTER_ADD(pool, 1); |
87 | lli->phy_this = phy; | 89 | lli->phy_this = phy; |
90 | lli->link_addr = 0x00000000; | ||
91 | lli->virt_link_addr = 0x00000000U; | ||
88 | 92 | ||
89 | lli_prev->link_addr = phy; | 93 | lli_prev->link_addr = phy; |
90 | lli_prev->virt_link_addr = lli; | 94 | lli_prev->virt_link_addr = lli; |
91 | } | 95 | } |
92 | 96 | ||
93 | lli->link_addr = 0x00000000U; | ||
94 | |||
95 | spin_unlock(&pool->lock); | 97 | spin_unlock(&pool->lock); |
96 | 98 | ||
97 | return head; | 99 | return head; |
@@ -166,8 +168,7 @@ coh901318_lli_fill_memcpy(struct coh901318_pool *pool, | |||
166 | lli->src_addr = src; | 168 | lli->src_addr = src; |
167 | lli->dst_addr = dst; | 169 | lli->dst_addr = dst; |
168 | 170 | ||
169 | /* One irq per single transfer */ | 171 | return 0; |
170 | return 1; | ||
171 | } | 172 | } |
172 | 173 | ||
173 | int | 174 | int |
@@ -223,8 +224,7 @@ coh901318_lli_fill_single(struct coh901318_pool *pool, | |||
223 | lli->src_addr = src; | 224 | lli->src_addr = src; |
224 | lli->dst_addr = dst; | 225 | lli->dst_addr = dst; |
225 | 226 | ||
226 | /* One irq per single transfer */ | 227 | return 0; |
227 | return 1; | ||
228 | } | 228 | } |
229 | 229 | ||
230 | int | 230 | int |
@@ -240,7 +240,6 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool, | |||
240 | u32 ctrl_sg; | 240 | u32 ctrl_sg; |
241 | dma_addr_t src = 0; | 241 | dma_addr_t src = 0; |
242 | dma_addr_t dst = 0; | 242 | dma_addr_t dst = 0; |
243 | int nbr_of_irq = 0; | ||
244 | u32 bytes_to_transfer; | 243 | u32 bytes_to_transfer; |
245 | u32 elem_size; | 244 | u32 elem_size; |
246 | 245 | ||
@@ -269,15 +268,12 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool, | |||
269 | ctrl_sg = ctrl ? ctrl : ctrl_last; | 268 | ctrl_sg = ctrl ? ctrl : ctrl_last; |
270 | 269 | ||
271 | 270 | ||
272 | if ((ctrl_sg & ctrl_irq_mask)) | ||
273 | nbr_of_irq++; | ||
274 | |||
275 | if (dir == DMA_TO_DEVICE) | 271 | if (dir == DMA_TO_DEVICE) |
276 | /* increment source address */ | 272 | /* increment source address */ |
277 | src = sg_dma_address(sg); | 273 | src = sg_phys(sg); |
278 | else | 274 | else |
279 | /* increment destination address */ | 275 | /* increment destination address */ |
280 | dst = sg_dma_address(sg); | 276 | dst = sg_phys(sg); |
281 | 277 | ||
282 | bytes_to_transfer = sg_dma_len(sg); | 278 | bytes_to_transfer = sg_dma_len(sg); |
283 | 279 | ||
@@ -310,8 +306,7 @@ coh901318_lli_fill_sg(struct coh901318_pool *pool, | |||
310 | } | 306 | } |
311 | spin_unlock(&pool->lock); | 307 | spin_unlock(&pool->lock); |
312 | 308 | ||
313 | /* There can be many IRQs per sg transfer */ | 309 | return 0; |
314 | return nbr_of_irq; | ||
315 | err: | 310 | err: |
316 | spin_unlock(&pool->lock); | 311 | spin_unlock(&pool->lock); |
317 | return -EINVAL; | 312 | return -EINVAL; |