Skip to content

Commit

Permalink
V4L/DVB: V4L: File handles: Add documentation
Browse files Browse the repository at this point in the history
Add documentation on using V4L2 file handles (v4l2_fh) in V4L2 drivers.

Signed-off-by: Sakari Ailus <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
Sakari Ailus authored and Mauro Carvalho Chehab committed May 19, 2010
1 parent 1babcb4 commit 6cd84b7
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions Documentation/video4linux/v4l2-framework.txt
Original file line number Diff line number Diff line change
Expand Up @@ -608,3 +608,75 @@ scatter/gather method (videobuf-dma-sg), DMA with linear access

Please see Documentation/video4linux/videobuf for more information on how
to use the videobuf layer.

struct v4l2_fh
--------------

struct v4l2_fh provides a way to easily keep file handle specific data
that is used by the V4L2 framework. Using v4l2_fh is optional for
drivers.

The users of v4l2_fh (in the V4L2 framework, not the driver) know
whether a driver uses v4l2_fh as its file->private_data pointer by
testing the V4L2_FL_USES_V4L2_FH bit in video_device->flags.

Useful functions:

- v4l2_fh_init()

Initialise the file handle. This *MUST* be performed in the driver's
v4l2_file_operations->open() handler.

- v4l2_fh_add()

Add a v4l2_fh to video_device file handle list. May be called after
initialising the file handle.

- v4l2_fh_del()

Unassociate the file handle from video_device(). The file handle
exit function may now be called.

- v4l2_fh_exit()

Uninitialise the file handle. After uninitialisation the v4l2_fh
memory can be freed.

struct v4l2_fh is allocated as a part of the driver's own file handle
structure and is set to file->private_data in the driver's open
function by the driver. Drivers can extract their own file handle
structure by using the container_of macro. Example:

struct my_fh {
int blah;
struct v4l2_fh fh;
};

...

int my_open(struct file *file)
{
struct my_fh *my_fh;
struct video_device *vfd;
int ret;

...

ret = v4l2_fh_init(&my_fh->fh, vfd);
if (ret)
return ret;

v4l2_fh_add(&my_fh->fh);

file->private_data = &my_fh->fh;

...
}

int my_release(struct file *file)
{
struct v4l2_fh *fh = file->private_data;
struct my_fh *my_fh = container_of(fh, struct my_fh, fh);

...
}

0 comments on commit 6cd84b7

Please sign in to comment.