sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget0/translations/zh_CN/driver-api/media/v4l2-devicemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/driver-api/media/v4l2-devicemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/driver-api/media/v4l2-devicemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/driver-api/media/v4l2-devicemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/driver-api/media/v4l2-devicemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/driver-api/media/v4l2-devicemodnameN 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:spacepreserveuh1hhhhhhJ/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device.rsthKubhsection)}(hhh](htitle)}(hV4L2 device instanceh]hV4L2 device instance}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hEach device instance is represented by a struct v4l2_device. Very simple devices can just allocate this struct, but most of the time you would embed this struct inside a larger struct.h]hEach device instance is represented by a struct v4l2_device. Very simple devices can just allocate this struct, but most of the time you would embed this struct inside a larger struct.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h1You must register the device instance by calling:h]h1You must register the device instance by calling:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh block_quote)}(h_:c:func:`v4l2_device_register ` (dev, :c:type:`v4l2_dev `). h]h)}(h^:c:func:`v4l2_device_register ` (dev, :c:type:`v4l2_dev `).h](h)}(h5:c:func:`v4l2_device_register `h]hliteral)}(hhh]hv4l2_device_register}(hhhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-device refdomainjreftypefunc refexplicitrefwarn reftargetv4l2_device_registeruh1hhhhK hhubh (dev, }(hhhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK hhubh).}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hRegistration will initialize the :c:type:`v4l2_device` struct. If the dev->driver_data field is ``NULL``, it will be linked to :c:type:`v4l2_dev ` argument.h](h!Registration will initialize the }(hjIhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjSh]h v4l2_device}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjIubh* struct. If the dev->driver_data field is }(hjIhhhNhNubh)}(h``NULL``h]hNULL}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubh, it will be linked to }(hjIhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjIubh argument.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXDrivers that want integration with the media device framework need to set dev->driver_data manually to point to the driver-specific device structure that embed the struct v4l2_device instance. This is achieved by a ``dev_set_drvdata()`` call before registering the V4L2 device instance. They must also set the struct v4l2_device mdev field to point to a properly initialized and registered :c:type:`media_device` instance.h](hDrivers that want integration with the media device framework need to set dev->driver_data manually to point to the driver-specific device structure that embed the struct v4l2_device instance. This is achieved by a }(hjhhhNhNubh)}(h``dev_set_drvdata()``h]hdev_set_drvdata()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh call before registering the V4L2 device instance. They must also set the struct v4l2_device mdev field to point to a properly initialized and registered }(hjhhhNhNubh)}(h:c:type:`media_device`h]h)}(hjh]h media_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj media_deviceuh1hhhhKhjubh instance.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXxIf :c:type:`v4l2_dev `\ ->name is empty then it will be set to a value derived from dev (driver name followed by the bus_id, to be precise). If you set it up before calling :c:func:`v4l2_device_register` then it will be untouched. If dev is ``NULL``, then you **must** setup :c:type:`v4l2_dev `\ ->name before calling :c:func:`v4l2_device_register`.h](hIf }(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjubh ->name is empty then it will be set to a value derived from dev (driver name followed by the bus_id, to be precise). If you set it up before calling }(hjhhhNhNubh)}(h:c:func:`v4l2_device_register`h]h)}(hjh]hv4l2_device_register()}(hj!hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_registeruh1hhhhKhjubh& then it will be untouched. If dev is }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh , then you }(hjhhhNhNubhstrong)}(h**must**h]hmust}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh setup }(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjhh]hv4l2_dev}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjubh ->name before calling }(hjhhhNhNubh)}(h:c:func:`v4l2_device_register`h]h)}(hjh]hv4l2_device_register()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_registeruh1hhhhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hX4You can use :c:func:`v4l2_device_set_name` to set the name based on a driver name and a driver-global atomic_t instance. This will generate names like ``ivtv0``, ``ivtv1``, etc. If the name ends with a digit, then it will insert a dash: ``cx18-0``, ``cx18-1``, etc. This function returns the instance number.h](h You can use }(hjhhhNhNubh)}(h:c:func:`v4l2_device_set_name`h]h)}(hjh]hv4l2_device_set_name()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_set_nameuh1hhhhK!hjubhm to set the name based on a driver name and a driver-global atomic_t instance. This will generate names like }(hjhhhNhNubh)}(h ``ivtv0``h]hivtv0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``ivtv1``h]hivtv1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhB, etc. If the name ends with a digit, then it will insert a dash: }(hjhhhNhNubh)}(h ``cx18-0``h]hcx18-0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h ``cx18-1``h]hcx18-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh1, etc. This function returns the instance number.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hhhhubh)}(hXVThe first ``dev`` argument is normally the ``struct device`` pointer of a ``pci_dev``, ``usb_interface`` or ``platform_device``. It is rare for dev to be ``NULL``, but it happens with ISA devices or when one device creates multiple PCI devices, thus making it impossible to associate :c:type:`v4l2_dev ` with a particular parent.h](h The first }(hj+hhhNhNubh)}(h``dev``h]hdev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh argument is normally the }(hj+hhhNhNubh)}(h``struct device``h]h struct device}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh pointer of a }(hj+hhhNhNubh)}(h ``pci_dev``h]hpci_dev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh, }(hj+hhhNhNubh)}(h``usb_interface``h]h usb_interface}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh or }(hj+hhhNhNubh)}(h``platform_device``h]hplatform_device}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh. It is rare for dev to be }(hj+hhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubhz, but it happens with ISA devices or when one device creates multiple PCI devices, thus making it impossible to associate }(hj+hhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK&hj+ubh with a particular parent.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK&hhhhubh)}(hXYou can also supply a ``notify()`` callback that can be called by sub-devices to notify you of events. Whether you need to set this depends on the sub-device. Any notifications a sub-device supports must be defined in a header in ``include/media/subdevice.h``.h](hYou can also supply a }(hjhhhNhNubh)}(h ``notify()``h]hnotify()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh callback that can be called by sub-devices to notify you of events. Whether you need to set this depends on the sub-device. Any notifications a sub-device supports must be defined in a header in }(hjhhhNhNubh)}(h``include/media/subdevice.h``h]hinclude/media/subdevice.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK,hhhhubh)}(h)V4L2 devices are unregistered by calling:h]h)V4L2 devices are unregistered by calling:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hhhhubh)}(hE:c:func:`v4l2_device_unregister` (:c:type:`v4l2_dev `). h]h)}(hD:c:func:`v4l2_device_unregister` (:c:type:`v4l2_dev `).h](h)}(h :c:func:`v4l2_device_unregister`h]h)}(hjh]hv4l2_device_unregister()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_unregisteruh1hhhhK3hj ubh (}(hj hhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hj5h]hv4l2_dev}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK3hj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1hhhhK3hhhhubh)}(hIf the dev->driver_data field points to :c:type:`v4l2_dev `, it will be reset to ``NULL``. Unregistering will also automatically unregister all subdevs from the device.h](h(If the dev->driver_data field points to }(hjbhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjlh]hv4l2_dev}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK6hjbubh, it will be reset to }(hjbhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbubhO. Unregistering will also automatically unregister all subdevs from the device.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hhhhubh)}(hXIf you have a hotpluggable device (e.g. a USB device), then when a disconnect happens the parent device becomes invalid. Since :c:type:`v4l2_device` has a pointer to that parent device it has to be cleared as well to mark that the parent is gone. To do this call:h](hIf you have a hotpluggable device (e.g. a USB device), then when a disconnect happens the parent device becomes invalid. Since }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK:hjubhs has a pointer to that parent device it has to be cleared as well to mark that the parent is gone. To do this call:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK:hhhhubh)}(hE:c:func:`v4l2_device_disconnect` (:c:type:`v4l2_dev `). h]h)}(hD:c:func:`v4l2_device_disconnect` (:c:type:`v4l2_dev `).h](h)}(h :c:func:`v4l2_device_disconnect`h]h)}(hjh]hv4l2_device_disconnect()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_disconnectuh1hhhhK?hjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhK?hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1hhhhK?hhhhubh)}(hThis does *not* unregister the subdevs, so you still need to call the :c:func:`v4l2_device_unregister` function for that. If your driver is not hotpluggable, then there is no need to call :c:func:`v4l2_device_disconnect`.h](h This does }(hj0hhhNhNubhemphasis)}(h*not*h]hnot}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0ubh7 unregister the subdevs, so you still need to call the }(hj0hhhNhNubh)}(h :c:func:`v4l2_device_unregister`h]h)}(hjNh]hv4l2_device_unregister()}(hjPhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_unregisteruh1hhhhKBhj0ubhV function for that. If your driver is not hotpluggable, then there is no need to call }(hj0hhhNhNubh)}(h :c:func:`v4l2_device_disconnect`h]h)}(hjqh]hv4l2_device_disconnect()}(hjshhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_disconnectuh1hhhhKBhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKBhhhhubh)}(hXSometimes you need to iterate over all devices registered by a specific driver. This is usually the case if multiple device drivers use the same hardware. E.g. the ivtvfb driver is a framebuffer driver that uses the ivtv hardware. The same is true for alsa drivers for example.h]hXSometimes you need to iterate over all devices registered by a specific driver. This is usually the case if multiple device drivers use the same hardware. E.g. the ivtvfb driver is a framebuffer driver that uses the ivtv hardware. The same is true for alsa drivers for example.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhhhhubh)}(h7You can iterate over all registered devices as follows:h]h7You can iterate over all registered devices as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhhhhubh literal_block)}(hXstatic int callback(struct device *dev, void *p) { struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); /* test if this device was inited */ if (v4l2_dev == NULL) return 0; ... return 0; } int iterate(void *p) { struct device_driver *drv; int err; /* Find driver 'ivtv' on the PCI bus. pci_bus_type is a global. For USB buses use usb_bus_type. */ drv = driver_find("ivtv", &pci_bus_type); /* iterate over all ivtv device instances */ err = driver_for_each_device(drv, NULL, p, callback); put_driver(drv); return err; }h]hXstatic int callback(struct device *dev, void *p) { struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); /* test if this device was inited */ if (v4l2_dev == NULL) return 0; ... return 0; } int iterate(void *p) { struct device_driver *drv; int err; /* Find driver 'ivtv' on the PCI bus. pci_bus_type is a global. For USB buses use usb_bus_type. */ drv = driver_find("ivtv", &pci_bus_type); /* iterate over all ivtv device instances */ err = driver_for_each_device(drv, NULL, p, callback); put_driver(drv); return err; }}hjsbah}(h]h ]h"]h$]h&]hhforcelanguagejhighlight_args}uh1jhhhKMhhhhubh)}(hSometimes you need to keep a running counter of the device instance. This is commonly used to map a device instance to an index of a module option array.h]hSometimes you need to keep a running counter of the device instance. This is commonly used to map a device instance to an index of a module option array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhhubh)}(h'The recommended approach is as follows:h]h'The recommended approach is as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhhhhubj)}(hstatic atomic_t drv_instance = ATOMIC_INIT(0); static int drv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) { ... state->instance = atomic_inc_return(&drv_instance) - 1; }h]hstatic atomic_t drv_instance = ATOMIC_INIT(0); static int drv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) { ... state->instance = atomic_inc_return(&drv_instance) - 1; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKmhhhhubh)}(hXIf you have multiple device nodes then it can be difficult to know when it is safe to unregister :c:type:`v4l2_device` for hotpluggable devices. For this purpose :c:type:`v4l2_device` has refcounting support. The refcount is increased whenever :c:func:`video_register_device` is called and it is decreased whenever that device node is released. When the refcount reaches zero, then the :c:type:`v4l2_device` release() callback is called. You can do your final cleanup there.h](haIf you have multiple device nodes then it can be difficult to know when it is safe to unregister }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKwhjubh, for hotpluggable devices. For this purpose }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hj h]h v4l2_device}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKwhjubh= has refcounting support. The refcount is increased whenever }(hjhhhNhNubh)}(h:c:func:`video_register_device`h]h)}(hjCh]hvideo_register_device()}(hjEhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjvideo_register_deviceuh1hhhhKwhjubho is called and it is decreased whenever that device node is released. When the refcount reaches zero, then the }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjfh]h v4l2_device}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKwhjubhC release() callback is called. You can do your final cleanup there.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhhhhubh)}(h{If other device nodes (e.g. ALSA) are created, then you can increase and decrease the refcount manually as well by calling:h]h{If other device nodes (e.g. ALSA) are created, then you can increase and decrease the refcount manually as well by calling:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h>:c:func:`v4l2_device_get` (:c:type:`v4l2_dev `). h]h)}(h=:c:func:`v4l2_device_get` (:c:type:`v4l2_dev `).h](h)}(h:c:func:`v4l2_device_get`h]h)}(hjh]hv4l2_device_get()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_getuh1hhhhKhjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hor:h]hor:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h>:c:func:`v4l2_device_put` (:c:type:`v4l2_dev `). h]h)}(h=:c:func:`v4l2_device_put` (:c:type:`v4l2_dev `).h](h)}(h:c:func:`v4l2_device_put`h]h)}(hj h]hv4l2_device_put()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_putuh1hhhhKhjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]h)}(hj0h]hv4l2_dev}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_deviceuh1hhhhKhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hSince the initial refcount is 1 you also need to call :c:func:`v4l2_device_put` in the ``disconnect()`` callback (for USB devices) or in the ``remove()`` callback (for e.g. PCI devices), otherwise the refcount will never reach 0.h](h6Since the initial refcount is 1 you also need to call }(hj]hhhNhNubh)}(h:c:func:`v4l2_device_put`h]h)}(hjgh]hv4l2_device_put()}(hjihhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_device_putuh1hhhhKhj]ubh in the }(hj]hhhNhNubh)}(h``disconnect()``h]h disconnect()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubh& callback (for USB devices) or in the }(hj]hhhNhNubh)}(h ``remove()``h]hremove()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubhL callback (for e.g. PCI devices), otherwise the refcount will never reach 0.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h)v4l2_device functions and data structuresh]h)v4l2_device functions and data structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_device (C struct) c.v4l2_devicehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h v4l2_deviceh]hdesc_signature_line)}(hstruct v4l2_deviceh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h v4l2_deviceh]h desc_sig_name)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhj ubah}(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)}(h&main struct to for V4L2 device driversh]h&main struct to for V4L2 device drivers}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj<hhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]domainjobjtypejWdesctypejWnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX#**Definition**:: struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[36]; void (*notify)(struct v4l2_subdev *sd, unsigned int notification, void *arg); struct v4l2_ctrl_handler *ctrl_handler; struct v4l2_prio_state prio; struct kref ref; void (*release)(struct v4l2_device *v4l2_dev); }; **Members** ``dev`` pointer to struct device. ``mdev`` pointer to struct media_device, may be NULL. ``subdevs`` used to keep track of the registered subdevs ``lock`` lock this struct; can be used by the driver as well if this struct is embedded into a larger struct. ``name`` unique device name, by default the driver name + bus ID ``notify`` notify operation called by some sub-devices. ``ctrl_handler`` The control handler. May be ``NULL``. ``prio`` Device's priority state ``ref`` Keep track of the references to this struct. ``release`` Release function that is called when the ref count goes to 0.h](h)}(h**Definition**::h](jS)}(h**Definition**h]h Definition}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubh:}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjcubj)}(hX{struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[36]; void (*notify)(struct v4l2_subdev *sd, unsigned int notification, void *arg); struct v4l2_ctrl_handler *ctrl_handler; struct v4l2_prio_state prio; struct kref ref; void (*release)(struct v4l2_device *v4l2_dev); };h]hX{struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[36]; void (*notify)(struct v4l2_subdev *sd, unsigned int notification, void *arg); struct v4l2_ctrl_handler *ctrl_handler; struct v4l2_prio_state prio; struct kref ref; void (*release)(struct v4l2_device *v4l2_dev); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjcubh)}(h **Members**h]jS)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK&hjcubhdefinition_list)}(hhh](hdefinition_list_item)}(h"``dev`` pointer to struct device. h](hterm)}(h``dev``h]h)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubh definition)}(hhh]h)}(hpointer to struct device.h]hpointer to struct device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h6``mdev`` pointer to struct media_device, may be NULL. h](j)}(h``mdev``h]h)}(hjh]hmdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(h,pointer to struct media_device, may be NULL.h]h,pointer to struct media_device, may be NULL.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h9``subdevs`` used to keep track of the registered subdevs h](j)}(h ``subdevs``h]h)}(hj. h]hsubdevs}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj, ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj( ubj)}(hhh]h)}(h,used to keep track of the registered subdevsh]h,used to keep track of the registered subdevs}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC hKhjD ubah}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jhjC hKhjubj)}(hn``lock`` lock this struct; can be used by the driver as well if this struct is embedded into a larger struct. h](j)}(h``lock``h]h)}(hjg h]hlock}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhja ubj)}(hhh]h)}(hdlock this struct; can be used by the driver as well if this struct is embedded into a larger struct.h]hdlock this struct; can be used by the driver as well if this struct is embedded into a larger struct.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj} ubah}(h]h ]h"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]uh1jhj| hKhjubj)}(hA``name`` unique device name, by default the driver name + bus ID h](j)}(h``name``h]h)}(hj h]hname}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(h7unique device name, by default the driver name + bus IDh]h7unique device name, by default the driver name + bus ID}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h8``notify`` notify operation called by some sub-devices. h](j)}(h ``notify``h]h)}(hj h]hnotify}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(h,notify operation called by some sub-devices.h]h,notify operation called by some sub-devices.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h7``ctrl_handler`` The control handler. May be ``NULL``. h](j)}(h``ctrl_handler``h]h)}(hj h]h ctrl_handler}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(h%The control handler. May be ``NULL``.h](hThe control handler. May be }(hj, hhhNhNubh)}(h``NULL``h]hNULL}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj, ubh.}(hj, hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj( hKhj) ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj( hKhjubj)}(h!``prio`` Device's priority state h](j)}(h``prio``h]h)}(hj^ h]hprio}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjX ubj)}(hhh]h)}(hDevice's priority stateh]hDevice’s priority state}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs hKhjt ubah}(h]h ]h"]h$]h&]uh1jhjX ubeh}(h]h ]h"]h$]h&]uh1jhjs hKhjubj)}(h5``ref`` Keep track of the references to this struct. h](j)}(h``ref``h]h)}(hj h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(h,Keep track of the references to this struct.h]h,Keep track of the references to this struct.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hI``release`` Release function that is called when the ref count goes to 0.h](j)}(h ``release``h]h)}(hj h]hrelease}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK hj ubj)}(hhh]h)}(h=Release function that is called when the ref count goes to 0.h]h=Release function that is called when the ref count goes to 0.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK hjubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubh)}(h**Description**h]jS)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK$hjhhubh)}(hwEach instance of a V4L2 device should create the v4l2_device struct, either stand-alone or embedded in a larger struct.h]hwEach instance of a V4L2 device should create the v4l2_device struct, either stand-alone or embedded in a larger struct.}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK"hjhhubh)}(hfIt allows easy access to sub-devices (see v4l2-subdev.h) and provides basic V4L2 device-level support.h]hfIt allows easy access to sub-devices (see v4l2-subdev.h) and provides basic V4L2 device-level support.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK%hjhhubhnote)}(hh#) **dev->driver_data** points to this struct. #) **dev** might be ``NULL`` if there is no parent deviceh]henumerated_list)}(hhh](h list_item)}(h+**dev->driver_data** points to this struct.h]h)}(hjU h](jS)}(h**dev->driver_data**h]hdev->driver_data}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW ubh points to this struct.}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK*hjS ubah}(h]h ]h"]h$]h&]uh1jQ hjN ubjR )}(h6**dev** might be ``NULL`` if there is no parent deviceh]h)}(hj{ h](jS)}(h**dev**h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj} ubh might be }(hj} hhhNhNubh)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj} ubh if there is no parent device}(hj} hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK+hjy ubah}(h]h ]h"]h$]h&]uh1jQ hjN ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jL hjH ubah}(h]h ]h"]h$]h&]uh1jF hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_device_get (C function)c.v4l2_device_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(h3void v4l2_device_get (struct v4l2_device *v4l2_dev)h]j)}(h2void v4l2_device_get(struct v4l2_device *v4l2_dev)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKCubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKCubj )}(hv4l2_device_geth]j)}(hv4l2_device_geth]hv4l2_device_get}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj hhhj hKCubhdesc_parameterlist)}(h(struct v4l2_device *v4l2_dev)h]hdesc_parameter)}(hstruct v4l2_device *v4l2_devh](j)}(hjh]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 v4l2_deviceh]h v4l2_device}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj? modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jX ASTIdentifier)}jS j sbc.v4l2_device_getasbuh1hhj ubj)}(h h]h }(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubhdesc_sig_punctuation)}(h*h]h*}(hju hhhNhNubah}(h]h ]pah"]h$]h&]uh1js hj ubj)}(hv4l2_devh]hv4l2_dev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hKCubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj hhhj hKCubah}(h]j ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj hKChj hhubj;)}(hhh]h)}(hgets a V4L2 device referenceh]hgets a V4L2 device reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hj hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hj h]h v4l2_device}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW jZ )}j] ]sbj v4l2_deviceuh1hhj hK>hj ubeh}(h]h ]h"]h$]h&]uh1hhj hK>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]jS)}(hjL h]h Description}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJ ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK@hj ubh)}(hwThis is an ancillary routine meant to increment the usage for the struct :c:type:`v4l2_device` pointed by **v4l2_dev**.h](hIThis is an ancillary routine meant to increment the usage for the struct }(hjb hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjl h]h v4l2_device}(hjn hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK@hjb ubh pointed by }(hjb hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjb ubh.}(hjb hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK@hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_device_put (C function)c.v4l2_device_puthNtauh1jhjhhhNhNubj)}(hhh](j)}(h2int v4l2_device_put (struct v4l2_device *v4l2_dev)h]j)}(h1int v4l2_device_put(struct v4l2_device *v4l2_dev)h](j )}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKPubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKPubj )}(hv4l2_device_puth]j)}(hv4l2_device_puth]hv4l2_device_put}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj hhhj hKPubj )}(h(struct v4l2_device *v4l2_dev)h]j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetj#modnameN classnameNjW jZ )}j] ]j` )}jS j sbc.v4l2_device_putasbuh1hhj ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjt )}(hjw h]h*}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj ubj)}(hv4l2_devh]hv4l2_dev}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hKPubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj hhhj hKPubah}(h]j ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj hKPhj hhubj;)}(hhh]h)}(hputs a V4L2 device referenceh]hputs a V4L2 device reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKIhjhhubah}(h]h ]h"]h$]h&]uh1j:hj hhhj hKPubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jj]jj^j_j`uh1jhhhjhNhNubjb)}(h**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` **Description** This is an ancillary routine meant to decrement the usage for the struct :c:type:`v4l2_device` pointed by **v4l2_dev**.h](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKMhjubj)}(hhh]j)}(hI``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKKhjubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjhKKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jS)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKMhjubh)}(hwThis is an ancillary routine meant to decrement the usage for the struct :c:type:`v4l2_device` pointed by **v4l2_dev**.h](hIThis is an ancillary routine meant to decrement the usage for the struct }(hj7hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjAh]h v4l2_device}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKMhj7ubh pointed by }(hj7hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hKMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!v4l2_device_register (C function)c.v4l2_device_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(hKint v4l2_device_register (struct device *dev, struct v4l2_device *v4l2_dev)h]j)}(hJint v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK^ubj )}(hv4l2_device_registerh]j)}(hv4l2_device_registerh]hv4l2_device_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhjhK^ubj )}(h2(struct device *dev, struct v4l2_device *v4l2_dev)h](j )}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jsbc.v4l2_device_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hdevh]hdev}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjjmodnameN classnameNjW jZ )}j] ]jc.v4l2_device_registerasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjt )}(hjw h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjFubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhK^ubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhK^ubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhK^hjhhubj;)}(hhh]h)}(hHInitialize v4l2_dev and make **dev->driver_data** point to **v4l2_dev**.h](hInitialize v4l2_dev and make }(hjhhhNhNubjS)}(h**dev->driver_data**h]hdev->driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh point to }(hjhhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKShjhhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhK^ubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jj]jj^j_j`uh1jhhhjhNhNubjb)}(hXW**Parameters** ``struct device *dev`` pointer to struct :c:type:`device` ``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` **Description** .. note:: **dev** may be ``NULL`` in rare cases (ISA devices). In such case the caller must fill in the **v4l2_dev->name** field before calling this function.h](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKWhj ubj)}(hhh](j)}(h:``struct device *dev`` pointer to struct :c:type:`device` h](j)}(h``struct device *dev``h]h)}(hj0h]hstruct device *dev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKVhj*ubj)}(hhh]h)}(h"pointer to struct :c:type:`device`h](hpointer to struct }(hjIhhhNhNubh)}(h:c:type:`device`h]h)}(hjSh]hdevice}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jdeviceuh1hhjEhKVhjIubeh}(h]h ]h"]h$]h&]uh1hhjEhKVhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKVhj'ubj)}(hI``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKWhjubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjhKWhjubeh}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]jS)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKYhj ubjG )}(h**dev** may be ``NULL`` in rare cases (ISA devices). In such case the caller must fill in the **v4l2_dev->name** field before calling this function.h]h)}(h**dev** may be ``NULL`` in rare cases (ISA devices). In such case the caller must fill in the **v4l2_dev->name** field before calling this function.h](jS)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh may be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhG in rare cases (ISA devices). In such case the caller must fill in the }(hjhhhNhNubjS)}(h**v4l2_dev->name**h]hv4l2_dev->name}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh$ field before calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKZhjubah}(h]h ]h"]h$]h&]uh1jF hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!v4l2_device_set_name (C function)c.v4l2_device_set_namehNtauh1jhjhhhNhNubj)}(hhh](j)}(haint v4l2_device_set_name (struct v4l2_device *v4l2_dev, const char *basename, atomic_t *instance)h]j)}(h`int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename, atomic_t *instance)h](j )}(hinth]hint}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj_hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK|ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhK|ubj )}(hv4l2_device_set_nameh]j)}(hv4l2_device_set_nameh]hv4l2_device_set_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj_hhhjqhK|ubj )}(hH(struct v4l2_device *v4l2_dev, const char *basename, atomic_t *instance)h](j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jsbc.v4l2_device_set_nameasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst char *basenameh](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hbasenameh]hbasename}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hatomic_t *instanceh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjumodnameN classnameNjW jZ )}j] ]jc.v4l2_device_set_nameasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjt )}(hjw h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjlubj)}(hinstanceh]hinstance}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hj_hhhjqhK|ubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj[hhhjqhK|ubah}(h]jVah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjqhK|hjXhhubj;)}(hhh]h)}(hNOptional function to initialize the name field of struct :c:type:`v4l2_device`h](h9Optional function to initialize the name field of struct }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW jZ )}j] ]jc.v4l2_device_set_nameasbj v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKbhjhhubah}(h]h ]h"]h$]h&]uh1j:hjXhhhjqhK|ubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jj]jj^j_j`uh1jhhhjhNhNubjb)}(hXe**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` ``const char *basename`` base name for the device name ``atomic_t *instance`` pointer to a static atomic_t var with the instance usage for the device driver. **Description** v4l2_device_set_name() initializes the name field of struct :c:type:`v4l2_device` using the driver name and a driver-global atomic_t instance. This function will increment the instance counter and returns the instance value used in the name. The first time this is called the name field will be set to foo0 and this function returns 0. If the name ends with a digit (e.g. cx18), then the name will be set to cx18-0 since cx180 would look really odd. **Example** static atomic_t drv_instance = ATOMIC_INIT(0); ... instance = v4l2_device_set_name(&\ v4l2_dev, "foo", &\ drv_instance);h](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKfhjubj)}(hhh](j)}(hI``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hj<h]hstruct v4l2_device *v4l2_dev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKehj6ubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hjUhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hj_h]h v4l2_device}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjQhKehjUubeh}(h]h ]h"]h$]h&]uh1hhjQhKehjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKehj3ubj)}(h7``const char *basename`` base name for the device name h](j)}(h``const char *basename``h]h)}(hjh]hconst char *basename}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKfhjubj)}(hhh]h)}(hbase name for the device nameh]hbase name for the device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhj3ubj)}(hg``atomic_t *instance`` pointer to a static atomic_t var with the instance usage for the device driver. h](j)}(h``atomic_t *instance``h]h)}(hjh]hatomic_t *instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhhjubj)}(hhh]h)}(hOpointer to a static atomic_t var with the instance usage for the device driver.h]hOpointer to a static atomic_t var with the instance usage for the device driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jS)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKjhjubh)}(hv4l2_device_set_name() initializes the name field of struct :c:type:`v4l2_device` using the driver name and a driver-global atomic_t instance.h](hdev** to NULL.h](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]j)}(h?``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jS)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubh)}(hShould be called when the USB parent disconnects. Since the parent disappears, this ensures that **v4l2_dev** doesn't have an invalid parent pointer.h](haShould be called when the USB parent disconnects. Since the parent disappears, this ensures that }(hj0hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubh* doesn’t have an invalid parent pointer.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubjG )}(h-This function sets **v4l2_dev->dev** to NULL.h]h)}(hjSh](hThis function sets }(hjUhhhNhNubjS)}(h**v4l2_dev->dev**h]h v4l2_dev->dev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubh to NULL.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjQubah}(h]h ]h"]h$]h&]uh1jF hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_device_unregister (C function)c.v4l2_device_unregisterhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:void v4l2_device_unregister (struct v4l2_device *v4l2_dev)h]j)}(h9void v4l2_device_unregister(struct v4l2_device *v4l2_dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj )}(hv4l2_device_unregisterh]j)}(hv4l2_device_unregisterh]hv4l2_device_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct v4l2_device *v4l2_dev)h]j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jsbc.v4l2_device_unregisterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hv4l2_devh]hv4l2_dev}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhKhjhhubj;)}(hhh]h)}(hKUnregister all sub-devices and any other resources related to **v4l2_dev**.h](h>Unregister all sub-devices and any other resources related to }(hj[hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jj]jj^j_j`uh1jhhhjhNhNubjb)}(hP**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]j)}(h>``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%v4l2_device_register_subdev (C macro)c.v4l2_device_register_subdevhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_register_subdevh]j)}(hv4l2_device_register_subdevh]j )}(hv4l2_device_register_subdevh]j)}(hjh]hv4l2_device_register_subdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhKhjhhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j8j]j8j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_register_subdev (v4l2_dev, sd)``h]h)}(hj>h]h*v4l2_device_register_subdev (v4l2_dev, sd)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjhhubh)}(h'Registers a subdev with a v4l2 device. h]h)}(h&Registers a subdev with a v4l2 device.h]h&Registers a subdev with a v4l2 device.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjTubah}(h]h ]h"]h$]h&]uh1hhjfhKhjhhubjb)}(hX)**Parameters** ``v4l2_dev`` pointer to struct :c:type:`v4l2_device` ``sd`` pointer to :c:type:`struct v4l2_subdev ` **Description** While registered, the subdev module is marked as in-use. An error is returned if the module is no longer loaded on any attempts to register it.h](h)}(h**Parameters**h]jS)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjmubj)}(hhh](j)}(h5``v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``v4l2_dev``h]h)}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h=``sd`` pointer to :c:type:`struct v4l2_subdev ` h](j)}(h``sd``h]h)}(hjh]hsd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hjhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj h]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]jS)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjmubh)}(h8While registered, the subdev module is marked as in-use.h]h8While registered, the subdev module is marked as in-use.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjmubh)}(hVAn error is returned if the module is no longer loaded on any attempts to register it.h]hVAn error is returned if the module is no longer loaded on any attempts to register it.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*v4l2_device_unregister_subdev (C function)c.v4l2_device_unregister_subdevhNtauh1jhjhhhNhNubj)}(hhh](j)}(h;void v4l2_device_unregister_subdev (struct v4l2_subdev *sd)h]j)}(h:void v4l2_device_unregister_subdev(struct v4l2_subdev *sd)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj )}(hv4l2_device_unregister_subdevh]j)}(hv4l2_device_unregister_subdevh]hv4l2_device_unregister_subdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct v4l2_subdev *sd)h]j )}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h v4l2_subdevh]h v4l2_subdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jsbc.v4l2_device_unregister_subdevasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hsdh]hsd}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhKhjhhubj;)}(hhh]h)}(h(Unregisters a subdev with a v4l2 device.h]h(Unregisters a subdev with a v4l2 device.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjUhhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jpj]jpj^j_j`uh1jhhhjhNhNubjb)}(h**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` **Description** .. note :: Can also be called if the subdev wasn't registered. In such case, it will do nothing.h](h)}(h**Parameters**h]jS)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjtubj)}(hhh]j)}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j)}(h``struct v4l2_subdev *sd``h]h)}(hjh]hstruct v4l2_subdev *sd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hjhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hjh]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]jS)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjtubjG )}(hUCan also be called if the subdev wasn't registered. In such case, it will do nothing.h]h)}(hUCan also be called if the subdev wasn't registered. In such case, it will do nothing.h]hWCan also be called if the subdev wasn’t registered. In such case, it will do nothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubah}(h]h ]h"]h$]h&]uh1jF hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0__v4l2_device_register_subdev_nodes (C function)%c.__v4l2_device_register_subdev_nodeshNtauh1jhjhhhNhNubj)}(hhh](j)}(hVint __v4l2_device_register_subdev_nodes (struct v4l2_device *v4l2_dev, bool read_only)h]j)}(hUint __v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev, bool read_only)h](j )}(hinth]hint}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhKubj )}(h#__v4l2_device_register_subdev_nodesh]j)}(h#__v4l2_device_register_subdev_nodesh]h#__v4l2_device_register_subdev_nodes}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj>hhhjPhKubj )}(h.(struct v4l2_device *v4l2_dev, bool read_only)h](j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jesb%c.__v4l2_device_register_subdev_nodesasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjt )}(hjw h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj{ubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjwubj )}(hbool read_onlyh](j )}(hboolh]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h read_onlyh]h read_only}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjwubeh}(h]h ]h"]h$]h&]hhuh1j hj>hhhjPhKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj:hhhjPhKubah}(h]j5ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjPhKhj7hhubj;)}(hhh]h)}(hwRegisters device nodes for all subdevs of the v4l2 device that are marked with the ``V4L2_SUBDEV_FL_HAS_DEVNODE`` flag.h](hSRegisters device nodes for all subdevs of the v4l2 device that are marked with the }(hj7hhhNhNubh)}(h``V4L2_SUBDEV_FL_HAS_DEVNODE``h]hV4L2_SUBDEV_FL_HAS_DEVNODE}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubh flag.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj4hhubah}(h]h ]h"]h$]h&]uh1j:hj7hhhjPhKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jaj]jaj^j_j`uh1jhhhjhNhNubjb)}(hX**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device ``bool read_only`` subdevices read-only flag. True to register the subdevices device nodes in read-only mode, false to allow full access to the subdevice userspace API.h](h)}(h**Parameters**h]jS)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjeubj)}(hhh](j)}(h?``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``bool read_only`` subdevices read-only flag. True to register the subdevices device nodes in read-only mode, false to allow full access to the subdevice userspace API.h](j)}(h``bool read_only``h]h)}(hjh]hbool read_only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(hsubdevices read-only flag. True to register the subdevices device nodes in read-only mode, false to allow full access to the subdevice userspace API.h]hsubdevices read-only flag. True to register the subdevices device nodes in read-only mode, false to allow full access to the subdevice userspace API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.v4l2_device_register_subdev_nodes (C function)#c.v4l2_device_register_subdev_nodeshNtauh1jhjhhhNhNubj)}(hhh](j)}(hDint v4l2_device_register_subdev_nodes (struct v4l2_device *v4l2_dev)h]j)}(hCint v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hKubj )}(h!v4l2_device_register_subdev_nodesh]j)}(h!v4l2_device_register_subdev_nodesh]h!v4l2_device_register_subdev_nodes}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhj+hKubj )}(h(struct v4l2_device *v4l2_dev)h]j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjzmodnameN classnameNjW jZ )}j] ]j` )}jS j@sb#c.v4l2_device_register_subdev_nodesasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjt )}(hjw h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjVubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjRubah}(h]h ]h"]h$]h&]hhuh1j hjhhhj+hKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhj+hKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj+hKhjhhubj;)}(hhh]h)}(h`Registers subdevices device nodes with unrestricted access to the subdevice userspace operationsh]h`Registers subdevices device nodes with unrestricted access to the subdevice userspace operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j:hjhhhj+hKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jj]jj^j_j`uh1jhhhjhNhNubjb)}(h**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device **Description** Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.h](h)}(h**Parameters**h]jS)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]j)}(h?``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hjh]hstruct v4l2_device *v4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jS)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubh)}(h_Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.h]h_Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1v4l2_device_register_ro_subdev_nodes (C function)&c.v4l2_device_register_ro_subdev_nodeshNtauh1jhjhhhNhNubj)}(hhh](j)}(hGint v4l2_device_register_ro_subdev_nodes (struct v4l2_device *v4l2_dev)h]j)}(hFint v4l2_device_register_ro_subdev_nodes(struct v4l2_device *v4l2_dev)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj )}(h$v4l2_device_register_ro_subdev_nodesh]j)}(h$v4l2_device_register_ro_subdev_nodesh]h$v4l2_device_register_ro_subdev_nodes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct v4l2_device *v4l2_dev)h]j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetjmodnameN classnameNjW jZ )}j] ]j` )}jS jsb&c.v4l2_device_register_ro_subdev_nodesasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjt )}(hjw h]h*}(hj' hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjubj)}(hv4l2_devh]hv4l2_dev}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhKhjhhubj;)}(hhh]h)}(h3Registers subdevices device nodes in read-only modeh]h3Registers subdevices device nodes in read-only mode}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj[ hhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jv j]jv j^j_j`uh1jhhhjhNhNubjb)}(h**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device **Description** Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.h](h)}(h**Parameters**h]jS)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjz ubj)}(hhh]j)}(h?``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device h](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hj h]hstruct v4l2_device *v4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj ubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubh)}(h**Description**h]jS)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjz ubh)}(h_Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.h]h_Internally calls __v4l2_device_register_subdev_nodes(). See its documentation for more details.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjz ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_subdev_notify (C function)c.v4l2_subdev_notifyhNtauh1jhjhhhNhNubj)}(hhh](j)}(hVvoid v4l2_subdev_notify (struct v4l2_subdev *sd, unsigned int notification, void *arg)h]j)}(hUvoid v4l2_subdev_notify(struct v4l2_subdev *sd, unsigned int notification, void *arg)h](j )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hj.!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj-!hKubj )}(hv4l2_subdev_notifyh]j)}(hv4l2_subdev_notifyh]hv4l2_subdev_notify}(hj@!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(struct v4l2_subdev *sd, unsigned int notification, void *arg)h](j )}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hj\!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX!ubj)}(h h]h }(hji!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX!ubh)}(hhh]j)}(h v4l2_subdevh]h v4l2_subdev}(hjz!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw!ubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetj|!modnameN classnameNjW jZ )}j] ]j` )}jS jB!sbc.v4l2_subdev_notifyasbuh1hhjX!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX!ubjt )}(hjw h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hjX!ubj)}(hsdh]hsd}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjT!ubj )}(hunsigned int notificationh](j )}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj )}(hinth]hint}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h notificationh]h notification}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjT!ubj )}(h void *argh](j )}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"ubj)}(h h]h }(hj-"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjt )}(hjw h]h*}(hj;"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj"ubj)}(hargh]harg}(hjH"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjT!ubeh}(h]h ]h"]h$]h&]hhuh1j hj!hhhj-!hKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj!hhhj-!hKubah}(h]j!ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj-!hKhj!hhubj;)}(hhh]h)}(h$Sends a notification to v4l2_device.h]h$Sends a notification to v4l2_device.}(hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjo"hhubah}(h]h ]h"]h$]h&]uh1j:hj!hhhj-!hKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\j"j]j"j^j_j`uh1jhhhjhNhNubjb)}(hX9**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``unsigned int notification`` type of notification. Please notice that the notification type is driver-specific. ``void *arg`` arguments for the notification. Those are specific to each notification type.h](h)}(h**Parameters**h]jS)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj"ubj)}(hhh](j)}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j)}(h``struct v4l2_subdev *sd``h]h)}(hj"h]hstruct v4l2_subdev *sd}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj"ubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hj"hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj"h]hstruct v4l2_subdev}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhj"hKhj"ubeh}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhj"ubj)}(hq``unsigned int notification`` type of notification. Please notice that the notification type is driver-specific. h](j)}(h``unsigned int notification``h]h)}(hj #h]hunsigned int notification}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj #ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj#ubj)}(hhh]h)}(hRtype of notification. Please notice that the notification type is driver-specific.h]hRtype of notification. Please notice that the notification type is driver-specific.}(hj$#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj!#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj #hKhj"ubj)}(h[``void *arg`` arguments for the notification. Those are specific to each notification type.h](j)}(h ``void *arg``h]h)}(hjE#h]h void *arg}(hjG#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj?#ubj)}(hhh]h)}(hMarguments for the notification. Those are specific to each notification type.h]hMarguments for the notification. Those are specific to each notification type.}(hj^#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ#hKhj[#ubah}(h]h ]h"]h$]h&]uh1jhj?#ubeh}(h]h ]h"]h$]h&]uh1jhjZ#hKhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*v4l2_device_supports_requests (C function)c.v4l2_device_supports_requestshNtauh1jhjhhhNhNubj)}(hhh](j)}(hAbool v4l2_device_supports_requests (struct v4l2_device *v4l2_dev)h]j)}(h@bool v4l2_device_supports_requests(struct v4l2_device *v4l2_dev)h](j )}(hjh]hbool}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hKubj )}(hv4l2_device_supports_requestsh]j)}(hv4l2_device_supports_requestsh]hv4l2_device_supports_requests}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj#hhhj#hKubj )}(h(struct v4l2_device *v4l2_dev)h]j )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]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 v4l2_deviceh]h v4l2_device}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypejS reftargetj#modnameN classnameNjW jZ )}j] ]j` )}jS j#sbc.v4l2_device_supports_requestsasbuh1hhj#ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjt )}(hjw h]h*}(hj&$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1js hj#ubj)}(hv4l2_devh]hv4l2_dev}(hj3$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#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 ](j2j3eh"]h$]h&]j7j8)j9huh1jhj#hKhj#hhubj;)}(hhh]h)}(hTest if requests are supported.h]hTest if requests are supported.}(hj]$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjZ$hhubah}(h]h ]h"]h$]h&]uh1j:hj#hhhj#hKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\ju$j]ju$j^j_j`uh1jhhhjhNhNubjb)}(hP**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](h)}(h**Parameters**h]jS)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}$ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjy$ubj)}(hhh]j)}(h>``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](j)}(h ``struct v4l2_device *v4l2_dev``h]h)}(hj$h]hstruct v4l2_device *v4l2_dev}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj$ubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjy$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%v4l2_device_for_each_subdev (C macro)c.v4l2_device_for_each_subdevhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_for_each_subdevh]j)}(hv4l2_device_for_each_subdevh]j )}(hv4l2_device_for_each_subdevh]j)}(hj$h]hv4l2_device_for_each_subdev}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj$hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj$hhhj%hMubah}(h]j$ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj%hMhj$hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj$hhhj%hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j(%j]j(%j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_for_each_subdev (sd, v4l2_dev)``h]h)}(hj.%h]h*v4l2_device_for_each_subdev (sd, v4l2_dev)}(hj0%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,%ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(hSHelper macro that interates over all sub-devices of a given :c:type:`v4l2_device`. h]h)}(hRHelper macro that interates over all sub-devices of a given :c:type:`v4l2_device`.h](h` pointer used as an iterator by the loop. ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. **Description** This macro iterates over all sub-devices owned by the **v4l2_dev** device. It acts as a for loop iterator and executes the next statement with the **sd** variable pointing to each sub-device in turn.h](h)}(h**Parameters**h]jS)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj%ubj)}(hhh](j)}(h``sd`` pointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` pointer used as an iterator by the loop. h](j)}(h``sd``h]h)}(hj%h]hsd}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj%ubj)}(hhh]h)}(hpointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` pointer used as an iterator by the loop.h](h2pointer that will be filled by the macro with all }(hj%hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj%h]hstruct v4l2_subdev}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj%ubh) pointer used as an iterator by the loop.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj&h]hv4l2_dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj%ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj!&h]hstruct v4l2_device}(hj#&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj&hMhj&ubh( owning the sub-devices to iterate over.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]jS)}(hj\&h]h Description}(hj^&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZ&ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj%ubh)}(hThis macro iterates over all sub-devices owned by the **v4l2_dev** device. It acts as a for loop iterator and executes the next statement with the **sd** variable pointing to each sub-device in turn.h](h6This macro iterates over all sub-devices owned by the }(hjr&hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjz&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr&ubhQ device. It acts as a for loop iterator and executes the next statement with the }(hjr&hhhNhNubjS)}(h**sd**h]hsd}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr&ubh. variable pointing to each sub-device in turn.}(hjr&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&__v4l2_device_call_subdevs_p (C macro)c.__v4l2_device_call_subdevs_phNtauh1jhjhhhNhNubj)}(hhh](j)}(h__v4l2_device_call_subdevs_ph]j)}(h__v4l2_device_call_subdevs_ph]j )}(h__v4l2_device_call_subdevs_ph]j)}(hj&h]h__v4l2_device_call_subdevs_p}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj&hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM%ubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj&hhhj&hM%ubah}(h]j&ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj&hM%hj&hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj&hhhj&hM%ubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j&j]j&j^j_j`uh1jhhhjhNhNubh)}(hD``__v4l2_device_call_subdevs_p (v4l2_dev, sd, cond, o, f, args...)``h]h)}(hj&h]h@__v4l2_device_call_subdevs_p (v4l2_dev, sd, cond, o, f, args...)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM'hjhhubh)}(hFCalls the specified operation for all subdevs matching the condition. h]h)}(hECalls the specified operation for all subdevs matching the condition.h]hECalls the specified operation for all subdevs matching the condition.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj'ubah}(h]h ]h"]h$]h&]uh1hhj#'hMhjhhubjb)}(hX(**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``sd`` pointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` pointer used as an iterator by the loop. ``cond`` condition to be match ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** Ignore any errors. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj0'h]h Parameters}(hj2'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.'ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*'ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjO'h]hv4l2_dev}(hjQ'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM'ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjI'ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjn'h]hstruct v4l2_device}(hjp'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjl'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjd'hMhjh'ubh( owning the sub-devices to iterate over.}(hjh'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjd'hMhje'ubah}(h]h ]h"]h$]h&]uh1jhjI'ubeh}(h]h ]h"]h$]h&]uh1jhjd'hMhjF'ubj)}(h``sd`` pointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` pointer used as an iterator by the loop. h](j)}(h``sd``h]h)}(hj'h]hsd}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj'ubj)}(hhh]h)}(hpointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` pointer used as an iterator by the loop.h](h2pointer that will be filled by the macro with all }(hj'hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj'h]hstruct v4l2_subdev}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj'ubh) pointer used as an iterator by the loop.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjF'ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]h)}(hj(h]hcond}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj'ubj)}(hhh]h)}(hcondition to be matchh]hcondition to be match}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjF'ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj=(h]ho}(hj?(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;(ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj7(ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hjV(hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj`(h]hstruct v4l2_subdev_ops}(hjb(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj^(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjV(ubh that contains }(hjV(hhhNhNubjS)}(h**f**h]hf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjV(ubh:. Each element there groups a set of operations functions.}(hjV(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}(hMhjS(ubah}(h]h ]h"]h$]h&]uh1jhj7(ubeh}(h]h ]h"]h$]h&]uh1jhjR(hMhjF'ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hj(h]hf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj(ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj(hhhNhNubjS)}(h**cond**h]hcond}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubhV matches. The operation functions are defined in groups, according to each element at }(hj(hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj(h]hstruct v4l2_subdev_ops}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjF'ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj)h]hargs...}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj)ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj4)hhhNhNubjS)}(h**f**h]hf}(hj<)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4)ubh.}(hj4)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0)hMhj1)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj0)hMhjF'ubeh}(h]h ]h"]h$]h&]uh1jhj*'ubh)}(h**Description**h]jS)}(hjh)h]h Description}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjf)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj*'ubh)}(hIgnore any errors.h]hIgnore any errors.}(hj~)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj*'ubh)}(h**Note**h]jS)}(hj)h]hNote}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hj*'ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hj*'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$__v4l2_device_call_subdevs (C macro)c.__v4l2_device_call_subdevshNtauh1jhjhhhNhNubj)}(hhh](j)}(h__v4l2_device_call_subdevsh]j)}(h__v4l2_device_call_subdevsh]j )}(h__v4l2_device_call_subdevsh]j)}(hj)h]h__v4l2_device_call_subdevs}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj)hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM>ubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj)hhhj)hM>ubah}(h]j)ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj)hM>hj)hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj)hhhj)hM>ubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j*j]j*j^j_j`uh1jhhhjhNhNubh)}(h>``__v4l2_device_call_subdevs (v4l2_dev, cond, o, f, args...)``h]h)}(hj *h]h:__v4l2_device_call_subdevs (v4l2_dev, cond, o, f, args...)}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM@hjhhubh)}(hFCalls the specified operation for all subdevs matching the condition. h]h)}(hECalls the specified operation for all subdevs matching the condition.h]hECalls the specified operation for all subdevs matching the condition.}(hj$*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM-hj *ubah}(h]h ]h"]h$]h&]uh1hhj2*hM-hjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``cond`` condition to be match ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** Ignore any errors. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj?*h]h Parameters}(hjA*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM1hj9*ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj^*h]hv4l2_dev}(hj`*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM0hjX*ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj}*h]hstruct v4l2_device}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj{*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjs*hM0hjw*ubh( owning the sub-devices to iterate over.}(hjw*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjs*hM0hjt*ubah}(h]h ]h"]h$]h&]uh1jhjX*ubeh}(h]h ]h"]h$]h&]uh1jhjs*hM0hjU*ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]h)}(hj*h]hcond}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM1hj*ubj)}(hhh]h)}(hcondition to be matchh]hcondition to be match}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM1hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM1hjU*ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj*h]ho}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM3hj*ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj+hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj+h]hstruct v4l2_subdev_ops}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM2hj+ubh that contains }(hj+hhhNhNubjS)}(h**f**h]hf}(hj4+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubh:. Each element there groups a set of operations functions.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/+hM2hj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hM3hjU*ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hj^+h]hf}(hj`+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\+ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM6hjX+ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hjw+hhhNhNubjS)}(h**cond**h]hcond}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjw+ubhV matches. The operation functions are defined in groups, according to each element at }(hjw+hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj+h]hstruct v4l2_subdev_ops}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM4hjw+ubh.}(hjw+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM4hjt+ubah}(h]h ]h"]h$]h&]uh1jhjX+ubeh}(h]h ]h"]h$]h&]uh1jhjs+hM6hjU*ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj+h]hargs...}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM7hj+ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj+hhhNhNubjS)}(h**f**h]hf}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM7hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM7hjU*ubeh}(h]h ]h"]h$]h&]uh1jhj9*ubh)}(h**Description**h]jS)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM9hj9*ubh)}(hIgnore any errors.h]hIgnore any errors.}(hj0,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM9hj9*ubh)}(h**Note**h]jS)}(hjA,h]hNote}(hjC,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM;hj9*ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjW,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM;hj9*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0__v4l2_device_call_subdevs_until_err_p (C macro)(c.__v4l2_device_call_subdevs_until_err_phNtauh1jhjhhhNhNubj)}(hhh](j)}(h&__v4l2_device_call_subdevs_until_err_ph]j)}(h&__v4l2_device_call_subdevs_until_err_ph]j )}(h&__v4l2_device_call_subdevs_until_err_ph]j)}(hj,h]h&__v4l2_device_call_subdevs_until_err_p}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj,hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM^ubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj~,hhhj,hM^ubah}(h]jy,ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj,hM^hj{,hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj{,hhhj,hM^ubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j,j]j,j^j_j`uh1jhhhjhNhNubh)}(hN``__v4l2_device_call_subdevs_until_err_p (v4l2_dev, sd, cond, o, f, args...)``h]h)}(hj,h]hJ__v4l2_device_call_subdevs_until_err_p (v4l2_dev, sd, cond, o, f, args...)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM`hjhhubh)}(hFCalls the specified operation for all subdevs matching the condition. h]h)}(hECalls the specified operation for all subdevs matching the condition.h]hECalls the specified operation for all subdevs matching the condition.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMGhj,ubah}(h]h ]h"]h$]h&]uh1hhj,hMGhjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``sd`` pointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` sub-devices associated with **v4l2_dev**. ``cond`` condition to be match ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Return** **Description** If the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMKhj,ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj-h]hv4l2_dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMJhj -ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj/-h]hstruct v4l2_device}(hj1-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj--ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj%-hMJhj)-ubh( owning the sub-devices to iterate over.}(hj)-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%-hMJhj&-ubah}(h]h ]h"]h$]h&]uh1jhj -ubeh}(h]h ]h"]h$]h&]uh1jhj%-hMJhj-ubj)}(h``sd`` pointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` sub-devices associated with **v4l2_dev**. h](j)}(h``sd``h]h)}(hjh-h]hsd}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMLhjb-ubj)}(hhh]h)}(hpointer that will be filled by the macro with all :c:type:`struct v4l2_subdev ` sub-devices associated with **v4l2_dev**.h](h2pointer that will be filled by the macro with all }(hj-hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj-h]hstruct v4l2_subdev}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMKhj-ubh sub-devices associated with }(hj-hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMKhj~-ubah}(h]h ]h"]h$]h&]uh1jhjb-ubeh}(h]h ]h"]h$]h&]uh1jhj}-hMLhj-ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]h)}(hj-h]hcond}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMMhj-ubj)}(hhh]h)}(hcondition to be matchh]hcondition to be match}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMMhj-ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj.h]ho}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMOhj .ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj).hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj3.h]hstruct v4l2_subdev_ops}(hj5.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj1.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMNhj).ubh that contains }(hj).hhhNhNubjS)}(h**f**h]hf}(hjU.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj).ubh:. Each element there groups a set of operations functions.}(hj).hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjP.hMNhj&.ubah}(h]h ]h"]h$]h&]uh1jhj .ubeh}(h]h ]h"]h$]h&]uh1jhj%.hMOhj-ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hj.h]hf}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMRhjy.ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj.hhhNhNubjS)}(h**cond**h]hcond}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubhV matches. The operation functions are defined in groups, according to each element at }(hj.hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj.h]hstruct v4l2_subdev_ops}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMPhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMPhj.ubah}(h]h ]h"]h$]h&]uh1jhjy.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMRhj-ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj.h]hargs...}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMShj.ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj/hhhNhNubjS)}(h**f**h]hf}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hMShj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hMShj-ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h **Return**h]jS)}(hj;/h]hReturn}(hj=/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMUhj,ubh)}(h**Description**h]jS)}(hjS/h]h Description}(hjU/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQ/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMVhj,ubh)}(hIf the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise.h](h2If the operation returns an error other than 0 or }(hji/hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji/ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hji/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMWhj,ubh)}(h**Note**h]jS)}(hj/h]hNote}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM[hj,ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM[hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.__v4l2_device_call_subdevs_until_err (C macro)&c.__v4l2_device_call_subdevs_until_errhNtauh1jhjhhhNhNubj)}(hhh](j)}(h$__v4l2_device_call_subdevs_until_errh]j)}(h$__v4l2_device_call_subdevs_until_errh]j )}(h$__v4l2_device_call_subdevs_until_errh]j)}(hj/h]h$__v4l2_device_call_subdevs_until_err}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj/hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj/hhhj/hMubah}(h]j/ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj/hMhj/hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj/hhhj/hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j0j]j0j^j_j`uh1jhhhjhNhNubh)}(hH``__v4l2_device_call_subdevs_until_err (v4l2_dev, cond, o, f, args...)``h]h)}(hj0h]hD__v4l2_device_call_subdevs_until_err (v4l2_dev, cond, o, f, args...)}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(hFCalls the specified operation for all subdevs matching the condition. h]h)}(hECalls the specified operation for all subdevs matching the condition.h]hECalls the specified operation for all subdevs matching the condition.}(hj!0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMlhj0ubah}(h]h ]h"]h$]h&]uh1hhj/0hMlhjhhubjb)}(hX"**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``cond`` condition to be match ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Return** **Description** If the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj<0h]h Parameters}(hj>0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMphj60ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj[0h]hv4l2_dev}(hj]0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMohjU0ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjz0h]hstruct v4l2_device}(hj|0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjx0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjp0hMohjt0ubh( owning the sub-devices to iterate over.}(hjt0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjp0hMohjq0ubah}(h]h ]h"]h$]h&]uh1jhjU0ubeh}(h]h ]h"]h$]h&]uh1jhjp0hMohjR0ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]h)}(hj0h]hcond}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMphj0ubj)}(hhh]h)}(hcondition to be matchh]hcondition to be match}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMphj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMphjR0ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj0h]ho}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMrhj0ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj 1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMqhj1ubh that contains }(hj1hhhNhNubjS)}(h**f**h]hf}(hj11hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubh:. Each element there groups a set of operations functions.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,1hMqhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMrhjR0ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hj[1h]hf}(hj]1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMuhjU1ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hjt1hhhNhNubjS)}(h**cond**h]hcond}(hj|1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt1ubhV matches. The operation functions are defined in groups, according to each element at }(hjt1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMshjt1ubh.}(hjt1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMshjq1ubah}(h]h ]h"]h$]h&]uh1jhjU1ubeh}(h]h ]h"]h$]h&]uh1jhjp1hMuhjR0ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj1h]hargs...}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMvhj1ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj1hhhNhNubjS)}(h**f**h]hf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMvhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMvhjR0ubeh}(h]h ]h"]h$]h&]uh1jhj60ubh)}(h **Return**h]jS)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMxhj60ubh)}(h**Description**h]jS)}(hj/2h]h Description}(hj12hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMyhj60ubh)}(hIf the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise.h](h2If the operation returns an error other than 0 or }(hjE2hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hjM2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE2ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hjE2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMzhj60ubh)}(h**Note**h]jS)}(hjh2h]hNote}(hjj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjf2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM~hj60ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hj~2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM~hj60ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_device_call_all (C macro)c.v4l2_device_call_allhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_call_allh]j)}(hv4l2_device_call_allh]j )}(hv4l2_device_call_allh]j)}(hj2h]hv4l2_device_call_all}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj2hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj2hhhj2hMubah}(h]j2ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj2hMhj2hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj2hhhj2hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j2j]j2j^j_j`uh1jhhhjhNhNubh)}(h9``v4l2_device_call_all (v4l2_dev, grpid, o, f, args...)``h]h)}(hj2h]h5v4l2_device_call_all (v4l2_dev, grpid, o, f, args...)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(hCalls the specified operation for all subdevs matching the :c:type:`v4l2_subdev.grp_id `, as assigned by the bridge driver. h]h)}(hCalls the specified operation for all subdevs matching the :c:type:`v4l2_subdev.grp_id `, as assigned by the bridge driver.h](h;Calls the specified operation for all subdevs matching the }(hj2hhhNhNubh)}(h*:c:type:`v4l2_subdev.grp_id `h]h)}(hj3h]hv4l2_subdev.grp_id}(hj 3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj2ubh#, as assigned by the bridge driver.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$3hMhj2ubah}(h]h ]h"]h$]h&]uh1hhj$3hMhjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** Ignore any errors. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj;3h]h Parameters}(hj=3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj93ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj53ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjZ3h]hv4l2_dev}(hj\3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjT3ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjy3h]hstruct v4l2_device}(hj{3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjw3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjo3hMhjs3ubh( owning the sub-devices to iterate over.}(hjs3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjo3hMhjp3ubah}(h]h ]h"]h$]h&]uh1jhjT3ubeh}(h]h ]h"]h$]h&]uh1jhjo3hMhjQ3ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]h)}(hj3h]hgrpid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubj)}(hhh]h)}(h^:c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all.h](h)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj3h]hstruct v4l2_subdev}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubh4->grp_id group ID to match. Use 0 to match them all.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjQ3ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj 4h]ho}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj$4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj.4h]hstruct v4l2_subdev_ops}(hj04hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj,4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$4ubh that contains }(hj$4hhhNhNubjS)}(h**f**h]hf}(hjP4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$4ubh:. Each element there groups a set of operations functions.}(hj$4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjK4hMhj!4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 4hMhjQ3ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hjz4h]hf}(hj|4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjt4ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj4hhhNhNubjS)}(h**cond**h]hcond}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubhV matches. The operation functions are defined in groups, according to each element at }(hj4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj4h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjt4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjQ3ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj4h]hargs...}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj5hhhNhNubjS)}(h**f**h]hf}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjQ3ubeh}(h]h ]h"]h$]h&]uh1jhj53ubh)}(h**Description**h]jS)}(hj65h]h Description}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj45ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj53ubh)}(hIgnore any errors.h]hIgnore any errors.}(hjL5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj53ubh)}(h**Note**h]jS)}(hj]5h]hNote}(hj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj53ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjs5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj53ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$v4l2_device_call_until_err (C macro)c.v4l2_device_call_until_errhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_call_until_errh]j)}(hv4l2_device_call_until_errh]j )}(hv4l2_device_call_until_errh]j)}(hj5h]hv4l2_device_call_until_err}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj5hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj5hhhj5hMubah}(h]j5ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj5hMhj5hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj5hhhj5hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j5j]j5j^j_j`uh1jhhhjhNhNubh)}(h?``v4l2_device_call_until_err (v4l2_dev, grpid, o, f, args...)``h]h)}(hj5h]h;v4l2_device_call_until_err (v4l2_dev, grpid, o, f, args...)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(hCalls the specified operation for all subdevs matching the :c:type:`v4l2_subdev.grp_id `, as assigned by the bridge driver, until an error occurs. h]h)}(hCalls the specified operation for all subdevs matching the :c:type:`v4l2_subdev.grp_id `, as assigned by the bridge driver, until an error occurs.h](h;Calls the specified operation for all subdevs matching the }(hj5hhhNhNubh)}(h*:c:type:`v4l2_subdev.grp_id `h]h)}(hj5h]hv4l2_subdev.grp_id}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubh:, as assigned by the bridge driver, until an error occurs.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj5ubah}(h]h ]h"]h$]h&]uh1hhj6hMhjhhubjb)}(hXn**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Return** **Description** If the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj06h]h Parameters}(hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.6ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjO6h]hv4l2_dev}(hjQ6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjI6ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjn6h]hstruct v4l2_device}(hjp6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjl6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjd6hMhjh6ubh( owning the sub-devices to iterate over.}(hjh6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjd6hMhje6ubah}(h]h ]h"]h$]h&]uh1jhjI6ubeh}(h]h ]h"]h$]h&]uh1jhjd6hMhjF6ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]h)}(hj6h]hgrpid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubj)}(hhh]h)}(h^:c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all.h](h)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj6h]hstruct v4l2_subdev}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubh4->grp_id group ID to match. Use 0 to match them all.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjF6ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj7h]ho}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj#7h]hstruct v4l2_subdev_ops}(hj%7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj!7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj7ubh that contains }(hj7hhhNhNubjS)}(h**f**h]hf}(hjE7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh:. Each element there groups a set of operations functions.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjF6ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hjo7h]hf}(hjq7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhji7ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj7hhhNhNubjS)}(h**cond**h]hcond}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubhV matches. The operation functions are defined in groups, according to each element at }(hj7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj7h]hstruct v4l2_subdev_ops}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhji7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjF6ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj7h]hargs...}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj7ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj7hhhNhNubjS)}(h**f**h]hf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjF6ubeh}(h]h ]h"]h$]h&]uh1jhj*6ubh)}(h **Return**h]jS)}(hj+8h]hReturn}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubh)}(h**Description**h]jS)}(hjC8h]h Description}(hjE8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjA8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubh)}(hIf the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise.h](h2If the operation returns an error other than 0 or }(hjY8hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hja8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY8ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hjY8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubh)}(h**Note**h]jS)}(hj|8h]hNote}(hj~8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjz8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj*6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_device_mask_call_all (C macro)c.v4l2_device_mask_call_allhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_mask_call_allh]j)}(hv4l2_device_mask_call_allh]j )}(hv4l2_device_mask_call_allh]j)}(hj8h]hv4l2_device_mask_call_all}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj8hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj8hhhj8hMubah}(h]j8ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj8hMhj8hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj8hhhj8hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j8j]j8j^j_j`uh1jhhhjhNhNubh)}(h?``v4l2_device_mask_call_all (v4l2_dev, grpmsk, o, f, args...)``h]h)}(hj8h]h;v4l2_device_mask_call_all (v4l2_dev, grpmsk, o, f, args...)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(h_Calls the specified operation for all subdevices where a group ID matches a specified bitmask. h]h)}(h^Calls the specified operation for all subdevices where a group ID matches a specified bitmask.h]h^Calls the specified operation for all subdevices where a group ID matches a specified bitmask.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj 9ubah}(h]h ]h"]h$]h&]uh1hhj9hMhjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** Ignore any errors. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj,9h]h Parameters}(hj.9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*9ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj&9ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjK9h]hv4l2_dev}(hjM9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjE9ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjj9h]hstruct v4l2_device}(hjl9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjh9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj`9hMhjd9ubh( owning the sub-devices to iterate over.}(hjd9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`9hMhja9ubah}(h]h ]h"]h$]h&]uh1jhjE9ubeh}(h]h ]h"]h$]h&]uh1jhj`9hMhjB9ubj)}(h``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. h](j)}(h ``grpmsk``h]h)}(hj9h]hgrpmsk}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubj)}(hhh]h)}(hbitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all.h](hbitmask to be checked against }(hj9hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj9h]hstruct v4l2_subdev}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjB9ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj:h]ho}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj:hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj#:h]hstruct v4l2_subdev_ops}(hj%:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj!:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj:ubh that contains }(hj:hhhNhNubjS)}(h**f**h]hf}(hjE:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubh:. Each element there groups a set of operations functions.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjB9ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hjo:h]hf}(hjq:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhji:ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj:hhhNhNubjS)}(h**cond**h]hcond}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubhV matches. The operation functions are defined in groups, according to each element at }(hj:hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj:h]hstruct v4l2_subdev_ops}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhji:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjB9ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj:h]hargs...}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj:ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj:hhhNhNubjS)}(h**f**h]hf}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjB9ubeh}(h]h ]h"]h$]h&]uh1jhj&9ubh)}(h**Description**h]jS)}(hj+;h]h Description}(hj-;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj);ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj&9ubh)}(hIgnore any errors.h]hIgnore any errors.}(hjA;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj&9ubh)}(h**Note**h]jS)}(hjR;h]hNote}(hjT;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP;ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj&9ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjh;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj&9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)v4l2_device_mask_call_until_err (C macro)!c.v4l2_device_mask_call_until_errhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_mask_call_until_errh]j)}(hv4l2_device_mask_call_until_errh]j )}(hv4l2_device_mask_call_until_errh]j)}(hj;h]hv4l2_device_mask_call_until_err}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj;hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj;hhhj;hMubah}(h]j;ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj;hMhj;hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj;hhhj;hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j;j]j;j^j_j`uh1jhhhjhNhNubh)}(hE``v4l2_device_mask_call_until_err (v4l2_dev, grpmsk, o, f, args...)``h]h)}(hj;h]hAv4l2_device_mask_call_until_err (v4l2_dev, grpmsk, o, f, args...)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(h_Calls the specified operation for all subdevices where a group ID matches a specified bitmask. h]h)}(h^Calls the specified operation for all subdevices where a group ID matches a specified bitmask.h]h^Calls the specified operation for all subdevices where a group ID matches a specified bitmask.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubah}(h]h ]h"]h$]h&]uh1hhj;hMhjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Return** **Description** If the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise. **Note** subdevs cannot be added or deleted while walking the subdevs list.h](h)}(h**Parameters**h]jS)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj!<h]hv4l2_dev}(hj#<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj<ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj@<h]hstruct v4l2_device}(hjB<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj><ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj6<hMhj:<ubh( owning the sub-devices to iterate over.}(hj:<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6<hMhj7<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj6<hMhj<ubj)}(h``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. h](j)}(h ``grpmsk``h]h)}(hjy<h]hgrpmsk}(hj{<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw<ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjs<ubj)}(hhh]h)}(hbitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all.h](hbitmask to be checked against }(hj<hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj<h]hstruct v4l2_subdev}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj<ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhjs<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj<h]ho}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj<ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj<hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj<h]hstruct v4l2_subdev_ops}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj<ubh that contains }(hj<hhhNhNubjS)}(h**f**h]hf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubh:. Each element there groups a set of operations functions.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. h](j)}(h``f``h]h)}(hjE=h]hf}(hjG=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj?=ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj^=hhhNhNubjS)}(h**cond**h]hcond}(hjf=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^=ubhV matches. The operation functions are defined in groups, according to each element at }(hj^=hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjz=h]hstruct v4l2_subdev_ops}(hj|=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjx=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj^=ubh.}(hj^=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj[=ubah}(h]h ]h"]h$]h&]uh1jhj?=ubeh}(h]h ]h"]h$]h&]uh1jhjZ=hMhj<ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj=h]hargs...}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj=ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj=hhhNhNubjS)}(h**f**h]hf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h **Return**h]jS)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubh)}(h**Description**h]jS)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubh)}(hIf the operation returns an error other than 0 or ``-ENOIOCTLCMD`` for any subdevice, then abort and return with that error code, zero otherwise.h](h2If the operation returns an error other than 0 or }(hj/>hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj7>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/>ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj/>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubh)}(h**Note**h]jS)}(hjR>h]hNote}(hjT>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjh>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_device_has_op (C macro)c.v4l2_device_has_ophNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_has_oph]j)}(hv4l2_device_has_oph]j )}(hv4l2_device_has_oph]j)}(hj>h]hv4l2_device_has_op}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj>hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj>hhhj>hMubah}(h]j>ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj>hMhj>hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj>hhhj>hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j>j]j>j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_has_op (v4l2_dev, grpid, o, f)``h]h)}(hj>h]h*v4l2_device_has_op (v4l2_dev, grpid, o, f)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjhhubh)}(h:checks if any subdev with matching grpid has a given ops. h]h)}(h9checks if any subdev with matching grpid has a given ops.h]h9checks if any subdev with matching grpid has a given ops.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj>ubah}(h]h ]h"]h$]h&]uh1hhj>hMhjhhubjb)}(hXK**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h)}(h**Parameters**h]jS)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj>ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj!?h]hv4l2_dev}(hj#?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj?ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj@?h]hstruct v4l2_device}(hjB?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj>?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj6?hMhj:?ubh( owning the sub-devices to iterate over.}(hj:?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6?hMhj7?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj6?hMhj?ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]h)}(hjy?h]hgrpid}(hj{?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjs?ubj)}(hhh]h)}(h^:c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all.h](h)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj?h]hstruct v4l2_subdev}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj?ubh4->grp_id group ID to match. Use 0 to match them all.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjs?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj?h]ho}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj?ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj?hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj?h]hstruct v4l2_subdev_ops}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj?ubh that contains }(hj?hhhNhNubjS)}(h**f**h]hf}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubh:. Each element there groups a set of operations functions.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](j)}(h``f``h]h)}(hjA@h]hf}(hjC@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?@ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj;@ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hjZ@hhhNhNubjS)}(h**cond**h]hcond}(hjb@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZ@ubhV matches. The operation functions are defined in groups, according to each element at }(hjZ@hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjv@h]hstruct v4l2_subdev_ops}(hjx@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjt@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hjZ@ubh.}(hjZ@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hM hjW@ubah}(h]h ]h"]h$]h&]uh1jhj;@ubeh}(h]h ]h"]h$]h&]uh1jhjV@hM hj?ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!v4l2_device_mask_has_op (C macro)c.v4l2_device_mask_has_ophNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_mask_has_oph]j)}(hv4l2_device_mask_has_oph]j )}(hv4l2_device_mask_has_oph]j)}(hj@h]hv4l2_device_mask_has_op}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj@hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM*ubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj@hhhj@hM*ubah}(h]j@ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj@hM*hj@hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj@hhhj@hM*ubeh}(h]h ](jmacroeh"]h$]h&]j[jj\jAj]jAj^j_j`uh1jhhhjhNhNubh)}(h4``v4l2_device_mask_has_op (v4l2_dev, grpmsk, o, f)``h]h)}(hjAh]h0v4l2_device_mask_has_op (v4l2_dev, grpmsk, o, f)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM,hjhhubh)}(h?checks if any subdev with matching group mask has a given ops. h]h)}(h>checks if any subdev with matching group mask has a given ops.h]h>checks if any subdev with matching group mask has a given ops.}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjAubah}(h]h ]h"]h$]h&]uh1hhj.AhMhjhhubjb)}(hXo**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h)}(h**Parameters**h]jS)}(hj;Ah]h Parameters}(hj=AhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9Aubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hj5Aubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjZAh]hv4l2_dev}(hj\AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXAubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM!hjTAubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hjyAh]hstruct v4l2_device}(hj{AhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjwAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjoAhM!hjsAubh( owning the sub-devices to iterate over.}(hjsAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjoAhM!hjpAubah}(h]h ]h"]h$]h&]uh1jhjTAubeh}(h]h ]h"]h$]h&]uh1jhjoAhM!hjQAubj)}(h``grpmsk`` bitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all. h](j)}(h ``grpmsk``h]h)}(hjAh]hgrpmsk}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM#hjAubj)}(hhh]h)}(hbitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all.h](hbitmask to be checked against }(hjAhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hjAh]hstruct v4l2_subdev}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hjAubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM"hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM#hjQAubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hjBh]ho}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj Bubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM%hj Bubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj(BhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj2Bh]hstruct v4l2_subdev_ops}(hj4BhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj0Bubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM$hj(Bubh that contains }(hj(BhhhNhNubjS)}(h**f**h]hf}(hjTBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(Bubh:. Each element there groups a set of operations functions.}(hj(BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOBhM$hj%Bubah}(h]h ]h"]h$]h&]uh1jhj Bubeh}(h]h ]h"]h$]h&]uh1jhj$BhM%hjQAubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](j)}(h``f``h]h)}(hj~Bh]hf}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|Bubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM'hjxBubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hjBhhhNhNubjS)}(h**cond**h]hcond}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubhV matches. The operation functions are defined in groups, according to each element at }(hjBhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjBh]hstruct v4l2_subdev_ops}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM&hjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhM&hjBubah}(h]h ]h"]h$]h&]uh1jhjxBubeh}(h]h ]h"]h$]h&]uh1jhjBhM'hjQAubeh}(h]h ]h"]h$]h&]uh1jhj5Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubeh}(h])v4l2-device-functions-and-data-structuresah ]h"])v4l2_device functions and data structuresah$]h&]uh1hhhhhhhhKubeh}(h]v4l2-device-instanceah ]h"]v4l2 device instanceah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj'Cerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jCjBjBjBu nametypes}(jCjBuh}(jBhjBjjjj j j j jjjVj[jjjjjjjjj5j:jjjjj!j!j#j#j$j$j&j&j)j)jy,j~,j/j/j2j2j5j5j8j8j;j;j>j>j@j@u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(heUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.h]hgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKrsourcejuh1jChjubatransform_messages] transformerN include_log] decorationNhhub.