diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2012-05-07 21:53:20 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-15 13:43:06 +0200 |
commit | 6e6d76cdc541e28bf4f609141d76c488c6c0d263 (patch) | |
tree | 479d1c19b79849098e35b6e2f604794541f0fe0b /include/media/v4l2-event.h | |
parent | Merge remote-tracking branch 'linus/master' into staging/for_v3.5 (diff) | |
download | linux-6e6d76cdc541e28bf4f609141d76c488c6c0d263.tar.xz linux-6e6d76cdc541e28bf4f609141d76c488c6c0d263.zip |
[media] v4l2-event: fix regression with initial event handling
If the V4L2_EVENT_SUB_FL_SEND_INITIAL was set, then the application expects
to receive an initial event of the initial value of the control.
However, commit c53c2549333b340e2662dc64ec81323476b69a97 that added the new
v4l2_subscribed_event_ops introduced a regression: while the code still queued
that initial event the __v4l2_event_queue_fh() function was modified to ignore
such requests if sev->elems was 0 (meaning that the event subscription wasn't
finished yet).
And sev->elems was only set to a non-zero value after the add operation
returned.
This patch fixes this by passing the elems value to the add function. Then the
add function can set it before queuing the initial event.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media/v4l2-event.h')
-rw-r--r-- | include/media/v4l2-event.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h index 88fa9a1e0df3..2885a810a128 100644 --- a/include/media/v4l2-event.h +++ b/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); |