[RFC PATCH] dma: at_xdmac: creation of the atmel eXtended DMA Controller driver
Arnd Bergmann
arnd at arndb.de
Tue Jun 10 12:15:14 PDT 2014
On Tue, May 27, 2014 at 10:35:36AM +0200, Ludovic Desroches wrote:
> +static struct dma_chan *at_xdmac_xlate(struct of_phandle_args *dma_spec,
> + struct of_dma *of_dma)
> +{
> + struct at_xdmac_chan *atchan;
> + struct dma_chan *chan;
> + dma_cap_mask_t mask;
> + struct platform_device *pdev = of_find_device_by_node(dma_spec->np);
No need to search through all the device nodes, you can look up the
device from of_dma->of_dma_data.
> + if (dma_spec->args_count != 2) {
> + dev_err(&pdev->dev, "dma phandler args: bad number of args\n");
> + return NULL;
> + }
> +
> + dma_cap_zero(mask);
> + dma_cap_set(DMA_SLAVE, mask);
> + chan = dma_request_channel(mask, NULL, NULL);
> + if (!chan) {
> + dev_err(&pdev->dev, "can't get a dma channel\n");
> + return NULL;
> + }
You must use dma_get_any_slave_channel. dma_request_channel gives you a
channel from a random dma engine that is present in the system, not
necessarily the one you are managing here.
Arnd
More information about the linux-arm-kernel
mailing list