···926926}927927EXPORT_SYMBOL_GPL(dma_release_channel);928928929929+static void dmaenginem_release_channel(void *chan)930930+{931931+ dma_release_channel(chan);932932+}933933+934934+/**935935+ * devm_dma_request_chan - try to allocate an exclusive slave channel936936+ * @dev: pointer to client device structure937937+ * @name: slave channel name938938+ *939939+ * Returns pointer to appropriate DMA channel on success or an error pointer.940940+ *941941+ * The operation is managed and will be undone on driver detach.942942+ */943943+944944+struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name)945945+{946946+ struct dma_chan *chan = dma_request_chan(dev, name);947947+ int ret = 0;948948+949949+ if (!IS_ERR(chan))950950+ ret = devm_add_action_or_reset(dev, dmaenginem_release_channel, chan);951951+952952+ if (ret)953953+ return ERR_PTR(ret);954954+955955+ return chan;956956+}957957+EXPORT_SYMBOL_GPL(devm_dma_request_chan);958958+929959/**930960 * dmaengine_get - register interest in dma_channels931961 */