Add sequence numbers to events.

Signed-off-by: Sakari Ailus <sakari.ai...@maxwell.research.nokia.com>
---
 drivers/media/video/v4l2-event.c |   16 +++++++++++++---
 include/media/v4l2-event.h       |    1 +
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/v4l2-event.c b/drivers/media/video/v4l2-event.c
index bbdc149..0af0de5 100644
--- a/drivers/media/video/v4l2-event.c
+++ b/drivers/media/video/v4l2-event.c
@@ -95,6 +95,7 @@ int v4l2_event_init(struct v4l2_fh *fh, unsigned int n, 
unsigned int max_alloc)
 
        fh->events->navailable = 0;
        fh->events->max_alloc = max_alloc;
+       fh->events->sequence = -1;
 
        ret = v4l2_event_alloc(fh, n);
        if (ret < 0)
@@ -175,15 +176,24 @@ void v4l2_event_queue(struct video_device *vdev, struct 
v4l2_event *ev)
        list_for_each_entry(fh, &vdev->fh_list, list) {
                struct v4l2_events *events = fh->events;
                struct v4l2_kevent *kev;
+               u32 sequence;
 
-               /* Do we have any free events and are we subscribed? */
-               if (list_empty(&events->free) ||
-                   !__v4l2_event_subscribed(fh, ev->type))
+               /* Are we subscribed? */
+               if (!__v4l2_event_subscribed(fh, ev->type))
+                       continue;
+
+               /* Increase event sequence number on fh. */
+               events->sequence++;
+               sequence = events->sequence;
+
+               /* Do we have any free events? */
+               if (list_empty(&events->free))
                        continue;
 
                /* Take one and fill it. */
                kev = list_first_entry(&events->free, struct v4l2_kevent, list);
                kev->event = *ev;
+               kev->event.sequence = sequence;
                list_move_tail(&kev->list, &events->available);
 
                events->navailable++;
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h
index 671c8f7..5760597 100644
--- a/include/media/v4l2-event.h
+++ b/include/media/v4l2-event.h
@@ -50,6 +50,7 @@ struct v4l2_events {
        unsigned int            navailable;
        unsigned int            max_alloc; /* Never allocate more. */
        struct list_head        free; /* Events ready for use */
+       u32                     sequence;
 };
 
 int v4l2_event_alloc(struct v4l2_fh *fh, unsigned int n);
-- 
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to