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-fhmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/driver-api/media/v4l2-fhmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/driver-api/media/v4l2-fhmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/driver-api/media/v4l2-fhmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/driver-api/media/v4l2-fhmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/driver-api/media/v4l2-fhmodnameN 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:spacepreserveuh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh.rsthKubhsection)}(hhh](htitle)}(hV4L2 File handlesh]hV4L2 File handles}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hstruct v4l2_fh provides a way to easily keep file handle specific data that is used by the V4L2 framework. Its usage is mandatory in all drivers.h]hstruct v4l2_fh provides a way to easily keep file handle specific data that is used by the V4L2 framework. Its usage is mandatory in all drivers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXstruct v4l2_fh is allocated in the driver's ``open()`` file operation handler. It is typically embedded in a larger driver-specific structure. The :c:type:`v4l2_fh` must be initialized with a call to :c:func:`v4l2_fh_init`, and added to the video device with :c:func:`v4l2_fh_add`. This associates the :c:type:`v4l2_fh` with the :c:type:`file` by setting ``file->private_data`` to point to the :c:type:`v4l2_fh`.h](h.struct v4l2_fh is allocated in the driver’s }(hhhhhNhNubhliteral)}(h ``open()``h]hopen()}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh] file operation handler. It is typically embedded in a larger driver-specific structure. The }(hhhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hhh]hv4l2_fh}(hhhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-fh refdomainjreftypetype refexplicitrefwarn reftargetv4l2_fhuh1hhhhK hhubh$ must be initialized with a call to }(hhhhhNhNubh)}(h:c:func:`v4l2_fh_init`h]h)}(hjh]hv4l2_fh_init()}(hj hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_inituh1hhhhK hhubh%, and added to the video device with }(hhhhhNhNubh)}(h:c:func:`v4l2_fh_add`h]h)}(hjAh]h v4l2_fh_add()}(hjChhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_adduh1hhhhK hhubh. This associates the }(hhhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjdh]hv4l2_fh}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhK hhubh with the }(hhhhhNhNubh)}(h:c:type:`file`h]h)}(hjh]hfile}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjfileuh1hhhhK hhubh by setting }(hhhhhNhNubh)}(h``file->private_data``h]hfile->private_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh to point to the }(hhhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhK hhubh.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hSimilarly, the struct v4l2_fh is freed in the driver's ``release()`` file operation handler. It must be removed from the video device with :c:func:`v4l2_fh_del` and cleaned up with :c:func:`v4l2_fh_exit` before being freed.h](h9Similarly, the struct v4l2_fh is freed in the driver’s }(hjhhhNhNubh)}(h ``release()``h]h release()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhG file operation handler. It must be removed from the video device with }(hjhhhNhNubh)}(h:c:func:`v4l2_fh_del`h]h)}(hjh]h v4l2_fh_del()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_deluh1hhhhKhjubh and cleaned up with }(hjhhhNhNubh)}(h:c:func:`v4l2_fh_exit`h]h)}(hj"h]hv4l2_fh_exit()}(hj$hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_exituh1hhhhKhjubh before being freed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hDrivers must not access ``file->private_data`` directly. They can retrieve the :c:type:`v4l2_fh` associated with a :c:type:`file` by calling :c:func:`file_to_v4l2_fh`. Drivers can extract their own file handle structure by using the container_of macro.h](hDrivers must not access }(hjIhhhNhNubh)}(h``file->private_data``h]hfile->private_data}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubh! directly. They can retrieve the }(hjIhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjeh]hv4l2_fh}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKhjIubh associated with a }(hjIhhhNhNubh)}(h:c:type:`file`h]h)}(hjh]hfile}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjfileuh1hhhhKhjIubh by calling }(hjIhhhNhNubh)}(h:c:func:`file_to_v4l2_fh`h]h)}(hjh]hfile_to_v4l2_fh()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjfile_to_v4l2_fhuh1hhhhKhjIubhV. Drivers can extract their own file handle structure by using the container_of macro.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hExample:h]hExample:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hXstruct my_fh { int blah; struct v4l2_fh fh; }; ... int my_open(struct file *file) { struct my_fh *my_fh; struct video_device *vfd; int ret; ... my_fh = kzalloc(sizeof(*my_fh), GFP_KERNEL); ... v4l2_fh_init(&my_fh->fh, vfd); ... v4l2_fh_add(&my_fh->fh, file); return 0; } int my_release(struct file *file) { struct v4l2_fh *fh = file_to_v4l2_fh(file); struct my_fh *my_fh = container_of(fh, struct my_fh, fh); ... v4l2_fh_del(&my_fh->fh, file); v4l2_fh_exit(&my_fh->fh); kfree(my_fh); return 0; }h]hXstruct my_fh { int blah; struct v4l2_fh fh; }; ... int my_open(struct file *file) { struct my_fh *my_fh; struct video_device *vfd; int ret; ... my_fh = kzalloc(sizeof(*my_fh), GFP_KERNEL); ... v4l2_fh_init(&my_fh->fh, vfd); ... v4l2_fh_add(&my_fh->fh, file); return 0; } int my_release(struct file *file) { struct v4l2_fh *fh = file_to_v4l2_fh(file); struct my_fh *my_fh = container_of(fh, struct my_fh, fh); ... v4l2_fh_del(&my_fh->fh, file); v4l2_fh_exit(&my_fh->fh); kfree(my_fh); return 0; }}hjsbah}(h]h ]h"]h$]h&]hhforcelanguagejhighlight_args}uh1jhhhKhhhhubh)}(hEBelow is a short description of the :c:type:`v4l2_fh` functions used:h](h$Below is a short description of the }(hjhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKEhjubh functions used:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKEhhhhubh)}(h]:c:func:`v4l2_fh_init ` (:c:type:`fh `, :c:type:`vdev `)h](h)}(h%:c:func:`v4l2_fh_init `h]h)}(hj+h]h v4l2_fh_init}(hj-hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_inituh1hhhhKGhj%ubh (}(hj%hhhNhNubh)}(h:c:type:`fh `h]h)}(hjNh]hfh}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKGhj%ubh, }(hj%hhhNhNubh)}(h:c:type:`vdev `h]h)}(hjqh]hvdev}(hjshhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj video_deviceuh1hhhhKGhj%ubh)}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKGhhhhubh bullet_list)}(hhh]h list_item)}(hwInitialise the file handle. This **MUST** be performed in the driver's :c:type:`v4l2_file_operations`->open() handler. h]h)}(hvInitialise the file handle. This **MUST** be performed in the driver's :c:type:`v4l2_file_operations`->open() handler.h](h!Initialise the file handle. This }(hjhhhNhNubhstrong)}(h**MUST**h]hMUST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh be performed in the driver’s }(hjhhhNhNubh)}(h:c:type:`v4l2_file_operations`h]h)}(hjh]hv4l2_file_operations}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_file_operationsuh1hhhhKJhjubh->open() handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]bullet-uh1jhhhKJhhhhubh)}(hP:c:func:`v4l2_fh_add ` (:c:type:`fh `, struct file \*filp)h](h)}(h#:c:func:`v4l2_fh_add `h]h)}(hjh]h v4l2_fh_add}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_adduh1hhhhKMhjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hjh]hfh}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKMhjubh, struct file *filp)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhhhhubj)}(hhh]j)}(hAdd a :c:type:`v4l2_fh` to :c:type:`video_device` file handle list. Must be called once the file handle is completely initialized. h]h)}(hAdd a :c:type:`v4l2_fh` to :c:type:`video_device` file handle list. Must be called once the file handle is completely initialized.h](hAdd a }(hjMhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjWh]hv4l2_fh}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKPhjMubh to }(hjMhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjzh]h video_device}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj video_deviceuh1hhhhKPhjMubhQ file handle list. Must be called once the file handle is completely initialized.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKPhjIubah}(h]h ]h"]h$]h&]uh1jhjFhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKPhhhhubh)}(hP:c:func:`v4l2_fh_del ` (:c:type:`fh `, struct file \*filp)h](h)}(h#:c:func:`v4l2_fh_del `h]h)}(hjh]h v4l2_fh_del}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_deluh1hhhhKShjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hjh]hfh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKShjubh, struct file *filp)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKShhhhubj)}(hhh]j)}(hjUnassociate the file handle from :c:type:`video_device`. The file handle exit function may now be called. h]h)}(hiUnassociate the file handle from :c:type:`video_device`. The file handle exit function may now be called.h](h!Unassociate the file handle from }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj video_deviceuh1hhhhKVhjubh2. The file handle exit function may now be called.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKVhhhhubh)}(h>:c:func:`v4l2_fh_exit ` (:c:type:`fh `)h](h)}(h%:c:func:`v4l2_fh_exit `h]h)}(hjGh]h v4l2_fh_exit}(hjIhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_exituh1hhhhKYhjAubh (}(hjAhhhNhNubh)}(h:c:type:`fh `h]h)}(hjjh]hfh}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKYhjAubh)}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKYhhhhubj)}(hhh]j)}(h`Uninitialise the file handle. After uninitialisation the :c:type:`v4l2_fh` memory can be freed. h]h)}(h_Uninitialise the file handle. After uninitialisation the :c:type:`v4l2_fh` memory can be freed.h](h9Uninitialise the file handle. After uninitialisation the }(hjhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhK\hjubh memory can be freed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhK\hhhhubh)}(h@:c:func:`file_to_v4l2_fh ` (struct file \*filp)h](h)}(h+:c:func:`file_to_v4l2_fh `h]h)}(hjh]hfile_to_v4l2_fh}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjfile_to_v4l2_fhuh1hhhhK_hjubh (struct file *filp)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK_hhhhubj)}(hhh]j)}(hJRetrieve the :c:type:`v4l2_fh` instance associated with a :c:type:`file`. h]h)}(hIRetrieve the :c:type:`v4l2_fh` instance associated with a :c:type:`file`.h](h Retrieve the }(hj hhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKbhj ubh instance associated with a }(hj hhhNhNubh)}(h:c:type:`file`h]h)}(hj6h]hfile}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjfileuh1hhhhKbhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKbhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKbhhhhubh)}(hKIf struct v4l2_fh is not embedded, then you can use these helper functions:h]hKIf struct v4l2_fh is not embedded, then you can use these helper functions:}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhhhhubh)}(h::c:func:`v4l2_fh_open ` (struct file \*filp)h](h)}(h%:c:func:`v4l2_fh_open `h]h)}(hj}h]h v4l2_fh_open}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj v4l2_fh_openuh1hhhhKfhjwubh (struct file *filp)}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKfhhhhubj)}(hhh]j)}(hxThis allocates a struct v4l2_fh, initializes it and adds it to the struct video_device associated with the file struct. h]h)}(hwThis allocates a struct v4l2_fh, initializes it and adds it to the struct video_device associated with the file struct.h]hwThis allocates a struct v4l2_fh, initializes it and adds it to the struct video_device associated with the file struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKihhhhubh)}(h@:c:func:`v4l2_fh_release ` (struct file \*filp)h](h)}(h+:c:func:`v4l2_fh_release `h]h)}(hjh]hv4l2_fh_release}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_fh_releaseuh1hhhhKlhjubh (struct file *filp)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKlhhhhubj)}(hhh]j)}(hThis deletes it from the struct video_device associated with the file struct, uninitialised the :c:type:`v4l2_fh` and frees it. h]h)}(hThis deletes it from the struct video_device associated with the file struct, uninitialised the :c:type:`v4l2_fh` and frees it.h](h`This deletes it from the struct video_device associated with the file struct, uninitialised the }(hjhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKohjubh and frees it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKohhhhubh)}(hcThese two functions can be plugged into the v4l2_file_operation's ``open()`` and ``release()`` ops.h](hDThese two functions can be plugged into the v4l2_file_operation’s }(hj6hhhNhNubh)}(h ``open()``h]hopen()}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubh and }(hj6hhhNhNubh)}(h ``release()``h]h release()}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubh ops.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhhhhubh)}(hSeveral drivers need to do something when the first file handle is opened and when the last file handle closes. Two helper functions were added to check whether the :c:type:`v4l2_fh` struct is the only open filehandle of the associated device node:h](hSeveral drivers need to do something when the first file handle is opened and when the last file handle closes. Two helper functions were added to check whether the }(hjhhhhNhNubh)}(h:c:type:`v4l2_fh`h]h)}(hjrh]hv4l2_fh}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKuhjhubhB struct is the only open filehandle of the associated device node:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhhhhubh)}(hL:c:func:`v4l2_fh_is_singular ` (:c:type:`fh `)h](h)}(h3:c:func:`v4l2_fh_is_singular `h]h)}(hjh]hv4l2_fh_is_singular}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_fh_is_singularuh1hhhhKzhjubh (}(hjhhhNhNubh)}(h:c:type:`fh `h]h)}(hjh]hfh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_fhuh1hhhhKzhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKzhhhhubj)}(hhh]j)}(hCReturns 1 if the file handle is the only open file handle, else 0. h]h)}(hBReturns 1 if the file handle is the only open file handle, else 0.h]hBReturns 1 if the file handle is the only open file handle, else 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhK}hhhhubh)}(hR:c:func:`v4l2_fh_is_singular_file ` (struct file \*filp)h](h)}(h=:c:func:`v4l2_fh_is_singular_file `h]h)}(hjh]hv4l2_fh_is_singular_file}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_fh_is_singular_fileuh1hhhhKhj ubh (struct file *filp)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubj)}(hhh]j)}(hASame, but it calls v4l2_fh_is_singular with filp->private_data. h]h)}(h?Same, but it calls v4l2_fh_is_singular with filp->private_data.h]h?Same, but it calls v4l2_fh_is_singular with filp->private_data.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj:ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKhhhhubh)}(hhh](h)}(h%V4L2 fh functions and data structuresh]h%V4L2 fh functions and data structures}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_fh (C struct) c.v4l2_fhhNtauh1jihjXhhhNhNubhdesc)}(hhh](hdesc_signature)}(hv4l2_fhh]hdesc_signature_line)}(hstruct v4l2_fhh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hv4l2_fhh]h desc_sig_name)}(hjh]hv4l2_fh}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jxah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhj|hhubh desc_content)}(hhh]h)}(hDescribes a V4L2 file handlerh]hDescribes a V4L2 file handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhKubeh}(h]h ](jstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jzhhhjXhNhNubh container)}(hX**Definition**:: struct v4l2_fh { struct list_head list; struct video_device *vdev; struct v4l2_ctrl_handler *ctrl_handler; enum v4l2_priority prio; wait_queue_head_t wait; struct mutex subscribe_lock; struct list_head subscribed; struct list_head available; unsigned int navailable; u32 sequence; struct v4l2_m2m_ctx *m2m_ctx; }; **Members** ``list`` list of file handlers ``vdev`` pointer to :c:type:`struct video_device ` ``ctrl_handler`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``prio`` priority of the file handler, as defined by :c:type:`enum v4l2_priority ` ``wait`` event' s wait queue ``subscribe_lock`` serialise changes to the subscribed list; guarantee that the add and del event callbacks are orderly called ``subscribed`` list of subscribed events ``available`` list of events waiting to be dequeued ``navailable`` number of available events at **available** list ``sequence`` event sequence number ``m2m_ctx`` pointer to :c:type:`struct v4l2_m2m_ctx `h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj ubj)}(hXstruct v4l2_fh { struct list_head list; struct video_device *vdev; struct v4l2_ctrl_handler *ctrl_handler; enum v4l2_priority prio; wait_queue_head_t wait; struct mutex subscribe_lock; struct list_head subscribed; struct list_head available; unsigned int navailable; u32 sequence; struct v4l2_m2m_ctx *m2m_ctx; };h]hXstruct v4l2_fh { struct list_head list; struct video_device *vdev; struct v4l2_ctrl_handler *ctrl_handler; enum v4l2_priority prio; wait_queue_head_t wait; struct mutex subscribe_lock; struct list_head subscribed; struct list_head available; unsigned int navailable; u32 sequence; struct v4l2_m2m_ctx *m2m_ctx; };}hj* sbah}(h]h ]h"]h$]h&]hhuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj ubh)}(h **Members**h]j)}(hj; h]hMembers}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9 ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK-hj ubhdefinition_list)}(hhh](hdefinition_list_item)}(h``list`` list of file handlers h](hterm)}(h``list``h]h)}(hj` h]hlist}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^ ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjX ubh definition)}(hhh]h)}(hlist of file handlersh]hlist of file handlers}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju hKhjx ubah}(h]h ]h"]h$]h&]uh1jv hjX ubeh}(h]h ]h"]h$]h&]uh1jV hju hKhjS ubjW )}(hA``vdev`` pointer to :c:type:`struct video_device ` h](j] )}(h``vdev``h]h)}(hj h]hvdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj ubjw )}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hj hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hj h]hstruct video_device}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbj video_deviceuh1hhj hKhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hKhjS ubjW )}(hS``ctrl_handler`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j] )}(h``ctrl_handler``h]h)}(hj h]h ctrl_handler}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj ubjw )}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hj hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]h)}(hj h]hstruct v4l2_ctrl_handler}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_ctrl_handleruh1hhj hKhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hKhjS ubjW )}(hb``prio`` priority of the file handler, as defined by :c:type:`enum v4l2_priority ` h](j] )}(h``prio``h]h)}(hjS h]hprio}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjM ubjw )}(hhh]h)}(hXpriority of the file handler, as defined by :c:type:`enum v4l2_priority `h](h,priority of the file handler, as defined by }(hjl hhhNhNubh)}(h,:c:type:`enum v4l2_priority `h]h)}(hjv h]henum v4l2_priority}(hjx hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjt ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j v4l2_priorityuh1hhjh hKhjl ubeh}(h]h ]h"]h$]h&]uh1hhjh hKhji ubah}(h]h ]h"]h$]h&]uh1jv hjM ubeh}(h]h ]h"]h$]h&]uh1jV hjh hKhjS ubjW )}(h``wait`` event' s wait queue h](j] )}(h``wait``h]h)}(hj h]hwait}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK!hj ubjw )}(hhh]h)}(hevent' s wait queueh]hevent’ s wait queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK!hj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK!hjS ubjW )}(h``subscribe_lock`` serialise changes to the subscribed list; guarantee that the add and del event callbacks are orderly called h](j] )}(h``subscribe_lock``h]h)}(hj h]hsubscribe_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK#hj ubjw )}(hhh]h)}(hkserialise changes to the subscribed list; guarantee that the add and del event callbacks are orderly calledh]hkserialise changes to the subscribed list; guarantee that the add and del event callbacks are orderly called}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK"hj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK#hjS ubjW )}(h)``subscribed`` list of subscribed events h](j] )}(h``subscribed``h]h)}(hj h]h subscribed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK$hj ubjw )}(hhh]h)}(hlist of subscribed eventsh]hlist of subscribed events}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3 hK$hj4 ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj3 hK$hjS ubjW )}(h4``available`` list of events waiting to be dequeued h](j] )}(h ``available``h]h)}(hjW h]h available}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK%hjQ ubjw )}(hhh]h)}(h%list of events waiting to be dequeuedh]h%list of events waiting to be dequeued}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl hK%hjm ubah}(h]h ]h"]h$]h&]uh1jv hjQ ubeh}(h]h ]h"]h$]h&]uh1jV hjl hK%hjS ubjW )}(h@``navailable`` number of available events at **available** list h](j] )}(h``navailable``h]h)}(hj h]h navailable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK&hj ubjw )}(hhh]h)}(h0number of available events at **available** listh](hnumber of available events at }(hj hhhNhNubj)}(h **available**h]h available}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh list}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK&hj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK&hjS ubjW )}(h#``sequence`` event sequence number h](j] )}(h ``sequence``h]h)}(hj h]hsequence}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK'hj ubjw )}(hhh]h)}(hevent sequence numberh]hevent sequence number}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK'hj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK'hjS ubjW )}(hC``m2m_ctx`` pointer to :c:type:`struct v4l2_m2m_ctx `h](j] )}(h ``m2m_ctx``h]h)}(hj h]hm2m_ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK(hj ubjw )}(hhh]h)}(h7pointer to :c:type:`struct v4l2_m2m_ctx `h](h pointer to }(hj- hhhNhNubh)}(h,:c:type:`struct v4l2_m2m_ctx `h]h)}(hj7 h]hstruct v4l2_m2m_ctx}(hj9 hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj5 ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j v4l2_m2m_ctxuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK)hj- ubeh}(h]h ]h"]h$]h&]uh1hhjT hK)hj* ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj) hK(hjS ubeh}(h]h ]h"]h$]h&]uh1jQ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvfile_to_v4l2_fh (C function)c.file_to_v4l2_fhhNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h4struct v4l2_fh * file_to_v4l2_fh (struct file *filp)h]j)}(h2struct v4l2_fh *file_to_v4l2_fh(struct file *filp)h](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK` **Description** This function should be used by drivers to retrieve the :c:type:`struct v4l2_fh ` instance pointer stored in the file private_data instead of accessing the private_data field directly.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK@hj ubjR )}(hhh]jW )}(h>``struct file *filp`` pointer to :c:type:`struct file ` h](j] )}(h``struct file *filp``h]h)}(hj h]hstruct file *filp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK>hj ubjw )}(hhh]h)}(h'pointer to :c:type:`struct file `h](h pointer to }(hj hhhNhNubh)}(h:c:type:`struct file `h]h)}(hj h]h struct file}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jfileuh1hhj hK>hj ubeh}(h]h ]h"]h$]h&]uh1hhj hK>hj ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK>hj ubah}(h]h ]h"]h$]h&]uh1jQ hj ubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK@hj ubh)}(hThis function should be used by drivers to retrieve the :c:type:`struct v4l2_fh ` instance pointer stored in the file private_data instead of accessing the private_data field directly.h](h8This function should be used by drivers to retrieve the }(hjDhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjNh]hstruct v4l2_fh}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK?hjDubhg instance pointer stored in the file private_data instead of accessing the private_data field directly.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhK?hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_init (C function)c.v4l2_fh_inithNtauh1jihjXhhhNhNubj{)}(hhh](j)}(hAvoid v4l2_fh_init (struct v4l2_fh *fh, struct video_device *vdev)h]j)}(h@void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKJubj)}(h v4l2_fh_inith]j)}(h v4l2_fh_inith]h v4l2_fh_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKJubj )}(h/(struct v4l2_fh *fh, struct video_device *vdev)h](j )}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.v4l2_fh_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfhh]hfh}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct video_device *vdevh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(h video_deviceh]h video_device}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNj j )}j ]jc.v4l2_fh_initasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj)}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKJubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKJhjhhubj)}(hhh]h)}(hInitialise the file handle.h]hInitialise the file handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKJubeh}(h]h ](jfunctioneh"]h$]h&]j jj jj jj j j uh1jzhhhjXhNhNubj )}(hX**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** Parts of the V4L2 framework using the file handles should be initialised in this function. Must be called from driver's v4l2_file_operations->open\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKNhjubjR )}(hhh](jW )}(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&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKLhjubjw )}(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 ](jjc-typeeh"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hhjhKLhj#ubeh}(h]h ]h"]h$]h&]uh1hhjhKLhj ubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKLhjubjW )}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j] )}(h``struct video_device *vdev``h]h)}(hjbh]hstruct video_device *vdev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKMhj\ubjw )}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hj{hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j video_deviceuh1hhjwhKMhj{ubeh}(h]h ]h"]h$]h&]uh1hhjwhKMhjxubah}(h]h ]h"]h$]h&]uh1jv hj\ubeh}(h]h ]h"]h$]h&]uh1jV hjwhKMhjubeh}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKOhjubh)}(hParts of the V4L2 framework using the file handles should be initialised in this function. Must be called from driver's v4l2_file_operations->open\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](hParts of the V4L2 framework using the file handles should be initialised in this function. Must be called from driver’s v4l2_file_operations->open() handler if the driver uses }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKNhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_add (C function) c.v4l2_fh_addhNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h8void v4l2_fh_add (struct v4l2_fh *fh, struct file *filp)h]j)}(h7void v4l2_fh_add(struct v4l2_fh *fh, struct file *filp)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKWubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hKWubj)}(h v4l2_fh_addh]j)}(h v4l2_fh_addh]h v4l2_fh_add}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj2hKWubj )}(h'(struct v4l2_fh *fh, struct file *filp)h](j )}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jGsb c.v4l2_fh_addasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]ubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjYubj )}(hstruct file *filph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j c.v4l2_fh_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfilph]hfilp}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjYubeh}(h]h ]h"]h$]h&]hhuh1j hj hhhj2hKWubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj2hKWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj2hKWhjhhubj)}(hhh]h)}(h9Add the fh to the list of file handles on a video_device.h]h9Add the fh to the list of file handles on a video_device.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKWhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hKWubeh}(h]h ](jfunctioneh"]h$]h&]j jj jlj jlj j j uh1jzhhhjXhNhNubj )}(hX9**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct file *filp`` pointer to :c:type:`struct file ` associated with **fh** **Description** The function sets filp->private_data to point to **fh**. .. note:: The **fh** file handle must be initialised first.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK[hjpubjR )}(hhh](jW )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j] )}(h``struct v4l2_fh *fh``h]h)}(hjh]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKYhjubjw )}(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 ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hhjhKYhjubeh}(h]h ]h"]h$]h&]uh1hhjhKYhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKYhjubjW )}(hU``struct file *filp`` pointer to :c:type:`struct file ` associated with **fh** h](j] )}(h``struct file *filp``h]h)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKZhjubjw )}(hhh]h)}(h>pointer to :c:type:`struct file ` associated with **fh**h](h pointer to }(hjhhhNhNubh)}(h:c:type:`struct file `h]h)}(hjh]h struct file}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jfileuh1hhjhKZhjubh associated with }(hjhhhNhNubj)}(h**fh**h]hfh}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKZhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKZhjubeh}(h]h ]h"]h$]h&]uh1jQ hjpubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK\hjpubh)}(h8The function sets filp->private_data to point to **fh**.h](h1The function sets filp->private_data to point to }(hjohhhNhNubj)}(h**fh**h]hfh}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK[hjpubhnote)}(h1The **fh** file handle must be initialised first.h]h)}(hjh](hThe }(hjhhhNhNubj)}(h**fh**h]hfh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' file handle must be initialised first.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhK^hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_open (C function)c.v4l2_fh_openhNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h$int v4l2_fh_open (struct file *filp)h]j)}(h#int v4l2_fh_open(struct file *filp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKdubj)}(h v4l2_fh_openh]j)}(h v4l2_fh_openh]h v4l2_fh_open}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKdubj )}(h(struct file *filp)h]j )}(hstruct file *filph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j )}j jsbc.v4l2_fh_openasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfilph]hfilp}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKdubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKdhjhhubj)}(hhh]h)}(hNAncillary routine that can be used as the open\(\) op of v4l2_file_operations.h]hNAncillary routine that can be used as the open() op of v4l2_file_operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKdubeh}(h]h ](jfunctioneh"]h$]h&]j jj jj jj j j uh1jzhhhjXhNhNubj )}(hXE**Parameters** ``struct file *filp`` pointer to struct file **Description** It allocates a v4l2_fh and inits and adds it to the :c:type:`struct video_device ` associated with the file pointer. On error filp->private_data will be ``NULL``, otherwise it will point to the :c:type:`struct v4l2_fh `.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhhjubjR )}(hhh]jW )}(h-``struct file *filp`` pointer to struct file h](j] )}(h``struct file *filp``h]h)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKghjubjw )}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKghjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKghjubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKihjubh)}(hIt allocates a v4l2_fh and inits and adds it to the :c:type:`struct video_device ` associated with the file pointer.h](h4It allocates a v4l2_fh and inits and adds it to the }(hj.hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hj8h]hstruct video_device}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j video_deviceuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhhj.ubh" associated with the file pointer.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhKhhjubh)}(hpOn error filp->private_data will be ``NULL``, otherwise it will point to the :c:type:`struct v4l2_fh `.h](h$On error filp->private_data will be }(hj`hhhNhNubh)}(h``NULL``h]hNULL}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubh!, otherwise it will point to the }(hj`hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj|h]hstruct v4l2_fh}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKkhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_del (C function) c.v4l2_fh_delhNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h8void v4l2_fh_del (struct v4l2_fh *fh, struct file *filp)h]j)}(h7void v4l2_fh_del(struct v4l2_fh *fh, struct file *filp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKrubj)}(h v4l2_fh_delh]j)}(h v4l2_fh_delh]h v4l2_fh_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKrubj )}(h'(struct v4l2_fh *fh, struct file *filp)h](j )}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNj j )}j ]j )}j jsb c.v4l2_fh_delasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfhh]hfh}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct file *filph](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j; c.v4l2_fh_delasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjoubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKrubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKrubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKrhjhhubj)}(hhh]h)}(h1Remove file handle from the list of file handles.h]h1Remove file handle from the list of file handles.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKrhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKrubeh}(h]h ](jfunctioneh"]h$]h&]j jj j j j j j j uh1jzhhhjXhNhNubj )}(hXt**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct file *filp`` pointer to :c:type:`struct file ` associated with **fh** **Description** The function resets filp->private_data to NULL. .. note:: Must be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKvhjubjR )}(hhh](jW )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j] )}(h``struct v4l2_fh *fh``h]h)}(hj5h]hstruct v4l2_fh *fh}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKthj/ubjw )}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjNhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjXh]hstruct v4l2_fh}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hhjJhKthjNubeh}(h]h ]h"]h$]h&]uh1hhjJhKthjKubah}(h]h ]h"]h$]h&]uh1jv hj/ubeh}(h]h ]h"]h$]h&]uh1jV hjJhKthj,ubjW )}(hU``struct file *filp`` pointer to :c:type:`struct file ` associated with **fh** h](j] )}(h``struct file *filp``h]h)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKuhjubjw )}(hhh]h)}(h>pointer to :c:type:`struct file ` associated with **fh**h](h pointer to }(hjhhhNhNubh)}(h:c:type:`struct file `h]h)}(hjh]h struct file}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jfileuh1hhjhKuhjubh associated with }(hjhhhNhNubj)}(h**fh**h]hfh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKuhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKuhj,ubeh}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKwhjubh)}(h/The function resets filp->private_data to NULL.h]h/The function resets filp->private_data to NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKvhjubj)}(hrMust be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h]h)}(hrMust be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](hOMust be called in v4l2_file_operations->release() handler if the driver uses }(hj"hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hj,h]hstruct v4l2_fh}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKyhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_exit (C function)c.v4l2_fh_exithNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h&void v4l2_fh_exit (struct v4l2_fh *fh)h]j)}(h%void v4l2_fh_exit(struct v4l2_fh *fh)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhKubj)}(h v4l2_fh_exith]j)}(h v4l2_fh_exith]h v4l2_fh_exit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjvhhhjhKubj )}(h(struct v4l2_fh *fh)h]j )}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.v4l2_fh_exitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjvhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjrhhhjhKubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjohhubj)}(hhh]h)}(h+Release resources related to a file handle.h]h+Release resources related to a file handle.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj7hhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j jj jRj jRj j j uh1jzhhhjXhNhNubj )}(hXB**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` **Description** Parts of the V4L2 framework using the v4l2_fh must release their resources here, too. .. note:: Must be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjVubjR )}(hhh]jW )}(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&]uh1hhjyubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjuubjw )}(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 ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjuubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjrubah}(h]h ]h"]h$]h&]uh1jQ hjVubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjVubh)}(hUParts of the V4L2 framework using the v4l2_fh must release their resources here, too.h]hUParts of the V4L2 framework using the v4l2_fh must release their resources here, too.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjVubj)}(hrMust be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h]h)}(hrMust be called in v4l2_file_operations->release\(\) handler if the driver uses :c:type:`struct v4l2_fh `.h](hOMust be called in v4l2_file_operations->release() handler if the driver uses }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjh]hstruct v4l2_fh}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKhjubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvv4l2_fh_release (C function)c.v4l2_fh_releasehNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h'int v4l2_fh_release (struct file *filp)h]j)}(h&int v4l2_fh_release(struct file *filp)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjdhKubj)}(hv4l2_fh_releaseh]j)}(hv4l2_fh_releaseh]hv4l2_fh_release}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]hhuh1jhjRhhhjdhKubj )}(h(struct file *filp)h]j )}(hstruct file *filph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jysbc.v4l2_fh_releaseasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjRhhhjdhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjNhhhjdhKubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjdhKhjKhhubj)}(hhh]h)}(hQAncillary routine that can be used as the release\(\) op of v4l2_file_operations.h]hQAncillary routine that can be used as the release() op of v4l2_file_operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhKubeh}(h]h ](jfunctioneh"]h$]h&]j jj j.j j.j j j uh1jzhhhjXhNhNubj )}(hX**Parameters** ``struct file *filp`` pointer to struct file **Description** It deletes and exits the v4l2_fh associated with the file pointer and frees it. It will do nothing if filp->private_data (the pointer to the v4l2_fh struct) is ``NULL``. This function always returns 0.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj2ubjR )}(hhh]jW )}(h-``struct file *filp`` pointer to struct file h](j] )}(h``struct file *filp``h]h)}(hjWh]hstruct file *filp}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjQubjw )}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKhjmubah}(h]h ]h"]h$]h&]uh1jv hjQubeh}(h]h ]h"]h$]h&]uh1jV hjlhKhjNubah}(h]h ]h"]h$]h&]uh1jQ hj2ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj2ubh)}(hIt deletes and exits the v4l2_fh associated with the file pointer and frees it. It will do nothing if filp->private_data (the pointer to the v4l2_fh struct) is ``NULL``.h](hIt deletes and exits the v4l2_fh associated with the file pointer and frees it. It will do nothing if filp->private_data (the pointer to the v4l2_fh struct) is }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj2ubh)}(hThis function always returns 0.h]hThis function always returns 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv v4l2_fh_is_singular (C function)c.v4l2_fh_is_singularhNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h,int v4l2_fh_is_singular (struct v4l2_fh *fh)h]j)}(h+int v4l2_fh_is_singular(struct v4l2_fh *fh)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hv4l2_fh_is_singularh]j)}(hv4l2_fh_is_singularh]hv4l2_fh_is_singular}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct v4l2_fh *fh)h]j )}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNj j )}j ]j )}j jsbc.v4l2_fh_is_singularasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj-ubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h[Returns 1 if this filehandle is the only filehandle opened for the associated video_device.h]h[Returns 1 if this filehandle is the only filehandle opened for the associated video_device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j jj jj jj j j uh1jzhhhjXhNhNubj )}(h**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` **Description** If **fh** is NULL, then it returns 0.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubjR )}(hhh]jW )}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j] )}(h``struct v4l2_fh *fh``h]h)}(hjh]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubjw )}(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 ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j jv4l2_fhuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubh)}(h%If **fh** is NULL, then it returns 0.h](hIf }(hjihhhNhNubj)}(h**fh**h]hfh}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh is NULL, then it returns 0.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubjj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv%v4l2_fh_is_singular_file (C function)c.v4l2_fh_is_singular_filehNtauh1jihjXhhhNhNubj{)}(hhh](j)}(h0int v4l2_fh_is_singular_file (struct file *filp)h]j)}(h/int v4l2_fh_is_singular_file(struct file *filp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hv4l2_fh_is_singular_fileh]j)}(hv4l2_fh_is_singular_fileh]hv4l2_fh_is_singular_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct file *filp)h]j )}(hstruct file *filph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.v4l2_fh_is_singular_fileasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfilph]hfilp}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h[Returns 1 if this filehandle is the only filehandle opened for the associated video_device.h]h[Returns 1 if this filehandle is the only filehandle opened for the associated video_device.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j jj jj jj j j uh1jzhhhjXhNhNubj )}(h**Parameters** ``struct file *filp`` pointer to struct file **Description** This is a helper function variant of v4l2_fh_is_singular() with uses struct file as argument. If filp->private_data is ``NULL``, then it will return 0.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubjR )}(hhh]jW )}(h-``struct file *filp`` pointer to struct file h](j] )}(h``struct file *filp``h]h)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j\ ha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubjw )}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubh)}(h]This is a helper function variant of v4l2_fh_is_singular() with uses struct file as argument.h]h]This is a helper function variant of v4l2_fh_is_singular() with uses struct file as argument.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubh)}(h9If filp->private_data is ``NULL``, then it will return 0.h](hIf filp->private_data is }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh, then it will return 0.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-fh:136: ./include/media/v4l2-fh.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjXhhhNhNubeh}(h]%v4l2-fh-functions-and-data-structuresah ]h"]%v4l2 fh functions and data structuresah$]h&]uh1hhhhhhhhKubeh}(h]v4l2-file-handlesah ]h"]v4l2 file handlesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_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_handlerjferror_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=j8j5u nametypes}(j@j8uh}(j=hj5jXjxjj j jjjjjjjjjmjrjIjNjjjju 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.