Skip to content

Commit

Permalink
dmaengine: split out pause/resume operations from device_control
Browse files Browse the repository at this point in the history
Split out the pause and resume operations to callbacks of their own. In order
to preserve some backwark compatibility, the dmaengine_pause/dmaengine_resume
are still falling back on dmaengine_device_control.

Eventually, that will allow to get the device capabilities in a generic way,
removing the need to implement device_slave_caps.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
  • Loading branch information
Maxime Ripard authored and Vinod Koul committed Dec 22, 2014
1 parent 94a73e3 commit 23a3ea2
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions include/linux/dmaengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,10 @@ struct dma_tx_state {
* code
* @device_control: manipulate all pending operations on a channel, returns
* zero or error code
* @device_pause: Pauses any transfer happening on a channel. Returns
* 0 or an error code
* @device_resume: Resumes any transfer on a channel previously
* paused. Returns 0 or an error code
* @device_tx_status: poll for transaction completion, the optional
* txstate parameter can be supplied with a pointer to get a
* struct with auxiliary transfer status information, otherwise the call
Expand Down Expand Up @@ -681,6 +685,8 @@ struct dma_device {
struct dma_slave_config *config);
int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
unsigned long arg);
int (*device_pause)(struct dma_chan *chan);
int (*device_resume)(struct dma_chan *chan);

enum dma_status (*device_tx_status)(struct dma_chan *chan,
dma_cookie_t cookie,
Expand Down Expand Up @@ -795,11 +801,17 @@ static inline int dmaengine_terminate_all(struct dma_chan *chan)

static inline int dmaengine_pause(struct dma_chan *chan)
{
if (chan->device->device_pause)
return chan->device->device_pause(chan);

return dmaengine_device_control(chan, DMA_PAUSE, 0);
}

static inline int dmaengine_resume(struct dma_chan *chan)
{
if (chan->device->device_resume)
return chan->device->device_resume(chan);

return dmaengine_device_control(chan, DMA_RESUME, 0);
}

Expand Down

0 comments on commit 23a3ea2

Please sign in to comment.