From 54e4e0fdaa26a656743d52e8169b1e85b8440b20 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Mon, 7 May 2012 16:53:20 -0300 Subject: [PATCH] --- yaml --- r: 306424 b: refs/heads/master c: 6e6d76cdc541e28bf4f609141d76c488c6c0d263 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/video/uvc/uvc_ctrl.c | 5 ++++- trunk/drivers/media/video/v4l2-ctrls.c | 5 ++++- trunk/drivers/media/video/v4l2-event.c | 2 +- trunk/include/media/v4l2-event.h | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index f436b205ea98..d876cf3fe2cb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 69ecdbac144147a80747914d9b6ea3472e2d93e7 +refs/heads/master: 6e6d76cdc541e28bf4f609141d76c488c6c0d263 diff --git a/trunk/drivers/media/video/uvc/uvc_ctrl.c b/trunk/drivers/media/video/uvc/uvc_ctrl.c index 28363b72ff8a..f3bd66c500b6 100644 --- a/trunk/drivers/media/video/uvc/uvc_ctrl.c +++ b/trunk/drivers/media/video/uvc/uvc_ctrl.c @@ -1250,7 +1250,7 @@ static void uvc_ctrl_send_events(struct uvc_fh *handle, } } -static int uvc_ctrl_add_event(struct v4l2_subscribed_event *sev) +static int uvc_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems) { struct uvc_fh *handle = container_of(sev->fh, struct uvc_fh, vfh); struct uvc_control_mapping *mapping; @@ -1278,6 +1278,9 @@ static int uvc_ctrl_add_event(struct v4l2_subscribed_event *sev) uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, changes); + /* Mark the queue as active, allowing this initial + event to be accepted. */ + sev->elems = elems; v4l2_event_queue_fh(sev->fh, &ev); } diff --git a/trunk/drivers/media/video/v4l2-ctrls.c b/trunk/drivers/media/video/v4l2-ctrls.c index a5fbace4c059..9abd9abd4502 100644 --- a/trunk/drivers/media/video/v4l2-ctrls.c +++ b/trunk/drivers/media/video/v4l2-ctrls.c @@ -2559,7 +2559,7 @@ int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val) } EXPORT_SYMBOL(v4l2_ctrl_s_ctrl); -static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev) +static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems) { struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id); @@ -2576,6 +2576,9 @@ static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev) if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)) changes |= V4L2_EVENT_CTRL_CH_VALUE; fill_event(&ev, ctrl, changes); + /* Mark the queue as active, allowing this initial + event to be accepted. */ + sev->elems = elems; v4l2_event_queue_fh(sev->fh, &ev); } v4l2_ctrl_unlock(ctrl); diff --git a/trunk/drivers/media/video/v4l2-event.c b/trunk/drivers/media/video/v4l2-event.c index 60b4e2e9c874..ef2a33c94045 100644 --- a/trunk/drivers/media/video/v4l2-event.c +++ b/trunk/drivers/media/video/v4l2-event.c @@ -239,7 +239,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh, } if (sev->ops && sev->ops->add) { - int ret = sev->ops->add(sev); + int ret = sev->ops->add(sev, elems); if (ret) { sev->ops = NULL; v4l2_event_unsubscribe(fh, sub); diff --git a/trunk/include/media/v4l2-event.h b/trunk/include/media/v4l2-event.h index 88fa9a1e0df3..2885a810a128 100644 --- a/trunk/include/media/v4l2-event.h +++ b/trunk/include/media/v4l2-event.h @@ -85,7 +85,7 @@ struct v4l2_kevent { * @merge: Optional callback that can merge event 'old' into event 'new'. */ struct v4l2_subscribed_event_ops { - int (*add)(struct v4l2_subscribed_event *sev); + int (*add)(struct v4l2_subscribed_event *sev, unsigned elems); void (*del)(struct v4l2_subscribed_event *sev); void (*replace)(struct v4l2_event *old, const struct v4l2_event *new); void (*merge)(const struct v4l2_event *old, struct v4l2_event *new);