Commit 08bf1663 authored by Bence Csókás's avatar Bence Csókás Committed by Vinod Koul
Browse files

dmaengine: Add devm_dma_request_chan()



Expand the arsenal of devm functions for DMA devices, this time for
requesting channels.

Signed-off-by: default avatarBence Csókás <csokas.bence@prolan.hu>
Link: https://lore.kernel.org/r/20250610082256.400492-2-csokas.bence@prolan.hu


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 19272b37
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -926,6 +926,36 @@ void dma_release_channel(struct dma_chan *chan)
}
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
 */
+7 −0
Original line number Diff line number Diff line
@@ -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_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);
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);
}

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)
{
}