diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2015-03-09 12:34:05 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-02 22:35:21 -0400 |
commit | 650e629bf7a782ce3c646f12a0ec381147b2c9b9 (patch) | |
tree | fea0033c9e0b11079415ba90a55014a8625b2a0f /drivers/media | |
parent | e239129ca7c5aa1791fa66528bfdd43854cf0d48 (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.c | 21 |
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 | ||
128 | struct deinterlace_dev { | 128 | struct 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); |
1071 | err_m2m: | 1064 | err_m2m: |
1072 | video_unregister_device(pcdev->vfd); | 1065 | video_unregister_device(&pcdev->vfd); |
1073 | err_ctx: | 1066 | err_ctx: |
1074 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); | 1067 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); |
1075 | rel_vdev: | ||
1076 | video_device_release(vfd); | ||
1077 | unreg_dev: | 1068 | unreg_dev: |
1078 | v4l2_device_unregister(&pcdev->v4l2_dev); | 1069 | v4l2_device_unregister(&pcdev->v4l2_dev); |
1079 | rel_dma: | 1070 | rel_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); |