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

Commit eb3fe7de authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Vinod Koul
Browse files

ARM: edma: Add edma_assign_channel_eventq() to move channel to a give queue



In some cases it is desired to move a channel to a specific event queue.
Such a use case is audio, where it is preferred that it is served with
highest priority compared to other DMA clients.

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: default avatarSekhar Nori <nsekhar@ti.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent 85a70762
Loading
Loading
Loading
Loading
+28 −0
Original line number Original line Diff line number Diff line
@@ -1414,6 +1414,34 @@ void edma_clear_event(unsigned channel)
}
}
EXPORT_SYMBOL(edma_clear_event);
EXPORT_SYMBOL(edma_clear_event);


/*
 * edma_assign_channel_eventq - move given channel to desired eventq
 * Arguments:
 *	channel - channel number
 *	eventq_no - queue to move the channel
 *
 * Can be used to move a channel to a selected event queue.
 */
void edma_assign_channel_eventq(unsigned channel, enum dma_event_q eventq_no)
{
	unsigned ctlr;

	ctlr = EDMA_CTLR(channel);
	channel = EDMA_CHAN_SLOT(channel);

	if (channel >= edma_cc[ctlr]->num_channels)
		return;

	/* default to low priority queue */
	if (eventq_no == EVENTQ_DEFAULT)
		eventq_no = edma_cc[ctlr]->default_queue;
	if (eventq_no >= edma_cc[ctlr]->num_tc)
		return;

	map_dmach_queue(ctlr, channel, eventq_no);
}
EXPORT_SYMBOL(edma_assign_channel_eventq);

static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata,
static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata,
			      struct edma *edma_cc)
			      struct edma *edma_cc)
{
{
+2 −0
Original line number Original line Diff line number Diff line
@@ -150,6 +150,8 @@ void edma_clear_event(unsigned channel);
void edma_pause(unsigned channel);
void edma_pause(unsigned channel);
void edma_resume(unsigned channel);
void edma_resume(unsigned channel);


void edma_assign_channel_eventq(unsigned channel, enum dma_event_q eventq_no);

struct edma_rsv_info {
struct edma_rsv_info {


	const s16	(*rsv_chans)[2];
	const s16	(*rsv_chans)[2];