diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2014-10-28 23:30:58 +0100 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2015-01-18 15:25:57 +0100 |
commit | 0d5484b1c3db8a3870c6100deeb4678594433b2c (patch) | |
tree | 14209f1987ed0b61dd802c82508055a3fdf76004 /drivers/dma/dmaengine.c | |
parent | dmaengine: at_hdmac: declare slave capabilities (diff) | |
download | linux-0d5484b1c3db8a3870c6100deeb4678594433b2c.tar.xz linux-0d5484b1c3db8a3870c6100deeb4678594433b2c.zip |
dmaengine: Move dma_get_slave_caps() implementation to dmaengine.c
The function is too big to be a static inline.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/dmaengine.c')
-rw-r--r-- | drivers/dma/dmaengine.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 30211f9791b7..f15712f2fec6 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -479,6 +479,39 @@ static void dma_channel_rebalance(void) } } +int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps) +{ + struct dma_device *device; + + if (!chan || !caps) + return -EINVAL; + + device = chan->device; + + /* check if the channel supports slave transactions */ + if (!test_bit(DMA_SLAVE, device->cap_mask.bits)) + return -ENXIO; + + /* + * Check whether it reports it uses the generic slave + * capabilities, if not, that means it doesn't support any + * kind of slave capabilities reporting. + */ + if (!device->directions) + return -ENXIO; + + caps->src_addr_widths = device->src_addr_widths; + caps->dst_addr_widths = device->dst_addr_widths; + caps->directions = device->directions; + caps->residue_granularity = device->residue_granularity; + + caps->cmd_pause = !!device->device_pause; + caps->cmd_terminate = !!device->device_terminate_all; + + return 0; +} +EXPORT_SYMBOL_GPL(dma_get_slave_caps); + static struct dma_chan *private_candidate(const dma_cap_mask_t *mask, struct dma_device *dev, dma_filter_fn fn, void *fn_param) |