aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2015-03-09 12:34:05 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-04-02 22:35:21 -0400
commit650e629bf7a782ce3c646f12a0ec381147b2c9b9 (patch)
treefea0033c9e0b11079415ba90a55014a8625b2a0f /drivers/media
parente239129ca7c5aa1791fa66528bfdd43854cf0d48 (diff)
[media] m2m-deinterlace: embed video_device
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: Hans Verkuil <hans.verkuil@cisco.com> Cc: Javier Martin <javier.martin@vista-silicon.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/m2m-deinterlace.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/drivers/media/platform/m2m-deinterlace.c b/drivers/media/platform/m2m-deinterlace.c
index b70c1aecca37..92d954973ccf 100644
--- a/drivers/media/platform/m2m-deinterlace.c
+++ b/drivers/media/platform/m2m-deinterlace.c
@@ -127,7 +127,7 @@ static struct deinterlace_fmt *find_format(struct v4l2_format *f)
127 127
128struct deinterlace_dev { 128struct deinterlace_dev {
129 struct v4l2_device v4l2_dev; 129 struct v4l2_device v4l2_dev;
130 struct video_device *vfd; 130 struct video_device vfd;
131 131
132 atomic_t busy; 132 atomic_t busy;
133 struct mutex dev_mutex; 133 struct mutex dev_mutex;
@@ -983,7 +983,7 @@ static struct video_device deinterlace_videodev = {
983 .fops = &deinterlace_fops, 983 .fops = &deinterlace_fops,
984 .ioctl_ops = &deinterlace_ioctl_ops, 984 .ioctl_ops = &deinterlace_ioctl_ops,
985 .minor = -1, 985 .minor = -1,
986 .release = video_device_release, 986 .release = video_device_release_empty,
987 .vfl_dir = VFL_DIR_M2M, 987 .vfl_dir = VFL_DIR_M2M,
988}; 988};
989 989
@@ -1026,13 +1026,7 @@ static int deinterlace_probe(struct platform_device *pdev)
1026 atomic_set(&pcdev->busy, 0); 1026 atomic_set(&pcdev->busy, 0);
1027 mutex_init(&pcdev->dev_mutex); 1027 mutex_init(&pcdev->dev_mutex);
1028 1028
1029 vfd = video_device_alloc(); 1029 vfd = &pcdev->vfd;
1030 if (!vfd) {
1031 v4l2_err(&pcdev->v4l2_dev, "Failed to allocate video device\n");
1032 ret = -ENOMEM;
1033 goto unreg_dev;
1034 }
1035
1036 *vfd = deinterlace_videodev; 1030 *vfd = deinterlace_videodev;
1037 vfd->lock = &pcdev->dev_mutex; 1031 vfd->lock = &pcdev->dev_mutex;
1038 vfd->v4l2_dev = &pcdev->v4l2_dev; 1032 vfd->v4l2_dev = &pcdev->v4l2_dev;
@@ -1040,12 +1034,11 @@ static int deinterlace_probe(struct platform_device *pdev)
1040 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0); 1034 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0);
1041 if (ret) { 1035 if (ret) {
1042 v4l2_err(&pcdev->v4l2_dev, "Failed to register video device\n"); 1036 v4l2_err(&pcdev->v4l2_dev, "Failed to register video device\n");
1043 goto rel_vdev; 1037 goto unreg_dev;
1044 } 1038 }
1045 1039
1046 video_set_drvdata(vfd, pcdev); 1040 video_set_drvdata(vfd, pcdev);
1047 snprintf(vfd->name, sizeof(vfd->name), "%s", deinterlace_videodev.name); 1041 snprintf(vfd->name, sizeof(vfd->name), "%s", deinterlace_videodev.name);
1048 pcdev->vfd = vfd;
1049 v4l2_info(&pcdev->v4l2_dev, MEM2MEM_TEST_MODULE_NAME 1042 v4l2_info(&pcdev->v4l2_dev, MEM2MEM_TEST_MODULE_NAME
1050 " Device registered as /dev/video%d\n", vfd->num); 1043 " Device registered as /dev/video%d\n", vfd->num);
1051 1044
@@ -1069,11 +1062,9 @@ static int deinterlace_probe(struct platform_device *pdev)
1069 1062
1070 v4l2_m2m_release(pcdev->m2m_dev); 1063 v4l2_m2m_release(pcdev->m2m_dev);
1071err_m2m: 1064err_m2m:
1072 video_unregister_device(pcdev->vfd); 1065 video_unregister_device(&pcdev->vfd);
1073err_ctx: 1066err_ctx:
1074 vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); 1067 vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx);
1075rel_vdev:
1076 video_device_release(vfd);
1077unreg_dev: 1068unreg_dev:
1078 v4l2_device_unregister(&pcdev->v4l2_dev); 1069 v4l2_device_unregister(&pcdev->v4l2_dev);
1079rel_dma: 1070rel_dma:
@@ -1088,7 +1079,7 @@ static int deinterlace_remove(struct platform_device *pdev)
1088 1079
1089 v4l2_info(&pcdev->v4l2_dev, "Removing " MEM2MEM_TEST_MODULE_NAME); 1080 v4l2_info(&pcdev->v4l2_dev, "Removing " MEM2MEM_TEST_MODULE_NAME);
1090 v4l2_m2m_release(pcdev->m2m_dev); 1081 v4l2_m2m_release(pcdev->m2m_dev);
1091 video_unregister_device(pcdev->vfd); 1082 video_unregister_device(&pcdev->vfd);
1092 v4l2_device_unregister(&pcdev->v4l2_dev); 1083 v4l2_device_unregister(&pcdev->v4l2_dev);
1093 vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); 1084 vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx);
1094 dma_release_channel(pcdev->dma_chan); 1085 dma_release_channel(pcdev->dma_chan);