Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 447f18f1 authored by Sudhakar Rajashekhara's avatar Sudhakar Rajashekhara Committed by Kevin Hilman
Browse files

davinci: Fix edma_alloc_channel api for EDMA_CHANNEL_ANY case



Though edma_alloc_channel api was looping through the available
channel controllers in EDMA_CHANNEL_ANY case, it was never
returning the channel for 2nd channel controller, if 1st
channel controller had no free channels. This issue has
been fixed with this patch.

Signed-off-by: default avatarSudhakar Rajashekhara <sudhakar.raj@ti.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent 2d517508
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -595,7 +595,7 @@ int edma_alloc_channel(int channel,
		void *data,
		enum dma_event_q eventq_no)
{
	unsigned i, done, ctlr = 0;
	unsigned i, done = 0, ctlr = 0;

	if (channel >= 0) {
		ctlr = EDMA_CTLR(channel);
@@ -611,7 +611,7 @@ int edma_alloc_channel(int channel,
						edma_info[i]->num_channels,
						channel);
				if (channel == edma_info[i]->num_channels)
					return -ENOMEM;
					break;
				if (!test_and_set_bit(channel,
						edma_info[i]->edma_inuse)) {
					done = 1;
@@ -623,6 +623,8 @@ int edma_alloc_channel(int channel,
			if (done)
				break;
		}
		if (!done)
			return -ENOMEM;
	} else if (channel >= edma_info[ctlr]->num_channels) {
		return -EINVAL;
	} else if (test_and_set_bit(channel, edma_info[ctlr]->edma_inuse)) {