diff options
-rw-r--r-- | arch/arm/mach-davinci/dma.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c index 97a49f98fe13..89a3dccde19f 100644 --- a/arch/arm/mach-davinci/dma.c +++ b/arch/arm/mach-davinci/dma.c | |||
@@ -595,7 +595,7 @@ int edma_alloc_channel(int channel, | |||
595 | void *data, | 595 | void *data, |
596 | enum dma_event_q eventq_no) | 596 | enum dma_event_q eventq_no) |
597 | { | 597 | { |
598 | unsigned i, done, ctlr = 0; | 598 | unsigned i, done = 0, ctlr = 0; |
599 | 599 | ||
600 | if (channel >= 0) { | 600 | if (channel >= 0) { |
601 | ctlr = EDMA_CTLR(channel); | 601 | ctlr = EDMA_CTLR(channel); |
@@ -611,7 +611,7 @@ int edma_alloc_channel(int channel, | |||
611 | edma_info[i]->num_channels, | 611 | edma_info[i]->num_channels, |
612 | channel); | 612 | channel); |
613 | if (channel == edma_info[i]->num_channels) | 613 | if (channel == edma_info[i]->num_channels) |
614 | return -ENOMEM; | 614 | break; |
615 | if (!test_and_set_bit(channel, | 615 | if (!test_and_set_bit(channel, |
616 | edma_info[i]->edma_inuse)) { | 616 | edma_info[i]->edma_inuse)) { |
617 | done = 1; | 617 | done = 1; |
@@ -623,6 +623,8 @@ int edma_alloc_channel(int channel, | |||
623 | if (done) | 623 | if (done) |
624 | break; | 624 | break; |
625 | } | 625 | } |
626 | if (!done) | ||
627 | return -ENOMEM; | ||
626 | } else if (channel >= edma_info[ctlr]->num_channels) { | 628 | } else if (channel >= edma_info[ctlr]->num_channels) { |
627 | return -EINVAL; | 629 | return -EINVAL; |
628 | } else if (test_and_set_bit(channel, edma_info[ctlr]->edma_inuse)) { | 630 | } else if (test_and_set_bit(channel, edma_info[ctlr]->edma_inuse)) { |