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.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.hhKIubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKIubj )}(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 hKIubj )}(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 hKIubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj hhhj hKIubah}(h]j ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj hKIhj 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 hKIubeh}(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.hhKLhj7ubh pointed by }(hj7hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hKLhjubeh}(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.hhKSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKSubj )}(hv4l2_device_registerh]j)}(hv4l2_device_registerh]hv4l2_device_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjhhhjhKSubj )}(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 hjhhhjhKSubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjhhhjhKSubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjhKShjhhubj;)}(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:hjhhhjhKSubeh}(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.hhKYhjubah}(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.hhKbubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhKbubj )}(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_hhhjqhKbubj )}(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_hhhjqhKbubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj[hhhjqhKbubah}(h]jVah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjqhKbhjXhhubj;)}(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:hjXhhhjqhKbubeh}(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. **Example** static atomic_t drv_instance = ATOMIC_INIT(0); ... instance = v4l2_device_set_name(&\ v4l2_dev, "foo", &\ drv_instance); 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.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.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)}(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.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'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.hhMhj*'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.hhM8hj9*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.hhMGubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj~,hhhj,hMGubah}(h]jy,ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj,hMGhj{,hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj{,hhhj,hMGubeh}(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.hhMIhjhhubh)}(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**. **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**Description**h]jS)}(hj;/h]h Description}(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)}(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 }(hjQ/hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hjY/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ/ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hjQ/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMVhj,ubh)}(h**Note**h]jS)}(hjt/h]hNote}(hjv/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMZhj,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.hhMlubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj/hhhj/hMlubah}(h]j/ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj/hMlhj/hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj/hhhj/hMlubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j/j]j/j^j_j`uh1jhhhjhNhNubh)}(hH``__v4l2_device_call_subdevs_until_err (v4l2_dev, cond, o, f, args...)``h]h)}(hj/h]hD__v4l2_device_call_subdevs_until_err (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.hhMnhjhhubh)}(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&]uh1hhj0hMlhjhhubjb)}(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** 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.hhMphj0ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjC0h]hv4l2_dev}(hjE0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMohj=0ubj)}(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)}(hjb0h]hstruct v4l2_device}(hjd0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj`0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjX0hMohj\0ubh( owning the sub-devices to iterate over.}(hj\0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjX0hMohjY0ubah}(h]h ]h"]h$]h&]uh1jhj=0ubeh}(h]h ]h"]h$]h&]uh1jhjX0hMohj:0ubj)}(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&]uh1jhj0hMphj:0ubj)}(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 }(hj0hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj0h]hstruct v4l2_subdev_ops}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj0ubah}(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.hhMqhj0ubh that contains }(hj0hhhNhNubjS)}(h**f**h]hf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubh:. Each element there groups a set of operations functions.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMqhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMrhj:0ubj)}(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)}(hjC1h]hf}(hjE1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMuhj=1ubj)}(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\1hhhNhNubjS)}(h**cond**h]hcond}(hjd1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\1ubhV matches. The operation functions are defined in groups, according to each element at }(hj\1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjx1h]hstruct v4l2_subdev_ops}(hjz1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjv1ubah}(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.hhMshj\1ubh.}(hj\1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMshjY1ubah}(h]h ]h"]h$]h&]uh1jhj=1ubeh}(h]h ]h"]h$]h&]uh1jhjX1hMuhj:0ubj)}(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&]uh1jhj1hMvhj:0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h**Description**h]jS)}(hj1h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMxhj0ubh)}(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 }(hj2hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMyhj0ubh)}(h**Note**h]jS)}(hj82h]hNote}(hj:2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj62ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM}hj0ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjN2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM~hj0ubeh}(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)}(hjw2h]hv4l2_device_call_all}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}2ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjy2hhhi/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.hju2hhhj2hMubah}(h]jp2ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj2hMhjr2hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjr2hhhj2hMubeh}(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)}(hj2h]hv4l2_subdev.grp_id}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj2ubah}(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&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1hhj2hMhjhhubjb)}(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&]uh1jRhj 3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubj)}(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*3h]hv4l2_dev}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$3ubj)}(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)}(hjI3h]hstruct v4l2_device}(hjK3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjG3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj?3hMhjC3ubh( owning the sub-devices to iterate over.}(hjC3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?3hMhj@3ubah}(h]h ]h"]h$]h&]uh1jhj$3ubeh}(h]h ]h"]h$]h&]uh1jhj?3hMhj!3ubj)}(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.hhMhj|3ubj)}(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&]uh1jhj|3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj!3ubj)}(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)}(hj3h]ho}(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)}(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 }(hj3hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj3h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj3ubah}(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.hhMhj3ubh that contains }(hj3hhhNhNubjS)}(h**f**h]hf}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubh:. Each element there groups a set of operations functions.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj!3ubj)}(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)}(hjJ4h]hf}(hjL4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjD4ubj)}(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 }(hjc4hhhNhNubjS)}(h**cond**h]hcond}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjc4ubhV matches. The operation functions are defined in groups, according to each element at }(hjc4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj4h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(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.hhMhjc4ubh.}(hjc4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj`4ubah}(h]h ]h"]h$]h&]uh1jhjD4ubeh}(h]h ]h"]h$]h&]uh1jhj_4hMhj!3ubj)}(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 }(hj4hhhNhNubjS)}(h**f**h]hf}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj!3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]jS)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubh)}(hIgnore any errors.h]hIgnore any errors.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubh)}(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.hhMhj3ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjC5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubeh}(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)}(hjl5h]hv4l2_device_call_until_err}(hjv5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr5ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjn5hhhi/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.hjj5hhhj5hMubah}(h]je5ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj5hMhjg5hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjg5hhhj5hMubeh}(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&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1hhj5hMhjhhubjb)}(hXa**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** 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)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj6h]hv4l2_dev}(hj!6hhhNhNubah}(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)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]h)}(hj>6h]hstruct v4l2_device}(hj@6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj<6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj46hMhj86ubh( owning the sub-devices to iterate over.}(hj86hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj46hMhj56ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj46hMhj6ubj)}(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)}(hjw6h]hgrpid}(hjy6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjq6ubj)}(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&]uh1jhjq6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(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)}(hj6h]ho}(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)}(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 }(hj6hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj6h]hstruct v4l2_subdev_ops}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj6ubah}(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.hhMhj6ubh that contains }(hj6hhhNhNubjS)}(h**f**h]hf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubh:. Each element there groups a set of operations functions.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(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?7h]hf}(hjA7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj97ubj)}(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 }(hjX7hhhNhNubjS)}(h**cond**h]hcond}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX7ubhV matches. The operation functions are defined in groups, according to each element at }(hjX7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjt7h]hstruct v4l2_subdev_ops}(hjv7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjr7ubah}(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.hhMhjX7ubh.}(hjX7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhjU7ubah}(h]h ]h"]h$]h&]uh1jhj97ubeh}(h]h ]h"]h$]h&]uh1jhjT7hMhj6ubj)}(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&]uh1jhj7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]jS)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubh)}(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 }(hj8hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubh)}(h**Note**h]jS)}(hj48h]hNote}(hj68hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj28ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjJ8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubeh}(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)}(hjs8h]hv4l2_device_mask_call_all}(hj}8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy8ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhju8hhhi/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.hjq8hhhj8hMubah}(h]jl8ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj8hMhjn8hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjn8hhhj8hMubeh}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj8ubah}(h]h ]h"]h$]h&]uh1hhj8hMhjhhubjb)}(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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj8ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hj9h]hv4l2_dev}(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.hhMhj8ubj)}(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"9h]hstruct v4l2_device}(hj$9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj 9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhj9hMhj9ubh( owning the sub-devices to iterate over.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubj)}(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)}(hj[9h]hgrpmsk}(hj]9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjU9ubj)}(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 }(hjt9hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj~9h]hstruct v4l2_subdev}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj|9ubah}(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.hhMhjt9ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjt9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhjq9ubah}(h]h ]h"]h$]h&]uh1jhjU9ubeh}(h]h ]h"]h$]h&]uh1jhjp9hMhj8ubj)}(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)}(hj9h]ho}(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)}(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 }(hj9hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj9h]hstruct v4l2_subdev_ops}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj9ubah}(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.hhMhj9ubh that contains }(hj9hhhNhNubjS)}(h**f**h]hf}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubh:. Each element there groups a set of operations functions.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubj)}(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}(hjH: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&]uh1hhjZ: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&]uh1hhjy:hMhj=:ubah}(h]h ]h"]h$]h&]uh1jhj!:ubeh}(h]h ]h"]h$]h&]uh1jhj<:hMhj8ubj)}(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:hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(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.hhMhj8ubh)}(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.hhMhj8ubh)}(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.hhMhj8ubh)}(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.hhMhj8ubeh}(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)}(hjI;h]hv4l2_device_mask_call_until_err}(hjS;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO;ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjK;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.hjG;hhhjf;hMubah}(h]jB;ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjf;hMhjD;hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjD;hhhjf;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**. **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}(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;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)}(hj1<h]hgrpmsk}(hj3<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)}(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 }(hjJ<hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hjT<h]hstruct v4l2_subdev}(hjV<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjR<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.hhMhjJ<ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjJ<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjq<hMhjG<ubah}(h]h ]h"]h$]h&]uh1jhj+<ubeh}(h]h ]h"]h$]h&]uh1jhjF<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)}(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)}(hj2=h]hstruct v4l2_subdev_ops}(hj4=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj0=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&]uh1hhjO=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj;ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hjl=h]hargs...}(hjn=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjf=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&]uh1jhjf=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&]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}(hj=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)}(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.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.}(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;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)}(hj1>h]hv4l2_device_has_op}(hj;>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7>ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj3>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/>hhhjN>hMubah}(h]j*>ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjN>hMhj,>hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj,>hhhjN>hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\jg>j]jg>j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_has_op (v4l2_dev, grpid, o, f)``h]h)}(hjm>h]h*v4l2_device_has_op (v4l2_dev, grpid, o, f)}(hjo>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk>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}(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>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)}(hj?h]hgrpid}(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)}(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)}(hj8?h]hstruct v4l2_subdev}(hj:?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj6?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.hhMhj2?ubh4->grp_id group ID to match. Use 0 to match them all.}(hj2?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjU?hMhj/?ubah}(h]h ]h"]h$]h&]uh1jhj?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)}(hjr?h]ho}(hjt?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hjl?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&]uh1jhjl?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)}(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.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 }(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.hhM hj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3@hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?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)}(hjj@h]hv4l2_device_mask_has_op}(hjt@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp@ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjl@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.hjh@hhhj@hMubah}(h]jc@ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj@hMhje@hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hje@hhhj@hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\j@j]j@j^j_j`uh1jhhhjhNhNubh)}(h4``v4l2_device_mask_has_op (v4l2_dev, grpmsk, o, f)``h]h)}(hj@h]h0v4l2_device_mask_has_op (v4l2_dev, grpmsk, 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.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@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)}(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@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.hhM"hj@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.hhM!hj@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)}(hjAh]hstruct v4l2_device}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjW j. j v4l2_deviceuh1hhjAhM!hjAubh( owning the sub-devices to iterate over.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM!hjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhM!hj@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)}(hjRAh]hgrpmsk}(hjTAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPAubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM#hjLAubj)}(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 }(hjkAhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hjuAh]hstruct v4l2_subdev}(hjwAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjsAubah}(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"hjkAubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjkAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM"hjhAubah}(h]h ]h"]h$]h&]uh1jhjLAubeh}(h]h ]h"]h$]h&]uh1jhjgAhM#hj@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)}(hjAh]ho}(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)}(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 }(hjAhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjAh]hstruct v4l2_subdev_ops}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjAubah}(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$hjAubh that contains }(hjAhhhNhNubjS)}(h**f**h]hf}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubh:. Each element there groups a set of operations functions.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM$hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM%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)}(hjBh]hf}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM'hjBubj)}(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 }(hj7BhhhNhNubjS)}(h**cond**h]hcond}(hj?BhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7BubhV matches. The operation functions are defined in groups, according to each element at }(hj7BhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjSBh]hstruct v4l2_subdev_ops}(hjUBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjQBubah}(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&hj7Bubh.}(hj7BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpBhM&hj4Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj3BhM'hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(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_handlerjBerror_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}(jBjBjBjBu nametypes}(jBjBuh}(jBhjBjjjj j j j jjjVj[jjjjjjjjj5j:jjjjj!j!j#j#j$j$j&j&j)j)jy,j~,j/j/jp2ju2je5jj5jl8jq8jB;jG;j*>j/>jc@jh@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.}(hj.ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+Cubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKrsourcejuh1j)Chjxubatransform_messages] transformerN include_log] decorationNhhub.