On 25-07-18, 13:46, Huang Shijie wrote: > This patch adds the dmam_async_device_register for DMA code. > Use the Devres to call the release for the DMA engine driver. no users? > > Signed-off-by: Huang Shijie <sjhuang@xxxxxxxxxxx> > --- > Documentation/driver-model/devres.txt | 1 + > drivers/dma/dmaengine.c | 35 +++++++++++++++++++++++++++ > include/linux/dmaengine.h | 1 + > 3 files changed, 37 insertions(+) > > diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt > index a3e8bceb5f19..26c6de621446 100644 > --- a/Documentation/driver-model/devres.txt > +++ b/Documentation/driver-model/devres.txt > @@ -240,6 +240,7 @@ CLOCK > devm_of_clk_add_hw_provider() > > DMA > + dmam_async_device_register() can we name it dmaengine_async_device_register, not to confuse with dma APIs > dmam_alloc_coherent() > dmam_alloc_attrs() > dmam_declare_coherent_memory() > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index 84ac38dbdb65..2477af0bdfc7 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -1135,6 +1135,41 @@ void dma_async_device_unregister(struct dma_device *device) > } > EXPORT_SYMBOL(dma_async_device_unregister); > > +static void dmam_device_release(struct device *dev, void *res) > +{ > + struct dma_device *device; > + > + device = *(struct dma_device **)res; > + dma_async_device_unregister(device); > +} > + > +/** > + * dmam_async_device_register - registers DMA devices found > + * @device: &dma_device > + * > + * The operation is managed and will be undone on driver detach. > + */ > +int dmam_async_device_register(struct dma_device *device) > +{ > + void *p; > + int ret; > + > + p = devres_alloc(dmam_device_release, sizeof(void *), GFP_KERNEL); > + if (!p) > + return -ENOMEM; > + > + ret = dma_async_device_register(device); > + if (!ret) { > + *(struct dma_device **)p = device; > + devres_add(device->dev, p); > + } else { > + devres_free(p); > + } > + > + return ret; > +} > +EXPORT_SYMBOL(dmam_async_device_register); > + > struct dmaengine_unmap_pool { > struct kmem_cache *cache; > const char *name; > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h > index c8c3a7a93802..b98bced0b98e 100644 > --- a/include/linux/dmaengine.h > +++ b/include/linux/dmaengine.h > @@ -1406,6 +1406,7 @@ static inline int dmaengine_desc_free(struct dma_async_tx_descriptor *desc) > /* --- DMA device --- */ > > int dma_async_device_register(struct dma_device *device); > +int dmam_async_device_register(struct dma_device *device); > void dma_async_device_unregister(struct dma_device *device); > void dma_run_dependencies(struct dma_async_tx_descriptor *tx); > struct dma_chan *dma_get_slave_channel(struct dma_chan *chan); > -- > 2.17.1 -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html