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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/pt_BR/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)}(hjh]hv4l2_device_register}(hj hhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-device refdomainjreftypefunc refexplicitrefwarn reftargetv4l2_device_registeruh1hhhhK hjubh (dev, }(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hj0h]hv4l2_dev}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj.ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhK hjubh).}(hjhhhNhNubeh}(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 }(hj]hhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hjgh]h v4l2_device}(hjihhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhKhj]ubh* struct. If the dev->driver_data field is }(hj]hhhNhNubj )}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]ubh, it will be linked to }(hj]hhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhKhj]ubh argument.}(hj]hhhNhNubeh}(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 }(hjhhhNhNubj )}(h``dev_set_drvdata()``h]hdev_set_drvdata()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh 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]j )}(hjh]h media_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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]j )}(hj3h]hv4l2_device_register()}(hj5hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_registeruh1hhhhKhjubh& then it will be untouched. If dev is }(hjhhhNhNubj )}(h``NULL``h]hNULL}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh , then you }(hjhhhNhNubhstrong)}(h**must**h]hmust}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh setup }(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hj|h]hv4l2_dev}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjzubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhKhjubh ->name before calling }(hjhhhNhNubh)}(h:c:func:`v4l2_device_register`h]j )}(hjh]hv4l2_device_register()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_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]j )}(hjh]hv4l2_device_set_name()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_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 }(hjhhhNhNubj )}(h ``ivtv0``h]hivtv0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh, }(hjhhhNhNubj )}(h ``ivtv1``h]hivtv1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhB, etc. If the name ends with a digit, then it will insert a dash: }(hjhhhNhNubj )}(h ``cx18-0``h]hcx18-0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh, }hjsbj )}(h ``cx18-1``h]hcx18-1}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh1, 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?hhhNhNubj )}(h``dev``h]hdev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh argument is normally the }(hj?hhhNhNubj )}(h``struct device``h]h struct device}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh pointer of a }(hj?hhhNhNubj )}(h ``pci_dev``h]hpci_dev}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh, }(hj?hhhNhNubj )}(h``usb_interface``h]h usb_interface}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh or }(hj?hhhNhNubj )}(h``platform_device``h]hplatform_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh. It is rare for dev to be }(hj?hhhNhNubj )}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?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]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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 }(hjhhhNhNubj )}(h ``notify()``h]hnotify()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh 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 }(hjhhhNhNubj )}(h``include/media/subdevice.h``h]hinclude/media/subdevice.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(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]j )}(hj&h]hv4l2_device_unregister()}(hj(hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_unregisteruh1hhhhK3hj ubh (}(hj hhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjIh]hv4l2_dev}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjGubah}(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 }(hjvhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj~ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhK6hjvubh, it will be reset to }(hjvhhhNhNubj )}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjvubhO. Unregistering will also automatically unregister all subdevs from the device.}(hjvhhhNhNubeh}(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]j )}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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]j )}(hjh]hv4l2_device_disconnect()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_disconnectuh1hhhhK?hjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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 }(hjDhhhNhNubhemphasis)}(h*not*h]hnot}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDubh7 unregister the subdevs, so you still need to call the }(hjDhhhNhNubh)}(h :c:func:`v4l2_device_unregister`h]j )}(hjbh]hv4l2_device_unregister()}(hjdhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hj`ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_unregisteruh1hhhhKBhjDubhV function for that. If your driver is not hotpluggable, then there is no need to call }(hjDhhhNhNubh)}(h :c:func:`v4l2_device_disconnect`h]j )}(hjh]hv4l2_device_disconnect()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_disconnectuh1hhhhKBhjDubh.}(hjDhhhNhNubeh}(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&]hhƌforcelanguagejhighlight_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]j )}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnj( v4l2_deviceuh1hhhhKwhjubh, for hotpluggable devices. For this purpose }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hj4h]h v4l2_device}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj2ubah}(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]j )}(hjWh]hvideo_register_device()}(hjYhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjUubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(video_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]j )}(hjzh]h v4l2_device}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjxubah}(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]j )}(hjh]hv4l2_device_get()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_getuh1hhhhKhjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(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:}(hj hhhNhNubah}(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]j )}(hj!h]hv4l2_device_put()}(hj#hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_putuh1hhhhKhjubh (}(hjhhhNhNubh)}(h :c:type:`v4l2_dev `h]j )}(hjDh]hv4l2_dev}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjBubah}(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 }(hjqhhhNhNubh)}(h:c:func:`v4l2_device_put`h]j )}(hj{h]hv4l2_device_put()}(hj}hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1j hjyubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypefunc refexplicitrefwarnj(v4l2_device_putuh1hhhhKhjqubh in the }(hjqhhhNhNubj )}(h``disconnect()``h]h disconnect()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjqubh& callback (for USB devices) or in the }(hjqhhhNhNubj )}(h ``remove()``h]hremove()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjqubhL callback (for e.g. PCI devices), otherwise the refcount will never reach 0.}(hjqhhhNhNubeh}(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 }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1j hjhhhj hKubh desc_name)}(h v4l2_deviceh]h desc_sig_name)}(hjh]h v4l2_device}(hj$hhhNhNubah}(h]h ]nah"]h$]h&]uh1j"hjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhj hKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj hKhjhhubh desc_content)}(hhh]h)}(h&main struct to for V4L2 device driversh]h&main struct to for V4L2 device drivers}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjPhhubah}(h]h ]h"]h$]h&]uh1jNhjhhhj hKubeh}(h]h ](jstructeh"]h$]h&]domainjobjtypejkdesctypejknoindex 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](jg)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj{ubj)}(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.hhKhj{ubeh}(h]h ]h"]h$]h&]uh1hhjhKhjwubh)}(h **Members**h]jg)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK&hjwubhdefinition_list)}(hhh](hdefinition_list_item)}(h"``dev`` pointer to struct device. h](hterm)}(h``dev``h]j )}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hj h]hmdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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,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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj( hKhjubj)}(h9``subdevs`` used to keep track of the registered subdevs h](j)}(h ``subdevs``h]j )}(hjL h]hsubdevs}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJ ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjF ubj)}(hhh]h)}(h,used to keep track of the registered subdevsh]h,used to keep track of the registered subdevs}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hKhjb ubah}(h]h ]h"]h$]h&]uh1jhjF ubeh}(h]h ]h"]h$]h&]uh1jhja 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]j )}(hj h]hlock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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)}(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&]uh1jhj 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]j )}(hj h]hname}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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]j )}(hj h]hnotify}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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]j )}(hj1 h]h ctrl_handler}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ 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 }(hjJ hhhNhNubj )}(h``NULL``h]hNULL}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJ ubh.}(hjJ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjF hKhjG ubah}(h]h ]h"]h$]h&]uh1jhj+ ubeh}(h]h ]h"]h$]h&]uh1jhjF hKhjubj)}(h!``prio`` Device's priority state h](j)}(h``prio``h]j )}(hj| h]hprio}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjz ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjv 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&]uh1jhjv ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h5``ref`` Keep track of the references to this struct. h](j)}(h``ref``h]j )}(hj h]href}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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]j )}(hj h]hrelease}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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&]uh1jhjwubh)}(h**Description**h]jg)}(hj* h]h Description}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj( ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK$hjwubh)}(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!hjwubh)}(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.}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK$hjwubhnote)}(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)}(hjm h](jg)}(h**dev->driver_data**h]hdev->driver_data}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjo ubh points to this struct.}(hjo hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK)hjk ubah}(h]h ]h"]h$]h&]uh1ji hjf ubjj )}(h6**dev** might be ``NULL`` if there is no parent deviceh]h)}(hj h](jg)}(h**dev**h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh might be }(hj hhhNhNubj )}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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&]uh1ji hjf ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jd hj` ubah}(h]h ]h"]h$]h&]uh1j^ hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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.hhK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj: ubj )}(h h]h }(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj: ubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hj\ hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjY ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj^ modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jw ASTIdentifier)}jr j sbc.v4l2_device_getasbuh1hhj: ubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj: ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj: ubj#)}(hv4l2_devh]hv4l2_dev}(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj: ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hj4 ubah}(h]h ]h"]h$]h&]hhuh1j2 hj hhhj hKhj ubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hj' hhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hj1 h]h v4l2_device}(hj3 hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj/ ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jy )}j| ]sbj( v4l2_deviceuh1hhj# hK>hj' ubeh}(h]h ]h"]h$]h&]uh1hhj# hK>hj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hK>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]jg)}(hjk h]h Description}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhji 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 }(hj hhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hj h]h v4l2_device}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhK?hj ubh pointed by }(hj hhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK?hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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&]uh1j hj hhhj hKIubj)}(hv4l2_device_puth]j#)}(hv4l2_device_puth]hv4l2_device_put}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj hhhj hKIubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjBmodnameN classnameNjv jy )}j| ]j )}jr jsbc.v4l2_device_putasbuh1hhjubj )}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hv4l2_devh]hv4l2_dev}(hj{hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubah}(h]h ]h"]h$]h&]hhuh1j2 hj hhhj hKIubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhj hhhj hKIubah}(h]j ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj hKIhj hhubjO)}(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&]uh1jNhj hhhj hKIubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hj h]h v4l2_device}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]jg)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj>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 }(hjVhhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hj`h]h v4l2_device}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj^ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKLhjVubh pointed by }(hjVhhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hKLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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&]uh1j hjhhhjhKSubj)}(hv4l2_device_registerh]j#)}(hv4l2_device_registerh]hv4l2_device_register}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjhhhjhKSubj3 )}(h2(struct device *dev, struct v4l2_device *v4l2_dev)h](j9 )}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr jsbc.v4l2_device_registerasbuh1hhjubj )}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hdevh]hdev}(hjPhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubj9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj )}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j1c.v4l2_device_registerasbuh1hhjeubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjeubj#)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjeubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubeh}(h]h ]h"]h$]h&]hhuh1j2 hjhhhjhKSubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhjhKSubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjhKShjhhubjO)}(hhh]h)}(hHInitialize v4l2_dev and make **dev->driver_data** point to **v4l2_dev**.h](hInitialize v4l2_dev and make }(hjhhhNhNubjg)}(h**dev->driver_data**h]hdev->driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh point to }(hjhhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh.}(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&]uh1jNhjhhhjhKSubeh}(h]h ](jfunctioneh"]h$]h&]jojjpj&jqj&jrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj.ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKWhj*ubj)}(hhh](j)}(h:``struct device *dev`` pointer to struct :c:type:`device` h](j)}(h``struct device *dev``h]j )}(hjOh]hstruct device *dev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKVhjIubj)}(hhh]h)}(h"pointer to struct :c:type:`device`h](hpointer to struct }(hjhhhhNhNubh)}(h:c:type:`device`h]j )}(hjrh]hdevice}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjpubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(deviceuh1hhjdhKVhjhubeh}(h]h ]h"]h$]h&]uh1hhjdhKVhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhKVhjFubj)}(hI``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``struct v4l2_device *v4l2_dev``h]j )}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhjhKWhjubeh}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKYhj*ubj_ )}(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](jg)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh may be }(hjhhhNhNubj )}(h``NULL``h]hNULL}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhG in rare cases (ISA devices). In such case the caller must fill in the }(hjhhhNhNubjg)}(h**v4l2_dev->name**h]hv4l2_dev->name}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh$ 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&]uh1j^ hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKbubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~hhhjhKbubj)}(hv4l2_device_set_nameh]j#)}(hv4l2_device_set_nameh]hv4l2_device_set_name}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj~hhhjhKbubj3 )}(hH(struct v4l2_device *v4l2_dev, const char *basename, atomic_t *instance)h](j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr jsbc.v4l2_device_set_nameasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubj9 )}(hconst char *basenameh](j)}(hconsth]hconst}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj )}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj )}(hcharh]hchar}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-ubj )}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj )}(hj h]h*}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-ubj#)}(hbasenameh]hbasename}(hjvhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubj9 )}(hatomic_t *instanceh](h)}(hhh]j#)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]jc.v4l2_device_set_nameasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hinstanceh]hinstance}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubeh}(h]h ]h"]h$]h&]hhuh1j2 hj~hhhjhKbubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjzhhhjhKbubah}(h]juah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjhKbhjwhhubjO)}(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]j )}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jy )}j| ]jc.v4l2_device_set_nameasbj( v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKbhjhhubah}(h]h ]h"]h$]h&]uh1jNhjwhhhjhKbubeh}(h]h ](jfunctioneh"]h$]h&]jojjpj2jqj2jrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj:ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKfhj6ubj)}(hhh](j)}(hI``struct v4l2_device *v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``struct v4l2_device *v4l2_dev``h]j )}(hj[h]hstruct v4l2_device *v4l2_dev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjYubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKehjUubj)}(hhh]h)}(h'pointer to struct :c:type:`v4l2_device`h](hpointer to struct }(hjthhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hj~h]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj|ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhjphKehjtubeh}(h]h ]h"]h$]h&]uh1hhjphKehjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKehjRubj)}(h7``const char *basename`` base name for the device name h](j)}(h``const char *basename``h]j )}(hjh]hconst char *basename}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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&]uh1jhjhKfhjRubj)}(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]j )}(hjh]hatomic_t *instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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&]uh1jhjhKhhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]jg)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKjhj6ubh)}(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](hhhhNhNubh)}(h:c:type:`v4l2_device`h]j )}(hjHh]h v4l2_device}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjFubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKihj>ubh= using the driver name and a driver-global atomic_t instance.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehKihj6ubh)}(hbThis function will increment the instance counter and returns the instance value used in the name.h]hbThis function will increment the instance counter and returns the instance value used in the name.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKlhj6ubh)}(h **Example**h]jg)}(hjh]hExample}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKohj6ubh)}(h{static atomic_t drv_instance = ATOMIC_INIT(0); ... instance = v4l2_device_set_name(&\ v4l2_dev, "foo", &\ drv_instance); h](h)}(h.static atomic_t drv_instance = ATOMIC_INIT(0);h]h.static atomic_t drv_instance = ATOMIC_INIT(0);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKphjubh)}(h...h]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKrhjubh)}(hEinstance = v4l2_device_set_name(&\ v4l2_dev, "foo", &\ drv_instance);h]hIinstance = v4l2_device_set_name(& v4l2_dev, “foo”, & drv_instance);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKthjubeh}(h]h ]h"]h$]h&]uh1hhjhKphj6ubh)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKvhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_device_disconnect (C function)c.v4l2_device_disconnecthNtauh1jhjhhhNhNubj)}(hhh](j)}(h:void v4l2_device_disconnect (struct v4l2_device *v4l2_dev)h]j)}(h9void v4l2_device_disconnect(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hKubj)}(hv4l2_device_disconnecth]j#)}(hv4l2_device_disconnecth]hv4l2_device_disconnect}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjhhhj hKubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj )}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjXhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjUubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjZmodnameN classnameNjv jy )}j| ]j )}jr j sbc.v4l2_device_disconnectasbuh1hhj6ubj )}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj#)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hj2ubah}(h]h ]h"]h$]h&]hhuh1j2 hjhhhj hKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhj hKubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj hKhjhhubjO)}(hhh]h)}(h)Change V4L2 device state to disconnected.h]h)Change V4L2 device state to disconnected.}(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&]uh1jNhjhhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(hX1**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_device **Description** Should be called when the USB parent disconnects. Since the parent disappears, this ensures that **v4l2_dev** doesn't have an invalid parent pointer. .. note:: This function sets **v4l2_dev->dev** to NULL.h](h)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]jg)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj7ubah}(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 }(hjOhhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjOubh* doesn’t have an invalid parent pointer.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj_ )}(h-This function sets **v4l2_dev->dev** to NULL.h]h)}(hjrh](hThis function sets }(hjthhhNhNubjg)}(h**v4l2_dev->dev**h]h v4l2_dev->dev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjtubh to NULL.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjpubah}(h]h ]h"]h$]h&]uh1j^ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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&]uh1j hjhhhjhKubj)}(hv4l2_device_unregisterh]j#)}(hv4l2_device_unregisterh]hv4l2_device_unregister}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjhhhjhKubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr jsbc.v4l2_device_unregisterasbuh1hhjubj )}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hv4l2_devh]hv4l2_dev}(hjPhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubah}(h]h ]h"]h$]h&]hhuh1j2 hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhjhKubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjhKhjhhubjO)}(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 }(hjzhhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjwhhubah}(h]h ]h"]h$]h&]uh1jNhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(hP**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](h)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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&]uh1juhjhhhNhNubj)}(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}(hj+hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj'ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj#hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubah}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhj>hKubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj>hKhjhhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhjhhhj>hKubeh}(h]h ](jmacroeh"]h$]h&]jojjpjWjqjWjrjsjtuh1jhhhjhNhNubh)}(h.``v4l2_device_register_subdev (v4l2_dev, sd)``h]j )}(hj]h]h*v4l2_device_register_subdev (v4l2_dev, sd)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj[ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjhhubh)}(h'Registers a subdev with a v4l2 device. h]h)}(h&Registers a subdev with a v4l2 device.h]h&Registers a subdev with a v4l2 device.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjsubah}(h]h ]h"]h$]h&]uh1hhjhKhjhhubjv)}(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]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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)}(h5``v4l2_dev`` pointer to struct :c:type:`v4l2_device` h](j)}(h ``v4l2_dev``h]j )}(hjh]hv4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hj h]hsd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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 }(hj"hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j )}(hj,h]hstruct v4l2_subdev}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhjhKhj"ubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jg)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjaubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubh)}(h8While registered, the subdev module is marked as in-use.h]h8While registered, the subdev module is marked as in-use.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubh)}(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.}(hjhhhNhNubah}(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&]uh1juhjhhhNhNubj)}(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&]uh1j hjhhhjhKubj)}(hv4l2_device_unregister_subdevh]j#)}(hv4l2_device_unregister_subdevh]hv4l2_device_unregister_subdev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjhhhjhKubj3 )}(h(struct v4l2_subdev *sd)h]j9 )}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_subdevh]h v4l2_subdev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr jsbc.v4l2_device_unregister_subdevasbuh1hhjubj )}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hsdh]hsd}(hjMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubah}(h]h ]h"]h$]h&]hhuh1j2 hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhjhKubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjhKhjhhubjO)}(hhh]h)}(h(Unregisters a subdev with a v4l2 device.h]h(Unregisters a subdev with a v4l2 device.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjthhubah}(h]h ]h"]h$]h&]uh1jNhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hjh]hstruct v4l2_subdev *sd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hjh]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjubj_ )}(hUCan also be called if the subdev wasn't registered. In such case, it will do nothing.h]h)}(hUCan also be called if the subdev wasn't registered. In such case, it will do nothing.h]hWCan also be called if the subdev wasn’t registered. In such case, it will do nothing.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj(ubah}(h]h ]h"]h$]h&]uh1j^ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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}(hjahhhNhNubah}(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 }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjohKubj)}(h#__v4l2_device_register_subdev_nodesh]j#)}(h#__v4l2_device_register_subdev_nodesh]h#__v4l2_device_register_subdev_nodes}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj~ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj]hhhjohKubj3 )}(h.(struct v4l2_device *v4l2_dev, bool read_only)h](j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr jsb%c.__v4l2_device_register_subdev_nodesasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubj9 )}(hbool read_onlyh](j )}(hboolh]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj#)}(h read_onlyh]h read_only}(hj,hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubeh}(h]h ]h"]h$]h&]hhuh1j2 hj]hhhjohKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjYhhhjohKubah}(h]jTah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjohKhjVhhubjO)}(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 }(hjVhhhNhNubj )}(h``V4L2_SUBDEV_FL_HAS_DEVNODE``h]hV4L2_SUBDEV_FL_HAS_DEVNODE}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjVubh flag.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjShhubah}(h]h ]h"]h$]h&]uh1jNhjVhhhjohKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hjh]hstruct v4l2_device *v4l2_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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]j )}(hjh]hbool read_only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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 hj8hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKubj )}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhjJhKubj)}(h!v4l2_device_register_subdev_nodesh]j#)}(h!v4l2_device_register_subdev_nodesh]h!v4l2_device_register_subdev_nodes}(hj]hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjYubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj8hhhjJhKubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetjmodnameN classnameNjv jy )}j| ]j )}jr j_sb#c.v4l2_device_register_subdev_nodesasbuh1hhjuubj )}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjuubj#)}(hv4l2_devh]hv4l2_dev}(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjuubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjqubah}(h]h ]h"]h$]h&]hhuh1j2 hj8hhhjJhKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhj4hhhjJhKubah}(h]j/ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjJhKhj1hhubjO)}(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&]uh1jNhj1hhhjJhKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpjjqjjrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(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]j )}(hj=h]hstruct v4l2_device *v4l2_dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj7ubj)}(hhh]h)}(hpointer to struct v4l2_deviceh]hpointer to struct v4l2_device}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jg)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjvubah}(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.}(hjhhhNhNubah}(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&]uh1juhjhhhNhNubj)}(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&]uh1j hjhhhjhKubj)}(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 ]j.ah"]h$]h&]uh1j"hjubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjhhhjhKubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(hstruct v4l2_device *v4l2_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetj modnameN classnameNjv jy )}j| ]j )}jr jsb&c.v4l2_device_register_ro_subdev_nodesasbuh1hhjubj )}(h h]h }(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjF hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj#)}(hv4l2_devh]hv4l2_dev}(hjS hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjubah}(h]h ]h"]h$]h&]hhuh1j2 hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjhhhjhKubah}(h]jah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjhKhjhhubjO)}(hhh]h)}(h3Registers subdevices device nodes in read-only modeh]h3Registers subdevices device nodes in read-only mode}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjz hhubah}(h]h ]h"]h$]h&]uh1jNhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpj jqj jrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj 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]j )}(hj h]hstruct v4l2_device *v4l2_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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]jg)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj 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&]uh1juhjhhhNhNubj)}(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 }(hjM!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:!hhhjL!hKubj)}(hv4l2_subdev_notifyh]j#)}(hv4l2_subdev_notifyh]hv4l2_subdev_notify}(hj_!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj[!ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj:!hhhjL!hKubj3 )}(h>(struct v4l2_subdev *sd, unsigned int notification, void *arg)h](j9 )}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hj{!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw!ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw!ubh)}(hhh]j#)}(h v4l2_subdevh]h v4l2_subdev}(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj!ubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetj!modnameN classnameNjv jy )}j| ]j )}jr ja!sbc.v4l2_subdev_notifyasbuh1hhjw!ubj )}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjw!ubj#)}(hsdh]hsd}(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjw!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjs!ubj9 )}(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&]uh1j hj!ubj )}(hinth]hint}(hj "hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj )}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj#)}(h notificationh]h notification}(hj%"hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjs!ubj9 )}(h void *argh](j )}(hvoidh]hvoid}(hj>"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:"ubj )}(h h]h }(hjL"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:"ubj )}(hj h]h*}(hjZ"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:"ubj#)}(hargh]harg}(hjg"hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj:"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hjs!ubeh}(h]h ]h"]h$]h&]hhuh1j2 hj:!hhhjL!hKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhj6!hhhjL!hKubah}(h]j1!ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjL!hKhj3!hhubjO)}(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.hhKhj"hhubah}(h]h ]h"]h$]h&]uh1jNhj3!hhhjL!hKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpj"jqj"jrjsjtuh1jhhhjhNhNubjv)}(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]jg)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj"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]j )}(hj"h]hstruct v4l2_subdev *sd}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"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]j )}(hj"h]hstruct v4l2_subdev}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hj*#h]hunsigned int notification}(hj,#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(#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.}(hjC#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]j )}(hjd#h]h void *arg}(hjf#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjb#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhj^#ubj)}(hhh]h)}(hMarguments for the notification. Those are specific to each notification type.h]hMarguments for the notification. Those are specific to each notification type.}(hj}#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy#hKhjz#ubah}(h]h ]h"]h$]h&]uh1jhj^#ubeh}(h]h ]h"]h$]h&]uh1jhjy#hKhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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&]uh1j hj#hhhj#hKubj)}(hv4l2_device_supports_requestsh]j#)}(hv4l2_device_supports_requestsh]hv4l2_device_supports_requests}(hj#hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj#ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj#hhhj#hKubj3 )}(h(struct v4l2_device *v4l2_dev)h]j9 )}(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&]uh1j hj#ubh)}(hhh]j#)}(h v4l2_deviceh]h v4l2_device}(hj$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypejr reftargetj$modnameN classnameNjv jy )}j| ]j )}jr j#sbc.v4l2_device_supports_requestsasbuh1hhj#ubj )}(h h]h }(hj7$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj )}(hj h]h*}(hjE$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#ubj#)}(hv4l2_devh]hv4l2_dev}(hjR$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j8 hj#ubah}(h]h ]h"]h$]h&]hhuh1j2 hj#hhhj#hKubeh}(h]h ]h"]h$]h&]hhj@uh1jjAjBhj#hhhj#hKubah}(h]j#ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj#hKhj#hhubjO)}(hhh]h)}(hTest if requests are supported.h]hTest if requests are supported.}(hj|$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhKhjy$hhubah}(h]h ]h"]h$]h&]uh1jNhj#hhhj#hKubeh}(h]h ](jfunctioneh"]h$]h&]jojjpj$jqj$jrjsjtuh1jhhhjhNhNubjv)}(hP**Parameters** ``struct v4l2_device *v4l2_dev`` pointer to struct v4l2_deviceh](h)}(h**Parameters**h]jg)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj$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]j )}(hj$h]hstruct v4l2_device *v4l2_dev}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$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&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj%ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj%hhhj.%hMubah}(h]j %ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj.%hMhj %hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj %hhhj.%hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpjG%jqjG%jrjsjtuh1jhhhjhNhNubh)}(h.``v4l2_device_for_each_subdev (sd, v4l2_dev)``h]j )}(hjM%h]h*v4l2_device_for_each_subdev (sd, v4l2_dev)}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjK%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]jg)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj%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]j )}(hj%h]hsd}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%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]j )}(hj%h]hstruct v4l2_subdev}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj%ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hj!&h]hv4l2_dev}(hj#&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&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]j )}(hj@&h]hstruct v4l2_device}(hjB&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj>&ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhj6&hMhj:&ubh( owning the sub-devices to iterate over.}(hj:&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6&hMhj7&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj6&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]jg)}(hj{&h]h Description}(hj}&hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjy&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&hhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubhQ device. It acts as a for loop iterator and executes the next statement with the }(hj&hhhNhNubjg)}(h**sd**h]hsd}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&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&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj&ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj&hhhj&hMubah}(h]j&ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj&hMhj&hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj&hhhj&hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj'jqj'jrjsjtuh1jhhhjhNhNubh)}(hD``__v4l2_device_call_subdevs_p (v4l2_dev, sd, cond, o, f, args...)``h]j )}(hj'h]h@__v4l2_device_call_subdevs_p (v4l2_dev, sd, cond, o, f, args...)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'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.}(hj4'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj0'ubah}(h]h ]h"]h$]h&]uh1hhjB'hMhjhhubjv)}(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.Rh](h)}(h**Parameters**h]jg)}(hjO'h]h Parameters}(hjQ'hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjM'ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjI'ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]j )}(hjn'h]hv4l2_dev}(hjp'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjl'ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjh'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]j )}(hj'h]hstruct v4l2_device}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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&]uh1jhjh'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhje'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]j )}(hj'h]hsd}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'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]j )}(hj'h]hstruct v4l2_subdev}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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'hMhje'ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]j )}(hj#(h]hcond}(hj%(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!(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&]uh1hhj8(hMhj9(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj8(hMhje'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]j )}(hj\(h]ho}(hj^(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZ(ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjV(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 }(hju(hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj(h]hstruct v4l2_subdev_ops}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj}(ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhju(ubh that contains }(hju(hhhNhNubjg)}(h**f**h]hf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhju(ubh:. Each element there groups a set of operations functions.}(hju(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMhjr(ubah}(h]h ]h"]h$]h&]uh1jhjV(ubeh}(h]h ]h"]h$]h&]uh1jhjq(hMhje'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]j )}(hj(h]hf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(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(hhhNhNubjg)}(h**cond**h]hcond}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj(ubhV matches. The operation functions are defined in groups, according to each element at }(hj(hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj)h]hstruct v4l2_subdev_ops}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_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(hMhje'ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj:)h]hargs...}(hj<)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4)ubj)}(hhh]h)}(harguments for **f**.h](harguments for }(hjS)hhhNhNubjg)}(h**f**h]hf}(hj[)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjS)ubh.}(hjS)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjO)hMhjP)ubah}(h]h ]h"]h$]h&]uh1jhj4)ubeh}(h]h ]h"]h$]h&]uh1jhjO)hMhje'ubeh}(h]h ]h"]h$]h&]uh1jhjI'ubh)}(h**Description**h]jg)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hjI'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.hhMhjI'ubh)}(h**Note**h]jg)}(hj)h]hNote}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM!hjI'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"hjI'ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj)ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj)hhhj *hM-ubah}(h]j)ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj *hM-hj)hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj)hhhj *hM-ubeh}(h]h ](jmacroeh"]h$]h&]jojjpj#*jqj#*jrjsjtuh1jhhhjhNhNubh)}(h>``__v4l2_device_call_subdevs (v4l2_dev, cond, o, f, args...)``h]j )}(hj)*h]h:__v4l2_device_call_subdevs (v4l2_dev, cond, o, f, args...)}(hj+*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'*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.}(hjC*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&]uh1hhjQ*hM-hjhhubjv)}(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]jg)}(hj^*h]h Parameters}(hj`*hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj\*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM1hjX*ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]j )}(hj}*h]hv4l2_dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj{*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM0hjw*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]j )}(hj*h]hstruct v4l2_device}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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&]uh1jhjw*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM0hjt*ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]j )}(hj*h]hcond}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*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*hM1hjt*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]j )}(hj+h]ho}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj +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]j )}(hj1+h]hstruct v4l2_subdev_ops}(hj3+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj/+ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM2hj'+ubh that contains }(hj'+hhhNhNubjg)}(h**f**h]hf}(hjS+hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj'+ubh:. Each element there groups a set of operations functions.}(hj'+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjN+hM2hj$+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj#+hM3hjt*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]j )}(hj}+h]hf}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj{+ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM6hjw+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+hhhNhNubjg)}(h**cond**h]hcond}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj+ubhV matches. The operation functions are defined in groups, according to each element at }(hj+hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj+h]hstruct v4l2_subdev_ops}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj+ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_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&]uh1jhjw+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM6hjt*ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj+h]hargs...}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+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,hhhNhNubjg)}(h**f**h]hf}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM7hj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hM7hjt*ubeh}(h]h ]h"]h$]h&]uh1jhjX*ubh)}(h**Description**h]jg)}(hj9,h]h Description}(hj;,hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj7,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM9hjX*ubh)}(hIgnore any errors.h]hIgnore any errors.}(hjO,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM8hjX*ubh)}(h**Note**h]jg)}(hj`,h]hNote}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj^,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM:hjX*ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjv,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM;hjX*ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj,ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj,hhhj,hMGubah}(h]j,ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj,hMGhj,hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj,hhhj,hMGubeh}(h]h ](jmacroeh"]h$]h&]jojjpj,jqj,jrjsjtuh1jhhhjhNhNubh)}(hN``__v4l2_device_call_subdevs_until_err_p (v4l2_dev, sd, cond, o, f, args...)``h]j )}(hj,h]hJ__v4l2_device_call_subdevs_until_err_p (v4l2_dev, sd, cond, o, f, args...)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,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-hMGhjhhubjv)}(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]jg)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj-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]j )}(hj/-h]hv4l2_dev}(hj1-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj--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]j )}(hjN-h]hstruct v4l2_device}(hjP-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjL-ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhjD-hMJhjH-ubh( owning the sub-devices to iterate over.}(hjH-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjD-hMJhjE-ubah}(h]h ]h"]h$]h&]uh1jhj)-ubeh}(h]h ]h"]h$]h&]uh1jhjD-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]j )}(hj-h]hsd}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMLhj-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]j )}(hj-h]hstruct v4l2_subdev}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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-hhhNhNubjg)}(h **v4l2_dev**h]hv4l2_dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMLhj&-ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]j )}(hj-h]hcond}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-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]j )}(hj/.h]ho}(hj1.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-.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 }(hjH.hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hjR.h]hstruct v4l2_subdev_ops}(hjT.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjP.ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMNhjH.ubh that contains }(hjH.hhhNhNubjg)}(h**f**h]hf}(hjt.hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjH.ubh:. Each element there groups a set of operations functions.}(hjH.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjo.hMNhjE.ubah}(h]h ]h"]h$]h&]uh1jhj).ubeh}(h]h ]h"]h$]h&]uh1jhjD.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]j )}(hj.h]hf}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.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.hhhNhNubjg)}(h**cond**h]hcond}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj.ubhV matches. The operation functions are defined in groups, according to each element at }(hj.hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj.h]hstruct v4l2_subdev_ops}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj.ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_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]j )}(hj /h]hargs...}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj /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&/hhhNhNubjg)}(h**f**h]hf}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&/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]jg)}(hjZ/h]h Description}(hj\/hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjX/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 }(hjp/hhhNhNubj )}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hjx/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjp/ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hjp/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]jg)}(hj/h]hNote}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj/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&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj/ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj/hhhj/hMlubah}(h]j/ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj/hMlhj/hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj/hhhj/hMlubeh}(h]h ](jmacroeh"]h$]h&]jojjpj0jqj0jrjsjtuh1jhhhjhNhNubh)}(hH``__v4l2_device_call_subdevs_until_err (v4l2_dev, cond, o, f, args...)``h]j )}(hj0h]hD__v4l2_device_call_subdevs_until_err (v4l2_dev, cond, o, f, args...)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMnhjhhubh)}(hFCalls the specified operation for all subdevs matching the condition. h]h)}(hECalls the specified operation for all subdevs matching the condition.h]hECalls the specified operation for all subdevs matching the condition.}(hj(0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMlhj$0ubah}(h]h ]h"]h$]h&]uh1hhj60hMlhjhhubjv)}(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]jg)}(hjC0h]h Parameters}(hjE0hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjA0ubah}(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]j )}(hjb0h]hv4l2_dev}(hjd0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj`0ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMohj\0ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]j )}(hj0h]hstruct v4l2_device}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhjw0hMohj{0ubh( owning the sub-devices to iterate over.}(hj{0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjw0hMohjx0ubah}(h]h ]h"]h$]h&]uh1jhj\0ubeh}(h]h ]h"]h$]h&]uh1jhjw0hMohjY0ubj)}(h``cond`` condition to be match h](j)}(h``cond``h]j )}(hj0h]hcond}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj0ubah}(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&]uh1jhj0hMphjY0ubj)}(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]j )}(hj0h]ho}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj0ubah}(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 }(hj 1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMqhj 1ubh that contains }(hj 1hhhNhNubjg)}(h**f**h]hf}(hj81hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj 1ubh:. Each element there groups a set of operations functions.}(hj 1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj31hMqhj 1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMrhjY0ubj)}(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]j )}(hjb1h]hf}(hjd1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj`1ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMuhj\1ubj)}(hhh]h)}(hoperation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](h*operation function that will be called if }(hj{1hhhNhNubjg)}(h**cond**h]hcond}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj{1ubhV matches. The operation functions are defined in groups, according to each element at }(hj{1hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj1h]hstruct v4l2_subdev_ops}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMshj{1ubh.}(hj{1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMshjx1ubah}(h]h ]h"]h$]h&]uh1jhj\1ubeh}(h]h ]h"]h$]h&]uh1jhjw1hMuhjY0ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj1h]hargs...}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(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 }(hj1hhhNhNubjg)}(h**f**h]hf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMvhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMvhjY0ubeh}(h]h ]h"]h$]h&]uh1jhj=0ubh)}(h**Description**h]jg)}(hj2h]h Description}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj2ubah}(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 }(hj42hhhNhNubj )}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj<2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj42ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj42hhhNhNubeh}(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]jg)}(hjW2h]hNote}(hjY2hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjU2ubah}(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.}(hjm2hhhNhNubah}(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&]uh1juhjhhhNhNubj)}(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 ]j.ah"]h$]h&]uh1j"hj2ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj2hhhj2hMubah}(h]j2ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj2hMhj2hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj2hhhj2hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj2jqj2jrjsjtuh1jhhhjhNhNubh)}(h9``v4l2_device_call_all (v4l2_dev, grpid, o, f, args...)``h]j )}(hj2h]h5v4l2_device_call_all (v4l2_dev, grpid, o, f, args...)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(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]j )}(hj2h]hv4l2_subdev.grp_id}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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&]uh1hhj3hMhj2ubah}(h]h ]h"]h$]h&]uh1hhj3hMhjhhubjv)}(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]jg)}(hj*3h]h Parameters}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj(3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$3ubj)}(hhh](j)}(h```v4l2_dev`` :c:type:`struct v4l2_device ` owning the sub-devices to iterate over. h](j)}(h ``v4l2_dev``h]j )}(hjI3h]hv4l2_dev}(hjK3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjG3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjC3ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]j )}(hjh3h]hstruct v4l2_device}(hjj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjf3ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhj^3hMhjb3ubh( owning the sub-devices to iterate over.}(hjb3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^3hMhj_3ubah}(h]h ]h"]h$]h&]uh1jhjC3ubeh}(h]h ]h"]h$]h&]uh1jhj^3hMhj@3ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]j )}(hj3h]hgrpid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(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]j )}(hj3h]hstruct v4l2_subdev}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hj3h]ho}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(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 }(hj4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj4h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4ubh that contains }(hj4hhhNhNubjg)}(h**f**h]hf}(hj?4hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj4ubh:. Each element there groups a set of operations functions.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj@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]j )}(hji4h]hf}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjg4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjc4ubj)}(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 }(hj4hhhNhNubjg)}(h**cond**h]hcond}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj4ubhV matches. The operation functions are defined in groups, according to each element at }(hj4hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj4h]hstruct v4l2_subdev_ops}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjc4ubeh}(h]h ]h"]h$]h&]uh1jhj~4hMhj@3ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj4h]hargs...}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubah}(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 }(hj4hhhNhNubjg)}(h**f**h]hf}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj4ubh.}(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&]uh1jhj$3ubh)}(h**Description**h]jg)}(hj%5h]h Description}(hj'5hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj#5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$3ubh)}(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.hhMhj$3ubh)}(h**Note**h]jg)}(hjL5h]hNote}(hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjJ5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$3ubh)}(hBsubdevs cannot be added or deleted while walking the subdevs list.h]hBsubdevs cannot be added or deleted while walking the subdevs list.}(hjb5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj$3ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$v4l2_device_call_until_err (C macro)c.v4l2_device_call_until_errhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_call_until_errh]j)}(hv4l2_device_call_until_errh]j)}(hv4l2_device_call_until_errh]j#)}(hj5h]hv4l2_device_call_until_err}(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj5ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhj5hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj@uh1jjAjBhj5hhhj5hMubah}(h]j5ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj5hMhj5hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj5hhhj5hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj5jqj5jrjsjtuh1jhhhjhNhNubh)}(h?``v4l2_device_call_until_err (v4l2_dev, grpid, o, f, args...)``h]j )}(hj5h]h;v4l2_device_call_until_err (v4l2_dev, grpid, o, f, args...)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(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]j )}(hj5h]hv4l2_subdev.grp_id}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5ubh:, as assigned by the bridge driver, until an error occurs.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj5ubah}(h]h ]h"]h$]h&]uh1hhj6hMhjhhubjv)}(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]jg)}(hj6h]h Parameters}(hj!6hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj6ubah}(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]j )}(hj>6h]hv4l2_dev}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj86ubj)}(hhh]h)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]j )}(hj]6h]hstruct v4l2_device}(hj_6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj[6ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhjS6hMhjW6ubh( owning the sub-devices to iterate over.}(hjW6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS6hMhjT6ubah}(h]h ]h"]h$]h&]uh1jhj86ubeh}(h]h ]h"]h$]h&]uh1jhjS6hMhj56ubj)}(hi``grpid`` :c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all. h](j)}(h ``grpid``h]j )}(hj6h]hgrpid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubj)}(hhh]h)}(h^:c:type:`struct v4l2_subdev `->grp_id group ID to match. Use 0 to match them all.h](h)}(h*:c:type:`struct v4l2_subdev `h]j )}(hj6h]hstruct v4l2_subdev}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubh4->grp_id group ID to match. Use 0 to match them all.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj56ubj)}(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]j )}(hj6h]ho}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj6ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj7h]hstruct v4l2_subdev_ops}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj7ubh that contains }(hj7hhhNhNubjg)}(h**f**h]hf}(hj47hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj7ubh:. Each element there groups a set of operations functions.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj56ubj)}(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]j )}(hj^7h]hf}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\7ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjX7ubj)}(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 }(hjw7hhhNhNubjg)}(h**cond**h]hcond}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjw7ubhV matches. The operation functions are defined in groups, according to each element at }(hjw7hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj7h]hstruct v4l2_subdev_ops}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjw7ubh.}(hjw7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhjt7ubah}(h]h ]h"]h$]h&]uh1jhjX7ubeh}(h]h ]h"]h$]h&]uh1jhjs7hMhj56ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj7h]hargs...}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj7ubah}(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 }(hj7hhhNhNubjg)}(h**f**h]hf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj56ubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]jg)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj8ubah}(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 }(hj08hhhNhNubj )}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj88hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj08ubhO for any subdevice, then abort and return with that error code, zero otherwise.}(hj08hhhNhNubeh}(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]jg)}(hjS8h]hNote}(hjU8hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjQ8ubah}(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.}(hji8hhhNhNubah}(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&]uh1juhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_device_mask_call_all (C macro)c.v4l2_device_mask_call_allhNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_mask_call_allh]j)}(hv4l2_device_mask_call_allh]j)}(hv4l2_device_mask_call_allh]j#)}(hj8h]hv4l2_device_mask_call_all}(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj8ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj8hhhj8hMubah}(h]j8ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj8hMhj8hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj8hhhj8hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj8jqj8jrjsjtuh1jhhhjhNhNubh)}(h?``v4l2_device_mask_call_all (v4l2_dev, grpmsk, o, f, args...)``h]j )}(hj8h]h;v4l2_device_mask_call_all (v4l2_dev, grpmsk, o, f, args...)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8ubah}(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&]uh1hhj8hMhjhhubjv)}(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]jg)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj9ubah}(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]j )}(hj"9h]hv4l2_dev}(hj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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]j )}(hjA9h]hstruct v4l2_device}(hjC9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj?9ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhj79hMhj;9ubh( owning the sub-devices to iterate over.}(hj;9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj79hMhj89ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj79hMhj9ubj)}(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]j )}(hjz9h]hgrpmsk}(hj|9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjx9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjt9ubj)}(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]j )}(hj9h]hstruct v4l2_subdev}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj9ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjt9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(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]j )}(hj9h]ho}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubah}(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]j )}(hj9h]hstruct v4l2_subdev_ops}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj9ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj9ubh that contains }(hj9hhhNhNubjg)}(h**f**h]hf}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj9ubh:. 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]j )}(hjF:h]hf}(hjH:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjD: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_:hhhNhNubjg)}(h**cond**h]hcond}(hjg:hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj_:ubhV matches. The operation functions are defined in groups, according to each element at }(hj_:hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj{:h]hstruct v4l2_subdev_ops}(hj}:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjy:ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_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[:hMhj9ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj:h]hargs...}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj: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:hhhNhNubjg)}(h**f**h]hf}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj: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]jg)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj;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]jg)}(hj);h]hNote}(hj+;hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj';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&]uh1juhjhhhNhNubj)}(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#)}(hjh;h]hv4l2_device_mask_call_until_err}(hjr;hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjn;ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjj;hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjf;hhhj;hMubah}(h]ja;ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj;hMhjc;hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhjc;hhhj;hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj;jqj;jrjsjtuh1jhhhjhNhNubh)}(hE``v4l2_device_mask_call_until_err (v4l2_dev, grpmsk, o, f, args...)``h]j )}(hj;h]hAv4l2_device_mask_call_until_err (v4l2_dev, grpmsk, o, f, args...)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;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;hMhjhhubjv)}(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]jg)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj;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]j )}(hj;h]hv4l2_dev}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;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]j )}(hj<h]hstruct v4l2_device}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hjP<h]hgrpmsk}(hjR<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjN<ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjJ<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 }(hji<hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j )}(hjs<h]hstruct v4l2_subdev}(hju<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjq<ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhji<ubh9->grp_id group ID to be matched. Use 0 to match them all.}(hji<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhjf<ubah}(h]h ]h"]h$]h&]uh1jhjJ<ubeh}(h]h ]h"]h$]h&]uh1jhje<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]j )}(hj<h]ho}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<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]j )}(hj<h]hstruct v4l2_subdev_ops}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj<ubh that contains }(hj<hhhNhNubjg)}(h**f**h]hf}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj<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]j )}(hj=h]hf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=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 }(hj5=hhhNhNubjg)}(h**cond**h]hcond}(hj==hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj5=ubhV matches. The operation functions are defined in groups, according to each element at }(hj5=hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hjQ=h]hstruct v4l2_subdev_ops}(hjS=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjO=ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj5=ubh.}(hj5=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjn=hMhj2=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj1=hMhj;ubj)}(h!``args...`` arguments for **f**. h](j)}(h ``args...``h]j )}(hj=h]hargs...}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=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=hhhNhNubjg)}(h**f**h]hf}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]jg)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj=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=hhhNhNubj )}(h``-ENOIOCTLCMD``h]h -ENOIOCTLCMD}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=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]jg)}(hj>h]hNote}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj>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&]uh1juhjhhhNhNubj)}(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#)}(hjP>h]hv4l2_device_has_op}(hjZ>hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hjV>ubah}(h]h ](j5j6eh"]h$]h&]hhuh1jhjR>hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMubah}(h]h ]h"]h$]h&]hhj@uh1jjAjBhjN>hhhjm>hMubah}(h]jI>ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhjm>hMhjK>hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhjK>hhhjm>hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj>jqj>jrjsjtuh1jhhhjhNhNubh)}(h.``v4l2_device_has_op (v4l2_dev, grpid, o, f)``h]j )}(hj>h]h*v4l2_device_has_op (v4l2_dev, grpid, o, f)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>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>hMhjhhubjv)}(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]jg)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj>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]j )}(hj>h]hv4l2_dev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>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]j )}(hj>h]hstruct v4l2_device}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM 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]j )}(hj8?h]hgrpid}(hj:?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj2?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]j )}(hjW?h]hstruct v4l2_subdev}(hjY?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjU?ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhjQ?ubh4->grp_id group ID to match. Use 0 to match them all.}(hjQ?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjt?hMhjN?ubah}(h]h ]h"]h$]h&]uh1jhj2?ubeh}(h]h ]h"]h$]h&]uh1jhjM?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]j )}(hj?h]ho}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM hj?ubj)}(hhh]h)}(hname of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of operations functions.h](hname of the element at }(hj?hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj?h]hstruct v4l2_subdev_ops}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhMhj?ubh that contains }(hj?hhhNhNubjg)}(h**f**h]hf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj?ubh:. Each element there groups a set of operations functions.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj>ubj)}(h``f`` operation function that will be called if **cond** matches. The operation functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.h](j)}(h``f``h]j )}(hj@h]hf}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?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@hhhNhNubjg)}(h**cond**h]hcond}(hj!@hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj@ubhV matches. The operation functions are defined in groups, according to each element at }(hj@hhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hj5@h]hstruct v4l2_subdev_ops}(hj7@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj3@ubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_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&]uh1hhjR@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&]uh1juhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!v4l2_device_mask_has_op (C macro)c.v4l2_device_mask_has_ophNtauh1jhjhhhNhNubj)}(hhh](j)}(hv4l2_device_mask_has_oph]j)}(hv4l2_device_mask_has_oph]j)}(hv4l2_device_mask_has_oph]j#)}(hj@h]hv4l2_device_mask_has_op}(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j"hj@ubah}(h]h ](j5j6eh"]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@uh1jjAjBhj@hhhj@hMubah}(h]j@ah ](jFjGeh"]h$]h&]jKjL)jMhuh1jhj@hMhj@hhubjO)}(hhh]h}(h]h ]h"]h$]h&]uh1jNhj@hhhj@hMubeh}(h]h ](jmacroeh"]h$]h&]jojjpj@jqj@jrjsjtuh1jhhhjhNhNubh)}(h4``v4l2_device_mask_has_op (v4l2_dev, grpmsk, o, f)``h]j )}(hj@h]h0v4l2_device_mask_has_op (v4l2_dev, grpmsk, o, f)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@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@hMhjhhubjv)}(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]jg)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj@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]j )}(hjAh]hv4l2_dev}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjAubah}(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)}(hR:c:type:`struct v4l2_device ` owning the sub-devices to iterate over.h](h)}(h*:c:type:`struct v4l2_device `h]j )}(hj8Ah]hstruct v4l2_device}(hj:AhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hj6Aubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_deviceuh1hhj.AhM!hj2Aubh( owning the sub-devices to iterate over.}(hj2AhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.AhM!hj/Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj.AhM!hjAubj)}(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]j )}(hjqAh]hgrpmsk}(hjsAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjoAubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM#hjkAubj)}(hhh]h)}(hbitmask to be checked against :c:type:`struct v4l2_subdev `->grp_id group ID to be matched. Use 0 to match them all.h](hbitmask to be checked against }(hjAhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j )}(hjAh]hstruct v4l2_subdev}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjAubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j( v4l2_subdevuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM"hjAubh9->grp_id group ID to be matched. Use 0 to match them all.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM"hjAubah}(h]h ]h"]h$]h&]uh1jhjkAubeh}(h]h ]h"]h$]h&]uh1jhjAhM#hjAubj)}(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]j )}(hjAh]ho}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjAubah}(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]j )}(hjAh]hstruct v4l2_subdev_ops}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjAubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM$hjAubh that contains }(hjAhhhNhNubjg)}(h**f**h]hf}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjAubh:. Each element there groups a set of operations functions.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhM$hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM%hjAubj)}(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]j )}(hj=Bh]hf}(hj?BhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;Bubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM'hj7Bubj)}(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 }(hjVBhhhNhNubjg)}(h**cond**h]hcond}(hj^BhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjVBubhV matches. The operation functions are defined in groups, according to each element at }(hjVBhhhNhNubh)}(h2:c:type:`struct v4l2_subdev_ops `h]j )}(hjrBh]hstruct v4l2_subdev_ops}(hjtBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j hjpBubah}(h]h ]h"]h$]h&]refdocj" refdomainjreftypetype refexplicitrefwarnjv jM j(v4l2_subdev_opsuh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-device:146: ./include/media/v4l2-device.hhM&hjVBubh.}(hjVBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhM&hjSBubah}(h]h ]h"]h$]h&]uh1jhj7Bubeh}(h]h ]h"]h$]h&]uh1jhjRBhM'hjAubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhjhhhNhNubeh}(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_sourcehnj _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 jjjujzjjjjjjjjjTjYj/j4jjj1!j6!j#j#j %j%j&j&j)j)j,j,j/j/j2j2j5j5j8j8ja;jf;jI>jN>j@j@u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(heUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.h]hgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.}(hjMChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJCubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKrsourcejuh1jHChjubatransform_messages] transformerN include_log] decorationNhhub.