aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2011-01-08 07:36:04 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-03-22 15:37:57 -0400
commit73cb42068cff419e72456940c713ceb5efa68c2a (patch)
tree2e2cfa9f87b584774a7dc496ec6b46431bd7ce56 /drivers/media
parentfc5602be7ca5b55174c5d6595089718779b28dfa (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.c28
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}
61EXPORT_SYMBOL_GPL(v4l2_fh_add); 62EXPORT_SYMBOL_GPL(v4l2_fh_add);
62 63
64int 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}
76EXPORT_SYMBOL_GPL(v4l2_fh_open);
77
63void v4l2_fh_del(struct v4l2_fh *fh) 78void 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}
83EXPORT_SYMBOL_GPL(v4l2_fh_exit); 98EXPORT_SYMBOL_GPL(v4l2_fh_exit);
99
100int 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}
111EXPORT_SYMBOL_GPL(v4l2_fh_release);