diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2011-01-08 07:36:04 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-22 15:37:57 -0400 |
commit | 73cb42068cff419e72456940c713ceb5efa68c2a (patch) | |
tree | 2e2cfa9f87b584774a7dc496ec6b46431bd7ce56 /drivers/media | |
parent | fc5602be7ca5b55174c5d6595089718779b28dfa (diff) |
[media] v4l2-fh: add v4l2_fh_open and v4l2_fh_release helper functions
Add two new functions: v4l2_fh_open allocates and initializes a struct v4l2_fh
based on a struct file pointer and v4l2_fh_release releases and frees a struct
v4l2_fh.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/v4l2-fh.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/media/video/v4l2-fh.c b/drivers/media/video/v4l2-fh.c index 78a1608a09d6..27242e5ca431 100644 --- a/drivers/media/video/v4l2-fh.c +++ b/drivers/media/video/v4l2-fh.c | |||
@@ -23,6 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/bitops.h> | 25 | #include <linux/bitops.h> |
26 | #include <linux/slab.h> | ||
26 | #include <media/v4l2-dev.h> | 27 | #include <media/v4l2-dev.h> |
27 | #include <media/v4l2-fh.h> | 28 | #include <media/v4l2-fh.h> |
28 | #include <media/v4l2-event.h> | 29 | #include <media/v4l2-event.h> |
@@ -60,6 +61,20 @@ void v4l2_fh_add(struct v4l2_fh *fh) | |||
60 | } | 61 | } |
61 | EXPORT_SYMBOL_GPL(v4l2_fh_add); | 62 | EXPORT_SYMBOL_GPL(v4l2_fh_add); |
62 | 63 | ||
64 | int v4l2_fh_open(struct file *filp) | ||
65 | { | ||
66 | struct video_device *vdev = video_devdata(filp); | ||
67 | struct v4l2_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL); | ||
68 | |||
69 | filp->private_data = fh; | ||
70 | if (fh == NULL) | ||
71 | return -ENOMEM; | ||
72 | v4l2_fh_init(fh, vdev); | ||
73 | v4l2_fh_add(fh); | ||
74 | return 0; | ||
75 | } | ||
76 | EXPORT_SYMBOL_GPL(v4l2_fh_open); | ||
77 | |||
63 | void v4l2_fh_del(struct v4l2_fh *fh) | 78 | void v4l2_fh_del(struct v4l2_fh *fh) |
64 | { | 79 | { |
65 | unsigned long flags; | 80 | unsigned long flags; |
@@ -81,3 +96,16 @@ void v4l2_fh_exit(struct v4l2_fh *fh) | |||
81 | v4l2_event_free(fh); | 96 | v4l2_event_free(fh); |
82 | } | 97 | } |
83 | EXPORT_SYMBOL_GPL(v4l2_fh_exit); | 98 | EXPORT_SYMBOL_GPL(v4l2_fh_exit); |
99 | |||
100 | int v4l2_fh_release(struct file *filp) | ||
101 | { | ||
102 | struct v4l2_fh *fh = filp->private_data; | ||
103 | |||
104 | if (fh) { | ||
105 | v4l2_fh_del(fh); | ||
106 | v4l2_fh_exit(fh); | ||
107 | kfree(fh); | ||
108 | } | ||
109 | return 0; | ||
110 | } | ||
111 | EXPORT_SYMBOL_GPL(v4l2_fh_release); | ||