media: imx: capture: Allow event subscribe/unsubscribe
authorSteve Longerbeam <slongerbeam@gmail.com>
Tue, 15 Jan 2019 19:16:08 +0000 (17:16 -0200)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 21 Jan 2019 18:45:33 +0000 (16:45 -0200)
Implement the vidioc_(un)subscribe_event operations. Imx will allow
subscribing to the imx-specific frame interval error events, events
from subdevices (V4L2_EVENT_SOURCE_CHANGE), and control events.

Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/staging/media/imx/imx-media-capture.c

index a93bd7f..f92edee 100644 (file)
@@ -398,6 +398,21 @@ static int capture_s_parm(struct file *file, void *fh,
        return 0;
 }
 
+static int capture_subscribe_event(struct v4l2_fh *fh,
+                                  const struct v4l2_event_subscription *sub)
+{
+       switch (sub->type) {
+       case V4L2_EVENT_IMX_FRAME_INTERVAL_ERROR:
+               return v4l2_event_subscribe(fh, sub, 0, NULL);
+       case V4L2_EVENT_SOURCE_CHANGE:
+               return v4l2_src_change_event_subscribe(fh, sub);
+       case V4L2_EVENT_CTRL:
+               return v4l2_ctrl_subscribe_event(fh, sub);
+       default:
+               return -EINVAL;
+       }
+}
+
 static const struct v4l2_ioctl_ops capture_ioctl_ops = {
        .vidioc_querycap        = vidioc_querycap,
 
@@ -427,6 +442,9 @@ static const struct v4l2_ioctl_ops capture_ioctl_ops = {
        .vidioc_expbuf          = vb2_ioctl_expbuf,
        .vidioc_streamon        = vb2_ioctl_streamon,
        .vidioc_streamoff       = vb2_ioctl_streamoff,
+
+       .vidioc_subscribe_event = capture_subscribe_event,
+       .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
 };
 
 /*