diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
index c725cb852c540df0d5d061d19c9f467ae921c8e7..770be3c3ba759994f1b6353c9a8a8dc7f2444f6e 100644
--- a/Documentation/DocBook/media-entities.tmpl
+++ b/Documentation/DocBook/media-entities.tmpl
@@ -17,6 +17,7 @@
VIDIOC_DBG_G_REGISTER">
VIDIOC_DBG_S_REGISTER">
VIDIOC_DQBUF">
+VIDIOC_DQEVENT">
VIDIOC_ENCODER_CMD">
VIDIOC_ENUMAUDIO">
VIDIOC_ENUMAUDOUT">
@@ -60,6 +61,7 @@
VIDIOC_REQBUFS">
VIDIOC_STREAMOFF">
VIDIOC_STREAMON">
+VIDIOC_SUBSCRIBE_EVENT">
VIDIOC_S_AUDIO">
VIDIOC_S_AUDOUT">
VIDIOC_S_CROP">
@@ -141,6 +143,8 @@
v4l2_enc_idx">
v4l2_enc_idx_entry">
v4l2_encoder_cmd">
+v4l2_event">
+v4l2_event_subscription">
v4l2_ext_control">
v4l2_ext_controls">
v4l2_fmtdesc">
@@ -200,6 +204,7 @@
+
@@ -292,6 +297,8 @@
+
+
@@ -381,3 +388,5 @@
+
+
diff --git a/Documentation/DocBook/v4l/dev-event.xml b/Documentation/DocBook/v4l/dev-event.xml
new file mode 100644
index 0000000000000000000000000000000000000000..be5a98fb4fabb2e43c4355142a3216fb79d0407e
--- /dev/null
+++ b/Documentation/DocBook/v4l/dev-event.xml
@@ -0,0 +1,31 @@
+
Event Interface
+
+ The V4L2 event interface provides means for user to get
+ immediately notified on certain conditions taking place on a device.
+ This might include start of frame or loss of signal events, for
+ example.
+
+
+ To receive events, the events the user is interested in first must
+ be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is
+ subscribed, the events of subscribed types are dequeueable using the
+ &VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using
+ VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may
+ be used to unsubscribe all the events the driver supports.
+
+ The event subscriptions and event queues are specific to file
+ handles. Subscribing an event on one file handle does not affect
+ other file handles.
+
+
+ The information on dequeueable events is obtained by using select or
+ poll system calls on video devices. The V4L2 events use POLLPRI events on
+ poll system call and exceptions on select system call.
+
+
diff --git a/Documentation/DocBook/v4l/v4l2.xml b/Documentation/DocBook/v4l/v4l2.xml
index 060105af49e5989b2f1dad9a9c38f00d532e1602..9737243377a3b7ae235f9da9cce41094aed70807 100644
--- a/Documentation/DocBook/v4l/v4l2.xml
+++ b/Documentation/DocBook/v4l/v4l2.xml
@@ -401,6 +401,7 @@ and discussions on the V4L mailing list.
+
@@ -426,6 +427,7 @@ and discussions on the V4L mailing list.
&sub-cropcap;
&sub-dbg-g-chip-ident;
&sub-dbg-g-register;
+ &sub-dqevent;
&sub-encoder-cmd;
&sub-enumaudio;
&sub-enumaudioout;
@@ -467,6 +469,7 @@ and discussions on the V4L mailing list.
&sub-reqbufs;
&sub-s-hw-freq-seek;
&sub-streamon;
+ &sub-subscribe-event;
&sub-mmap;
&sub-munmap;
diff --git a/Documentation/DocBook/v4l/vidioc-dqevent.xml b/Documentation/DocBook/v4l/vidioc-dqevent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb45c1695d8cca30719aeb587d1633200c4bb476
--- /dev/null
+++ b/Documentation/DocBook/v4l/vidioc-dqevent.xml
@@ -0,0 +1,124 @@
+
+
+ ioctl VIDIOC_DQEVENT
+ &manvol;
+
+
+
+ VIDIOC_DQEVENT
+ Dequeue event
+
+
+
+
+
+ int ioctl
+ int fd
+ int request
+ struct v4l2_event
+*argp
+
+
+
+
+
+ Arguments
+
+
+
+ fd
+
+ &fd;
+
+
+
+ request
+
+ VIDIOC_DQEVENT
+
+
+
+ argp
+
+
+
+
+
+
+
+
+ Description
+
+ Dequeue an event from a video device. No input is required
+ for this ioctl. All the fields of the &v4l2-event; structure are
+ filled by the driver. The file handle will also receive exceptions
+ which the application may get by e.g. using the select system
+ call.
+
+
+ struct v4l2_event
+
+ &cs-str;
+
+
+ __u32
+ type
+
+ Type of the event.
+
+
+ union
+ u
+
+
+
+
+
+ __u8
+ data[64]
+ Event data. Defined by the event type. The union
+ should be used to define easily accessible type for
+ events.
+
+
+ __u32
+ pending
+
+ Number of pending events excluding this one.
+
+
+ __u32
+ sequence
+
+ Event sequence number. The sequence number is
+ incremented for every subscribed event that takes place.
+ If sequence numbers are not contiguous it means that
+ events have been lost.
+
+
+
+ struct timeval
+ timestamp
+
+ Event timestamp.
+
+
+ __u32
+ reserved[9]
+
+ Reserved for future extensions. Drivers must set
+ the array to zero.
+
+
+
+
+
+
+
+
diff --git a/Documentation/DocBook/v4l/vidioc-subscribe-event.xml b/Documentation/DocBook/v4l/vidioc-subscribe-event.xml
new file mode 100644
index 0000000000000000000000000000000000000000..71ab88cb76b345f9f8c280739efed5518670c95b
--- /dev/null
+++ b/Documentation/DocBook/v4l/vidioc-subscribe-event.xml
@@ -0,0 +1,104 @@
+
+
+ ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT
+ &manvol;
+
+
+
+ VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT
+ Subscribe or unsubscribe event
+
+
+
+
+
+ int ioctl
+ int fd
+ int request
+ struct v4l2_event_subscription
+*argp
+
+
+
+
+
+ Arguments
+
+
+
+ fd
+
+ &fd;
+
+
+
+ request
+
+ VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT
+
+
+
+ argp
+
+
+
+
+
+
+
+
+ Description
+
+ Subscribe or unsubscribe V4L2 event. Subscribed events are
+ dequeued by using the &VIDIOC-DQEVENT; ioctl.
+
+
+ struct v4l2_event_subscription
+
+ &cs-str;
+
+
+ __u32
+ type
+ Type of the event.
+
+
+ __u32
+ reserved[7]
+ Reserved for future extensions. Drivers and applications
+ must set the array to zero.
+
+
+
+
+
+
+ Event Types
+
+ &cs-def;
+
+
+ V4L2_EVENT_ALL
+ 0
+ All events. V4L2_EVENT_ALL is valid only for
+ VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once.
+
+
+
+ V4L2_EVENT_PRIVATE_START
+ 0x08000000
+ Base event number for driver-private events.
+
+
+
+
+
+
+
+
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index 48f0adfbc984349f9f6ee70899a092693f0bf5ac..e831aaca66f84ae25fcfdda50a94847251edc644 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -680,3 +680,63 @@ int my_release(struct file *file)
...
}
+
+V4L2 events
+-----------
+
+The V4L2 events provide a generic way to pass events to user space.
+The driver must use v4l2_fh to be able to support V4L2 events.
+
+Useful functions:
+
+- v4l2_event_alloc()
+
+ To use events, the driver must allocate events for the file handle. By
+ calling the function more than once, the driver may assure that at least n
+ events in total have been allocated. The function may not be called in
+ atomic context.
+
+- v4l2_event_queue()
+
+ Queue events to video device. The driver's only responsibility is to fill
+ in the type and the data fields. The other fields will be filled in by
+ V4L2.
+
+- v4l2_event_subscribe()
+
+ The video_device->ioctl_ops->vidioc_subscribe_event must check the driver
+ is able to produce events with specified event id. Then it calls
+ v4l2_event_subscribe() to subscribe the event.
+
+- v4l2_event_unsubscribe()
+
+ vidioc_unsubscribe_event in struct v4l2_ioctl_ops. A driver may use
+ v4l2_event_unsubscribe() directly unless it wants to be involved in
+ unsubscription process.
+
+ The special type V4L2_EVENT_ALL may be used to unsubscribe all events. The
+ drivers may want to handle this in a special way.
+
+- v4l2_event_pending()
+
+ Returns the number of pending events. Useful when implementing poll.
+
+Drivers do not initialise events directly. The events are initialised
+through v4l2_fh_init() if video_device->ioctl_ops->vidioc_subscribe_event is
+non-NULL. This *MUST* be performed in the driver's
+v4l2_file_operations->open() handler.
+
+Events are delivered to user space through the poll system call. The driver
+can use v4l2_fh->events->wait wait_queue_head_t as the argument for
+poll_wait().
+
+There are standard and private events. New standard events must use the
+smallest available event type. The drivers must allocate their events from
+their own class starting from class base. Class base is
+V4L2_EVENT_PRIVATE_START + n * 1000 where n is the lowest available number.
+The first event type in the class is reserved for future use, so the first
+available event type is 'class base + 1'.
+
+An example on how the V4L2 events may be used can be found in the OMAP
+3 ISP driver available at as of
+writing this.