Initialise the V4L2 mem2mem framework before creating the video device.
Referencing ctx->m2m_dev isn't allowed before that as it is NULL.

Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
---
 drivers/media/platform/vim2m.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/media/platform/vim2m.c b/drivers/media/platform/vim2m.c
index 065483e..9b6b456 100644
--- a/drivers/media/platform/vim2m.c
+++ b/drivers/media/platform/vim2m.c
@@ -1008,6 +1008,16 @@ static int vim2m_probe(struct platform_device *pdev)
        atomic_set(&dev->num_inst, 0);
        mutex_init(&dev->dev_mutex);
 
+       timer_setup(&dev->timer, device_isr, 0);
+       platform_set_drvdata(pdev, dev);
+
+       dev->m2m_dev = v4l2_m2m_init(&m2m_ops);
+       if (IS_ERR(dev->m2m_dev)) {
+               v4l2_err(&dev->v4l2_dev, "Failed to init mem2mem device\n");
+               ret = PTR_ERR(dev->m2m_dev);
+               goto err_unreg_v4l2_dev;
+       }
+
        dev->vfd = vim2m_videodev;
        vfd = &dev->vfd;
        vfd->lock = &dev->dev_mutex;
@@ -1016,7 +1026,7 @@ static int vim2m_probe(struct platform_device *pdev)
        ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0);
        if (ret) {
                v4l2_err(&dev->v4l2_dev, "Failed to register video device\n");
-               goto unreg_dev;
+               goto err_unreg_vdev;
        }
 
        video_set_drvdata(vfd, dev);
@@ -1024,22 +1034,13 @@ static int vim2m_probe(struct platform_device *pdev)
        v4l2_info(&dev->v4l2_dev,
                        "Device registered as /dev/video%d\n", vfd->num);
 
-       timer_setup(&dev->timer, device_isr, 0);
-       platform_set_drvdata(pdev, dev);
-
-       dev->m2m_dev = v4l2_m2m_init(&m2m_ops);
-       if (IS_ERR(dev->m2m_dev)) {
-               v4l2_err(&dev->v4l2_dev, "Failed to init mem2mem device\n");
-               ret = PTR_ERR(dev->m2m_dev);
-               goto err_m2m;
-       }
-
        return 0;
 
-err_m2m:
-       v4l2_m2m_release(dev->m2m_dev);
+err_unreg_vdev:
        video_unregister_device(&dev->vfd);
-unreg_dev:
+       v4l2_m2m_release(dev->m2m_dev);
+
+err_unreg_v4l2_dev:
        v4l2_device_unregister(&dev->v4l2_dev);
 
        return ret;
-- 
2.7.4

Reply via email to