mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
DMAENGINE: extend the control command to include an arg
This adds an argument to the DMAengine control function, so that we can later provide control commands that need some external data passed in through an argument akin to the ioctl() operation prototype. [[email protected]: fix up some missed conversions] Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Dan Williams <[email protected]>
This commit is contained in:
parent
4aed79b281
commit
058276303d
14 changed files with 32 additions and 21 deletions
|
|
@ -759,7 +759,8 @@ err_desc_get:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int atc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int atc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct at_dma_chan *atchan = to_at_dma_chan(chan);
|
||||
struct at_dma *atdma = to_at_dma(chan->device);
|
||||
|
|
|
|||
|
|
@ -942,7 +942,7 @@ coh901318_free_chan_resources(struct dma_chan *chan)
|
|||
|
||||
spin_unlock_irqrestore(&cohc->lock, flags);
|
||||
|
||||
chan->device->device_control(chan, DMA_TERMINATE_ALL);
|
||||
chan->device->device_control(chan, DMA_TERMINATE_ALL, 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1176,7 +1176,8 @@ coh901318_issue_pending(struct dma_chan *chan)
|
|||
}
|
||||
|
||||
static int
|
||||
coh901318_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
coh901318_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct coh901318_chan *cohc = to_coh901318_chan(chan);
|
||||
|
|
|
|||
|
|
@ -781,7 +781,8 @@ err_desc_get:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int dwc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int dwc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct dw_dma_chan *dwc = to_dw_dma_chan(chan);
|
||||
struct dw_dma *dw = to_dw_dma(chan->device);
|
||||
|
|
|
|||
|
|
@ -775,7 +775,7 @@ fail:
|
|||
}
|
||||
|
||||
static int fsl_dma_device_control(struct dma_chan *dchan,
|
||||
enum dma_ctrl_cmd cmd)
|
||||
enum dma_ctrl_cmd cmd, unsigned long arg)
|
||||
{
|
||||
struct fsldma_chan *chan;
|
||||
unsigned long flags;
|
||||
|
|
|
|||
|
|
@ -1472,7 +1472,8 @@ static void idmac_issue_pending(struct dma_chan *chan)
|
|||
*/
|
||||
}
|
||||
|
||||
static int __idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int __idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct idmac_channel *ichan = to_idmac_chan(chan);
|
||||
struct idmac *idmac = to_idmac(chan->device);
|
||||
|
|
@ -1513,14 +1514,15 @@ static int __idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct idmac_channel *ichan = to_idmac_chan(chan);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ichan->chan_mutex);
|
||||
|
||||
ret = __idmac_control(chan, cmd);
|
||||
ret = __idmac_control(chan, cmd, arg);
|
||||
|
||||
mutex_unlock(&ichan->chan_mutex);
|
||||
|
||||
|
|
@ -1616,7 +1618,7 @@ static void idmac_free_chan_resources(struct dma_chan *chan)
|
|||
|
||||
mutex_lock(&ichan->chan_mutex);
|
||||
|
||||
__idmac_control(chan, DMA_TERMINATE_ALL);
|
||||
__idmac_control(chan, DMA_TERMINATE_ALL, 0);
|
||||
|
||||
if (ichan->status > IPU_CHANNEL_FREE) {
|
||||
#ifdef DEBUG
|
||||
|
|
@ -1709,7 +1711,7 @@ static void __exit ipu_idmac_exit(struct ipu *ipu)
|
|||
for (i = 0; i < IPU_CHANNELS_NUM; i++) {
|
||||
struct idmac_channel *ichan = ipu->channel + i;
|
||||
|
||||
idmac_control(&ichan->dma_chan, DMA_TERMINATE_ALL);
|
||||
idmac_control(&ichan->dma_chan, DMA_TERMINATE_ALL, 0);
|
||||
idmac_prep_slave_sg(&ichan->dma_chan, NULL, 0, DMA_NONE, 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -580,7 +580,8 @@ static struct dma_async_tx_descriptor *sh_dmae_prep_slave_sg(
|
|||
direction, flags);
|
||||
}
|
||||
|
||||
static int sh_dmae_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int sh_dmae_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct sh_dmae_chan *sh_chan = to_sh_chan(chan);
|
||||
|
||||
|
|
|
|||
|
|
@ -2065,7 +2065,8 @@ static void d40_issue_pending(struct dma_chan *chan)
|
|||
spin_unlock_irqrestore(&d40c->lock, flags);
|
||||
}
|
||||
|
||||
static int d40_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int d40_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct d40_chan *d40c = container_of(chan, struct d40_chan, chan);
|
||||
|
|
|
|||
|
|
@ -611,7 +611,8 @@ static struct dma_async_tx_descriptor *td_prep_slave_sg(struct dma_chan *chan,
|
|||
return &td_desc->txd;
|
||||
}
|
||||
|
||||
static int td_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int td_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct timb_dma_chan *td_chan =
|
||||
container_of(chan, struct timb_dma_chan, chan);
|
||||
|
|
|
|||
|
|
@ -938,7 +938,8 @@ txx9dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|||
return &first->txd;
|
||||
}
|
||||
|
||||
static int txx9dmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd)
|
||||
static int txx9dmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct txx9dmac_chan *dc = to_txx9dmac_chan(chan);
|
||||
struct txx9dmac_desc *desc, *_desc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue