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-devmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/media/v4l2-devmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/media/v4l2-devmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/media/v4l2-devmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/media/v4l2-devmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/media/v4l2-devmodnameN 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:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev.rsthKubhsection)}(hhh](htitle)}(h'Video device' s internal representationh]h)Video device’ s internal representation}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe actual device nodes in the ``/dev`` directory are created using the :c:type:`video_device` struct (``v4l2-dev.h``). This struct can either be allocated dynamically or embedded in a larger struct.h](hThe actual device nodes in the }(hhhhhNhNubhliteral)}(h``/dev``h]h/dev}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh! directory are created using the }(hhhhhNhNubh)}(h:c:type:`video_device`h]h)}(hhh]h video_device}(hhhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-dev refdomainhreftypetype refexplicitrefwarn reftarget video_deviceuh1hhhhKhhubh struct (}(hhhhhNhNubh)}(h``v4l2-dev.h``h]h v4l2-dev.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubhR). This struct can either be allocated dynamically or embedded in a larger struct.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hrelease = video_device_release;h]hstruct video_device *vdev = video_device_alloc(); if (vdev == NULL) return -ENOMEM; vdev->release = video_device_release;}hjYsbah}(h]h ]h"]h$]h&]hhforcelanguagehhighlight_args}uh1jWhhhK hhhhubh)}(hfIf you embed it in a larger struct, then you must set the ``release()`` callback to your own function:h](h:If you embed it in a larger struct, then you must set the }(hjkhhhNhNubh)}(h ``release()``h]h release()}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkubh callback to your own function:}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubjX)}(hMstruct video_device *vdev = &my_vdev->vdev; vdev->release = my_vdev_release;h]hMstruct video_device *vdev = &my_vdev->vdev; vdev->release = my_vdev_release;}hjsbah}(h]h ]h"]h$]h&]hhjgjhhji}uh1jWhhhKhhhhubh)}(heThe ``release()`` callback must be set and it is called when the last user of the video device exits.h](hThe }(hjhhhNhNubh)}(h ``release()``h]h release()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhT callback must be set and it is called when the last user of the video device exits.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hpThe default :c:func:`video_device_release` callback currently just calls ``kfree`` to free the allocated memory.h](h The default }(hjhhhNhNubh)}(h:c:func:`video_device_release`h]h)}(hjh]hvideo_device_release()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_device_releaseuh1hhhhK!hjubh callback currently just calls }(hjhhhNhNubh)}(h ``kfree``h]hkfree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh to free the allocated memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hhhhubh)}(hThere is also a :c:func:`video_device_release_empty` function that does nothing (is empty) and should be used if the struct is embedded and there is nothing to do when it is released.h](hThere is also a }(hjhhhNhNubh)}(h$:c:func:`video_device_release_empty`h]h)}(hjh]hvideo_device_release_empty()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_device_release_emptyuh1hhhhK$hjubh function that does nothing (is empty) and should be used if the struct is embedded and there is nothing to do when it is released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK$hhhhubh)}(h;You should also set these fields of :c:type:`video_device`:h](h$You should also set these fields of }(hj.hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj8h]h video_device}(hj:hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK(hj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hhhhubh bullet_list)}(hhh](h list_item)}(hZ:c:type:`video_device`->v4l2_dev: must be set to the :c:type:`v4l2_device` parent device. h]h)}(hY:c:type:`video_device`->v4l2_dev: must be set to the :c:type:`v4l2_device` parent device.h](h)}(h:c:type:`video_device`h]h)}(hjph]h video_device}(hjrhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK*hjjubh->v4l2_dev: must be set to the }(hjjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK*hjjubh parent device.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK*hjfubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hG:c:type:`video_device`->name: set to something descriptive and unique. h]h)}(hF:c:type:`video_device`->name: set to something descriptive and unique.h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK-hjubh0->name: set to something descriptive and unique.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(h:c:type:`video_device`->vfl_dir: set this to ``VFL_DIR_RX`` for capture devices (``VFL_DIR_RX`` has value 0, so this is normally already the default), set to ``VFL_DIR_TX`` for output devices and ``VFL_DIR_M2M`` for mem2mem (codec) devices. h]h)}(h:c:type:`video_device`->vfl_dir: set this to ``VFL_DIR_RX`` for capture devices (``VFL_DIR_RX`` has value 0, so this is normally already the default), set to ``VFL_DIR_TX`` for output devices and ``VFL_DIR_M2M`` for mem2mem (codec) devices.h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK/hjubh->vfl_dir: set this to }(hjhhhNhNubh)}(h``VFL_DIR_RX``h]h VFL_DIR_RX}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for capture devices (}(hjhhhNhNubh)}(h``VFL_DIR_RX``h]h VFL_DIR_RX}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh? has value 0, so this is normally already the default), set to }(hjhhhNhNubh)}(h``VFL_DIR_TX``h]h VFL_DIR_TX}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for output devices and }(hjhhhNhNubh)}(h``VFL_DIR_M2M``h]h VFL_DIR_M2M}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for mem2mem (codec) devices.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hP:c:type:`video_device`->fops: set to the :c:type:`v4l2_file_operations` struct. h]h)}(hO:c:type:`video_device`->fops: set to the :c:type:`v4l2_file_operations` struct.h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK3hjzubh->fops: set to the }(hjzhhhNhNubh)}(h:c:type:`v4l2_file_operations`h]h)}(hjh]hv4l2_file_operations}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_file_operationsuh1hhhhK3hjzubh struct.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjvubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hXM:c:type:`video_device`->ioctl_ops: if you use the :c:type:`v4l2_ioctl_ops` to simplify ioctl maintenance (highly recommended to use this and it might become compulsory in the future!), then set this to your :c:type:`v4l2_ioctl_ops` struct. The :c:type:`video_device`->vfl_type and :c:type:`video_device`->vfl_dir fields are used to disable ops that do not match the type/dir combination. E.g. VBI ops are disabled for non-VBI nodes, and output ops are disabled for a capture device. This makes it possible to provide just one :c:type:`v4l2_ioctl_ops` struct for both vbi and video nodes. h]h)}(hXL:c:type:`video_device`->ioctl_ops: if you use the :c:type:`v4l2_ioctl_ops` to simplify ioctl maintenance (highly recommended to use this and it might become compulsory in the future!), then set this to your :c:type:`v4l2_ioctl_ops` struct. The :c:type:`video_device`->vfl_type and :c:type:`video_device`->vfl_dir fields are used to disable ops that do not match the type/dir combination. E.g. VBI ops are disabled for non-VBI nodes, and output ops are disabled for a capture device. This makes it possible to provide just one :c:type:`v4l2_ioctl_ops` struct for both vbi and video nodes.h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK6hjubh->ioctl_ops: if you use the }(hjhhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hjh]hv4l2_ioctl_ops}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhK6hjubh to simplify ioctl maintenance (highly recommended to use this and it might become compulsory in the future!), then set this to your }(hjhhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hj h]hv4l2_ioctl_ops}(hj"hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhK6hjubh struct. The }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjCh]h video_device}(hjEhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK6hjubh->vfl_type and }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjfh]h video_device}(hjhhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK6hjubh->vfl_dir fields are used to disable ops that do not match the type/dir combination. E.g. VBI ops are disabled for non-VBI nodes, and output ops are disabled for a capture device. This makes it possible to provide just one }(hjhhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hjh]hv4l2_ioctl_ops}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhK6hjubh% struct for both vbi and video nodes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hjubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hXP:c:type:`video_device`->lock: leave to ``NULL`` if you want to do all the locking in the driver. Otherwise you give it a pointer to a struct ``mutex_lock`` and before the :c:type:`video_device`->unlocked_ioctl file operation is called this lock will be taken by the core and released afterwards. See the next section for more details. h]h)}(hXO:c:type:`video_device`->lock: leave to ``NULL`` if you want to do all the locking in the driver. Otherwise you give it a pointer to a struct ``mutex_lock`` and before the :c:type:`video_device`->unlocked_ioctl file operation is called this lock will be taken by the core and released afterwards. See the next section for more details.h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK@hjubh->lock: leave to }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh_ if you want to do all the locking in the driver. Otherwise you give it a pointer to a struct }(hjhhhNhNubh)}(h``mutex_lock``h]h mutex_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and before the }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhK@hjubh->unlocked_ioctl file operation is called this lock will be taken by the core and released afterwards. See the next section for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK@hjubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hX{:c:type:`video_device`->queue: a pointer to the struct vb2_queue associated with this device node. If queue is not ``NULL``, and queue->lock is not ``NULL``, then queue->lock is used for the queuing ioctls (``VIDIOC_REQBUFS``, ``CREATE_BUFS``, ``QBUF``, ``DQBUF``, ``QUERYBUF``, ``PREPARE_BUF``, ``STREAMON`` and ``STREAMOFF``) instead of the lock above. That way the :ref:`vb2 ` queuing framework does not have to wait for other ioctls. This queue pointer is also used by the :ref:`vb2 ` helper functions to check for queuing ownership (i.e. is the filehandle calling it allowed to do the operation). h]h)}(hXz:c:type:`video_device`->queue: a pointer to the struct vb2_queue associated with this device node. If queue is not ``NULL``, and queue->lock is not ``NULL``, then queue->lock is used for the queuing ioctls (``VIDIOC_REQBUFS``, ``CREATE_BUFS``, ``QBUF``, ``DQBUF``, ``QUERYBUF``, ``PREPARE_BUF``, ``STREAMON`` and ``STREAMOFF``) instead of the lock above. That way the :ref:`vb2 ` queuing framework does not have to wait for other ioctls. This queue pointer is also used by the :ref:`vb2 ` helper functions to check for queuing ownership (i.e. is the filehandle calling it allowed to do the operation).h](h)}(h:c:type:`video_device`h]h)}(hj>h]h video_device}(hj@hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKFhj8ubh]->queue: a pointer to the struct vb2_queue associated with this device node. If queue is not }(hj8hhhNhNubh)}(h``NULL``h]hNULL}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, and queue->lock is not }(hj8hhhNhNubh)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh3, then queue->lock is used for the queuing ioctls (}(hj8hhhNhNubh)}(h``VIDIOC_REQBUFS``h]hVIDIOC_REQBUFS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }(hj8hhhNhNubh)}(h``CREATE_BUFS``h]h CREATE_BUFS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }(hj8hhhNhNubh)}(h``QBUF``h]hQBUF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }hj8sbh)}(h ``DQBUF``h]hDQBUF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }(hj8hhhNhNubh)}(h ``QUERYBUF``h]hQUERYBUF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }hj8sbh)}(h``PREPARE_BUF``h]h PREPARE_BUF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }hj8sbh)}(h ``STREAMON``h]hSTREAMON}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh and }(hj8hhhNhNubh)}(h ``STREAMOFF``h]h STREAMOFF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh*) instead of the lock above. That way the }(hj8hhhNhNubh)}(h:ref:`vb2 `h]hinline)}(hjh]hvb2}(hjhhhNhNubah}(h]h ](hstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj#reftyperef refexplicitrefwarnj vb2_frameworkuh1hhhhKFhj8ubhd queuing framework does not have to wait for other ioctls. This queue pointer is also used by the }(hj8hhhNhNubh)}(h:ref:`vb2 `h]j)}(hj;h]hvb2}(hj=hhhNhNubah}(h]h ](hstdstd-refeh"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjGreftyperef refexplicitrefwarnj vb2_frameworkuh1hhhhKFhj8ubhq helper functions to check for queuing ownership (i.e. is the filehandle calling it allowed to do the operation).}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKFhj4ubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hXn:c:type:`video_device`->prio: keeps track of the priorities. Used to implement ``VIDIOC_G_PRIORITY`` and ``VIDIOC_S_PRIORITY``. If left to ``NULL``, then it will use the struct v4l2_prio_state in :c:type:`v4l2_device`. If you want to have a separate priority state per (group of) device node(s), then you can point it to your own struct :c:type:`v4l2_prio_state`. h]h)}(hXm:c:type:`video_device`->prio: keeps track of the priorities. Used to implement ``VIDIOC_G_PRIORITY`` and ``VIDIOC_S_PRIORITY``. If left to ``NULL``, then it will use the struct v4l2_prio_state in :c:type:`v4l2_device`. If you want to have a separate priority state per (group of) device node(s), then you can point it to your own struct :c:type:`v4l2_prio_state`.h](h)}(h:c:type:`video_device`h]h)}(hjsh]h video_device}(hjuhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKRhjmubh9->prio: keeps track of the priorities. Used to implement }(hjmhhhNhNubh)}(h``VIDIOC_G_PRIORITY``h]hVIDIOC_G_PRIORITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmubh and }(hjmhhhNhNubh)}(h``VIDIOC_S_PRIORITY``h]hVIDIOC_S_PRIORITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmubh . If left to }(hjmhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmubh1, then it will use the struct v4l2_prio_state in }(hjmhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKRhjmubhz. If you want to have a separate priority state per (group of) device node(s), then you can point it to your own struct }(hjmhhhNhNubh)}(h:c:type:`v4l2_prio_state`h]h)}(hjh]hv4l2_prio_state}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_prio_stateuh1hhhhKRhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjiubah}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubje)}(hX:c:type:`video_device`->dev_parent: you only set this if v4l2_device was registered with ``NULL`` as the parent ``device`` struct. This only happens in cases where one hardware device has multiple PCI devices that all share the same :c:type:`v4l2_device` core. The cx88 driver is an example of this: one core :c:type:`v4l2_device` struct, but it is used by both a raw video PCI device (cx8800) and a MPEG PCI device (cx8802). Since the :c:type:`v4l2_device` cannot be associated with two PCI devices at the same time it is setup without a parent device. But when the struct video_device is initialized you **do** know which parent PCI device to use and so you set ``dev_device`` to the correct PCI device. h](h)}(hX:c:type:`video_device`->dev_parent: you only set this if v4l2_device was registered with ``NULL`` as the parent ``device`` struct. This only happens in cases where one hardware device has multiple PCI devices that all share the same :c:type:`v4l2_device` core.h](h)}(h:c:type:`video_device`h]h)}(hj&h]h video_device}(hj(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKYhj ubhC->dev_parent: you only set this if v4l2_device was registered with }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh as the parent }(hj hhhNhNubh)}(h ``device``h]hdevice}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubho struct. This only happens in cases where one hardware device has multiple PCI devices that all share the same }(hj hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjmh]h v4l2_device}(hjohhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKYhj ubh core.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKYhjubh)}(hXThe cx88 driver is an example of this: one core :c:type:`v4l2_device` struct, but it is used by both a raw video PCI device (cx8800) and a MPEG PCI device (cx8802). Since the :c:type:`v4l2_device` cannot be associated with two PCI devices at the same time it is setup without a parent device. But when the struct video_device is initialized you **do** know which parent PCI device to use and so you set ``dev_device`` to the correct PCI device.h](h0The cx88 driver is an example of this: one core }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK^hjubhl struct, but it is used by both a raw video PCI device (cx8800) and a MPEG PCI device (cx8802). Since the }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK^hjubh cannot be associated with two PCI devices at the same time it is setup without a parent device. But when the struct video_device is initialized you }(hjhhhNhNubhstrong)}(h**do**h]hdo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 know which parent PCI device to use and so you set }(hjhhhNhNubh)}(h``dev_device``h]h dev_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh to the correct PCI device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hjubeh}(h]h ]h"]h$]h&]uh1jdhjahhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j_hhhK*hhhhubh)}(hIf you use :c:type:`v4l2_ioctl_ops`, then you should set :c:type:`video_device`->unlocked_ioctl to :c:func:`video_ioctl2` in your :c:type:`v4l2_file_operations` struct.h](h If you use }(hjhhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hj&h]hv4l2_ioctl_ops}(hj(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhKehjubh, then you should set }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjIh]h video_device}(hjKhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKehjubh->unlocked_ioctl to }(hjhhhNhNubh)}(h:c:func:`video_ioctl2`h]h)}(hjlh]hvideo_ioctl2()}(hjnhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj video_ioctl2uh1hhhhKehjubh in your }(hjhhhNhNubh)}(h:c:type:`v4l2_file_operations`h]h)}(hjh]hv4l2_file_operations}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_file_operationsuh1hhhhKehjubh struct.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKehhhhubh)}(hIn some cases you want to tell the core that a function you had specified in your :c:type:`v4l2_ioctl_ops` should be ignored. You can mark such ioctls by calling this function before :c:func:`video_register_device` is called:h](hRIn some cases you want to tell the core that a function you had specified in your }(hjhhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hjh]hv4l2_ioctl_ops}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhKihjubhM should be ignored. You can mark such ioctls by calling this function before }(hjhhhNhNubh)}(h:c:func:`video_register_device`h]h)}(hjh]hvideo_register_device()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhKihjubh is called:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKihhhhubh block_quote)}(hX:c:func:`v4l2_disable_ioctl ` (:c:type:`vdev `, cmd). h]h)}(hW:c:func:`v4l2_disable_ioctl ` (:c:type:`vdev `, cmd).h](h)}(h1:c:func:`v4l2_disable_ioctl `h]h)}(hj h]hv4l2_disable_ioctl}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjv4l2_disable_ioctluh1hhhhKmhj ubh (}(hj hhhNhNubh)}(h:c:type:`vdev `h]h)}(hj9 h]hvdev}(hj; hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj7 ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKmhj ubh, cmd).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKmhj ubah}(h]h ]h"]h$]h&]uh1j hhhKmhhhhubh)}(hThis tends to be needed if based on external factors (e.g. which card is being used) you want to turns off certain features in :c:type:`v4l2_ioctl_ops` without having to make a new struct.h](hThis tends to be needed if based on external factors (e.g. which card is being used) you want to turns off certain features in }(hjf hhhNhNubh)}(h:c:type:`v4l2_ioctl_ops`h]h)}(hjp h]hv4l2_ioctl_ops}(hjr hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjn ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_ioctl_opsuh1hhhhKphjf ubh% without having to make a new struct.}(hjf hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphhhhubh)}(hThe :c:type:`v4l2_file_operations` struct is a subset of file_operations. The main difference is that the inode argument is omitted since it is never used.h](hThe }(hj hhhNhNubh)}(h:c:type:`v4l2_file_operations`h]h)}(hj h]hv4l2_file_operations}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjv4l2_file_operationsuh1hhhhKthj ubhy struct is a subset of file_operations. The main difference is that the inode argument is omitted since it is never used.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthhhhubh)}(hIf integration with the media framework is needed, you must initialize the :c:type:`media_entity` struct embedded in the :c:type:`video_device` struct (entity field) by calling :c:func:`media_entity_pads_init`:h](hKIf integration with the media framework is needed, you must initialize the }(hj hhhNhNubh)}(h:c:type:`media_entity`h]h)}(hj h]h media_entity}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj media_entityuh1hhhhKxhj ubh struct embedded in the }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj h]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKxhj ubh" struct (entity field) by calling }(hj hhhNhNubh)}(h :c:func:`media_entity_pads_init`h]h)}(hj h]hmedia_entity_pads_init()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjmedia_entity_pads_inituh1hhhhKxhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhhhhubjX)}(hestruct media_pad *pad = &my_vdev->pad; int err; err = media_entity_pads_init(&vdev->entity, 1, pad);h]hestruct media_pad *pad = &my_vdev->pad; int err; err = media_entity_pads_init(&vdev->entity, 1, pad);}hj? sbah}(h]h ]h"]h$]h&]hhjgjhhji}uh1jWhhhK|hhhhubh)}(hThe pads array must have been previously initialized. There is no need to manually set the struct media_entity type and name fields.h]hThe pads array must have been previously initialized. There is no need to manually set the struct media_entity type and name fields.}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hiA reference to the entity will be automatically acquired/released when the video device is opened/closed.h]hiA reference to the entity will be automatically acquired/released when the video device is opened/closed.}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hioctls and lockingh]hioctls and locking}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj hhhhhKubh)}(hThe V4L core provides optional locking services. The main service is the lock field in struct video_device, which is a pointer to a mutex. If you set this pointer, then that will be used by unlocked_ioctl to serialize all ioctls.h]hThe V4L core provides optional locking services. The main service is the lock field in struct video_device, which is a pointer to a mutex. If you set this pointer, then that will be used by unlocked_ioctl to serialize all ioctls.}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubh)}(hX=If you are using the :ref:`videobuf2 framework `, then there is a second lock that you can set: :c:type:`video_device`->queue->lock. If set, then this lock will be used instead of :c:type:`video_device`->lock to serialize all queuing ioctls (see the previous section for the full list of those ioctls).h](hIf you are using the }(hj hhhNhNubh)}(h*:ref:`videobuf2 framework `h]j)}(hj h]hvideobuf2 framework}(hj hhhNhNubah}(h]h ](hstdstd-refeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainj reftyperef refexplicitrefwarnj vb2_frameworkuh1hhhhKhj ubh0, then there is a second lock that you can set: }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj h]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubh>->queue->lock. If set, then this lock will be used instead of }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj h]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubhd->lock to serialize all queuing ioctls (see the previous section for the full list of those ioctls).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubh)}(hXfThe advantage of using a different lock for the queuing ioctls is that for some drivers (particularly USB drivers) certain commands such as setting controls can take a long time, so you want to use a separate lock for the buffer queuing ioctls. That way your ``VIDIOC_DQBUF`` doesn't stall because the driver is busy changing the e.g. exposure of the webcam.h](hXThe advantage of using a different lock for the queuing ioctls is that for some drivers (particularly USB drivers) certain commands such as setting controls can take a long time, so you want to use a separate lock for the buffer queuing ioctls. That way your }(hj hhhNhNubh)}(h``VIDIOC_DQBUF``h]h VIDIOC_DQBUF}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhU doesn’t stall because the driver is busy changing the e.g. exposure of the webcam.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubh)}(h`Of course, you can always do all the locking yourself by leaving both lock pointers at ``NULL``.h](hWOf course, you can always do all the locking yourself by leaving both lock pointers at }(hj! hhhNhNubh)}(h``NULL``h]hNULL}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj! ubh.}(hj! hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubh)}(hX/In the case of :ref:`videobuf2 ` you will need to implement the ``wait_prepare()`` and ``wait_finish()`` callbacks to unlock/lock if applicable. If you use the ``queue->lock`` pointer, then you can use the helper functions :c:func:`vb2_ops_wait_prepare` and :c:func:`vb2_ops_wait_finish`.h](hIn the case of }(hjA hhhNhNubh)}(h :ref:`videobuf2 `h]j)}(hjK h]h videobuf2}(hjM hhhNhNubah}(h]h ](hstdstd-refeh"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&]refdocj refdomainjW reftyperef refexplicitrefwarnj vb2_frameworkuh1hhhhKhjA ubh you will need to implement the }(hjA hhhNhNubh)}(h``wait_prepare()``h]hwait_prepare()}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA ubh and }(hjA hhhNhNubh)}(h``wait_finish()``h]h wait_finish()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA ubh8 callbacks to unlock/lock if applicable. If you use the }(hjA hhhNhNubh)}(h``queue->lock``h]h queue->lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA ubh0 pointer, then you can use the helper functions }(hjA hhhNhNubh)}(h:c:func:`vb2_ops_wait_prepare`h]h)}(hj h]hvb2_ops_wait_prepare()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvb2_ops_wait_prepareuh1hhhhKhjA ubh and }hjA sbh)}(h:c:func:`vb2_ops_wait_finish`h]h)}(hj h]hvb2_ops_wait_finish()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvb2_ops_wait_finishuh1hhhhKhjA ubh.}(hjA hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubh)}(hXThe implementation of a hotplug disconnect should also take the lock from :c:type:`video_device` before calling v4l2_device_disconnect. If you are also using :c:type:`video_device`->queue->lock, then you have to first lock :c:type:`video_device`->queue->lock followed by :c:type:`video_device`->lock. That way you can be sure no ioctl is running when you call :c:func:`v4l2_device_disconnect`.h](hJThe implementation of a hotplug disconnect should also take the lock from }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj h]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubh> before calling v4l2_device_disconnect. If you are also using }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj h]h video_device}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubh+->queue->lock, then you have to first lock }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hj? h]h video_device}(hjA hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj= ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubh->queue->lock followed by }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hjb h]h video_device}(hjd hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj` ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhj ubhC->lock. That way you can be sure no ioctl is running when you call }(hj hhhNhNubh)}(h :c:func:`v4l2_device_disconnect`h]h)}(hj h]hv4l2_device_disconnect()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjv4l2_device_disconnectuh1hhhhKhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjj hhubeh}(h]ioctls-and-lockingah ]h"]ioctls and lockingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hVideo device registrationh]hVideo device registration}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hwNext you register the video device with :c:func:`video_register_device`. This will create the character device for you.h](h(Next you register the video device with }(hj hhhNhNubh)}(h:c:func:`video_register_device`h]h)}(hj h]hvideo_register_device()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhKhj ubh0. This will create the character device for you.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubjX)}(herr = video_register_device(vdev, VFL_TYPE_VIDEO, -1); if (err) { video_device_release(vdev); /* or kfree(my_vdev); */ return err; }h]herr = video_register_device(vdev, VFL_TYPE_VIDEO, -1); if (err) { video_device_release(vdev); /* or kfree(my_vdev); */ return err; }}hj sbah}(h]h ]h"]h$]h&]hhjgjhhji}uh1jWhhhKhj hhubh)}(hIf the :c:type:`v4l2_device` parent device has a not ``NULL`` mdev field, the video device entity will be automatically registered with the media device.h](hIf the }(hj 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&]refdocj refdomainhreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhj ubh parent device has a not }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh\ mdev field, the video device entity will be automatically registered with the media device.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hSWhich device is registered depends on the type argument. The following types exist:h]hSWhich device is registered depends on the type argument. The following types exist:}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j` hj] ubja )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j` hj] ubja )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j` hj] ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h:c:type:`vfl_devnode_type`h]h)}(hj h]h)}(hj h]hvfl_devnode_type}(hj hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjvfl_devnode_typeuh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h Device nameh]h Device name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(hUsageh]hUsage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hj] ubhtbody)}(hhh](j )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_VIDEO``h]h)}(hjh]hVFL_TYPE_VIDEO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h``/dev/videoX``h]h)}(hj$h]h /dev/videoX}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(hfor video input/output devicesh]hfor video input/output devices}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj?ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_VBI``h]h)}(hjdh]h VFL_TYPE_VBI}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ubah}(h]h ]h"]h$]h&]uh1j hj\ubj )}(hhh]h)}(h ``/dev/vbiX``h]h)}(hjh]h /dev/vbiX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj\ubj )}(hhh]h)}(h8for vertical blank data (i.e. closed captions, teletext)h]h8for vertical blank data (i.e. closed captions, teletext)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_RADIO``h]h)}(hjh]hVFL_TYPE_RADIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(h``/dev/radioX``h]h)}(hjh]h /dev/radioX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(hfor radio tunersh]hfor radio tuners}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_SUBDEV``h]h)}(hj$h]hVFL_TYPE_SUBDEV}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(h``/dev/v4l-subdevX``h]h)}(hjDh]h/dev/v4l-subdevX}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&]uh1hhhhKhj?ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(hfor V4L2 subdevicesh]hfor V4L2 subdevices}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_SDR``h]h)}(hjh]h VFL_TYPE_SDR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj|ubj )}(hhh]h)}(h``/dev/swradioX``h]h)}(hjh]h /dev/swradioX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj|ubj )}(hhh]h)}(h'for Software Defined Radio (SDR) tunersh]h'for Software Defined Radio (SDR) tuners}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh](j )}(hhh]h)}(h``VFL_TYPE_TOUCH``h]h)}(hjh]hVFL_TYPE_TOUCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(h``/dev/v4l-touchX``h]h)}(hjh]h/dev/v4l-touchX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(hfor touch sensorsh]hfor touch sensors}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj] ubeh}(h]h ]h"]h$]h&]colsKuh1j[ hjX ubah}(h]h ]h"]h$]h&]uh1jV hj hhhhhNubh)}(hXnThe last argument gives you a certain amount of control over the device node number used (i.e. the X in ``videoX``). Normally you will pass -1 to let the v4l2 framework pick the first free number. But sometimes users want to select a specific node number. It is common that drivers allow the user to select a specific device node number through a driver module option. That number is then passed to this function and video_register_device will attempt to select that device node number. If that number was already in use, then the next free device node number will be selected and it will send a warning to the kernel log.h](hhThe last argument gives you a certain amount of control over the device node number used (i.e. the X in }(hjOhhhNhNubh)}(h ``videoX``h]hvideoX}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOubhX). Normally you will pass -1 to let the v4l2 framework pick the first free number. But sometimes users want to select a specific node number. It is common that drivers allow the user to select a specific device node number through a driver module option. That number is then passed to this function and video_register_device will attempt to select that device node number. If that number was already in use, then the next free device node number will be selected and it will send a warning to the kernel log.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hXAnother use-case is if a driver creates many devices. In that case it can be useful to place different video devices in separate ranges. For example, video capture devices start at 0, video output devices start at 16. So you can use the last argument to specify a minimum device node number and the v4l2 framework will try to pick the first free number that is equal or higher to what you passed. If that fails, then it will just pick the first free number.h]hXAnother use-case is if a driver creates many devices. In that case it can be useful to place different video devices in separate ranges. For example, video capture devices start at 0, video output devices start at 16. So you can use the last argument to specify a minimum device node number and the v4l2 framework will try to pick the first free number that is equal or higher to what you passed. If that fails, then it will just pick the first free number.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hSince in this case you do not care about a warning about not being able to select the specified device node number, you can call the function :c:func:`video_register_device_no_warn` instead.h](hSince in this case you do not care about a warning about not being able to select the specified device node number, you can call the function }(hj}hhhNhNubh)}(h':c:func:`video_register_device_no_warn`h]h)}(hjh]hvideo_register_device_no_warn()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_device_no_warnuh1hhhhKhj}ubh instead.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hXWhenever a device node is created some attributes are also created for you. If you look in ``/sys/class/video4linux`` you see the devices. Go into e.g. ``video0`` and you will see 'name', 'dev_debug' and 'index' attributes. The 'name' attribute is the 'name' field of the video_device struct. The 'dev_debug' attribute can be used to enable core debugging. See the next section for more detailed information on this.h](h[Whenever a device node is created some attributes are also created for you. If you look in }(hjhhhNhNubh)}(h``/sys/class/video4linux``h]h/sys/class/video4linux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh# you see the devices. Go into e.g. }(hjhhhNhNubh)}(h ``video0``h]hvideo0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhX and you will see ‘name’, ‘dev_debug’ and ‘index’ attributes. The ‘name’ attribute is the ‘name’ field of the video_device struct. The ‘dev_debug’ attribute can be used to enable core debugging. See the next section for more detailed information on this.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hThe 'index' attribute is the index of the device node: for each call to :c:func:`video_register_device()` the index is just increased by 1. The first video device node you register always starts with index 0.h](hLThe ‘index’ attribute is the index of the device node: for each call to }(hjhhhNhNubh)}(h!:c:func:`video_register_device()`h]h)}(hjh]hvideo_register_device()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhKhjubhg the index is just increased by 1. The first video device node you register always starts with index 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hUsers can setup udev rules that utilize the index attribute to make fancy device names (e.g. '``mpegX``' for MPEG video capture device nodes).h](h`Users can setup udev rules that utilize the index attribute to make fancy device names (e.g. ‘}(hjhhhNhNubh)}(h ``mpegX``h]hmpegX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh)’ for MPEG video capture device nodes).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hLAfter the device was successfully registered, then you can use these fields:h]hLAfter the device was successfully registered, then you can use these fields:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj`)}(hhh](je)}(h\:c:type:`video_device`->vfl_type: the device type passed to :c:func:`video_register_device`.h]h)}(h\:c:type:`video_device`->vfl_type: the device type passed to :c:func:`video_register_device`.h](h)}(h:c:type:`video_device`h]h)}(hjLh]h video_device}(hjNhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjFubh&->vfl_type: the device type passed to }(hjFhhhNhNubh)}(h:c:func:`video_register_device`h]h)}(hjoh]hvideo_register_device()}(hjqhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhKhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjBubah}(h]h ]h"]h$]h&]uh1jdhj?hhhhhNubje)}(h@:c:type:`video_device`->minor: the assigned device minor number.h]h)}(hjh](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjubh*->minor: the assigned device minor number.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jdhj?hhhhhNubje)}(hO:c:type:`video_device`->num: the device node number (i.e. the X in ``videoX``).h]h)}(hO:c:type:`video_device`->num: the device node number (i.e. the X in ``videoX``).h](h)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjubh-->num: the device node number (i.e. the X in }(hjhhhNhNubh)}(h ``videoX``h]hvideoX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jdhj?hhhhhNubje)}(h8:c:type:`video_device`->index: the device index number. h]h)}(h7:c:type:`video_device`->index: the device index number.h](h)}(h:c:type:`video_device`h]h)}(hj%h]h video_device}(hj'hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjubh!->index: the device index number.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jdhj?hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j_hhhKhj hhubh)}(hXrIf the registration failed, then you need to call :c:func:`video_device_release` to free the allocated :c:type:`video_device` struct, or free your own struct if the :c:type:`video_device` was embedded in it. The ``vdev->release()`` callback will never be called if the registration failed, nor should you ever attempt to unregister the device if the registration failed.h](h2If the registration failed, then you need to call }(hjXhhhNhNubh)}(h:c:func:`video_device_release`h]h)}(hjbh]hvideo_device_release()}(hjdhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_device_releaseuh1hhhhKhjXubh to free the allocated }(hjXhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjXubh( struct, or free your own struct if the }(hjXhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhKhjXubh was embedded in it. The }(hjXhhhNhNubh)}(h``vdev->release()``h]hvdev->release()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXubh callback will never be called if the registration failed, nor should you ever attempt to unregister the device if the registration failed.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]video-device-registrationah ]h"]video device registrationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hvideo device debuggingh]hvideo device debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hThe 'dev_debug' attribute that is created for each video, vbi, radio or swradio device in ``/sys/class/video4linux//`` allows you to enable logging of file operations.h](h^The ‘dev_debug’ attribute that is created for each video, vbi, radio or swradio device in }(hjhhhNhNubh)}(h"``/sys/class/video4linux//``h]h/sys/class/video4linux//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh1 allows you to enable logging of file operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h2It is a bitmask and the following bits can be set:h]h2It is a bitmask and the following bits can be set:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubhtabular_col_spec)}(hhh]h}(h]h ]h"]h$]h&]spec |p{5ex}|L|uh1j(hhhM hjhhubjW )}(hhh]j\ )}(hhh](ja )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j` hj8ubja )}(hhh]h}(h]h ]h"]h$]h&]colwidthK@uh1j` hj8ubj )}(hhh]j )}(hhh](j )}(hhh]h)}(hMaskh]hMask}(hjXYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjUubah}(h]h ]h"]h$]h&]uh1j hjRubj )}(hhh]h)}(h Descriptionh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjlubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1j hjOubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(hhh](j )}(hhh](j )}(hhh]h)}(h0x01h]h0x01}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(haLog the ioctl name and error code. VIDIOC_(D)QBUF ioctls are only logged if bit 0x08 is also set.h]haLog the ioctl name and error code. VIDIOC_(D)QBUF ioctls are only logged if bit 0x08 is also set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]h)}(h0x02h]h0x02}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(hkLog the ioctl name arguments and error code. VIDIOC_(D)QBUF ioctls are only logged if bit 0x08 is also set.h]hkLog the ioctl name arguments and error code. VIDIOC_(D)QBUF ioctls are only logged if bit 0x08 is also set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]h)}(h0x04h]h0x04}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(hLog the file operations open, release, read, write, mmap and get_unmapped_area. The read and write operations are only logged if bit 0x08 is also set.h]hLog the file operations open, release, read, write, mmap and get_unmapped_area. The read and write operations are only logged if bit 0x08 is also set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]h)}(h0x08h]h0x08}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj:ubah}(h]h ]h"]h$]h&]uh1j hj7ubj )}(hhh]h)}(hSLog the read and write file operations and the VIDIOC_QBUF and VIDIOC_DQBUF ioctls.h]hSLog the read and write file operations and the VIDIOC_QBUF and VIDIOC_DQBUF ioctls.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjQubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]h)}(h0x10h]h0x10}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjqubah}(h]h ]h"]h$]h&]uh1j hjnubj )}(hhh]h)}(hLog the poll file operation.h]hLog the poll file operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]h)}(h0x20h]h0x20}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]h)}(h1Log error and messages in the control operations.h]h1Log error and messages in the control operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]colsKuh1j[ hj5ubah}(h]h ]h"]h$]h&]uh1jV hjhhhhhNubeh}(h]video-device-debuggingah ]h"]video device debuggingah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hVideo device cleanuph]hVideo device cleanup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hWhen the video device nodes have to be removed, either during the unload of the driver or because the USB device was disconnected, then you should unregister them with:h]hWhen the video device nodes have to be removed, either during the unload of the driver or because the USB device was disconnected, then you should unregister them with:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM!hjhhubj )}(hC:c:func:`video_unregister_device` (:c:type:`vdev `); h]h)}(hB:c:func:`video_unregister_device` (:c:type:`vdev `);h](h)}(h!:c:func:`video_unregister_device`h]h)}(hj h]hvideo_unregister_device()}(hj"hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_unregister_deviceuh1hhhhM%hjubh (}(hjhhhNhNubh)}(h:c:type:`vdev `h]h)}(hjCh]hvdev}(hjEhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhM%hjubh);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM%hjubah}(h]h ]h"]h$]h&]uh1j hhhM%hjhhubh)}(hYThis will remove the device nodes from sysfs (causing udev to remove them from ``/dev``).h](hOThis will remove the device nodes from sysfs (causing udev to remove them from }(hjphhhNhNubh)}(h``/dev``h]h/dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubh).}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM(hjhhubh)}(hXAfter :c:func:`video_unregister_device` returns no new opens can be done. However, in the case of USB devices some application might still have one of these device nodes open. So after the unregister all file operations (except release, of course) will return an error as well.h](hAfter }(hjhhhNhNubh)}(h!:c:func:`video_unregister_device`h]h)}(hjh]hvideo_unregister_device()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_unregister_deviceuh1hhhhM+hjubh returns no new opens can be done. However, in the case of USB devices some application might still have one of these device nodes open. So after the unregister all file operations (except release, of course) will return an error as well.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM+hjhhubh)}(hWhen the last user of the video device node exits, then the ``vdev->release()`` callback is called and you can do the final cleanup there.h](hrelease()``h]hvdev->release()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh; callback is called and you can do the final cleanup there.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM0hjhhubh)}(heDon't forget to cleanup the media entity associated with the video device if it has been initialized:h]hgDon’t forget to cleanup the media entity associated with the video device if it has been initialized:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hjhhubj )}(hG:c:func:`media_entity_cleanup ` (&vdev->entity); h]h)}(hF:c:func:`media_entity_cleanup ` (&vdev->entity);h](h)}(h5:c:func:`media_entity_cleanup `h]h)}(hjh]hmedia_entity_cleanup}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjmedia_entity_cleanupuh1hhhhM6hjubh (&vdev->entity);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM6hjubah}(h]h ]h"]h$]h&]uh1j hhhM6hjhhubh)}(h+This can be done from the release callback.h]h+This can be done from the release callback.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM9hjhhubeh}(h]video-device-cleanupah ]h"]video device cleanupah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hhelper functionsh]hhelper functions}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhM=ubh)}(h(There are a few useful helper functions:h]h(There are a few useful helper functions:}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM?hj<hhubj`)}(hhh]je)}(h-file and :c:type:`video_device` private data h]h)}(h,file and :c:type:`video_device` private datah](h file and }(hjbhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjlh]h video_device}(hjnhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhMAhjbubh private data}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMAhj^ubah}(h]h ]h"]h$]h&]uh1jdhj[hhhhhNubah}(h]h ]h"]h$]h&]jjuh1j_hhhMAhj<hhubh)}(hEYou can set/get driver private data in the video_device struct using:h]hEYou can set/get driver private data in the video_device struct using:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMChj<hhubj )}(h:c:func:`video_get_drvdata ` (:c:type:`vdev `); :c:func:`video_set_drvdata ` (:c:type:`vdev `); h](h)}(hP:c:func:`video_get_drvdata ` (:c:type:`vdev `);h](h)}(h/:c:func:`video_get_drvdata `h]h)}(hjh]hvideo_get_drvdata}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_get_drvdatauh1hhhhMEhjubh (}(hjhhhNhNubh)}(h:c:type:`vdev `h]h)}(hjh]hvdev}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhMEhjubh);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMEhjubh)}(hP:c:func:`video_set_drvdata ` (:c:type:`vdev `);h](h)}(h/:c:func:`video_set_drvdata `h]h)}(hjh]hvideo_set_drvdata}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_set_drvdatauh1hhhhMHhjubh (}(hjhhhNhNubh)}(h:c:type:`vdev `h]h)}(hj*h]hvdev}(hj,hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhMHhjubh);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMHhjubeh}(h]h ]h"]h$]h&]uh1j hhhMEhj<hhubh)}(hiNote that you can safely call :c:func:`video_set_drvdata` before calling :c:func:`video_register_device`.h](hNote that you can safely call }(hjWhhhNhNubh)}(h:c:func:`video_set_drvdata`h]h)}(hjah]hvideo_set_drvdata()}(hjchhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_set_drvdatauh1hhhhMKhjWubh before calling }(hjWhhhNhNubh)}(h:c:func:`video_register_device`h]h)}(hjh]hvideo_register_device()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhMKhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMKhj<hhubh)}(hAnd this function:h]hAnd this function:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhj<hhubj )}(h>:c:func:`video_devdata ` (struct file \*file); h]h)}(h=:c:func:`video_devdata ` (struct file \*file);h](h)}(h':c:func:`video_devdata `h]h)}(hjh]h video_devdata}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj video_devdatauh1hhhhMPhjubh (struct file *file);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMPhjubah}(h]h ]h"]h$]h&]uh1j hhhMPhj<hhubh)}(h6returns the video_device belonging to the file struct.h]h6returns the video_device belonging to the file struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMShj<hhubh)}(hgThe :c:func:`video_devdata` function combines :c:func:`video_get_drvdata` with :c:func:`video_devdata`:h](hThe }(hjhhhNhNubh)}(h:c:func:`video_devdata`h]h)}(hjh]hvideo_devdata()}(hj hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj video_devdatauh1hhhhMUhjubh function combines }(hjhhhNhNubh)}(h:c:func:`video_get_drvdata`h]h)}(hj+h]hvideo_get_drvdata()}(hj-hhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_get_drvdatauh1hhhhMUhjubh with }(hjhhhNhNubh)}(h:c:func:`video_devdata`h]h)}(hjNh]hvideo_devdata()}(hjPhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj video_devdatauh1hhhhMUhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMUhj<hhubj )}(h>:c:func:`video_drvdata ` (struct file \*file); h]h)}(h=:c:func:`video_drvdata ` (struct file \*file);h](h)}(h':c:func:`video_drvdata `h]h)}(hjh]h video_drvdata}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnj video_drvdatauh1hhhhMXhjyubh (struct file *file);}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMXhjuubah}(h]h ]h"]h$]h&]uh1j hhhMXhj<hhubh)}(hPYou can go from a :c:type:`video_device` struct to the v4l2_device struct using:h](hYou can go from a }(hjhhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhM[hjubh( struct to the v4l2_device struct using:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM[hj<hhubjX)}(h.struct v4l2_device *v4l2_dev = vdev->v4l2_dev;h]h.struct v4l2_device *v4l2_dev = vdev->v4l2_dev;}hjsbah}(h]h ]h"]h$]h&]hhjgjhhji}uh1jWhhhM]hj<hhubj`)}(hhh]je)}(hDevice node name h]h)}(hDevice node nameh]hDevice node name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMahjubah}(h]h ]h"]h$]h&]uh1jdhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1j_hhhMahj<hhubh)}(hCThe :c:type:`video_device` node kernel name can be retrieved using:h](hThe }(hj hhhNhNubh)}(h:c:type:`video_device`h]h)}(hjh]h video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhMchj ubh) node kernel name can be retrieved using:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMchj<hhubj )}(h[:c:func:`video_device_node_name ` (:c:type:`vdev `); h]h)}(hZ:c:func:`video_device_node_name ` (:c:type:`vdev `);h](h)}(h9:c:func:`video_device_node_name `h]h)}(hjHh]hvideo_device_node_name}(hjJhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjvideo_device_node_nameuh1hhhhMehjBubh (}(hjBhhhNhNubh)}(h:c:type:`vdev `h]h)}(hjkh]hvdev}(hjmhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnj video_deviceuh1hhhhMehjBubh);}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMehj>ubah}(h]h ]h"]h$]h&]uh1j hhhMehj<hhubh)}(hThe name is used as a hint by userspace tools such as udev. The function should be used where possible instead of accessing the video_device::num and video_device::minor fields.h]hThe name is used as a hint by userspace tools such as udev. The function should be used where possible instead of accessing the video_device::num and video_device::minor fields.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhhj<hhubeh}(h]helper-functionsah ]h"]helper functionsah$]h&]uh1hhhhhhhhM=ubh)}(hhh](h)}(h*video_device functions and data structuresh]h*video_device functions and data structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMmubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlevfl_devnode_type (C enum)c.vfl_devnode_typehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hvfl_devnode_typeh]hdesc_signature_line)}(henum vfl_devnode_typeh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hvfl_devnode_typeh]h desc_sig_name)}(hjh]hvfl_devnode_type}(hj hhhNhNubah}(h]h ]nah"]h$]h&]uh1j hjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(htype of V4L2 device nodeh]htype of V4L2 device node}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8hhubah}(h]h ]h"]h$]h&]uh1j6hjhhhjhKubeh}(h]h ](henumeh"]h$]h&]domainhobjtypejSdesctypejSnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Constants** ``VFL_TYPE_VIDEO`` for video input/output devices ``VFL_TYPE_VBI`` for vertical blank data (i.e. closed captions, teletext) ``VFL_TYPE_RADIO`` for radio tuners ``VFL_TYPE_SUBDEV`` for V4L2 subdevices ``VFL_TYPE_SDR`` for Software Defined Radio tuners ``VFL_TYPE_TOUCH`` for touch sensors ``VFL_TYPE_MAX`` number of VFL types, must always be last in the enumh](h)}(h **Constants**h]j)}(hjeh]h Constants}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj_ubhdefinition_list)}(hhh](hdefinition_list_item)}(h2``VFL_TYPE_VIDEO`` for video input/output devices h](hterm)}(h``VFL_TYPE_VIDEO``h]h)}(hjh]hVFL_TYPE_VIDEO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK hjubh definition)}(hhh]h)}(hfor video input/output devicesh]hfor video input/output devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hj}ubj)}(hJ``VFL_TYPE_VBI`` for vertical blank data (i.e. closed captions, teletext) h](j)}(h``VFL_TYPE_VBI``h]h)}(hjh]h VFL_TYPE_VBI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK#hjubj)}(hhh]h)}(h8for vertical blank data (i.e. closed captions, teletext)h]h8for vertical blank data (i.e. closed captions, teletext)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hj}ubj)}(h$``VFL_TYPE_RADIO`` for radio tuners h](j)}(h``VFL_TYPE_RADIO``h]h)}(hjh]hVFL_TYPE_RADIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK&hjubj)}(hhh]h)}(hfor radio tunersh]hfor radio tuners}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hj}ubj)}(h(``VFL_TYPE_SUBDEV`` for V4L2 subdevices h](j)}(h``VFL_TYPE_SUBDEV``h]h)}(hj7h]hVFL_TYPE_SUBDEV}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK)hj1ubj)}(hhh]h)}(hfor V4L2 subdevicesh]hfor V4L2 subdevices}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK)hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhK)hj}ubj)}(h3``VFL_TYPE_SDR`` for Software Defined Radio tuners h](j)}(h``VFL_TYPE_SDR``h]h)}(hjph]h VFL_TYPE_SDR}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK,hjjubj)}(hhh]h)}(h!for Software Defined Radio tunersh]h!for Software Defined Radio tuners}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhK,hj}ubj)}(h%``VFL_TYPE_TOUCH`` for touch sensors h](j)}(h``VFL_TYPE_TOUCH``h]h)}(hjh]hVFL_TYPE_TOUCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK/hjubj)}(hhh]h)}(hfor touch sensorsh]hfor touch sensors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK/hj}ubj)}(hE``VFL_TYPE_MAX`` number of VFL types, must always be last in the enumh](j)}(h``VFL_TYPE_MAX``h]h)}(hjh]h VFL_TYPE_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK1hjubj)}(hhh]h)}(h4number of VFL types, must always be last in the enumh]h4number of VFL types, must always be last in the enum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hj}ubeh}(h]h ]h"]h$]h&]uh1j{hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvfl_devnode_direction (C enum)c.vfl_devnode_directionhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvfl_devnode_directionh]j)}(henum vfl_devnode_directionh](j)}(hjh]henum}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK8ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjIhK8ubj)}(hvfl_devnode_directionh]j )}(hj6h]hvfl_devnode_direction}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubah}(h]h ](jjeh"]h$]h&]hhuh1jhj8hhhjIhK8ubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj4hhhjIhK8ubah}(h]j/ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjIhK8hj1hhubj7)}(hhh]h)}(h}Identifies if a :c:type:`struct video_device ` corresponds to a receiver, a transmitter or a mem-to-mem device.h](hIdentifies if a }(hj~hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)} identifierj6sbc.vfl_devnode_directionasbj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj~ubhA corresponds to a receiver, a transmitter or a mem-to-mem device.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK.hj{hhubah}(h]h ]h"]h$]h&]uh1j6hj1hhhjIhK8ubeh}(h]h ](henumeh"]h$]h&]jWhjXjjYjjZj[j\uh1jhhhjhNhNubj^)}(h**Constants** ``VFL_DIR_RX`` device is a receiver. ``VFL_DIR_TX`` device is a transmitter. ``VFL_DIR_M2M`` device is a memory to memory device.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK2hjubj|)}(hhh](j)}(h%``VFL_DIR_RX`` device is a receiver. h](j)}(h``VFL_DIR_RX``h]h)}(hjh]h VFL_DIR_RX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK5hjubj)}(hhh]h)}(hdevice is a receiver.h]hdevice is a receiver.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK5hjubj)}(h(``VFL_DIR_TX`` device is a transmitter. h](j)}(h``VFL_DIR_TX``h]h)}(hj+h]h VFL_DIR_TX}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK8hj%ubj)}(hhh]h)}(hdevice is a transmitter.h]hdevice is a transmitter.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK8hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hK8hjubj)}(h4``VFL_DIR_M2M`` device is a memory to memory device.h](j)}(h``VFL_DIR_M2M``h]h)}(hjdh]h VFL_DIR_M2M}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK:hj^ubj)}(hhh]h)}(h$device is a memory to memory device.h]h$device is a memory to memory device.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK;hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhK:hjubeh}(h]h ]h"]h$]h&]uh1j{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK>hjhhubh)}(hUIgnored if :c:type:`enum vfl_devnode_type ` is ``VFL_TYPE_SUBDEV``.h](h Ignored if }(hjhhhNhNubh)}(h2:c:type:`enum vfl_devnode_type `h]h)}(hjh]henum vfl_devnode_type}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]sbjvfl_devnode_typeuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK5hjubh is }(hjhhhNhNubh)}(h``VFL_TYPE_SUBDEV``h]hVFL_TYPE_SUBDEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK5hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_video_device_flags (C enum)c.v4l2_video_device_flagshNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_video_device_flagsh]j)}(henum v4l2_video_device_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK:ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hK:ubj)}(hv4l2_video_device_flagsh]j )}(hjh]hv4l2_video_device_flags}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj*hK:ubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjhhhj*hK:ubah}(h]jah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj*hK:hjhhubj7)}(hhh]h)}(h:Flags used by :c:type:`struct video_device `h](hFlags used by }(hj_hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjih]hstruct video_device}(hjkhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]j)}jjsbc.v4l2_video_device_flagsasbj video_deviceuh1hhjhKhj_ubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKDhj\hhubah}(h]h ]h"]h$]h&]uh1j6hjhhhj*hK:ubeh}(h]h ](henumeh"]h$]h&]jWhjXjjYjjZj[j\uh1jhhhjhNhNubj^)}(hX**Constants** ``V4L2_FL_REGISTERED`` indicates that a :c:type:`struct video_device ` is registered. Drivers can clear this flag if they want to block all future device access. It is cleared by video_unregister_device. ``V4L2_FL_USES_V4L2_FH`` indicates that file->private_data points to :c:type:`struct v4l2_fh `. This flag is set by the core when v4l2_fh_init() is called. All new drivers should use it. ``V4L2_FL_QUIRK_INVERTED_CROP`` some old M2M drivers use g/s_crop/cropcap incorrectly: crop and compose are swapped. If this flag is set, then the selection targets are swapped in the g/s_crop/cropcap functions in v4l2-ioctl.c. This allows those drivers to correctly implement the selection API, but the old crop API will still work as expected in order to preserve backwards compatibility. Never set this flag for new drivers. ``V4L2_FL_SUBDEV_RO_DEVNODE`` indicates that the video device node is registered in read-only mode. The flag only applies to device nodes registered for sub-devices, it is set by the core when the sub-devices device nodes are registered with v4l2_device_register_ro_subdev_nodes() and used by the sub-device ioctl handler to restrict access to some ioctl calls.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKHhjubj|)}(hhh](j)}(h``V4L2_FL_REGISTERED`` indicates that a :c:type:`struct video_device ` is registered. Drivers can clear this flag if they want to block all future device access. It is cleared by video_unregister_device. h](j)}(h``V4L2_FL_REGISTERED``h]h)}(hjh]hV4L2_FL_REGISTERED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKMhjubj)}(hhh]h)}(hindicates that a :c:type:`struct video_device ` is registered. Drivers can clear this flag if they want to block all future device access. It is cleared by video_unregister_device.h](hindicates that a }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKKhjubh is registered. Drivers can clear this flag if they want to block all future device access. It is cleared by video_unregister_device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKMhjubj)}(h``V4L2_FL_USES_V4L2_FH`` indicates that file->private_data points to :c:type:`struct v4l2_fh `. This flag is set by the core when v4l2_fh_init() is called. All new drivers should use it. h](j)}(h``V4L2_FL_USES_V4L2_FH``h]h)}(hj#h]hV4L2_FL_USES_V4L2_FH}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKRhjubj)}(hhh]h)}(hindicates that file->private_data points to :c:type:`struct v4l2_fh `. This flag is set by the core when v4l2_fh_init() is called. All new drivers should use it.h](h,indicates that file->private_data points to }(hj<hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjFh]hstruct v4l2_fh}(hjHhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_fhuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKPhj<ubh\. This flag is set by the core when v4l2_fh_init() is called. All new drivers should use it.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchKPhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKRhjubj)}(hX``V4L2_FL_QUIRK_INVERTED_CROP`` some old M2M drivers use g/s_crop/cropcap incorrectly: crop and compose are swapped. If this flag is set, then the selection targets are swapped in the g/s_crop/cropcap functions in v4l2-ioctl.c. This allows those drivers to correctly implement the selection API, but the old crop API will still work as expected in order to preserve backwards compatibility. Never set this flag for new drivers. h](j)}(h``V4L2_FL_QUIRK_INVERTED_CROP``h]h)}(hjh]hV4L2_FL_QUIRK_INVERTED_CROP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK[hjzubj)}(hhh]h)}(hXsome old M2M drivers use g/s_crop/cropcap incorrectly: crop and compose are swapped. If this flag is set, then the selection targets are swapped in the g/s_crop/cropcap functions in v4l2-ioctl.c. This allows those drivers to correctly implement the selection API, but the old crop API will still work as expected in order to preserve backwards compatibility. Never set this flag for new drivers.h]hXsome old M2M drivers use g/s_crop/cropcap incorrectly: crop and compose are swapped. If this flag is set, then the selection targets are swapped in the g/s_crop/cropcap functions in v4l2-ioctl.c. This allows those drivers to correctly implement the selection API, but the old crop API will still work as expected in order to preserve backwards compatibility. Never set this flag for new drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKUhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhK[hjubj)}(hXi``V4L2_FL_SUBDEV_RO_DEVNODE`` indicates that the video device node is registered in read-only mode. The flag only applies to device nodes registered for sub-devices, it is set by the core when the sub-devices device nodes are registered with v4l2_device_register_ro_subdev_nodes() and used by the sub-device ioctl handler to restrict access to some ioctl calls.h](j)}(h``V4L2_FL_SUBDEV_RO_DEVNODE``h]h)}(hjh]hV4L2_FL_SUBDEV_RO_DEVNODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKahjubj)}(hhh]h)}(hXKindicates that the video device node is registered in read-only mode. The flag only applies to device nodes registered for sub-devices, it is set by the core when the sub-devices device nodes are registered with v4l2_device_register_ro_subdev_nodes() and used by the sub-device ioctl handler to restrict access to some ioctl calls.h]hXKindicates that the video device node is registered in read-only mode. The flag only applies to device nodes registered for sub-devices, it is set by the core when the sub-devices device nodes are registered with v4l2_device_register_ro_subdev_nodes() and used by the sub-device ioctl handler to restrict access to some ioctl calls.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKahjubeh}(h]h ]h"]h$]h&]uh1j{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_state (C struct)c.v4l2_prio_statehNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_prio_stateh]j)}(hstruct v4l2_prio_stateh](j)}(hstructh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhubj)}(h h]h }(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj" hKhubj)}(hv4l2_prio_stateh]j )}(hj h]hv4l2_prio_state}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1 ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj" hKhubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj hhhj" hKhubah}(h]j ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj" hKhhj hhubj7)}(hhh]h)}(hstores the priority statesh]hstores the priority states}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKghjT hhubah}(h]h ]h"]h$]h&]uh1j6hj hhhj" hKhubeh}(h]h ](hstructeh"]h$]h&]jWhjXjo jYjo jZj[j\uh1jhhhjhNhNubj^)}(h**Definition**:: struct v4l2_prio_state { atomic_t prios[4]; }; **Members** ``prios`` array with elements to store the array prioritiesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh:}(hjw hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKkhjs ubjX)}(h2struct v4l2_prio_state { atomic_t prios[4]; };h]h2struct v4l2_prio_state { atomic_t prios[4]; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jWhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKmhjs ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKqhjs ubj|)}(hhh]j)}(h;``prios`` array with elements to store the array prioritiesh](j)}(h ``prios``h]h)}(hj h]hprios}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKihj ubj)}(hhh]h)}(h1array with elements to store the array prioritiesh]h1array with elements to store the array priorities}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKjhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKihj ubah}(h]h ]h"]h$]h&]uh1j{hjs ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubh)}(h**Description**h]j)}(hj!h]h Description}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKmhjhhubhnote)}(hiThe size of **prios** array matches the number of priority types defined by enum :c:type:`v4l2_priority`.h]h)}(hiThe size of **prios** array matches the number of priority types defined by enum :c:type:`v4l2_priority`.h](h The size of }(hj#!hhhNhNubj)}(h **prios**h]hprios}(hj+!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#!ubh< array matches the number of priority types defined by enum }(hj#!hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj?!h]h v4l2_priority}(hjA!hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj=!ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKmhj#!ubh.}(hj#!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\!hKmhj!ubah}(h]h ]h"]h$]h&]uh1j!hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_init (C function)c.v4l2_prio_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void v4l2_prio_init (struct v4l2_prio_state *global)h]j)}(h3void v4l2_prio_init(struct v4l2_prio_state *global)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j!hj!hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKyubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hKyubj)}(hv4l2_prio_inith]j )}(hv4l2_prio_inith]hv4l2_prio_init}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj!hhhj!hKyubhdesc_parameterlist)}(h (struct v4l2_prio_state *global)h]hdesc_parameter)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj!modnameN classnameNjj)}j]j)}jj!sbc.v4l2_prio_initasbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubhdesc_sig_punctuation)}(h*h]h*}(hj"hhhNhNubah}(h]h ]pah"]h$]h&]uh1j"hj!ubj )}(hglobalh]hglobal}(hj'"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj!ubah}(h]h ]h"]h$]h&]hhuh1j!hj!hhhj!hKyubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj~!hhhj!hKyubah}(h]jy!ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj!hKyhj{!hhubj7)}(hhh]h)}(h$initializes a struct v4l2_prio_stateh]h$initializes a struct v4l2_prio_state}(hjQ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKuhjN"hhubah}(h]h ]h"]h$]h&]uh1j6hj{!hhhj!hKyubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXji"jYji"jZj[j\uh1jhhhjhNhNubj^)}(hr**Parameters** ``struct v4l2_prio_state *global`` pointer to :c:type:`struct v4l2_prio_state `h](h)}(h**Parameters**h]j)}(hjs"h]h Parameters}(hju"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq"ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKyhjm"ubj|)}(hhh]j)}(h```struct v4l2_prio_state *global`` pointer to :c:type:`struct v4l2_prio_state `h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hj"h]hstruct v4l2_prio_state *global}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK{hj"ubj)}(hhh]h)}(h=pointer to :c:type:`struct v4l2_prio_state `h](h pointer to }(hj"hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj"h]hstruct v4l2_prio_state}(hj"hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKwhj"ubeh}(h]h ]h"]h$]h&]uh1hhj"hKwhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hK{hj"ubah}(h]h ]h"]h$]h&]uh1j{hjm"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_change (C function)c.v4l2_prio_changehNtauh1jhjhhhNhNubj)}(hhh](j)}(hhint v4l2_prio_change (struct v4l2_prio_state *global, enum v4l2_priority *local, enum v4l2_priority new)h]j)}(hgint v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, enum v4l2_priority new)h](j!)}(hinth]hint}(hj #hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj#hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hKubj)}(hv4l2_prio_changeh]j )}(hv4l2_prio_changeh]hv4l2_prio_change}(hj,#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(#ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj#hhhj#hKubj!)}(hS(struct v4l2_prio_state *global, enum v4l2_priority *local, enum v4l2_priority new)h](j!)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hjH#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#ubj)}(h h]h }(hjU#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hjf#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjc#ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjh#modnameN classnameNjj)}j]j)}jj.#sbc.v4l2_prio_changeasbuh1hhjD#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#ubj")}(hj"h]h*}(hj#hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjD#ubj )}(hglobalh]hglobal}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjD#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj@#ubj!)}(henum v4l2_priority *localh](j)}(hjh]henum}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj#modnameN classnameNjj)}j]j#c.v4l2_prio_changeasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj")}(hj"h]h*}(hj$hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj#ubj )}(hlocalh]hlocal}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj@#ubj!)}(henum v4l2_priority newh](j)}(hjh]henum}(hj*$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubj)}(h h]h }(hj7$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hjH$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjE$ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjJ$modnameN classnameNjj)}j]j#c.v4l2_prio_changeasbuh1hhj&$ubj)}(h h]h }(hjf$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$ubj )}(hnewh]hnew}(hjt$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj@#ubeh}(h]h ]h"]h$]h&]hhuh1j!hj#hhhj#hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj#hhhj#hKubah}(h]j"ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj#hKhj#hhubj7)}(hhh]h)}(h&changes the v4l2 file handler priorityh]h&changes the v4l2 file handler priority}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK|hj$hhubah}(h]h ]h"]h$]h&]uh1j6hj#hhhj#hKubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj$jYj$jZj[j\uh1jhhhjhNhNubj^)}(hX**Parameters** ``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. ``enum v4l2_priority *local`` pointer to the desired priority, as defined by enum :c:type:`v4l2_priority` ``enum v4l2_priority new`` Priority type requested, as defined by enum :c:type:`v4l2_priority`. **Description** .. note:: This function should be used only by the V4L2 core.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj$ubj|)}(hhh](j)}(hy``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hj$h]hstruct v4l2_prio_state *global}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhK~hj$ubj)}(hhh]h)}(hUpointer to the :c:type:`struct v4l2_prio_state ` of the device node.h](hpointer to the }(hj$hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj%h]hstruct v4l2_prio_state}(hj%hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhj$hK~hj$ubh of the device node.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hK~hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hK~hj$ubj)}(hj``enum v4l2_priority *local`` pointer to the desired priority, as defined by enum :c:type:`v4l2_priority` h](j)}(h``enum v4l2_priority *local``h]h)}(hj;%h]henum v4l2_priority *local}(hj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9%ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj5%ubj)}(hhh]h)}(hKpointer to the desired priority, as defined by enum :c:type:`v4l2_priority`h](h4pointer to the desired priority, as defined by enum }(hjT%hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj^%h]h v4l2_priority}(hj`%hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj\%ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhjP%hKhjT%ubeh}(h]h ]h"]h$]h&]uh1hhjP%hKhjQ%ubah}(h]h ]h"]h$]h&]uh1jhj5%ubeh}(h]h ]h"]h$]h&]uh1jhjP%hKhj$ubj)}(h```enum v4l2_priority new`` Priority type requested, as defined by enum :c:type:`v4l2_priority`. h](j)}(h``enum v4l2_priority new``h]h)}(hj%h]henum v4l2_priority new}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj%ubj)}(hhh]h)}(hDPriority type requested, as defined by enum :c:type:`v4l2_priority`.h](h,Priority type requested, as defined by enum }(hj%hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj%h]h v4l2_priority}(hj%hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhj%hKhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhj$ubeh}(h]h ]h"]h$]h&]uh1j{hj$ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj$ubj!)}(h3This function should be used only by the V4L2 core.h]h)}(hj &h]h3This function should be used only by the V4L2 core.}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj&ubah}(h]h ]h"]h$]h&]uh1j!hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_open (C function)c.v4l2_prio_openhNtauh1jhjhhhNhNubj)}(hhh](j)}(hOvoid v4l2_prio_open (struct v4l2_prio_state *global, enum v4l2_priority *local)h]j)}(hNvoid v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)h](j!)}(hvoidh]hvoid}(hj?&hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj;&hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hjN&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;&hhhjM&hKubj)}(hv4l2_prio_openh]j )}(hv4l2_prio_openh]hv4l2_prio_open}(hj`&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\&ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj;&hhhjM&hKubj!)}(h;(struct v4l2_prio_state *global, enum v4l2_priority *local)h](j!)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hj|&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx&ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj&modnameN classnameNjj)}j]j)}jjb&sbc.v4l2_prio_openasbuh1hhjx&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx&ubj")}(hj"h]h*}(hj&hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjx&ubj )}(hglobalh]hglobal}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjt&ubj!)}(henum v4l2_priority *localh](j)}(hjh]henum}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hj 'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 'ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj'modnameN classnameNjj)}j]j&c.v4l2_prio_openasbuh1hhj&ubj)}(h h]h }(hj*'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj")}(hj"h]h*}(hj8'hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj&ubj )}(hlocalh]hlocal}(hjE'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjt&ubeh}(h]h ]h"]h$]h&]hhuh1j!hj;&hhhjM&hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj7&hhhjM&hKubah}(h]j2&ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjM&hKhj4&hhubj7)}(hhh]h)}(h5Implements the priority logic for a file handler openh]h5Implements the priority logic for a file handler open}(hjo'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjl'hhubah}(h]h ]h"]h$]h&]uh1j6hj4&hhhjM&hKubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj'jYj'jZj[j\uh1jhhhjhNhNubj^)}(hXL**Parameters** ``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. ``enum v4l2_priority *local`` pointer to the desired priority, as defined by enum :c:type:`v4l2_priority` **Description** .. note:: This function should be used only by the V4L2 core.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj'ubj|)}(hhh](j)}(hy``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hj'h]hstruct v4l2_prio_state *global}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj'ubj)}(hhh]h)}(hUpointer to the :c:type:`struct v4l2_prio_state ` of the device node.h](hpointer to the }(hj'hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj'h]hstruct v4l2_prio_state}(hj'hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhj'hKhj'ubh of the device node.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj'ubj)}(hj``enum v4l2_priority *local`` pointer to the desired priority, as defined by enum :c:type:`v4l2_priority` h](j)}(h``enum v4l2_priority *local``h]h)}(hj (h]henum v4l2_priority *local}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj (ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj(ubj)}(hhh]h)}(hKpointer to the desired priority, as defined by enum :c:type:`v4l2_priority`h](h4pointer to the desired priority, as defined by enum }(hj%(hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj/(h]h v4l2_priority}(hj1(hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj-(ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhj!(hKhj%(ubeh}(h]h ]h"]h$]h&]uh1hhj!(hKhj"(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj!(hKhj'ubeh}(h]h ]h"]h$]h&]uh1j{hj'ubh)}(h**Description**h]j)}(hjf(h]h Description}(hjh(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd(ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj'ubj!)}(h3This function should be used only by the V4L2 core.h]h)}(hj~(h]h3This function should be used only by the V4L2 core.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj|(ubah}(h]h ]h"]h$]h&]uh1j!hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_close (C function)c.v4l2_prio_closehNtauh1jhjhhhNhNubj)}(hhh](j)}(hOvoid v4l2_prio_close (struct v4l2_prio_state *global, enum v4l2_priority local)h]j)}(hNvoid v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local)h](j!)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj(hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hKubj)}(hv4l2_prio_closeh]j )}(hv4l2_prio_closeh]hv4l2_prio_close}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj(hhhj(hKubj!)}(h:(struct v4l2_prio_state *global, enum v4l2_priority local)h](j!)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj )ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj)modnameN classnameNjj)}j]j)}jj(sbc.v4l2_prio_closeasbuh1hhj(ubj)}(h h]h }(hj/)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj")}(hj"h]h*}(hj=)hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj(ubj )}(hglobalh]hglobal}(hjJ)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj(ubj!)}(henum v4l2_priority localh](j)}(hjh]henum}(hjc)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_)ubj)}(h h]h }(hjp)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_)ubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~)ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj)modnameN classnameNjj)}j]j+)c.v4l2_prio_closeasbuh1hhj_)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_)ubj )}(hlocalh]hlocal}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj(ubeh}(h]h ]h"]h$]h&]hhuh1j!hj(hhhj(hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj(hhhj(hKubah}(h]j(ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj(hKhj(hhubj7)}(hhh]h)}(h6Implements the priority logic for a file handler closeh]h6Implements the priority logic for a file handler close}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj)hhubah}(h]h ]h"]h$]h&]uh1j6hj(hhhj(hKubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj)jYj)jZj[j\uh1jhhhjhNhNubj^)}(hXC**Parameters** ``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. ``enum v4l2_priority local`` priority to be released, as defined by enum :c:type:`v4l2_priority` **Description** .. note:: This function should be used only by the V4L2 core.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj)ubj|)}(hhh](j)}(hy``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hj*h]hstruct v4l2_prio_state *global}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj*ubj)}(hhh]h)}(hUpointer to the :c:type:`struct v4l2_prio_state ` of the device node.h](hpointer to the }(hj1*hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj;*h]hstruct v4l2_prio_state}(hj=*hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj9*ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhj-*hKhj1*ubh of the device node.}(hj1*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-*hKhj.*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj-*hKhj*ubj)}(ha``enum v4l2_priority local`` priority to be released, as defined by enum :c:type:`v4l2_priority` h](j)}(h``enum v4l2_priority local``h]h)}(hjt*h]henum v4l2_priority local}(hjv*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr*ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjn*ubj)}(hhh]h)}(hCpriority to be released, as defined by enum :c:type:`v4l2_priority`h](h,priority to be released, as defined by enum }(hj*hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj*h]h v4l2_priority}(hj*hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhj*hKhj*ubeh}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjn*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj*ubeh}(h]h ]h"]h$]h&]uh1j{hj)ubh)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj)ubj!)}(h3This function should be used only by the V4L2 core.h]h)}(hj*h]h3This function should be used only by the V4L2 core.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj*ubah}(h]h ]h"]h$]h&]uh1j!hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_max (C function)c.v4l2_prio_maxhNtauh1jhjhhhNhNubj)}(hhh](j)}(hAenum v4l2_priority v4l2_prio_max (struct v4l2_prio_state *global)h]j)}(h@enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)h](j)}(hjh]henum}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj*+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj)+hKubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hj;+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8+ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj=+modnameN classnameNjj)}j]j)}j v4l2_prio_maxsbc.v4l2_prio_maxasbuh1hhj+hhhj)+hKubj)}(h h]h }(hj\+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj)+hKubj)}(h v4l2_prio_maxh]j )}(hjY+h]h v4l2_prio_max}(hjn+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj+ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj+hhhj)+hKubj!)}(h (struct v4l2_prio_state *global)h]j!)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj+modnameN classnameNjj)}j]jW+c.v4l2_prio_maxasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj")}(hj"h]h*}(hj+hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj+ubj )}(hglobalh]hglobal}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj+ubah}(h]h ]h"]h$]h&]hhuh1j!hj+hhhj)+hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj+hhhj)+hKubah}(h]j+ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj)+hKhj+hhubj7)}(hhh]h)}(h?Return the maximum priority, as stored at the **global** array.h](h.Return the maximum priority, as stored at the }(hj ,hhhNhNubj)}(h **global**h]hglobal}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ,ubh array.}(hj ,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj,hhubah}(h]h ]h"]h$]h&]uh1j6hj+hhhj)+hKubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj4,jYj4,jZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. **Description** .. note:: This function should be used only by the V4L2 core.h](h)}(h**Parameters**h]j)}(hj>,h]h Parameters}(hj@,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8,ubj|)}(hhh]j)}(hy``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hj],h]hstruct v4l2_prio_state *global}(hj_,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[,ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjW,ubj)}(hhh]h)}(hUpointer to the :c:type:`struct v4l2_prio_state ` of the device node.h](hpointer to the }(hjv,hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj,h]hstruct v4l2_prio_state}(hj,hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj~,ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhjr,hKhjv,ubh of the device node.}(hjv,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjr,hKhjs,ubah}(h]h ]h"]h$]h&]uh1jhjW,ubeh}(h]h ]h"]h$]h&]uh1jhjr,hKhjT,ubah}(h]h ]h"]h$]h&]uh1j{hj8,ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8,ubj!)}(h3This function should be used only by the V4L2 core.h]h)}(hj,h]h3This function should be used only by the V4L2 core.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj,ubah}(h]h ]h"]h$]h&]uh1j!hj8,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_prio_check (C function)c.v4l2_prio_checkhNtauh1jhjhhhNhNubj)}(hhh](j)}(hNint v4l2_prio_check (struct v4l2_prio_state *global, enum v4l2_priority local)h]j)}(hMint v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local)h](j!)}(hinth]hint}(hj -hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj-hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hKubj)}(hv4l2_prio_checkh]j )}(hv4l2_prio_checkh]hv4l2_prio_check}(hj*-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&-ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj-hhhj-hKubj!)}(h:(struct v4l2_prio_state *global, enum v4l2_priority local)h](j!)}(hstruct v4l2_prio_state *globalh](j)}(hj h]hstruct}(hjF-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB-ubj)}(h h]h }(hjS-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB-ubh)}(hhh]j )}(hv4l2_prio_stateh]hv4l2_prio_state}(hjd-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hja-ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjf-modnameN classnameNjj)}j]j)}jj,-sbc.v4l2_prio_checkasbuh1hhjB-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB-ubj")}(hj"h]h*}(hj-hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjB-ubj )}(hglobalh]hglobal}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj>-ubj!)}(henum v4l2_priority localh](j)}(hjh]henum}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j )}(h v4l2_priorityh]h v4l2_priority}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj-modnameN classnameNjj)}j]j-c.v4l2_prio_checkasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj )}(hlocalh]hlocal}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj>-ubeh}(h]h ]h"]h$]h&]hhuh1j!hj-hhhj-hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj-hhhj-hKubah}(h]j,ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj-hKhj,hhubj7)}(hhh]h)}(h6Implements the priority logic for a file handler closeh]h6Implements the priority logic for a file handler close}(hj,.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj).hhubah}(h]h ]h"]h$]h&]uh1j6hj,hhhj-hKubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjD.jYjD.jZj[j\uh1jhhhjhNhNubj^)}(hXB**Parameters** ``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. ``enum v4l2_priority local`` desired priority, as defined by enum :c:type:`v4l2_priority` local **Description** .. note:: This function should be used only by the V4L2 core.h](h)}(h**Parameters**h]j)}(hjN.h]h Parameters}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL.ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjH.ubj|)}(hhh](j)}(hy``struct v4l2_prio_state *global`` pointer to the :c:type:`struct v4l2_prio_state ` of the device node. h](j)}(h"``struct v4l2_prio_state *global``h]h)}(hjm.h]hstruct v4l2_prio_state *global}(hjo.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk.ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjg.ubj)}(hhh]h)}(hUpointer to the :c:type:`struct v4l2_prio_state ` of the device node.h](hpointer to the }(hj.hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj.h]hstruct v4l2_prio_state}(hj.hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhj.hKhj.ubh of the device node.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhjg.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhjd.ubj)}(h```enum v4l2_priority local`` desired priority, as defined by enum :c:type:`v4l2_priority` local h](j)}(h``enum v4l2_priority local``h]h)}(hj.h]henum v4l2_priority local}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj.ubj)}(hhh]h)}(hBdesired priority, as defined by enum :c:type:`v4l2_priority` localh](h%desired priority, as defined by enum }(hj.hhhNhNubh)}(h:c:type:`v4l2_priority`h]h)}(hj.h]h v4l2_priority}(hj.hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_priorityuh1hhj.hKhj.ubh local}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhjd.ubeh}(h]h ]h"]h$]h&]uh1j{hjH.ubh)}(h**Description**h]j)}(hj'/h]h Description}(hj)/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%/ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjH.ubj!)}(h3This function should be used only by the V4L2 core.h]h)}(hj?/h]h3This function should be used only by the V4L2 core.}(hjA/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj=/ubah}(h]h ]h"]h$]h&]uh1j!hjH.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_file_operations (C struct)c.v4l2_file_operationshNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_file_operationsh]j)}(hstruct v4l2_file_operationsh](j)}(hj h]hstruct}(hju/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq/hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq/hhhj/hKubj)}(hv4l2_file_operationsh]j )}(hjo/h]hv4l2_file_operations}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjq/hhhj/hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjm/hhhj/hKubah}(h]jh/ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj/hKhjj/hhubj7)}(hhh]h)}(h#fs operations used by a V4L2 deviceh]h#fs operations used by a V4L2 device}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj/hhubah}(h]h ]h"]h$]h&]uh1j6hjj/hhhj/hKubeh}(h]h ](hstructeh"]h$]h&]jWhjXj/jYj/jZj[j\uh1jhhhjhNhNubj^)}(hX**Definition**:: struct v4l2_file_operations { struct module *owner; ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); __poll_t (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); #ifdef CONFIG_COMPAT; long (*compat_ioctl32) (struct file *, unsigned int, unsigned long); #endif; unsigned long (*get_unmapped_area) (struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct file *); int (*release) (struct file *); }; **Members** ``owner`` pointer to struct module ``read`` operations needed to implement the read() syscall ``write`` operations needed to implement the write() syscall ``poll`` operations needed to implement the poll() syscall ``unlocked_ioctl`` operations needed to implement the ioctl() syscall ``compat_ioctl32`` operations needed to implement the ioctl() syscall for the special case where the Kernel uses 64 bits instructions, but the userspace uses 32 bits. ``get_unmapped_area`` called by the mmap() syscall, used when %!CONFIG_MMU ``mmap`` operations needed to implement the mmap() syscall ``open`` operations needed to implement the open() syscall ``release`` operations needed to implement the release() syscallh](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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj/ubjX)}(hXstruct v4l2_file_operations { struct module *owner; ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); __poll_t (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); #ifdef CONFIG_COMPAT; long (*compat_ioctl32) (struct file *, unsigned int, unsigned long); #endif; unsigned long (*get_unmapped_area) (struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct file *); int (*release) (struct file *); };h]hXstruct v4l2_file_operations { struct module *owner; ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); __poll_t (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); #ifdef CONFIG_COMPAT; long (*compat_ioctl32) (struct file *, unsigned int, unsigned long); #endif; unsigned long (*get_unmapped_area) (struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct file *); int (*release) (struct file *); };}hj/sbah}(h]h ]h"]h$]h&]hhuh1jWhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj/ubh)}(h **Members**h]j)}(hj0h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj/ubj|)}(hhh](j)}(h#``owner`` pointer to struct module h](j)}(h ``owner``h]h)}(hj$0h]howner}(hj&0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"0ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj0ubj)}(hhh]h)}(hpointer to struct moduleh]hpointer to struct module}(hj=0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj90hKhj:0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj90hKhj0ubj)}(h;``read`` operations needed to implement the read() syscall h](j)}(h``read``h]h)}(hj]0h]hread}(hj_0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[0ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjW0ubj)}(hhh]h)}(h1operations needed to implement the read() syscallh]h1operations needed to implement the read() syscall}(hjv0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr0hKhjs0ubah}(h]h ]h"]h$]h&]uh1jhjW0ubeh}(h]h ]h"]h$]h&]uh1jhjr0hKhj0ubj)}(h=``write`` operations needed to implement the write() syscall h](j)}(h ``write``h]h)}(hj0h]hwrite}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj0ubj)}(hhh]h)}(h2operations needed to implement the write() syscallh]h2operations needed to implement the write() syscall}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj0ubj)}(h;``poll`` operations needed to implement the poll() syscall h](j)}(h``poll``h]h)}(hj0h]hpoll}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj0ubj)}(hhh]h)}(h1operations needed to implement the poll() syscallh]h1operations needed to implement the poll() syscall}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj0ubj)}(hF``unlocked_ioctl`` operations needed to implement the ioctl() syscall h](j)}(h``unlocked_ioctl``h]h)}(hj1h]hunlocked_ioctl}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj1ubj)}(hhh]h)}(h2operations needed to implement the ioctl() syscallh]h2operations needed to implement the ioctl() syscall}(hj!1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhj0ubj)}(h``compat_ioctl32`` operations needed to implement the ioctl() syscall for the special case where the Kernel uses 64 bits instructions, but the userspace uses 32 bits. h](j)}(h``compat_ioctl32``h]h)}(hjA1h]hcompat_ioctl32}(hjC1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?1ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj;1ubj)}(hhh]h)}(hoperations needed to implement the ioctl() syscall for the special case where the Kernel uses 64 bits instructions, but the userspace uses 32 bits.h]hoperations needed to implement the ioctl() syscall for the special case where the Kernel uses 64 bits instructions, but the userspace uses 32 bits.}(hjZ1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjW1ubah}(h]h ]h"]h$]h&]uh1jhj;1ubeh}(h]h ]h"]h$]h&]uh1jhjV1hKhj0ubj)}(hK``get_unmapped_area`` called by the mmap() syscall, used when %!CONFIG_MMU h](j)}(h``get_unmapped_area``h]h)}(hj{1h]hget_unmapped_area}(hj}1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy1ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhju1ubj)}(hhh]h)}(h4called by the mmap() syscall, used when %!CONFIG_MMUh]h4called by the mmap() syscall, used when %!CONFIG_MMU}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhju1ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhj0ubj)}(h;``mmap`` operations needed to implement the mmap() syscall h](j)}(h``mmap``h]h)}(hj1h]hmmap}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj1ubj)}(hhh]h)}(h1operations needed to implement the mmap() syscallh]h1operations needed to implement the mmap() syscall}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhj0ubj)}(h;``open`` operations needed to implement the open() syscall h](j)}(h``open``h]h)}(hj1h]hopen}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj1ubj)}(hhh]h)}(h1operations needed to implement the open() syscallh]h1operations needed to implement the open() syscall}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj0ubj)}(h@``release`` operations needed to implement the release() syscallh](j)}(h ``release``h]h)}(hj&2h]hrelease}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$2ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj 2ubj)}(hhh]h)}(h4operations needed to implement the release() syscallh]h4operations needed to implement the release() syscall}(hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj<2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubeh}(h]h ]h"]h$]h&]uh1jhj;2hKhj0ubeh}(h]h ]h"]h$]h&]uh1j{hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubh)}(h**Description**h]j)}(hji2h]h Description}(hjk2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg2ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjhhubj!)}(hThose operations are used to implemente the fs struct file_operations at the V4L2 drivers. The V4L2 core overrides the fs ops with some extra logic needed by the subsystem.h]h)}(hThose operations are used to implemente the fs struct file_operations at the V4L2 drivers. The V4L2 core overrides the fs ops with some extra logic needed by the subsystem.h]hThose operations are used to implemente the fs struct file_operations at the V4L2 drivers. The V4L2 core overrides the fs ops with some extra logic needed by the subsystem.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj2ubah}(h]h ]h"]h$]h&]uh1j!hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_device (C struct)c.video_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h video_deviceh]j)}(hstruct video_deviceh](j)}(hj h]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj2hKubj)}(h video_deviceh]j )}(hj2h]h video_device}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj2hhhj2hKubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj2hhhj2hKubah}(h]j2ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj2hKhj2hhubj7)}(hhh]h)}(h:Structure used to create and manage the V4L2 device nodes.h]h:Structure used to create and manage the V4L2 device nodes.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj2hhubah}(h]h ]h"]h$]h&]uh1j6hj2hhhj2hKubeh}(h]h ](hstructeh"]h$]h&]jWhjXj 3jYj 3jZj[j\uh1jhhhjhNhNubj^)}(hX **Definition**:: struct video_device { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; struct media_intf_devnode *intf_devnode; struct media_pipeline pipe; #endif; const struct v4l2_file_operations *fops; u32 device_caps; struct device dev; struct cdev *cdev; struct v4l2_device *v4l2_dev; struct device *dev_parent; struct v4l2_ctrl_handler *ctrl_handler; struct vb2_queue *queue; struct v4l2_prio_state *prio; char name[64]; enum vfl_devnode_type vfl_type; enum vfl_devnode_direction vfl_dir; int minor; u16 num; unsigned long flags; int index; spinlock_t fh_lock; struct list_head fh_list; int dev_debug; v4l2_std_id tvnorms; void (*release)(struct video_device *vdev); const struct v4l2_ioctl_ops *ioctl_ops; unsigned long valid_ioctls[BITS_TO_LONGS(BASE_VIDIOC_PRIVATE)]; struct mutex *lock; }; **Members** ``entity`` :c:type:`struct media_entity ` ``intf_devnode`` pointer to :c:type:`struct media_intf_devnode ` ``pipe`` :c:type:`struct media_pipeline ` ``fops`` pointer to :c:type:`struct v4l2_file_operations ` for the video device ``device_caps`` device capabilities as used in v4l2_capabilities ``dev`` :c:type:`struct device ` for the video device ``cdev`` character device ``v4l2_dev`` pointer to :c:type:`struct v4l2_device ` parent ``dev_parent`` pointer to :c:type:`struct device ` parent ``ctrl_handler`` Control handler associated with this device node. May be NULL. ``queue`` :c:type:`struct vb2_queue ` associated with this device node. May be NULL. ``prio`` pointer to :c:type:`struct v4l2_prio_state ` with device's Priority state. If NULL, then v4l2_dev->prio will be used. ``name`` video device name ``vfl_type`` V4L device type, as defined by :c:type:`enum vfl_devnode_type ` ``vfl_dir`` V4L receiver, transmitter or m2m ``minor`` device node 'minor'. It is set to -1 if the registration failed ``num`` number of the video device node ``flags`` video device flags. Use bitops to set/clear/test flags. Contains a set of :c:type:`enum v4l2_video_device_flags `. ``index`` attribute to differentiate multiple indices on one physical device ``fh_lock`` Lock for all v4l2_fhs ``fh_list`` List of :c:type:`struct v4l2_fh ` ``dev_debug`` Internal device debug flags, not for use by drivers ``tvnorms`` Supported tv norms ``release`` video device release() callback ``ioctl_ops`` pointer to :c:type:`struct v4l2_ioctl_ops ` with ioctl callbacks ``valid_ioctls`` bitmap with the valid ioctls for this device ``lock`` pointer to :c:type:`struct mutex ` serialization lockh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj3ubjX)}(hXstruct video_device { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; struct media_intf_devnode *intf_devnode; struct media_pipeline pipe; #endif; const struct v4l2_file_operations *fops; u32 device_caps; struct device dev; struct cdev *cdev; struct v4l2_device *v4l2_dev; struct device *dev_parent; struct v4l2_ctrl_handler *ctrl_handler; struct vb2_queue *queue; struct v4l2_prio_state *prio; char name[64]; enum vfl_devnode_type vfl_type; enum vfl_devnode_direction vfl_dir; int minor; u16 num; unsigned long flags; int index; spinlock_t fh_lock; struct list_head fh_list; int dev_debug; v4l2_std_id tvnorms; void (*release)(struct video_device *vdev); const struct v4l2_ioctl_ops *ioctl_ops; unsigned long valid_ioctls[BITS_TO_LONGS(BASE_VIDIOC_PRIVATE)]; struct mutex *lock; };h]hXstruct video_device { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; struct media_intf_devnode *intf_devnode; struct media_pipeline pipe; #endif; const struct v4l2_file_operations *fops; u32 device_caps; struct device dev; struct cdev *cdev; struct v4l2_device *v4l2_dev; struct device *dev_parent; struct v4l2_ctrl_handler *ctrl_handler; struct vb2_queue *queue; struct v4l2_prio_state *prio; char name[64]; enum vfl_devnode_type vfl_type; enum vfl_devnode_direction vfl_dir; int minor; u16 num; unsigned long flags; int index; spinlock_t fh_lock; struct list_head fh_list; int dev_debug; v4l2_std_id tvnorms; void (*release)(struct video_device *vdev); const struct v4l2_ioctl_ops *ioctl_ops; unsigned long valid_ioctls[BITS_TO_LONGS(BASE_VIDIOC_PRIVATE)]; struct mutex *lock; };}hj03sbah}(h]h ]h"]h$]h&]hhuh1jWhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj3ubh)}(h **Members**h]j)}(hjA3h]hMembers}(hjC3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?3ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj3ubj|)}(hhh](j)}(h8``entity`` :c:type:`struct media_entity ` h](j)}(h ``entity``h]h)}(hj`3h]hentity}(hjb3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^3ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjZ3ubj)}(hhh]h)}(h,:c:type:`struct media_entity `h]h)}(hj{3h]h)}(hj{3h]hstruct media_entity}(hj3hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj}3ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj media_entityuh1hhju3hKhjy3ubah}(h]h ]h"]h$]h&]uh1hhju3hKhjv3ubah}(h]h ]h"]h$]h&]uh1jhjZ3ubeh}(h]h ]h"]h$]h&]uh1jhju3hKhjW3ubj)}(hU``intf_devnode`` pointer to :c:type:`struct media_intf_devnode ` h](j)}(h``intf_devnode``h]h)}(hj3h]h intf_devnode}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj3ubj)}(hhh]h)}(hCpointer to :c:type:`struct media_intf_devnode `h](h pointer to }(hj3hhhNhNubh)}(h8:c:type:`struct media_intf_devnode `h]h)}(hj3h]hstruct media_intf_devnode}(hj3hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjmedia_intf_devnodeuh1hhj3hKhj3ubeh}(h]h ]h"]h$]h&]uh1hhj3hKhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjW3ubj)}(h:``pipe`` :c:type:`struct media_pipeline ` h](j)}(h``pipe``h]h)}(hj 4h]hpipe}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj4ubj)}(hhh]h)}(h0:c:type:`struct media_pipeline `h]h)}(hj&4h]h)}(hj&4h]hstruct media_pipeline}(hj+4hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj(4ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjmedia_pipelineuh1hhj 4hKhj$4ubah}(h]h ]h"]h$]h&]uh1hhj 4hKhj!4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 4hKhjW3ubj)}(hf``fops`` pointer to :c:type:`struct v4l2_file_operations ` for the video device h](j)}(h``fops``h]h)}(hj^4h]hfops}(hj`4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\4ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjX4ubj)}(hhh]h)}(h\pointer to :c:type:`struct v4l2_file_operations ` for the video deviceh](h pointer to }(hjw4hhhNhNubh)}(h<:c:type:`struct v4l2_file_operations `h]h)}(hj4h]hstruct v4l2_file_operations}(hj4hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_file_operationsuh1hhjs4hKhjw4ubh for the video device}(hjw4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjs4hKhjt4ubah}(h]h ]h"]h$]h&]uh1jhjX4ubeh}(h]h ]h"]h$]h&]uh1jhjs4hKhjW3ubj)}(hA``device_caps`` device capabilities as used in v4l2_capabilities h](j)}(h``device_caps``h]h)}(hj4h]h device_caps}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj4ubj)}(hhh]h)}(h0device capabilities as used in v4l2_capabilitiesh]h0device capabilities as used in v4l2_capabilities}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjW3ubj)}(h>``dev`` :c:type:`struct device ` for the video device h](j)}(h``dev``h]h)}(hj4h]hdev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj4ubj)}(hhh]h)}(h5:c:type:`struct device ` for the video deviceh](h)}(h :c:type:`struct device `h]h)}(hj5h]h struct device}(hj5hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjdeviceuh1hhj5hKhj 5ubh for the video device}(hj 5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hKhj 5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjW3ubj)}(h``cdev`` character device h](j)}(h``cdev``h]h)}(hjK5h]hcdev}(hjM5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI5ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjE5ubj)}(hhh]h)}(hcharacter deviceh]hcharacter device}(hjd5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`5hKhja5ubah}(h]h ]h"]h$]h&]uh1jhjE5ubeh}(h]h ]h"]h$]h&]uh1jhj`5hKhjW3ubj)}(hJ``v4l2_dev`` pointer to :c:type:`struct v4l2_device ` parent h](j)}(h ``v4l2_dev``h]h)}(hj5h]hv4l2_dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj~5ubj)}(hhh]h)}(h` parenth](h pointer to }(hj5hhhNhNubh)}(h*:c:type:`struct v4l2_device `h]h)}(hj5h]hstruct v4l2_device}(hj5hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj v4l2_deviceuh1hhj5hKhj5ubh parent}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj~5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjW3ubj)}(hB``dev_parent`` pointer to :c:type:`struct device ` parent h](j)}(h``dev_parent``h]h)}(hj5h]h dev_parent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj5ubj)}(hhh]h)}(h2pointer to :c:type:`struct device ` parenth](h pointer to }(hj5hhhNhNubh)}(h :c:type:`struct device `h]h)}(hj6h]h struct device}(hj6hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjdeviceuh1hhj5hKhj5ubh parent}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjW3ubj)}(hP``ctrl_handler`` Control handler associated with this device node. May be NULL. h](j)}(h``ctrl_handler``h]h)}(hj<6h]h ctrl_handler}(hj>6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:6ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj66ubj)}(hhh]h)}(h>Control handler associated with this device node. May be NULL.h]h>Control handler associated with this device node. May be NULL.}(hjU6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjR6ubah}(h]h ]h"]h$]h&]uh1jhj66ubeh}(h]h ]h"]h$]h&]uh1jhjQ6hKhjW3ubj)}(h```queue`` :c:type:`struct vb2_queue ` associated with this device node. May be NULL. h](j)}(h ``queue``h]h)}(hjv6h]hqueue}(hjx6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt6ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhjp6ubj)}(hhh]h)}(hU:c:type:`struct vb2_queue ` associated with this device node. May be NULL.h](h)}(h&:c:type:`struct vb2_queue `h]h)}(hj6h]hstruct vb2_queue}(hj6hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj vb2_queueuh1hhj6hKhj6ubh/ associated with this device node. May be NULL.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1jhjp6ubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjW3ubj)}(h``prio`` pointer to :c:type:`struct v4l2_prio_state ` with device's Priority state. If NULL, then v4l2_dev->prio will be used. h](j)}(h``prio``h]h)}(hj6h]hprio}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj6ubj)}(hhh]h)}(hpointer to :c:type:`struct v4l2_prio_state ` with device's Priority state. If NULL, then v4l2_dev->prio will be used.h](h pointer to }(hj6hhhNhNubh)}(h2:c:type:`struct v4l2_prio_state `h]h)}(hj6h]hstruct v4l2_prio_state}(hj6hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_prio_stateuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj6ubhK with device’s Priority state. If NULL, then v4l2_dev->prio will be used.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hKhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjW3ubj)}(h``name`` video device name h](j)}(h``name``h]h)}(hj+7h]hname}(hj-7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)7ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj%7ubj)}(hhh]h)}(hvideo device nameh]hvideo device name}(hjD7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@7hKhjA7ubah}(h]h ]h"]h$]h&]uh1jhj%7ubeh}(h]h ]h"]h$]h&]uh1jhj@7hKhjW3ubj)}(h_``vfl_type`` V4L device type, as defined by :c:type:`enum vfl_devnode_type ` h](j)}(h ``vfl_type``h]h)}(hjd7h]hvfl_type}(hjf7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb7ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj^7ubj)}(hhh]h)}(hQV4L device type, as defined by :c:type:`enum vfl_devnode_type `h](hV4L device type, as defined by }(hj}7hhhNhNubh)}(h2:c:type:`enum vfl_devnode_type `h]h)}(hj7h]henum vfl_devnode_type}(hj7hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjvfl_devnode_typeuh1hhjy7hKhj}7ubeh}(h]h ]h"]h$]h&]uh1hhjy7hKhjz7ubah}(h]h ]h"]h$]h&]uh1jhj^7ubeh}(h]h ]h"]h$]h&]uh1jhjy7hKhjW3ubj)}(h-``vfl_dir`` V4L receiver, transmitter or m2m h](j)}(h ``vfl_dir``h]h)}(hj7h]hvfl_dir}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj7ubj)}(hhh]h)}(h V4L receiver, transmitter or m2mh]h V4L receiver, transmitter or m2m}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjW3ubj)}(hJ``minor`` device node 'minor'. It is set to -1 if the registration failed h](j)}(h ``minor``h]h)}(hj7h]hminor}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj7ubj)}(hhh]h)}(h?device node 'minor'. It is set to -1 if the registration failedh]hCdevice node ‘minor’. It is set to -1 if the registration failed}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8hKhj 8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj 8hKhjW3ubj)}(h(``num`` number of the video device node h](j)}(h``num``h]h)}(hj.8h]hnum}(hj08hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,8ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj(8ubj)}(hhh]h)}(hnumber of the video device nodeh]hnumber of the video device node}(hjG8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC8hKhjD8ubah}(h]h ]h"]h$]h&]uh1jhj(8ubeh}(h]h ]h"]h$]h&]uh1jhjC8hKhjW3ubj)}(h``flags`` video device flags. Use bitops to set/clear/test flags. Contains a set of :c:type:`enum v4l2_video_device_flags `. h](j)}(h ``flags``h]h)}(hjg8h]hflags}(hji8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje8ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhja8ubj)}(hhh]h)}(hvideo device flags. Use bitops to set/clear/test flags. Contains a set of :c:type:`enum v4l2_video_device_flags `.h](hJvideo device flags. Use bitops to set/clear/test flags. Contains a set of }(hj8hhhNhNubh)}(h@:c:type:`enum v4l2_video_device_flags `h]h)}(hj8h]henum v4l2_video_device_flags}(hj8hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_video_device_flagsuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hKhj}8ubah}(h]h ]h"]h$]h&]uh1jhja8ubeh}(h]h ]h"]h$]h&]uh1jhj|8hKhjW3ubj)}(hM``index`` attribute to differentiate multiple indices on one physical device h](j)}(h ``index``h]h)}(hj8h]hindex}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8ubj)}(hhh]h)}(hBattribute to differentiate multiple indices on one physical deviceh]hBattribute to differentiate multiple indices on one physical device}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjW3ubj)}(h"``fh_lock`` Lock for all v4l2_fhs h](j)}(h ``fh_lock``h]h)}(hj8h]hfh_lock}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj8ubj)}(hhh]h)}(hLock for all v4l2_fhsh]hLock for all v4l2_fhs}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjW3ubj)}(h7``fh_list`` List of :c:type:`struct v4l2_fh ` h](j)}(h ``fh_list``h]h)}(hj69h]hfh_list}(hj89hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj49ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj09ubj)}(hhh]h)}(h*List of :c:type:`struct v4l2_fh `h](hList of }(hjO9hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]h)}(hjY9h]hstruct v4l2_fh}(hj[9hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjW9ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_fhuh1hhjK9hKhjO9ubeh}(h]h ]h"]h$]h&]uh1hhjK9hKhjL9ubah}(h]h ]h"]h$]h&]uh1jhj09ubeh}(h]h ]h"]h$]h&]uh1jhjK9hKhjW3ubj)}(hB``dev_debug`` Internal device debug flags, not for use by drivers h](j)}(h ``dev_debug``h]h)}(hj9h]h dev_debug}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj9ubj)}(hhh]h)}(h3Internal device debug flags, not for use by driversh]h3Internal device debug flags, not for use by drivers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjW3ubj)}(h``tvnorms`` Supported tv norms h](j)}(h ``tvnorms``h]h)}(hj9h]htvnorms}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj9ubj)}(hhh]h)}(hSupported tv normsh]hSupported tv norms}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjW3ubj)}(h,``release`` video device release() callback h](j)}(h ``release``h]h)}(hj:h]hrelease}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhKhj9ubj)}(hhh]h)}(hvideo device release() callbackh]hvideo device release() callback}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hKhjW3ubj)}(h_``ioctl_ops`` pointer to :c:type:`struct v4l2_ioctl_ops ` with ioctl callbacks h](j)}(h ``ioctl_ops``h]h)}(hj9:h]h ioctl_ops}(hj;:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7:ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj3:ubj)}(hhh]h)}(hPpointer to :c:type:`struct v4l2_ioctl_ops ` with ioctl callbacksh](h pointer to }(hjR:hhhNhNubh)}(h0:c:type:`struct v4l2_ioctl_ops `h]h)}(hj\:h]hstruct v4l2_ioctl_ops}(hj^:hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjZ:ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjv4l2_ioctl_opsuh1hhjN:hMhjR:ubh with ioctl callbacks}(hjR:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjN:hMhjO:ubah}(h]h ]h"]h$]h&]uh1jhj3:ubeh}(h]h ]h"]h$]h&]uh1jhjN:hMhjW3ubj)}(h>``valid_ioctls`` bitmap with the valid ioctls for this device h](j)}(h``valid_ioctls``h]h)}(hj:h]h valid_ioctls}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj:ubj)}(hhh]h)}(h,bitmap with the valid ioctls for this deviceh]h,bitmap with the valid ioctls for this device}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjW3ubj)}(hE``lock`` pointer to :c:type:`struct mutex ` serialization lockh](j)}(h``lock``h]h)}(hj:h]hlock}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj:ubj)}(hhh]h)}(h` serialization lockh](h pointer to }(hj:hhhNhNubh)}(h:c:type:`struct mutex `h]h)}(hj:h]h struct mutex}(hj:hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjmutexuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj:ubh serialization lock}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjW3ubeh}(h]h ]h"]h$]h&]uh1j{hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubh)}(h**Description**h]j)}(hj4;h]h Description}(hj6;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2;ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjhhubj!)}(hCOnly set **dev_parent** if that can't be deduced from **v4l2_dev**.h]h)}(hjL;h](h Only set }(hjN;hhhNhNubj)}(h**dev_parent**h]h dev_parent}(hjU;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN;ubh! if that can’t be deduced from }(hjN;hhhNhNubj)}(h **v4l2_dev**h]hv4l2_dev}(hjg;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN;ubh.}(hjN;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjJ;ubah}(h]h ]h"]h$]h&]uh1j!hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&media_entity_to_video_device (C macro)c.media_entity_to_video_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(hmedia_entity_to_video_deviceh]j)}(hmedia_entity_to_video_deviceh]j)}(hmedia_entity_to_video_deviceh]j )}(hj;h]hmedia_entity_to_video_device}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj;hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM>ubah}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj;hhhj;hM>ubah}(h]j;ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj;hM>hj;hhubj7)}(hhh]h}(h]h ]h"]h$]h&]uh1j6hj;hhhj;hM>ubeh}(h]h ](hmacroeh"]h$]h&]jWhjXj;jYj;jZj[j\uh1jhhhjhNhNubh)}(h+``media_entity_to_video_device (__entity)``h]h)}(hj;h]h'media_entity_to_video_device (__entity)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM@hjhhubj )}(h}Returns a :c:type:`struct video_device ` from the :c:type:`struct media_entity ` embedded on it. h]h)}(h|Returns a :c:type:`struct video_device ` from the :c:type:`struct media_entity ` embedded on it.h](h Returns a }(hj;hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hj;h]hstruct video_device}(hj;hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM9hj;ubh from the }(hj;hhhNhNubh)}(h,:c:type:`struct media_entity `h]h)}(hj<h]hstruct media_entity}(hj<hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj media_entityuh1hhj<hM9hj;ubh embedded on it.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hM9hj;ubah}(h]h ]h"]h$]h&]uh1j hj<hM9hjhhubj^)}(hV**Parameters** ``__entity`` pointer to :c:type:`struct media_entity `h](h)}(h**Parameters**h]j)}(hjP<h]h Parameters}(hjR<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN<ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM=hjJ<ubj|)}(hhh]j)}(hD``__entity`` pointer to :c:type:`struct media_entity `h](j)}(h ``__entity``h]h)}(hjo<h]h__entity}(hjq<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm<ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM?hji<ubj)}(hhh]h)}(h7pointer to :c:type:`struct media_entity `h](h pointer to }(hj<hhhNhNubh)}(h,:c:type:`struct media_entity `h]h)}(hj<h]hstruct media_entity}(hj<hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj media_entityuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM<hj<ubeh}(h]h ]h"]h$]h&]uh1hhj<hM<hj<ubah}(h]h ]h"]h$]h&]uh1jhji<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM?hjf<ubah}(h]h ]h"]h$]h&]uh1j{hjJ<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jto_video_device (C macro)c.to_video_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(hto_video_deviceh]j)}(hto_video_deviceh]j)}(hto_video_deviceh]j )}(hj<h]hto_video_device}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj<hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMGubah}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj<hhhj<hMGubah}(h]j<ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj<hMGhj<hhubj7)}(hhh]h}(h]h ]h"]h$]h&]uh1j6hj<hhhj<hMGubeh}(h]h ](hmacroeh"]h$]h&]jWhjXj=jYj=jZj[j\uh1jhhhjhNhNubh)}(h``to_video_device (cd)``h]h)}(hj=h]hto_video_device (cd)}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMIhjhhubj )}(hqReturns a :c:type:`struct video_device ` from the :c:type:`struct device ` embedded on it. h]h)}(hpReturns a :c:type:`struct video_device ` from the :c:type:`struct device ` embedded on it.h](h Returns a }(hj8=hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjB=h]hstruct video_device}(hjD=hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj@=ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMBhj8=ubh from the }(hj8=hhhNhNubh)}(h :c:type:`struct device `h]h)}(hjf=h]h struct device}(hjh=hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjd=ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjdeviceuh1hhj_=hMBhj8=ubh embedded on it.}(hj8=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_=hMBhj4=ubah}(h]h ]h"]h$]h&]uh1j hj_=hMBhjhhubj^)}(hD**Parameters** ``cd`` pointer to :c:type:`struct device `h](h)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMFhj=ubj|)}(hhh]j)}(h2``cd`` pointer to :c:type:`struct device `h](j)}(h``cd``h]h)}(hj=h]hcd}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMHhj=ubj)}(hhh]h)}(h+pointer to :c:type:`struct device `h](h pointer to }(hj=hhhNhNubh)}(h :c:type:`struct device `h]h)}(hj=h]h struct device}(hj=hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjdeviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMEhj=ubeh}(h]h ]h"]h$]h&]uh1hhj=hMEhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMHhj=ubah}(h]h ]h"]h$]h&]uh1j{hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$__video_register_device (C function)c.__video_register_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(hint __video_register_device (struct video_device *vdev, enum vfl_devnode_type type, int nr, int warn_if_nr_in_use, struct module *owner)h]j)}(hint __video_register_device(struct video_device *vdev, enum vfl_devnode_type type, int nr, int warn_if_nr_in_use, struct module *owner)h](j!)}(hinth]hint}(hj1>hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj->hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMfubj)}(h h]h }(hj@>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj->hhhj?>hMfubj)}(h__video_register_deviceh]j )}(h__video_register_deviceh]h__video_register_device}(hjR>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjN>ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj->hhhj?>hMfubj!)}(hl(struct video_device *vdev, enum vfl_devnode_type type, int nr, int warn_if_nr_in_use, struct module *owner)h](j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjn>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubj)}(h h]h }(hj{>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubh)}(hhh]j )}(h video_deviceh]h video_device}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj>modnameN classnameNjj)}j]j)}jjT>sbc.__video_register_deviceasbuh1hhjj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubj")}(hj"h]h*}(hj>hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjj>ubj )}(hvdevh]hvdev}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjf>ubj!)}(henum vfl_devnode_type typeh](j)}(hjh]henum}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j )}(hvfl_devnode_typeh]hvfl_devnode_type}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj?modnameN classnameNjj)}j]j>c.__video_register_deviceasbuh1hhj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj )}(htypeh]htype}(hj*?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjf>ubj!)}(hint nrh](j!)}(hinth]hint}(hjC?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj??ubj)}(h h]h }(hjQ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj??ubj )}(hnrh]hnr}(hj_?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj??ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjf>ubj!)}(hint warn_if_nr_in_useh](j!)}(hinth]hint}(hjx?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjt?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt?ubj )}(hwarn_if_nr_in_useh]hwarn_if_nr_in_use}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjt?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjf>ubj!)}(hstruct module *ownerh](j)}(hj h]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j )}(hmoduleh]hmodule}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj?modnameN classnameNjj)}j]j>c.__video_register_deviceasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj")}(hj"h]h*}(hj?hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj?ubj )}(hownerh]howner}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjf>ubeh}(h]h ]h"]h$]h&]hhuh1j!hj->hhhj?>hMfubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj)>hhhj?>hMfubah}(h]j$>ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj?>hMfhj&>hhubj7)}(hhh]h)}(hregister video4linux devicesh]hregister video4linux devices}(hj.@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMJhj+@hhubah}(h]h ]h"]h$]h&]uh1j6hj&>hhhj?>hMfubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjF@jYjF@jZj[j\uh1jhhhjhNhNubj^)}(hXZ**Parameters** ``struct video_device *vdev`` struct video_device to register ``enum vfl_devnode_type type`` type of device to register, as defined by :c:type:`enum vfl_devnode_type ` ``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) ``int warn_if_nr_in_use`` warn if the desired device node number was already in use and another number was chosen instead. ``struct module *owner`` module that owns the video device node **Description** The registration code assigns minor numbers and device node numbers based on the requested type and registers the new device node with the kernel. This function assumes that struct video_device was zeroed when it was allocated and does not contain any stale date. An error is returned if no free minor or device node number could be found, or if the registration of the device node failed. Returns 0 on success. .. note:: This function is meant to be used only inside the V4L2 core. Drivers should use video_register_device() or video_register_device_no_warn().h](h)}(h**Parameters**h]j)}(hjP@h]h Parameters}(hjR@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMNhjJ@ubj|)}(hhh](j)}(h>``struct video_device *vdev`` struct video_device to register h](j)}(h``struct video_device *vdev``h]h)}(hjo@h]hstruct video_device *vdev}(hjq@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm@ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMLhji@ubj)}(hhh]h)}(hstruct video_device to registerh]hstruct video_device to register}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMLhj@ubah}(h]h ]h"]h$]h&]uh1jhji@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMLhjf@ubj)}(h|``enum vfl_devnode_type type`` type of device to register, as defined by :c:type:`enum vfl_devnode_type ` h](j)}(h``enum vfl_devnode_type type``h]h)}(hj@h]henum vfl_devnode_type type}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMMhj@ubj)}(hhh]h)}(h\type of device to register, as defined by :c:type:`enum vfl_devnode_type `h](h*type of device to register, as defined by }(hj@hhhNhNubh)}(h2:c:type:`enum vfl_devnode_type `h]h)}(hj@h]henum vfl_devnode_type}(hj@hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjvfl_devnode_typeuh1hhj@hMMhj@ubeh}(h]h ]h"]h$]h&]uh1hhj@hMMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMMhjf@ubj)}(hl``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) h](j)}(h ``int nr``h]h)}(hjAh]hint nr}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMOhj@ubj)}(hhh]h)}(h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)h]h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMNhjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhMOhjf@ubj)}(h{``int warn_if_nr_in_use`` warn if the desired device node number was already in use and another number was chosen instead. h](j)}(h``int warn_if_nr_in_use``h]h)}(hj:Ah]hint warn_if_nr_in_use}(hj` ``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) **Description** Internally, it calls __video_register_device(). Please see its documentation for more details. .. note:: if video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMphjCubj|)}(hhh](j)}(h>``struct video_device *vdev`` struct video_device to register h](j)}(h``struct video_device *vdev``h]h)}(hjCh]hstruct video_device *vdev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMnhjCubj)}(hhh]h)}(hstruct video_device to registerh]hstruct video_device to register}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMnhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMnhjCubj)}(h|``enum vfl_devnode_type type`` type of device to register, as defined by :c:type:`enum vfl_devnode_type ` h](j)}(h``enum vfl_devnode_type type``h]h)}(hj Dh]henum vfl_devnode_type type}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj Dubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMohjDubj)}(hhh]h)}(h\type of device to register, as defined by :c:type:`enum vfl_devnode_type `h](h*type of device to register, as defined by }(hj%DhhhNhNubh)}(h2:c:type:`enum vfl_devnode_type `h]h)}(hj/Dh]henum vfl_devnode_type}(hj1DhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj-Dubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjvfl_devnode_typeuh1hhj!DhMohj%Dubeh}(h]h ]h"]h$]h&]uh1hhj!DhMohj"Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj!DhMohjCubj)}(hl``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) h](j)}(h ``int nr``h]h)}(hjdDh]hint nr}(hjfDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbDubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMqhj^Dubj)}(hhh]h)}(h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)h]h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)}(hj}DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMphjzDubah}(h]h ]h"]h$]h&]uh1jhj^Dubeh}(h]h ]h"]h$]h&]uh1jhjyDhMqhjCubeh}(h]h ]h"]h$]h&]uh1j{hjCubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMshjCubh)}(h^Internally, it calls __video_register_device(). Please see its documentation for more details.h]h^Internally, it calls __video_register_device(). Please see its documentation for more details.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMshjCubj!)}(hXif video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h]h)}(hXif video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h](h:if video_register_device fails, the release() callback of }(hjDhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjDh]hstruct video_device}(hjDhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMwhjDubh structure is }(hjDhhhNhNubhemphasis)}(h*not*h]hnot}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjDubh called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMwhjDubah}(h]h ]h"]h$]h&]uh1j!hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*video_register_device_no_warn (C function)c.video_register_device_no_warnhNtauh1jhjhhhNhNubj)}(hhh](j)}(haint video_register_device_no_warn (struct video_device *vdev, enum vfl_devnode_type type, int nr)h]j)}(h`int video_register_device_no_warn(struct video_device *vdev, enum vfl_devnode_type type, int nr)h](j!)}(hinth]hint}(hj5EhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj1Ehhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjDEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1EhhhjCEhMubj)}(hvideo_register_device_no_warnh]j )}(hvideo_register_device_no_warnh]hvideo_register_device_no_warn}(hjVEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjREubah}(h]h ](jjeh"]h$]h&]hhuh1jhj1EhhhjCEhMubj!)}(h?(struct video_device *vdev, enum vfl_devnode_type type, int nr)h](j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjrEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnEubh)}(hhh]j )}(h video_deviceh]h video_device}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjEmodnameN classnameNjj)}j]j)}jjXEsbc.video_register_device_no_warnasbuh1hhjnEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnEubj")}(hj"h]h*}(hjEhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjnEubj )}(hvdevh]hvdev}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnEubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjjEubj!)}(henum vfl_devnode_type typeh](j)}(hjh]henum}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j )}(hvfl_devnode_typeh]hvfl_devnode_type}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjFmodnameN classnameNjj)}j]jEc.video_register_device_no_warnasbuh1hhjEubj)}(h h]h }(hj FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj )}(htypeh]htype}(hj.FhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjjEubj!)}(hint nrh](j!)}(hinth]hint}(hjGFhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjCFubj)}(h h]h }(hjUFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCFubj )}(hnrh]hnr}(hjcFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCFubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjjEubeh}(h]h ]h"]h$]h&]hhuh1j!hj1EhhhjCEhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj-EhhhjCEhMubah}(h]j(Eah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjCEhMhj*Ehhubj7)}(hhh]h)}(hregister video4linux devicesh]hregister video4linux devices}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1j6hj*EhhhjCEhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjFjYjFjZj[j\uh1jhhhjhNhNubj^)}(hXb**Parameters** ``struct video_device *vdev`` struct video_device to register ``enum vfl_devnode_type type`` type of device to register, as defined by :c:type:`enum vfl_devnode_type ` ``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) **Description** This function is identical to video_register_device() except that no warning is issued if the desired device node number was already in use. Internally, it calls __video_register_device(). Please see its documentation for more details. .. note:: if video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFubj|)}(hhh](j)}(h>``struct video_device *vdev`` struct video_device to register h](j)}(h``struct video_device *vdev``h]h)}(hjFh]hstruct video_device *vdev}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFubj)}(hhh]h)}(hstruct video_device to registerh]hstruct video_device to register}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubj)}(h|``enum vfl_devnode_type type`` type of device to register, as defined by :c:type:`enum vfl_devnode_type ` h](j)}(h``enum vfl_devnode_type type``h]h)}(hjGh]henum vfl_devnode_type type}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjGubj)}(hhh]h)}(h\type of device to register, as defined by :c:type:`enum vfl_devnode_type `h](h*type of device to register, as defined by }(hj GhhhNhNubh)}(h2:c:type:`enum vfl_devnode_type `h]h)}(hj*Gh]henum vfl_devnode_type}(hj,GhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj(Gubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjjvfl_devnode_typeuh1hhjGhMhj Gubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjFubj)}(hl``int nr`` which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free) h](j)}(h ``int nr``h]h)}(hj_Gh]hint nr}(hjaGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]Gubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjYGubj)}(hhh]h)}(h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)h]h`which device node number is desired: (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)}(hjxGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjuGubah}(h]h ]h"]h$]h&]uh1jhjYGubeh}(h]h ]h"]h$]h&]uh1jhjtGhMhjFubeh}(h]h ]h"]h$]h&]uh1j{hjFubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFubh)}(hThis function is identical to video_register_device() except that no warning is issued if the desired device node number was already in use.h]hThis function is identical to video_register_device() except that no warning is issued if the desired device node number was already in use.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFubh)}(h^Internally, it calls __video_register_device(). Please see its documentation for more details.h]h^Internally, it calls __video_register_device(). Please see its documentation for more details.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjFubj!)}(hXif video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h]h)}(hXif video_register_device fails, the release() callback of :c:type:`struct video_device ` structure is *not* called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.h](h:if video_register_device fails, the release() callback of }(hjGhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjGh]hstruct video_device}(hjGhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjGubh structure is }(hjGhhhNhNubjD)}(h*not*h]hnot}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjGubh called, so the caller is responsible for freeing any data. Usually that means that you video_device_release() should be called on failure.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1j!hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$video_unregister_device (C function)c.video_unregister_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8void video_unregister_device (struct video_device *vdev)h]j)}(h7void video_unregister_device(struct video_device *vdev)h](j!)}(hvoidh]hvoid}(hj=HhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj9Hhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjLHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9HhhhjKHhMubj)}(hvideo_unregister_deviceh]j )}(hvideo_unregister_deviceh]hvideo_unregister_device}(hj^HhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZHubah}(h]h ](jjeh"]h$]h&]hhuh1jhj9HhhhjKHhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjzHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvHubh)}(hhh]j )}(h video_deviceh]h video_device}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjHmodnameN classnameNjj)}j]j)}jj`Hsbc.video_unregister_deviceasbuh1hhjvHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvHubj")}(hj"h]h*}(hjHhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjvHubj )}(hvdevh]hvdev}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvHubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjrHubah}(h]h ]h"]h$]h&]hhuh1j!hj9HhhhjKHhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj5HhhhjKHhMubah}(h]j0Hah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjKHhMhj2Hhhubj7)}(hhh]h)}(hUnregister video devices.h]hUnregister video devices.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1j6hj2HhhhjKHhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjIjYjIjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct video_device *vdev`` :c:type:`struct video_device ` to register **Description** Does nothing if vdev == NULL or if video_is_registered() returns false.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hj!IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjIubj|)}(hhh]j)}(hW``struct video_device *vdev`` :c:type:`struct video_device ` to register h](j)}(h``struct video_device *vdev``h]h)}(hj>Ih]hstruct video_device *vdev}(hj@IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj` to registerh](h)}(h,:c:type:`struct video_device `h]h)}(hj]Ih]hstruct video_device}(hj_IhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj[Iubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjSIhMhjWIubh to register}(hjWIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjSIhMhjTIubah}(h]h ]h"]h$]h&]uh1jhj8Iubeh}(h]h ]h"]h$]h&]uh1jhjSIhMhj5Iubah}(h]h ]h"]h$]h&]uh1j{hjIubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjIubh)}(hGDoes nothing if vdev == NULL or if video_is_registered() returns false.h]hGDoes nothing if vdev == NULL or if video_is_registered() returns false.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_device_alloc (C function)c.video_device_allochNtauh1jhjhhhNhNubj)}(hhh](j)}(h/struct video_device * video_device_alloc (void)h]j)}(h-struct video_device *video_device_alloc(void)h](j)}(hj h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubh)}(hhh]j )}(h video_deviceh]h video_device}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjImodnameN classnameNjj)}j]j)}jvideo_device_allocsbc.video_device_allocasbuh1hhjIhhhjIhMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubj")}(hj"h]h*}(hj+JhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjIhhhjIhMubj)}(hvideo_device_alloch]j )}(hjJh]hvideo_device_alloc}(hj`h](hhelper function to alloc }(hjJhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjJh]hstruct video_device}(hjJhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jJc.video_device_allocasbj video_deviceuh1hhjhKhjJubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj~Jhhubah}(h]h ]h"]h$]h&]uh1j6hjIhhhjIhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjJjYjJjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``void`` no arguments **Description** Returns NULL if ``-ENOMEM`` or a :c:type:`struct video_device ` on success.h](h)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjJubj|)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]h)}(hjJh]hvoid}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjJubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubah}(h]h ]h"]h$]h&]uh1j{hjJubh)}(h**Description**h]j)}(hj!Kh]h Description}(hj#KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjJubh)}(hYReturns NULL if ``-ENOMEM`` or a :c:type:`struct video_device ` on success.h](hReturns NULL if }(hj7KhhhNhNubh)}(h ``-ENOMEM``h]h-ENOMEM}(hj?KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7Kubh or a }(hj7KhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjSKh]hstruct video_device}(hjUKhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjQKubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj7Kubh on success.}(hj7KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpKhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!video_device_release (C function)c.video_device_releasehNtauh1jhjhhhNhNubj)}(hhh](j)}(h5void video_device_release (struct video_device *vdev)h]j)}(h4void video_device_release(struct video_device *vdev)h](j!)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjKhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubj)}(hvideo_device_releaseh]j )}(hvideo_device_releaseh]hvideo_device_release}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubah}(h]h ](jjeh"]h$]h&]hhuh1jhjKhhhjKhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j )}(h video_deviceh]h video_device}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjKmodnameN classnameNjj)}j]j)}jjKsbc.video_device_releaseasbuh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj")}(hj"h]h*}(hj$LhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjKubj )}(hvdevh]hvdev}(hj1LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjKubah}(h]h ]h"]h$]h&]hhuh1j!hjKhhhjKhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjKhhhjKhMubah}(h]jKah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjKhMhjKhhubj7)}(hhh]h)}(hGhelper function to release :c:type:`struct video_device `h](hhelper function to release }(hj[LhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjeLh]hstruct video_device}(hjgLhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjcLubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jLc.video_device_releaseasbj video_deviceuh1hhjhKhj[Lubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjXLhhubah}(h]h ]h"]h$]h&]uh1j6hjKhhhjKhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjLjYjLjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** Can also be used for video_device->release\(\).h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjLubj|)}(hhh]j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hjLh]hstruct video_device *vdev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjLubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjLhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjLh]hstruct video_device}(hjLhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjLhMhjLubeh}(h]h ]h"]h$]h&]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjLubah}(h]h ]h"]h$]h&]uh1j{hjLubh)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjLubh)}(h/Can also be used for video_device->release\(\).h]h/Can also be used for video_device->release().}(hj0MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'video_device_release_empty (C function)c.video_device_release_emptyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h;void video_device_release_empty (struct video_device *vdev)h]j)}(h:void video_device_release_empty(struct video_device *vdev)h](j!)}(hvoidh]hvoid}(hj_MhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj[Mhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjnMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[MhhhjmMhMubj)}(hvideo_device_release_emptyh]j )}(hvideo_device_release_emptyh]hvideo_device_release_empty}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|Mubah}(h]h ](jjeh"]h$]h&]hhuh1jhj[MhhhjmMhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j )}(h video_deviceh]h video_device}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjMsbc.video_device_release_emptyasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj")}(hj"h]h*}(hjMhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjMubj )}(hvdevh]hvdev}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjMubah}(h]h ]h"]h$]h&]hhuh1j!hj[MhhhjmMhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjWMhhhjmMhMubah}(h]jRMah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjmMhMhjTMhhubj7)}(hhh]h)}(hDhelper function to implement the video_device->release\(\) callback.h]hDhelper function to implement the video_device->release() callback.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j6hjTMhhhjmMhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj7NjYj7NjZj[j\uh1jhhhjhNhNubj^)}(hX1**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** This release function does nothing. It should be used when the video_device is a static global struct. .. note:: Having a static video_device is a dubious construction at best.h](h)}(h**Parameters**h]j)}(hjANh]h Parameters}(hjCNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Nubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj;Nubj|)}(hhh]j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hj`Nh]hstruct video_device *vdev}(hjbNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^Nubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjZNubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjyNhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjNh]hstruct video_device}(hjNhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjuNhMhjyNubeh}(h]h ]h"]h$]h&]uh1hhjuNhMhjvNubah}(h]h ]h"]h$]h&]uh1jhjZNubeh}(h]h ]h"]h$]h&]uh1jhjuNhMhjWNubah}(h]h ]h"]h$]h&]uh1j{hj;Nubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj;Nubh)}(h#This release function does nothing.h]h#This release function does nothing.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj;Nubh)}(hBIt should be used when the video_device is a static global struct.h]hBIt should be used when the video_device is a static global struct.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj;Nubj!)}(h?Having a static video_device is a dubious construction at best.h]h)}(hjNh]h?Having a static video_device is a dubious construction at best.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjNubah}(h]h ]h"]h$]h&]uh1j!hj;Nubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_disable_ioctl (C function)c.v4l2_disable_ioctlhNtauh1jhjhhhNhNubj)}(hhh](j)}(hEvoid v4l2_disable_ioctl (struct video_device *vdev, unsigned int cmd)h]j)}(hDvoid v4l2_disable_ioctl(struct video_device *vdev, unsigned int cmd)h](j!)}(hvoidh]hvoid}(hj&OhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj"Ohhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hj5OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Ohhhj4OhMubj)}(hv4l2_disable_ioctlh]j )}(hv4l2_disable_ioctlh]hv4l2_disable_ioctl}(hjGOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCOubah}(h]h ](jjeh"]h$]h&]hhuh1jhj"Ohhhj4OhMubj!)}(h-(struct video_device *vdev, unsigned int cmd)h](j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjcOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Oubj)}(h h]h }(hjpOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Oubh)}(hhh]j )}(h video_deviceh]h video_device}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~Oubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjOmodnameN classnameNjj)}j]j)}jjIOsbc.v4l2_disable_ioctlasbuh1hhj_Oubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Oubj")}(hj"h]h*}(hjOhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj_Oubj )}(hvdevh]hvdev}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Oubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj[Oubj!)}(hunsigned int cmdh](j!)}(hunsignedh]hunsigned}(hjOhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj!)}(hinth]hint}(hjOhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj )}(hcmdh]hcmd}(hj PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj[Oubeh}(h]h ]h"]h$]h&]hhuh1j!hj"Ohhhj4OhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjOhhhj4OhMubah}(h]jOah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj4OhMhjOhhubj7)}(hhh]h)}(hGmark that a given command isn't implemented. shouldn't use core lockingh]hKmark that a given command isn’t implemented. shouldn’t use core locking}(hj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj4Phhubah}(h]h ]h"]h$]h&]uh1j6hjOhhhj4OhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjOPjYjOPjZj[j\uh1jhhhjhNhNubj^)}(hX**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``unsigned int cmd`` ioctl command **Description** This function allows drivers to provide just one v4l2_ioctl_ops struct, but disable ioctls based on the specific card that is actually found. .. note:: This must be called before video_register_device. See also the comments for determine_valid_ioctls().h](h)}(h**Parameters**h]j)}(hjYPh]h Parameters}(hj[PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWPubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjSPubj|)}(hhh](j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hjxPh]hstruct video_device *vdev}(hjzPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvPubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjrPubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjPhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjPh]hstruct video_device}(hjPhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjPhMhjPubeh}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjrPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjoPubj)}(h#``unsigned int cmd`` ioctl command h](j)}(h``unsigned int cmd``h]h)}(hjPh]hunsigned int cmd}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjPubj)}(hhh]h)}(h ioctl commandh]h ioctl command}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjoPubeh}(h]h ]h"]h$]h&]uh1j{hjSPubh)}(h**Description**h]j)}(hj Qh]h Description}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Qubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjSPubh)}(hThis function allows drivers to provide just one v4l2_ioctl_ops struct, but disable ioctls based on the specific card that is actually found.h]hThis function allows drivers to provide just one v4l2_ioctl_ops struct, but disable ioctls based on the specific card that is actually found.}(hj!QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjSPubj!)}(heThis must be called before video_register_device. See also the comments for determine_valid_ioctls().h]h)}(heThis must be called before video_register_device. See also the comments for determine_valid_ioctls().h]heThis must be called before video_register_device. See also the comments for determine_valid_ioctls().}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj0Qubah}(h]h ]h"]h$]h&]uh1j!hjSPubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_get_drvdata (C function)c.video_get_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void * video_get_drvdata (struct video_device *vdev)h]j)}(h2void *video_get_drvdata(struct video_device *vdev)h](j!)}(hvoidh]hvoid}(hjiQhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjeQhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjxQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeQhhhjwQhMubj")}(hj"h]h*}(hjQhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjeQhhhjwQhMubj)}(hvideo_get_drvdatah]j )}(hvideo_get_drvdatah]hvideo_get_drvdata}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubah}(h]h ](jjeh"]h$]h&]hhuh1jhjeQhhhjwQhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j )}(h video_deviceh]h video_device}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjQmodnameN classnameNjj)}j]j)}jjQsbc.video_get_drvdataasbuh1hhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj")}(hj"h]h*}(hjQhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjQubj )}(hvdevh]hvdev}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjQubah}(h]h ]h"]h$]h&]hhuh1j!hjeQhhhjwQhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjaQhhhjwQhMubah}(h]j\Qah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjwQhMhj^Qhhubj7)}(hhh]h)}(hDgets private data from :c:type:`struct video_device `.h](hgets private data from }(hj6RhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hj@Rh]hstruct video_device}(hjBRhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj>Rubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jQc.video_get_drvdataasbj video_deviceuh1hhjhKhj6Rubh.}(hj6RhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj3Rhhubah}(h]h ]h"]h$]h&]uh1j6hj^QhhhjwQhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjvRjYjvRjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** returns a pointer to the private datah](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Rubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjzRubj|)}(hhh]j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hjRh]hstruct video_device *vdev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjRubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjRhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjRh]hstruct video_device}(hjRhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjRhMhjRubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubah}(h]h ]h"]h$]h&]uh1j{hjzRubh)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjzRubh)}(h%returns a pointer to the private datah]h%returns a pointer to the private data}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjzRubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_set_drvdata (C function)c.video_set_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h>void video_set_drvdata (struct video_device *vdev, void *data)h]j)}(h=void video_set_drvdata(struct video_device *vdev, void *data)h](j!)}(hvoidh]hvoid}(hj>ShhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj:Shhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjMShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ShhhjLShMubj)}(hvideo_set_drvdatah]j )}(hvideo_set_drvdatah]hvideo_set_drvdata}(hj_ShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Subah}(h]h ](jjeh"]h$]h&]hhuh1jhj:ShhhjLShMubj!)}(h'(struct video_device *vdev, void *data)h](j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hj{ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwSubh)}(hhh]j )}(h video_deviceh]h video_device}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjaSsbc.video_set_drvdataasbuh1hhjwSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwSubj")}(hj"h]h*}(hjShhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjwSubj )}(hvdevh]hvdev}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwSubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjsSubj!)}(h void *datah](j!)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj")}(hj"h]h*}(hj ThhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjSubj )}(hdatah]hdata}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjsSubeh}(h]h ]h"]h$]h&]hhuh1j!hj:ShhhjLShMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj6ShhhjLShMubah}(h]j1Sah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjLShMhj3Shhubj7)}(hhh]h)}(hDsets private data from :c:type:`struct video_device `.h](hsets private data from }(hj@ThhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjJTh]hstruct video_device}(hjLThhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjHTubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jSc.video_set_drvdataasbj video_deviceuh1hhjhKhj@Tubh.}(hj@ThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj=Thhubah}(h]h ]h"]h$]h&]uh1j6hj3ShhhjLShMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjTjYjTjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``void *data`` private data pointerh](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjTubj|)}(hhh](j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hjTh]hstruct video_device *vdev}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjTubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjThhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjTh]hstruct video_device}(hjThhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjThMhjTubeh}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubj)}(h#``void *data`` private data pointerh](j)}(h``void *data``h]h)}(hjUh]h void *data}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjTubj)}(hhh]h)}(hprivate data pointerh]hprivate data pointer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjTubeh}(h]h ]h"]h$]h&]uh1j{hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_devdata (C function)c.video_devdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h7struct video_device * video_devdata (struct file *file)h]j)}(h5struct video_device *video_devdata(struct file *file)h](j)}(hj h]hstruct}(hj[UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWUhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjiUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWUhhhjhUhMubh)}(hhh]j )}(h video_deviceh]h video_device}(hjzUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwUubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj|UmodnameN classnameNjj)}j]j)}j video_devdatasbc.video_devdataasbuh1hhjWUhhhjhUhMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWUhhhjhUhMubj")}(hj"h]h*}(hjUhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjWUhhhjhUhMubj)}(h video_devdatah]j )}(hjUh]h video_devdata}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubah}(h]h ](jjeh"]h$]h&]hhuh1jhjWUhhhjhUhMubj!)}(h(struct file *file)h]j!)}(hstruct file *fileh](j)}(hj h]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j )}(hfileh]hfile}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjUmodnameN classnameNjj)}j]jUc.video_devdataasbuh1hhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj")}(hj"h]h*}(hjVhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjUubj )}(hfileh]hfile}(hj,VhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjUubah}(h]h ]h"]h$]h&]hhuh1j!hjWUhhhjhUhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjSUhhhjhUhMubah}(h]jNUah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjhUhMhjPUhhubj7)}(hhh]h)}(hCgets :c:type:`struct video_device ` from struct file.h](hgets }(hjVVhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hj`Vh]hstruct video_device}(hjbVhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj^Vubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jUc.video_devdataasbj video_deviceuh1hhjhKhjVVubh from struct file.}(hjVVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjSVhhubah}(h]h ]h"]h$]h&]uh1j6hjPUhhhjhUhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjVjYjVjZj[j\uh1jhhhjhNhNubj^)}(h>**Parameters** ``struct file *file`` pointer to struct fileh](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjVubj|)}(hhh]j)}(h,``struct file *file`` pointer to struct fileh](j)}(h``struct file *file``h]h)}(hjVh]hstruct file *file}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjVubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubah}(h]h ]h"]h$]h&]uh1j{hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvideo_drvdata (C function)c.video_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h(void * video_drvdata (struct file *file)h]j)}(h&void *video_drvdata(struct file *file)h](j!)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjWhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hj(WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhj'WhMubj")}(hj"h]h*}(hj6WhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjWhhhj'WhMubj)}(h video_drvdatah]j )}(h video_drvdatah]h video_drvdata}(hjGWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCWubah}(h]h ](jjeh"]h$]h&]hhuh1jhjWhhhj'WhMubj!)}(h(struct file *file)h]j!)}(hstruct file *fileh](j)}(hj h]hstruct}(hjcWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Wubj)}(h h]h }(hjpWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Wubh)}(hhh]j )}(hfileh]hfile}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~Wubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjWmodnameN classnameNjj)}j]j)}jjIWsbc.video_drvdataasbuh1hhj_Wubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Wubj")}(hj"h]h*}(hjWhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj_Wubj )}(hfileh]hfile}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Wubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj[Wubah}(h]h ]h"]h$]h&]hhuh1j!hjWhhhj'WhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjWhhhj'WhMubah}(h]j Wah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj'WhMhjWhhubj7)}(hhh]h)}(hZgets private data from :c:type:`struct video_device ` using the struct file.h](hgets private data from }(hjWhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjWh]hstruct video_device}(hjWhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]jWc.video_drvdataasbj video_deviceuh1hhjhKhjWubh using the struct file.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1j6hjWhhhj'WhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj&XjYj&XjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct file *file`` pointer to struct file **Description** This is function combines both video_get_drvdata() and video_devdata() as this is used very often.h](h)}(h**Parameters**h]j)}(hj0Xh]h Parameters}(hj2XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Xubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj*Xubj|)}(hhh]j)}(h-``struct file *file`` pointer to struct file h](j)}(h``struct file *file``h]h)}(hjOXh]hstruct file *file}(hjQXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMXubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjIXubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjhXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdXhMhjeXubah}(h]h ]h"]h$]h&]uh1jhjIXubeh}(h]h ]h"]h$]h&]uh1jhjdXhMhjFXubah}(h]h ]h"]h$]h&]uh1j{hj*Xubh)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj*Xubh)}(hbThis is function combines both video_get_drvdata() and video_devdata() as this is used very often.h]hbThis is function combines both video_get_drvdata() and video_devdata() as this is used very often.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj*Xubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#video_device_node_name (C function)c.video_device_node_namehNtauh1jhjhhhNhNubj)}(hhh](j)}(h?const char * video_device_node_name (struct video_device *vdev)h]j)}(h=const char *video_device_node_name(struct video_device *vdev)h](j)}(hconsth]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhMubj!)}(hcharh]hchar}(hjXhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjXhhhjXhMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhMubj")}(hj"h]h*}(hjYhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjXhhhjXhMubj)}(hvideo_device_node_nameh]j )}(hvideo_device_node_nameh]hvideo_device_node_name}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubah}(h]h ](jjeh"]h$]h&]hhuh1jhjXhhhjXhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hj5YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Yubj)}(h h]h }(hjBYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Yubh)}(hhh]j )}(h video_deviceh]h video_device}(hjSYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPYubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjUYmodnameN classnameNjj)}j]j)}jjYsbc.video_device_node_nameasbuh1hhj1Yubj)}(h h]h }(hjsYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Yubj")}(hj"h]h*}(hjYhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj1Yubj )}(hvdevh]hvdev}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1Yubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-Yubah}(h]h ]h"]h$]h&]hhuh1j!hjXhhhjXhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjXhhhjXhMubah}(h]jXah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjXhMhjXhhubj7)}(hhh]h)}(hreturns the video device nameh]hreturns the video device name}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hjYhhubah}(h]h ]h"]h$]h&]uh1j6hjXhhhjXhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXjYjYjYjZj[j\uh1jhhhjhNhNubj^)}(h**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description** Returns the device name stringh](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hjYubj|)}(hhh]j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hjYh]hstruct video_device *vdev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hjYubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjZhhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjZh]hstruct video_device}(hjZhhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhjZhM hjZubeh}(h]h ]h"]h$]h&]uh1hhjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjZhM hjYubah}(h]h ]h"]h$]h&]uh1j{hjYubh)}(h**Description**h]j)}(hjSZh]h Description}(hjUZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQZubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hjYubh)}(hReturns the device name stringh]hReturns the device name string}(hjiZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j video_is_registered (C function)c.video_is_registeredhNtauh1jhjhhhNhNubj)}(hhh](j)}(h3int video_is_registered (struct video_device *vdev)h]j)}(h2int video_is_registered(struct video_device *vdev)h](j!)}(hinth]hint}(hjZhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjZhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhMubj)}(hvideo_is_registeredh]j )}(hvideo_is_registeredh]hvideo_is_registered}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubah}(h]h ](jjeh"]h$]h&]hhuh1jhjZhhhjZhMubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j )}(h video_deviceh]h video_device}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjZmodnameN classnameNjj)}j]j)}jjZsbc.video_is_registeredasbuh1hhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj")}(hj"h]h*}(hj![hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjZubj )}(hvdevh]hvdev}(hj.[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjZubah}(h]h ]h"]h$]h&]hhuh1j!hjZhhhjZhMubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjZhhhjZhMubah}(h]jZah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjZhMhjZhhubj7)}(hhh]h)}(hOreturns true if the :c:type:`struct video_device ` is registered.h](hreturns true if the }(hjX[hhhNhNubh)}(h,:c:type:`struct video_device `h]h)}(hjb[h]hstruct video_device}(hjd[hhhNhNubah}(h]h ](hhc-typeeh"]h$]h&]uh1hhj`[ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjj)}j]j[c.video_is_registeredasbj video_deviceuh1hhjhKhjX[ubh is registered.}(hjX[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhjU[hhubah}(h]h ]h"]h$]h&]uh1j6hjZhhhjZhMubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj[jYj[jZj[j\uh1jhhhjhNhNubj^)}(hx**Parameters** ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` **Description**h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj[ubj|)}(hhh]j)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]h)}(hj[h]hstruct video_device *vdev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj[ubj)}(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 ](hhc-typeeh"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypetype refexplicitrefwarnjjj video_deviceuh1hhj[hMhj[ubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1j{hj[ubh)}(h**Description**h]j)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_debugfs_root (C function)c.v4l2_debugfs_roothNtauh1jhjhhhNhNubj)}(hhh](j)}(h(struct dentry * v4l2_debugfs_root (void)h]j)}(h&struct dentry *v4l2_debugfs_root(void)h](j)}(hj h]hstruct}(hjQ\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM\hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM$ubj)}(h h]h }(hj_\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM\hhhj^\hM$ubh)}(hhh]j )}(hdentryh]hdentry}(hjp\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjm\ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjr\modnameN classnameNjj)}j]j)}jv4l2_debugfs_rootsbc.v4l2_debugfs_rootasbuh1hhjM\hhhj^\hM$ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM\hhhj^\hM$ubj")}(hj"h]h*}(hj\hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjM\hhhj^\hM$ubj)}(hv4l2_debugfs_rooth]j )}(hj\h]hv4l2_debugfs_root}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjM\hhhj^\hM$ubj!)}(h(void)h]j!)}(hvoidh]j!)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj\ubah}(h]h ]h"]h$]h&]noemphhhuh1j!hj\ubah}(h]h ]h"]h$]h&]hhuh1j!hjM\hhhj^\hM$ubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjI\hhhj^\hM$ubah}(h]jD\ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj^\hM$hjF\hhubj7)}(hhh]h)}(h6returns the dentry of the top-level "v4l2" debugfs dirh]h:returns the dentry of the top-level “v4l2” debugfs dir}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM hj\hhubah}(h]h ]h"]h$]h&]uh1j6hjF\hhhj^\hM$ubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj ]jYj ]jZj[j\uh1jhhhjhNhNubj^)}(hx**Parameters** ``void`` no arguments **Description** If this directory does not yet exist, then it will be created.h](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM$hj]ubj|)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]h)}(hj6]h]hvoid}(hj8]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4]ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM'hj0]ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjO]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK]hM'hjL]ubah}(h]h ]h"]h$]h&]uh1jhj0]ubeh}(h]h ]h"]h$]h&]uh1jhjK]hM'hj-]ubah}(h]h ]h"]h$]h&]uh1j{hj]ubh)}(h**Description**h]j)}(hjq]h]h Description}(hjs]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo]ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM)hj]ubh)}(h>If this directory does not yet exist, then it will be created.h]h>If this directory does not yet exist, then it will be created.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM!hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(video_device_pipeline_start (C function)c.video_device_pipeline_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(hXint video_device_pipeline_start (struct video_device *vdev, struct media_pipeline *pipe)h]j)}(hWint video_device_pipeline_start(struct video_device *vdev, struct media_pipeline *pipe)h](j!)}(hinth]hint}(hj]hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj]hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMBubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhj]hMBubj)}(hvideo_device_pipeline_starth]j )}(hvideo_device_pipeline_starth]hvideo_device_pipeline_start}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj]hhhj]hMBubj!)}(h8(struct video_device *vdev, struct media_pipeline *pipe)h](j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j )}(h video_deviceh]h video_device}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj^modnameN classnameNjj)}j]j)}jj]sbc.video_device_pipeline_startasbuh1hhj]ubj)}(h h]h }(hj1^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj")}(hj"h]h*}(hj?^hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj]ubj )}(hvdevh]hvdev}(hjL^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj]ubj!)}(hstruct media_pipeline *pipeh](j)}(hj h]hstruct}(hje^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja^ubj)}(h h]h }(hjr^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja^ubh)}(hhh]j )}(hmedia_pipelineh]hmedia_pipeline}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj^modnameN classnameNjj)}j]j-^c.video_device_pipeline_startasbuh1hhja^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja^ubj")}(hj"h]h*}(hj^hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hja^ubj )}(hpipeh]hpipe}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hja^ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj]ubeh}(h]h ]h"]h$]h&]hhuh1j!hj]hhhj]hMBubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hj]hhhj]hMBubah}(h]j]ah ](j.j/eh"]h$]h&]j3j4)j5huh1jhj]hMBhj]hhubj7)}(hhh]h)}(hMark a pipeline as streamingh]hMark a pipeline as streaming}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM0hj^hhubah}(h]h ]h"]h$]h&]uh1j6hj]hhhj]hMBubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj^jYj^jZj[j\uh1jhhhjhNhNubj^)}(hX**Parameters** ``struct video_device *vdev`` Starting video device ``struct media_pipeline *pipe`` Media pipeline to be assigned to all entities in the pipeline. **Description** Mark all entities connected to a given video device through enabled links, either directly or indirectly, as streaming. The given pipeline object is assigned to every pad in the pipeline and stored in the media_pad pipe field. Calls to this function can be nested, in which case the same number of video_device_pipeline_stop() calls will be required to stop streaming. The pipeline pointer must be identical for all nested calls to video_device_pipeline_start(). The video device must contain a single pad. This is a convenience wrapper around media_pipeline_start().h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM4hj_ubj|)}(hhh](j)}(h4``struct video_device *vdev`` Starting video device h](j)}(h``struct video_device *vdev``h]h)}(hj'_h]hstruct video_device *vdev}(hj)_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%_ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM1hj!_ubj)}(hhh]h)}(hStarting video deviceh]hStarting video device}(hj@_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<_hM1hj=_ubah}(h]h ]h"]h$]h&]uh1jhj!_ubeh}(h]h ]h"]h$]h&]uh1jhj<_hM1hj_ubj)}(h_``struct media_pipeline *pipe`` Media pipeline to be assigned to all entities in the pipeline. h](j)}(h``struct media_pipeline *pipe``h]h)}(hj`_h]hstruct media_pipeline *pipe}(hjb_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^_ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM2hjZ_ubj)}(hhh]h)}(h>Media pipeline to be assigned to all entities in the pipeline.h]h>Media pipeline to be assigned to all entities in the pipeline.}(hjy_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju_hM2hjv_ubah}(h]h ]h"]h$]h&]uh1jhjZ_ubeh}(h]h ]h"]h$]h&]uh1jhju_hM2hj_ubeh}(h]h ]h"]h$]h&]uh1j{hj_ubh)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM4hj_ubh)}(hMark all entities connected to a given video device through enabled links, either directly or indirectly, as streaming. The given pipeline object is assigned to every pad in the pipeline and stored in the media_pad pipe field.h]hMark all entities connected to a given video device through enabled links, either directly or indirectly, as streaming. The given pipeline object is assigned to every pad in the pipeline and stored in the media_pad pipe field.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM4hj_ubh)}(hCalls to this function can be nested, in which case the same number of video_device_pipeline_stop() calls will be required to stop streaming. The pipeline pointer must be identical for all nested calls to video_device_pipeline_start().h]hCalls to this function can be nested, in which case the same number of video_device_pipeline_stop() calls will be required to stop streaming. The pipeline pointer must be identical for all nested calls to video_device_pipeline_start().}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM9hj_ubh)}(h+The video device must contain a single pad.h]h+The video device must contain a single pad.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM>hj_ubh)}(hMedia pipeline to be assigned to all entities in the pipeline.h]h>Media pipeline to be assigned to all entities in the pipeline.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMHhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMHhjuaubeh}(h]h ]h"]h$]h&]uh1j{hjYaubh)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMJhjYaubh)}(hI..note:: This is the non-locking version of video_device_pipeline_start()h]hI..note:: This is the non-locking version of video_device_pipeline_start()}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMJhjYaubh)}(h+The video device must contain a single pad.h]h+The video device must contain a single pad.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMLhjYaubh)}(h>This is a convenience wrapper around __media_pipeline_start().h]h>This is a convenience wrapper around __media_pipeline_start().}(hj&bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMNhjYaubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'video_device_pipeline_stop (C function)c.video_device_pipeline_stophNtauh1jhjhhhNhNubj)}(hhh](j)}(h;void video_device_pipeline_stop (struct video_device *vdev)h]j)}(h:void video_device_pipeline_stop(struct video_device *vdev)h](j!)}(hvoidh]hvoid}(hjUbhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjQbhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMcubj)}(h h]h }(hjdbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQbhhhjcbhMcubj)}(hvideo_device_pipeline_stoph]j )}(hvideo_device_pipeline_stoph]hvideo_device_pipeline_stop}(hjvbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrbubah}(h]h ](jjeh"]h$]h&]hhuh1jhjQbhhhjcbhMcubj!)}(h(struct video_device *vdev)h]j!)}(hstruct video_device *vdevh](j)}(hj h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j )}(h video_deviceh]h video_device}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjbmodnameN classnameNjj)}j]j)}jjxbsbc.video_device_pipeline_stopasbuh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj")}(hj"h]h*}(hjbhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjbubj )}(hvdevh]hvdev}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjbubah}(h]h ]h"]h$]h&]hhuh1j!hjQbhhhjcbhMcubeh}(h]h ]h"]h$]h&]hhj(uh1jj)j*hjMbhhhjcbhMcubah}(h]jHbah ](j.j/eh"]h$]h&]j3j4)j5huh1jhjcbhMchjJbhhubj7)}(hhh]h)}(h Mark a pipeline as not streamingh]h Mark a pipeline as not streaming}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMThjchhubah}(h]h ]h"]h$]h&]uh1j6hjJbhhhjcbhMcubeh}(h]h ](hfunctioneh"]h$]h&]jWhjXj-cjYj-cjZj[j\uh1jhhhjhNhNubj^)}(hX**Parameters** ``struct video_device *vdev`` Starting video device **Description** Mark all entities connected to a given video device through enabled links, either directly or indirectly, as not streaming. The media_pad pipe field is reset to ``NULL``. If multiple calls to media_pipeline_start() have been made, the same number of calls to this function are required to mark the pipeline as not streaming. The video device must contain a single pad. This is a convenience wrapper around media_pipeline_stop().h](h)}(h**Parameters**h]j)}(hj7ch]h Parameters}(hj9chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5cubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMXhj1cubj|)}(hhh]j)}(h4``struct video_device *vdev`` Starting video device h](j)}(h``struct video_device *vdev``h]h)}(hjVch]hstruct video_device *vdev}(hjXchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTcubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMUhjPcubj)}(hhh]h)}(hStarting video deviceh]hStarting video device}(hjochhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkchMUhjlcubah}(h]h ]h"]h$]h&]uh1jhjPcubeh}(h]h ]h"]h$]h&]uh1jhjkchMUhjMcubah}(h]h ]h"]h$]h&]uh1j{hj1cubh)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMWhj1cubh)}(hMark all entities connected to a given video device through enabled links, either directly or indirectly, as not streaming. The media_pad pipe field is reset to ``NULL``.h](hMark all entities connected to a given video device through enabled links, either directly or indirectly, as not streaming. The media_pad pipe field is reset to }(hjchhhNhNubh)}(h``NULL``h]hNULL}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMWhj1cubh)}(hIf multiple calls to media_pipeline_start() have been made, the same number of calls to this function are required to mark the pipeline as not streaming.h]hIf multiple calls to media_pipeline_start() have been made, the same number of calls to this function are required to mark the pipeline as not streaming.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM[hj1cubh)}(h+The video device must contain a single pad.h]h+The video device must contain a single pad.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhM_hj1cubh)}(h;This is a convenience wrapper around media_pipeline_stop().h]h;This is a convenience wrapper around media_pipeline_stop().}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-dev:367: ./include/media/v4l2-dev.hhMahj1cubeh}(h]h ] kernelindentah"]h$]h&]uh1j]hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)__video_device_pipeline_stop (C function)c.__video_device_pipeline_stophNtauh1jhjh0PhhNhNubj)}(hhh](j)}(h=void __video_device_pipeline_stop (struct video_device *vdev)h]j)}(hj)>j-Bj2Bj(Ej-Ej0Hj5HjIjIjKjKjRMjWMjOjOj\QjaQj1Sj6SjNUjSUj WjWjXjXjZjZjD\jI\j]j]j`j`jHbjMbjdj djejej@gjEgu 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.