Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 242118
b: refs/heads/master
c: 73cb420
h: refs/heads/master
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Mar 22, 2011
1 parent 2e1178d commit 5195114
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fc5602be7ca5b55174c5d6595089718779b28dfa
refs/heads/master: 73cb42068cff419e72456940c713ceb5efa68c2a
28 changes: 28 additions & 0 deletions trunk/drivers/media/video/v4l2-fh.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
*/

#include <linux/bitops.h>
#include <linux/slab.h>
#include <media/v4l2-dev.h>
#include <media/v4l2-fh.h>
#include <media/v4l2-event.h>
Expand Down Expand Up @@ -60,6 +61,20 @@ void v4l2_fh_add(struct v4l2_fh *fh)
}
EXPORT_SYMBOL_GPL(v4l2_fh_add);

int v4l2_fh_open(struct file *filp)
{
struct video_device *vdev = video_devdata(filp);
struct v4l2_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL);

filp->private_data = fh;
if (fh == NULL)
return -ENOMEM;
v4l2_fh_init(fh, vdev);
v4l2_fh_add(fh);
return 0;
}
EXPORT_SYMBOL_GPL(v4l2_fh_open);

void v4l2_fh_del(struct v4l2_fh *fh)
{
unsigned long flags;
Expand All @@ -81,3 +96,16 @@ void v4l2_fh_exit(struct v4l2_fh *fh)
v4l2_event_free(fh);
}
EXPORT_SYMBOL_GPL(v4l2_fh_exit);

int v4l2_fh_release(struct file *filp)
{
struct v4l2_fh *fh = filp->private_data;

if (fh) {
v4l2_fh_del(fh);
v4l2_fh_exit(fh);
kfree(fh);
}
return 0;
}
EXPORT_SYMBOL_GPL(v4l2_fh_release);
15 changes: 15 additions & 0 deletions trunk/include/media/v4l2-fh.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,17 @@ int v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev);
* handle must be initialised first.
*/
void v4l2_fh_add(struct v4l2_fh *fh);
/*
* Can be used as the open() op of v4l2_file_operations.
* It allocates a v4l2_fh and inits and adds it to the video_device associated
* with the file pointer.
*/
int v4l2_fh_open(struct file *filp);
/*
* Remove file handle from the list of file handles. Must be called in
* v4l2_file_operations->release() handler if the driver uses v4l2_fh.
* On error filp->private_data will be NULL, otherwise it will point to
* the v4l2_fh struct.
*/
void v4l2_fh_del(struct v4l2_fh *fh);
/*
Expand All @@ -62,5 +70,12 @@ void v4l2_fh_del(struct v4l2_fh *fh);
* driver uses v4l2_fh.
*/
void v4l2_fh_exit(struct v4l2_fh *fh);
/*
* Can be used as the release() op of v4l2_file_operations.
* It deletes and exits the v4l2_fh associated with the file pointer and
* frees it. It will do nothing if filp->private_data (the pointer to the
* v4l2_fh struct) is NULL. This function always returns 0.
*/
int v4l2_fh_release(struct file *filp);

#endif /* V4L2_EVENT_H */

0 comments on commit 5195114

Please sign in to comment.