sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget//translations/zh_CN/driver-api/media/v4l2-eventmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/zh_TW/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/it_IT/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ja_JP/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ko_KR/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/pt_BR/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/sp_SP/driver-api/media/v4l2-eventmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhI/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event.rsthKubhsection)}(hhh](htitle)}(h V4L2 eventsh]h V4L2 events}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe V4L2 events provide a generic way to pass events to user space. The driver must use :c:type:`v4l2_fh` to be able to support V4L2 events.h](hXThe V4L2 events provide a generic way to pass events to user space. The driver must use }(hhhhhNhNubh)}(h:c:type:`v4l2_fh`h]hliteral)}(hhh]hv4l2_fh}(hhhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-event refdomainhreftypetype refexplicitrefwarn reftargetv4l2_fhuh1hhhhKhhubh# to be able to support V4L2 events.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXEvents are subscribed per-filehandle. An event specification consists of a ``type`` and is optionally associated with an object identified through the ``id`` field. If unused, then the ``id`` is 0. So an event is uniquely identified by the ``(type, id)`` tuple.h](hKEvents are subscribed per-filehandle. An event specification consists of a }(hjhhhNhNubh)}(h``type``h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhD and is optionally associated with an object identified through the }(hjhhhNhNubh)}(h``id``h]hid}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh field. If unused, then the }(hjhhhNhNubh)}(h``id``h]hid}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh1 is 0. So an event is uniquely identified by the }(hjhhhNhNubh)}(h``(type, id)``h]h (type, id)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh tuple.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hYThe :c:type:`v4l2_fh` struct has a list of subscribed events on its ``subscribed`` field.h](hThe }(hjlhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjvh]hv4l2_fh}(hjxhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhKhjlubh/ struct has a list of subscribed events on its }(hjlhhhNhNubh)}(h``subscribed``h]h subscribed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlubh field.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hWhen the user subscribes to an event, a :c:type:`v4l2_subscribed_event` struct is added to :c:type:`v4l2_fh`\ ``.subscribed``, one for every subscribed event.h](h(When the user subscribes to an event, a }(hjhhhNhNubh)}(h:c:type:`v4l2_subscribed_event`h]h)}(hjh]hv4l2_subscribed_event}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_subscribed_eventuh1hhhhKhjubh struct is added to }(hjhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhKhjubh }(hjhhhNhNubh)}(h``.subscribed``h]h .subscribed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh!, one for every subscribed event.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hEach :c:type:`v4l2_subscribed_event` struct ends with a :c:type:`v4l2_kevent` ringbuffer, with the size given by the caller of :c:func:`v4l2_event_subscribe`. This ringbuffer is used to store any events raised by the driver.h](hEach }(hjhhhNhNubh)}(h:c:type:`v4l2_subscribed_event`h]h)}(hjh]hv4l2_subscribed_event}(hj!hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_subscribed_eventuh1hhhhKhjubh struct ends with a }(hjhhhNhNubh)}(h:c:type:`v4l2_kevent`h]h)}(hjBh]h v4l2_kevent}(hjDhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  v4l2_keventuh1hhhhKhjubh2 ringbuffer, with the size given by the caller of }(hjhhhNhNubh)}(h:c:func:`v4l2_event_subscribe`h]h)}(hjeh]hv4l2_event_subscribe()}(hjghhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_subscribeuh1hhhhKhjubhC. This ringbuffer is used to store any events raised by the driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hSo every ``(type, ID)`` event tuple will have its own :c:type:`v4l2_kevent` ringbuffer. This guarantees that if a driver is generating lots of events of one type in a short time, then that will not overwrite events of another type.h](h So every }(hjhhhNhNubh)}(h``(type, ID)``h]h (type, ID)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh event tuple will have its own }(hjhhhNhNubh)}(h:c:type:`v4l2_kevent`h]h)}(hjh]h v4l2_kevent}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  v4l2_keventuh1hhhhKhjubh ringbuffer. This guarantees that if a driver is generating lots of events of one type in a short time, then that will not overwrite events of another type.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hBut if you get more events of one type than the size of the :c:type:`v4l2_kevent` ringbuffer, then the oldest event will be dropped and the new one added.h](hhhhhubh)}(hThe ``merge()`` callback allows you to merge the oldest event payload into that of the second-oldest event payload. It is called when the ringbuffer has size is greater than one.h](hThe }(hjhhhNhNubh)}(h ``merge()``h]hmerge()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh callback allows you to merge the oldest event payload into that of the second-oldest event payload. It is called when the ringbuffer has size is greater than one.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhhhhubh)}(h]This way no status information is lost, just the intermediate steps leading up to that state.h]h]This way no status information is lost, just the intermediate steps leading up to that state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhhhhubh)}(hA good example of these ``replace``/``merge`` callbacks is in v4l2-event.c: ``ctrls_replace()`` and ``ctrls_merge()`` callbacks for the control event.h](hA good example of these }(hjhhhNhNubh)}(h ``replace``h]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh/}(hjhhhNhNubh)}(h ``merge``h]hmerge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh callbacks is in v4l2-event.c: }(hjhhhNhNubh)}(h``ctrls_replace()``h]hctrls_replace()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and }(hjhhhNhNubh)}(h``ctrls_merge()``h]h ctrls_merge()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh! callbacks for the control event.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKKhhhhubhnote)}(hKthese callbacks can be called from interrupt context, so they must be fast.h]h)}(hKthese callbacks can be called from interrupt context, so they must be fast.h]hKthese callbacks can be called from interrupt context, so they must be fast.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhj0ubah}(h]h ]h"]h$]h&]uh1j.hhhhhhhNubh)}(h>In order to queue events to video device, drivers should call:h]h>In order to queue events to video device, drivers should call:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhhhhubh block_quote)}(hi:c:func:`v4l2_event_queue ` (:c:type:`vdev `, :c:type:`ev `) h]h)}(hh:c:func:`v4l2_event_queue ` (:c:type:`vdev `, :c:type:`ev `)h](h)}(h-:c:func:`v4l2_event_queue `h]h)}(hjbh]hv4l2_event_queue}(hjdhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_queueuh1hhhhKThj\ubh (}(hj\hhhNhNubh)}(h:c:type:`vdev `h]h)}(hjh]hvdev}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  video_deviceuh1hhhhKThj\ubh, }(hj\hhhNhNubh)}(h:c:type:`ev `h]h)}(hjh]hev}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  v4l2_eventuh1hhhhKThj\ubh)}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKThjXubah}(h]h ]h"]h$]h&]uh1jVhhhKThhhhubh)}(hxThe driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h]hzThe driver’s only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhhhhubh)}(hhh](h)}(hEvent subscriptionh]hEvent subscription}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK[ubh)}(hSubscribing to an event is via:h]hSubscribing to an event is via:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjhhubjW)}(h:c:func:`v4l2_event_subscribe ` (:c:type:`fh `, :c:type:`sub ` , elems, :c:type:`ops `) h]h)}(h:c:func:`v4l2_event_subscribe ` (:c:type:`fh `, :c:type:`sub ` , elems, :c:type:`ops `)h](h)}(h5:c:func:`v4l2_event_subscribe `h]h)}(hj h]hv4l2_event_subscribe}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_subscribeuh1hhhhK_hjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hj/h]hfh}(hj1hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhK_hjubh, }(hjhhhNhNubh)}(h':c:type:`sub `h]h)}(hjRh]hsub}(hjThhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_event_subscriptionuh1hhhhK_hjubh , elems, }(hjhhhNhNubh)}(h):c:type:`ops `h]h)}(hjuh]hops}(hjwhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_subscribed_event_opsuh1hhhhK_hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK_hjubah}(h]h ]h"]h$]h&]uh1jVhhhK_hjhhubh)}(hX+This function is used to implement :c:type:`video_device`-> :c:type:`ioctl_ops `-> ``vidioc_subscribe_event``, but the driver must check first if the driver is able to produce events with specified event id, and then should call :c:func:`v4l2_event_subscribe` to subscribe the event.h](h#This function is used to implement }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  video_deviceuh1hhhhKdhjubh-> }(hjhhhNhNubh)}(h$:c:type:`ioctl_ops `h]h)}(hjh]h ioctl_ops}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_ioctl_opsuh1hhhhKdhjubh-> }(hjhhhNhNubh)}(h``vidioc_subscribe_event``h]hvidioc_subscribe_event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhx, but the driver must check first if the driver is able to produce events with specified event id, and then should call }(hjhhhNhNubh)}(h:c:func:`v4l2_event_subscribe`h]h)}(hjh]hv4l2_event_subscribe()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_subscribeuh1hhhhKdhjubh to subscribe the event.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubh)}(hThe elems argument is the size of the event queue for this event. If it is 0, then the framework will fill in a default value (this depends on the event type).h]hThe elems argument is the size of the event queue for this event. If it is 0, then the framework will fill in a default value (this depends on the event type).}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjhhubh)}(hDThe ops argument allows the driver to specify a number of callbacks:h]hDThe ops argument allows the driver to specify a number of callbacks:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubhtabular_col_spec)}(hhh]h}(h]h ]h"]h$]h&]spec|p{1.5cm}|p{16.0cm}|uh1jGhhhKphjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j^hj[ubj_)}(hhh]h}(h]h ]h"]h$]h&]colwidthK>uh1j^hj[ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hCallbackh]hCallback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1j~hj{ubj)}(hhh]h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1j~hj{ubeh}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jthj[ubhtbody)}(hhh](jz)}(hhh](j)}(hhh]h)}(haddh]hadd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]h)}(h|called when a new listener gets added (subscribing to the same event twice will only cause this callback to get called once)h]h|called when a new listener gets added (subscribing to the same event twice will only cause this callback to get called once)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]h)}(hdelh]hdel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjubah}(h]h ]h"]h$]h&]uh1j~hjubj)}(hhh]h)}(h&called when a listener stops listeningh]h&called when a listener stops listening}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]h)}(hreplaceh]hreplace}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhj0ubah}(h]h ]h"]h$]h&]uh1j~hj-ubj)}(hhh]h)}(h%replace event 'old' with event 'new'.h]h-replace event ‘old’ with event ‘new’.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjGubah}(h]h ]h"]h$]h&]uh1j~hj-ubeh}(h]h ]h"]h$]h&]uh1jyhjubjz)}(hhh](j)}(hhh]h)}(hmergeh]hmerge}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjgubah}(h]h ]h"]h$]h&]uh1j~hjdubj)}(hhh]h)}(h#merge event 'old' into event 'new'.h]h+merge event ‘old’ into event ‘new’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhj~ubah}(h]h ]h"]h$]h&]uh1j~hjdubeh}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]colsKuh1jYhjVubah}(h]h ]h"]h$]h&]uh1jThjhhhhhNubh)}(hpAll 4 callbacks are optional, if you don't want to specify any callbacks the ops argument itself maybe ``NULL``.h](hiAll 4 callbacks are optional, if you don’t want to specify any callbacks the ops argument itself maybe }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hjhhubeh}(h]event-subscriptionah ]h"]event subscriptionah$]h&]uh1hhhhhhhhK[ubh)}(hhh](h)}(hUnsubscribing an eventh]hUnsubscribing an event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h!Unsubscribing to an event is via:h]h!Unsubscribing to an event is via:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjW)}(h|:c:func:`v4l2_event_unsubscribe ` (:c:type:`fh `, :c:type:`sub `) h]h)}(h{:c:func:`v4l2_event_unsubscribe ` (:c:type:`fh `, :c:type:`sub `)h](h)}(h9:c:func:`v4l2_event_unsubscribe `h]h)}(hjh]hv4l2_event_unsubscribe}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_unsubscribeuh1hhhhKhjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hj" h]hfh}(hj$ hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhKhjubh, }(hjhhhNhNubh)}(h':c:type:`sub `h]h)}(hjE h]hsub}(hjG hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjC ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_event_subscriptionuh1hhhhKhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jVhhhKhjhhubh)}(hThis function is used to implement :c:type:`video_device`-> :c:type:`ioctl_ops `-> ``vidioc_unsubscribe_event``. A driver may call :c:func:`v4l2_event_unsubscribe` directly unless it wants to be involved in unsubscription process.h](h#This function is used to implement }(hjr hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj| h]h video_device}(hj~ hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjz ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  video_deviceuh1hhhhKhjr ubh-> }(hjr hhhNhNubh)}(h$:c:type:`ioctl_ops `h]h)}(hj h]h ioctl_ops}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_ioctl_opsuh1hhhhKhjr ubh-> }(hjr hhhNhNubh)}(h``vidioc_unsubscribe_event``h]hvidioc_unsubscribe_event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr ubh. A driver may call }(hjr hhhNhNubh)}(h :c:func:`v4l2_event_unsubscribe`h]h)}(hj h]hv4l2_event_unsubscribe()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_unsubscribeuh1hhhhKhjr ubhC directly unless it wants to be involved in unsubscription process.}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe special type ``V4L2_EVENT_ALL`` may be used to unsubscribe all events. The drivers may want to handle this in a special way.h](hThe special type }(hj hhhNhNubh)}(h``V4L2_EVENT_ALL``h]hV4L2_EVENT_ALL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh] may be used to unsubscribe all events. The drivers may want to handle this in a special way.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]unsubscribing-an-eventah ]h"]unsubscribing an eventah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Check if there's a pending eventh]h"Check if there’s a pending event}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# hhhhhKubh)}(h+Checking if there's a pending event is via:h]h-Checking if there’s a pending event is via:}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj# hhubjW)}(hL:c:func:`v4l2_event_pending ` (:c:type:`fh `) h]h)}(hJ:c:func:`v4l2_event_pending ` (:c:type:`fh `)h](h)}(h1:c:func:`v4l2_event_pending `h]h)}(hjL h]hv4l2_event_pending}(hjN hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjJ ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj v4l2_event_pendinguh1hhhhKhjF ubh (}(hjF hhhNhNubh)}(h:c:type:`fh `h]h)}(hjo h]hfh}(hjq hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjm ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhKhjF ubh)}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjB ubah}(h]h ]h"]h$]h&]uh1jVhhhKhj# hhubh)}(hRThis function returns the number of pending events. Useful when implementing poll.h]hRThis function returns the number of pending events. Useful when implementing poll.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj# hhubeh}(h] check-if-there-s-a-pending-eventah ]h"] check if there's a pending eventah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHow events workh]hHow events work}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hEvents are delivered to user space through the poll system call. The driver can use :c:type:`v4l2_fh`->wait (a wait_queue_head_t) as the argument for ``poll_wait()``.h](hTEvents are delivered to user space through the poll system call. The driver can use }(hj hhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hj h]hv4l2_fh}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_fhuh1hhhhKhj ubh1->wait (a wait_queue_head_t) as the argument for }(hj hhhNhNubh)}(h``poll_wait()``h]h poll_wait()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hXThere 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'.h](hThere 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 }(hj hhhNhNubh)}(h``V4L2_EVENT_PRIVATE_START``h]hV4L2_EVENT_PRIVATE_START}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh + 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’.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h}An example on how the V4L2 events may be used can be found in the OMAP 3 ISP driver (``drivers/media/platform/ti/omap3isp``).h](hUAn example on how the V4L2 events may be used can be found in the OMAP 3 ISP driver (}(hj& hhhNhNubh)}(h&``drivers/media/platform/ti/omap3isp``h]h"drivers/media/platform/ti/omap3isp}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj& ubh).}(hj& hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hXA subdev can directly send an event to the :c:type:`v4l2_device` notify function with ``V4L2_DEVICE_NOTIFY_EVENT``. This allows the bridge to map the subdev that sends the event to the video node(s) associated with the subdev that need to be informed about such an event.h](h+A subdev can directly send an event to the }(hjF hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjP h]h v4l2_device}(hjR hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjN ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj  v4l2_deviceuh1hhhhKhjF ubh notify function with }(hjF hhhNhNubh)}(h``V4L2_DEVICE_NOTIFY_EVENT``h]hV4L2_DEVICE_NOTIFY_EVENT}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF ubh. This allows the bridge to map the subdev that sends the event to the video node(s) associated with the subdev that need to be informed about such an event.}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hhh](h)}(h(V4L2 event functions and data structuresh]h(V4L2 event functions and data structures}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_kevent (C struct) c.v4l2_keventhNtauh1j hj hhhNhNubhdesc)}(hhh](hdesc_signature)}(h v4l2_keventh]hdesc_signature_line)}(hstruct v4l2_keventh](hdesc_sig_keyword)}(hstructh]hstruct}(hj hhhNhNubah}(h]h ]kah"]h$]h&]uh1j hj hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubhdesc_sig_space)}(h h]h }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1j hj hhhj hKubh desc_name)}(h v4l2_keventh]h desc_sig_name)}(hj h]h v4l2_kevent}(hj hhhNhNubah}(h]h ]nah"]h$]h&]uh1j hj ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j hj hhhj hKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j sphinx_line_type declaratorhj hhhj hKubah}(h]j ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j hj hKhj hhubh desc_content)}(hhh]h)}(hInternal kernel event struct.h]hInternal kernel event struct.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hKubeh}(h]h ](hstructeh"]h$]h&]domainhobjtypej. desctypej. noindex noindexentrynocontentsentryuh1j hhhj hNhNubh container)}(hX **Definition**:: struct v4l2_kevent { struct list_head list; struct v4l2_subscribed_event *sev; struct v4l2_event event; u64 ts; }; **Members** ``list`` List node for the v4l2_fh->available list. ``sev`` Pointer to parent v4l2_subscribed_event. ``event`` The event itself. ``ts`` The timestamp of the event.h](jW)}(h**Definition**:: struct v4l2_kevent { struct list_head list; struct v4l2_subscribed_event *sev; struct v4l2_event event; u64 ts; }; h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjB ubh:}(hjB hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj> ubh literal_block)}(hstruct v4l2_kevent { struct list_head list; struct v4l2_subscribed_event *sev; struct v4l2_event event; u64 ts; };h]hstruct v4l2_kevent { struct list_head list; struct v4l2_subscribed_event *sev; struct v4l2_event event; u64 ts; };}hjc sbah}(h]h ]h"]h$]h&]hhuh1ja hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj> ubeh}(h]h ]h"]h$]h&]uh1jVhj` hKhj: ubh)}(h **Members**h]jG )}(hjz h]hMembers}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjx ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK&hj: ubhdefinition_list)}(hhh](hdefinition_list_item)}(h4``list`` List node for the v4l2_fh->available list. h](hterm)}(h``list``h]h)}(hj h]hlist}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj ubh definition)}(hhh]h)}(h*List node for the v4l2_fh->available list.h]h*List node for the v4l2_fh->available list.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhj ubj )}(h1``sev`` Pointer to parent v4l2_subscribed_event. h](j )}(h``sev``h]h)}(hj h]hsev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj ubj )}(hhh]h)}(h(Pointer to parent v4l2_subscribed_event.h]h(Pointer to parent v4l2_subscribed_event.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhj ubj )}(h``event`` The event itself. h](j )}(h ``event``h]h)}(hj h]hevent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj ubj )}(hhh]h)}(hThe event itself.h]hThe event itself.}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj( hKhj) ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj( hKhj ubj )}(h"``ts`` The timestamp of the event.h](j )}(h``ts``h]h)}(hjL h]hts}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjF ubj )}(hhh]h)}(hThe timestamp of the event.h]hThe timestamp of the event.}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjb ubah}(h]h ]h"]h$]h&]uh1j hjF ubeh}(h]h ]h"]h$]h&]uh1j hja hKhj ubeh}(h]h ]h"]h$]h&]uh1j hj: ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j $v4l2_subscribed_event_ops (C struct)c.v4l2_subscribed_event_opshNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_subscribed_event_opsh]j )}(h struct v4l2_subscribed_event_opsh](j )}(hj h]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK$ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhj hK$ubj )}(hv4l2_subscribed_event_opsh]j )}(hj h]hv4l2_subscribed_event_ops}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj hhhj hK$ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj hhhj hK$ubah}(h]j ah ](j j eh"]h$]h&]j j )j huh1j hj hK$hj hhubj )}(hhh]h)}(hSubscribed event operations.h]hSubscribed event operations.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK'hj hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hK$ubeh}(h]h ](hstructeh"]h$]h&]j2 hj3 jj4 jj5 j6 j7 uh1j hhhj hNhNubj9 )}(hX **Definition**:: struct v4l2_subscribed_event_ops { int (*add)(struct v4l2_subscribed_event *sev, unsigned int 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); }; **Members** ``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'.h](jW)}(hX[**Definition**:: struct v4l2_subscribed_event_ops { int (*add)(struct v4l2_subscribed_event *sev, unsigned int 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); }; h](h)}(h**Definition**::h](jG )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK+hjubjb )}(hX<struct v4l2_subscribed_event_ops { int (*add)(struct v4l2_subscribed_event *sev, unsigned int 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); };h]hX<struct v4l2_subscribed_event_ops { int (*add)(struct v4l2_subscribed_event *sev, unsigned int 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); };}hj)sbah}(h]h ]h"]h$]h&]hhuh1ja hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK-hjubeh}(h]h ]h"]h$]h&]uh1jVhj(hK+hjubh)}(h **Members**h]jG )}(hj@h]hMembers}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj>ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK4hjubj )}(hhh](j )}(h?``add`` Optional callback, called when a new listener is added h](j )}(h``add``h]h)}(hj_h]hadd}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK*hjYubj )}(hhh]h)}(h6Optional callback, called when a new listener is addedh]h6Optional callback, called when a new listener is added}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthK*hjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1j hjthK*hjVubj )}(hB``del`` Optional callback, called when a listener stops listening h](j )}(h``del``h]h)}(hjh]hdel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK+hjubj )}(hhh]h)}(h9Optional callback, called when a listener stops listeningh]h9Optional callback, called when a listener stops listening}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK+hjVubj )}(hM``replace`` Optional callback that can replace event 'old' with event 'new'. h](j )}(h ``replace``h]h)}(hjh]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK,hjubj )}(hhh]h)}(h@Optional callback that can replace event 'old' with event 'new'.h]hHOptional callback that can replace event ‘old’ with event ‘new’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK,hjVubj )}(hH``merge`` Optional callback that can merge event 'old' into event 'new'.h](j )}(h ``merge``h]h)}(hj h]hmerge}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK,hjubj )}(hhh]h)}(h>Optional callback that can merge event 'old' into event 'new'.h]hFOptional callback that can merge event ‘old’ into event ‘new’.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK-hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK,hjVubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_subscribed_event (C struct)c.v4l2_subscribed_eventhNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_subscribed_eventh]j )}(hstruct v4l2_subscribed_eventh](j )}(hj h]hstruct}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK3ubj )}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`hhhjqhK3ubj )}(hv4l2_subscribed_eventh]j )}(hj^h]hv4l2_subscribed_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hj`hhhjqhK3ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj\hhhjqhK3ubah}(h]jWah ](j j eh"]h$]h&]j j )j huh1j hjqhK3hjYhhubj )}(hhh]h)}(h0Internal struct representing a subscribed event.h]h0Internal struct representing a subscribed event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK6hjhhubah}(h]h ]h"]h$]h&]uh1j hjYhhhjqhK3ubeh}(h]h ](hstructeh"]h$]h&]j2 hj3 jj4 jj5 j6 j7 uh1j hhhj hNhNubj9 )}(hX0 **Definition**:: struct v4l2_subscribed_event { struct list_head list; u32 type; u32 id; u32 flags; struct v4l2_fh *fh; struct list_head node; const struct v4l2_subscribed_event_ops *ops; unsigned int elems; unsigned int first; unsigned int in_use; struct v4l2_kevent events[]; }; **Members** ``list`` List node for the v4l2_fh->subscribed list. ``type`` Event type. ``id`` Associated object ID (e.g. control ID). 0 if there isn't any. ``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). ``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. ``events`` An array of **elems** events.h](jW)}(hX**Definition**:: struct v4l2_subscribed_event { struct list_head list; u32 type; u32 id; u32 flags; struct v4l2_fh *fh; struct list_head node; const struct v4l2_subscribed_event_ops *ops; unsigned int elems; unsigned int first; unsigned int in_use; struct v4l2_kevent events[]; }; h](h)}(h**Definition**::h](jG )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK:hjubjb )}(hXstruct v4l2_subscribed_event { struct list_head list; u32 type; u32 id; u32 flags; struct v4l2_fh *fh; struct list_head node; const struct v4l2_subscribed_event_ops *ops; unsigned int elems; unsigned int first; unsigned int in_use; struct v4l2_kevent events[]; };h]hXstruct v4l2_subscribed_event { struct list_head list; u32 type; u32 id; u32 flags; struct v4l2_fh *fh; struct list_head node; const struct v4l2_subscribed_event_ops *ops; unsigned int elems; unsigned int first; unsigned int in_use; struct v4l2_kevent events[]; };}hjsbah}(h]h ]h"]h$]h&]hhuh1ja hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKsubscribed list. h](j )}(h``list``h]h)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK:hjubj )}(hhh]h)}(h+List node for the v4l2_fh->subscribed list.h]h+List node for the v4l2_fh->subscribed list.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hK:hj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj2hK:hjubj )}(h``type`` Event type. h](j )}(h``type``h]h)}(hjVh]htype}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK;hjPubj )}(hhh]h)}(h Event type.h]h Event type.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhK;hjlubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1j hjkhK;hjubj )}(hE``id`` Associated object ID (e.g. control ID). 0 if there isn't any. h](j )}(h``id``h]h)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKflags. h](j )}(h ``flags``h]h)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK=hjubj )}(hhh]h)}(h'Copy of v4l2_event_subscription->flags.h]h'Copy of v4l2_event_subscription->flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK=hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK=hjubj )}(h1``fh`` Filehandle that subscribed to this event. h](j )}(h``fh``h]h)}(hjh]hfh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK>hjubj )}(hhh]h)}(h)Filehandle that subscribed to this event.h]h)Filehandle that subscribed to this event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK>hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK>hjubj )}(hN``node`` List node that hooks into the object's event list (if there is one). h](j )}(h``node``h]h)}(hj:h]hnode}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK@hj4ubj )}(hhh]h)}(hDList node that hooks into the object's event list (if there is one).h]hFList node that hooks into the object’s event list (if there is one).}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK?hjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1j hjOhK@hjubj )}(h"``ops`` v4l2_subscribed_event_ops h](j )}(h``ops``h]h)}(hjth]hops}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKAhjnubj )}(hhh]h)}(hv4l2_subscribed_event_opsh]hv4l2_subscribed_event_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKAhjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1j hjhKAhjubj )}(h6``elems`` The number of elements in the events array. h](j )}(h ``elems``h]h)}(hjh]helems}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKBhjubj )}(hhh]h)}(h+The number of elements in the events array.h]h+The number of elements in the events array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKBhjubj )}(hI``first`` The index of the events containing the oldest available event. h](j )}(h ``first``h]h)}(hjh]hfirst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKChjubj )}(hhh]h)}(h>The index of the events containing the oldest available event.h]h>The index of the events containing the oldest available event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKChjubj )}(h(``in_use`` The number of queued events. h](j )}(h ``in_use``h]h)}(hjh]hin_use}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKDhjubj )}(hhh]h)}(hThe number of queued events.h]hThe number of queued events.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKDhj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj4hKDhjubj )}(h(``events`` An array of **elems** events.h](j )}(h ``events``h]h)}(hjXh]hevents}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKDhjRubj )}(hhh]h)}(hAn array of **elems** events.h](h An array of }(hjqhhhNhNubjG )}(h **elems**h]helems}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjqubh events.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKEhjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1j hjmhKDhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_dequeue (C function)c.v4l2_event_dequeuehNtauh1j hj hhhNhNubj )}(hhh](j )}(hVint v4l2_event_dequeue (struct v4l2_fh *fh, struct v4l2_event *event, int nonblocking)h]j )}(hUint v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event, int nonblocking)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKUubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKUubj )}(hv4l2_event_dequeueh]j )}(hv4l2_event_dequeueh]hv4l2_event_dequeue}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhKUubhdesc_parameterlist)}(h?(struct v4l2_fh *fh, struct v4l2_event *event, int nonblocking)h](hdesc_parameter)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&] refdomainhreftype identifier reftargetj(modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jA ASTIdentifier)}j<jsbc.v4l2_event_dequeueasbuh1hhjubj )}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubhdesc_sig_punctuation)}(h*h]h*}(hj^hhhNhNubah}(h]h ]pah"]h$]h&]uh1j\hjubj )}(hfhh]hfh}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_event *eventh](j )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jJc.v4l2_event_dequeueasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(heventh]hevent}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hint nonblockingh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h nonblockingh]h nonblocking}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKUubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKUubah}(h]jah ](j j eh"]h$]h&]j j )j huh1j hjhKUhjhhubj )}(hhh]h)}(h!Dequeue events from video device.h]h!Dequeue events from video device.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKUhj9hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKUubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jTj4 jTj5 j6 j7 uh1j hhhj hNhNubj9 )}(h**Parameters** ``struct v4l2_fh *fh`` pointer to struct v4l2_fh ``struct v4l2_event *event`` pointer to struct v4l2_event ``int nonblocking`` if not zero, waits for an event to arriveh](h)}(h**Parameters**h]jG )}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj\ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKYhjXubj )}(hhh](j )}(h1``struct v4l2_fh *fh`` pointer to struct v4l2_fh h](j )}(h``struct v4l2_fh *fh``h]h)}(hj}h]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKWhjwubj )}(hhh]h)}(hpointer to struct v4l2_fhh]hpointer to struct v4l2_fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1j hjhKWhjtubj )}(h:``struct v4l2_event *event`` pointer to struct v4l2_event h](j )}(h``struct v4l2_event *event``h]h)}(hjh]hstruct v4l2_event *event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKXhjubj )}(hhh]h)}(hpointer to struct v4l2_eventh]hpointer to struct v4l2_event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKXhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKXhjtubj )}(h=``int nonblocking`` if not zero, waits for an event to arriveh](j )}(h``int nonblocking``h]h)}(hjh]hint nonblocking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKZhjubj )}(hhh]h)}(h)if not zero, waits for an event to arriveh]h)if not zero, waits for an event to arrive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKYhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKZhjtubeh}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_queue (C function)c.v4l2_event_queuehNtauh1j hj hhhNhNubj )}(hhh](j )}(hNvoid v4l2_event_queue (struct video_device *vdev, const struct v4l2_event *ev)h]j )}(hMvoid v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev)h](j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK_ubj )}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEhhhjWhK_ubj )}(hv4l2_event_queueh]j )}(hv4l2_event_queueh]hv4l2_event_queue}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjfubah}(h]h ](j j eh"]h$]h&]hhuh1j hjEhhhjWhK_ubj)}(h8(struct video_device *vdev, const struct v4l2_event *ev)h](j)}(hstruct video_device *vdevh](j )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(h video_deviceh]h video_device}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jI)}j<jlsbc.v4l2_event_queueasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj~ubj)}(hconst struct v4l2_event *evh](j )}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(h v4l2_eventh]h v4l2_event}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj4modnameN classnameNj@jC)}jF]jc.v4l2_event_queueasbuh1hhjubj )}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hj^hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hevh]hev}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj~ubeh}(h]h ]h"]h$]h&]hhuh1jhjEhhhjWhK_ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjAhhhjWhK_ubah}(h]j<ah ](j j eh"]h$]h&]j j )j huh1j hjWhK_hj>hhubj )}(hhh]h)}(hQueue events to video device.h]hQueue events to video device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK_hjhhubah}(h]h ]h"]h$]h&]uh1j hj>hhhjWhK_ubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jj4 jj5 j6 j7 uh1j hhhj hNhNubj9 )}(hX**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``const struct v4l2_event *ev`` pointer to :c:type:`struct v4l2_event ` **Description** The event will be queued for all :c:type:`struct v4l2_fh ` file handlers. .. note:: The driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h](h)}(h**Parameters**h]jG )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKchjubj )}(hhh](j )}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j )}(h``struct video_device *vdev``h]h)}(hjh]hstruct video_device *vdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKahjubj )}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jC)}jF]sbj  video_deviceuh1hhjhKahjubeh}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKahjubj )}(hT``const struct v4l2_event *ev`` pointer to :c:type:`struct v4l2_event ` h](j )}(h``const struct v4l2_event *ev``h]h)}(hj1h]hconst struct v4l2_event *ev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKbhj+ubj )}(hhh]h)}(h3pointer to :c:type:`struct v4l2_event `h](h pointer to }(hjJhhhNhNubh)}(h(:c:type:`struct v4l2_event `h]h)}(hjTh]hstruct v4l2_event}(hjVhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj  v4l2_eventuh1hhjFhKbhjJubeh}(h]h ]h"]h$]h&]uh1hhjFhKbhjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1j hjFhKbhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]jG )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKdhjubh)}(hRThe event will be queued for all :c:type:`struct v4l2_fh ` file handlers.h](h!The event will be queued for all }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKchjubh file handlers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKchjubj/)}(hxThe driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h]h)}(hxThe driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h]hzThe driver’s only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKfhjubah}(h]h ]h"]h$]h&]uh1j.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_queue_fh (C function)c.v4l2_event_queue_fhhNtauh1j hj hhhNhNubj )}(hhh](j )}(hJvoid v4l2_event_queue_fh (struct v4l2_fh *fh, const struct v4l2_event *ev)h]j )}(hIvoid v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKmubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKmubj )}(hv4l2_event_queue_fhh]j )}(hv4l2_event_queue_fhh]hv4l2_event_queue_fh}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhKmubj)}(h1(struct v4l2_fh *fh, const struct v4l2_event *ev)h](j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjimodnameN classnameNj@jC)}jF]jI)}j<j/sbc.v4l2_event_queue_fhasbuh1hhjEubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjEubj )}(hfhh]hfh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjAubj)}(hconst struct v4l2_event *evh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jc.v4l2_event_queue_fhasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hj hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hevh]hev}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjAubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKmubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKmubah}(h]jah ](j j eh"]h$]h&]j j )j huh1j hjhKmhjhhubj )}(hhh]h)}(hQueue events to video device.h]hQueue events to video device.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKmhjThhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKmubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 joj4 joj5 j6 j7 uh1j hhhj hNhNubj9 )}(hX**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``const struct v4l2_event *ev`` pointer to :c:type:`struct v4l2_event ` **Description** The event will be queued only for the specified :c:type:`struct v4l2_fh ` file handler. .. note:: The driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h](h)}(h**Parameters**h]jG )}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjwubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKqhjsubj )}(hhh](j )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hjh]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKohjubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhjhKohjubeh}(h]h ]h"]h$]h&]uh1hhjhKohjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKohjubj )}(hT``const struct v4l2_event *ev`` pointer to :c:type:`struct v4l2_event ` h](j )}(h``const struct v4l2_event *ev``h]h)}(hjh]hconst struct v4l2_event *ev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKphjubj )}(hhh]h)}(h3pointer to :c:type:`struct v4l2_event `h](h pointer to }(hj hhhNhNubh)}(h(:c:type:`struct v4l2_event `h]h)}(hjh]hstruct v4l2_event}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj  v4l2_eventuh1hhjhKphj ubeh}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKphjubeh}(h]h ]h"]h$]h&]uh1j hjsubh)}(h**Description**h]jG )}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjHubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKrhjsubh)}(h`The event will be queued only for the specified :c:type:`struct v4l2_fh ` file handler.h](h0The event will be queued only for the specified }(hj`hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjjh]hstruct v4l2_fh}(hjlhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKqhj`ubh file handler.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKqhjsubj/)}(hxThe driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h]h)}(hxThe driver's only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.h]hzThe driver’s only responsibility is to fill in the type and the data fields. The other fields will be filled in by V4L2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKthjubah}(h]h ]h"]h$]h&]uh1j.hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_wake_all (C function)c.v4l2_event_wake_allhNtauh1j hj hhhNhNubj )}(hhh](j )}(h4void v4l2_event_wake_all (struct video_device *vdev)h]j )}(h3void v4l2_event_wake_all(struct video_device *vdev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK|ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhK|ubj )}(hv4l2_event_wake_allh]j )}(hv4l2_event_wake_allh]hv4l2_event_wake_all}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhK|ubj)}(h(struct video_device *vdev)h]j)}(hstruct video_device *vdevh](j )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(h video_deviceh]h video_device}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj(modnameN classnameNj@jC)}jF]jI)}j<jsbc.v4l2_event_wake_allasbuh1hhjubj )}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjThhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hvdevh]hvdev}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK|ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhK|ubah}(h]jah ](j j eh"]h$]h&]j j )j huh1j hjhK|hjhhubj )}(hhh]h)}(hWake all filehandles.h]hWake all filehandles.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK|hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhK|ubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jj4 jj5 j6 j7 uh1j hhhj hNhNubj9 )}(h**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** Used when unregistering a video device.h](h)}(h**Parameters**h]jG )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjubj )}(hhh]j )}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j )}(h``struct video_device *vdev``h]h)}(hjh]hstruct video_device *vdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjubj )}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj  video_deviceuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]jG )}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj$ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjubh)}(h'Used when unregistering a video device.h]h'Used when unregistering a video device.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_pending (C function)c.v4l2_event_pendinghNtauh1j hj hhhNhNubj )}(hhh](j )}(h+int v4l2_event_pending (struct v4l2_fh *fh)h]j )}(h*int v4l2_event_pending(struct v4l2_fh *fh)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjghhhjyhKubj )}(hv4l2_event_pendingh]j )}(hv4l2_event_pendingh]hv4l2_event_pending}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjghhhjyhKubj)}(h(struct v4l2_fh *fh)h]j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jI)}j<jsbc.v4l2_event_pendingasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hfhh]hfh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjghhhjyhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjchhhjyhKubah}(h]j^ah ](j j eh"]h$]h&]j j )j huh1j hjyhKhj`hhubj )}(hhh]h)}(hCheck if an event is availableh]hCheck if an event is available}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1j hj`hhhjyhKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jCj4 jCj5 j6 j7 uh1j hhhj hNhNubj9 )}(h**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` **Description** Returns the number of pending events.h](h)}(h**Parameters**h]jG )}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjKubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjGubj )}(hhh]j )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hjlh]hstruct v4l2_fh *fh}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjfubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjfubeh}(h]h ]h"]h$]h&]uh1j hjhKhjcubah}(h]h ]h"]h$]h&]uh1j hjGubh)}(h**Description**h]jG )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjGubh)}(h%Returns the number of pending events.h]h%Returns the number of pending events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !v4l2_event_subscribe (C function)c.v4l2_event_subscribehNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_event_subscribe (struct v4l2_fh *fh, const struct v4l2_event_subscription *sub, unsigned int elems, const struct v4l2_subscribed_event_ops *ops)h]j )}(hint v4l2_event_subscribe(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub, unsigned int elems, const struct v4l2_subscribed_event_ops *ops)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(hv4l2_event_subscribeh]j )}(hv4l2_event_subscribeh]hv4l2_event_subscribe}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhKubj)}(h(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub, unsigned int elems, const struct v4l2_subscribed_event_ops *ops)h](j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj )}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjcubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjhmodnameN classnameNj@jC)}jF]jI)}j<j.sbc.v4l2_event_subscribeasbuh1hhjDubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjDubj )}(hfhh]hfh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubj)}(h)const struct v4l2_event_subscription *subh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jc.v4l2_event_subscribeasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hsubh]hsub}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubj)}(hunsigned int elemsh](j)}(hunsignedh]hunsigned}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj )}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj )}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(helemsh]helems}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubj)}(h+const struct v4l2_subscribed_event_ops *opsh](j )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hv4l2_subscribed_event_opsh]hv4l2_subscribed_event_ops}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjmodnameN classnameNj@jC)}jF]jc.v4l2_event_subscribeasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj])}(hj`h]h*}(hjhhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjubj )}(hopsh]hops}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1j hjhKhjhhubj )}(hhh]h)}(hSubscribes to an eventh]hSubscribes to an event}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj/ hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jJ j4 jJ j5 j6 j7 uh1j hhhj hNhNubj9 )}(hX**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` ``unsigned int elems`` size of the events queue ``const struct v4l2_subscribed_event_ops *ops`` pointer to :c:type:`v4l2_subscribed_event_ops` **Description** .. note:: if **elems** is zero, the framework will fill in a default value, with is currently 1 element.h](h)}(h**Parameters**h]jG )}(hjT h]h Parameters}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjR ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjN ubj )}(hhh](j )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hjs h]hstruct v4l2_fh *fh}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjm ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj h]hstruct v4l2_fh}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhj hKhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjm ubeh}(h]h ]h"]h$]h&]uh1j hj hKhjj ubj )}(h|``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` h](j )}(h-``const struct v4l2_event_subscription *sub``h]h)}(hj h]h)const struct v4l2_event_subscription *sub}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hj h]hstruct v4l2_event_subscription}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_event_subscriptionuh1hhj hKhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhjj ubj )}(h0``unsigned int elems`` size of the events queue h](j )}(h``unsigned int elems``h]h)}(hj#!h]hunsigned int elems}(hj%!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!!ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj!ubj )}(hhh]h)}(hsize of the events queueh]hsize of the events queue}(hj` ``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](h)}(h**Parameters**h]jG )}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj#ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj~#ubj )}(hhh](j )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hj#h]hstruct v4l2_fh *fh}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj#ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj#hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj#h]hstruct v4l2_fh}(hj#hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhj#hKhj#ubeh}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1j hj#hKhj#ubj )}(h{``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](j )}(h-``const struct v4l2_event_subscription *sub``h]h)}(hj#h]h)const struct v4l2_event_subscription *sub}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj#ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj$hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hj$h]hstruct v4l2_event_subscription}(hj $hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_event_subscriptionuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj$ubeh}(h]h ]h"]h$]h&]uh1hhj;$hKhj$ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1j hj$hKhj#ubeh}(h]h ]h"]h$]h&]uh1j hj~#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'v4l2_event_unsubscribe_all (C function)c.v4l2_event_unsubscribe_allhNtauh1j hj hhhNhNubj )}(hhh](j )}(h4void v4l2_event_unsubscribe_all (struct v4l2_fh *fh)h]j )}(h3void v4l2_event_unsubscribe_all(struct v4l2_fh *fh)h](j)}(hvoidh]hvoid}(hjt$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp$hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp$hhhj$hKubj )}(hv4l2_event_unsubscribe_allh]j )}(hv4l2_event_unsubscribe_allh]hv4l2_event_unsubscribe_all}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjp$hhhj$hKubj)}(h(struct v4l2_fh *fh)h]j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj )}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj$modnameN classnameNj@jC)}jF]jI)}j<j$sbc.v4l2_event_unsubscribe_allasbuh1hhj$ubj )}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj])}(hj`h]h*}(hj$hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj$ubj )}(hfhh]hfh}(hj %hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$ubah}(h]h ]h"]h$]h&]hhuh1jhjp$hhhj$hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjl$hhhj$hKubah}(h]jg$ah ](j j eh"]h$]h&]j j )j huh1j hj$hKhji$hhubj )}(hhh]h)}(hUnsubscribes to all eventsh]hUnsubscribes to all events}(hj4%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj1%hhubah}(h]h ]h"]h$]h&]uh1j hji$hhhj$hKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jL%j4 jL%j5 j6 j7 uh1j hhhj hNhNubj9 )}(hV**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh `h](h)}(h**Parameters**h]jG )}(hjV%h]h Parameters}(hjX%hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hjT%ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjP%ubj )}(hhh]j )}(hD``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh `h](j )}(h``struct v4l2_fh *fh``h]h)}(hju%h]hstruct v4l2_fh *fh}(hjw%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs%ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjo%ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj%hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj%h]hstruct v4l2_fh}(hj%hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj%ubeh}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1j hjo%ubeh}(h]h ]h"]h$]h&]uh1j hj%hKhjl%ubah}(h]h ]h"]h$]h&]uh1j hjP%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j *v4l2_event_subdev_unsubscribe (C function)c.v4l2_event_subdev_unsubscribehNtauh1j hj hhhNhNubj )}(hhh](j )}(hsint v4l2_event_subdev_unsubscribe (struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h]j )}(hrint v4l2_event_subdev_unsubscribe(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%hhhj%hKubj )}(hv4l2_event_subdev_unsubscribeh]j )}(hv4l2_event_subdev_unsubscribeh]hv4l2_event_subdev_unsubscribe}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj &ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj%hhhj%hKubj)}(hQ(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_subdev *sdh](j )}(hj h]hstruct}(hj+&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'&ubj )}(h h]h }(hj8&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'&ubh)}(hhh]j )}(h v4l2_subdevh]h v4l2_subdev}(hjI&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjF&ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjK&modnameN classnameNj@jC)}jF]jI)}j<j&sbc.v4l2_event_subdev_unsubscribeasbuh1hhj'&ubj )}(h h]h }(hji&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'&ubj])}(hj`h]h*}(hjw&hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj'&ubj )}(hsdh]hsd}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#&ubj)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj )}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj&modnameN classnameNj@jC)}jF]je&c.v4l2_event_subdev_unsubscribeasbuh1hhj&ubj )}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj])}(hj`h]h*}(hj&hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj&ubj )}(hfhh]hfh}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#&ubj)}(h#struct v4l2_event_subscription *subh](j )}(hj h]hstruct}(hj 'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 'ubj )}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 'ubh)}(hhh]j )}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hj+'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj('ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj-'modnameN classnameNj@jC)}jF]je&c.v4l2_event_subdev_unsubscribeasbuh1hhj 'ubj )}(h h]h }(hjI'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 'ubj])}(hj`h]h*}(hjW'hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj 'ubj )}(hsubh]hsub}(hjd'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#&ubeh}(h]h ]h"]h$]h&]hhuh1jhj%hhhj%hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj%hhhj%hKubah}(h]j%ah ](j j eh"]h$]h&]j j )j huh1j hj%hKhj%hhubj )}(hhh]h)}(h*Subdev variant of v4l2_event_unsubscribe()h]h*Subdev variant of v4l2_event_unsubscribe()}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj'hhubah}(h]h ]h"]h$]h&]uh1j hj%hhhj%hKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 j'j4 j'j5 j6 j7 uh1j hhhj hNhNubj9 )}(hX**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` **Description** .. note:: This function should be used for the :c:type:`struct v4l2_subdev_core_ops ` ``unsubscribe_event`` field.h](h)}(h**Parameters**h]jG )}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj'ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj'ubj )}(hhh](j )}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j )}(h``struct v4l2_subdev *sd``h]h)}(hj'h]hstruct v4l2_subdev *sd}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj'ubj )}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hj'hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj'h]hstruct v4l2_subdev}(hj'hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj  v4l2_subdevuh1hhj'hKhj'ubeh}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1j hj'hKhj'ubj )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hj'(h]hstruct v4l2_fh *fh}(hj)(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%(ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj!(ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj@(hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjJ(h]hstruct v4l2_fh}(hjL(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjH(ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhj<(hKhj@(ubeh}(h]h ]h"]h$]h&]uh1hhj<(hKhj=(ubah}(h]h ]h"]h$]h&]uh1j hj!(ubeh}(h]h ]h"]h$]h&]uh1j hj<(hKhj'ubj )}(hv``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` h](j )}(h'``struct v4l2_event_subscription *sub``h]h)}(hj(h]h#struct v4l2_event_subscription *sub}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}(ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjy(ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj(hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hj(h]hstruct v4l2_event_subscription}(hj(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_event_subscriptionuh1hhj(hKhj(ubeh}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hjy(ubeh}(h]h ]h"]h$]h&]uh1j hj(hKhj'ubeh}(h]h ]h"]h$]h&]uh1j hj'ubh)}(h**Description**h]jG )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj(ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj'ubj/)}(h~This function should be used for the :c:type:`struct v4l2_subdev_core_ops ` ``unsubscribe_event`` field.h]h)}(h~This function should be used for the :c:type:`struct v4l2_subdev_core_ops ` ``unsubscribe_event`` field.h](h%This function should be used for the }(hj(hhhNhNubh)}(h<:c:type:`struct v4l2_subdev_core_ops `h]h)}(hj(h]hstruct v4l2_subdev_core_ops}(hj(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_subdev_core_opsuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj(ubh }(hj(hhhNhNubh)}(h``unsubscribe_event``h]hunsubscribe_event}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubh field.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKhj(ubah}(h]h ]h"]h$]h&]uh1j.hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j ,v4l2_src_change_event_subscribe (C function)!c.v4l2_src_change_event_subscribehNtauh1j hj hhhNhNubj )}(hhh](j )}(hcint v4l2_src_change_event_subscribe (struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h]j )}(hbint v4l2_src_change_event_subscribe(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](j)}(hinth]hint}(hj])hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY)hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hjl)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjY)hhhjk)hKubj )}(hv4l2_src_change_event_subscribeh]j )}(hv4l2_src_change_event_subscribeh]hv4l2_src_change_event_subscribe}(hj~)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjz)ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjY)hhhjk)hKubj)}(h?(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj)modnameN classnameNj@jC)}jF]jI)}j<j)sb!c.v4l2_src_change_event_subscribeasbuh1hhj)ubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj])}(hj`h]h*}(hj)hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj)ubj )}(hfhh]hfh}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj)ubj)}(h)const struct v4l2_event_subscription *sub?h](j )}(hjh]hconst}(hj *hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(hj h]hstruct}(hj'*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(h h]h }(hj4*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubh)}(hhh]j )}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hjE*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjB*ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetjG*modnameN classnameNj@jC)}jF]j)!c.v4l2_src_change_event_subscribeasbuh1hhj*ubj )}(h h]h }(hjc*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj])}(hj`h]h*}(hjq*hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj*ubj )}(hsubh]hsub}(hj~*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj)ubeh}(h]h ]h"]h$]h&]hhuh1jhjY)hhhjk)hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjU)hhhjk)hKubah}(h]jP)ah ](j j eh"]h$]h&]j j )j huh1j hjk)hKhjR)hhubj )}(hhh]h)}(h_helper function that calls v4l2_event_subscribe() if the event is ``V4L2_EVENT_SOURCE_CHANGE``.h](hBhelper function that calls v4l2_event_subscribe() if the event is }(hj*hhhNhNubh)}(h``V4L2_EVENT_SOURCE_CHANGE``h]hV4L2_EVENT_SOURCE_CHANGE}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1j hjR)hhhjk)hKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 j*j4 j*j5 j6 j7 uh1j hhhj hNhNubj9 )}(h**Parameters** ``struct v4l2_fh *fh`` pointer to struct v4l2_fh ``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](h)}(h**Parameters**h]jG )}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj*ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj*ubj )}(hhh](j )}(h1``struct v4l2_fh *fh`` pointer to struct v4l2_fh h](j )}(h``struct v4l2_fh *fh``h]h)}(hj*h]hstruct v4l2_fh *fh}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj*ubj )}(hhh]h)}(hpointer to struct v4l2_fhh]hpointer to struct v4l2_fh}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1j hj+hKhj*ubj )}(h{``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](j )}(h-``const struct v4l2_event_subscription *sub``h]h)}(hj4+h]h)const struct v4l2_event_subscription *sub}(hj6+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2+ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj.+ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hjM+hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hjW+h]hstruct v4l2_event_subscription}(hjY+hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjU+ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_event_subscriptionuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjM+ubeh}(h]h ]h"]h$]h&]uh1hhjt+hKhjJ+ubah}(h]h ]h"]h$]h&]uh1j hj.+ubeh}(h]h ]h"]h$]h&]uh1j hjI+hKhj*ubeh}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 3v4l2_src_change_event_subdev_subscribe (C function)(c.v4l2_src_change_event_subdev_subscribehNtauh1j hj hhhNhNubj )}(hhh](j )}(h|int v4l2_src_change_event_subdev_subscribe (struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h]j )}(h{int v4l2_src_change_event_subdev_subscribe(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+hhhj+hKubj )}(h&v4l2_src_change_event_subdev_subscribeh]j )}(h&v4l2_src_change_event_subdev_subscribeh]h&v4l2_src_change_event_subdev_subscribe}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj+hhhj+hKubj)}(hQ(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_subdev *sdh](j )}(hj h]hstruct}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj )}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubh)}(hhh]j )}(h v4l2_subdevh]h v4l2_subdev}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj ,modnameN classnameNj@jC)}jF]jI)}j<j+sb(c.v4l2_src_change_event_subdev_subscribeasbuh1hhj+ubj )}(h h]h }(hj(,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj])}(hj`h]h*}(hj6,hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj+ubj )}(hsdh]hsd}(hjC,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hj\,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjX,ubj )}(h h]h }(hji,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjX,ubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjz,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjw,ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj|,modnameN classnameNj@jC)}jF]j$,(c.v4l2_src_change_event_subdev_subscribeasbuh1hhjX,ubj )}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjX,ubj])}(hj`h]h*}(hj,hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hjX,ubj )}(hfhh]hfh}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjX,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(h#struct v4l2_event_subscription *subh](j )}(hj h]hstruct}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj )}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubh)}(hhh]j )}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubah}(h]h ]h"]h$]h&] refdomainhreftypej< reftargetj,modnameN classnameNj@jC)}jF]j$,(c.v4l2_src_change_event_subdev_subscribeasbuh1hhj,ubj )}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj])}(hj`h]h*}(hj-hhhNhNubah}(h]h ]jiah"]h$]h&]uh1j\hj,ubj )}(hsubh]hsub}(hj#-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubeh}(h]h ]h"]h$]h&]hhuh1jhj+hhhj+hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj+hhhj+hKubah}(h]j+ah ](j j eh"]h$]h&]j j )j huh1j hj+hKhj+hhubj )}(hhh]h)}(hkVariant of v4l2_event_subscribe(), meant to subscribe only events of the type ``V4L2_EVENT_SOURCE_CHANGE``.h](hNVariant of v4l2_event_subscribe(), meant to subscribe only events of the type }(hjM-hhhNhNubh)}(h``V4L2_EVENT_SOURCE_CHANGE``h]hV4L2_EVENT_SOURCE_CHANGE}(hjU-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM-ubh.}(hjM-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjJ-hhubah}(h]h ]h"]h$]h&]uh1j hj+hhhj+hKubeh}(h]h ](hfunctioneh"]h$]h&]j2 hj3 jw-j4 jw-j5 j6 j7 uh1j hhhj hNhNubj9 )}(hX#**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](h)}(h**Parameters**h]jG )}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jF hj-ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj{-ubj )}(hhh](j )}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j )}(h``struct v4l2_subdev *sd``h]h)}(hj-h]hstruct v4l2_subdev *sd}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj-ubj )}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hj-hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj-h]hstruct v4l2_subdev}(hj-hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj  v4l2_subdevuh1hhj-hKhj-ubeh}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1j hj-hKhj-ubj )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j )}(h``struct v4l2_fh *fh``h]h)}(hj-h]hstruct v4l2_fh *fh}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj-ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj.hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj.h]hstruct v4l2_fh}(hj.hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_fhuh1hhj .hKhj.ubeh}(h]h ]h"]h$]h&]uh1hhj .hKhj.ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1j hj .hKhj-ubj )}(hu``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](j )}(h'``struct v4l2_event_subscription *sub``h]h)}(hjP.h]h#struct v4l2_event_subscription *sub}(hjR.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN.ubah}(h]h ]h"]h$]h&]uh1j hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjJ.ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hji.hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hjs.h]hstruct v4l2_event_subscription}(hju.hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjq.ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj@jj v4l2_event_subscriptionuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhji.ubeh}(h]h ]h"]h$]h&]uh1hhj.hKhjf.ubah}(h]h ]h"]h$]h&]uh1j hjJ.ubeh}(h]h ]h"]h$]h&]uh1j hje.hKhj-ubeh}(h]h ]h"]h$]h&]uh1j hj{-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j8 hj hhhNhNubeh}(h](v4l2-event-functions-and-data-structuresah ]h"](v4l2 event functions and data structuresah$]h&]uh1hhj hhhhhKubeh}(h]how-events-workah ]h"]how events workah$]h&]uh1hhhhhhhhKubeh}(h] v4l2-eventsah ]h"] v4l2 eventsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksj~footnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj.error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j.j.jjj j j j j.j.j.j.u nametypes}(j.jj j j.j.uh}(j.hjjj jj j# j.j j.j j j j j jWj\jjj<jAjjjjj^jcjjj "j"jg$jl$j%j%jP)jU)j+j+u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.