]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/media/v4l2-event.h
Merge branch 'patches_for_v3.6' into v4l_for_linus
[karo-tx-linux.git] / include / media / v4l2-event.h
index 5f14e8895ce2a5ff3c2b119246317cf55f89d9b0..2885a810a128512afba7bb42803a75ff2203585a 100644 (file)
@@ -78,6 +78,19 @@ struct v4l2_kevent {
        struct v4l2_event       event;
 };
 
+/** struct v4l2_subscribed_event_ops - Subscribed event operations.
+  * @add:      Optional callback, called when a new listener is added
+  * @del:      Optional callback, called when a listener stops listening
+  * @replace:  Optional callback that can replace event 'old' with event 'new'.
+  * @merge:    Optional callback that can merge event 'old' into event 'new'.
+  */
+struct v4l2_subscribed_event_ops {
+       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);
+};
+
 /** struct v4l2_subscribed_event - Internal struct representing a subscribed event.
   * @list:     List node for the v4l2_fh->subscribed list.
   * @type:     Event type.
@@ -85,8 +98,7 @@ struct v4l2_kevent {
   * @flags:    Copy of v4l2_event_subscription->flags.
   * @fh:       Filehandle that subscribed to this event.
   * @node:     List node that hooks into the object's event list (if there is one).
-  * @replace:  Optional callback that can replace event 'old' with event 'new'.
-  * @merge:    Optional callback that can merge event 'old' into event 'new'.
+  * @ops:      v4l2_subscribed_event_ops
   * @elems:    The number of elements in the events array.
   * @first:    The index of the events containing the oldest available event.
   * @in_use:   The number of queued events.
@@ -99,10 +111,7 @@ struct v4l2_subscribed_event {
        u32                     flags;
        struct v4l2_fh          *fh;
        struct list_head        node;
-       void                    (*replace)(struct v4l2_event *old,
-                                          const struct v4l2_event *new);
-       void                    (*merge)(const struct v4l2_event *old,
-                                        struct v4l2_event *new);
+       const struct v4l2_subscribed_event_ops *ops;
        unsigned                elems;
        unsigned                first;
        unsigned                in_use;
@@ -115,7 +124,8 @@ void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev);
 void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev);
 int v4l2_event_pending(struct v4l2_fh *fh);
 int v4l2_event_subscribe(struct v4l2_fh *fh,
-                        struct v4l2_event_subscription *sub, unsigned elems);
+                        struct v4l2_event_subscription *sub, unsigned elems,
+                        const struct v4l2_subscribed_event_ops *ops);
 int v4l2_event_unsubscribe(struct v4l2_fh *fh,
                           struct v4l2_event_subscription *sub);
 void v4l2_event_unsubscribe_all(struct v4l2_fh *fh);