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]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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhD and is optionally associated with an object identified through the }(hjhhhNhNubh)}(h``id``h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh field. If unused, then the }(hjhhhNhNubh)}(h``id``h]hid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh1 is 0. So an event is uniquely identified by the }(hjhhhNhNubh)}(h``(type, id)``h]h (type, id)}(hj@hhhNhNubah}(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 }(hjXhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjbh]hv4l2_fh}(hjdhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_fhuh1hhhhKhjXubh/ struct has a list of subscribed events on its }(hjXhhhNhNubh)}(h``subscribed``h]h subscribed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXubh field.}(hjXhhhNhNubeh}(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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_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)}(hj h]hv4l2_subscribed_event}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_subscribed_eventuh1hhhhKhjubh struct ends with a }(hjhhhNhNubh)}(h:c:type:`v4l2_kevent`h]h)}(hj.h]h v4l2_kevent}(hj0hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh v4l2_keventuh1hhhhKhjubh2 ringbuffer, with the size given by the caller of }(hjhhhNhNubh)}(h:c:func:`v4l2_event_subscribe`h]h)}(hjQh]hv4l2_event_subscribe()}(hjShhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_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 }(hjxhhhNhNubh)}(h``(type, ID)``h]h (type, ID)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxubh event tuple will have its own }(hjxhhhNhNubh)}(h:c:type:`v4l2_kevent`h]h)}(hjh]h v4l2_kevent}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh v4l2_keventuh1hhhhKhjxubh 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.}(hjxhhhNhNubeh}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubh)}(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:}(hj4hhhNhNubah}(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)}(hjNh]hv4l2_event_queue}(hjPhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_event_queueuh1hhhhKThjHubh (}(hjHhhhNhNubh)}(h:c:type:`vdev `h]h)}(hjqh]hvdev}(hjshhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh video_deviceuh1hhhhKThjHubh, }(hjHhhhNhNubh)}(h:c:type:`ev `h]h)}(hjh]hev}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh v4l2_eventuh1hhhhKThjHubh)}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKThjDubah}(h]h ]h"]h$]h&]uh1jBhhhKThhhhubh)}(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]hjhhubjC)}(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)}(hjh]hv4l2_event_subscribe}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_event_subscribeuh1hhhhK_hjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hjh]hfh}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_fhuh1hhhhK_hjubh, }(hjhhhNhNubh)}(h':c:type:`sub `h]h)}(hj>h]hsub}(hj@hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_event_subscriptionuh1hhhhK_hjubh , elems, }(hjhhhNhNubh)}(h):c:type:`ops `h]h)}(hjah]hops}(hjchhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_subscribed_event_opsuh1hhhhK_hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK_hjubah}(h]h ]h"]h$]h&]uh1jBhhhK_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&]refdoch refdomainhreftypetype refexplicitrefwarnh 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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_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&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_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).}(hjhhhNhNubah}(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:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubhtabular_col_spec)}(hhh]h}(h]h ]h"]h$]h&]spec|p{1.5cm}|p{16.0cm}|uh1j3hhhKphjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jJhjGubjK)}(hhh]h}(h]h ]h"]h$]h&]colwidthK>uh1jJhjGubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hCallbackh]hCallback}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjlubah}(h]h ]h"]h$]h&]uh1jjhjgubjk)}(hhh]h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1jjhjgubeh}(h]h ]h"]h$]h&]uh1jehjbubah}(h]h ]h"]h$]h&]uh1j`hjGubhtbody)}(hhh](jf)}(hhh](jk)}(hhh]h)}(haddh]hadd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjubah}(h]h ]h"]h$]h&]uh1jjhjubjk)}(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&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jehjubjf)}(hhh](jk)}(hhh]h)}(hdelh]hdel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjubah}(h]h ]h"]h$]h&]uh1jjhjubjk)}(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&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jehjubjf)}(hhh](jk)}(hhh]h)}(hreplaceh]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubah}(h]h ]h"]h$]h&]uh1jjhjubjk)}(hhh]h)}(h%replace event 'old' with event 'new'.h]h-replace event ‘old’ with event ‘new’.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhj3ubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jehjubjf)}(hhh](jk)}(hhh]h)}(hmergeh]hmerge}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjSubah}(h]h ]h"]h$]h&]uh1jjhjPubjk)}(hhh]h)}(h#merge event 'old' into event 'new'.h]h+merge event ‘old’ into event ‘new’.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjjubah}(h]h ]h"]h$]h&]uh1jjhjPubeh}(h]h ]h"]h$]h&]uh1jehjubeh}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]colsKuh1jEhjBubah}(h]h ]h"]h$]h&]uh1j@hjhhhhhNubh)}(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&]uh1hhhhKhjhhubjC)}(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}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_fhuh1hhhhKhjubh, }(hjhhhNhNubh)}(h':c:type:`sub `h]h)}(hj1 h]hsub}(hj3 hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj/ ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_event_subscriptionuh1hhhhKhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jBhhhKhjhhubh)}(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 }(hj^ hhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh h]h video_device}(hjj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjf ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh video_deviceuh1hhhhKhj^ ubh-> }(hj^ 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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_ioctl_opsuh1hhhhKhj^ ubh-> }(hj^ hhhNhNubh)}(h``vidioc_unsubscribe_event``h]hvidioc_unsubscribe_event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^ ubh. A driver may call }(hj^ 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&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_event_unsubscribeuh1hhhhKhj^ ubhC directly unless it wants to be involved in unsubscription process.}(hj^ 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:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubjC)}(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)}(hj8 h]hv4l2_event_pending}(hj: hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj6 ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnhv4l2_event_pendinguh1hhhhKhj2 ubh (}(hj2 hhhNhNubh)}(h:c:type:`fh `h]h)}(hj[ h]hfh}(hj] hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjY ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_fhuh1hhhhKhj2 ubh)}(hj2 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj. ubah}(h]h ]h"]h$]h&]uh1jBhhhKhj 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&]refdoch refdomainhreftypetype refexplicitrefwarnhv4l2_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 }(hj2 hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hj< h]h v4l2_device}(hj> hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj: ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnh v4l2_deviceuh1hhhhKhj2 ubh notify function with }(hj2 hhhNhNubh)}(h``V4L2_DEVICE_NOTIFY_EVENT``h]hV4L2_DEVICE_NOTIFY_EVENT}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 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.}(hj2 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hhh](h)}(h(V4L2 event functions and data structuresh]h(V4L2 event functions and data structures}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju hhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_kevent (C struct) c.v4l2_keventhNtauh1j hju 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 hhhju hNhNubh container)}(hXj**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](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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.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; };}hjK sbah}(h]h ]h"]h$]h&]hhuh1jI hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj& ubh)}(h **Members**h]j/ )}(hj\ h]hMembers}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjZ 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.hhKhjy 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 hjy ubeh}(h]h ]h"]h$]h&]uh1jw hj hKhjt ubjx )}(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&]uh1jw hj hKhjt ubjx )}(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&]uh1jw hj hKhjt ubjx )}(h"``ts`` The timestamp of the event.h](j~ )}(h``ts``h]h)}(hj. h]hts}(hj0 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 timestamp of the event.h]hThe timestamp of the event.}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjD ubah}(h]h ]h"]h$]h&]uh1j hj( ubeh}(h]h ]h"]h$]h&]uh1jw hjC hKhjt ubeh}(h]h ]h"]h$]h&]uh1jr hj& ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j $v4l2_subscribed_event_ops (C struct)c.v4l2_subscribed_event_opshNtauh1j hju 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&]j hj j j j j! j" j# uh1j hhhju hNhNubj% )}(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](h)}(h**Definition**::h](j/ )}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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+hj ubjJ )}(hX4struct 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]hX4struct 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); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jI hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK-hj ubh)}(h **Members**h]j/ )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK4hj ubjs )}(hhh](jx )}(h?``add`` Optional callback, called when a new listener is added h](j~ )}(h``add``h]h)}(hj7h]hadd}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK*hj1ubj )}(hhh]h)}(h6Optional callback, called when a new listener is addedh]h6Optional callback, called when a new listener is added}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK*hjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jw hjLhK*hj.ubjx )}(hB``del`` Optional callback, called when a listener stops listening h](j~ )}(h``del``h]h)}(hjph]hdel}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK+hjjubj )}(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 hjjubeh}(h]h ]h"]h$]h&]uh1jw hjhK+hj.ubjx )}(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&]uh1jw hjhK,hj.ubjx )}(hH``merge`` Optional callback that can merge event 'old' into event 'new'.h](j~ )}(h ``merge``h]h)}(hjh]hmerge}(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 merge event 'old' into event 'new'.h]hFOptional callback that can merge event ‘old’ into event ‘new’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhK,hj.ubeh}(h]h ]h"]h$]h&]uh1jr hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_subscribed_event (C struct)c.v4l2_subscribed_eventhNtauh1j hju hhhNhNubj )}(hhh](j )}(hv4l2_subscribed_eventh]j )}(hstruct v4l2_subscribed_eventh](j )}(hj h]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK3ubj )}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhjIhK3ubj )}(hv4l2_subscribed_eventh]j )}(hj6h]hv4l2_subscribed_event}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXubah}(h]h ](j j eh"]h$]h&]hhuh1j hj8hhhjIhK3ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj4hhhjIhK3ubah}(h]j/ah ](j j eh"]h$]h&]j j )j huh1j hjIhK3hj1hhubj )}(hhh]h)}(h0Internal struct representing a subscribed event.h]h0Internal struct representing a subscribed event.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK6hj{hhubah}(h]h ]h"]h$]h&]uh1j hj1hhhjIhK3ubeh}(h]h ](hstructeh"]h$]h&]j hj jj jj! j" j# uh1j hhhju hNhNubj% )}(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[] ; }; **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](h)}(h**Definition**::h](j/ )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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:hjubjJ )}(hXqstruct 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]hXqstruct 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&]hhuh1jI 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK:hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhK:hjubjx )}(h``type`` Event type. h](j~ )}(h``type``h]h)}(hj$h]htype}(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.hhK;hjubj )}(hhh]h)}(h Event type.h]h Event type.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hK;hj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hj9hK;hjubjx )}(hE``id`` Associated object ID (e.g. control ID). 0 if there isn't any. h](j~ )}(h``id``h]h)}(hj]h]hid}(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.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&]uh1jw hjhK=hjubjx )}(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&]uh1jw hjhK>hjubjx )}(hN``node`` List node that hooks into the object's event list (if there is one). h](j~ )}(h``node``h]h)}(hjh]hnode}(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)}(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).}(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?hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhK@hjubjx )}(h"``ops`` v4l2_subscribed_event_ops h](j~ )}(h``ops``h]h)}(hjBh]hops}(hjDhhhNhNubah}(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.hhKAhj<ubj )}(hhh]h)}(hv4l2_subscribed_event_opsh]hv4l2_subscribed_event_ops}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKAhjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jw hjWhKAhjubjx )}(h6``elems`` The number of elements in the events array. h](j~ )}(h ``elems``h]h)}(hj{h]helems}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKBhjuubj )}(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 hjuubeh}(h]h ]h"]h$]h&]uh1jw hjhKBhjubjx )}(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&]uh1jw hjhKChjubjx )}(h(``in_use`` The number of queued events. h](j~ )}(h ``in_use``h]h)}(hjh]hin_use}(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.hhKDhjubj )}(hhh]h)}(hThe number of queued events.h]hThe number of queued events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKDhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhKDhjubjx )}(h(``events`` An array of **elems** events.h](j~ )}(h ``events``h]h)}(hj&h]hevents}(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.hhKDhj ubj )}(hhh]h)}(hAn array of **elems** events.h](h An array of }(hj?hhhNhNubj/ )}(h **elems**h]helems}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hj?ubh events.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKEhj<ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jw hj;hKDhjubeh}(h]h ]h"]h$]h&]uh1jr hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_dequeue (C function)c.v4l2_event_dequeuehNtauh1j hju 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.hhK[ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhK[ubj )}(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 hjhhhjhK[ubhdesc_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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j jsbc.v4l2_event_dequeueasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubhdesc_sig_punctuation)}(h*h]h*}(hj,hhhNhNubah}(h]h ]pah"]h$]h&]uh1j*hjubj )}(hfhh]hfh}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_event *eventh](j )}(hj h]hstruct}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubh)}(hhh]j )}(h v4l2_eventh]h v4l2_event}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjoubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetjtmodnameN classnameNjj)}j]jc.v4l2_event_dequeueasbuh1hhjPubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjPubj )}(heventh]hevent}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubeh}(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&]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)}(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.hhKUhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhK[ubeh}(h]h ](hfunctioneh"]h$]h&]j hj j"j j"j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hj*ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKYhj&ubjs )}(hhh](jx )}(h1``struct v4l2_fh *fh`` pointer to struct v4l2_fh h](j~ )}(h``struct v4l2_fh *fh``h]h)}(hjKh]hstruct v4l2_fh *fh}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKWhjEubj )}(hhh]h)}(hpointer to struct v4l2_fhh]hpointer to struct v4l2_fh}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKWhjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jw hj`hKWhjBubjx )}(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.hhKXhj~ubj )}(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 hj~ubeh}(h]h ]h"]h$]h&]uh1jw hjhKXhjBubjx )}(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&]uh1jw hjhKZhjBubeh}(h]h ]h"]h$]h&]uh1jr hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_queue (C function)c.v4l2_event_queuehNtauh1j hju 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKjubj )}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj%hKjubj )}(hv4l2_event_queueh]j )}(hv4l2_event_queueh]hv4l2_event_queue}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhj%hKjubj)}(h8(struct video_device *vdev, const struct v4l2_event *ev)h](j)}(hstruct video_device *vdevh](j )}(hj h]hstruct}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubh)}(hhh]j )}(h video_deviceh]h video_device}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjoubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetjtmodnameN classnameNjj)}j]j)}j j:sbc.v4l2_event_queueasbuh1hhjPubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjPubj )}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjLubj)}(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 }(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 classnameNjj)}j]jc.v4l2_event_queueasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hevh]hev}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjLubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj%hKjubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhj%hKjubah}(h]j ah ](j j eh"]h$]h&]j j )j huh1j hj%hKjhj hhubj )}(hhh]h)}(hQueue events to video device.h]hQueue events to video device.}(hjchhhNhNubah}(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%hKjubeh}(h]h ](hfunctioneh"]h$]h&]j hj j{j j{j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKchjubjs )}(hhh](jx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjj)}j]sbh video_deviceuh1hhjhKahjubeh}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhKahjubjx )}(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.hhKbhjubj )}(hhh]h)}(h3pointer to :c:type:`struct v4l2_event `h](h pointer to }(hjhhhNhNubh)}(h(:c:type:`struct v4l2_event `h]h)}(hj"h]hstruct v4l2_event}(hj$hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjh v4l2_eventuh1hhjhKbhjubeh}(h]h ]h"]h$]h&]uh1hhjhKbhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhKbhjubeh}(h]h ]h"]h$]h&]uh1jr hjubh)}(h**Description**h]j/ )}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjWubah}(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 }(hjohhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjyh]hstruct v4l2_fh}(hj{hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKdhjoubh file handlers.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKdhjubj)}(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.hhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_queue_fh (C function)c.v4l2_event_queue_fhhNtauh1j hju 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKyubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKyubj )}(hv4l2_event_queue_fhh]j )}(hv4l2_event_queue_fhh]hv4l2_event_queue_fh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ](j j eh"]h$]h&]hhuh1j hjhhhjhKyubj)}(h1(struct v4l2_fh *fh, const struct v4l2_event *ev)h](j)}(hstruct v4l2_fh *fhh](j )}(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 )}(hv4l2_fhh]hv4l2_fh}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetj7modnameN classnameNjj)}j]j)}j jsbc.v4l2_event_queue_fhasbuh1hhjubj )}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hfhh]hfh}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(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 classnameNjj)}j]jQc.v4l2_event_queue_fhasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hevh]hev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKyubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKyubah}(h]jah ](j j eh"]h$]h&]j j )j huh1j hjhKyhjhhubj )}(hhh]h)}(hQueue events to video device.h]hQueue events to 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.hhKmhj"hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKyubeh}(h]h ](hfunctioneh"]h$]h&]j hj j=j j=j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjEubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKqhjAubjs )}(hhh](jx )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j~ )}(h``struct v4l2_fh *fh``h]h)}(hjfh]hstruct v4l2_fh *fh}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKohj`ubj )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhj{hKohjubeh}(h]h ]h"]h$]h&]uh1hhj{hKohj|ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jw hj{hKohj]ubjx )}(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 }(hjhhhNhNubh)}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjh v4l2_eventuh1hhjhKphjubeh}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhKphj]ubeh}(h]h ]h"]h$]h&]uh1jr hjAubh)}(h**Description**h]j/ )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKrhjAubh)}(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)}(hj8h]hstruct v4l2_fh}(hj:hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKshj.ubh file handler.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhKshjAubj)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKvhj`ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_wake_all (C function)c.v4l2_event_wake_allhNtauh1j hju 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.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(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 hjhhhjhKubj)}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetjmodnameN classnameNjj)}j]j)}j jsbc.v4l2_event_wake_allasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hj"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hvdevh]hvdev}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(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)}(hWake all filehandles.h]hWake all filehandles.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhK|hjVhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](hfunctioneh"]h$]h&]j hj jqj jqj! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjyubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjuubjs )}(hhh]jx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjh video_deviceuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jw hjhKhjubah}(h]h ]h"]h$]h&]uh1jr hjuubh)}(h**Description**h]j/ )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjuubh)}(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}hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_event_pending (C function)c.v4l2_event_pendinghNtauh1j hju 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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKubj )}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhjGhKubj )}(hv4l2_event_pendingh]j )}(hv4l2_event_pendingh]hv4l2_event_pending}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjVubah}(h]h ](j j eh"]h$]h&]hhuh1j hj5hhhjGhKubj)}(h(struct v4l2_fh *fh)h]j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetjmodnameN classnameNjj)}j]j)}j j\sbc.v4l2_event_pendingasbuh1hhjrubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjrubj )}(hfhh]hfh}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjnubah}(h]h ]h"]h$]h&]hhuh1jhj5hhhjGhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj1hhhjGhKubah}(h]j,ah ](j j eh"]h$]h&]j j )j huh1j hjGhKhj.hhubj )}(hhh]h)}(hCheck if an event is availableh]hCheck if an event is available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hj.hhhjGhKubeh}(h]h ](hfunctioneh"]h$]h&]j hj jj jj! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjubjs )}(hhh]jx )}(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&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj4ubj )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjShhhNhNubh)}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhjOhKhjSubeh}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jw hjOhKhj1ubah}(h]h ]h"]h$]h&]uh1jr hjubh)}(h**Description**h]j/ )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjubh)}(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.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !v4l2_event_subscribe (C function)c.v4l2_event_subscribehNtauh1j hju 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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubah}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetj6modnameN classnameNjj)}j]j)}j jsbc.v4l2_event_subscribeasbuh1hhjubj )}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hfhh]hfh}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(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 classnameNjj)}j]jPc.v4l2_event_subscribeasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj )}(hsubh]hsub}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hunsigned int elemsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(helemsh]helems}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h+const struct v4l2_subscribed_event_ops *opsh](j )}(hjh]hconst}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubj )}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubj )}(hj h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubh)}(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 classnameNjj)}j]jPc.v4l2_event_subscribeasbuh1hhj`ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubj+)}(hj.h]h*}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`ubj )}(hopsh]hops}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](hfunctioneh"]h$]h&]j hj j j j j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hj" h]h Parameters}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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 ubjs )}(hhh](jx )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j~ )}(h``struct v4l2_fh *fh``h]h)}(hjA h]hstruct v4l2_fh *fh}(hjC 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 }(hjZ hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjd h]hstruct v4l2_fh}(hjf hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjb ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhjV hKhjZ ubeh}(h]h ]h"]h$]h&]uh1hhjV hKhjW ubah}(h]h ]h"]h$]h&]uh1j hj; ubeh}(h]h ]h"]h$]h&]uh1jw hjV hKhj8 ubjx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_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&]uh1jw hj hKhj8 ubjx )}(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 !hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jw hj!hKhj8 ubjx )}(h_``const struct v4l2_subscribed_event_ops *ops`` pointer to :c:type:`v4l2_subscribed_event_ops` h](j~ )}(h/``const struct v4l2_subscribed_event_ops *ops``h]h)}(hj*!h]h+const struct v4l2_subscribed_event_ops *ops}(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:`v4l2_subscribed_event_ops`h](h pointer to }(hjC!hhhNhNubh)}(h#:c:type:`v4l2_subscribed_event_ops`h]h)}(hjM!h]hv4l2_subscribed_event_ops}(hjO!hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjK!ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_subscribed_event_opsuh1hhj?!hKhjC!ubeh}(h]h ]h"]h$]h&]uh1hhj?!hKhj@!ubah}(h]h ]h"]h$]h&]uh1j hj$!ubeh}(h]h ]h"]h$]h&]uh1jw hj?!hKhj8 ubeh}(h]h ]h"]h$]h&]uh1jr hj ubh)}(h**Description**h]j/ )}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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^if **elems** is zero, the framework will fill in a default value, with is currently 1 element.h]h)}(h^if **elems** is zero, the framework will fill in a default value, with is currently 1 element.h](hif }(hj!hhhNhNubj/ )}(h **elems**h]helems}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hj!ubhR is zero, the framework will fill in a default value, with is currently 1 element.}(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!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_event_unsubscribe (C function)c.v4l2_event_unsubscribehNtauh1j hju hhhNhNubj )}(hhh](j )}(hZint v4l2_event_unsubscribe (struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h]j )}(hYint v4l2_event_unsubscribe(struct v4l2_fh *fh, const 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_unsubscribeh]j )}(hv4l2_event_unsubscribeh]hv4l2_event_unsubscribe}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj!hhhj!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  reftargetjB"modnameN classnameNjj)}j]j)}j j"sbc.v4l2_event_unsubscribeasbuh1hhj"ubj )}(h h]h }(hj`"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"ubj+)}(hj.h]h*}(hjn"hhhNhNubah}(h]h ]j7ah"]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 *subh](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 }(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 classnameNjj)}j]j\"c.v4l2_event_unsubscribeasbuh1hhj"ubj )}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"ubj+)}(hj.h]h*}(hj"hhhNhNubah}(h]h ]j7ah"]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)}(hUnsubscribes to an eventh]hUnsubscribes to an event}(hj0#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&]j hj jH#j jH#j! j" j# uh1j hhhju hNhNubj% )}(h**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 `h](h)}(h**Parameters**h]j/ )}(hjR#h]h Parameters}(hjT#hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjP#ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjL#ubjs )}(hhh](jx )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j~ )}(h``struct v4l2_fh *fh``h]h)}(hjq#h]hstruct v4l2_fh *fh}(hjs#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo#ubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjk#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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhj#hKhj#ubeh}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1j hjk#ubeh}(h]h ]h"]h$]h&]uh1jw hj#hKhjh#ubjx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_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&]uh1jw hj#hKhjh#ubeh}(h]h ]h"]h$]h&]uh1jr hjL#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'v4l2_event_unsubscribe_all (C function)c.v4l2_event_unsubscribe_allhNtauh1j hju 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}(hjB$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 }(hjQ$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>$hhhjP$hKubj )}(hv4l2_event_unsubscribe_allh]j )}(hv4l2_event_unsubscribe_allh]hv4l2_event_unsubscribe_all}(hjc$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj_$ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj>$hhhjP$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 classnameNjj)}j]j)}j je$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 ]j7ah"]h$]h&]uh1j*hj{$ubj )}(hfhh]hfh}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj{$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjw$ubah}(h]h ]h"]h$]h&]hhuh1jhj>$hhhjP$hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj:$hhhjP$hKubah}(h]j5$ah ](j j eh"]h$]h&]j j )j huh1j hjP$hKhj7$hhubj )}(hhh]h)}(hUnsubscribes to all eventsh]hUnsubscribes to all events}(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 hj7$hhhjP$hKubeh}(h]h ](hfunctioneh"]h$]h&]j hj j%j j%j! j" j# uh1j hhhju hNhNubj% )}(hV**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh `h](h)}(h**Parameters**h]j/ )}(hj$%h]h Parameters}(hj&%hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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%ubjs )}(hhh]jx )}(hD``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh `h](j~ )}(h``struct v4l2_fh *fh``h]h)}(hjC%h]hstruct v4l2_fh *fh}(hjE%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA%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)}(hjf%h]hstruct v4l2_fh}(hjh%hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjd%ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_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%hKhjY%ubah}(h]h ]h"]h$]h&]uh1j hj=%ubeh}(h]h ]h"]h$]h&]uh1jw hjX%hKhj:%ubah}(h]h ]h"]h$]h&]uh1jr hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j *v4l2_event_subdev_unsubscribe (C function)c.v4l2_event_subdev_unsubscribehNtauh1j hju 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 }(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 classnameNjj)}j]j)}j j%sbc.v4l2_event_subdev_unsubscribeasbuh1hhj%ubj )}(h h]h }(hj7&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubj+)}(hj.h]h*}(hjE&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj )}(hsdh]hsd}(hjR&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}(hjk&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg&ubj )}(h h]h }(hjx&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg&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 classnameNjj)}j]j3&c.v4l2_event_subdev_unsubscribeasbuh1hhjg&ubj )}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg&ubj+)}(hj.h]h*}(hj&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjg&ubj )}(hfhh]hfh}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg&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 classnameNjj)}j]j3&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 ]j7ah"]h$]h&]uh1j*hj&ubj )}(hsubh]hsub}(hj2'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.hhKhjY'hhubah}(h]h ]h"]h$]h&]uh1j hj%hhhj%hKubeh}(h]h ](hfunctioneh"]h$]h&]j hj jt'j jt'j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hj~'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hj|'ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjx'ubjs )}(hhh](jx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjh 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&]uh1jw hj'hKhj'ubjx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhj (hKhj(ubeh}(h]h ]h"]h$]h&]uh1hhj (hKhj (ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jw hj (hKhj'ubjx )}(hv``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` h](j~ )}(h'``struct v4l2_event_subscription *sub``h]h)}(hjM(h]h#struct v4l2_event_subscription *sub}(hjO(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK(ubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjG(ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hjf(hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hjp(h]hstruct v4l2_event_subscription}(hjr(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjn(ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_event_subscriptionuh1hhjb(hKhjf(ubeh}(h]h ]h"]h$]h&]uh1hhjb(hKhjc(ubah}(h]h ]h"]h$]h&]uh1j hjG(ubeh}(h]h ]h"]h$]h&]uh1jw hjb(hKhj'ubeh}(h]h ]h"]h$]h&]uh1jr hjx'ubh)}(h**Description**h]j/ )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hj(ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjx'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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_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&]uh1jhjx'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j ,v4l2_src_change_event_subscribe (C function)!c.v4l2_src_change_event_subscribehNtauh1j hju 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&]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')hhhj9)hKubj )}(hv4l2_src_change_event_subscribeh]j )}(hv4l2_src_change_event_subscribeh]hv4l2_src_change_event_subscribe}(hjL)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjH)ubah}(h]h ](j j eh"]h$]h&]hhuh1j hj')hhhj9)hKubj)}(h?(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_fh *fhh](j )}(hj h]hstruct}(hjh)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd)ubj )}(h h]h }(hju)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd)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 classnameNjj)}j]j)}j jN)sb!c.v4l2_src_change_event_subscribeasbuh1hhjd)ubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd)ubj+)}(hj.h]h*}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjd)ubj )}(hfhh]hfh}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`)ubj)}(h)const struct v4l2_event_subscription *subh](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 }(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 classnameNjj)}j]j)!c.v4l2_src_change_event_subscribeasbuh1hhj)ubj )}(h h]h }(hj1*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj+)}(hj.h]h*}(hj?*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj )}(hsubh]hsub}(hjL*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`)ubeh}(h]h ]h"]h$]h&]hhuh1jhj')hhhj9)hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj#)hhhj9)hKubah}(h]j)ah ](j j eh"]h$]h&]j j )j huh1j hj9)hKhj )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 }(hjv*hhhNhNubh)}(h``V4L2_EVENT_SOURCE_CHANGE``h]hV4L2_EVENT_SOURCE_CHANGE}(hj~*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv*ubh.}(hjv*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjs*hhubah}(h]h ]h"]h$]h&]uh1j hj )hhhj9)hKubeh}(h]h 7](hfunctioneh"]h$]h&]j hj j*j j*j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j. 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*ubjs )}(hhh](jx )}(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&]uh1jw hj*hKhj*ubjx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_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&]uh1hhjB+hKhj+ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jw hj+hKhj*ubeh}(h]h ]h"]h$]h&]uh1jr hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju 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 hju 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&]uh1jhjw+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 hjw+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 hjw+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 classnameNjj)}j]j)}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*}(hj,hhhNhNubah}(h]h ]j7ah"]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 }(hj7,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&,ubh)}(hhh]j )}(hv4l2_fhh]hv4l2_fh}(hjH,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjE,ubah}(h]h ]h"]h$]h&] refdomainhreftypej  reftargetjJ,modnameN classnameNjj)}j]j+(c.v4l2_src_change_event_subdev_subscribeasbuh1hhj&,ubj )}(h h]h }(hjf,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&,ubj+)}(hj.h]h*}(hjt,hhhNhNubah}(h]h ]j7ah"]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 classnameNjj)}j]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 ]j7ah"]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&]hhuh1jhjw+hhhj+hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjs+hhhj+hKubah}(h]jn+ah ](j j eh"]h$]h&]j j )j huh1j hj+hKhjp+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 }(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 hjp+hhhj+hKubeh}(h]h ](hfunctioneh"]h$]h&]j hj jE-j jE-j! j" j# uh1j hhhju hNhNubj% )}(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]j/ )}(hjO-h]h Parameters}(hjQ-hhhNhNubah}(h]h ]h"]h$]h&]uh1j. hjM-ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjI-ubjs )}(hhh](jx )}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j~ )}(h``struct v4l2_subdev *sd``h]h)}(hjn-h]hstruct v4l2_subdev *sd}(hjp-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl-ubah}(h]h ]h"]h$]h&]uh1j} hg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhjh-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&]refdoch refdomainhreftypetype refexplicitrefwarnjjh v4l2_subdevuh1hhj-hKhj-ubeh}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1j hjh-ubeh}(h]h ]h"]h$]h&]uh1jw hj-hKhje-ubjx )}(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&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_fhuh1hhj-hKhj-ubeh}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jw hj-hKhje-ubjx )}(hu``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.hhKhj.ubj )}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj7.hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]h)}(hjA.h]hstruct v4l2_event_subscription}(hjC.hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj?.ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypetype refexplicitrefwarnjjhv4l2_event_subscriptionuh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-event:180: ./include/media/v4l2-event.hhKhj7.ubeh}(h]h ]h"]h$]h&]uh1hhj^.hKhj4.ubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jw hj3.hKhje-ubeh}(h]h ]h"]h$]h&]uh1jr hjI-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j$ hju 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_backlinksjjfootnote_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_sourceh _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.ju j j j{ j j/j4jjj jjjjjj,j1jjj!j!j5$j:$j%j%j)j#)jn+js+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.