return 0;
 }
 
+static int venc_subscribe_event(struct v4l2_fh *fh,
+                               const struct v4l2_event_subscription *sub)
+{
+       switch (sub->type) {
+       case V4L2_EVENT_EOS:
+               return v4l2_event_subscribe(fh, sub, 2, NULL);
+       case V4L2_EVENT_CTRL:
+               return v4l2_ctrl_subscribe_event(fh, sub);
+       default:
+               return -EINVAL;
+       }
+}
+
 static const struct v4l2_ioctl_ops venc_ioctl_ops = {
        .vidioc_querycap = venc_querycap,
        .vidioc_enum_fmt_vid_cap = venc_enum_fmt,
        .vidioc_g_parm = venc_g_parm,
        .vidioc_enum_framesizes = venc_enum_framesizes,
        .vidioc_enum_frameintervals = venc_enum_frameintervals,
-       .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
+       .vidioc_subscribe_event = venc_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
 };