[media] media: davinci: vpfe_capture: embed video_device
authorLad, Prabhakar <prabhakar.csengg@gmail.com>
Tue, 10 Mar 2015 17:53:05 +0000 (14:53 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 3 Apr 2015 02:54:00 +0000 (23:54 -0300)
Embed the video_device struct to simplify the error handling and in
order to (eventually) get rid of video_device_alloc/release.

Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/davinci/vpfe_capture.c
include/media/davinci/vpfe_capture.h

index b41bf7e822c82dddc934c8eab78228add0cd8f4a..ccfcf3f528d377f314c3483b04327dcb6ae53031 100644 (file)
@@ -1871,16 +1871,9 @@ static int vpfe_probe(struct platform_device *pdev)
                goto probe_free_ccdc_cfg_mem;
        }
 
-       /* Allocate memory for video device */
-       vfd = video_device_alloc();
-       if (NULL == vfd) {
-               ret = -ENOMEM;
-               v4l2_err(pdev->dev.driver, "Unable to alloc video device\n");
-               goto probe_out_release_irq;
-       }
-
+       vfd = &vpfe_dev->video_dev;
        /* Initialize field of video device */
-       vfd->release            = video_device_release;
+       vfd->release            = video_device_release_empty;
        vfd->fops               = &vpfe_fops;
        vfd->ioctl_ops          = &vpfe_ioctl_ops;
        vfd->tvnorms            = 0;
@@ -1891,14 +1884,12 @@ static int vpfe_probe(struct platform_device *pdev)
                 (VPFE_CAPTURE_VERSION_CODE >> 16) & 0xff,
                 (VPFE_CAPTURE_VERSION_CODE >> 8) & 0xff,
                 (VPFE_CAPTURE_VERSION_CODE) & 0xff);
-       /* Set video_dev to the video device */
-       vpfe_dev->video_dev     = vfd;
 
        ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev);
        if (ret) {
                v4l2_err(pdev->dev.driver,
                        "Unable to register v4l2 device.\n");
-               goto probe_out_video_release;
+               goto probe_out_release_irq;
        }
        v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n");
        spin_lock_init(&vpfe_dev->irqlock);
@@ -1914,7 +1905,7 @@ static int vpfe_probe(struct platform_device *pdev)
        v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev,
                "video_dev=%p\n", &vpfe_dev->video_dev);
        vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-       ret = video_register_device(vpfe_dev->video_dev,
+       ret = video_register_device(&vpfe_dev->video_dev,
                                    VFL_TYPE_GRABBER, -1);
 
        if (ret) {
@@ -1927,7 +1918,7 @@ static int vpfe_probe(struct platform_device *pdev)
        /* set the driver data in platform device */
        platform_set_drvdata(pdev, vpfe_dev);
        /* set driver private data */
-       video_set_drvdata(vpfe_dev->video_dev, vpfe_dev);
+       video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev);
        i2c_adap = i2c_get_adapter(vpfe_cfg->i2c_adapter_id);
        num_subdevs = vpfe_cfg->num_subdevs;
        vpfe_dev->sd = kmalloc(sizeof(struct v4l2_subdev *) * num_subdevs,
@@ -1979,12 +1970,9 @@ static int vpfe_probe(struct platform_device *pdev)
 probe_sd_out:
        kfree(vpfe_dev->sd);
 probe_out_video_unregister:
-       video_unregister_device(vpfe_dev->video_dev);
+       video_unregister_device(&vpfe_dev->video_dev);
 probe_out_v4l2_unregister:
        v4l2_device_unregister(&vpfe_dev->v4l2_dev);
-probe_out_video_release:
-       if (!video_is_registered(vpfe_dev->video_dev))
-               video_device_release(vpfe_dev->video_dev);
 probe_out_release_irq:
        free_irq(vpfe_dev->ccdc_irq0, vpfe_dev);
 probe_free_ccdc_cfg_mem:
@@ -2007,7 +1995,7 @@ static int vpfe_remove(struct platform_device *pdev)
        free_irq(vpfe_dev->ccdc_irq0, vpfe_dev);
        kfree(vpfe_dev->sd);
        v4l2_device_unregister(&vpfe_dev->v4l2_dev);
-       video_unregister_device(vpfe_dev->video_dev);
+       video_unregister_device(&vpfe_dev->video_dev);
        kfree(vpfe_dev);
        kfree(ccdc_cfg);
        return 0;
index 288772e6900a631e12169108a4ca4bc2c2a6bf03..28bcd71cdd2608f9ad7f19ab124f61679f88b409 100644 (file)
@@ -102,7 +102,7 @@ struct vpfe_config {
 struct vpfe_device {
        /* V4l2 specific parameters */
        /* Identifies video device for this channel */
-       struct video_device *video_dev;
+       struct video_device video_dev;
        /* sub devices */
        struct v4l2_subdev **sd;
        /* vpfe cfg */