aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2014-07-08 06:46:37 -0400
committerVinod Koul <vinod.koul@intel.com>2014-07-28 07:33:13 -0400
commiteb3fe7def66511120766c8fc05ee9631cce7fe6f (patch)
treee6e1cf360c7446223e6658832be45085931fdf8d /arch
parent85a70762b7c79983888bf4d34c6a6bbcf6b40e7d (diff)
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: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Sekhar Nori <nsekhar@ti.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/common/edma.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index f834aae7720f..88099175fc56 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -1414,6 +1414,34 @@ void edma_clear_event(unsigned channel)
1414} 1414}
1415EXPORT_SYMBOL(edma_clear_event); 1415EXPORT_SYMBOL(edma_clear_event);
1416 1416
1417/*
1418 * edma_assign_channel_eventq - move given channel to desired eventq
1419 * Arguments:
1420 * channel - channel number
1421 * eventq_no - queue to move the channel
1422 *
1423 * Can be used to move a channel to a selected event queue.
1424 */
1425void edma_assign_channel_eventq(unsigned channel, enum dma_event_q eventq_no)
1426{
1427 unsigned ctlr;
1428
1429 ctlr = EDMA_CTLR(channel);
1430 channel = EDMA_CHAN_SLOT(channel);
1431
1432 if (channel >= edma_cc[ctlr]->num_channels)
1433 return;
1434
1435 /* default to low priority queue */
1436 if (eventq_no == EVENTQ_DEFAULT)
1437 eventq_no = edma_cc[ctlr]->default_queue;
1438 if (eventq_no >= edma_cc[ctlr]->num_tc)
1439 return;
1440
1441 map_dmach_queue(ctlr, channel, eventq_no);
1442}
1443EXPORT_SYMBOL(edma_assign_channel_eventq);
1444
1417static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata, 1445static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata,
1418 struct edma *edma_cc) 1446 struct edma *edma_cc)
1419{ 1447{