Commit a26243b0 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] v4l2-ctrls: add helper functions for control events

Many drivers just support control events, and most radio drivers just need
to poll for control events. Add some functions to simplify those jobs.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 42194e72
...@@ -2394,3 +2394,23 @@ int v4l2_ctrl_log_status(struct file *file, void *fh) ...@@ -2394,3 +2394,23 @@ int v4l2_ctrl_log_status(struct file *file, void *fh)
return 0; return 0;
} }
EXPORT_SYMBOL(v4l2_ctrl_log_status); EXPORT_SYMBOL(v4l2_ctrl_log_status);
int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
struct v4l2_event_subscription *sub)
{
if (sub->type == V4L2_EVENT_CTRL)
return v4l2_event_subscribe(fh, sub, 0);
return -EINVAL;
}
EXPORT_SYMBOL(v4l2_ctrl_subscribe_event);
unsigned int v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
{
struct v4l2_fh *fh = file->private_data;
if (v4l2_event_pending(fh))
return POLLPRI;
poll_wait(file, &fh->wait, wait);
return 0;
}
EXPORT_SYMBOL(v4l2_ctrl_poll);
...@@ -33,6 +33,7 @@ struct video_device; ...@@ -33,6 +33,7 @@ struct video_device;
struct v4l2_subdev; struct v4l2_subdev;
struct v4l2_subscribed_event; struct v4l2_subscribed_event;
struct v4l2_fh; struct v4l2_fh;
struct poll_table_struct;
/** struct v4l2_ctrl_ops - The control operations that the driver has to provide. /** struct v4l2_ctrl_ops - The control operations that the driver has to provide.
* @g_volatile_ctrl: Get a new value for this control. Generally only relevant * @g_volatile_ctrl: Get a new value for this control. Generally only relevant
...@@ -496,6 +497,14 @@ void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl, ...@@ -496,6 +497,14 @@ void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl,
associated with the filehandle. */ associated with the filehandle. */
int v4l2_ctrl_log_status(struct file *file, void *fh); int v4l2_ctrl_log_status(struct file *file, void *fh);
/* Can be used as a vidioc_subscribe_event function that just subscribes
control events. */
int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
struct v4l2_event_subscription *sub);
/* Can be used as a poll function that just polls for control events. */
unsigned int v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait);
/* Helpers for ioctl_ops. If hdl == NULL then they will all return -EINVAL. */ /* Helpers for ioctl_ops. If hdl == NULL then they will all return -EINVAL. */
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc); int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc);
int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm); int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment