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. **Description** Each instance of a V4L2 device should create the v4l2_device struct, either stand-alone or embedded in a larger struct. It allows easy access to sub-devices (see v4l2-subdev.h) and provides basic V4L2 device-level support. .. note:: #) **dev->driver_data** points to this struct. #) **dev** might be ``NULL`` if there is no parent deviceh](h)}(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); }; h](h)}(h**Definition**::h](jS)}(h**Definition**h]h Definition}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubh:}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjgubj)}(hXstruct 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]hXstruct 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.hhKhjgubeh}(h]h ]h"]h$]h&]uh1hhjhKhjcubh)}(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}(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)}(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)}(hj8 h]hsubdevs}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6 ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj2 ubj)}(hhh]h)}(h,used to keep track of the registered subdevsh]h,used to keep track of the registered subdevs}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hKhjN ubah}(h]h ]h"]h$]h&]uh1jhj2 ubeh}(h]h ]h"]h$]h&]uh1jhjM 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)}(hjq h]hlock}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjk 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&]uh1jhjk 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 }(hj6 hhhNhNubh)}(h``NULL``h]hNULL}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6 ubh.}(hj6 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2 hKhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hKhjubj)}(h!``prio`` Device's priority state h](j)}(h``prio``h]h)}(hjh h]hprio}(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.hhKhjb ubj)}(hhh]h)}(hDevice's priority stateh]hDevice’s priority state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj} hKhj~ ubah}(h]h ]h"]h$]h&]uh1jhjb ubeh}(h]h ]h"]h$]h&]uh1jhj} 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)}(hK``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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK"hjubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(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$hjcubh)}(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!hjcubh)}(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.}(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$hjcubhnote)}(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)}(hjY h](jS)}(h**dev->driver_data**h]hdev->driver_data}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ ubh points to this struct.}(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)hjW ubah}(h]h ]h"]h$]h&]uh1jU hjR ubjV )}(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*hj} ubah}(h]h ]h"]h$]h&]uh1jU hjR ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jP hjL ubah}(h]h ]h"]h$]h&]uh1jJ hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(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 refexplicitrefwarnjb je )}jh ]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)}(hjW h]h Description}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjU 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 }(hjm hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjw h]h v4l2_device}(hjy hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhju ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK?hjm ubh pointed by }(hjm hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh.}(hjm 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&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj.modnameN classnameNjb je )}jh ]jk )}j^ j sbc.v4l2_device_putasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hj ubj)}(hv4l2_devh]hv4l2_dev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubah}(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 refexplicitrefwarnjb j9 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&]uh1jRhj*ubah}(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 }(hjBhhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjLh]h v4l2_device}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKLhjBubh pointed by }(hjBhhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihKLhjubeh}(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&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jsbc.v4l2_device_registerasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hdevh]hdev}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubj% )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjumodnameN classnameNjb je )}jh ]jc.v4l2_device_registerasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjQubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(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.hhKWhjubj)}(hhh](j)}(h:``struct device *dev`` pointer to struct :c:type:`device` h](j)}(h``struct device *dev``h]h)}(hj;h]hstruct device *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKVhj5ubj)}(hhh]h)}(h"pointer to struct :c:type:`device`h](hpointer to struct }(hjThhhNhNubh)}(h:c:type:`device`h]h)}(hj^h]hdevice}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jdeviceuh1hhjPhKVhjTubeh}(h]h ]h"]h$]h&]uh1hhjPhKVhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKVhj2ubj)}(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 refexplicitrefwarnjb j9 j v4l2_deviceuh1hhjhKWhjubeh}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhj2ubeh}(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.hhKYhjubjK )}(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}(hj hhhNhNubah}(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&]uh1jJ hjubeh}(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}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKbubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj|hKbubj )}(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&]hhuh1jhjjhhhj|hKbubj )}(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&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jsbc.v4l2_device_set_nameasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ 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}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hbasenameh]hbasename}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubj% )}(hatomic_t *instanceh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jc.v4l2_device_set_nameasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjwubj)}(hinstanceh]hinstance}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubeh}(h]h ]h"]h$]h&]hhuh1j hjjhhhj|hKbubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjfhhhj|hKbubah}(h]jaah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj|hKbhjchhubj;)}(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 refexplicitrefwarnjb je )}jh ]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:hjchhhj|hKbubeh}(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)}(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.hhKfhj"ubj)}(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)}(hjGh]hstruct v4l2_device *v4l2_dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKehjAubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hj`hhhNhNubh)}(h:c:type:`v4l2_device`h]h)}(hjjh]h v4l2_device}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhj\hKehj`ubeh}(h]h ]h"]h$]h&]uh1hhj\hKehj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKehj>ubj)}(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&]uh1jhjhKfhj>ubj)}(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&]uh1jhjhKhhj>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.hhKjhj"ubh)}(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)}(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.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 }(hj;hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubh* doesn’t have an invalid parent pointer.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubjK )}(h-This function sets **v4l2_dev->dev** to NULL.h]h)}(hj^h](hThis function sets }(hj`hhhNhNubjS)}(h**v4l2_dev->dev**h]h v4l2_dev->dev}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubh to NULL.}(hj`hhhNhNubeh}(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&]uh1jJ 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&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jsbc.v4l2_device_unregisterasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hv4l2_devh]hv4l2_dev}(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)}(hKUnregister all sub-devices and any other resources related to **v4l2_dev**.h](h>Unregister all sub-devices and any other resources related to }(hjfhhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjchhubah}(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)}(hj h]hv4l2_device_register_subdev}(hjhhhNhNubah}(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.hj hhhj*hKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj*hKhjhhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjhhhj*hKubeh}(h]h ](jmacroeh"]h$]h&]j[jj\jCj]jCj^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_register_subdev (v4l2_dev, sd)``h]h)}(hjIh]h*v4l2_device_register_subdev (v4l2_dev, sd)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGubah}(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.}(hjchhhNhNubah}(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&]uh1hhjqhKhjhhubjb)}(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)}(hj~h]h Parameters}(hjhhhNhNubah}(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.hhKhjxubj)}(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 refexplicitrefwarnjb j9 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)}(hjh]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhj hKhjubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubeh}(h]h ]h"]h$]h&]uh1jhjxubh)}(h**Description**h]jS)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjxubh)}(h8While registered, the subdev module is marked as in-use.h]h8While registered, the subdev module is marked as in-use.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjxubh)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjxubeh}(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&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jsbc.v4l2_device_unregister_subdevasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hsdh]hsd}(hj9hhhNhNubah}(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.}(hjchhhNhNubah}(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\j{j]j{j^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)}(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)}(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 refexplicitrefwarnjb j9 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&]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.hhKhjubjK )}(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.}(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&]uh1jJ hjubeh}(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}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIhhhi/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&]uh1jhjIhhhj[hKubj )}(h#__v4l2_device_register_subdev_nodesh]j)}(h#__v4l2_device_register_subdev_nodesh]h#__v4l2_device_register_subdev_nodes}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjIhhhj[hKubj )}(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&]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&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jpsb%c.__v4l2_device_register_subdev_nodesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubj% )}(hbool read_onlyh](j )}(hboolh]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h read_onlyh]h read_only}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hjubeh}(h]h ]h"]h$]h&]hhuh1j hjIhhhj[hKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hjEhhhj[hKubah}(h]j@ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj[hKhjBhhubj;)}(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 }(hjBhhhNhNubh)}(h``V4L2_SUBDEV_FL_HAS_DEVNODE``h]hV4L2_SUBDEV_FL_HAS_DEVNODE}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBubh flag.}(hjBhhhNhNubeh}(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:hjBhhhj[hKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\jlj]jlj^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)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjpubj)}(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&]uh1jhjpubeh}(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}(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 }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hKubj )}(h!v4l2_device_register_subdev_nodesh]j)}(h!v4l2_device_register_subdev_nodesh]h!v4l2_device_register_subdev_nodes}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj$hhhj6hKubj )}(h(struct v4l2_device *v4l2_dev)h]j% )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetjmodnameN classnameNjb je )}jh ]jk )}j^ jKsb#c.v4l2_device_register_subdev_nodesasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjaubj)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hj]ubah}(h]h ]h"]h$]h&]hhuh1j hj$hhhj6hKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj hhhj6hKubah}(h]jah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj6hKhjhhubj;)}(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:hjhhhj6hKubeh}(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)}(hj h]h Parameters}(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.hhKhjubj)}(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}(hjBhhhNhNubah}(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&]uh1jhjubh)}(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.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.}(hjzhhhNhNubah}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj modnameN classnameNjb je )}jh ]jk )}j^ jsb&c.v4l2_device_register_ro_subdev_nodesasbuh1hhjubj)}(h h]h }(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj2 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hv4l2_devh]hv4l2_dev}(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)}(h3Registers subdevices device nodes in read-only modeh]h3Registers subdevices device nodes in read-only mode}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjf hhubah}(h]h ]h"]h$]h&]uh1j:hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\j j]j 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.hhKhj 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&]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.hhKhj 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.hhKhj 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 }(hj9!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!hhhj8!hKubj )}(hv4l2_subdev_notifyh]j)}(hv4l2_subdev_notifyh]hv4l2_subdev_notify}(hjK!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj&!hhhj8!hKubj )}(h>(struct v4l2_subdev *sd, unsigned int notification, void *arg)h](j% )}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hjg!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!ubj)}(h h]h }(hjt!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!ubh)}(hhh]j)}(h v4l2_subdevh]h v4l2_subdev}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej^ reftargetj!modnameN classnameNjb je )}jh ]jk )}j^ jM!sbc.v4l2_subdev_notifyasbuh1hhjc!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjc!ubj)}(hsdh]hsd}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hj_!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$ hj_!ubj% )}(h void *argh](j )}(hvoidh]hvoid}(hj*"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&"ubj)}(h h]h }(hj8"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&"ubj )}(hj h]h*}(hjF"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hj&"ubj)}(hargh]harg}(hjS"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j$ hj_!ubeh}(h]h ]h"]h$]h&]hhuh1j hj&!hhhj8!hKubeh}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj"!hhhj8!hKubah}(h]j!ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj8!hKhj!hhubj;)}(hhh]h)}(h$Sends a notification to v4l2_device.h]h$Sends a notification to 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.hhKhjz"hhubah}(h]h ]h"]h$]h&]uh1j:hj!hhhj8!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 refexplicitrefwarnjb j9 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)}(hjP#h]h void *arg}(hjR#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjJ#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.}(hji#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje#hKhjf#ubah}(h]h ]h"]h$]h&]uh1jhjJ#ubeh}(h]h ]h"]h$]h&]uh1jhje#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&] refdomainjreftypej^ reftargetj$modnameN classnameNjb je )}jh ]jk )}j^ j#sbc.v4l2_device_supports_requestsasbuh1hhj#ubj)}(h h]h }(hj#$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj )}(hj h]h*}(hj1$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ 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#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.}(hjh$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhje$hhubah}(h]h ]h"]h$]h&]uh1j:hj#hhhj#hKubeh}(h]h ](jfunctioneh"]h$]h&]j[jj\j$j]j$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.hhKhj$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&]uh1jhj$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\j3%j]j3%j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_for_each_subdev (sd, v4l2_dev)``h]h)}(hj9%h]h*v4l2_device_for_each_subdev (sd, v4l2_dev)}(hj;%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7%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 refexplicitrefwarnjb j9 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 refexplicitrefwarnjb j9 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)}(hjg&h]h Description}(hji&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje&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 }(hj}&hhhNhNubjS)}(h **v4l2_dev**h]hv4l2_dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}&ubhQ device. It acts as a for loop iterator and executes the next statement with the }(hj}&hhhNhNubjS)}(h**sd**h]hsd}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}&ubh. variable pointing to each sub-device in turn.}(hj}&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)}(hj;'h]h Parameters}(hj='hhhNhNubah}(h]h ]h"]h$]h&Q]uh1jRhj9'ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5'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)}(hjZ'h]hv4l2_dev}(hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX'ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjT'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)}(hjy'h]hstruct v4l2_device}(hj{'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjw'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhjo'hMhjs'ubh( owning the sub-devices to iterate over.}(hjs'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjo'hMhjp'ubah}(h]h ]h"]h$]h&]uh1jhjT'ubeh}(h]h ]h"]h$]h&]uh1jhjo'hMhjQ'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 refexplicitrefwarnjb j9 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'hMhjQ'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$(hMhjQ'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)}(hjH(h]ho}(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.hhMhjB(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 }(hja(hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjk(h]hstruct v4l2_subdev_ops}(hjm(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhji(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhja(ubh that contains }(hja(hhhNhNubjS)}(h**f**h]hf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja(ubh:. Each element there groups a set of operations functions.}(hja(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMhj^(ubah}(h]h ]h"]h$]h&]uh1jhjB(ubeh}(h]h ]h"]h$]h&]uh1jhj](hMhjQ'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 refexplicitrefwarnjb j9 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(hMhjQ'ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]h)}(hj&)h]hargs...}(hj()hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj )ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hj?)hhhNhNubjS)}(h**f**h]hf}(hjG)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;)hMhjQ'ubeh}(h]h ]h"]h$]h&]uh1jhj5'ubh)}(h**Description**h]jS)}(hjs)h]h Description}(hju)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjq)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj5'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.hhMhj5'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!hj5'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"hj5'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&]uh1hhj=*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)}(hjJ*h]h Parameters}(hjL*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjH*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM1hjD*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)}(hji*h]hv4l2_dev}(hjk*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM0hjc*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 refexplicitrefwarnjb j9 j v4l2_deviceuh1hhj~*hM0hj*ubh( owning the sub-devices to iterate over.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~*hM0hj*ubah}(h]h ]h"]h$]h&]uh1jhjc*ubeh}(h]h ]h"]h$]h&]uh1jhj~*hM0hj`*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*hM1hj`*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 refexplicitrefwarnjb j9 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}(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:+hM2hj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hM3hj`*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)}(hji+h]hf}(hjk+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg+ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM6hjc+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 refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM4hj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM4hj+ubah}(h]h ]h"]h$]h&]uh1jhjc+ubeh}(h]h ]h"]h$]h&]uh1jhj~+hM6hj`*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+hM7hj`*ubeh}(h]h ]h"]h$]h&]uh1jhjD*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.hhM9hjD*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.hhM8hjD*ubh)}(h**Note**h]jS)}(hjL,h]hNote}(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.hhM:hjD*ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM;hjD*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]j,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}(hj<-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj8-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhj0-hMJhj4-ubh( owning the sub-devices to iterate over.}(hj4-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0-hMJhj1-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj0-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)}(hjs-h]hsd}(hju-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMLhjm-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 refexplicitrefwarnjb j9 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&]uh1jhjm-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 }(hj4.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 refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMNhj4.ubh that contains }(hj4.hhhNhNubjS)}(h**f**h]hf}(hj`.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4.ubh:. Each element there groups a set of operations functions.}(hj4.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[.hMNhj1.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj0.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.hhMRhj.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 refexplicitrefwarnjb j9 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&]uh1jhj.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)}(hjF/h]h Description}(hjH/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjD/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 }(hj\/hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hjd/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.hhMVhj,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.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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMlhj0ubah}(h]h ]h"]h$]h&]uh1hhj"0hMlhjhhubjb)}(hX**Parameters** ``v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. ``cond`` condition to be match ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. ``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **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}(hj10hhhNhNubah}(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.hhMphj)0ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]h)}(hjN0h]hv4l2_dev}(hjP0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMohjH0ubj)}(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)}(hjm0h]hstruct v4l2_device}(hjo0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjk0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhjc0hMohjg0ubh( owning the sub-devices to iterate over.}(hjg0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjc0hMohjd0ubah}(h]h ]h"]h$]h&]uh1jhjH0ubeh}(h]h ]h"]h$]h&]uh1jhjc0hMohjE0ubj)}(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&]uh1jhj0hMphjE0ubj)}(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)}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 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}(hj$1hhhNhNubah}(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&]uh1jhj0hMrhjE0ubj)}(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)}(hjN1h]hf}(hjP1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMuhjH1ubj)}(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 }(hjg1hhhNhNubjS)}(h**cond**h]hcond}(hjo1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjg1ubhV matches. The operation functions are defined in groups, according to each element at }(hjg1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMshjg1ubh.}(hjg1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMshjd1ubah}(h]h ]h"]h$]h&]uh1jhjH1ubeh}(h]h ]h"]h$]h&]uh1jhjc1hMuhjE0ubj)}(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&]uh1jhj1hMvhjE0ubeh}(h]h ]h"]h$]h&]uh1jhj)0ubh)}(h**Description**h]jS)}(hj 2h]h Description}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMxhj)0ubh)}(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 2hhhNhNubh)}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 2ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj 2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMyhj)0ubh)}(h**Note**h]jS)}(hjC2h]hNote}(hjE2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjA2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM}hj)0ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjY2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM~hj)0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jahjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_device_call_all (C macro)c.v4l2_device_call_allhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_call_allh]j)}(hv4l2_device_call_allh]j )}(hv4l2_device_call_allh]j)}(hj2h]hv4l2_device_call_all}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj2hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj2hhhj2hMubah}(h]j{2ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj2hMhj}2hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj}2hhhj2hMubeh}(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 refexplicitrefwarnjb j9 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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(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)}(hj53h]hv4l2_dev}(hj73hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj33ubah}(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)}(hjT3h]hstruct v4l2_device}(hjV3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjR3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhjJ3hMhjN3ubh( owning the sub-devices to iterate over.}(hjN3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJ3hMhjK3ubah}(h]h ]h"]h$]h&]uh1jhj/3ubeh}(h]h ]h"]h$]h&]uh1jhjJ3hMhj,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.hhMhj3ubj)}(hhh]h)}(h^:c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all.h](h)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj3h]hstruct v4l2_subdev}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj3ubh4->grp_id group ID to match. Use 0 to match them all.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]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)}(hj 4h]hstruct v4l2_subdev_ops}(hj 4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 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&]uh1hhj&4hMhj3ubah}(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)}(hjU4h]hf}(hjW4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjO4ubj)}(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 }(hjn4hhhNhNubjS)}(h**cond**h]hcond}(hjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjn4ubhV matches. The operation functions are defined in groups, according to each element at }(hjn4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj4h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjn4ubh.}(hjn4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhjk4ubah}(h]h ]h"]h$]h&]uh1jhjO4ubeh}(h]h ]h"]h$]h&]uh1jhjj4hMhj,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.}(hj'5hhhNhNubah}(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)}(hj85h]hNote}(hj:5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj65ubah}(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.}(hjN5hhhNhNubah}(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)}(hjw5h]hv4l2_device_call_until_err}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}5ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjy5hhhi/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.hju5hhhj5hMubah}(h]jp5ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj5hMhjr5hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjr5hhhj5hMubeh}(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 refexplicitrefwarnjb j9 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)}(hj 6h]h Parameters}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 6ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubj)}(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*6h]hv4l2_dev}(hj,6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$6ubj)}(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)}(hjI6h]hstruct v4l2_device}(hjK6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjG6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_deviceuh1hhj?6hMhjC6ubh( owning the sub-devices to iterate over.}(hjC6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?6hMhj@6ubah}(h]h ]h"]h$]h&]uh1jhj$6ubeh}(h]h ]h"]h$]h&]uh1jhj?6hMhj!6ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]h)}(hj6h]hgrpid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj|6ubj)}(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 refexplicitrefwarnjb j9 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&]uh1jhj|6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj!6ubj)}(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}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 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}(hj 7hhhNhNubah}(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&]uh1jhj6hMhj!6ubj)}(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)}(hjJ7h]hf}(hjL7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjD7ubj)}(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 }(hjc7hhhNhNubjS)}(h**cond**h]hcond}(hjk7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjc7ubhV matches. The operation functions are defined in groups, according to each element at }(hjc7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj7h]hstruct v4l2_subdev_ops}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj}7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjc7ubh.}(hjc7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj`7ubah}(h]h ]h"]h$]h&]uh1jhjD7ubeh}(h]h ]h"]h$]h&]uh1jhj_7hMhj!6ubj)}(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&]uh1jhj7hMhj!6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]jS)}(hj8h]h Description}(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.hhMhj6ubh)}(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}(hj$8hhhNhNubah}(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.hhMhj6ubh)}(h**Note**h]jS)}(hj?8h]hNote}(hjA8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=8ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjU8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubeh}(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)}(hj~8h]hv4l2_device_mask_call_all}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhj8hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj,uh1jj-j.hj|8hhhj8hMubah}(h]jw8ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj8hMhjy8hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjy8hhhj8hMubeh}(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&]uh1hhj 9ubah}(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)}(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 refexplicitrefwarnjb j9 j v4l2_deviceuh1hhj#9hMhj'9ubh( owning the sub-devices to iterate over.}(hj'9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#9hMhj$9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj#9hMhj9ubj)}(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)}(hjf9h]hgrpmsk}(hjh9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj`9ubj)}(hhh]h)}(hbitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all.h](hbitmask to be checked against }(hj9hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj9h]hstruct v4l2_subdev}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj|9ubah}(h]h ]h"]h$]h&]uh1jhj`9ubeh}(h]h ]h"]h$]h&]uh1jhj{9hMhj9ubj)}(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 refexplicitrefwarnjb j9 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}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubh:. Each element there groups a set of operations functions.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(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)}(hj2:h]hf}(hj4:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0: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 }(hjK:hhhNhNubjS)}(h**cond**h]hcond}(hjS:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjK:ubhV matches. The operation functions are defined in groups, according to each element at }(hjK:hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hjg:h]hstruct v4l2_subdev_ops}(hji:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhje:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjK:ubh.}(hjK:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhjH:ubah}(h]h ]h"]h$]h&]uh1jhj,:ubeh}(h]h ]h"]h$]h&]uh1jhjG:hMhj9ubj)}(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:hMhj9ubeh}(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)}(hjT;h]hv4l2_device_mask_call_until_err}(hj^;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ;ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjV;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.hjR;hhhjq;hMubah}(h]jM;ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjq;hMhjO;hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjO;hhhjq;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 refexplicitrefwarnjb j9 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)}(hj<<h]hgrpmsk}(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.hhMhj6<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 }(hjU<hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hj_<h]hstruct v4l2_subdev}(hja<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj]<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjU<ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjU<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|<hMhjR<ubah}(h]h ]h"]h$]h&]uh1jhj6<ubeh}(h]h ]h"]h$]h&]uh1jhjQ<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 refexplicitrefwarnjb j9 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)}(hj==h]hstruct v4l2_subdev_ops}(hj?=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj;=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 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&]uh1hhjZ=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)}(hjw=h]hargs...}(hjy=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjq=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&]uh1jhjq=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)}(hj<>h]hv4l2_device_has_op}(hjF>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB>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:>hhhjY>hMubah}(h]j5>ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhjY>hMhj7>hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hj7>hhhjY>hMubeh}(h]h ](jmacroeh"]h$]h&]j[jj\jr>j]jr>j^j_j`uh1jhhhjhNhNubh)}(h.``v4l2_device_has_op (v4l2_dev, grpid, o, f)``h]h)}(hjx>h]h*v4l2_device_has_op (v4l2_dev, grpid, o, f)}(hjz>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv>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 refexplicitrefwarnjb j9 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)}(hjC?h]hstruct v4l2_subdev}(hjE?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhjA?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj=?ubh4->grp_id group ID to match. Use 0 to match them all.}(hj=?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`?hMhj:?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj9?hMhj>ubj)}(h``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions. h](j)}(h``o``h]h)}(hj}?h]ho}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hjw?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 refexplicitrefwarnjb j9 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&]uh1jhjw?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 refexplicitrefwarnjb j9 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&]uh1hhj>@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)}(hju@h]hv4l2_device_mask_has_op}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{@ubah}(h]h ](j!j"eh"]h$]h&]hhuh1jhjw@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.hjs@hhhj@hMubah}(h]jn@ah ](j2j3eh"]h$]h&]j7j8)j9huh1jhj@hMhjp@hhubj;)}(hhh]h}(h]h ]h"]h$]h&]uh1j:hjp@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)}(hjAh]hv4l2_dev}(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!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)}(hj$Ah]hstruct v4l2_device}(hj&AhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj"Aubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 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)}(hj]Ah]hgrpmsk}(hj_AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[Aubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM#hjWAubj)}(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 }(hjvAhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]h)}(hjAh]hstruct v4l2_subdev}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj~Aubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 j v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hjvAubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjvAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM"hjsAubah}(h]h ]h"]h$]h&]uh1jhjWAubeh}(h]h ]h"]h$]h&]uh1jhjrAhM#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 refexplicitrefwarnjb j9 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)}(hj)Bh]hf}(hj+BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'Bubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM'hj#Bubj)}(hhh]h)}(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 }(hjBBhhhNhNubjS)}(h**cond**h]hcond}(hjJBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBBubhV matches. The operation functions are defined in groups, according to each element at }(hjBBhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]h)}(hj^Bh]hstruct v4l2_subdev_ops}(hj`BhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1hhj\Bubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjb j9 jv4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM&hjBBubh.}(hjBBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{BhM&hj?Bubah}(h]h ]h"]h$]h&]uh1jhj#Bubeh}(h]h ]h"]h$]h&]uh1jhj>BhM'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 jjjajfjjjjjj jjj@jEjj jjj!j"!j#j#j$j$j&j&j)j)j,j,j/j/j{2j2jp5ju5jw8j|8jM;jR;j5>j:>jn@js@u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]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.}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6Cubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKrsourcejuh1j4Chjubatransform_messages] transformerN include_log] decorationNhhub.