dmaengine: Add devm_dma_request_chan()
Expand the arsenal of devm functions for DMA devices, this time for requesting channels. Signed-off-by: Bence Csókás <csokas.bence@prolan.hu> Link: https://lore.kernel.org/r/20250610082256.400492-2-csokas.bence@prolan.hu Signed-off-by: Vinod Koul <vkoul@kernel.org>pull/1320/head
parent
19272b37aa
commit
08bf1663c2
|
|
@ -926,6 +926,36 @@ void dma_release_channel(struct dma_chan *chan)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dma_release_channel);
|
EXPORT_SYMBOL_GPL(dma_release_channel);
|
||||||
|
|
||||||
|
static void dmaenginem_release_channel(void *chan)
|
||||||
|
{
|
||||||
|
dma_release_channel(chan);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* devm_dma_request_chan - try to allocate an exclusive slave channel
|
||||||
|
* @dev: pointer to client device structure
|
||||||
|
* @name: slave channel name
|
||||||
|
*
|
||||||
|
* Returns pointer to appropriate DMA channel on success or an error pointer.
|
||||||
|
*
|
||||||
|
* The operation is managed and will be undone on driver detach.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name)
|
||||||
|
{
|
||||||
|
struct dma_chan *chan = dma_request_chan(dev, name);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!IS_ERR(chan))
|
||||||
|
ret = devm_add_action_or_reset(dev, dmaenginem_release_channel, chan);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ERR_PTR(ret);
|
||||||
|
|
||||||
|
return chan;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devm_dma_request_chan);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dmaengine_get - register interest in dma_channels
|
* dmaengine_get - register interest in dma_channels
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1524,6 +1524,7 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
||||||
|
|
||||||
struct dma_chan *dma_request_chan(struct device *dev, const char *name);
|
struct dma_chan *dma_request_chan(struct device *dev, const char *name);
|
||||||
struct dma_chan *dma_request_chan_by_mask(const dma_cap_mask_t *mask);
|
struct dma_chan *dma_request_chan_by_mask(const dma_cap_mask_t *mask);
|
||||||
|
struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name);
|
||||||
|
|
||||||
void dma_release_channel(struct dma_chan *chan);
|
void dma_release_channel(struct dma_chan *chan);
|
||||||
int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps);
|
int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps);
|
||||||
|
|
@ -1560,6 +1561,12 @@ static inline struct dma_chan *dma_request_chan_by_mask(
|
||||||
{
|
{
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name)
|
||||||
|
{
|
||||||
|
return ERR_PTR(-ENODEV);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void dma_release_channel(struct dma_chan *chan)
|
static inline void dma_release_channel(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue