media: xilinx: Use dma_request_chan() instead dma_request_slave_channel()
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Fri, 10 Jan 2020 07:16:48 +0000 (08:16 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 24 Feb 2020 15:17:00 +0000 (16:17 +0100)
dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.

By using dma_request_chan() directly the driver can support deferred
probing against DMA.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/xilinx/xilinx-dma.c

index b211380..3bb54a4 100644 (file)
@@ -725,10 +725,11 @@ int xvip_dma_init(struct xvip_composite_device *xdev, struct xvip_dma *dma,
 
        /* ... and the DMA channel. */
        snprintf(name, sizeof(name), "port%u", port);
-       dma->dma = dma_request_slave_channel(dma->xdev->dev, name);
-       if (dma->dma == NULL) {
-               dev_err(dma->xdev->dev, "no VDMA channel found\n");
-               ret = -ENODEV;
+       dma->dma = dma_request_chan(dma->xdev->dev, name);
+       if (IS_ERR(dma->dma)) {
+               ret = PTR_ERR(dma->dma);
+               if (ret != -EPROBE_DEFER)
+                       dev_err(dma->xdev->dev, "no VDMA channel found\n");
                goto error;
        }
 
@@ -752,7 +753,7 @@ void xvip_dma_cleanup(struct xvip_dma *dma)
        if (video_is_registered(&dma->video))
                video_unregister_device(&dma->video);
 
-       if (dma->dma)
+       if (!IS_ERR_OR_NULL(dma->dma))
                dma_release_channel(dma->dma);
 
        media_entity_cleanup(&dma->video.entity);