€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ0/translations/zh_CN/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/driver-api/media/v4l2-subdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒV4L2 sub-devices”h]”hŒV4L2 sub-devices”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒìMany drivers need to communicate with sub-devices. These devices can do all sort of tasks, but most commonly they handle audio and/or video muxing, encoding or decoding. For webcams common sub-devices are sensors and camera controllers.”h]”hŒìMany drivers need to communicate with sub-devices. These devices can do all sort of tasks, but most commonly they handle audio and/or video muxing, encoding or decoding. For webcams common sub-devices are sensors and camera controllers.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒÁUsually these are I2C devices, but not necessarily. In order to provide the driver with a consistent interface to these sub-devices the :c:type:`v4l2_subdev` struct (v4l2-subdev.h) was created.”h]”(hŒˆUsually these are I2C devices, but not necessarily. In order to provide the driver with a consistent interface to these sub-devices the ”…”�”}”(hhíh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hŒliteral”“”)�”}”(hh÷h]”hŒ v4l2_subdev”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1hùhhõubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/media/v4l2-subdev”Œ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”Œ v4l2_subdev”uh1hh³hÇh´K hhíubhŒ$ struct (v4l2-subdev.h) was created.”…”�”}”(hhíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(hX(Each sub-device driver must have a :c:type:`v4l2_subdev` struct. This struct can be stand-alone for simple sub-devices or it might be embedded in a larger struct if more state information needs to be stored. Usually there is a low-level device struct (e.g. ``i2c_client``) that contains the device data as setup by the kernel. It is recommended to store that pointer in the private data of :c:type:`v4l2_subdev` using :c:func:`v4l2_set_subdevdata`. That makes it easy to go from a :c:type:`v4l2_subdev` to the actual low-level bus-specific device data.”h]”(hŒ#Each sub-device driver must have a ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj.h]”hŒ v4l2_subdev”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Khj$ubhŒÉ struct. This struct can be stand-alone for simple sub-devices or it might be embedded in a larger struct if more state information needs to be stored. Usually there is a low-level device struct (e.g. ”…”�”}”(hj$h²hh³Nh´Nubhú)�”}”(hŒ``i2c_client``”h]”hŒ i2c_client”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj$ubhŒw) that contains the device data as setup by the kernel. It is recommended to store that pointer in the private data of ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjch]”hŒ v4l2_subdev”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjaubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Khj$ubhŒ using ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_set_subdevdata`”h]”hú)�”}”(hj†h]”hŒv4l2_set_subdevdata()”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_set_subdevdata”uh1hh³hÇh´Khj$ubhŒ". That makes it easy to go from a ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj©h]”hŒ v4l2_subdev”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj§ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Khj$ubhŒ2 to the actual low-level bus-specific device data.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒñYou also need a way to go from the low-level struct to :c:type:`v4l2_subdev`. For the common i2c_client struct the i2c_set_clientdata() call is used to store a :c:type:`v4l2_subdev` pointer, for other buses you may have to use other methods.”h]”(hŒ7You also need a way to go from the low-level struct to ”…”�”}”(hjÐh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjÚh]”hŒ v4l2_subdev”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjØubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´KhjÐubhŒT. For the common i2c_client struct the i2c_set_clientdata() call is used to store a ”…”�”}”(hjÐh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjýh]”hŒ v4l2_subdev”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjûubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´KhjÐubhŒ< pointer, for other buses you may have to use other methods.”…”�”}”(hjÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hX,Bridges might also need to store per-subdev private data, such as a pointer to bridge-specific per-subdev private data. The :c:type:`v4l2_subdev` structure provides host private data for that purpose that can be accessed with :c:func:`v4l2_get_subdev_hostdata` and :c:func:`v4l2_set_subdev_hostdata`.”h]”(hŒ|Bridges might also need to store per-subdev private data, such as a pointer to bridge-specific per-subdev private data. The ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj.h]”hŒ v4l2_subdev”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Khj$ubhŒQ structure provides host private data for that purpose that can be accessed with ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ":c:func:`v4l2_get_subdev_hostdata`”h]”hú)�”}”(hjQh]”hŒv4l2_get_subdev_hostdata()”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjOubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_get_subdev_hostdata”uh1hh³hÇh´Khj$ubhŒ and ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ":c:func:`v4l2_set_subdev_hostdata`”h]”hú)�”}”(hjth]”hŒv4l2_set_subdev_hostdata()”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjrubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_set_subdev_hostdata”uh1hh³hÇh´Khj$ubhŒ.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hXLFrom the bridge driver perspective, you load the sub-device module and somehow obtain the :c:type:`v4l2_subdev` pointer. For i2c devices this is easy: you call ``i2c_get_clientdata()``. For other buses something similar needs to be done. Helper functions exist for sub-devices on an I2C bus that do most of this tricky work for you.”h]”(hŒZFrom the bridge driver perspective, you load the sub-device module and somehow obtain the ”…”�”}”(hj›h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj¥h]”hŒ v4l2_subdev”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K"hj›ubhŒ1 pointer. For i2c devices this is easy: you call ”…”�”}”(hj›h²hh³Nh´Nubhú)�”}”(hŒ``i2c_get_clientdata()``”h]”hŒi2c_get_clientdata()”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj›ubhŒ”. For other buses something similar needs to be done. Helper functions exist for sub-devices on an I2C bus that do most of this tricky work for you.”…”�”}”(hj›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hhÊh²hubhÞ)�”}”(hX‰Each :c:type:`v4l2_subdev` contains function pointers that sub-device drivers can implement (or leave ``NULL`` if it is not applicable). Since sub-devices can do so many different things and you do not want to end up with a huge ops struct of which only a handful of ops are commonly implemented, the function pointers are sorted according to category and each category has its own ops struct.”h]”(hŒEach ”…”�”}”(hjÞh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjèh]”hŒ v4l2_subdev”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjæubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K(hjÞubhŒL contains function pointers that sub-device drivers can implement (or leave ”…”�”}”(hjÞh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÞubhX if it is not applicable). Since sub-devices can do so many different things and you do not want to end up with a huge ops struct of which only a handful of ops are commonly implemented, the function pointers are sorted according to category and each category has its own ops struct.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hhÊh²hubhÞ)�”}”(hŒœThe top-level ops struct contains pointers to the category ops structs, which may be NULL if the subdev driver does not support anything from that category.”h]”hŒœThe top-level ops struct contains pointers to the category ops structs, which may be NULL if the subdev driver does not support anything from that category.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hhÊh²hubhÞ)�”}”(hŒIt looks like this:”h]”hŒIt looks like this:”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hhÊh²hubhŒ literal_block”“”)�”}”(hXhstruct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*init)(struct v4l2_subdev *sd, u32 val); ... }; struct v4l2_subdev_tuner_ops { ... }; struct v4l2_subdev_audio_ops { ... }; struct v4l2_subdev_video_ops { ... }; struct v4l2_subdev_pad_ops { ... }; struct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_pad_ops *video; };”h]”hXhstruct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*init)(struct v4l2_subdev *sd, u32 val); ... }; struct v4l2_subdev_tuner_ops { ... }; struct v4l2_subdev_audio_ops { ... }; struct v4l2_subdev_video_ops { ... }; struct v4l2_subdev_pad_ops { ... }; struct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_pad_ops *video; };”…”�”}”hj?sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”jŒhighlight_args”}”uh1j=h³hÇh´K3hhÊh²hubhÞ)�”}”(hŒ²The core ops are common to all subdevs, the other categories are implemented depending on the sub-device. E.g. a video device is unlikely to support the audio ops and vice versa.”h]”hŒ²The core ops are common to all subdevs, the other categories are implemented depending on the sub-device. E.g. a video device is unlikely to support the audio ops and vice versa.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KShhÊh²hubhÞ)�”}”(hŒkThis setup limits the number of function pointers while still making it easy to add new ops and categories.”h]”hŒkThis setup limits the number of function pointers while still making it easy to add new ops and categories.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KWhhÊh²hubhÞ)�”}”(hŒGA sub-device driver initializes the :c:type:`v4l2_subdev` struct using:”h]”(hŒ$A sub-device driver initializes the ”…”�”}”(hjmh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjwh]”hŒ v4l2_subdev”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjuubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´KZhjmubhŒ struct using:”…”�”}”(hjmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KZhhÊh²hubhŒ block_quote”“”)�”}”(hŒq:c:func:`v4l2_subdev_init ` (:c:type:`sd `, &\ :c:type:`ops `). ”h]”hÞ)�”}”(hŒo:c:func:`v4l2_subdev_init ` (:c:type:`sd `, &\ :c:type:`ops `).”h]”(h)�”}”(hŒ-:c:func:`v4l2_subdev_init `”h]”hú)�”}”(hjªh]”hŒv4l2_subdev_init”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj¨ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”ˆŒrefwarn”‰jŒv4l2_subdev_init”uh1hh³hÇh´K\hj¤ubhŒ (”…”�”}”(hj¤h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hjÍh]”hŒsd”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjËubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K\hj¤ubhŒ, & ”…”�”}”(hj¤h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ops `”h]”hú)�”}”(hjðh]”hŒops”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjîubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒv4l2_subdev_ops”uh1hh³hÇh´K\hj¤ubhŒ).”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´K\hhÊh²hubhÞ)�”}”(hŒ©Afterwards you need to initialize :c:type:`sd `->name with a unique name and set the module owner. This is done for you if you use the i2c helper functions.”h]”(hŒ"Afterwards you need to initialize ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj'h]”hŒsd”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K`hjubhŒm->name with a unique name and set the module owner. This is done for you if you use the i2c helper functions.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hhÊh²hubhÞ)�”}”(hŒéIf integration with the media framework is needed, you must initialize the :c:type:`media_entity` struct embedded in the :c:type:`v4l2_subdev` struct (entity field) by calling :c:func:`media_entity_pads_init`, if the entity has pads:”h]”(hŒKIf integration with the media framework is needed, you must initialize the ”…”�”}”(hjNh²hh³Nh´Nubh)�”}”(hŒ:c:type:`media_entity`”h]”hú)�”}”(hjXh]”hŒ media_entity”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjVubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ media_entity”uh1hh³hÇh´KdhjNubhŒ struct embedded in the ”…”�”}”(hjNh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj{h]”hŒ v4l2_subdev”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjyubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´KdhjNubhŒ" struct (entity field) by calling ”…”�”}”(hjNh²hh³Nh´Nubh)�”}”(hŒ :c:func:`media_entity_pads_init`”h]”hú)�”}”(hjžh]”hŒmedia_entity_pads_init()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjœubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒmedia_entity_pads_init”uh1hh³hÇh´KdhjNubhŒ, if the entity has pads:”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KdhhÊh²hubj>)�”}”(hŒhstruct media_pad *pads = &my_sd->pads; int err; err = media_entity_pads_init(&sd->entity, npads, pads);”h]”hŒhstruct media_pad *pads = &my_sd->pads; int err; err = media_entity_pads_init(&sd->entity, npads, pads);”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´KihhÊh²hubhÞ)�”}”(hŒ¾The pads array must have been previously initialized. There is no need to manually set the struct media_entity function and name fields, but the revision field must be initialized if needed.”h]”hŒ¾The pads array must have been previously initialized. There is no need to manually set the struct media_entity function and name fields, but the revision field must be initialized if needed.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KphhÊh²hubhÞ)�”}”(hŒxA reference to the entity will be automatically acquired/released when the subdev device node (if any) is opened/closed.”h]”hŒxA reference to the entity will be automatically acquired/released when the subdev device node (if any) is opened/closed.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KthhÊh²hubhÞ)�”}”(hŒLDon't forget to cleanup the media entity before the sub-device is destroyed:”h]”hŒNDon’t forget to cleanup the media entity before the sub-device is destroyed:”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KwhhÊh²hubj>)�”}”(hŒ"media_entity_cleanup(&sd->entity);”h]”hŒ"media_entity_cleanup(&sd->entity);”…”�”}”hjþsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´KyhhÊh²hubhÞ)�”}”(hX¡If a sub-device driver implements sink pads, the subdev driver may set the link_validate field in :c:type:`v4l2_subdev_pad_ops` to provide its own link validation function. For every link in the pipeline, the link_validate pad operation of the sink end of the link is called. In both cases the driver is still responsible for validating the correctness of the format configuration between sub-devices and video nodes.”h]”(hŒbIf a sub-device driver implements sink pads, the subdev driver may set the link_validate field in ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_pad_ops`”h]”hú)�”}”(hjh]”hŒv4l2_subdev_pad_ops”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_pad_ops”uh1hh³hÇh´K}hj ubhX" to provide its own link validation function. For every link in the pipeline, the link_validate pad operation of the sink end of the link is called. In both cases the driver is still responsible for validating the correctness of the format configuration between sub-devices and video nodes.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K}hhÊh²hubhÞ)�”}”(hX_If link_validate op is not set, the default function :c:func:`v4l2_subdev_link_validate_default` is used instead. This function ensures that width, height and the media bus pixel code are equal on both source and sink of the link. Subdev drivers are also free to use this function to perform the checks mentioned above in addition to their own checks.”h]”(hŒ5If link_validate op is not set, the default function ”…”�”}”(hj>h²hh³Nh´Nubh)�”}”(hŒ+:c:func:`v4l2_subdev_link_validate_default`”h]”hú)�”}”(hjHh]”hŒ#v4l2_subdev_link_validate_default()”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjFubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ!v4l2_subdev_link_validate_default”uh1hh³hÇh´K„hj>ubhŒÿ is used instead. This function ensures that width, height and the media bus pixel code are equal on both source and sink of the link. Subdev drivers are also free to use this function to perform the checks mentioned above in addition to their own checks.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K„hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSubdev registration”h]”hŒSubdev registration”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjoh²hh³hÇh´K‹ubhÞ)�”}”(hX2There are currently two ways to register subdevices with the V4L2 core. The first (traditional) possibility is to have subdevices registered by bridge drivers. This can be done when the bridge driver has the complete information about subdevices connected to it and knows exactly when to register them. This is typically the case for internal subdevices, like video data processing units within SoCs or complex PCI(e) boards, camera sensors in USB cameras or connected to SoCs, which pass information about them to bridge drivers, usually in their platform data.”h]”hX2There are currently two ways to register subdevices with the V4L2 core. The first (traditional) possibility is to have subdevices registered by bridge drivers. This can be done when the bridge driver has the complete information about subdevices connected to it and knows exactly when to register them. This is typically the case for internal subdevices, like video data processing units within SoCs or complex PCI(e) boards, camera sensors in USB cameras or connected to SoCs, which pass information about them to bridge drivers, usually in their platform data.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjoh²hubhÞ)�”}”(hXŽThere are however also situations where subdevices have to be registered asynchronously to bridge devices. An example of such a configuration is a Device Tree based system where information about subdevices is made available to the system independently from the bridge devices, e.g. when subdevices are defined in DT as I2C device nodes. The API used in this second case is described further below.”h]”hXŽThere are however also situations where subdevices have to be registered asynchronously to bridge devices. An example of such a configuration is a Device Tree based system where information about subdevices is made available to the system independently from the bridge devices, e.g. when subdevices are defined in DT as I2C device nodes. The API used in this second case is described further below.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K–hjoh²hubhÞ)�”}”(hŒ‘Using one or the other registration method only affects the probing process, the run-time bridge-subdevice interaction is in both cases the same.”h]”hŒ‘Using one or the other registration method only affects the probing process, the run-time bridge-subdevice interaction is in both cases the same.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjoh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ#Registering synchronous sub-devices”h]”hŒ#Registering synchronous sub-devices”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjªh²hh³hÇh´K¡ubhÞ)�”}”(hŒvIn the **synchronous** case a device (bridge) driver needs to register the :c:type:`v4l2_subdev` with the v4l2_device:”h]”(hŒIn the ”…”�”}”(hj»h²hh³Nh´NubhŒstrong”“”)�”}”(hŒ**synchronous**”h]”hŒ synchronous”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj»ubhŒ5 case a device (bridge) driver needs to register the ”…”�”}”(hj»h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjÙh]”hŒ v4l2_subdev”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj×ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K£hj»ubhŒ with the v4l2_device:”…”�”}”(hj»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K£hjªh²hubjŸ)�”}”(hŒ„:c:func:`v4l2_device_register_subdev ` (:c:type:`v4l2_dev `, :c:type:`sd `). ”h]”hÞ)�”}”(hŒƒ:c:func:`v4l2_device_register_subdev ` (:c:type:`v4l2_dev `, :c:type:`sd `).”h]”(h)�”}”(hŒC:c:func:`v4l2_device_register_subdev `”h]”hú)�”}”(hj h]”hŒv4l2_device_register_subdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”ˆŒrefwarn”‰jŒv4l2_device_register_subdev”uh1hh³hÇh´K¦hjubhŒ (”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ :c:type:`v4l2_dev `”h]”hú)�”}”(hj-h]”hŒv4l2_dev”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_device”uh1hh³hÇh´K¦hjubhŒ, ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hjPh]”hŒsd”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjNubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K¦hjubhŒ).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¦hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´K¦hjªh²hubhÞ)�”}”(hŒ´This can fail if the subdev module disappeared before it could be registered. After this function was called successfully the subdev->dev field points to the :c:type:`v4l2_device`.”h]”(hŒžThis can fail if the subdev module disappeared before it could be registered. After this function was called successfully the subdev->dev field points to the ”…”�”}”(hj}h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_device`”h]”hú)�”}”(hj‡h]”hŒ v4l2_device”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_device”uh1hh³hÇh´K©hj}ubhŒ.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K©hjªh²hubhÞ)�”}”(hŒ‰If the v4l2_device parent device has a non-NULL mdev field, the sub-device entity will be automatically registered with the media device.”h]”hŒ‰If the v4l2_device parent device has a non-NULL mdev field, the sub-device entity will be automatically registered with the media device.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K­hjªh²hubhÞ)�”}”(hŒ&You can unregister a sub-device using:”h]”hŒ&You can unregister a sub-device using:”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K°hjªh²hubjŸ)�”}”(hŒf:c:func:`v4l2_device_unregister_subdev ` (:c:type:`sd `). ”h]”hÞ)�”}”(hŒe:c:func:`v4l2_device_unregister_subdev ` (:c:type:`sd `).”h]”(h)�”}”(hŒG:c:func:`v4l2_device_unregister_subdev `”h]”hú)�”}”(hjÔh]”hŒv4l2_device_unregister_subdev”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjÒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”ˆŒrefwarn”‰jŒv4l2_device_unregister_subdev”uh1hh³hÇh´K²hjÎubhŒ (”…”�”}”(hjÎh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj÷h]”hŒsd”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjõubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´K²hjÎubhŒ).”…”�”}”(hjÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K²hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´K²hjªh²hubhÞ)�”}”(hŒ]Afterwards the subdev module can be unloaded and :c:type:`sd `->dev == ``NULL``.”h]”(hŒ1Afterwards the subdev module can be unloaded and ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj.h]”hŒsd”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Kµhj$ubhŒ ->dev == ”…”�”}”(hj$h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj$ubhŒ.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kµhjªh²hubhŒtarget”“”)�”}”(hŒ$.. _media-registering-async-subdevs:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œmedia-registering-async-subdevs”uh1jgh´K¸hjªh²hh³hÇubeh}”(h]”Œ#registering-synchronous-sub-devices”ah ]”h"]”Œ#registering synchronous sub-devices”ah$]”h&]”uh1hÈhjoh²hh³hÇh´K¡ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ$Registering asynchronous sub-devices”h]”hŒ$Registering asynchronous sub-devices”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj}h²hh³hÇh´K»ubhÞ)�”}”(hX×In the **asynchronous** case subdevice probing can be invoked independently of the bridge driver availability. The subdevice driver then has to verify whether all the requirements for a successful probing are satisfied. This can include a check for a master clock availability. If any of the conditions aren't satisfied the driver might decide to return ``-EPROBE_DEFER`` to request further reprobing attempts. Once all conditions are met the subdevice shall be registered using the :c:func:`v4l2_async_register_subdev` function. Unregistration is performed using the :c:func:`v4l2_async_unregister_subdev` call. Subdevices registered this way are stored in a global list of subdevices, ready to be picked up by bridge drivers.”h]”(hŒIn the ”…”�”}”(hjŽh²hh³Nh´NubjÄ)�”}”(hŒ**asynchronous**”h]”hŒ asynchronous”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjŽubhXM case subdevice probing can be invoked independently of the bridge driver availability. The subdevice driver then has to verify whether all the requirements for a successful probing are satisfied. This can include a check for a master clock availability. If any of the conditions aren’t satisfied the driver might decide to return ”…”�”}”(hjŽh²hh³Nh´Nubhú)�”}”(hŒ``-EPROBE_DEFER``”h]”hŒ -EPROBE_DEFER”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjŽubhŒp to request further reprobing attempts. Once all conditions are met the subdevice shall be registered using the ”…”�”}”(hjŽh²hh³Nh´Nubh)�”}”(hŒ$:c:func:`v4l2_async_register_subdev`”h]”hú)�”}”(hj¼h]”hŒv4l2_async_register_subdev()”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjºubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_register_subdev”uh1hh³hÇh´K½hjŽubhŒ1 function. Unregistration is performed using the ”…”�”}”(hjŽh²hh³Nh´Nubh)�”}”(hŒ&:c:func:`v4l2_async_unregister_subdev`”h]”hú)�”}”(hjßh]”hŒv4l2_async_unregister_subdev()”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjÝubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_unregister_subdev”uh1hh³hÇh´K½hjŽubhŒy call. Subdevices registered this way are stored in a global list of subdevices, ready to be picked up by bridge drivers.”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K½hj}h²hubhÞ)�”}”(hŒìDrivers must complete all initialization of the sub-device before registering it using :c:func:`v4l2_async_register_subdev`, including enabling runtime PM. This is because the sub-device becomes accessible as soon as it gets registered.”h]”(hŒWDrivers must complete all initialization of the sub-device before registering it using ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ$:c:func:`v4l2_async_register_subdev`”h]”hú)�”}”(hjh]”hŒv4l2_async_register_subdev()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_register_subdev”uh1hh³hÇh´KÈhjubhŒq, including enabling runtime PM. This is because the sub-device becomes accessible as soon as it gets registered.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÈhj}h²hubeh}”(h]”(Œ$registering-asynchronous-sub-devices”jteh ]”h"]”(Œ$registering asynchronous sub-devices”Œmedia-registering-async-subdevs”eh$]”h&]”uh1hÈhjoh²hh³hÇh´K»Œexpect_referenced_by_name”}”j=jisŒexpect_referenced_by_id”}”jtjisubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ!Asynchronous sub-device notifiers”h]”hŒ!Asynchronous sub-device notifiers”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjDh²hh³hÇh´KÎubhÞ)�”}”(hXHBridge drivers in turn have to register a notifier object. This is performed using the :c:func:`v4l2_async_nf_register` call. To unregister the notifier the driver has to call :c:func:`v4l2_async_nf_unregister`. Before releasing memory of an unregister notifier, it must be cleaned up by calling :c:func:`v4l2_async_nf_cleanup`.”h]”(hŒWBridge drivers in turn have to register a notifier object. This is performed using the ”…”�”}”(hjUh²hh³Nh´Nubh)�”}”(hŒ :c:func:`v4l2_async_nf_register`”h]”hú)�”}”(hj_h]”hŒv4l2_async_nf_register()”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj]ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_register”uh1hh³hÇh´KÐhjUubhŒ9 call. To unregister the notifier the driver has to call ”…”�”}”(hjUh²hh³Nh´Nubh)�”}”(hŒ":c:func:`v4l2_async_nf_unregister`”h]”hú)�”}”(hj‚h]”hŒv4l2_async_nf_unregister()”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj€ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_unregister”uh1hh³hÇh´KÐhjUubhŒV. Before releasing memory of an unregister notifier, it must be cleaned up by calling ”…”�”}”(hjUh²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_async_nf_cleanup`”h]”hú)�”}”(hj¥h]”hŒv4l2_async_nf_cleanup()”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_cleanup”uh1hh³hÇh´KÐhjUubhŒ.”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÐhjDh²hubhÞ)�”}”(hX‹Before registering the notifier, bridge drivers must do two things: first, the notifier must be initialized using the :c:func:`v4l2_async_nf_init`. Second, bridge drivers can then begin to form a list of async connection descriptors that the bridge device needs for its operation. :c:func:`v4l2_async_nf_add_fwnode`, :c:func:`v4l2_async_nf_add_fwnode_remote` and :c:func:`v4l2_async_nf_add_i2c`”h]”(hŒvBefore registering the notifier, bridge drivers must do two things: first, the notifier must be initialized using the ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_async_nf_init`”h]”hú)�”}”(hjÖh]”hŒv4l2_async_nf_init()”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_init”uh1hh³hÇh´KÖhjÌubhŒˆ. Second, bridge drivers can then begin to form a list of async connection descriptors that the bridge device needs for its operation. ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ":c:func:`v4l2_async_nf_add_fwnode`”h]”hú)�”}”(hjùh]”hŒv4l2_async_nf_add_fwnode()”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj÷ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_add_fwnode”uh1hh³hÇh´KÖhjÌubhŒ, ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ):c:func:`v4l2_async_nf_add_fwnode_remote`”h]”hú)�”}”(hj h]”hŒ!v4l2_async_nf_add_fwnode_remote()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_add_fwnode_remote”uh1hh³hÇh´KÖhjÌubhŒ and ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_async_nf_add_i2c`”h]”hú)�”}”(hj? h]”hŒv4l2_async_nf_add_i2c()”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj= ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_nf_add_i2c”uh1hh³hÇh´KÖhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÖhjDh²hubhÞ)�”}”(hXÍAsync connection descriptors describe connections to external sub-devices the drivers for which are not yet probed. Based on an async connection, a media data or ancillary link may be created when the related sub-device becomes available. There may be one or more async connections to a given sub-device but this is not known at the time of adding the connections to the notifier. Async connections are bound as matching async sub-devices are found, one by one.”h]”hXÍAsync connection descriptors describe connections to external sub-devices the drivers for which are not yet probed. Based on an async connection, a media data or ancillary link may be created when the related sub-device becomes available. There may be one or more async connections to a given sub-device but this is not known at the time of adding the connections to the notifier. Async connections are bound as matching async sub-devices are found, one by one.”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÝhjDh²hubeh}”(h]”Œ!asynchronous-sub-device-notifiers”ah ]”h"]”Œ!asynchronous sub-device notifiers”ah$]”h&]”uh1hÈhjoh²hh³hÇh´KÎubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ0Asynchronous sub-device notifier for sub-devices”h]”hŒ0Asynchronous sub-device notifier for sub-devices”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjx h²hh³hÇh´KåubhÞ)�”}”(hXîA driver that registers an asynchronous sub-device may also register an asynchronous notifier. This is called an asynchronous sub-device notifier and the process is similar to that of a bridge driver apart from that the notifier is initialised using :c:func:`v4l2_async_subdev_nf_init` instead. A sub-device notifier may complete only after the V4L2 device becomes available, i.e. there's a path via async sub-devices and notifiers to a notifier that is not an asynchronous sub-device notifier.”h]”(hŒúA driver that registers an asynchronous sub-device may also register an asynchronous notifier. This is called an asynchronous sub-device notifier and the process is similar to that of a bridge driver apart from that the notifier is initialised using ”…”�”}”(hj‰ h²hh³Nh´Nubh)�”}”(hŒ#:c:func:`v4l2_async_subdev_nf_init`”h]”hú)�”}”(hj“ h]”hŒv4l2_async_subdev_nf_init()”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_subdev_nf_init”uh1hh³hÇh´Kçhj‰ ubhŒÓ instead. A sub-device notifier may complete only after the V4L2 device becomes available, i.e. there’s a path via async sub-devices and notifiers to a notifier that is not an asynchronous sub-device notifier.”…”�”}”(hj‰ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kçhjx h²hubeh}”(h]”Œ0asynchronous-sub-device-notifier-for-sub-devices”ah ]”h"]”Œ0asynchronous sub-device notifier for sub-devices”ah$]”h&]”uh1hÈhjoh²hh³hÇh´KåubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒEAsynchronous sub-device registration helper for camera sensor drivers”h]”hŒEAsynchronous sub-device registration helper for camera sensor drivers”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KðubhÞ)�”}”(hXz:c:func:`v4l2_async_register_subdev_sensor` is a helper function for sensor drivers registering their own async connection, but it also registers a notifier and further registers async connections for lens and flash devices found in firmware. The notifier for the sub-device is unregistered and cleaned up with the async sub-device, using :c:func:`v4l2_async_unregister_subdev`.”h]”(h)�”}”(hŒ+:c:func:`v4l2_async_register_subdev_sensor`”h]”hú)�”}”(hjÙ h]”hŒ#v4l2_async_register_subdev_sensor()”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj× ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ!v4l2_async_register_subdev_sensor”uh1hh³hÇh´KòhjÓ ubhX( is a helper function for sensor drivers registering their own async connection, but it also registers a notifier and further registers async connections for lens and flash devices found in firmware. The notifier for the sub-device is unregistered and cleaned up with the async sub-device, using ”…”�”}”(hjÓ h²hh³Nh´Nubh)�”}”(hŒ&:c:func:`v4l2_async_unregister_subdev`”h]”hú)�”}”(hjü h]”hŒv4l2_async_unregister_subdev()”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjú ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_unregister_subdev”uh1hh³hÇh´KòhjÓ ubhŒ.”…”�”}”(hjÓ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kòhj h²hubeh}”(h]”ŒEasynchronous-sub-device-registration-helper-for-camera-sensor-drivers”ah ]”h"]”ŒEasynchronous sub-device registration helper for camera sensor drivers”ah$]”h&]”uh1hÈhjoh²hh³hÇh´KðubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ(Asynchronous sub-device notifier example”h]”hŒ(Asynchronous sub-device notifier example”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj+ h²hh³hÇh´KùubhÞ)�”}”(hŒëThese functions allocate an async connection descriptor which is of type struct :c:type:`v4l2_async_connection` embedded in a driver-specific struct. The &struct :c:type:`v4l2_async_connection` shall be the first member of this struct:”h]”(hŒPThese functions allocate an async connection descriptor which is of type struct ”…”�”}”(hj< h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_async_connection`”h]”hú)�”}”(hjF h]”hŒv4l2_async_connection”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjD ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_connection”uh1hh³hÇh´Kûhj< ubhŒ3 embedded in a driver-specific struct. The &struct ”…”�”}”(hj< h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_async_connection`”h]”hú)�”}”(hji h]”hŒv4l2_async_connection”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjg ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_connection”uh1hh³hÇh´Kûhj< ubhŒ* shall be the first member of this struct:”…”�”}”(hj< h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kûhj+ h²hubj>)�”}”(hXdstruct my_async_connection { struct v4l2_async_connection asc; ... }; struct my_async_connection *my_asc; struct fwnode_handle *ep; ... my_asc = v4l2_async_nf_add_fwnode_remote(¬ifier, ep, struct my_async_connection); fwnode_handle_put(ep); if (IS_ERR(my_asc)) return PTR_ERR(my_asc);”h]”hXdstruct my_async_connection { struct v4l2_async_connection asc; ... }; struct my_async_connection *my_asc; struct fwnode_handle *ep; ... my_asc = v4l2_async_nf_add_fwnode_remote(¬ifier, ep, struct my_async_connection); fwnode_handle_put(ep); if (IS_ERR(my_asc)) return PTR_ERR(my_asc);”…”�”}”hj� sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´Kÿhj+ h²hubeh}”(h]”Œ(asynchronous-sub-device-notifier-example”ah ]”h"]”Œ(asynchronous sub-device notifier example”ah$]”h&]”uh1hÈhjoh²hh³hÇh´KùubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ*Asynchronous sub-device notifier callbacks”h]”hŒ*Asynchronous sub-device notifier callbacks”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj§ h²hh³hÇh´MubhÞ)�”}”(hXqThe V4L2 core will then use these connection descriptors to match asynchronously registered subdevices to them. If a match is detected the ``.bound()`` notifier callback is called. After all connections have been bound the .complete() callback is called. When a connection is removed from the system the ``.unbind()`` method is called. All three callbacks are optional.”h]”(hŒ‹The V4L2 core will then use these connection descriptors to match asynchronously registered subdevices to them. If a match is detected the ”…”�”}”(hj¸ h²hh³Nh´Nubhú)�”}”(hŒ ``.bound()``”h]”hŒ.bound()”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¸ ubhŒ™ notifier callback is called. After all connections have been bound the .complete() callback is called. When a connection is removed from the system the ”…”�”}”(hj¸ h²hh³Nh´Nubhú)�”}”(hŒ ``.unbind()``”h]”hŒ .unbind()”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¸ ubhŒ4 method is called. All three callbacks are optional.”…”�”}”(hj¸ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj§ h²hubhÞ)�”}”(hXHDrivers can store any type of custom data in their driver-specific :c:type:`v4l2_async_connection` wrapper. If any of that data requires special handling when the structure is freed, drivers must implement the ``.destroy()`` notifier callback. The framework will call it right before freeing the :c:type:`v4l2_async_connection`.”h]”(hŒCDrivers can store any type of custom data in their driver-specific ”…”�”}”(hjê h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_async_connection`”h]”hú)�”}”(hjô h]”hŒv4l2_async_connection”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjò ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_connection”uh1hh³hÇh´Mhjê ubhŒp wrapper. If any of that data requires special handling when the structure is freed, drivers must implement the ”…”�”}”(hjê h²hh³Nh´Nubhú)�”}”(hŒ``.destroy()``”h]”hŒ .destroy()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjê ubhŒH notifier callback. The framework will call it right before freeing the ”…”�”}”(hjê h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_async_connection`”h]”hú)�”}”(hj) h]”hŒv4l2_async_connection”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj' ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_async_connection”uh1hh³hÇh´Mhjê ubhŒ.”…”�”}”(hjê h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj§ h²hubeh}”(h]”Œ*asynchronous-sub-device-notifier-callbacks”ah ]”h"]”Œ*asynchronous sub-device notifier callbacks”ah$]”h&]”uh1hÈhjoh²hh³hÇh´Mubeh}”(h]”Œsubdev-registration”ah ]”h"]”Œsubdev registration”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K‹ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒCalling subdev operations”h]”hŒCalling subdev operations”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj` h²hh³hÇh´M"ubhÞ)�”}”(hX‚The advantage of using :c:type:`v4l2_subdev` is that it is a generic struct and does not contain any knowledge about the underlying hardware. So a driver might contain several subdevs that use an I2C bus, but also a subdev that is controlled through GPIO pins. This distinction is only relevant when setting up the device, but once the subdev is registered it is completely transparent.”h]”(hŒThe advantage of using ”…”�”}”(hjq h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj{ h]”hŒ v4l2_subdev”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjy ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M$hjq ubhXV is that it is a generic struct and does not contain any knowledge about the underlying hardware. So a driver might contain several subdevs that use an I2C bus, but also a subdev that is controlled through GPIO pins. This distinction is only relevant when setting up the device, but once the subdev is registered it is completely transparent.”…”�”}”(hjq h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M$hj` h²hubhÞ)�”}”(hŒQOnce the subdev has been registered you can call an ops function either directly:”h]”hŒQOnce the subdev has been registered you can call an ops function either directly:”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M*hj` h²hubj>)�”}”(hŒ&err = sd->ops->core->g_std(sd, &norm);”h]”hŒ&err = sd->ops->core->g_std(sd, &norm);”…”�”}”hj° sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´M-hj` h²hubhÞ)�”}”(hŒ.but it is better and easier to use this macro:”h]”hŒ.but it is better and easier to use this macro:”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M1hj` h²hubj>)�”}”(hŒ/err = v4l2_subdev_call(sd, core, g_std, &norm);”h]”hŒ/err = v4l2_subdev_call(sd, core, g_std, &norm);”…”�”}”hjÍ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´M3hj` h²hubhÞ)�”}”(hX8The macro will do the right ``NULL`` pointer checks and returns ``-ENODEV`` if :c:type:`sd ` is ``NULL``, ``-ENOIOCTLCMD`` if either :c:type:`sd `->core or :c:type:`sd `->core->g_std is ``NULL``, or the actual result of the :c:type:`sd `->ops->core->g_std ops.”h]”(hŒThe macro will do the right ”…”�”}”(hjÜ h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÜ ubhŒ pointer checks and returns ”…”�”}”(hjÜ h²hh³Nh´Nubhú)�”}”(hŒ ``-ENODEV``”h]”hŒ-ENODEV”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÜ ubhŒ if ”…”�”}”(hjÜ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj h]”hŒsd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M7hjÜ ubhŒ is ”…”�”}”(hjÜ h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÜ ubhŒ, ”…”�”}”(hjÜ h²hh³Nh´Nubhú)�”}”(hŒ``-ENOIOCTLCMD``”h]”hŒ -ENOIOCTLCMD”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÜ ubhŒ if either ”…”�”}”(hjÜ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hjQ h]”hŒsd”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjO ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M7hjÜ ubhŒ ->core or ”…”�”}”(hjÜ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hjt h]”hŒsd”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjr ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M7hjÜ ubhŒ->core->g_std is ”…”�”}”(hjÜ h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÜ ubhŒ, or the actual result of the ”…”�”}”(hjÜ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj© h]”hŒsd”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj§ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M7hjÜ ubhŒ->ops->core->g_std ops.”…”�”}”(hjÜ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M7hj` h²hubhÞ)�”}”(hŒ?It is also possible to call all or a subset of the sub-devices:”h]”hŒ?It is also possible to call all or a subset of the sub-devices:”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M<hj` h²hubj>)�”}”(hŒ6v4l2_device_call_all(v4l2_dev, 0, core, g_std, &norm);”h]”hŒ6v4l2_device_call_all(v4l2_dev, 0, core, g_std, &norm);”…”�”}”hjÞ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´M>hj` h²hubhÞ)�”}”(hŒ}Any subdev that does not support this ops is skipped and error results are ignored. If you want to check for errors use this:”h]”hŒ}Any subdev that does not support this ops is skipped and error results are ignored. If you want to check for errors use this:”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MBhj` h²hubj>)�”}”(hŒBerr = v4l2_device_call_until_err(v4l2_dev, 0, core, g_std, &norm);”h]”hŒBerr = v4l2_device_call_until_err(v4l2_dev, 0, core, g_std, &norm);”…”�”}”hjû sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MEhj` h²hubhÞ)�”}”(hŒŠAny error except ``-ENOIOCTLCMD`` will exit the loop with that error. If no errors (except ``-ENOIOCTLCMD``) occurred, then 0 is returned.”h]”(hŒAny error except ”…”�”}”(hj h²hh³Nh´Nubhú)�”}”(hŒ``-ENOIOCTLCMD``”h]”hŒ -ENOIOCTLCMD”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubhŒ: will exit the loop with that error. If no errors (except ”…”�”}”(hj h²hh³Nh´Nubhú)�”}”(hŒ``-ENOIOCTLCMD``”h]”hŒ -ENOIOCTLCMD”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubhŒ) occurred, then 0 is returned.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MIhj` h²hubhÞ)�”}”(hXˆThe second argument to both calls is a group ID. If 0, then all subdevs are called. If non-zero, then only those whose group ID match that value will be called. Before a bridge driver registers a subdev it can set :c:type:`sd `->grp_id to whatever value it wants (it's 0 by default). This value is owned by the bridge driver and the sub-device driver will never modify or use it.”h]”(hŒÖThe second argument to both calls is a group ID. If 0, then all subdevs are called. If non-zero, then only those whose group ID match that value will be called. Before a bridge driver registers a subdev it can set ”…”�”}”(hj< h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hjF h]”hŒsd”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjD ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MLhj< ubhŒš->grp_id to whatever value it wants (it’s 0 by default). This value is owned by the bridge driver and the sub-device driver will never modify or use it.”…”�”}”(hj< h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MLhj` h²hubhÞ)�”}”(hXÐThe group ID gives the bridge driver more control how callbacks are called. For example, there may be multiple audio chips on a board, each capable of changing the volume. But usually only one will actually be used when the user want to change the volume. You can set the group ID for that subdev to e.g. AUDIO_CONTROLLER and specify that as the group ID value when calling ``v4l2_device_call_all()``. That ensures that it will only go to the subdev that needs it.”h]”(hXvThe group ID gives the bridge driver more control how callbacks are called. For example, there may be multiple audio chips on a board, each capable of changing the volume. But usually only one will actually be used when the user want to change the volume. You can set the group ID for that subdev to e.g. AUDIO_CONTROLLER and specify that as the group ID value when calling ”…”�”}”(hjm h²hh³Nh´Nubhú)�”}”(hŒ``v4l2_device_call_all()``”h]”hŒv4l2_device_call_all()”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjm ubhŒ@. That ensures that it will only go to the subdev that needs it.”…”�”}”(hjm h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MShj` h²hubhÞ)�”}”(hX#If the sub-device needs to notify its v4l2_device parent of an event, then it can call ``v4l2_subdev_notify(sd, notification, arg)``. This macro checks whether there is a ``notify()`` callback defined and returns ``-ENODEV`` if not. Otherwise the result of the ``notify()`` call is returned.”h]”(hŒWIf the sub-device needs to notify its v4l2_device parent of an event, then it can call ”…”�”}”(hj� h²hh³Nh´Nubhú)�”}”(hŒ-``v4l2_subdev_notify(sd, notification, arg)``”h]”hŒ)v4l2_subdev_notify(sd, notification, arg)”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj� ubhŒ'. This macro checks whether there is a ”…”�”}”(hj� h²hh³Nh´Nubhú)�”}”(hŒ ``notify()``”h]”hŒnotify()”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj� ubhŒ callback defined and returns ”…”�”}”(hj� h²hh³Nh´Nubhú)�”}”(hŒ ``-ENODEV``”h]”hŒ-ENODEV”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj� ubhŒ% if not. Otherwise the result of the ”…”�”}”(hj� h²hh³Nh´Nubhú)�”}”(hŒ ``notify()``”h]”hŒnotify()”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj� ubhŒ call is returned.”…”�”}”(hj� h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M[hj` h²hubeh}”(h]”Œcalling-subdev-operations”ah ]”h"]”Œcalling subdev operations”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M"ubeh}”(h]”Œv4l2-sub-devices”ah ]”h"]”Œv4l2 sub-devices”ah$]”h&]”uh1hÈhhh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒV4L2 sub-device userspace API”h]”hŒV4L2 sub-device userspace API”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjó h²hh³hÇh´MaubhÞ)�”}”(hXBridge drivers traditionally expose one or multiple video nodes to userspace, and control subdevices through the :c:type:`v4l2_subdev_ops` operations in response to video node operations. This hides the complexity of the underlying hardware from applications. For complex devices, finer-grained control of the device than what the video nodes offer may be required. In those cases, bridge drivers that implement :ref:`the media controller API ` may opt for making the subdevice operations directly accessible from userspace.”h]”(hŒqBridge drivers traditionally expose one or multiple video nodes to userspace, and control subdevices through the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_ops`”h]”hú)�”}”(hjh]”hŒv4l2_subdev_ops”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_ops”uh1hh³hÇh´MchjubhX operations in response to video node operations. This hides the complexity of the underlying hardware from applications. For complex devices, finer-grained control of the device than what the video nodes offer may be required. In those cases, bridge drivers that implement ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ2:ref:`the media controller API `”h]”hŒinline”“”)�”}”(hj1h]”hŒthe media controller API”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j3hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j?Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒmedia_controller”uh1hh³hÇh´MchjubhŒP may opt for making the subdevice operations directly accessible from userspace.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mchjó h²hubhÞ)�”}”(hŒæDevice nodes named ``v4l-subdev``\ *X* can be created in ``/dev`` to access sub-devices directly. If a sub-device supports direct userspace configuration it must set the ``V4L2_SUBDEV_FL_HAS_DEVNODE`` flag before being registered.”h]”(hŒDevice nodes named ”…”�”}”(hj[h²hh³Nh´Nubhú)�”}”(hŒ``v4l-subdev``”h]”hŒ v4l-subdev”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[ubhŒ ”…”�”}”(hj[h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*X*”h]”hŒX”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj[ubhŒ can be created in ”…”�”}”(hj[h²hh³Nh´Nubhú)�”}”(hŒ``/dev``”h]”hŒ/dev”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[ubhŒi to access sub-devices directly. If a sub-device supports direct userspace configuration it must set the ”…”�”}”(hj[h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_DEVNODE``”h]”hŒV4L2_SUBDEV_FL_HAS_DEVNODE”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[ubhŒ flag before being registered.”…”�”}”(hj[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mkhjó h²hubhÞ)�”}”(hX-After registering sub-devices, the :c:type:`v4l2_device` driver can create device nodes for all registered sub-devices marked with ``V4L2_SUBDEV_FL_HAS_DEVNODE`` by calling :c:func:`v4l2_device_register_subdev_nodes`. Those device nodes will be automatically removed when sub-devices are unregistered.”h]”(hŒ#After registering sub-devices, the ”…”�”}”(hj³h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_device`”h]”hú)�”}”(hj½h]”hŒ v4l2_device”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_device”uh1hh³hÇh´Mohj³ubhŒK driver can create device nodes for all registered sub-devices marked with ”…”�”}”(hj³h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_DEVNODE``”h]”hŒV4L2_SUBDEV_FL_HAS_DEVNODE”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj³ubhŒ by calling ”…”�”}”(hj³h²hh³Nh´Nubh)�”}”(hŒ+:c:func:`v4l2_device_register_subdev_nodes`”h]”hú)�”}”(hjòh]”hŒ#v4l2_device_register_subdev_nodes()”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjðubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ!v4l2_device_register_subdev_nodes”uh1hh³hÇh´Mohj³ubhŒU. Those device nodes will be automatically removed when sub-devices are unregistered.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mohjó h²hubhÞ)�”}”(hŒ1The device node handles a subset of the V4L2 API.”h]”hŒ1The device node handles a subset of the V4L2 API.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Muhjó h²hubhÞ)�”}”(hŒž``VIDIOC_QUERYCTRL``, ``VIDIOC_QUERYMENU``, ``VIDIOC_G_CTRL``, ``VIDIOC_S_CTRL``, ``VIDIOC_G_EXT_CTRLS``, ``VIDIOC_S_EXT_CTRLS`` and ``VIDIOC_TRY_EXT_CTRLS``:”h]”(hú)�”}”(hŒ``VIDIOC_QUERYCTRL``”h]”hŒVIDIOC_QUERYCTRL”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ, ”…”�”}”(hj'h²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_QUERYMENU``”h]”hŒVIDIOC_QUERYMENU”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ, ”…”�”}”hj'sbhú)�”}”(hŒ``VIDIOC_G_CTRL``”h]”hŒ VIDIOC_G_CTRL”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ, ”…”�”}”hj'sbhú)�”}”(hŒ``VIDIOC_S_CTRL``”h]”hŒ VIDIOC_S_CTRL”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ, ”…”�”•}”hj'sbhú)�”}”(hŒ``VIDIOC_G_EXT_CTRLS``”h]”hŒVIDIOC_G_EXT_CTRLS”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ, ”…”�”}”hj'sbhú)�”}”(hŒ``VIDIOC_S_EXT_CTRLS``”h]”hŒVIDIOC_S_EXT_CTRLS”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ and ”…”�”}”(hj'h²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_TRY_EXT_CTRLS``”h]”hŒVIDIOC_TRY_EXT_CTRLS”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubhŒ:”…”�”}”(hj'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mwhjó h²hubjŸ)�”}”(hXThe controls ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with controls implemented in the sub-device. Depending on the driver, those controls can be also be accessed through one (or several) V4L2 device nodes. ”h]”hÞ)�”}”(hXThe controls ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with controls implemented in the sub-device. Depending on the driver, those controls can be also be accessed through one (or several) V4L2 device nodes.”h]”hXThe controls ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with controls implemented in the sub-device. Depending on the driver, those controls can be also be accessed through one (or several) V4L2 device nodes.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´Mhjó h²hubhÞ)�”}”(hŒO``VIDIOC_DQEVENT``, ``VIDIOC_SUBSCRIBE_EVENT`` and ``VIDIOC_UNSUBSCRIBE_EVENT``”h]”(hú)�”}”(hŒ``VIDIOC_DQEVENT``”h]”hŒVIDIOC_DQEVENT”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÇubhŒ, ”…”�”}”(hjÇh²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_SUBSCRIBE_EVENT``”h]”hŒVIDIOC_SUBSCRIBE_EVENT”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÇubhŒ and ”…”�”}”(hjÇh²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_UNSUBSCRIBE_EVENT``”h]”hŒVIDIOC_UNSUBSCRIBE_EVENT”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M…hjó h²hubjŸ)�”}”(hXYThe events ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with events generated by the sub-device. Depending on the driver, those events can also be reported by one (or several) V4L2 device nodes. Sub-device drivers that want to use events need to set the ``V4L2_SUBDEV_FL_HAS_EVENTS`` :c:type:`v4l2_subdev`.flags before registering the sub-device. After registration events can be queued as usual on the :c:type:`v4l2_subdev`.devnode device node. To properly support events, the ``poll()`` file operation is also implemented. ”h]”(hÞ)�”}”(hX The events ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with events generated by the sub-device. Depending on the driver, those events can also be reported by one (or several) V4L2 device nodes.”h]”hX The events ioctls are identical to the ones defined in V4L2. They behave identically, with the only exception that they deal only with events generated by the sub-device. Depending on the driver, those events can also be reported by one (or several) V4L2 device nodes.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M‰hjubhÞ)�”}”(hŒúSub-device drivers that want to use events need to set the ``V4L2_SUBDEV_FL_HAS_EVENTS`` :c:type:`v4l2_subdev`.flags before registering the sub-device. After registration events can be queued as usual on the :c:type:`v4l2_subdev`.devnode device node.”h]”(hŒ;Sub-device drivers that want to use events need to set the ”…”�”}”(hjh²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_EVENTS``”h]”hŒV4L2_SUBDEV_FL_HAS_EVENTS”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjubhŒ ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj1h]”hŒ v4l2_subdev”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj/ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MŽhjubhŒb.flags before registering the sub-device. After registration events can be queued as usual on the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjTh]”hŒ v4l2_subdev”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjRubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MŽhjubhŒ.devnode device node.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MŽhjubhÞ)�”}”(hŒNTo properly support events, the ``poll()`` file operation is also implemented.”h]”(hŒ To properly support events, the ”…”�”}”(hj{h²hh³Nh´Nubhú)�”}”(hŒ ``poll()``”h]”hŒpoll()”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj{ubhŒ$ file operation is also implemented.”…”�”}”(hj{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M“hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´M‰hjó h²hubhÞ)�”}”(hŒPrivate ioctls”h]”hŒPrivate ioctls”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M–hjó h²hubjŸ)�”}”(hŒqAll ioctls not in the above list are passed directly to the sub-device driver through the core::ioctl operation. ”h]”hÞ)�”}”(hŒpAll ioctls not in the above list are passed directly to the sub-device driver through the core::ioctl operation.”h]”hŒpAll ioctls not in the above list are passed directly to the sub-device driver through the core::ioctl operation.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M˜hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´M˜hjó h²hubeh}”(h]”Œv4l2-sub-device-userspace-api”ah ]”h"]”Œv4l2 sub-device userspace api”ah$]”h&]”uh1hÈhhh²hh³hÇh´MaubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"Read-only sub-device userspace API”h]”hŒ"Read-only sub-device userspace API”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÏh²hh³hÇh´MœubhÞ)�”}”(hXBridge drivers that control their connected subdevices through direct calls to the kernel API realized by :c:type:`v4l2_subdev_ops` structure do not usually want userspace to be able to change the same parameters through the subdevice device node and thus do not usually register any.”h]”(hŒjBridge drivers that control their connected subdevices through direct calls to the kernel API realized by ”…”�”}”(hjàh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_ops`”h]”hú)�”}”(hjêh]”hŒv4l2_subdev_ops”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjèubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_ops”uh1hh³hÇh´MžhjàubhŒ™ structure do not usually want userspace to be able to change the same parameters through the subdevice device node and thus do not usually register any.”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MžhjÏh²hubhÞ)�”}”(hŒôIt is sometimes useful to report to userspace the current subdevice configuration through a read-only API, that does not permit applications to change to the device parameters but allows interfacing to the subdevice device node to inspect them.”h]”hŒôIt is sometimes useful to report to userspace the current subdevice configuration through a read-only API, that does not permit applications to change to the device parameters but allows interfacing to the subdevice device node to inspect them.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M£hjÏh²hubhÞ)�”}”(hXWFor instance, to implement cameras based on computational photography, userspace needs to know the detailed camera sensor configuration (in terms of skipping, binning, cropping and scaling) for each supported output resolution. To support such use cases, bridge drivers may expose the subdevice operations to userspace through a read-only API.”h]”hXWFor instance, to implement cameras based on computational photography, userspace needs to know the detailed camera sensor configuration (in terms of skipping, binning, cropping and scaling) for each supported output resolution. To support such use cases, bridge drivers may expose the subdevice operations to userspace through a read-only API.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M¨hjÏh²hubhÞ)�”}”(hŒÍTo create a read-only device node for all the subdevices registered with the ``V4L2_SUBDEV_FL_HAS_DEVNODE`` set, the :c:type:`v4l2_device` driver should call :c:func:`v4l2_device_register_ro_subdev_nodes`.”h]”(hŒMTo create a read-only device node for all the subdevices registered with the ”…”�”}”(hj-h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_DEVNODE``”h]”hŒV4L2_SUBDEV_FL_HAS_DEVNODE”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj-ubhŒ set, the ”…”�”}”(hj-h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_device`”h]”hú)�”}”(hjIh]”hŒ v4l2_device”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjGubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_device”uh1hh³hÇh´M®hj-ubhŒ driver should call ”…”�”}”(hj-h²hh³Nh´Nubh)�”}”(hŒ.:c:func:`v4l2_device_register_ro_subdev_nodes`”h]”hú)�”}”(hjlh]”hŒ&v4l2_device_register_ro_subdev_nodes()”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ$v4l2_device_register_ro_subdev_nodes”uh1hh³hÇh´M®hj-ubhŒ.”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M®hjÏh²hubhÞ)�”}”(hŒ¢Access to the following ioctls for userspace applications is restricted on sub-device device nodes registered with :c:func:`v4l2_device_register_ro_subdev_nodes`.”h]”(hŒsAccess to the following ioctls for userspace applications is restricted on sub-device device nodes registered with ”…”�”}”(hj“h²hh³Nh´Nubh)�”}”(hŒ.:c:func:`v4l2_device_register_ro_subdev_nodes`”h]”hú)�”}”(hj�h]”hŒ&v4l2_device_register_ro_subdev_nodes()”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj›ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ$v4l2_device_register_ro_subdev_nodes”uh1hh³hÇh´M²hj“ubhŒ.”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M²hjÏh²hubhÞ)�”}”(hŒQ``VIDIOC_SUBDEV_S_FMT``, ``VIDIOC_SUBDEV_S_CROP``, ``VIDIOC_SUBDEV_S_SELECTION``:”h]”(hú)�”}”(hŒ``VIDIOC_SUBDEV_S_FMT``”h]”hŒVIDIOC_SUBDEV_S_FMT”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄubhŒ, ”…”�”}”(hjÄh²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_SUBDEV_S_CROP``”h]”hŒVIDIOC_SUBDEV_S_CROP”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄubhŒ, ”…”�”}”hjÄsbhú)�”}”(hŒ``VIDIOC_SUBDEV_S_SELECTION``”h]”hŒVIDIOC_SUBDEV_S_SELECTION”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄubhŒ:”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M¶hjÏh²hubjŸ)�”}”(hŒ§These ioctls are only allowed on a read-only subdevice device node for the :ref:`V4L2_SUBDEV_FORMAT_TRY ` formats and selection rectangles. ”h]”hÞ)�”}”(hŒ¦These ioctls are only allowed on a read-only subdevice device node for the :ref:`V4L2_SUBDEV_FORMAT_TRY ` formats and selection rectangles.”h]”(hŒKThese ioctls are only allowed on a read-only subdevice device node for the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ9:ref:`V4L2_SUBDEV_FORMAT_TRY `”h]”j4)�”}”(hjh]”hŒV4L2_SUBDEV_FORMAT_TRY”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j3hjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒv4l2-subdev-format-whence”uh1hh³hÇh´MºhjubhŒ" formats and selection rectangles.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mºhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³hÇh´MºhjÏh²hubhÞ)�”}”(hŒ\``VIDIOC_SUBDEV_S_FRAME_INTERVAL``, ``VIDIOC_SUBDEV_S_DV_TIMINGS``, ``VIDIOC_SUBDEV_S_STD``:”h]”(hú)�”}”(hŒ"``VIDIOC_SUBDEV_S_FRAME_INTERVAL``”h]”hŒVIDIOC_SUBDEV_S_FRAME_INTERVAL”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@ubhŒ, ”…”�”}”(hj@h²hh³Nh´Nubhú)�”}”(hŒ``VIDIOC_SUBDEV_S_DV_TIMINGS``”h]”hŒVIDIOC_SUBDEV_S_DV_TIMINGS”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@ubhŒ, ”…”�”}”hj@sbhú)�”}”(hŒ``VIDIOC_SUBDEV_S_STD``”h]”hŒVIDIOC_SUBDEV_S_STD”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@ubhŒ:”…”�”}”(hj@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M¾hjÏh²hubjŸ)�”}”(hŒ)�”}”(hŒdstruct chipname_state { struct v4l2_subdev sd; ... /* additional state fields */ };”h]”hŒdstruct chipname_state { struct v4l2_subdev sd; ... /* additional state fields */ };”…”�”}”hjˆsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MÖhjÒh²hubhÞ)�”}”(hŒ7Initialize the :c:type:`v4l2_subdev` struct as follows:”h]”(hŒInitialize the ”…”�”}”(hj—h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj¡h]”hŒ v4l2_subdev”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjŸubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MÝhj—ubhŒ struct as follows:”…”�”}”(hj—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MÝhjÒh²hubj>)�”}”(hŒ5v4l2_i2c_subdev_init(&state->sd, client, subdev_ops);”h]”hŒ5v4l2_i2c_subdev_init(&state->sd, client, subdev_ops);”…”�”}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MßhjÒh²hubhÞ)�”}”(hŒ’This function will fill in all the fields of :c:type:`v4l2_subdev` ensure that the :c:type:`v4l2_subdev` and i2c_client both point to one another.”h]”(hŒ-This function will fill in all the fields of ”…”�”}”(hj×h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjáh]”hŒ v4l2_subdev”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjßubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Mãhj×ubhŒ ensure that the ”…”�”}”(hj×h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjh]”hŒ v4l2_subdev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Mãhj×ubhŒ* and i2c_client both point to one another.”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MãhjÒh²hubhÞ)�”}”(hŒsYou should also add a helper inline function to go from a :c:type:`v4l2_subdev` pointer to a chipname_state struct:”h]”(hŒ:You should also add a helper inline function to go from a ”…”�”}”(hj+h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hj5h]”hŒ v4l2_subdev”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´Mæhj+ubhŒ$ pointer to a chipname_state struct:”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MæhjÒh²hubj>)�”}”(hŒ…static inline struct chipname_state *to_state(struct v4l2_subdev *sd) { return container_of(sd, struct chipname_state, sd); }”h]”hŒ…static inline struct chipname_state *to_state(struct v4l2_subdev *sd) { return container_of(sd, struct chipname_state, sd); }”…”�”}”hj\sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MéhjÒh²hubhÞ)�”}”(hŒRUse this to go from the :c:type:`v4l2_subdev` struct to the ``i2c_client`` struct:”h]”(hŒUse this to go from the ”…”�”}”(hjkh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjuh]”hŒ v4l2_subdev”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjsubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MðhjkubhŒ struct to the ”…”�”}”(hjkh²hh³Nh´Nubhú)�”}”(hŒ``i2c_client``”h]”hŒ i2c_client”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjkubhŒ struct:”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MðhjÒh²hubj>)�”}”(hŒ4struct i2c_client *client = v4l2_get_subdevdata(sd);”h]”hŒ4struct i2c_client *client = v4l2_get_subdevdata(sd);”…”�”}”hj®sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MóhjÒh²hubhÞ)�”}”(hŒHAnd this to go from an ``i2c_client`` to a :c:type:`v4l2_subdev` struct:”h]”(hŒAnd this to go from an ”…”�”}”(hj½h²hh³Nh´Nubhú)�”}”(hŒ``i2c_client``”h]”hŒ i2c_client”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj½ubhŒ to a ”…”�”}”(hj½h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjÙh]”hŒ v4l2_subdev”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj×ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M÷hj½ubhŒ struct:”…”�”}”(hj½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M÷hjÒh²hubj>)�”}”(hŒ4struct v4l2_subdev *sd = i2c_get_clientdata(client);”h]”hŒ4struct v4l2_subdev *sd = i2c_get_clientdata(client);”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´MùhjÒh²hubhÞ)�”}”(hXMake sure to call :c:func:`v4l2_device_unregister_subdev`\ (:c:type:`sd `) when the ``remove()`` callback is called. This will unregister the sub-device from the bridge driver. It is safe to call this even if the sub-device was never registered.”h]”(hŒMake sure to call ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ':c:func:`v4l2_device_unregister_subdev`”h]”hú)�”}”(hjh]”hŒv4l2_device_unregister_subdev()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_device_unregister_subdev”uh1hh³hÇh´MýhjubhŒ (”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj<h]”hŒsd”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj:ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MýhjubhŒ ) when the ”…”�”}”(hjh²hh³Nh´Nubhú)�”}”(hŒ ``remove()``”h]”hŒremove()”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjubhŒ• callback is called. This will unregister the sub-device from the bridge driver. It is safe to call this even if the sub-device was never registered.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MýhjÒh²hubhÞ)�”}”(hX–You need to do this because when the bridge driver destroys the i2c adapter the ``remove()`` callbacks are called of the i2c devices on that adapter. After that the corresponding v4l2_subdev structures are invalid, so they have to be unregistered first. Calling :c:func:`v4l2_device_unregister_subdev`\ (:c:type:`sd `) from the ``remove()`` callback ensures that this is always done correctly.”h]”(hŒPYou need to do this because when the bridge driver destroys the i2c adapter the ”…”�”}”(hjuh²hh³Nh´Nubhú)�”}”(hŒ ``remove()``”h]”hŒremove()”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjuubhŒª callbacks are called of the i2c devices on that adapter. After that the corresponding v4l2_subdev structures are invalid, so they have to be unregistered first. Calling ”…”�”}”(hjuh²hh³Nh´Nubh)�”}”(hŒ':c:func:`v4l2_device_unregister_subdev`”h]”hú)�”}”(hj‘h]”hŒv4l2_device_unregister_subdev()”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_device_unregister_subdev”uh1hh³hÇh´MhjuubhŒ (”…”�”}”(hjuh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd `”h]”hú)�”}”(hj´h]”hŒsd”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´MhjuubhŒ ) from the ”…”�”}”(hjuh²hh³Nh´Nubhú)�”}”(hŒ ``remove()``”h]”hŒremove()”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjuubhŒ5 callback ensures that this is always done correctly.”…”�”}”(hjuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÒh²hubhÞ)�”}”(hŒ)�”}”(hŒ„struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter, "module_foo", "chipid", 0x36, NULL);”h]”hŒ„struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter, "module_foo", "chipid", 0x36, NULL);”…”�”}”hjûsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´M hjÒh²hubhÞ)�”}”(hŒ÷This loads the given module (can be ``NULL`` if no module needs to be loaded) and calls :c:func:`i2c_new_client_device` with the given ``i2c_adapter`` and chip/address arguments. If all goes well, then it registers the subdev with the v4l2_device.”h]”(hŒ$This loads the given module (can be ”…”�”}”(hj h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubhŒ, if no module needs to be loaded) and calls ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ:c:func:`i2c_new_client_device`”h]”hú)�”}”(hj&h]”hŒi2c_new_client_device()”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒi2c_new_client_device”uh1hh³hÇh´Mhj ubhŒ with the given ”…”�”}”(hj h²hh³Nh´Nubhú)�”}”(hŒ``i2c_adapter``”h]”hŒ i2c_adapter”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubhŒa and chip/address arguments. If all goes well, then it registers the subdev with the v4l2_device.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÒh²hubhÞ)�”}”(hX1You can also use the last argument of :c:func:`v4l2_i2c_new_subdev` to pass an array of possible I2C addresses that it should probe. These probe addresses are only used if the previous argument is 0. A non-zero argument means that you know the exact i2c address so in that case no probing will take place.”h]”(hŒ&You can also use the last argument of ”…”�”}”(hj_h²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_i2c_new_subdev`”h]”hú)�”}”(hjih]”hŒv4l2_i2c_new_subdev()”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjgubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_i2c_new_subdev”uh1hh³hÇh´Mhj_ubhŒî to pass an array of possible I2C addresses that it should probe. These probe addresses are only used if the previous argument is 0. A non-zero argument means that you know the exact i2c address so in that case no probing will take place.”…”�”}”(hj_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÒh²hubhÞ)�”}”(hŒ7Both functions return ``NULL`` if something went wrong.”h]”(hŒBoth functions return ”…”�”}”(hj�h²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�ubhŒ if something went wrong.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÒh²hubhÞ)�”}”(hXNote that the chipid you pass to :c:func:`v4l2_i2c_new_subdev` is usually the same as the module name. It allows you to specify a chip variant, e.g. "saa7114" or "saa7115". In general though the i2c driver autodetects this. The use of chipid is something that needs to be looked at more closely at a later date. It differs between i2c drivers and as such can be confusing. To see which chip variants are supported you can look in the i2c driver code for the i2c_device_id table. This lists all the possibilities.”h]”(hŒ!Note that the chipid you pass to ”…”�”}”(hj°h²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_i2c_new_subdev`”h]”hú)�”}”(hjºh]”hŒv4l2_i2c_new_subdev()”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_i2c_new_subdev”uh1hh³hÇh´Mhj°ubhXÊ is usually the same as the module name. It allows you to specify a chip variant, e.g. “saa7114â€� or “saa7115â€�. In general though the i2c driver autodetects this. The use of chipid is something that needs to be looked at more closely at a later date. It differs between i2c drivers and as such can be confusing. To see which chip variants are supported you can look in the i2c driver code for the i2c_device_id table. This lists all the possibilities.”…”�”}”(hj°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÒh²hubhÞ)�”}”(hŒ#There are one more helper function:”h]”hŒ#There are one more helper function:”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M&hjÒh²hubhÞ)�”}”(hŒ¥:c:func:`v4l2_i2c_new_subdev_board` uses an :c:type:`i2c_board_info` struct which is passed to the i2c driver and replaces the irq, platform_data and addr arguments.”h]”(h)�”}”(hŒ#:c:func:`v4l2_i2c_new_subdev_board`”h]”hú)�”}”(hjõh]”hŒv4l2_i2c_new_subdev_board()”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjóubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_i2c_new_subdev_board”uh1hh³hÇh´M(hjïubhŒ uses an ”…”�”}”(hjïh²hh³Nh´Nubh)�”}”(hŒ:c:type:`i2c_board_info`”h]”hú)�”}”(hjh]”hŒi2c_board_info”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒi2c_board_info”uh1hh³hÇh´M(hjïubhŒa struct which is passed to the i2c driver and replaces the irq, platform_data and addr arguments.”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M(hjÒh²hubhÞ)�”}”(hŒ‰If the subdev supports the s_config core ops, then that op is called with the irq and platform_data arguments after the subdev was setup.”h]”hŒ‰If the subdev supports the s_config core ops, then that op is called with the irq and platform_data arguments after the subdev was setup.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M,hjÒh²hubhÞ)�”}”(hŒÈThe :c:func:`v4l2_i2c_new_subdev` function will call :c:func:`v4l2_i2c_new_subdev_board`, internally filling a :c:type:`i2c_board_info` structure using the ``client_type`` and the ``addr`` to fill it.”h]”(hŒThe ”…”�”}”(hjMh²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_i2c_new_subdev`”h]”hú)�”}”(hjWh]”hŒv4l2_i2c_new_subdev()”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjUubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_i2c_new_subdev”uh1hh³hÇh´M/hjMubhŒ function will call ”…”�”}”(hjMh²hh³Nh´Nubh)�”}”(hŒ#:c:func:`v4l2_i2c_new_subdev_board`”h]”hú)�”}”(hjzh]”hŒv4l2_i2c_new_subdev_board()”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_i2c_new_subdev_board”uh1hh³hÇh´M/hjMubhŒ, internally filling a ”…”�”}”(hjMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`i2c_board_info`”h]”hú)�”}”(hj�h]”hŒi2c_board_info”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj›ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒi2c_board_info”uh1hh³hÇh´M/hjMubhŒ structure using the ”…”�”}”(hjMh²hh³Nh´Nubhú)�”}”(hŒ``client_type``”h]”hŒ client_type”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjMubhŒ and the ”…”�”}”(hjMh²hh³Nh´Nubhú)�”}”(hŒ``addr``”h]”hŒaddr”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjMubhŒ to fill it.”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M/hjÒh²hubeh}”(h]”Œi2c-sub-device-drivers”ah ]”h"]”Œi2c sub-device drivers”ah$]”h&]”uh1hÈhhh²hh³hÇh´MÉubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ%Centrally managed subdev active state”h]”hŒ%Centrally managed subdev active state”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjðh²hh³hÇh´M5ubhÞ)�”}”(hŒðTraditionally V4L2 subdev drivers maintained internal state for the active device configuration. This is often implemented as e.g. an array of struct v4l2_mbus_framefmt, one entry for each pad, and similarly for crop and compose rectangles.”h]”hŒðTraditionally V4L2 subdev drivers maintained internal state for the active device configuration. This is often implemented as e.g. an array of struct v4l2_mbus_framefmt, one entry for each pad, and similarly for crop and compose rectangles.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M7hjðh²hubhÞ)�”}”(hŒ In addition to the active configuration, each subdev file handle has a struct v4l2_subdev_state, managed by the V4L2 core, which contains the try configuration.”h]”hŒ In addition to the active configuration, each subdev file handle has a struct v4l2_subdev_state, managed by the V4L2 core, which contains the try configuration.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M<hjðh²hubhÞ)�”}”(hXµTo simplify the subdev drivers the V4L2 subdev API now optionally supports a centrally managed active configuration represented by :c:type:`v4l2_subdev_state`. One instance of state, which contains the active device configuration, is stored in the sub-device itself as part of the :c:type:`v4l2_subdev` structure, while the core associates a try state to each open file handle, to store the try configuration related to that file handle.”h]”(hŒƒTo simplify the subdev drivers the V4L2 subdev API now optionally supports a centrally managed active configuration represented by ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_state`”h]”hú)�”}”(hj'h]”hŒv4l2_subdev_state”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_state”uh1hh³hÇh´M@hjubhŒ{. One instance of state, which contains the active device configuration, is stored in the sub-device itself as part of the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjJh]”hŒ v4l2_subdev”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjHubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M@hjubhŒ‡ structure, while the core associates a try state to each open file handle, to store the try configuration related to that file handle.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M@hjðh²hubhÞ)�”}”(hXÖSub-device drivers can opt-in and use state to manage their active configuration by initializing the subdevice state with a call to v4l2_subdev_init_finalize() before registering the sub-device. They must also call v4l2_subdev_cleanup() to release all the allocated resources before unregistering the sub-device. The core automatically allocates and initializes a state for each open file handle to store the try configurations and frees it when closing the file handle.”h]”hXÖSub-device drivers can opt-in and use state to manage their active configuration by initializing the subdevice state with a call to v4l2_subdev_init_finalize() before registering the sub-device. They must also call v4l2_subdev_cleanup() to release all the allocated resources before unregistering the sub-device. The core automatically allocates and initializes a state for each open file handle to store the try configurations and frees it when closing the file handle.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MHhjðh²hubhÞ)�”}”(hX«V4L2 sub-device operations that use both the :ref:`ACTIVE and TRY formats ` receive the correct state to operate on through the 'state' parameter. The state must be locked and unlocked by the caller by calling :c:func:`v4l2_subdev_lock_state()` and :c:func:`v4l2_subdev_unlock_state()`. The caller can do so by calling the subdev operation through the :c:func:`v4l2_subdev_call_state_active()` macro.”h]”(hŒ-V4L2 sub-device operations that use both the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ9:ref:`ACTIVE and TRY formats `”h]”j4)�”}”(hj‰h]”hŒACTIVE and TRY formats”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j3hj‡ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j•Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒv4l2-subdev-format-whence”uh1hh³hÇh´MPhjubhŒ‹ receive the correct state to operate on through the ‘state’ parameter. The state must be locked and unlocked by the caller by calling ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ":c:func:`v4l2_subdev_lock_state()`”h]”hú)�”}”(hj­h]”hŒv4l2_subdev_lock_state()”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj«ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_lock_state”uh1hh³hÇh´MPhjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ$:c:func:`v4l2_subdev_unlock_state()`”h]”hú)�”}”(hjÐh]”hŒv4l2_subdev_unlock_state()”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjÎubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_unlock_state”uh1hh³hÇh´MPhjubhŒC. The caller can do so by calling the subdev operation through the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ):c:func:`v4l2_subdev_call_state_active()`”h]”hú)�”}”(hjóh]”hŒv4l2_subdev_call_state_active()”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjñubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_call_state_active”uh1hh³hÇh´MPhjubhŒ macro.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MPhjðh²hubhÞ)�”}”(hX+Operations that do not receive a state parameter implicitly operate on the subdevice active state, which drivers can exclusively access by calling :c:func:`v4l2_subdev_lock_and_get_active_state()`. The sub-device active state must equally be released by calling :c:func:`v4l2_subdev_unlock_state()`.”h]”(hŒ“Operations that do not receive a state parameter implicitly operate on the subdevice active state, which drivers can exclusively access by calling ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ1:c:func:`v4l2_subdev_lock_and_get_active_state()`”h]”hú)�”}”(hj$h]”hŒ'v4l2_subdev_lock_and_get_active_state()”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ%v4l2_subdev_lock_and_get_active_state”uh1hh³hÇh´MWhjubhŒB. The sub-device active state must equally be released by calling ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ$:c:func:`v4l2_subdev_unlock_state()`”h]”hú)�”}”(hjGh]”hŒv4l2_subdev_unlock_state()”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_unlock_state”uh1hh³hÇh´MWhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MWhjðh²hubhÞ)�”}”(hŒ”Drivers must never manually access the state stored in the :c:type:`v4l2_subdev` or in the file handle without going through the designated helpers.”h]”(hŒ;Drivers must never manually access the state stored in the ”…”�”}”(hjnh²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev`”h]”hú)�”}”(hjxh]”hŒ v4l2_subdev”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjvubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ v4l2_subdev”uh1hh³hÇh´M\hjnubhŒD or in the file handle without going through the designated helpers.”…”�”}”(hjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M\hjðh²hubhÞ)�”}”(hXÙWhile the V4L2 core passes the correct try or active state to the subdevice operations, many existing device drivers pass a NULL state when calling operations with :c:func:`v4l2_subdev_call()`. This legacy construct causes issues with subdevice drivers that let the V4L2 core manage the active state, as they expect to receive the appropriate state as a parameter. To help the conversion of subdevice drivers to a managed active state without having to convert all callers at the same time, an additional wrapper layer has been added to v4l2_subdev_call(), which handles the NULL case by getting and locking the callee's active state with :c:func:`v4l2_subdev_lock_and_get_active_state()`, and unlocking the state after the call.”h]”(hŒ¤While the V4L2 core passes the correct try or active state to the subdevice operations, many existing device drivers pass a NULL state when calling operations with ”…”�”}”(hjŸh²hh³Nh´Nubh)�”}”(hŒ:c:func:`v4l2_subdev_call()`”h]”hú)�”}”(hj©h]”hŒv4l2_subdev_call()”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhj§ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒv4l2_subdev_call”uh1hh³hÇh´M_hjŸubhXÁ. This legacy construct causes issues with subdevice drivers that let the V4L2 core manage the active state, as they expect to receive the appropriate state as a parameter. To help the conversion of subdevice drivers to a managed active state without having to convert all callers at the same time, an additional wrapper layer has been added to v4l2_subdev_call(), which handles the NULL case by getting and locking the callee’s active state with ”…”�”}”(hjŸh²hh³Nh´Nubh)�”}”(hŒ1:c:func:`v4l2_subdev_lock_and_get_active_state()`”h]”hú)�”}”(hjÌh]”hŒ'v4l2_subdev_lock_and_get_active_state()”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-func”eh"]”h$]”h&]”uh1hùhjÊubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒ%v4l2_subdev_lock_and_get_active_state”uh1hh³hÇh´M_hjŸubhŒ), and unlocking the state after the call.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M_hjðh²hubhÞ)�”}”(hXôThe whole subdev state is in reality split into three parts: the v4l2_subdev_state, subdev controls and subdev driver's internal state. In the future these parts should be combined into a single state. For the time being we need a way to handle the locking for these parts. This can be accomplished by sharing a lock. The v4l2_ctrl_handler already supports this via its 'lock' pointer and the same model is used with states. The driver can do the following before calling v4l2_subdev_init_finalize():”h]”hXúThe whole subdev state is in reality split into three parts: the v4l2_subdev_state, subdev controls and subdev driver’s internal state. In the future these parts should be combined into a single state. For the time being we need a way to handle the locking for these parts. This can be accomplished by sharing a lock. The v4l2_ctrl_handler already supports this via its ‘lock’ pointer and the same model is used with states. The driver can do the following before calling v4l2_subdev_init_finalize():”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mjhjðh²hubj>)�”}”(hŒEsd->ctrl_handler->lock = &priv->mutex; sd->state_lock = &priv->mutex;”h]”hŒEsd->ctrl_handler->lock = &priv->mutex; sd->state_lock = &priv->mutex;”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjM‰jNjjO}”uh1j=h³hÇh´Mrhjðh²hubhÞ)�”}”(hŒKThis shares the driver's private mutex between the controls and the states.”h]”hŒMThis shares the driver’s private mutex between the controls and the states.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mwhjðh²hubeh}”(h]”Œ%centrally-managed-subdev-active-state”ah ]”h"]”Œ%centrally managed subdev active state”ah$]”h&]”uh1hÈhhh²hh³hÇh´M5ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ4Streams, multiplexed media pads and internal routing”h]”hŒ4Streams, multiplexed media pads and internal routing”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj&h²hh³hÇh´MzubhÞ)�”}”(hŒÞA subdevice driver can implement support for multiplexed streams by setting the V4L2_SUBDEV_FL_STREAMS subdev flag and implementing support for centrally managed subdev active state, routing and stream based configuration.”h]”hŒÞA subdevice driver can implement support for multiplexed streams by setting the V4L2_SUBDEV_FL_STREAMS subdev flag and implementing support for centrally managed subdev active state, routing and stream based configuration.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M|hj&h²hubeh}”(h]”Œ3streams-multiplexed-media-pads-and-internal-routing”ah ]”h"]”Œ4streams, multiplexed media pads and internal routing”ah$]”h&]”uh1hÈhhh²hh³hÇh´MzubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ-V4L2 sub-device functions and data structures”h]”hŒ-V4L2 sub-device functions and data structures”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjMh²hh³hÇh´M‚ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œv4l2_decode_vbi_line (C struct)”Œc.v4l2_decode_vbi_line”hNt”auh1j^hjMh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒv4l2_decode_vbi_line”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct v4l2_decode_vbi_line”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j€hj|h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j’hj|h²hh³j‘h´KubhŒ desc_name”“”)�”}”(hŒv4l2_decode_vbi_line”h]”hŒ desc_sig_name”“”)�”}”(hjxh]”hŒv4l2_decode_vbi_line”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j©hj¥ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j£hj|h²hh³j‘h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jzŒsphinx_line_type”Œ declarator”hjvh²hh³j‘h´Kubah}”(h]”jmah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jth³j‘h´Khjqh²hubhŒ desc_content”“”)�”}”(hhh]”hÞ)�”}”(hŒused to decode_vbi_line”h]”hŒused to decode_vbi_line”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K-hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjqh²hh³j‘h´Kubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”Œdomain”jŒobjtype”jòŒdesctype”jòŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1joh²hhjMh³Nh´NubhŒ container”“”)�”}”(hXç **Definition**:: struct v4l2_decode_vbi_line { u32 is_second_field; u8 *p; u32 line; u32 type; }; **Members** ``is_second_field`` Set to 0 for the first (odd) field; set to 1 for the second (even) field. ``p`` Pointer to the sliced VBI data from the decoder. On exit, points to the start of the payload. ``line`` Line number of the sliced VBI data (1-23) ``type`` VBI service type (V4L2_SLICED_*). 0 if no service found”h]”(jŸ)�”}”(hŒ‡**Definition**:: struct v4l2_decode_vbi_line { u32 is_second_field; u8 *p; u32 line; u32 type; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K1hjubj>)�”}”(hŒhstruct v4l2_decode_vbi_line { u32 is_second_field; u8 *p; u32 line; u32 type; };”h]”hŒhstruct v4l2_decode_vbi_line { u32 is_second_field; u8 *p; u32 line; u32 type; };”…”�”}”hj#sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K3hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j"h´K1hjþubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj:h]”hŒMembers”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K:hjþubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ^``is_second_field`` Set to 0 for the first (odd) field; set to 1 for the second (even) field. ”h]”(hŒterm”“”)�”}”(hŒ``is_second_field``”h]”hú)�”}”(hj_h]”hŒis_second_field”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K1hjWubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒISet to 0 for the first (odd) field; set to 1 for the second (even) field.”h]”hŒISet to 0 for the first (odd) field; set to 1 for the second (even) field.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K0hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jth´K1hjRubjV)�”}”(hŒd``p`` Pointer to the sliced VBI data from the decoder. On exit, points to the start of the payload. ”h]”(j\)�”}”(hŒ``p``”h]”hú)�”}”(hj›h]”hŒp”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K3hj•ubjv)�”}”(hhh]”hÞ)�”}”(hŒ]Pointer to the sliced VBI data from the decoder. On exit, points to the start of the payload.”h]”hŒ]Pointer to the sliced VBI data from the decoder. On exit, points to the start of the payload.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K2hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j°h´K3hjRubjV)�”}”(hŒ3``line`` Line number of the sliced VBI data (1-23) ”h]”(j\)�”}”(hŒ``line``”h]”hú)�”}”(hjÕh]”hŒline”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K4hjÏubjv)�”}”(hhh]”hÞ)�”}”(hŒ)Line number of the sliced VBI data (1-23)”h]”hŒ)Line number of the sliced VBI data (1-23)”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jêh´K4hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jêh´K4hjRubjV)�”}”(hŒ@``type`` VBI service type (V4L2_SLICED_*). 0 if no service found”h]”(j\)�”}”(hŒ``type``”h]”hú)�”}”(hjh]”hŒtype”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K4hjubjv)�”}”(hhh]”hÞ)�”}”(hŒ7VBI service type (V4L2_SLICED_*). 0 if no service found”h]”hŒ7VBI service type (V4L2_SLICED_*). 0 if no service found”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K5hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j#h´K4hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_io_pin_bits (C enum)”Œc.v4l2_subdev_io_pin_bits”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_io_pin_bits”h]”j{)�”}”(hŒenum v4l2_subdev_io_pin_bits”h]”(j�)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K;ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjdh²hh³jvh´K;ubj¤)�”}”(hŒv4l2_subdev_io_pin_bits”h]”jª)�”}”(hjbh]”hŒv4l2_subdev_io_pin_bits”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj…ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjdh²hh³jvh´K;ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj`h²hh³jvh´K;ubah}”(h]”j[ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jvh´K;hj]h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ,Subdevice external IO pin configuration bits”h]”hŒ,Subdevice external IO pin configuration bits”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kihj¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj]h²hh³jvh´K;ubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷jÃjøjÃjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¾**Constants** ``V4L2_SUBDEV_IO_PIN_DISABLE`` disables a pin config. ENABLE assumed. ``V4L2_SUBDEV_IO_PIN_OUTPUT`` set it if pin is an output. ``V4L2_SUBDEV_IO_PIN_INPUT`` set it if pin is an input. ``V4L2_SUBDEV_IO_PIN_SET_VALUE`` to set the output value via :c:type:`struct v4l2_subdev_io_pin_config `->value. ``V4L2_SUBDEV_IO_PIN_ACTIVE_LOW`` pin active is bit 0. Otherwise, ACTIVE HIGH is assumed.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hjÍh]”hŒ Constants”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KmhjÇubjQ)�”}”(hhh]”(jV)�”}”(hŒF``V4L2_SUBDEV_IO_PIN_DISABLE`` disables a pin config. ENABLE assumed. ”h]”(j\)�”}”(hŒ``V4L2_SUBDEV_IO_PIN_DISABLE``”h]”hú)�”}”(hjìh]”hŒV4L2_SUBDEV_IO_PIN_DISABLE”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kphjæubjv)�”}”(hhh]”hÞ)�”}”(hŒ&disables a pin config. ENABLE assumed.”h]”hŒ&disables a pin config. ENABLE assumed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Kphjubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jh´KphjãubjV)�”}”(hŒ:``V4L2_SUBDEV_IO_PIN_OUTPUT`` set it if pin is an output. ”h]”(j\)�”}”(hŒ``V4L2_SUBDEV_IO_PIN_OUTPUT``”h]”hú)�”}”(hj%h]”hŒV4L2_SUBDEV_IO_PIN_OUTPUT”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kshjubjv)�”}”(hhh]”hÞ)�”}”(hŒset it if pin is an output.”h]”hŒset it if pin is an output.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j:h´Kshj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j:h´KshjãubjV)�”}”(hŒ8``V4L2_SUBDEV_IO_PIN_INPUT`` set it if pin is an input. ”h]”(j\)�”}”(hŒ``V4L2_SUBDEV_IO_PIN_INPUT``”h]”hú)�”}”(hj^h]”hŒV4L2_SUBDEV_IO_PIN_INPUT”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KvhjXubjv)�”}”(hhh]”hÞ)�”}”(hŒset it if pin is an input.”h]”hŒset it if pin is an input.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jsh´Kvhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jsh´KvhjãubjV)�”}”(hŒŒ``V4L2_SUBDEV_IO_PIN_SET_VALUE`` to set the output value via :c:type:`struct v4l2_subdev_io_pin_config `->value. ”h]”(j\)�”}”(hŒ ``V4L2_SUBDEV_IO_PIN_SET_VALUE``”h]”hú)�”}”(hj—h]”hŒV4L2_SUBDEV_IO_PIN_SET_VALUE”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kzhj‘ubjv)�”}”(hhh]”hÞ)�”}”(hŒjto set the output value via :c:type:`struct v4l2_subdev_io_pin_config `->value.”h]”(hŒto set the output value via ”…”�”}”(hj°h²hh³Nh´Nubh)�”}”(hŒF:c:type:`struct v4l2_subdev_io_pin_config `”h]”hú)�”}”(hjºh]”hŒ struct v4l2_subdev_io_pin_config”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbjŒv4l2_subdev_io_pin_config”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kyhj°ubhŒ->value.”…”�”}”(hj°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jßh´Kyhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¬h´KzhjãubjV)�”}”(hŒY``V4L2_SUBDEV_IO_PIN_ACTIVE_LOW`` pin active is bit 0. Otherwise, ACTIVE HIGH is assumed.”h]”(j\)�”}”(hŒ!``V4L2_SUBDEV_IO_PIN_ACTIVE_LOW``”h]”hú)�”}”(hjüh]”hŒV4L2_SUBDEV_IO_PIN_ACTIVE_LOW”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K}hjöubjv)�”}”(hhh]”hÞ)�”}”(hŒ7pin active is bit 0. Otherwise, ACTIVE HIGH is assumed.”h]”hŒ7pin active is bit 0. Otherwise, ACTIVE HIGH is assumed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´K}hjubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jh´K}hjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_io_pin_config (C struct)”Œc.v4l2_subdev_io_pin_config”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_io_pin_config”h]”j{)�”}”(hŒ struct v4l2_subdev_io_pin_config”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kƒubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjQh²hh³jbh´Kƒubj¤)�”}”(hŒv4l2_subdev_io_pin_config”h]”jª)�”}”(hjOh]”hŒv4l2_subdev_io_pin_config”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjqubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjQh²hh³jbh´Kƒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjMh²hh³jbh´Kƒubah}”(h]”jHah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jbh´KƒhjJh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ'Subdevice external IO pin configuration”h]”hŒ'Subdevice external IO pin configuration”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K}hj”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjJh²hh³jbh´Kƒubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j¯jøj¯jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Definition**:: struct v4l2_subdev_io_pin_config { u32 flags; u8 pin; u8 function; u8 value; u8 strength; }; **Members** ``flags`` bitmask with flags for this pin's config, whose bits are defined by :c:type:`enum v4l2_subdev_io_pin_bits `. ``pin`` Chip external IO pin to configure ``function`` Internal signal pad/function to route to IO pin ``value`` Initial value for pin - e.g. GPIO output value ``strength`` Pin drive strength”h]”(jŸ)�”}”(hŒ›**Definition**:: struct v4l2_subdev_io_pin_config { u32 flags; u8 pin; u8 function; u8 value; u8 strength; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj»ubhŒ:”…”�”}”(hj»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K�hj·ubj>)�”}”(hŒzstruct v4l2_subdev_io_pin_config { u32 flags; u8 pin; u8 function; u8 value; u8 strength; };”h]”hŒzstruct v4l2_subdev_io_pin_config { u32 flags; u8 pin; u8 function; u8 value; u8 strength; };”…”�”}”hjØsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kƒhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j×h´K�hj³ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjïh]”hŒMembers”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K‹hj³ubjQ)�”}”(hhh]”(jV)�”}”(hŒ�``flags`` bitmask with flags for this pin's config, whose bits are defined by :c:type:`enum v4l2_subdev_io_pin_bits `. ”h]”(j\)�”}”(hŒ ``flags``”h]”hú)�”}”(hjh]”hŒflags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K�hjubjv)�”}”(hhh]”hÞ)�”}”(hŒ…bitmask with flags for this pin's config, whose bits are defined by :c:type:`enum v4l2_subdev_io_pin_bits `.”h]”(hŒFbitmask with flags for this pin’s config, whose bits are defined by ”…”�”}”(hj'h²hh³Nh´Nubh)�”}”(hŒ@:c:type:`enum v4l2_subdev_io_pin_bits `”h]”hú)�”}”(hj1h]”hŒenum v4l2_subdev_io_pin_bits”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj/ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_io_pin_bits”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K€hj'ubhŒ.”…”�”}”(hj'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jNh´K€hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j#h´K�hjubjV)�”}”(hŒ*``pin`` Chip external IO pin to configure ”h]”(j\)�”}”(hŒ``pin``”h]”hú)�”}”(hjkh]”hŒpin”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K‚hjeubjv)�”}”(hhh]”hÞ)�”}”(hŒ!Chip external IO pin to configure”h]”hŒ!Chip external IO pin to configure”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j€h´K‚hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j€h´K‚hjubjV)�”•B}”(hŒ=``function`` Internal signal pad/function to route to IO pin ”h]”(j\)�”}”(hŒ ``function``”h]”hú)�”}”(hj¤h]”hŒfunction”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kƒhjžubjv)�”}”(hhh]”hÞ)�”}”(hŒ/Internal signal pad/function to route to IO pin”h]”hŒ/Internal signal pad/function to route to IO pin”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¹h´Kƒhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¹h´KƒhjubjV)�”}”(hŒ9``value`` Initial value for pin - e.g. GPIO output value ”h]”(j\)�”}”(hŒ ``value``”h]”hú)�”}”(hjÝh]”hŒvalue”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K„hj×ubjv)�”}”(hhh]”hÞ)�”}”(hŒ.Initial value for pin - e.g. GPIO output value”h]”hŒ.Initial value for pin - e.g. GPIO output value”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jòh´K„hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jòh´K„hjubjV)�”}”(hŒ``strength`` Pin drive strength”h]”(j\)�”}”(hŒ ``strength``”h]”hú)�”}”(hj h]”hŒstrength”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K„hj ubjv)�”}”(hhh]”hÞ)�”}”(hŒPin drive strength”h]”hŒPin drive strength”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K…hj, ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j+ h´K„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_core_ops (C struct)”Œc.v4l2_subdev_core_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_core_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_core_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K‹ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjl h²hh³j} h´K‹ubj¤)�”}”(hŒv4l2_subdev_core_ops”h]”jª)�”}”(hjj h]”hŒv4l2_subdev_core_ops”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjŒ ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjl h²hh³j} h´K‹ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjh h²hh³j} h´K‹ubah}”(h]”jc ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j} h´K‹hje h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ%Define core ops callbacks for subdevs”h]”hŒ%Define core ops callbacks for subdevs”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K�hj¯ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhje h²hh³j} h´K‹ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jÊ jøjÊ jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXx **Definition**:: struct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, struct v4l2_subdev_io_pin_config *pincfg); int (*init)(struct v4l2_subdev *sd, u32 val); int (*load_fw)(struct v4l2_subdev *sd); int (*reset)(struct v4l2_subdev *sd, u32 val); int (*s_gpio)(struct v4l2_subdev *sd, u32 val); long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); #ifdef CONFIG_COMPAT; long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd, unsigned long arg); #endif; #ifdef CONFIG_VIDEO_ADV_DEBUG; int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg); #endif; int (*s_power)(struct v4l2_subdev *sd, int on); int (*interrupt_service_routine)(struct v4l2_subdev *sd, u32 status, bool *handled); int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); }; **Members** ``log_status`` callback for VIDIOC_LOG_STATUS() ioctl handler code. ``s_io_pin_config`` configure one or more chip I/O pins for chips that multiplex different internal signal pads out to IO pins. This function takes a pointer to an array of 'n' pin configuration entries, one for each pin being configured. This function could be called at times other than just subdevice initialization. ``init`` initialize the sensor registers to some sort of reasonable default values. Do not use for new drivers and should be removed in existing drivers. ``load_fw`` load firmware. ``reset`` generic reset command. The argument selects which subsystems to reset. Passing 0 will always reset the whole chip. Do not use for new drivers without discussing this first on the linux-media mailinglist. There should be no reason normally to reset a device. ``s_gpio`` set GPIO pins. Very simple right now, might need to be extended with a direction argument if needed. ``command`` called by in-kernel drivers in order to call functions internal to subdev drivers driver that have a separate callback. ``ioctl`` called at the end of ioctl() syscall handler at the V4L2 core. used to provide support for private ioctls used on the driver. ``compat_ioctl32`` called when a 32 bits application uses a 64 bits Kernel, in order to fix data passed from/to userspace. ``g_register`` callback for VIDIOC_DBG_G_REGISTER() ioctl handler code. ``s_register`` callback for VIDIOC_DBG_S_REGISTER() ioctl handler code. ``s_power`` puts subdevice in power saving mode (on == 0) or normal operation mode (on == 1). DEPRECATED. See Documentation/driver-api/media/camera-sensor.rst . pre_streamon and post_streamoff callbacks can be used for e.g. setting the bus to LP-11 mode before s_stream is called. ``interrupt_service_routine`` Called by the bridge chip's interrupt service handler, when an interrupt status has be raised due to this subdev, so that this subdev can handle the details. It may schedule work to be performed later. It must not sleep. **Called from an IRQ context**. ``subscribe_event`` used by the drivers to request the control framework that for it to be warned when the value of a control changes. ``unsubscribe_event`` remove event subscription from the control framework.”h]”(jŸ)�”}”(hX**Definition**:: struct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, struct v4l2_subdev_io_pin_config *pincfg); int (*init)(struct v4l2_subdev *sd, u32 val); int (*load_fw)(struct v4l2_subdev *sd); int (*reset)(struct v4l2_subdev *sd, u32 val); int (*s_gpio)(struct v4l2_subdev *sd, u32 val); long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); #ifdef CONFIG_COMPAT; long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd, unsigned long arg); #endif; #ifdef CONFIG_VIDEO_ADV_DEBUG; int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg); #endif; int (*s_power)(struct v4l2_subdev *sd, int on); int (*interrupt_service_routine)(struct v4l2_subdev *sd, u32 status, bool *handled); int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÖ ubhŒ:”…”�”}”(hjÖ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K“hjÒ ubj>)�”}”(hXÕstruct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, struct v4l2_subdev_io_pin_config *pincfg); int (*init)(struct v4l2_subdev *sd, u32 val); int (*load_fw)(struct v4l2_subdev *sd); int (*reset)(struct v4l2_subdev *sd, u32 val); int (*s_gpio)(struct v4l2_subdev *sd, u32 val); long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); #ifdef CONFIG_COMPAT; long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd, unsigned long arg); #endif; #ifdef CONFIG_VIDEO_ADV_DEBUG; int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg); #endif; int (*s_power)(struct v4l2_subdev *sd, int on); int (*interrupt_service_routine)(struct v4l2_subdev *sd, u32 status, bool *handled); int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); };”h]”hXÕstruct v4l2_subdev_core_ops { int (*log_status)(struct v4l2_subdev *sd); int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, struct v4l2_subdev_io_pin_config *pincfg); int (*init)(struct v4l2_subdev *sd, u32 val); int (*load_fw)(struct v4l2_subdev *sd); int (*reset)(struct v4l2_subdev *sd, u32 val); int (*s_gpio)(struct v4l2_subdev *sd, u32 val); long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); #ifdef CONFIG_COMPAT; long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd, unsigned long arg); #endif; #ifdef CONFIG_VIDEO_ADV_DEBUG; int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg); #endif; int (*s_power)(struct v4l2_subdev *sd, int on); int (*interrupt_service_routine)(struct v4l2_subdev *sd, u32 status, bool *handled); int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub); };”…”�”}”hjó sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K•hjÒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jò h´K“hjÎ ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj !h]”hŒMembers”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K«hjÎ ubjQ)�”}”(hhh]”(jV)�”}”(hŒD``log_status`` callback for VIDIOC_LOG_STATUS() ioctl handler code. ”h]”(j\)�”}”(hŒ``log_status``”h]”hú)�”}”(hj)!h]”hŒ log_status”…”�”}”(hj+!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K’hj#!ubjv)�”}”(hhh]”hÞ)�”}”(hŒ4callback for VIDIOC_LOG_STATUS() ioctl handler code.”h]”hŒ4callback for VIDIOC_LOG_STATUS() ioctl handler code.”…”�”}”(hjB!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j>!h´K’hj?!ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj#!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j>!h´K’hj !ubjV)�”}”(hXB``s_io_pin_config`` configure one or more chip I/O pins for chips that multiplex different internal signal pads out to IO pins. This function takes a pointer to an array of 'n' pin configuration entries, one for each pin being configured. This function could be called at times other than just subdevice initialization. ”h]”(j\)�”}”(hŒ``s_io_pin_config``”h]”hú)�”}”(hjb!h]”hŒs_io_pin_config”…”�”}”(hjd!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj`!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K˜hj\!ubjv)�”}”(hhh]”hÞ)�”}”(hX-configure one or more chip I/O pins for chips that multiplex different internal signal pads out to IO pins. This function takes a pointer to an array of 'n' pin configuration entries, one for each pin being configured. This function could be called at times other than just subdevice initialization.”h]”hX1configure one or more chip I/O pins for chips that multiplex different internal signal pads out to IO pins. This function takes a pointer to an array of ‘n’ pin configuration entries, one for each pin being configured. This function could be called at times other than just subdevice initialization.”…”�”}”(hj{!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K”hjx!ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj\!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jw!h´K˜hj !ubjV)�”}”(hŒš``init`` initialize the sensor registers to some sort of reasonable default values. Do not use for new drivers and should be removed in existing drivers. ”h]”(j\)�”}”(hŒ``init``”h]”hú)�”}”(hjœ!h]”hŒinit”…”�”}”(hjž!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjš!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kœhj–!ubjv)�”}”(hhh]”hÞ)�”}”(hŒ�initialize the sensor registers to some sort of reasonable default values. Do not use for new drivers and should be removed in existing drivers.”h]”hŒ�initialize the sensor registers to some sort of reasonable default values. Do not use for new drivers and should be removed in existing drivers.”…”�”}”(hjµ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kšhj²!ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj–!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j±!h´Kœhj !ubjV)�”}”(hŒ``load_fw`` load firmware. ”h]”(j\)�”}”(hŒ ``load_fw``”h]”hú)�”}”(hjÖ!h]”hŒload_fw”…”�”}”(hjØ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÔ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KžhjÐ!ubjv)�”}”(hhh]”hÞ)�”}”(hŒload firmware.”h]”hŒload firmware.”…”�”}”(hjï!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jë!h´Kžhjì!ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÐ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jë!h´Kžhj !ubjV)�”}”(hX ``reset`` generic reset command. The argument selects which subsystems to reset. Passing 0 will always reset the whole chip. Do not use for new drivers without discussing this first on the linux-media mailinglist. There should be no reason normally to reset a device. ”h]”(j\)�”}”(hŒ ``reset``”h]”hú)�”}”(hj"h]”hŒreset”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj "ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K£hj "ubjv)�”}”(hhh]”hÞ)�”}”(hXgeneric reset command. The argument selects which subsystems to reset. Passing 0 will always reset the whole chip. Do not use for new drivers without discussing this first on the linux-media mailinglist. There should be no reason normally to reset a device.”h]”hXgeneric reset command. The argument selects which subsystems to reset. Passing 0 will always reset the whole chip. Do not use for new drivers without discussing this first on the linux-media mailinglist. There should be no reason normally to reset a device.”…”�”}”(hj("h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K hj%"ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj "ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j$"h´K£hj !ubjV)�”}”(hŒp``s_gpio`` set GPIO pins. Very simple right now, might need to be extended with a direction argument if needed. ”h]”(j\)�”}”(hŒ ``s_gpio``”h]”hú)�”}”(hjI"h]”hŒs_gpio”…”�”}”(hjK"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjG"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¦hjC"ubjv)�”}”(hhh]”hÞ)�”}”(hŒdset GPIO pins. Very simple right now, might need to be extended with a direction argument if needed.”h]”hŒdset GPIO pins. Very simple right now, might need to be extended with a direction argument if needed.”…”�”}”(hjb"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¥hj_"ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjC"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j^"h´K¦hj !ubjV)�”}”(hŒ„``command`` called by in-kernel drivers in order to call functions internal to subdev drivers driver that have a separate callback. ”h]”(j\)�”}”(hŒ ``command``”h]”hú)�”}”(hjƒ"h]”hŒcommand”…”�”}”(hj…"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K©hj}"ubjv)�”}”(hhh]”hÞ)�”}”(hŒwcalled by in-kernel drivers in order to call functions internal to subdev drivers driver that have a separate callback.”h]”hŒwcalled by in-kernel drivers in order to call functions internal to subdev drivers driver that have a separate callback.”…”�”}”(hjœ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¨hj™"ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj}"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j˜"h´K©hj !ubjV)�”}”(hŒˆ``ioctl`` called at the end of ioctl() syscall handler at the V4L2 core. used to provide support for private ioctls used on the driver. ”h]”(j\)�”}”(hŒ ``ioctl``”h]”hú)�”}”(hj½"h]”hŒioctl”…”�”}”(hj¿"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj»"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¬hj·"ubjv)�”}”(hhh]”hÞ)�”}”(hŒ}called at the end of ioctl() syscall handler at the V4L2 core. used to provide support for private ioctls used on the driver.”h]”hŒ}called at the end of ioctl() syscall handler at the V4L2 core. used to provide support for private ioctls used on the driver.”…”�”}”(hjÖ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K«hjÓ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj·"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÒ"h´K¬hj !ubjV)�”}”(hŒ{``compat_ioctl32`` called when a 32 bits application uses a 64 bits Kernel, in order to fix data passed from/to userspace. ”h]”(j\)�”}”(hŒ``compat_ioctl32``”h]”hú)�”}”(hj÷"h]”hŒcompat_ioctl32”…”�”}”(hjù"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjõ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¯hjñ"ubjv)�”}”(hhh]”hÞ)�”}”(hŒgcalled when a 32 bits application uses a 64 bits Kernel, in order to fix data passed from/to userspace.”h]”hŒgcalled when a 32 bits application uses a 64 bits Kernel, in order to fix data passed from/to userspace.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K®hj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjñ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j #h´K¯hj !ubjV)�”}”(hŒH``g_register`` callback for VIDIOC_DBG_G_REGISTER() ioctl handler code. ”h]”(j\)�”}”(hŒ``g_register``”h]”hú)�”}”(hj1#h]”hŒ g_register”…”�”}”(hj3#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj/#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K±hj+#ubjv)�”}”(hhh]”hÞ)�”}”(hŒ8callback for VIDIOC_DBG_G_REGISTER() ioctl handler code.”h]”hŒ8callback for VIDIOC_DBG_G_REGISTER() ioctl handler code.”…”�”}”(hjJ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jF#h´K±hjG#ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj+#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jF#h´K±hj !ubjV)�”}”(hŒH``s_register`` callback for VIDIOC_DBG_S_REGISTER() ioctl handler code. ”h]”(j\)�”}”(hŒ``s_register``”h]”hú)�”}”(hjj#h]”hŒ s_register”…”�”}”(hjl#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjh#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K³hjd#ubjv)�”}”(hhh]”hÞ)�”}”(hŒ8callback for VIDIOC_DBG_S_REGISTER() ioctl handler code.”h]”hŒ8callback for VIDIOC_DBG_S_REGISTER() ioctl handler code.”…”�”}”(hjƒ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j#h´K³hj€#ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjd#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j#h´K³hj !ubjV)�”}”(hX``s_power`` puts subdevice in power saving mode (on == 0) or normal operation mode (on == 1). DEPRECATED. See Documentation/driver-api/media/camera-sensor.rst . pre_streamon and post_streamoff callbacks can be used for e.g. setting the bus to LP-11 mode before s_stream is called. ”h]”(j\)�”}”(hŒ ``s_power``”h]”hú)�”}”(hj£#h]”hŒs_power”…”�”}”(hj¥#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¡#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¹hj�#ubjv)�”}”(hhh]”hÞ)�”}”(hX puts subdevice in power saving mode (on == 0) or normal operation mode (on == 1). DEPRECATED. See Documentation/driver-api/media/camera-sensor.rst . pre_streamon and post_streamoff callbacks can be used for e.g. setting the bus to LP-11 mode before s_stream is called.”h]”hX puts subdevice in power saving mode (on == 0) or normal operation mode (on == 1). DEPRECATED. See Documentation/driver-api/media/camera-sensor.rst . pre_streamon and post_streamoff callbacks can be used for e.g. setting the bus to LP-11 mode before s_stream is called.”…”�”}”(hj¼#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kµhj¹#ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¸#h´K¹hj !ubjV)�”}”(hX``interrupt_service_routine`` Called by the bridge chip's interrupt service handler, when an interrupt status has be raised due to this subdev, so that this subdev can handle the details. It may schedule work to be performed later. It must not sleep. **Called from an IRQ context**. ”h]”(j\)�”}”(hŒ``interrupt_service_routine``”h]”hú)�”}”(hjÝ#h]”hŒinterrupt_service_routine”…”�”}”(hjß#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÛ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K¾hj×#ubjv)�”}”(hhh]”hÞ)�”}”(hŒþCalled by the bridge chip's interrupt service handler, when an interrupt status has be raised due to this subdev, so that this subdev can handle the details. It may schedule work to be performed later. It must not sleep. **Called from an IRQ context**.”h]”(hŒáCalled by the bridge chip’s interrupt service handler, when an interrupt status has be raised due to this subdev, so that this subdev can handle the details. It may schedule work to be performed later. It must not sleep. ”…”�”}”(hjö#h²hh³Nh´NubjÄ)�”}”(hŒ**Called from an IRQ context**”h]”hŒCalled from an IRQ context”…”�”}”(hjþ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjö#ubhŒ.”…”�”}”(hjö#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´K»hjó#ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj×#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jò#h´K¾hj !ubjV)�”}”(hŒ‡``subscribe_event`` used by the drivers to request the control framework that for it to be warned when the value of a control changes. ”h]”(j\)�”}”(hŒ``subscribe_event``”h]”hú)�”}”(hj)$h]”hŒsubscribe_event”…”�”}”(hj+$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KÁhj#$ubjv)�”}”(hhh]”hÞ)�”}”(hŒrused by the drivers to request the control framework that for it to be warned when the value of a control changes.”h]”hŒrused by the drivers to request the control framework that for it to be warned when the value of a control changes.”…”�”}”(hjB$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KÀhj?$ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj#$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j>$h´KÁhj !ubjV)�”}”(hŒK``unsubscribe_event`` remove event subscription from the control framework.”h]”(j\)�”}”(hŒ``unsubscribe_event``”h]”hú)�”}”(hjc$h]”hŒunsubscribe_event”…”�”}”(hje$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhja$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KÂhj]$ubjv)�”}”(hhh]”hÞ)�”}”(hŒ5remove event subscription from the control framework.”h]”hŒ5remove event subscription from the control framework.”…”�”}”(hj|$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KÃhjy$ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj]$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jx$h´KÂhj !ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjÎ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_tuner_ops (C struct)”Œc.v4l2_subdev_tuner_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_tuner_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_tuner_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj½$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹$h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KÉubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË$h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¹$h²hh³jÊ$h´KÉubj¤)�”}”(hŒv4l2_subdev_tuner_ops”h]”jª)�”}”(hj·$h]”hŒv4l2_subdev_tuner_ops”…”�”}”(hjÝ$h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÙ$ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj¹$h²hh³jÊ$h´KÉubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjµ$h²hh³jÊ$h´KÉubah}”(h]”j°$ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÊ$h´KÉhj²$h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ8Callbacks used when v4l device was opened in radio mode.”h]”hŒ8Callbacks used when v4l device was opened in radio mode.”…”�”}”(hjÿ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kàhjü$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj²$h²hh³jÊ$h´KÉubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j%jøj%jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¦ **Definition**:: struct v4l2_subdev_tuner_ops { int (*standby)(struct v4l2_subdev *sd); int (*s_radio)(struct v4l2_subdev *sd); int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq); int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band); int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt); int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm); int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); }; **Members** ``standby`` puts the tuner in standby mode. It will be woken up automatically the next time it is used. ``s_radio`` callback that switches the tuner to radio mode. drivers should explicitly call it when a tuner ops should operate on radio mode, before being able to handle it. Used on devices that have both AM/FM radio receiver and TV. ``s_frequency`` callback for VIDIOC_S_FREQUENCY() ioctl handler code. ``g_frequency`` callback for VIDIOC_G_FREQUENCY() ioctl handler code. freq->type must be filled in. Normally done by video_ioctl2() or the bridge driver. ``enum_freq_bands`` callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code. ``g_tuner`` callback for VIDIOC_G_TUNER() ioctl handler code. ``s_tuner`` callback for VIDIOC_S_TUNER() ioctl handler code. **vt->type** must be filled in. Normally done by video_ioctl2 or the bridge driver. ``g_modulator`` callback for VIDIOC_G_MODULATOR() ioctl handler code. ``s_modulator`` callback for VIDIOC_S_MODULATOR() ioctl handler code. ``s_type_addr`` sets tuner type and its I2C addr. ``s_config`` sets tda9887 specific stuff, like port1, port2 and qss **Description** .. note:: On devices that have both AM/FM and TV, it is up to the driver to explicitly call s_radio when the tuner should be switched to radio mode, before handling other :c:type:`struct v4l2_subdev_tuner_ops ` that would require it. An example of such usage is:: static void s_frequency(void *priv, const struct v4l2_frequency *f) { ... if (f.type == V4L2_TUNER_RADIO) v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio); ... v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency); }”h]”(jŸ)�”}”(hX|**Definition**:: struct v4l2_subdev_tuner_ops { int (*standby)(struct v4l2_subdev *sd); int (*s_radio)(struct v4l2_subdev *sd); int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq); int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band); int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt); int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm); int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj'%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj#%ubhŒ:”…”�”}”(hj#%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kähj%ubj>)�”}”(hXOstruct v4l2_subdev_tuner_ops { int (*standby)(struct v4l2_subdev *sd); int (*s_radio)(struct v4l2_subdev *sd); int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq); int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band); int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt); int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm); int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); };”h]”hXOstruct v4l2_subdev_tuner_ops { int (*standby)(struct v4l2_subdev *sd); int (*s_radio)(struct v4l2_subdev *sd); int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq); int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band); int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt); int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm); int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); };”…”�”}”hj@%sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kæhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j?%h´Kähj%ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjW%h]”hŒMembers”…”�”}”(hjY%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjU%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kôhj%ubjQ)�”}”(hhh]”(jV)�”}”(hŒh``standby`` puts the tuner in standby mode. It will be woken up automatically the next time it is used. ”h]”(j\)�”}”(hŒ ``standby``”h]”hú)�”}”(hjv%h]”hŒstandby”…”�”}”(hjx%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjt%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kåhjp%ubjv)�”}”(hhh]”hÞ)�”}”(hŒ[puts the tuner in standby mode. It will be woken up automatically the next time it is used.”h]”hŒ[puts the tuner in standby mode. It will be woken up automatically the next time it is used.”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KähjŒ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjp%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‹%h´Kåhjm%ubjV)�”}”(hŒé``s_radio`` callback that switches the tuner to radio mode. drivers should explicitly call it when a tuner ops should operate on radio mode, before being able to handle it. Used on devices that have both AM/FM radio receiver and TV. ”h]”(j\)�”}”(hŒ ``s_radio``”h]”hú)�”}”(hj°%h]”hŒs_radio”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj®%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kêhjª%ubjv)�”}”(hhh]”hÞ)�”}”(hŒÜcallback that switches the tuner to radio mode. drivers should explicitly call it when a tuner ops should operate on radio mode, before being able to handle it. Used on devices that have both AM/FM radio receiver and TV.”h]”hŒÜcallback that switches the tuner to radio mode. drivers should explicitly call it when a tuner ops should operate on radio mode, before being able to handle it. Used on devices that have both AM/FM radio receiver and TV.”…”�”}”(hjÉ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KçhjÆ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjª%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÅ%h´Kêhjm%ubjV)�”}”(hŒF``s_frequency`` callback for VIDIOC_S_FREQUENCY() ioctl handler code. ”h]”(j\)�”}”(hŒ``s_frequency``”h]”hú)�”}”(hjê%h]”hŒ s_frequency”…”�”}”(hjì%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjè%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kìhjä%ubjv)�”}”(hhh]”hÞ)�”}”(hŒ5callback for VIDIOC_S_FREQUENCY() ioctl handler code.”h]”hŒ5callback for VIDIOC_S_FREQUENCY() ioctl handler code.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÿ%h´Kìhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjä%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÿ%h´Kìhjm%ubjV)�”}”(hŒš``g_frequency`` callback for VIDIOC_G_FREQUENCY() ioctl handler code. freq->type must be filled in. Normally done by video_ioctl2() or the bridge driver. ”h]”(j\)�”}”(hŒ``g_frequency``”h]”hú)�”}”(hj#&h]”hŒ g_frequency”…”�”}”(hj%&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj!&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kðhj&ubjv)�”}”(hhh]”hÞ)�”}”(hŒ‰callback for VIDIOC_G_FREQUENCY() ioctl handler code. freq->type must be filled in. Normally done by video_ioctl2() or the bridge driver.”h]”hŒ‰callback for VIDIOC_G_FREQUENCY() ioctl handler code. freq->type must be filled in. Normally done by video_ioctl2() or the bridge driver.”…”�”}”(hj<&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kîhj9&ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j8&h´Kðhjm%ubjV)�”}”(hŒN``enum_freq_bands`` callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code. ”h]”(j\)�”}”(hŒ``enum_freq_bands``”h]”hú)�”}”(hj]&h]”hŒenum_freq_bands”…”�”}”(hj_&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KòhjW&ubjv)�”}”(hhh]”hÞ)�”}”(hŒ9callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code.”h]”hŒ9callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code.”…”�”}”(hjv&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jr&h´Kòhjs&ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjW&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jr&h´Kòhjm%ubjV)�”}”(hŒ>``g_tuner`` callback for VIDIOC_G_TUNER() ioctl handler code. ”h]”(j\)�”}”(hŒ ``g_tuner``”h]”hú)�”}”(hj–&h]”hŒg_tuner”…”�”}”(hj˜&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj”&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kôhj�&ubjv)�”}”(hhh]”hÞ)�”}”(hŒ1callback for VIDIOC_G_TUNER() ioctl handler code.”h]”hŒ1callback for VIDIOC_G_TUNER() ioctl handler code.”…”�”}”(hj¯&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j«&h´Kôhj¬&ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j«&h´Kôhjm%ubjV)�”}”(hŒ’``s_tuner`` callback for VIDIOC_S_TUNER() ioctl handler code. **vt->type** must be filled in. Normally done by video_ioctl2 or the bridge driver. ”h]”(j\)�”}”(hŒ ``s_tuner``”h]”hú)�”}”(hjÏ&h]”hŒs_tuner”…”�”}”(hjÑ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÍ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KøhjÉ&ubjv)�”}”(hhh]”hÞ)�”}”(hŒ…callback for VIDIOC_S_TUNER() ioctl handler code. **vt->type** must be filled in. Normally done by video_ioctl2 or the bridge driver.”h]”(hŒ2callback for VIDIOC_S_TUNER() ioctl handler code. ”…”�”}”(hjè&h²hh³Nh´NubjÄ)�”}”(hŒ **vt->type**”h]”hŒvt->type”…”�”}”(hjð&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjè&ubhŒG must be filled in. Normally done by video_ioctl2 or the bridge driver.”…”�”}”(hjè&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Köhjå&ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÉ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jä&h´Køhjm%ubjV)�”}”(hŒF``g_modulator`` callback for VIDIOC_G_MODULATOR() ioctl handler code. ”h]”(j\)�”}”(hŒ``g_modulator``”h]”hú)�”}”(hj'h]”hŒ g_modulator”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kúhj'ubjv)�”}”(hhh]”hÞ)�”}”(hŒ5callback for VIDIOC_G_MODULATOR() ioctl handler code.”h]”hŒ5callback for VIDIOC_G_MODULATOR() ioctl handler code.”…”�”}”(hj4'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j0'h´Kúhj1'ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j0'h´Kúhjm%ubjV)�”}”(hŒF``s_modulator`` callback for VIDIOC_S_MODULATOR() ioctl handler code. ”h]”(j\)�”}”(hŒ``s_modulator``”h]”hú)�”}”(hjT'h]”hŒ s_modulator”…”�”}”(hjV'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjR'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´KühjN'ubjv)�”}”(hhh]”hÞ)�”}”(hŒ5callback for VIDIOC_S_MODULATOR() ioctl handler code.”h]”hŒ5callback for VIDIOC_S_MODULATOR() ioctl handler code.”…”�”}”(hjm'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ji'h´Kühjj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjN'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ji'h´Kühjm%ubjV)�”}”(hŒ2``s_type_addr`` sets tuner type and its I2C addr. ”h]”(j\)�”}”(hŒ``s_type_addr``”h]”hú)�”}”(hj�'h]”hŒ s_type_addr”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‹'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Kþhj‡'ubjv)�”}”(hhh]”hÞ)�”}”(hŒ!sets tuner type and its I2C addr.”h]”hŒ!sets tuner type and its I2C addr.”…”�”}”(hj¦'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¢'h´Kþhj£'ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‡'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¢'h´Kþhjm%ubjV)�”}”(hŒE``s_config`` sets tda9887 specific stuff, like port1, port2 and qss ”h]”(j\)�”}”(hŒ ``s_config``”h]”hú)�”}”(hjÆ'h]”hŒs_config”…”�”}”(hjÈ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÀ'ubjv)�”}”(hhh]”hÞ)�”}”(hŒ6sets tda9887 specific stuff, like port1, port2 and qss”h]”hŒ6sets tda9887 specific stuff, like port1, port2 and qss”…”�”}”(hjß'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÜ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÀ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÛ'h´Mhjm%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj%ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj(h]”hŒ Description”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj%ubhŒnote”“”)�”}”(hX%On devices that have both AM/FM and TV, it is up to the driver to explicitly call s_radio when the tuner should be switched to radio mode, before handling other :c:type:`struct v4l2_subdev_tuner_ops ` that would require it. An example of such usage is:: static void s_frequency(void *priv, const struct v4l2_frequency *f) { ... if (f.type == V4L2_TUNER_RADIO) v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio); ... v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency); }”h]”(hÞ)�”}”(hXOn devices that have both AM/FM and TV, it is up to the driver to explicitly call s_radio when the tuner should be switched to radio mode, before handling other :c:type:`struct v4l2_subdev_tuner_ops ` that would require it. An example of such usage is::”h]”(hŒ¡On devices that have both AM/FM and TV, it is up to the driver to explicitly call s_radio when the tuner should be switched to radio mode, before handling other ”…”�”}”(hj(h²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct v4l2_subdev_tuner_ops `”h]”hú)�”}”(hj((h]”hŒstruct v4l2_subdev_tuner_ops”…”�”}”(hj*(h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj&(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_tuner_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj(ubhŒ4 that would require it. An example of such usage is:”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jE(h´Mhj(ubj>)�”}”(hŒÿstatic void s_frequency(void *priv, const struct v4l2_frequency *f) { ... if (f.type == V4L2_TUNER_RADIO) v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio); ... v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency); }”h]”hŒÿstatic void s_frequency(void *priv, const struct v4l2_frequency *f) { ... if (f.type == V4L2_TUNER_RADIO) v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio); ... v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency); }”…”�”}”hjP(sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_audio_ops (C struct)”Œc.v4l2_subdev_audio_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_audio_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_audio_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj…(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�(h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“(h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj�(h²hh³j’(h´Mubj¤)�”}”(hŒv4l2_subdev_audio_ops”h]”jª)�”}”(hj(h]”hŒv4l2_subdev_audio_ops”…”�”}”(hj¥(h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¡(ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj�(h²hh³j’(h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj}(h²hh³j’(h´Mubah}”(h]”jx(ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j’(h´Mhjz(h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ)Callbacks used for audio-related settings”h]”hŒ)Callbacks used for audio-related settings”…”�”}”(hjÇ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjÄ(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjz(h²hh³j’(h´Mubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jß(jøjß(jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Definition**:: struct v4l2_subdev_audio_ops { int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_stream)(struct v4l2_subdev *sd, int enable); }; **Members** ``s_clock_freq`` set the frequency (in Hz) of the audio clock output. Used to slave an audio processor to the video decoder, ensuring that audio and video remain synchronized. Usual values for the frequency are 48000, 44100 or 32000 Hz. If the frequency is not supported, then -EINVAL is returned. ``s_i2s_clock_freq`` sets I2S speed in bps. This is used to provide a standard way to select I2S clock used by driving digital audio streams at some board designs. Usual values for the frequency are 1024000 and 2048000. If the frequency is not supported, then ``-EINVAL`` is returned. ``s_routing`` used to define the input and/or output pins of an audio chip, and any additional configuration data. Never attempt to use user-level input IDs (e.g. Composite, S-Video, Tuner) at this level. An i2c device shouldn't know about whether an input pin is connected to a Composite connector, become on another board or platform it might be connected to something else entirely. The calling driver is responsible for mapping a user-level input to the right pins on the i2c device. ``s_stream`` used to notify the audio code that stream will start or has stopped.”h]”(jŸ)�”}”(hXL**Definition**:: struct v4l2_subdev_audio_ops { int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_stream)(struct v4l2_subdev *sd, int enable); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjï(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjë(ubhŒ:”…”�”}”(hjë(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M$hjç(ubj>)�”}”(hX-struct v4l2_subdev_audio_ops { int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_stream)(struct v4l2_subdev *sd, int enable); };”h]”hX-struct v4l2_subdev_audio_ops { int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_stream)(struct v4l2_subdev *sd, int enable); };”…”�”}”hj)sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M&hjç(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j)h´M$hjã(ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj)h]”hŒMembers”…”�”}”(hj!)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M-hjã(ubjQ)�”}”(hhh]”(jV)�”}”(hX*``s_clock_freq`` set the frequency (in Hz) of the audio clock output. Used to slave an audio processor to the video decoder, ensuring that audio and video remain synchronized. Usual values for the frequency are 48000, 44100 or 32000 Hz. If the frequency is not supported, then -EINVAL is returned. ”h]”(j\)�”}”(hŒ``s_clock_freq``”h]”hú)�”}”(hj>)h]”hŒ s_clock_freq”…”�”}”(hj@)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj<)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M'hj8)ubjv)�”}”(hhh]”hÞ)�”}”(hXset the frequency (in Hz) of the audio clock output. Used to slave an audio processor to the video decoder, ensuring that audio and video remain synchronized. Usual values for the frequency are 48000, 44100 or 32000 Hz. If the frequency is not supported, then -EINVAL is returned.”h]”hXset the frequency (in Hz) of the audio clock output. Used to slave an audio processor to the video decoder, ensuring that audio and video remain synchronized. Usual values for the frequency are 48000, 44100 or 32000 Hz. If the frequency is not supported, then -EINVAL is returned.”…”�”}”(hjW)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M#hjT)ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj8)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jS)h´M'hj5)ubjV)�”}”(hX``s_i2s_clock_freq`` sets I2S speed in bps. This is used to provide a standard way to select I2S clock used by driving digital audio streams at some board designs. Usual values for the frequency are 1024000 and 2048000. If the frequency is not supported, then ``-EINVAL`` is returned. ”h]”(j\)�”}”(hŒ``s_i2s_clock_freq``”h]”hú)�”}”(hjx)h]”hŒs_i2s_clock_freq”…”�”}”(hjz)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjv)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hjr)ubjv)�”}”(hhh]”hÞ)�”}”(hXsets I2S speed in bps. This is used to provide a standard way to select I2S clock used by driving digital audio streams at some board designs. Usual values for the frequency are 1024000 and 2048000. If the frequency is not supported, then ``-EINVAL`` is returned.”h]”(hŒïsets I2S speed in bps. This is used to provide a standard way to select I2S clock used by driving digital audio streams at some board designs. Usual values for the frequency are 1024000 and 2048000. If the frequency is not supported, then ”…”�”}”(hj‘)h²hh³Nh´Nubhú)�”}”(hŒ ``-EINVAL``”h]”hŒ-EINVAL”…”�”}”(hj™)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‘)ubhŒ is returned.”…”�”}”(hj‘)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M)hjŽ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjr)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�)h´M,hj5)ubjV)�”}”(hXè``s_routing`` used to define the input and/or output pins of an audio chip, and any additional configuration data. Never attempt to use user-level input IDs (e.g. Composite, S-Video, Tuner) at this level. An i2c device shouldn't know about whether an input pin is connected to a Composite connector, become on another board or platform it might be connected to something else entirely. The calling driver is responsible for mapping a user-level input to the right pins on the i2c device. ”h]”(j\)�”}”(hŒ ``s_routing``”h]”hú)�”}”(hjÄ)h]”hŒ s_routing”…”�”}”(hjÆ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÂ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M5hj¾)ubjv)�”}”(hhh]”hÞ)�”}”(hXÙused to define the input and/or output pins of an audio chip, and any additional configuration data. Never attempt to use user-level input IDs (e.g. Composite, S-Video, Tuner) at this level. An i2c device shouldn't know about whether an input pin is connected to a Composite connector, become on another board or platform it might be connected to something else entirely. The calling driver is responsible for mapping a user-level input to the right pins on the i2c device.”h]”hXÛused to define the input and/or output pins of an audio chip, and any additional configuration data. Never attempt to use user-level input IDs (e.g. Composite, S-Video, Tuner) at this level. An i2c device shouldn’t know about whether an input pin is connected to a Composite connector, become on another board or platform it might be connected to something else entirely. The calling driver is responsible for mapping a user-level input to the right pins on the i2c device.”…”�”}”(hjÝ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M.hjÚ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¾)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÙ)h´M5hj5)ubjV)�”}”(hŒQ``s_stream`` used to notify the audio code that stream will start or has stopped.”h]”(j\)�”}”(hŒ ``s_stream``”h]”hú)�”}”(hjþ)h]”hŒs_stream”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjü)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M7hjø)ubjv)�”}”(hhh]”hÞ)�”}”(hŒDused to notify the audio code that stream will start or has stopped.”h]”hŒDused to notify the audio code that stream will start or has stopped.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j*h´M7hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjø)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j*h´M7hj5)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjã(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ*v4l2_mbus_frame_desc_entry_csi2 (C struct)”Œ!c.v4l2_mbus_frame_desc_entry_csi2”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_mbus_frame_desc_entry_csi2”h]”j{)�”}”(hŒ&struct v4l2_mbus_frame_desc_entry_csi2”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjW*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjS*h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje*h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjS*h²hh³jd*h´M>ubj¤)�”}”(hŒv4l2_mbus_frame_desc_entry_csi2”h]”jª)�”}”(hjQ*h]”hŒv4l2_mbus_frame_desc_entry_csi2”…”�”}”(hjw*h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjs*ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjS*h²hh³jd*h´M>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjO*h²hh³jd*h´M>ubah}”(h]”jJ*ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jd*h´M>hjL*h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjL*h²hh³jd*h´M>ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j¢*jøj¢*jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ³ **Definition**:: struct v4l2_mbus_frame_desc_entry_csi2 { u8 vc; u8 dt; }; **Members** ``vc`` CSI-2 virtual channel ``dt`` CSI-2 data type ID”h]”(jŸ)�”}”(hŒ`**Definition**:: struct v4l2_mbus_frame_desc_entry_csi2 { u8 vc; u8 dt; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj²*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj®*ubhŒ:”…”�”}”(hj®*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MEhjª*ubj>)�”}”(hŒEstruct v4l2_mbus_frame_desc_entry_csi2 { u8 vc; u8 dt; };”h]”hŒEstruct v4l2_mbus_frame_desc_entry_csi2 { u8 vc; u8 dt; };”…”�”}”hjË*sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MGhjª*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÊ*h´MEhj¦*ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjâ*h]”hŒMembers”…”�”}”(hjä*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjà*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MLhj¦*ubjQ)�”}”(hhh]”(jV)�”}”(hŒ``vc`` CSI-2 virtual channel ”h]”(j\)�”}”(hŒ``vc``”h]”hú)�”}”(hj+h]”hŒvc”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÿ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MDhjû*ubjv)�”}”(hhh]”hÞ)�”}”(hŒCSI-2 virtual channel”h]”hŒCSI-2 virtual channel”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j+h´MDhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjû*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j+h´MDhjø*ubjV)�”}”(hŒ``dt`` CSI-2 data type ID”h]”(j\)�”}”(hŒ``dt``”h]”hú)�”}”(hj:+h]”hŒdt”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj8+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MDhj4+ubjv)�”}”(hhh]”hÞ)�”}”(hŒCSI-2 data type ID”h]”hŒCSI-2 data type ID”…”�”}”(hjS+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MEhjP+ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj4+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jO+h´MDhjø*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj¦*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ#v4l2_mbus_frame_desc_flags (C enum)”Œc.v4l2_mbus_frame_desc_flags”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_mbus_frame_desc_flags”h]”j{)�”}”(hŒenum v4l2_mbus_frame_desc_flags”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hj”+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�+h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MKubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢+h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj�+h²hh³j¡+h´MKubj¤)�”}”(hŒv4l2_mbus_frame_desc_flags”h]”jª)�”}”(hjŽ+h]”hŒv4l2_mbus_frame_desc_flags”…”�”}”(hj´+h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj°+ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj�+h²hh³j¡+h´MKubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjŒ+h²hh³j¡+h´MKubah}”(h]”j‡+ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¡+h´MKhj‰+h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ!media bus frame description flags”h]”hŒ!media bus frame description flags”…”�”}”(hjÖ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MLhjÓ+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj‰+h²hh³j¡+h´MKubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷jî+jøjî+jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX<**Constants** ``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX`` Indicates that :c:type:`struct v4l2_mbus_frame_desc_entry `->length field specifies maximum data length. ``V4L2_MBUS_FRAME_DESC_FL_BLOB`` Indicates that the format does not have line offsets, i.e. the receiver should use 1D DMA.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hjø+h]”hŒ Constants”…”�”}”(hjú+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjö+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MPhjò+ubjQ)�”}”(hhh]”(jV)�”}”(hŒ©``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX`` Indicates that :c:type:`struct v4l2_mbus_frame_desc_entry `->length field specifies maximum data length. ”h]”(j\)�”}”(hŒ#``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX``”h]”hú)�”}”(hj,h]”hŒV4L2_MBUS_FRAME_DESC_FL_LEN_MAX”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MThj,ubjv)�”}”(hhh]”hÞ)�”}”(hŒ„Indicates that :c:type:`struct v4l2_mbus_frame_desc_entry `->length field specifies maximum data length.”•h]”(hŒIndicates that ”…”�”}”(hj0,h²hh³Nh´Nubh)�”}”(hŒH:c:type:`struct v4l2_mbus_frame_desc_entry `”h]”hú)�”}”(hj:,h]”hŒ!struct v4l2_mbus_frame_desc_entry”…”�”}”(hj<,h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj8,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_frame_desc_entry”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MShj0,ubhŒ-->length field specifies maximum data length.”…”�”}”(hj0,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jW,h´MShj-,ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j,,h´MThj,ubjV)�”}”(hŒ{``V4L2_MBUS_FRAME_DESC_FL_BLOB`` Indicates that the format does not have line offsets, i.e. the receiver should use 1D DMA.”h]”(j\)�”}”(hŒ ``V4L2_MBUS_FRAME_DESC_FL_BLOB``”h]”hú)�”}”(hjt,h]”hŒV4L2_MBUS_FRAME_DESC_FL_BLOB”…”�”}”(hjv,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjr,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MWhjn,ubjv)�”}”(hhh]”hÞ)�”}”(hŒZIndicates that the format does not have line offsets, i.e. the receiver should use 1D DMA.”h]”hŒZIndicates that the format does not have line offsets, i.e. the receiver should use 1D DMA.”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‰,h´MWhjŠ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjn,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‰,h´MWhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjò+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%v4l2_mbus_frame_desc_entry (C struct)”Œc.v4l2_mbus_frame_desc_entry”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_mbus_frame_desc_entry”h]”j{)�”}”(hŒ!struct v4l2_mbus_frame_desc_entry”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÍ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉ,h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M]ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ,h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÉ,h²hh³jÚ,h´M]ubj¤)�”}”(hŒv4l2_mbus_frame_desc_entry”h]”jª)�”}”(hjÇ,h]”hŒv4l2_mbus_frame_desc_entry”…”�”}”(hjí,h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjé,ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÉ,h²hh³jÚ,h´M]ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÅ,h²hh³jÚ,h´M]ubah}”(h]”jÀ,ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÚ,h´M]hjÂ,h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ%media bus frame description structure”h]”hŒ%media bus frame description structure”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M[hj -h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÂ,h²hh³jÚ,h´M]ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j'-jøj'-jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXô **Definition**:: struct v4l2_mbus_frame_desc_entry { enum v4l2_mbus_frame_desc_flags flags; u32 stream; u32 pixelcode; u32 length; union { struct v4l2_mbus_frame_desc_entry_csi2 csi2; } bus; }; **Members** ``flags`` bitmask flags, as defined by :c:type:`enum v4l2_mbus_frame_desc_flags `. ``stream`` stream in routing configuration ``pixelcode`` media bus pixel code, valid if **flags** ``FRAME_DESC_FL_BLOB`` is not set. ``length`` number of octets per frame, valid if **flags** ``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX`` is set. ``bus`` Bus-specific frame descriptor parameters ``bus.csi2`` CSI-2-specific bus configuration”h]”(jŸ)�”}”(hX**Definition**:: struct v4l2_mbus_frame_desc_entry { enum v4l2_mbus_frame_desc_flags flags; u32 stream; u32 pixelcode; u32 length; union { struct v4l2_mbus_frame_desc_entry_csi2 csi2; } bus; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj7-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj3-ubhŒ:”…”�”}”(hj3-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M_hj/-ubj>)�”}”(hŒàstruct v4l2_mbus_frame_desc_entry { enum v4l2_mbus_frame_desc_flags flags; u32 stream; u32 pixelcode; u32 length; union { struct v4l2_mbus_frame_desc_entry_csi2 csi2; } bus; };”h]”hŒàstruct v4l2_mbus_frame_desc_entry { enum v4l2_mbus_frame_desc_flags flags; u32 stream; u32 pixelcode; u32 length; union { struct v4l2_mbus_frame_desc_entry_csi2 csi2; } bus; };”…”�”}”hjP-sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mahj/-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jO-h´M_hj+-ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjg-h]”hŒMembers”…”�”}”(hji-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhje-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mkhj+-ubjQ)�”}”(hhh]”(jV)�”}”(hŒo``flags`` bitmask flags, as defined by :c:type:`enum v4l2_mbus_frame_desc_flags `. ”h]”(j\)�”}”(hŒ ``flags``”h]”hú)�”}”(hj†-h]”hŒflags”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj„-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M^hj€-ubjv)�”}”(hhh]”hÞ)�”}”(hŒdbitmask flags, as defined by :c:type:`enum v4l2_mbus_frame_desc_flags `.”h]”(hŒbitmask flags, as defined by ”…”�”}”(hjŸ-h²hh³Nh´Nubh)�”}”(hŒF:c:type:`enum v4l2_mbus_frame_desc_flags `”h]”hú)�”}”(hj©-h]”hŒenum v4l2_mbus_frame_desc_flags”…”�”}”(hj«-h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj§-ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_frame_desc_flags”uh1hh³j›-h´M^hjŸ-ubhŒ.”…”�”}”(hjŸ-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j›-h´M^hjœ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj€-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j›-h´M^hj}-ubjV)�”}”(hŒ+``stream`` stream in routing configuration ”h]”(j\)�”}”(hŒ ``stream``”h]”hú)�”}”(hjâ-h]”hŒstream”…”�”}”(hjä-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjà-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M_hjÜ-ubjv)�”}”(hhh]”hÞ)�”}”(hŒstream in routing configuration”h]”hŒstream in routing configuration”…”�”}”(hjû-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j÷-h´M_hjø-ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÜ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j÷-h´M_hj}-ubjV)�”}”(hŒZ``pixelcode`` media bus pixel code, valid if **flags** ``FRAME_DESC_FL_BLOB`` is not set. ”h]”(j\)�”}”(hŒ ``pixelcode``”h]”hú)�”}”(hj.h]”hŒ pixelcode”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mahj.ubjv)�”}”(hhh]”hÞ)�”}”(hŒKmedia bus pixel code, valid if **flags** ``FRAME_DESC_FL_BLOB`` is not set.”h]”(hŒmedia bus pixel code, valid if ”…”�”}”(hj4.h²hh³Nh´NubjÄ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj<.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj4.ubhŒ ”…”�”}”(hj4.h²hh³Nh´Nubhú)�”}”(hŒ``FRAME_DESC_FL_BLOB``”h]”hŒFRAME_DESC_FL_BLOB”…”�”}”(hjN.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj4.ubhŒ is not set.”…”�”}”(hj4.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M`hj1.ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j0.h´Mahj}-ubjV)�”}”(hŒf``length`` number of octets per frame, valid if **flags** ``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX`` is set. ”h]”(j\)�”}”(hŒ ``length``”h]”hú)�”}”(hjy.h]”hŒlength”…”�”}”(hj{.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjw.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mchjs.ubjv)�”}”(hhh]”hÞ)�”}”(hŒZnumber of octets per frame, valid if **flags** ``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX`` is set.”h]”(hŒ%number of octets per frame, valid if ”…”�”}”(hj’.h²hh³Nh´NubjÄ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjš.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj’.ubhŒ ”…”�”}”(hj’.h²hh³Nh´Nubhú)�”}”(hŒ#``V4L2_MBUS_FRAME_DESC_FL_LEN_MAX``”h]”hŒV4L2_MBUS_FRAME_DESC_FL_LEN_MAX”…”�”}”(hj¬.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj’.ubhŒ is set.”…”�”}”(hj’.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mbhj�.ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjs.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jŽ.h´Mchj}-ubjV)�”}”(hŒ1``bus`` Bus-specific frame descriptor parameters ”h]”(j\)�”}”(hŒ``bus``”h]”hú)�”}”(hj×.h]”hŒbus”…”�”}”(hjÙ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÕ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MdhjÑ.ubjv)�”}”(hhh]”hÞ)�”}”(hŒ(Bus-specific frame descriptor parameters”h]”hŒ(Bus-specific frame descriptor parameters”…”�”}”(hjð.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jì.h´Mdhjí.ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÑ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jì.h´Mdhj}-ubjV)�”}”(hŒ-``bus.csi2`` CSI-2-specific bus configuration”h]”(j\)�”}”(hŒ ``bus.csi2``”h]”hú)�”}”(hj/h]”hŒbus.csi2”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mdhj /ubjv)�”}”(hhh]”hÞ)�”}”(hŒ CSI-2-specific bus configuration”h]”hŒ CSI-2-specific bus configuration”…”�”}”(hj)/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mehj&/ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj /ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j%/h´Mdhj}-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj+-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ"v4l2_mbus_frame_desc_type (C enum)”Œc.v4l2_mbus_frame_desc_type”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_mbus_frame_desc_type”h]”j{)�”}”(hŒenum v4l2_mbus_frame_desc_type”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hjj/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjf/h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mkubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx/h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjf/h²hh³jw/h´Mkubj¤)�”}”(hŒv4l2_mbus_frame_desc_type”h]”jª)�”}”(hjd/h]”hŒv4l2_mbus_frame_desc_type”…”�”}”(hjŠ/h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj†/ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjf/h²hh³jw/h´Mkubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjb/h²hh³jw/h´Mkubah}”(h]”j]/ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jw/h´Mkhj_/h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ media bus frame description type”h]”hŒ media bus frame description type”…”�”}”(hj¬/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mwhj©/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj_/h²hh³jw/h´Mkubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷jÄ/jøjÄ/jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX�**Constants** ``V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED`` Undefined frame desc type. Drivers should not use this, it is for backwards compatibility. ``V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL`` Parallel media bus. ``V4L2_MBUS_FRAME_DESC_TYPE_CSI2`` CSI-2 media bus. Frame desc parameters must be set in :c:type:`struct v4l2_mbus_frame_desc_entry `->csi2.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hjÎ/h]”hŒ Constants”…”�”}”(hjÐ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÌ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M{hjÈ/ubjQ)�”}”(hhh]”(jV)�”}”(hŒƒ``V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED`` Undefined frame desc type. Drivers should not use this, it is for backwards compatibility. ”h]”(j\)�”}”(hŒ'``V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED``”h]”hú)�”}”(hjí/h]”hŒ#V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED”…”�”}”(hjï/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjë/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjç/ubjv)�”}”(hhh]”hÞ)�”}”(hŒZUndefined frame desc type. Drivers should not use this, it is for backwards compatibility.”h]”hŒZUndefined frame desc type. Drivers should not use this, it is for backwards compatibility.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M~hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjç/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j0h´Mhjä/ubjV)�”}”(hŒ;``V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL`` Parallel media bus. ”h]”(j\)�”}”(hŒ&``V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL``”h]”hú)�”}”(hj'0h]”hŒ"V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL”…”�”}”(hj)0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj%0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‚hj!0ubjv)�”}”(hhh]”hÞ)�”}”(hŒParallel media bus.”h]”hŒParallel media bus.”…”�”}”(hj@0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j<0h´M‚hj=0ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj!0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j<0h´M‚hjä/ubjV)�”}”(hŒ¨``V4L2_MBUS_FRAME_DESC_TYPE_CSI2`` CSI-2 media bus. Frame desc parameters must be set in :c:type:`struct v4l2_mbus_frame_desc_entry `->csi2.”h]”(j\)�”}”(hŒ"``V4L2_MBUS_FRAME_DESC_TYPE_CSI2``”h]”hú)�”}”(hj`0h]”hŒV4L2_MBUS_FRAME_DESC_TYPE_CSI2”…”�”}”(hjb0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj^0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M…hjZ0ubjv)�”}”(hhh]”hÞ)�”}”(hŒ…CSI-2 media bus. Frame desc parameters must be set in :c:type:`struct v4l2_mbus_frame_desc_entry `->csi2.”h]”(hŒ6CSI-2 media bus. Frame desc parameters must be set in ”…”�”}”(hjy0h²hh³Nh´Nubh)�”}”(hŒH:c:type:`struct v4l2_mbus_frame_desc_entry `”h]”hú)�”}”(hjƒ0h]”hŒ!struct v4l2_mbus_frame_desc_entry”…”�”}”(hj…0h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj�0ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_frame_desc_entry”uh1hh³ju0h´M…hjy0ubhŒ->csi2.”…”�”}”(hjy0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ju0h´M…hjv0ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjZ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ju0h´M…hjä/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjÈ/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_mbus_frame_desc (C struct)”Œc.v4l2_mbus_frame_desc”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_mbus_frame_desc”h]”j{)�”}”(hŒstruct v4l2_mbus_frame_desc”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÜ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ0h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‹ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê0h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjØ0h²hh³jé0h´M‹ubj¤)�”}”(hŒv4l2_mbus_frame_desc”h]”jª)�”}”(hjÖ0h]”hŒv4l2_mbus_frame_desc”…”�”}”(hjü0h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjø0ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjØ0h²hh³jé0h´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÔ0h²hh³jé0h´M‹ubah}”(h]”jÏ0ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jé0h´M‹hjÑ0h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ media bus data frame description”h]”hŒ media bus data frame description”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‰hj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÑ0h²hh³jé0h´M‹ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j61jøj61jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX† **Definition**:: struct v4l2_mbus_frame_desc { enum v4l2_mbus_frame_desc_type type; struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX]; unsigned short num_entries; }; **Members** ``type`` type of the bus (enum v4l2_mbus_frame_desc_type) ``entry`` frame descriptors array ``num_entries`` number of entries in **entry** array”h]”(jŸ)�”}”(hŒÔ**Definition**:: struct v4l2_mbus_frame_desc { enum v4l2_mbus_frame_desc_type type; struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX]; unsigned short num_entries; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjF1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjB1ubhŒ:”…”�”}”(hjB1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj>1ubj>)�”}”(hŒ·struct v4l2_mbus_frame_desc { enum v4l2_mbus_frame_desc_type type; struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX]; unsigned short num_entries; };”h]”hŒ·struct v4l2_mbus_frame_desc { enum v4l2_mbus_frame_desc_type type; struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX]; unsigned short num_entries; };”…”�”}”hj_1sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj>1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j^1h´M�hj:1ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjv1h]”hŒMembers”…”�”}”(hjx1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjt1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M•hj:1ubjQ)�”}”(hhh]”(jV)�”}”(hŒ:``type`` type of the bus (enum v4l2_mbus_frame_desc_type) ”h]”(j\)�”}”(hŒ``type``”h]”hú)�”}”(hj•1h]”hŒtype”…”�”}”(hj—1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj“1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‹hj�1ubjv)�”}”(hhh]”hÞ)�”}”(hŒ0type of the bus (enum v4l2_mbus_frame_desc_type)”h]”hŒ0type of the bus (enum v4l2_mbus_frame_desc_type)”…”�”}”(hj®1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jª1h´M‹hj«1ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jª1h´M‹hjŒ1ubjV)�”}”(hŒ"``entry`` frame descriptors array ”h]”(j\)�”}”(hŒ ``entry``”h]”hú)�”}”(hjÎ1h]”hŒentry”…”�”}”(hjÐ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÌ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŒhjÈ1ubjv)�”}”(hhh]”hÞ)�”}”(hŒframe descriptors array”h]”hŒframe descriptors array”…”�”}”(hjç1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jã1h´MŒhjä1ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÈ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jã1h´MŒhjŒ1ubjV)�”}”(hŒ4``num_entries`` number of entries in **entry** array”h]”(j\)�”}”(hŒ``num_entries``”h]”hú)�”}”(hj2h]”hŒ num_entries”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŒhj2ubjv)�”}”(hhh]”hÞ)�”}”(hŒ$number of entries in **entry** array”h]”(hŒnumber of entries in ”…”�”}”(hj 2h²hh³Nh´NubjÄ)�”}”(hŒ **entry**”h]”hŒentry”…”�”}”(hj(2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj 2ubhŒ array”…”�”}”(hj 2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j2h´MŒhjŒ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj:1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ'v4l2_subdev_pre_streamon_flags (C enum)”Œ c.v4l2_subdev_pre_streamon_flags”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_pre_streamon_flags”h]”j{)�”}”(hŒ#enum v4l2_subdev_pre_streamon_flags”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hjs2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjo2h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�2h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjo2h²hh³j€2h´M“ubj¤)�”}”(hŒv4l2_subdev_pre_streamon_flags”h]”jª)�”}”(hjm2h]”hŒv4l2_subdev_pre_streamon_flags”…”�”}”(hj“2h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj�2ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjo2h²hh³j€2h´M“ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjk2h²hh³j€2h´M“ubah}”(h]”jf2ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j€2h´M“hjh2h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ%Flags for pre_streamon subdev core op”h]”hŒ%Flags for pre_streamon subdev core op”…”�”}”(hjµ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M•hj²2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjh2h²hh³j€2h´M“ubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷jÍ2jøjÍ2jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒŠ**Constants** ``V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP`` Set the transmitter to either LP-11 or LP-111 mode before call to s_stream().”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hj×2h]”hŒ Constants”…”�”}”(hjÙ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÕ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M™hjÑ2ubjQ)�”}”(hhh]”jV)�”}”(hŒw``V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP`` Set the transmitter to either LP-11 or LP-111 mode before call to s_stream().”h]”(j\)�”}”(hŒ)``V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP``”h]”hú)�”}”(hjö2h]”hŒ%V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP”…”�”}”(hjø2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjô2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mœhjð2ubjv)�”}”(hhh]”hÞ)�”}”(hŒMSet the transmitter to either LP-11 or LP-111 mode before call to s_stream().”h]”hŒMSet the transmitter to either LP-11 or LP-111 mode before call to s_stream().”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j 3h´Mœhj 3ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjð2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j 3h´Mœhjí2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjÑ2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_video_ops (C struct)”Œc.v4l2_subdev_video_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_video_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_video_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjO3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjK3h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]3h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjK3h²hh³j\3h´M¢ubj¤)�”}”(hŒv4l2_subdev_video_ops”h]”jª)�”}”(hjI3h]”hŒv4l2_subdev_video_ops”…”�”}”(hjo3h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjk3ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjK3h²hh³j\3h´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjG3h²hh³j\3h´M¢ubah}”(h]”jB3ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j\3h´M¢hjD3h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ8Callbacks used when v4l device was opened in video mode.”h]”hŒ8Callbacks used when v4l device was opened in video mode.”…”�”}”(hj‘3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŸhjŽ3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjD3h²hh³j\3h´M¢ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j©3jøj©3jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Definition**:: struct v4l2_subdev_video_ops { int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); int (*s_stream)(struct v4l2_subdev *sd, int enable); int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf, unsigned int *size); int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags); int (*post_streamoff)(struct v4l2_subdev *sd); }; **Members** ``s_routing`` see s_routing in audio_ops, except this version is for video devices. ``s_crystal_freq`` sets the frequency of the crystal used to generate the clocks in Hz. An extra flags field allows device specific configuration regarding clock frequency dividers, etc. If not used, then set flags to 0. If the frequency is not supported, then -EINVAL is returned. ``g_std`` callback for VIDIOC_G_STD() ioctl handler code. ``s_std`` callback for VIDIOC_S_STD() ioctl handler code. ``s_std_output`` set v4l2_std_id for video OUTPUT devices. This is ignored by video input devices. ``g_std_output`` get current standard for video OUTPUT devices. This is ignored by video input devices. ``querystd`` callback for VIDIOC_QUERYSTD() ioctl handler code. ``g_tvnorms`` get :c:type:`v4l2_std_id` with all standards supported by the video CAPTURE device. This is ignored by video output devices. ``g_tvnorms_output`` get v4l2_std_id with all standards supported by the video OUTPUT device. This is ignored by video capture devices. ``g_input_status`` get input status. Same as the status field in the :c:type:`struct v4l2_input ` ``s_stream`` start (enabled == 1) or stop (enabled == 0) streaming on the sub-device. Failure on stop will remove any resources acquired in streaming start, while the error code is still returned by the driver. The caller shall track the subdev state, and shall not start or stop an already started or stopped subdev. Also see call_s_stream wrapper in v4l2-subdev.c. ``s_rx_buffer`` set a host allocated memory buffer for the subdev. The subdev can adjust **size** to a lower value and must not write more data to the buffer starting at **data** than the original value of **size**. ``pre_streamon`` May be called before streaming is actually started, to help initialising the bus. Current usage is to set a CSI-2 transmitter to LP-11 or LP-111 mode before streaming. See :c:type:`enum v4l2_subdev_pre_streamon_flags `. ``post_streamoff`` Called after streaming is stopped, but if and only if pre_streamon was called earlier. **Description** This callback is DEPRECATED. New drivers should instead implement :c:type:`v4l2_subdev_pad_ops.enable_streams ` and :c:type:`v4l2_subdev_pad_ops.disable_streams ` operations, and use v4l2_subdev_s_stream_helper for the :c:type:`v4l2_subdev_video_ops.s_stream ` operation to support legacy users. Drivers should also not call the .s_stream() subdev operation directly, but use the v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helpers. pre_streamon shall return error if it cannot perform the operation as indicated by the flags argument. In particular, -EACCES indicates lack of support for the operation. The caller shall call post_streamoff for each successful call of pre_streamon.”h]”(jŸ)�”}”(hX**Definition**:: struct v4l2_subdev_video_ops { int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); int (*s_stream)(struct v4l2_subdev *sd, int enable); int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf, unsigned int *size); int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags); int (*post_streamoff)(struct v4l2_subdev *sd); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¹3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjµ3ubhŒ:”…”�”}”(hjµ3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M£hj±3ubj>)�”}”(hXÑstruct v4l2_subdev_video_ops { int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); int (*s_stream)(struct v4l2_subdev *sd, int enable); int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf, unsigned int *size); int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags); int (*post_streamoff)(struct v4l2_subdev *sd); };”h]”hXÑstruct v4l2_subdev_video_ops { int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std); int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); int (*s_stream)(struct v4l2_subdev *sd, int enable); int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf, unsigned int *size); int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags); int (*post_streamoff)(struct v4l2_subdev *sd); };”…”�”}”hjÒ3sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥hj±3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÑ3h´M£hj­3ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjé3h]”hŒMembers”…”�”}”(hjë3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjç3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¶hj­3ubjQ)�”}”(hhh]”(jV)�”}”(hŒT``s_routing`` see s_routing in audio_ops, except this version is for video devices. ”h]”(j\)�”}”(hŒ ``s_routing``”h]”hú)�”}”(hj4h]”hŒ s_routing”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¤hj4ubjv)�”}”(hhh]”hÞ)�”}”(hŒEsee s_routing in audio_ops, except this version is for video devices.”h]”hŒEsee s_routing in audio_ops, except this version is for video devices.”…”�”}”(hj!4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M£hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j4h´M¤hjÿ3ubjV)�”}”(hX``s_crystal_freq`` sets the frequency of the crystal used to generate the clocks in Hz. An extra flags field allows device specific configuration regarding clock frequency dividers, etc. If not used, then set flags to 0. If the frequency is not supported, then -EINVAL is returned. ”h]”(j\)�”}”(hŒ``s_crystal_freq``”h]”hú)�”}”(hjB4h]”hŒs_crystal_freq”…”�”}”(hjD4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M©hj<4ubjv)�”}”(hhh]”hÞ)�”}”(hXsets the frequency of the crystal used to generate the clocks in Hz. An extra flags field allows device specific configuration regarding clock frequency dividers, etc. If not used, then set flags to 0. If the frequency is not supported, then -EINVAL is returned.”h]”hXsets the frequency of the crystal used to generate the clocks in Hz. An extra flags field allows device specific configuration regarding clock frequency dividers, etc. If not used, then set flags to 0. If the frequency is not supported, then -EINVAL is returned.”…”�”}”(hj[4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¦hjX4ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj<4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jW4h´M©hjÿ3ubjV)�”}”(hŒ:``g_std`` callback for VIDIOC_G_STD() ioctl handler code. ”h]”(j\)�”}”(hŒ ``g_std``”h]”hú)�”}”(hj|4h]”hŒg_std”…”�”}”(hj~4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjz4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M«hjv4ubjv)�”}”(hhh]”hÞ)�”}”(hŒ/callback for VIDIOC_G_STD() ioctl handler code.”h]”hŒ/callback for VIDIOC_G_STD() ioctl handler code.”…”�”}”(hj•4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‘4h´M«hj’4ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjv4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‘4h´M«hjÿ3ubjV)�”}”(hŒ:``s_std`` callback for VIDIOC_S_STD() ioctl handler code. ”h]”(j\)�”}”(hŒ ``s_std``”h]”hú)�”}”(hjµ4h]”hŒs_std”…”�”}”(hj·4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj³4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M­hj¯4ubjv)�”}”(hhh]”hÞ)�”}”(hŒ/callback for VIDIOC_S_STD() ioctl handler code.”h]”hŒ/callback for VIDIOC_S_STD() ioctl handler code.”…”�”}”(hjÎ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÊ4h´M­hjË4ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¯4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÊ4h´M­hjÿ3ubjV)�”}”(hŒc``s_std_output`` set v4l2_std_id for video OUTPUT devices. This is ignored by video input devices. ”h]”(j\)�”}”(hŒ``s_std_output``”h]”hú)�”}”(hjî4h]”hŒ s_std_output”…”�”}”(hjð4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjì4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M°hjè4ubjv)�”}”(hhh]”hÞ)�”}”(hŒQset v4l2_std_id for video OUTPUT devices. This is ignored by video input devices.”h]”hŒQset v4l2_std_id for video OUTPUT devices. This is ignored by video input devices.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¯hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjè4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j5h´M°hjÿ3ubjV)�”}”(hŒh``g_std_output`` get current standard for video OUTPUT devices. This is ignored by video input devices. ”h]”(j\)�”}”(hŒ``g_std_output``”h]”hú)�”}”(hj(5h]”hŒ g_std_output”…”�”}”(hj*5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj&5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M³hj"5ubjv)�”}”(hhh]”hÞ)�”}”(hŒVget current standard for video OUTPUT devices. This is ignored by video input devices.”h]”hŒVget current standard for video OUTPUT devices. This is ignored by video input devices.”…”�”}”(hjA5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M²hj>5ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj"5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j=5h´M³hjÿ3ubjV)�”}”(hŒ@``querystd`` callback for VIDIOC_QUERYSTD() ioctl handler code. ”h]”(j\)�”}”(hŒ ``querystd``”h]”hú)�”}”(hjb5h]”hŒquerystd”…”�”}”(hjd5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj`5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mµhj\5ubjv)�”}”(hhh]”hÞ)�”}”(hŒ2callback for VIDIOC_QUERYSTD() ioctl handler code.”h]”hŒ2callback for VIDIOC_QUERYSTD() ioctl handler code.”…”�”}”(hj{5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jw5h´Mµhjx5ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj\5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jw5h´Mµhjÿ3ubjV)�”}”(hŒ‹``g_tvnorms`` get :c:type:`v4l2_std_id` with all standards supported by the video CAPTURE device. This is ignored by video output devices. ”h]”(j\)�”}”(hŒ ``g_tvnorms``”h]”hú)�”}”(hj›5h]”hŒ g_tvnorms”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj™5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¸hj•5ubjv)�”}”(hhh]”hÞ)�”}”(hŒ|get :c:type:`v4l2_std_id` with all standards supported by the video CAPTURE device. This is ignored by video output devices.”h]”(hŒget ”…”�”}”(hj´5h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_std_id`”h]”hú)�”}”(hj¾5h]”hŒ v4l2_std_id”…”�”}”(hjÀ5h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¼5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÖjÚjŒ v4l2_std_id”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M·hj´5ubhŒc with all standards supported by the video CAPTURE device. This is ignored by video output devices.”…”�”}”(hj´5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÛ5h´M·hj±5ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj•5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j°5h´M¸hjÿ3ubjV)�”}”(hŒˆ``g_tvnorms_output`` get v4l2_std_id with all standards supported by the video OUTPUT device. This is ignored by video capture devices. ”h]”(j\)�”}”(hŒ``g_tvnorms_output``”h]”hú)�”}”(hjø5h]”hŒg_tvnorms_output”…”�”}”(hjú5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjö5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M»hjò5ubjv)�”}”(hhh]”hÞ)�”}”(hŒrget v4l2_std_id with all standards supported by the video OUTPUT device. This is ignored by video capture devices.”h]”hŒrget v4l2_std_id with all standards supported by the video OUTPUT device. This is ignored by video capture devices.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mºhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjò5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j 6h´M»hjÿ3ubjV)�”}”(hŒn``g_input_status`` get input status. Same as the status field in the :c:type:`struct v4l2_input ` ”h]”(j\)�”}”(hŒ``g_input_status``”h]”hú)�”}”(hj26h]”hŒg_input_status”…”�”}”(hj46h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj06ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¾hj,6ubjv)�”}”(hhh]”hÞ)�”}”(hŒZget input status. Same as the status field in the :c:type:`struct v4l2_input `”h]”(hŒ2get input status. Same as the status field in the ”…”�”}”(hjK6h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct v4l2_input `”h]”hú)�”}”(hjU6h]”hŒstruct v4l2_input”…”�”}”(hjW6h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjS6ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_input”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M½hjK6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jr6h´M½hjH6ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj,6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jG6h´M¾hjÿ3ubjV)�”}”(hXo``s_stream`` start (enabled == 1) or stop (enabled == 0) streaming on the sub-device. Failure on stop will remove any resources acquired in streaming start, while the error code is still returned by the driver. The caller shall track the subdev state, and shall not start or stop an already started or stopped subdev. Also see call_s_stream wrapper in v4l2-subdev.c. ”h]”(j\)�”}”(hŒ ``s_stream``”h]”hú)�”}”(hj‹6h]”hŒs_stream”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‰6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÅhj…6ubjv)�”}”(hhh]”hÞ)�”}”(hXastart (enabled == 1) or stop (enabled == 0) streaming on the sub-device. Failure on stop will remove any resources acquired in streaming start, while the error code is still returned by the driver. The caller shall track the subdev state, and shall not start or stop an already started or stopped subdev. Also see call_s_stream wrapper in v4l2-subdev.c.”h]”hXastart (enabled == 1) or stop (enabled == 0) streaming on the sub-device. Failure on stop will remove any resources acquired in streaming start, while the error code is still returned by the driver. The caller shall track the subdev state, and shall not start or stop an already started or stopped subdev. Also see call_s_stream wrapper in v4l2-subdev.c.”…”�”}”(hj¤6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhj¡6ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj…6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j 6h´MÅhjÿ3ubjV)�”}”(hŒØ``s_rx_buffer`` set a host allocated memory buffer for the subdev. The subdev can adjust **size** to a lower value and must not write more data to the buffer starting at **data** than the original value of **size**. ”h]”(j\)�”}”(hŒ``s_rx_buffer``”h]”hú)�”}”(hjÅ6h]”hŒ s_rx_buffer”…”�”}”(hjÇ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÃ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÓhj¿6ubjv)�”}”(hhh]”hÞ)�”}”(hŒÇset a host allocated memory buffer for the subdev. The subdev can adjust **size** to a lower value and must not write more data to the buffer starting at **data** than the original value of **size**.”h]”(hŒIset a host allocated memory buffer for the subdev. The subdev can adjust ”…”�”}”(hjÞ6h²hh³Nh´NubjÄ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjæ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÞ6ubhŒI to a lower value and must not write more data to the buffer starting at ”…”�”}”(hjÞ6h²hh³Nh´NubjÄ)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hjø6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÞ6ubhŒ than the original value of ”…”�”}”(hjÞ6h²hh³Nh´NubjÄ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÞ6ubhŒ.”…”�”}”(hjÞ6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÑhjÛ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¿6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÚ6h´MÓhjÿ3ubjV)�”}”(hX ``pre_streamon`` May be called before streaming is actually started, to help initialising the bus. Current usage is to set a CSI-2 transmitter to LP-11 or LP-111 mode before streaming. See :c:type:`enum v4l2_subdev_pre_streamon_flags `. ”h]”(j\)�”}”(hŒ``pre_streamon``”h]”hú)�”}”(hj57h]”hŒ pre_streamon”…”�”}”(hj77h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj37ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MØhj/7ubjv)�”}”(hhh]”hÞ)�”}”(hŒûMay be called before streaming is actually started, to help initialising the bus. Current usage is to set a CSI-2 transmitter to LP-11 or LP-111 mode before streaming. See :c:type:`enum v4l2_subdev_pre_streamon_flags `.”h]”(hŒ¬May be called before streaming is actually started, to help initialising the bus. Current usage is to set a CSI-2 transmitter to LP-11 or LP-111 mode before streaming. See ”…”�”}”(hjN7h²hh³Nh´Nubh)�”}”(hŒN:c:type:`enum v4l2_subdev_pre_streamon_flags `”h]”hú)�”}”(hjX7h]”hŒ#enum v4l2_subdev_pre_streamon_flags”…”�”}”(hjZ7h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjV7ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pre_streamon_flags”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÕhjN7ubhŒ.”…”�”}”(hjN7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ju7h´MÕhjK7ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj/7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jJ7h´MØhjÿ3ubjV)�”}”(hŒk``post_streamoff`` Called after streaming is stopped, but if and only if pre_streamon was called earlier. ”h]”(j\)�”}”(hŒ``post_streamoff``”h]”hú)�”}”(hj’7h]”hŒpost_streamoff”…”�”}”(hj”7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MáhjŒ7ubjv)�”}”(hhh]”hÞ)�”}”(hŒVCalled after streaming is stopped, but if and only if pre_streamon was called earlier.”h]”hŒVCalled after streaming is stopped, but if and only if pre_streamon was called earlier.”…”�”}”(hj«7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mßhj¨7ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŒ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j§7h´Máhjÿ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj­3ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÎ7h]”hŒ Description”…”�”}”(hjÐ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÌ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mãhj­3ubjŸ)�”}”(hXThis callback is DEPRECATED. New drivers should instead implement :c:type:`v4l2_subdev_pad_ops.enable_streams ` and :c:type:`v4l2_subdev_pad_ops.disable_streams ` operations, and use v4l2_subdev_s_stream_helper for the :c:type:`v4l2_subdev_video_ops.s_stream ` operation to support legacy users. Drivers should also not call the .s_stream() subdev operation directly, but use the v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helpers. pre_streamon shall return error if it cannot perform the operation as indicated by the flags argument. In particular, -EACCES indicates lack of support for the operation. The caller shall call post_streamoff for each successful call of pre_streamon.”h]”(hÞ)�”}”(hXhThis callback is DEPRECATED. New drivers should instead implement :c:type:`v4l2_subdev_pad_ops.enable_streams ` and :c:type:`v4l2_subdev_pad_ops.disable_streams ` operations, and use v4l2_subdev_s_stream_helper for the :c:type:`v4l2_subdev_video_ops.s_stream ` operation to support legacy users.”h]”(hŒBThis callback is DEPRECATED. New drivers should instead implement ”…”�”}”(hjè7h²hh³Nh´Nubh)�”}”(hŒB:c:type:`v4l2_subdev_pad_ops.enable_streams `”h]”hú)�”}”(hjò7h]”hŒ"v4l2_subdev_pad_ops.enable_streams”…”�”}”(hjô7h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjð7ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÅhjè7ubhŒ and ”…”�”}”(hjè7h²hh³Nh´Nubh)�”}”(hŒC:c:type:`v4l2_subdev_pad_ops.disable_streams `”h]”hú)�”}”(hj8h]”hŒ#v4l2_subdev_pad_ops.disable_streams”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³j8h´MÅhjè7ubhŒ9 operations, and use v4l2_subdev_s_stream_helper for the ”…”�”}”(hjè7h²hh³Nh´Nubh)�”}”(hŒ@:c:type:`v4l2_subdev_video_ops.s_stream `”h]”hú)�”}”(hj98h]”hŒv4l2_subdev_video_ops.s_stream”…”�”}”(hj;8h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj78ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_video_ops”uh1hh³j8h´MÅhjè7ubhŒ# operation to support legacy users.”…”�”}”(hjè7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j8h´MÅhjä7ubhÞ)�”}”(hŒ›Drivers should also not call the .s_stream() subdev operation directly, but use the v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helpers.”h]”hŒ›Drivers should also not call the .s_stream() subdev operation directly, but use the v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helpers.”…”�”}”(hj`8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MËhjä7ubhÞ)�”}”(hŒùpre_streamon shall return error if it cannot perform the operation as indicated by the flags argument. In particular, -EACCES indicates lack of support for the operation. The caller shall call post_streamoff for each successful call of pre_streamon.”h]”hŒùpre_streamon shall return error if it cannot perform the operation as indicated by the flags argument. In particular, -EACCES indicates lack of support for the operation. The caller shall call post_streamoff for each successful call of pre_streamon.”…”�”}”(hjo8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÐhjä7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j8h´MÅhj­3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_vbi_ops (C struct)”Œc.v4l2_subdev_vbi_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_vbi_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_vbi_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¤8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj 8h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MØubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²8h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj 8h²hh³j±8h´MØubj¤)�”}”(hŒv4l2_subdev_vbi_ops”h]”jª)�”}”(hjž8h]”hŒv4l2_subdev_vbi_ops”…”�”}”(hjÄ8h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÀ8ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj 8h²hh³j±8h´MØubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjœ8h²hh³j±8h´MØubah}”(h]”j—8ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j±8h´MØhj™8h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒPCallbacks used when v4l device was opened in video mode via the vbi device node.”h]”hŒPCallbacks used when v4l device was opened in video mode via the vbi device node.”…”�”}”(hjæ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Môhjã8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj™8h²hh³j±8h´MØubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jþ8jøjþ8jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Definition**:: struct v4l2_subdev_vbi_ops { int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); }; **Members** ``decode_vbi_line`` video decoders that support sliced VBI need to implement this ioctl. Field p of the :c:type:`struct v4l2_decode_vbi_line ` is set to the start of the VBI data that was generated by the decoder. The driver then parses the sliced VBI data and sets the other fields in the struct accordingly. The pointer p is updated to point to the start of the payload which can be copied verbatim into the data field of the :c:type:`struct v4l2_sliced_vbi_data `. If no valid VBI data was found, then the type field is set to 0 on return. ``s_vbi_data`` used to generate VBI signals on a video signal. :c:type:`struct v4l2_sliced_vbi_data ` is filled with the data packets that should be output. Note that if you set the line field to 0, then that VBI signal is disabled. If no valid VBI data was found, then the type field is set to 0 on return. ``g_vbi_data`` used to obtain the sliced VBI packet from a readback register. Not all video decoders support this. If no data is available because the readback register contains invalid or erroneous data ``-EIO`` is returned. Note that you must fill in the 'id' member and the 'field' member (to determine whether CC data from the first or second field should be obtained). ``g_sliced_vbi_cap`` callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler code. ``s_raw_fmt`` setup the video encoder/decoder for raw VBI. ``g_sliced_fmt`` retrieve the current sliced VBI settings. ``s_sliced_fmt`` setup the sliced VBI settings.”h]”(jŸ)�”}”(hXª**Definition**:: struct v4l2_subdev_vbi_ops { int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj 9ubhŒ:”…”�”}”(hj 9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Møhj9ubj>)�”}”(hX…struct v4l2_subdev_vbi_ops { int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); };”h]”hX…struct v4l2_subdev_vbi_ops { int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); };”…”�”}”hj'9sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Múhj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j&9h´Møhj9ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj>9h]”hŒMembers”…”�”}”(hj@9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj<9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj9ubjQ)�”}”(hhh]”(jV)�”}”(hXK``decode_vbi_line`` video decoders that support sliced VBI need to implement this ioctl. Field p of the :c:type:`struct v4l2_decode_vbi_line ` is set to the start of the VBI data that was generated by the decoder. The driver then parses the sliced VBI data and sets the other fields in the struct accordingly. The pointer p is updated to point to the start of the payload which can be copied verbatim into the data field of the :c:type:`struct v4l2_sliced_vbi_data `. If no valid VBI data was found, then the type field is set to 0 on return. ”h]”(j\)�”}”(hŒ``decode_vbi_line``”h]”hú)�”}”(hj]9h]”hŒdecode_vbi_line”…”�”}”(hj_9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÿhjW9ubjv)�”}”(hhh]”hÞ)�”}”(hX6video decoders that support sliced VBI need to implement this ioctl. Field p of the :c:type:`struct v4l2_decode_vbi_line ` is set to the start of the VBI data that was generated by the decoder. The driver then parses the sliced VBI data and sets the other fields in the struct accordingly. The pointer p is updated to point to the start of the payload which can be copied verbatim into the data field of the :c:type:`struct v4l2_sliced_vbi_data `. If no valid VBI data was found, then the type field is set to 0 on return.”h]”(hŒTvideo decoders that support sliced VBI need to implement this ioctl. Field p of the ”…”�”}”(hjv9h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`struct v4l2_decode_vbi_line `”h]”hú)�”}”(hj€9h]”hŒstruct v4l2_decode_vbi_line”…”�”}”(hj‚9h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj~9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_decode_vbi_line”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Møhjv9ubhX is set to the start of the VBI data that was generated by the decoder. The driver then parses the sliced VBI data and sets the other fields in the struct accordingly. The pointer p is updated to point to the start of the payload which can be copied verbatim into the data field of the ”…”�”}”(hjv9h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`struct v4l2_sliced_vbi_data `”h]”hú)�”}”(hj¤9h]”hŒstruct v4l2_sliced_vbi_data”…”�”}”(hj¦9h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¢9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_sliced_vbi_data”uh1hh³j�9h´Møhjv9ubhŒL. If no valid VBI data was found, then the type field is set to 0 on return.”…”�”}”(hjv9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�9h´Møhjs9ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjW9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jr9h´MÿhjT9ubjV)�”}”(hXJ``s_vbi_data`` used to generate VBI signals on a video signal. :c:type:`struct v4l2_sliced_vbi_data ` is filled with the data packets that should be output. Note that if you set the line field to 0, then that VBI signal is disabled. If no valid VBI data was found, then the type field is set to 0 on return. ”h]”(j\)�”}”(hŒ``s_vbi_data``”h]”hú)�”}”(hjÝ9h]”hŒ s_vbi_data”…”�”}”(hjß9h²hh³Nh´Nubah•}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÛ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj×9ubjv)�”}”(hhh]”hÞ)�”}”(hX:used to generate VBI signals on a video signal. :c:type:`struct v4l2_sliced_vbi_data ` is filled with the data packets that should be output. Note that if you set the line field to 0, then that VBI signal is disabled. If no valid VBI data was found, then the type field is set to 0 on return.”h]”(hŒ0used to generate VBI signals on a video signal. ”…”�”}”(hjö9h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`struct v4l2_sliced_vbi_data `”h]”hú)�”}”(hj:h]”hŒstruct v4l2_sliced_vbi_data”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjþ9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_sliced_vbi_data”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjö9ubhŒÎ is filled with the data packets that should be output. Note that if you set the line field to 0, then that VBI signal is disabled. If no valid VBI data was found, then the type field is set to 0 on return.”…”�”}”(hjö9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j:h´Mhjó9ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj×9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jò9h´MhjT9ubjV)�”}”(hXv``g_vbi_data`` used to obtain the sliced VBI packet from a readback register. Not all video decoders support this. If no data is available because the readback register contains invalid or erroneous data ``-EIO`` is returned. Note that you must fill in the 'id' member and the 'field' member (to determine whether CC data from the first or second field should be obtained). ”h]”(j\)�”}”(hŒ``g_vbi_data``”h]”hú)�”}”(hj::h]”hŒ g_vbi_data”…”�”}”(hj<:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj8:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj4:ubjv)�”}”(hhh]”hÞ)�”}”(hXfused to obtain the sliced VBI packet from a readback register. Not all video decoders support this. If no data is available because the readback register contains invalid or erroneous data ``-EIO`` is returned. Note that you must fill in the 'id' member and the 'field' member (to determine whether CC data from the first or second field should be obtained).”h]”(hŒ½used to obtain the sliced VBI packet from a readback register. Not all video decoders support this. If no data is available because the readback register contains invalid or erroneous data ”…”�”}”(hjS:h²hh³Nh´Nubhú)�”}”(hŒ``-EIO``”h]”hŒ-EIO”…”�”}”(hj[:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjS:ubhŒ© is returned. Note that you must fill in the ‘id’ member and the ‘field’ member (to determine whether CC data from the first or second field should be obtained).”…”�”}”(hjS:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjP:ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj4:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jO:h´M hjT9ubjV)�”}”(hŒP``g_sliced_vbi_cap`` callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler code. ”h]”(j\)�”}”(hŒ``g_sliced_vbi_cap``”h]”hú)�”}”(hj†:h]”hŒg_sliced_vbi_cap”…”�”}”(hjˆ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj„:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€:ubjv)�”}”(hhh]”hÞ)�”}”(hŒ:callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler code.”h]”hŒ:callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler code.”…”�”}”(hjŸ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjœ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj€:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j›:h´MhjT9ubjV)�”}”(hŒ;``s_raw_fmt`` setup the video encoder/decoder for raw VBI. ”h]”(j\)�”}”(hŒ ``s_raw_fmt``”h]”hú)�”}”(hjÀ:h]”hŒ s_raw_fmt”…”�”}”(hjÂ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¾:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjº:ubjv)�”}”(hhh]”hÞ)�”}”(hŒ,setup the video encoder/decoder for raw VBI.”h]”hŒ,setup the video encoder/decoder for raw VBI.”…”�”}”(hjÙ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÕ:h´MhjÖ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjº:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÕ:h´MhjT9ubjV)�”}”(hŒ;``g_sliced_fmt`` retrieve the current sliced VBI settings. ”h]”(j\)�”}”(hŒ``g_sliced_fmt``”h]”hú)�”}”(hjù:h]”hŒ g_sliced_fmt”…”�”}”(hjû:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj÷:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjó:ubjv)�”}”(hhh]”hÞ)�”}”(hŒ)retrieve the current sliced VBI settings.”h]”hŒ)retrieve the current sliced VBI settings.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j;h´Mhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjó:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j;h´MhjT9ubjV)�”}”(hŒ/``s_sliced_fmt`` setup the sliced VBI settings.”h]”(j\)�”}”(hŒ``s_sliced_fmt``”h]”hú)�”}”(hj2;h]”hŒ s_sliced_fmt”…”�”}”(hj4;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj0;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj,;ubjv)�”}”(hhh]”hÞ)�”}”(hŒsetup the sliced VBI settings.”h]”hŒsetup the sliced VBI settings.”…”�”}”(hjK;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjH;ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj,;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jG;h´MhjT9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ!v4l2_subdev_sensor_ops (C struct)”Œc.v4l2_subdev_sensor_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_sensor_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_sensor_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŒ;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ;h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš;h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjˆ;h²hh³j™;h´Mubj¤)�”}”(hŒv4l2_subdev_sensor_ops”h]”jª)�”}”(hj†;h]”hŒv4l2_subdev_sensor_ops”…”�”}”(hj¬;h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¨;ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjˆ;h²hh³j™;h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj„;h²hh³j™;h´Mubah}”(h]”j;ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j™;h´Mhj�;h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒv4l2-subdev sensor operations”h]”hŒv4l2-subdev sensor operations”…”�”}”(hjÎ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M!hjË;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj�;h²hh³j™;h´Mubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jæ;jøjæ;jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXH **Definition**:: struct v4l2_subdev_sensor_ops { int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); }; **Members** ``g_skip_top_lines`` number of lines at the top of the image to be skipped. This is needed for some sensors, which always corrupt several top lines of the output image, or which send their metadata in them. ``g_skip_frames`` number of frames to skip at stream start. This is needed for buggy sensors that generate faulty frames when they are turned on.”h]”(jŸ)�”}”(hŒÁ**Definition**:: struct v4l2_subdev_sensor_ops { int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjö;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjò;ubhŒ:”…”�”}”(hjò;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M%hjî;ubj>)�”}”(hŒ¦struct v4l2_subdev_sensor_ops { int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); };”h]”hŒ¦struct v4l2_subdev_sensor_ops { int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); };”…”�”}”hj<sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M'hjî;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j<h´M%hjê;ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj&<h]”hŒMembers”…”�”}”(hj(<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj$<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hjê;ubjQ)�”}”(hhh]”(jV)�”}”(hŒÏ``g_skip_top_lines`` number of lines at the top of the image to be skipped. This is needed for some sensors, which always corrupt several top lines of the output image, or which send their metadata in them. ”h]”(j\)�”}”(hŒ``g_skip_top_lines``”h]”hú)�”}”(hjE<h]”hŒg_skip_top_lines”…”�”}”(hjG<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjC<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M&hj?<ubjv)�”}”(hhh]”hÞ)�”}”(hŒ¹number of lines at the top of the image to be skipped. This is needed for some sensors, which always corrupt several top lines of the output image, or which send their metadata in them.”h]”hŒ¹number of lines at the top of the image to be skipped. This is needed for some sensors, which always corrupt several top lines of the output image, or which send their metadata in them.”…”�”}”(hj^<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M#hj[<ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj?<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jZ<h´M&hj<<ubjV)�”}”(hŒ‘``g_skip_frames`` number of frames to skip at stream start. This is needed for buggy sensors that generate faulty frames when they are turned on.”h]”(j\)�”}”(hŒ``g_skip_frames``”h]”hú)�”}”(hj<h]”hŒ g_skip_frames”…”�”}”(hj�<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj}<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M(hjy<ubjv)�”}”(hhh]”hÞ)�”}”(hŒnumber of frames to skip at stream start. This is needed for buggy sensors that generate faulty frames when they are turned on.”h]”hŒnumber of frames to skip at stream start. This is needed for buggy sensors that generate faulty frames when they are turned on.”…”�”}”(hj˜<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M'hj•<ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjy<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j”<h´M(hj<<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjê;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_ir_mode (C enum)”Œc.v4l2_subdev_ir_mode”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_ir_mode”h]”j{)�”}”(hŒenum v4l2_subdev_ir_mode”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hjÙ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ<h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M/ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç<h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÕ<h²hh³jæ<h´M/ubj¤)�”}”(hŒv4l2_subdev_ir_mode”h]”jª)�”}”(hjÓ<h]”hŒv4l2_subdev_ir_mode”…”�”}”(hjù<h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjõ<ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÕ<h²hh³jæ<h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÑ<h²hh³jæ<h´M/ubah}”(h]”jÌ<ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jæ<h´M/hjÎ<h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ"describes the type of IR supported”h]”hŒ"describes the type of IR supported”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M0hj=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÎ<h²hh³jæ<h´M/ubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷j3=jøj3=jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒX**Constants** ``V4L2_SUBDEV_IR_MODE_PULSE_WIDTH`` IR uses struct ir_raw_event records”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hj==h]”hŒ Constants”…”�”}”(hj?=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj;=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M4hj7=ubjQ)�”}”(hhh]”jV)�”}”(hŒG``V4L2_SUBDEV_IR_MODE_PULSE_WIDTH`` IR uses struct ir_raw_event records”h]”(j\)�”}”(hŒ#``V4L2_SUBDEV_IR_MODE_PULSE_WIDTH``”h]”hú)�”}”(hj\=h]”hŒV4L2_SUBDEV_IR_MODE_PULSE_WIDTH”…”�”}”(hj^=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjZ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M6hjV=ubjv)�”}”(hhh]”hÞ)�”}”(hŒ#IR uses struct ir_raw_event records”h]”hŒ#IR uses struct ir_raw_event records”…”�”}”(hju=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M7hjr=ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjV=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jq=h´M6hjS=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj7=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_ir_parameters (C struct)”Œc.v4l2_subdev_ir_parameters”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_ir_parameters”h]”j{)�”}”(hŒ struct v4l2_subdev_ir_parameters”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¶=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²=h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M<ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ=h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj²=h²hh³jÃ=h´M<ubj¤)�”}”(hŒv4l2_subdev_ir_parameters”h]”jª)�”}”(hj°=h]”hŒv4l2_subdev_ir_parameters”…”�”}”(hjÖ=h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÒ=ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj²=h²hh³jÃ=h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj®=h²hh³jÃ=h´M<ubah}”(h]”j©=ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÃ=h´M<hj«=h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒParameters for IR TX or TX”h]”hŒParameters for IR TX or TX”…”�”}”(hjø=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M9hjõ=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj«=h²hh³jÃ=h´M<ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j>jøj>jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXº **Definition**:: struct v4l2_subdev_ir_parameters { unsigned int bytes_per_data_element; enum v4l2_subdev_ir_mode mode; bool enable; bool interrupt_enable; bool shutdown; bool modulation; u32 max_pulse_width; unsigned int carrier_freq; unsigned int duty_cycle; bool invert_level; bool invert_carrier_sense; u32 noise_filter_min_width; unsigned int carrier_range_lower; unsigned int carrier_range_upper; u32 resolution; }; **Members** ``bytes_per_data_element`` bytes per data element of data in read or write call. ``mode`` IR mode as defined by :c:type:`enum v4l2_subdev_ir_mode `. ``enable`` device is active if true ``interrupt_enable`` IR interrupts are enabled if true ``shutdown`` if true: set hardware to low/no power, false: normal mode ``modulation`` if true, it uses carrier, if false: baseband ``max_pulse_width`` maximum pulse width in ns, valid only for baseband signal ``carrier_freq`` carrier frequency in Hz, valid only for modulated signal ``duty_cycle`` duty cycle percentage, valid only for modulated signal ``invert_level`` invert signal level ``invert_carrier_sense`` Send 0/space as a carrier burst. used only in TX. ``noise_filter_min_width`` min time of a valid pulse, in ns. Used only for RX. ``carrier_range_lower`` Lower carrier range, in Hz, valid only for modulated signal. Used only for RX. ``carrier_range_upper`` Upper carrier range, in Hz, valid only for modulated signal. Used only for RX. ``resolution`` The receive resolution, in ns . Used only for RX.”h]”(jŸ)�”}”(hX#**Definition**:: struct v4l2_subdev_ir_parameters { unsigned int bytes_per_data_element; enum v4l2_subdev_ir_mode mode; bool enable; bool interrupt_enable; bool shutdown; bool modulation; u32 max_pulse_width; unsigned int carrier_freq; unsigned int duty_cycle; bool invert_level; bool invert_carrier_sense; u32 noise_filter_min_width; unsigned int carrier_range_lower; unsigned int carrier_range_upper; u32 resolution; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj>ubhŒ:”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M=hj>ubj>)�”}”(hXîstruct v4l2_subdev_ir_parameters { unsigned int bytes_per_data_element; enum v4l2_subdev_ir_mode mode; bool enable; bool interrupt_enable; bool shutdown; bool modulation; u32 max_pulse_width; unsigned int carrier_freq; unsigned int duty_cycle; bool invert_level; bool invert_carrier_sense; u32 noise_filter_min_width; unsigned int carrier_range_lower; unsigned int carrier_range_upper; u32 resolution; };”h]”hXîstruct v4l2_subdev_ir_parameters { unsigned int bytes_per_data_element; enum v4l2_subdev_ir_mode mode; bool enable; bool interrupt_enable; bool shutdown; bool modulation; u32 max_pulse_width; unsigned int carrier_freq; unsigned int duty_cycle; bool invert_level; bool invert_carrier_sense; u32 noise_filter_min_width; unsigned int carrier_range_lower; unsigned int carrier_range_upper; u32 resolution; };”…”�”}”hj9>sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M?hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j8>h´M=hj>ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjP>h]”hŒMembers”…”�”}”(hjR>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjN>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MQhj>ubjQ)�”}”(hhh]”(jV)�”}”(hŒQ``bytes_per_data_element`` bytes per data element of data in read or write call. ”h]”(j\)�”}”(hŒ``bytes_per_data_element``”h]”hú)�”}”(hjo>h]”hŒbytes_per_data_element”…”�”}”(hjq>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjm>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M=hji>ubjv)�”}”(hhh]”hÞ)�”}”(hŒ5bytes per data element of data in read or write call.”h]”hŒ5bytes per data element of data in read or write call.”…”�”}”(hjˆ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M<hj…>ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhji>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j„>h´M=hjf>ubjV)�”}”(hŒY``mode`` IR mode as defined by :c:type:`enum v4l2_subdev_ir_mode `. ”h]”(j\)�”}”(hŒ``mode``”h]”hú)�”}”(hj©>h]”hŒmode”…”�”}”(hj«>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj§>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>hj£>ubjv)�”}”(hhh]”hÞ)�”}”(hŒOIR mode as defined by :c:type:`enum v4l2_subdev_ir_mode `.”h]”(hŒIR mode as defined by ”…”�”}”(hjÂ>h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`enum v4l2_subdev_ir_mode `”h]”hú)�”}”(hjÌ>h]”hŒenum v4l2_subdev_ir_mode”…”�”}”(hjÎ>h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÊ>ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ir_mode”uh1hh³j¾>h´M>hjÂ>ubhŒ.”…”�”}”(hjÂ>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¾>h´M>hj¿>ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj£>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¾>h´M>hjf>ubjV)�”}”(hŒ$``enable`` device is active if true ”h]”(j\)�”}”(hŒ ``enable``”h]”hú)�”}”(hj?h]”hŒenable”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M?hjÿ>ubjv)�”}”(hhh]”hÞ)�”}”(hŒdevice is active if true”h]”hŒdevice is active if true”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j?h´M?hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÿ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j?h´M?hjf>ubjV)�”}”(hŒ7``interrupt_enable`` IR interrupts are enabled if true ”h]”(j\)�”}”(hŒ``interrupt_enable``”h]”hú)�”}”(hj>?h]”hŒinterrupt_enable”…”�”}”(hj@?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjubjV)�”}”(hŒG``shutdown`` if true: set hardware to low/no power, false: normal mode ”h]”(j\)�”}”(hŒ ``shutdown``”h]”hú)�”}”(hjw?h]”hŒshutdown”…”�”}”(hjy?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhju?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MAhjq?ubjv)�”}”(hhh]”hÞ)�”}”(hŒ9if true: set hardware to low/no power, false: normal mode”h]”hŒ9if true: set hardware to low/no power, false: normal mode”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŒ?h´MAhj�?ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjq?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jŒ?h´MAhjf>ubjV)�”}”(hŒ<``modulation`` if true, it uses carrier, if false: baseband ”h]”(j\)�”}”(hŒ``modulation``”h]”hú)�”}”(hj°?h]”hŒ modulation”…”�”}”(hj²?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj®?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MChjª?ubjv)�”}”(hhh]”hÞ)�”}”(hŒ,if true, it uses carrier, if false: baseband”h]”hŒ,if true, it uses carrier, if false: baseband”…”�”}”(hjÉ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅ?h´MChjÆ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjª?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÅ?h´MChjf>ubjV)�”}”(hŒN``max_pulse_width`` maximum pulse width in ns, valid only for baseband signal ”h]”(j\)�”}”(hŒ``max_pulse_width``”h]”hú)�”}”(hjé?h]”hŒmax_pulse_width”…”�”}”(hjë?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjç?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MDhjã?ubjv)�”}”(hhh]”hÞ)�”}”(hŒ9maximum pulse width in ns, valid only for baseband signal”h]”hŒ9maximum pulse width in ns, valid only for baseband signal”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jþ?h´MDhjÿ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjã?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jþ?h´MDhjf>ubjV)�”}”(hŒJ``carrier_freq`` carrier frequency in Hz, valid only for modulated signal ”h]”(j\)�”}”(hŒ``carrier_freq``”h]”hú)�”}”(hj"@h]”hŒ carrier_freq”…”�”}”(hj$@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj @ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MEhj@ubjv)�”}”(hhh]”hÞ)�”}”(hŒ8carrier frequency in Hz, valid only for modulated signal”h]”hŒ8carrier frequency in Hz, valid only for modulated signal”…”�”}”(hj;@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j7@h´MEhj8@ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j7@h´MEhjf>ubjV)�”}”(hŒF``duty_cycle`` duty cycle percentage, valid only for modulated signal ”h]”(j\)�”}”(hŒ``duty_cycle``”h]”hú)�”}”(hj[@h]”hŒ duty_cycle”…”�”}”(hj]@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjY@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MFhjU@ubjv)�”}”(hhh]”hÞ)�”}”(hŒ6duty cycle percentage, valid only for modulated signal”h]”hŒ6duty cycle percentage, valid only for modulated signal”…”�”}”(hjt@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jp@h´MFhjq@ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjU@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jp@h´MFhjf>ubjV)�”}”(hŒ%``invert_level`` invert signal level ”h]”(j\)�”}”(hŒ``invert_level``”h]”hú)�”}”(hj”@h]”hŒ invert_level”…”�”}”(hj–@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj’@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MGhjŽ@ubjv)�”}”(hhh]”hÞ)�”}”(hŒinvert signal level”h]”hŒinvert signal level”…”�”}”(hj­@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©@h´MGhjª@ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŽ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j©@h´MGhjf>ubjV)�”}”(hŒK``invert_carrier_sense`` Send 0/space as a carrier burst. used only in TX. ”h]”(j\)�”}”(hŒ``invert_carrier_sense``”h]”hú)�”}”(hjÍ@h]”hŒinvert_carrier_sense”…”�”}”(hjÏ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjË@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MIhjÇ@ubjv)�”}”(hhh]”hÞ)�”}”(hŒ1Send 0/space as a carrier burst. used only in TX.”h]”hŒ1Send 0/space as a carrier burst. used only in TX.”…”�”}”(hjæ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jâ@h´MIhjã@ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÇ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jâ@h´MIhjf>ubjV)�”}”(hŒO``noise_filter_min_width`` min time of a valid pulse, in ns. Used only for RX. ”h]”(j\)�”}”(hŒ``noise_filter_min_width``”h]”hú)�”}”(hjAh]”hŒnoise_filter_min_width”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MKhjAubjv)�”}”(hhh]”hÞ)�”}”(hŒ3min time of a valid pulse, in ns. Used only for RX.”h]”hŒ3min time of a valid pulse, in ns. Used only for RX.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jAh´MKhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jAh´MKhjf>ubjV)�”}”(hŒg``carrier_range_lower`` Lower carrier range, in Hz, valid only for modulated signal. Used only for RX. ”h]”(j\)�”}”(hŒ``carrier_range_lower``”h]”hú)�”}”(hj?Ah]”hŒcarrier_range_lower”…”�”}”(hjAAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj=Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MMhj9Aubjv)�”}”(hhh]”hÞ)�”}”(hŒNLower carrier range, in Hz, valid only for modulated signal. Used only for RX.”h]”hŒNLower carrier range, in Hz, valid only for modulated signal. Used only for RX.”…”�”}”(hjXAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MLhjUAubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj9Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jTAh´MMhjf>ubjV)�”}”(hŒg``carrier_range_upper`` Upper carrier range, in Hz, valid only for modulated signal. Used only for RX. ”h]”(j\)�”}”(hŒ``carrier_range_upper``”h]”hú)�”}”(hjyAh]”hŒcarrier_range_upper”…”�”}”(hj{Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjwAubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MOhjsAubjv)�”}”(hhh]”hÞ)�”}”(hŒNUpper carrier range, in Hz, valid only for modulated signal. Used only for RX.”h]”hŒNUpper carrier range, in Hz, valid only for modulated signal. Used only for RX.”…”�”}”(hj’Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MNhj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjsAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jŽAh´MOhjf>ubjV)�”}”(hŒ@``resolution`` The receive resolution, in ns . Used only for RX.”h]”(j\)�”}”(hŒ``resolution``”h]”hú)�”}”(hj³Ah]”hŒ resolution”…”�”}”(hjµAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj±Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MOhj­Aubjv)�”}”(hhh]”hÞ)�”}”(hŒ1The receive resolution, in ns . Used only for RX.”h]”hŒ1The receive resolution, in ns . Used only for RX.”…”�”}”(hjÌAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MPhjÉAubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj­Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÈAh´MOhjf>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_ir_ops (C struct)”Œc.v4l2_subdev_ir_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_ir_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_ir_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Bh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MVubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj Bh²hh³jBh´MVubj¤)�”}”(hŒv4l2_subdev_ir_ops”h]”jª)�”}”(hjBh]”hŒv4l2_subdev_ir_ops”…”�”}”(hj-Bh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj)Bubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj Bh²hh³jBh´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjBh²hh³jBh´MVubah}”(h]”jBah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jBh´MVhjBh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒoperations for IR subdevices”h]”hŒoperations for IR subdevices”…”�”}”(hjOBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MjhjLBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjBh²hh³jBh´MVubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jgBjøjgBjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXë **Definition**:: struct v4l2_subdev_ir_ops { int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*rx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*rx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*tx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); }; **Members** ``rx_read`` Reads received codes or pulse width data. The semantics are similar to a non-blocking read() call. ``rx_g_parameters`` Get the current operating parameters and state of the IR receiver. ``rx_s_parameters`` Set the current operating parameters and state of the IR receiver. It is recommended to call [rt]x_g_parameters first to fill out the current state, and only change the fields that need to be changed. Upon return, the actual device operating parameters and state will be returned. Note that hardware limitations may prevent the actual settings from matching the requested settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz was requested. An exception is when the shutdown parameter is true. The last used operational parameters will be returned, but the actual state of the hardware be different to minimize power consumption and processing when shutdown is true. ``tx_write`` Writes codes or pulse width data for transmission. The semantics are similar to a non-blocking write() call. ``tx_g_parameters`` Get the current operating parameters and state of the IR transmitter. ``tx_s_parameters`` Set the current operating parameters and state of the IR transmitter. It is recommended to call [rt]x_g_parameters first to fill out the current state, and only change the fields that need to be changed. Upon return, the actual device operating parameters and state will be returned. Note that hardware limitations may prevent the actual settings from matching the requested settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz was requested. An exception is when the shutdown parameter is true. The last used operational parameters will be returned, but the actual state of the hardware be different to minimize power consumption and processing when shutdown is true.”h]”(jŸ)�”}”(hXh**Definition**:: struct v4l2_subdev_ir_ops { int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*rx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*rx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*tx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjwBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjsBubhŒ:”…”�”}”(hjsBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MnhjoBubj>)�”}”(hXEstruct v4l2_subdev_ir_ops { int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*rx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*rx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*tx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); };”h]”hXEstruct v4l2_subdev_ir_ops { int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*rx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*rx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, ssize_t *num); int (*tx_g_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); int (*tx_s_parameters)(struct v4l2_subdev *sd, struct v4l2_subdev_ir_parameters *params); };”…”�”}”hj�Bsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MphjoBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j�Bh´MnhjkBubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj§Bh]”hŒMembers”…”�”}”(hj©Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj¥Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MyhjkBubjQ)�”}”(hhh]”(jV)�”}”(hŒo``rx_read`` Reads received codes or pulse width data. The semantics are similar to a non-blocking read() call. ”h]”(j\)�”}”(hŒ ``rx_read``”h]”hú)�”}”(hjÆBh]”hŒrx_read”…”�”}”(hjÈBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄBubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MnhjÀBubjv)�”}”(hhh]”hÞ)�”}”(hŒbReads received codes or pulse width data. The semantics are similar to a non-blocking read() call.”h]”hŒbReads received codes or pulse width data. The semantics are similar to a non-blocking read() call.”…”�”}”(hjßBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MmhjÜBubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÀBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÛBh´Mnhj½BubjV)�”}”(hŒW``rx_g_parameters`` Get the current operating parameters and state of the IR receiver. ”h]”(j\)�”}”(hŒ``rx_g_parameters``”h]”hú)�”}”(hjCh]”hŒrx_g_parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjþBubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MphjúBubjv)�”}”(hhh]”hÞ)�”}”(hŒBGet the current operating parameters and state of the IR receiver.”h]”hŒBGet the current operating parameters and state of the IR receiver.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MohjCubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjúBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jCh´Mphj½BubjV)�”}”(hXÃ``rx_s_parameters`` Set the current operating parameters and state of the IR receiver. It is recommended to call [rt]x_g_parameters first to fill out the current state, and only change the fields that need to be changed. Upon return, the actual device operating parameters and state will be returned. Note that hardware limitations may prevent the actual settings from matching the requested settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz was requested. An exception is when the shutdown parameter is true. The last used operational parameters will be returned, but the actual state of the hardware be different to minimize power consumption and processing when shutdown is true. ”h]”(j\)�”}”(hŒ``rx_s_parameters``”h]”hú)�”}”(hj:Ch]”hŒrx_s_parameters”…”�”}”(hjDh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPDh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj>Dh²hh³jODh´M‘ubj¤)�”}”(hŒv4l2_subdev_pad_config”h]”jª)�”}”(hjDh²hh³jODh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj:Dh²hh³jODh´M‘ubah}”(h]”j5Dah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jODh´M‘hj7Dh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ(Used for storing subdev pad information.”h]”hŒ(Used for storing subdev pad information.”…”�”}”(hj„Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¡hj�Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj7Dh²hh³jODh´M‘ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jœDjøjœDjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXÜ **Definition**:: struct v4l2_subdev_pad_config { struct v4l2_mbus_framefmt format; struct v4l2_rect crop; struct v4l2_rect compose; struct v4l2_fract interval; }; **Members** ``format`` :c:type:`struct v4l2_mbus_framefmt ` ``crop`` :c:type:`struct v4l2_rect ` to be used for crop ``compose`` :c:type:`struct v4l2_rect ` to be used for compose ``interval`` frame interval”h]”(jŸ)�”}”(hŒÈ**Definition**:: struct v4l2_subdev_pad_config { struct v4l2_mbus_framefmt format; struct v4l2_rect crop; struct v4l2_rect compose; struct v4l2_fract interval; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¬Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj¨DubhŒ:”…”�”}”(hj¨Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥hj¤Dubj>)�”}”(hŒ©struct v4l2_subdev_pad_config { struct v4l2_mbus_framefmt format; struct v4l2_rect crop; struct v4l2_rect compose; struct v4l2_fract interval; };”h]”hŒ©struct v4l2_subdev_pad_config { struct v4l2_mbus_framefmt format; struct v4l2_rect crop; struct v4l2_rect compose; struct v4l2_fract interval; };”…”�”}”hjÅDsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M§hj¤Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÄDh´M¥hj DubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjÜDh]”hŒMembers”…”�”}”(hjÞDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÚDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M®hj DubjQ)�”}”(hhh]”(jV)�”}”(hŒD``format`` :c:type:`struct v4l2_mbus_framefmt ` ”h]”(j\)�”}”(hŒ ``format``”h]”hú)�”}”(hjûDh]”hŒformat”…”�”}”(hjýDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjùDubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¤hjõDubjv)�”}”(hhh]”hÞ)�”}”(hŒ8:c:type:`struct v4l2_mbus_framefmt `”h]”h)�”}”(hjEh]”hú)�”}”(hjEh]”hŒstruct v4l2_mbus_framefmt”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_framefmt”uh1hh³jEh´M¤hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jEh´M¤hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjõDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jEh´M¤hjòDubjV)�”}”(hŒD``crop`` :c:type:`struct v4l2_rect ` to be used for crop ”h]”(j\)�”}”(hŒ``crop``”h]”hú)�”}”(hjNEh]”hŒcrop”…”�”}”(hjPEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjLEubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥hjHEubjv)�”}”(hhh]”hÞ)�”}”(hŒ::c:type:`struct v4l2_rect ` to be used for crop”h]”(h)�”}”(hŒ&:c:type:`struct v4l2_rect `”h]”hú)�”}”(hjmEh]”hŒstruct v4l2_rect”…”�”}”(hjoEh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjkEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_rect”uh1hh³jcEh´M¥hjgEubhŒ to be used for crop”…”�”}”(hjgEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jcEh´M¥hjdEubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjHEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jcEh´M¥hjòDubjV)�”}”(hŒJ``compose`` :c:type:`struct v4l2_rect ` to be used for compose ”h]”(j\)�”}”(hŒ ``compose``”h]”hú)�”}”(hj¦Eh]”hŒcompose”…”�”}”(hj¨Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¤Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¦hj Eubjv)�”}”(hhh]”hÞ)�”}”(hŒ=:c:type:`struct v4l2_rect ` to be used for compose”h]”(h)�”}”(hŒ&:c:type:`struct v4l2_rect `”h]”hú)�”}”(hjÅEh]”hŒstruct v4l2_rect”…”�”}”(hjÇEh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÃEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_rect”uh1hh³j»Eh´M¦hj¿EubhŒ to be used for compose”…”�”}”(hj¿Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j»Eh´M¦hj¼Eubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j»Eh´M¦hjòDubjV)�”}”(hŒ``interval`` frame interval”h]”(j\)�”}”(hŒ ``interval``”h]”hú)�”}”(hjþEh]”hŒinterval”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjüEubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¦hjøEubjv)�”}”(hhh]”hÞ)�”}”(hŒframe interval”h]”hŒframe interval”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M§hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjøEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jFh´M¦hjòDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%v4l2_subdev_stream_configs (C struct)”Œc.v4l2_subdev_stream_configs”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_stream_configs”h]”j{)�”}”(hŒ!struct v4l2_subdev_stream_configs”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjXFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTFh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M­ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfFh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjTFh²hh³jeFh´M­ubj¤)�”}”(hŒv4l2_subdev_stream_configs”h]”jª)�”}”(hjRFh]”hŒv4l2_subdev_stream_configs”…”�”}”(hjxFh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjtFubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjTFh²hh³jeFh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjPFh²hh³jeFh´M­ubah}”(h]”jKFah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jeFh´M­hjMFh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒA collection of stream configs.”h]”hŒA collection of stream configs.”…”�”}”(hjšFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M°hj—Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjMFh²hh³jeFh´M­ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j²Fjøj²Fjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX8 **Definition**:: struct v4l2_subdev_stream_configs { u32 num_configs; struct v4l2_subdev_stream_config *configs; }; **Members** ``num_configs`` number of entries in **config**. ``configs`` an array of :c:type:`struct v4l2_subdev_stream_configs `.”h]”(jŸ)�”}”(hŒ‰**Definition**:: struct v4l2_subdev_stream_configs { u32 num_configs; struct v4l2_subdev_stream_config *configs; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÂFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj¾FubhŒ:”…”�”}”(hj¾Fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M´hjºFubj>)�”}”(hŒnstruct v4l2_subdev_stream_configs { u32 num_configs; struct v4l2_subdev_stream_config *configs; };”h]”hŒnstruct v4l2_subdev_stream_configs { u32 num_configs; struct v4l2_subdev_stream_config *configs; };”…”�”}”hjÛFsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¶hjºFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÚFh´M´hj¶FubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjòFh]”hŒMembers”…”�”}”(hjôFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjðFubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M»hj¶FubjQ)�”}”(hhh]”(jV)�”}”(hŒ1``num_configs`` number of entries in **config**. ”h]”(j\)�”}”(hŒ``num_configs``”h]”hú)�”}”(hjGh]”hŒ num_configs”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M³hj Gubjv)�”}”(hhh]”hÞ)�”}”(hŒ number of entries in **config**.”h]”(hŒnumber of entries in ”…”�”}”(hj*Gh²hh³Nh´NubjÄ)�”}”(hŒ **config**”h]”hŒconfig”…”�”}”(hj2Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj*GubhŒ.”…”�”}”(hj*Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&Gh´M³hj'Gubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j&Gh´M³hjGubjV)�”}”(hŒa``configs`` an array of :c:type:`struct v4l2_subdev_stream_configs `.”h]”(j\)�”}”(hŒ ``configs``”h]”hú)�”}”(hj\Gh]”hŒconfigs”…”�”}”(hj^Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjZGubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M³hjVGubjv)�”}”(hhh]”hÞ)�”}”(hŒUan array of :c:type:`struct v4l2_subdev_stream_configs `.”h]”(hŒ an array of ”…”�”}”(hjuGh²hh³Nh´Nubh)�”}”(hŒH:c:type:`struct v4l2_subdev_stream_configs `”h]”hú)�”}”(hjGh]”hŒ!struct v4l2_subdev_stream_configs”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj}Gubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_stream_configs”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M´hjuGubhŒ.”…”�”}”(hjuGh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jœGh´M´hjrGubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjVGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jqGh´M³hjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj¶Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_krouting (C struct)”Œc.v4l2_subdev_krouting”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_krouting”h]”j{)�”}”(hŒstruct v4l2_subdev_krouting”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÙGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕGh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mºubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçGh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÕGh²hh³jæGh´Mºubj¤)�”}”(hŒv4l2_subdev_krouting”h]”jª)�”}”(hjÓGh]”hŒv4l2_subdev_krouting”…”�”}”(hjùGh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjõGubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÕGh²hh³jæGh´Mºubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÑGh²hh³jæGh´Mºubah}”(h]”jÌGah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jæGh´MºhjÎGh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒsubdev routing table”h]”hŒsubdev routing table”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M»hjHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÎGh²hh³jæGh´Mºubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j3Hjøj3Hjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¢ **Definition**:: struct v4l2_subdev_krouting { unsigned int len_routes; unsigned int num_routes; struct v4l2_subdev_route *routes; }; **Members** ``len_routes`` length of routes array, in routes ``num_routes`` number of routes ``routes`` :c:type:`struct v4l2_subdev_route ` **Description** This structure contains the routing table for a subdev.”h]”(jŸ)�”}”(hŒ£**Definition**:: struct v4l2_subdev_krouting { unsigned int len_routes; unsigned int num_routes; struct v4l2_subdev_route *routes; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjCHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj?HubhŒ:”…”�”}”(hj?Hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¿hj;Hubj>)�”}”(hŒ†struct v4l2_subdev_krouting { unsigned int len_routes; unsigned int num_routes; struct v4l2_subdev_route *routes; };”h]”hŒ†struct v4l2_subdev_krouting { unsigned int len_routes; unsigned int num_routes; struct v4l2_subdev_route *routes; };”…”�”}”hj\Hsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhj;Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j[Hh´M¿hj7HubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjsHh]”hŒMembers”…”�”}”(hjuHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjqHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÇhj7HubjQ)�”}”(hhh]”(jV)�”}”(hŒ1``len_routes`` length of routes array, in routes ”h]”(j\)�”}”(hŒ``len_routes``”h]”hú)�”}”(hj’Hh]”hŒ len_routes”…”�”}”(hj”Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¾hjŒHubjv)�”}”(hhh]”hÞ)�”}”(hŒ!length of routes array, in routes”h]”hŒ!length of routes array, in routes”…”�”}”(hj«Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j§Hh´M¾hj¨Hubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŒHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j§Hh´M¾hj‰HubjV)�”}”(hŒ ``num_routes`` number of routes ”h]”(j\)�”}”(hŒ``num_routes``”h]”hú)�”}”(hjËHh]”hŒ num_routes”…”�”}”(hjÍHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÉHubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¿hjÅHubjv)�”}”(hhh]”hÞ)�”}”(hŒnumber of routes”h]”hŒnumber of routes”…”�”}”(hjäHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jàHh´M¿hjáHubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÅHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jàHh´M¿hj‰HubjV)�”}”(hŒC``routes`` :c:type:`struct v4l2_subdev_route ` ”h]”(j\)�”}”(hŒ ``routes``”h]”hú)�”}”(hjIh]”hŒroutes”…”�”}”(h•jIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhjþHubjv)�”}”(hhh]”hÞ)�”}”(hŒ6:c:type:`struct v4l2_subdev_route `”h]”h)�”}”(hjIh]”hú)�”}”(hjIh]”hŒstruct v4l2_subdev_route”…”�”}”(hj$Ih²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj!Iubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_route”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j?Ih´MÀhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjþHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jIh´MÁhj‰Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj7HubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjZIh]”hŒ Description”…”�”}”(hj\Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjXIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÃhj7HubhÞ)�”}”(hŒ7This structure contains the routing table for a subdev.”h]”hŒ7This structure contains the routing table for a subdev.”…”�”}”(hjpIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhj7Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_state (C struct)”Œc.v4l2_subdev_state”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_state”h]”j{)�”}”(hŒstruct v4l2_subdev_state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŸIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›Ih²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÅubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Ih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj›Ih²hh³j¬Ih´MÅubj¤)�”}”(hŒv4l2_subdev_state”h]”jª)�”}”(hj™Ih]”hŒv4l2_subdev_state”…”�”}”(hj¿Ih²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj»Iubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj›Ih²hh³j¬Ih´MÅubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj—Ih²hh³j¬Ih´MÅubah}”(h]”j’Iah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¬Ih´MÅhj”Ih²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ*Used for storing subdev state information.”h]”hŒ*Used for storing subdev state information.”…”�”}”(hjáIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÊhjÞIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj”Ih²hh³j¬Ih´MÅubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jùIjøjùIjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXw **Definition**:: struct v4l2_subdev_state { struct mutex _lock; struct mutex *lock; struct v4l2_subdev *sd; struct v4l2_subdev_pad_config *pads; struct v4l2_subdev_krouting routing; struct v4l2_subdev_stream_configs stream_configs; }; **Members** ``_lock`` default for 'lock' ``lock`` mutex for the state. May be replaced by the user. ``sd`` the sub-device which the state is related to ``pads`` :c:type:`struct v4l2_subdev_pad_config ` array ``routing`` routing table for the subdev ``stream_configs`` stream configurations (only for V4L2_SUBDEV_FL_STREAMS) **Description** This structure only needs to be passed to the pad op if the 'which' field of the main argument is set to ``V4L2_SUBDEV_FORMAT_TRY``. For ``V4L2_SUBDEV_FORMAT_ACTIVE`` it is safe to pass ``NULL``.”h]”(jŸ)�”}”(hX **Definition**:: struct v4l2_subdev_state { struct mutex _lock; struct mutex *lock; struct v4l2_subdev *sd; struct v4l2_subdev_pad_config *pads; struct v4l2_subdev_krouting routing; struct v4l2_subdev_stream_configs stream_configs; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjJubhŒ:”…”�”}”(hjJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÎhjJubj>)�”}”(hŒýstruct v4l2_subdev_state { struct mutex _lock; struct mutex *lock; struct v4l2_subdev *sd; struct v4l2_subdev_pad_config *pads; struct v4l2_subdev_krouting routing; struct v4l2_subdev_stream_configs stream_configs; };”h]”hŒýstruct v4l2_subdev_state { struct mutex _lock; struct mutex *lock; struct v4l2_subdev *sd; struct v4l2_subdev_pad_config *pads; struct v4l2_subdev_krouting routing; struct v4l2_subdev_stream_configs stream_configs; };”…”�”}”hj"Jsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÐhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j!Jh´MÎhjýIubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj9Jh]”hŒMembers”…”�”}”(hj;Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj7Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÙhjýIubjQ)�”}”(hhh]”(jV)�”}”(hŒ``_lock`` default for 'lock' ”h]”(j\)�”}”(hŒ ``_lock``”h]”hú)�”}”(hjXJh]”hŒ_lock”…”�”}”(hjZJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjVJubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÍhjRJubjv)�”}”(hhh]”hÞ)�”}”(hŒdefault for 'lock'”h]”hŒdefault for ‘lock’”…”�”}”(hjqJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jmJh´MÍhjnJubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjRJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jmJh´MÍhjOJubjV)�”}”(hŒ;``lock`` mutex for the state. May be replaced by the user. ”h]”(j\)�”}”(hŒ``lock``”h]”hú)�”}”(hj‘Jh]”hŒlock”…”�”}”(hj“Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÎhj‹Jubjv)�”}”(hhh]”hÞ)�”}”(hŒ1mutex for the state. May be replaced by the user.”h]”hŒ1mutex for the state. May be replaced by the user.”…”�”}”(hjªJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¦Jh´MÎhj§Jubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‹Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¦Jh´MÎhjOJubjV)�”}”(hŒ4``sd`` the sub-device which the state is related to ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hjÊJh]”hŒsd”…”�”}”(hjÌJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÈJubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÏhjÄJubjv)�”}”(hhh]”hÞ)�”}”(hŒ,the sub-device which the state is related to”h]”hŒ,the sub-device which the state is related to”…”�”}”(hjãJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jßJh´MÏhjàJubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÄJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jßJh´MÏhjOJubjV)�”}”(hŒP``pads`` :c:type:`struct v4l2_subdev_pad_config ` array ”h]”(j\)�”}”(hŒ``pads``”h]”hú)�”}”(hjKh]”hŒpads”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÐhjýJubjv)�”}”(hhh]”hÞ)�”}”(hŒF:c:type:`struct v4l2_subdev_pad_config ` array”h]”(h)�”}”(hŒ@:c:type:`struct v4l2_subdev_pad_config `”h]”hú)�”}”(hj"Kh]”hŒstruct v4l2_subdev_pad_config”…”�”}”(hj$Kh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj Kubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_config”uh1hh³jKh´MÐhjKubhŒ array”…”�”}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jKh´MÐhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjýJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jKh´MÐhjOJubjV)�”}”(hŒ)``routing`` routing table for the subdev ”h]”(j\)�”}”(hŒ ``routing``”h]”hú)�”}”(hj[Kh]”hŒrouting”…”�”}”(hj]Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjYKubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÑhjUKubjv)�”}”(hhh]”hÞ)�”}”(hŒrouting table for the subdev”h]”hŒrouting table for the subdev”…”�”}”(hjtKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jpKh´MÑhjqKubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjUKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jpKh´MÑhjOJubjV)�”}”(hŒL``stream_configs`` stream configurations (only for V4L2_SUBDEV_FL_STREAMS) ”h]”(j\)�”}”(hŒ``stream_configs``”h]”hú)�”}”(hj”Kh]”hŒstream_configs”…”�”}”(hj–Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj’Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÓhjŽKubjv)�”}”(hhh]”hÞ)�”}”(hŒ7stream configurations (only for V4L2_SUBDEV_FL_STREAMS)”h]”hŒ7stream configurations (only for V4L2_SUBDEV_FL_STREAMS)”…”�”}”(hj­Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÒhjªKubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŽKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j©Kh´MÓhjOJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjýIubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÐKh]”hŒ Description”…”�”}”(hjÒKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÎKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÕhjýIubhÞ)�”}”(hŒÃThis structure only needs to be passed to the pad op if the 'which' field of the main argument is set to ``V4L2_SUBDEV_FORMAT_TRY``. For ``V4L2_SUBDEV_FORMAT_ACTIVE`` it is safe to pass ``NULL``.”h]”(hŒmThis structure only needs to be passed to the pad op if the ‘which’ field of the main argument is set to ”…”�”}”(hjæKh²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FORMAT_TRY``”h]”hŒV4L2_SUBDEV_FORMAT_TRY”…”�”}”(hjîKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjæKubhŒ. For ”…”�”}”(hjæKh²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FORMAT_ACTIVE``”h]”hŒV4L2_SUBDEV_FORMAT_ACTIVE”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjæKubhŒ it is safe to pass ”…”�”}”(hjæKh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjæKubhŒ.”…”�”}”(hjæKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÒhjýIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_pad_ops (C struct)”Œc.v4l2_subdev_pad_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_pad_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_pad_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjKLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGLh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÙubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYLh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjGLh²hh³jXLh´MÙubj¤)�”}”(hŒv4l2_subdev_pad_ops”h]”jª)�”}”(hjELh]”hŒv4l2_subdev_pad_ops”…”�”}”(hjkLh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjgLubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjGLh²hh³jXLh´MÙubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjCLh²hh³jXLh´MÙubah}”(h]”j>Lah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jXLh´MÙhj@Lh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ v4l2-subdev pad level operations”h]”hŒ v4l2-subdev pad level operations”…”�”}”(hj�Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MâhjŠLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj@Lh²hh³jXLh´MÙubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j¥Ljøj¥Ljù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXÝ **Definition**:: struct v4l2_subdev_pad_ops { int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_mbus_code_enum *code); int (*enum_frame_size)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_size_enum *fse); int (*enum_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval_enum *fie); int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*get_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*set_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*s_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*g_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*query_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*dv_timings_cap)(struct v4l2_subdev *sd, struct v4l2_dv_timings_cap *cap); int (*enum_dv_timings)(struct v4l2_subdev *sd, struct v4l2_enum_dv_timings *timings); #ifdef CONFIG_MEDIA_CONTROLLER; int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, struct v4l2_subdev_format *source_fmt, struct v4l2_subdev_format *sink_fmt); #endif ; int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config); int (*set_routing)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, enum v4l2_subdev_format_whence which, struct v4l2_subdev_krouting *route); int (*enable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); int (*disable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); }; **Members** ``enum_mbus_code`` callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler code. ``enum_frame_size`` callback for VIDIOC_SUBDEV_ENUM_FRAME_SIZE() ioctl handler code. ``enum_frame_interval`` callback for VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL() ioctl handler code. ``get_fmt`` callback for VIDIOC_SUBDEV_G_FMT() ioctl handler code. ``set_fmt`` callback for VIDIOC_SUBDEV_S_FMT() ioctl handler code. ``get_selection`` callback for VIDIOC_SUBDEV_G_SELECTION() ioctl handler code. ``set_selection`` callback for VIDIOC_SUBDEV_S_SELECTION() ioctl handler code. ``get_frame_interval`` callback for VIDIOC_SUBDEV_G_FRAME_INTERVAL() ioctl handler code. ``set_frame_interval`` callback for VIDIOC_SUBDEV_S_FRAME_INTERVAL() ioctl handler code. ``get_edid`` callback for VIDIOC_SUBDEV_G_EDID() ioctl handler code. ``set_edid`` callback for VIDIOC_SUBDEV_S_EDID() ioctl handler code. ``s_dv_timings`` Set custom dv timings in the sub device. This is used when sub device is capable of setting detailed timing information in the hardware to generate/detect the video signal. ``g_dv_timings`` Get custom dv timings in the sub device. ``query_dv_timings`` callback for VIDIOC_QUERY_DV_TIMINGS() ioctl handler code. ``dv_timings_cap`` callback for VIDIOC_SUBDEV_DV_TIMINGS_CAP() ioctl handler code. ``enum_dv_timings`` callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler code. ``link_validate`` used by the media controller code to check if the links that belongs to a pipeline can be used for stream. ``get_frame_desc`` get the current low level media bus frame parameters. ``set_frame_desc`` set the low level media bus frame parameters, **fd** array may be adjusted by the subdev driver to device capabilities. ``get_mbus_config`` get the media bus configuration of a remote sub-device. The media bus configuration is usually retrieved from the firmware interface at sub-device probe time, immediately applied to the hardware and eventually adjusted by the driver. Remote sub-devices (usually video receivers) shall use this operation to query the transmitting end bus configuration in order to adjust their own one accordingly. Callers should make sure they get the most up-to-date as possible configuration from the remote end, likely calling this operation as close as possible to stream on time. The operation shall fail if the pad index it has been called on is not valid or in case of unrecoverable failures. The config argument has been memset to 0 just before calling the op. ``set_routing`` Enable or disable data connection routes described in the subdevice routing table. Subdevs that implement this operation must set the V4L2_SUBDEV_FL_STREAMS flag. ``enable_streams`` Enable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_enable_streams() instead. ``disable_streams`` Disable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_disable_streams() instead. **Description** Drivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument. Drivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”h]”(jŸ)�”}”(hX **Definition**:: struct v4l2_subdev_pad_ops { int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_mbus_code_enum *code); int (*enum_frame_size)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_size_enum *fse); int (*enum_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval_enum *fie); int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*get_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*set_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*s_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*g_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*query_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*dv_timings_cap)(struct v4l2_subdev *sd, struct v4l2_dv_timings_cap *cap); int (*enum_dv_timings)(struct v4l2_subdev *sd, struct v4l2_enum_dv_timings *timings); #ifdef CONFIG_MEDIA_CONTROLLER; int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, struct v4l2_subdev_format *source_fmt, struct v4l2_subdev_format *sink_fmt); #endif ; int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config); int (*set_routing)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, enum v4l2_subdev_format_whence which, struct v4l2_subdev_krouting *route); int (*enable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); int (*disable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjµLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj±LubhŒ:”…”�”}”(hj±Lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhj­Lubj>)�”}”(hXy struct v4l2_subdev_pad_ops { int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_mbus_code_enum *code); int (*enum_frame_size)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_size_enum *fse); int (*enum_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval_enum *fie); int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*get_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*set_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*s_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*g_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*query_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*dv_timings_cap)(struct v4l2_subdev *sd, struct v4l2_dv_timings_cap *cap); int (*enum_dv_timings)(struct v4l2_subdev *sd, struct v4l2_enum_dv_timings *timings); #ifdef CONFIG_MEDIA_CONTROLLER; int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, struct v4l2_subdev_format *source_fmt, struct v4l2_subdev_format *sink_fmt); #endif ; int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config); int (*set_routing)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, enum v4l2_subdev_format_whence which, struct v4l2_subdev_krouting *route); int (*enable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); int (*disable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); };”h]”hXy struct v4l2_subdev_pad_ops { int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_mbus_code_enum *code); int (*enum_frame_size)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_size_enum *fse); int (*enum_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval_enum *fie); int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format); int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel); int (*get_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*set_frame_interval)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *interval); int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); int (*s_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*g_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*query_dv_timings)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_dv_timings *timings); int (*dv_timings_cap)(struct v4l2_subdev *sd, struct v4l2_dv_timings_cap *cap); int (*enum_dv_timings)(struct v4l2_subdev *sd, struct v4l2_enum_dv_timings *timings); #ifdef CONFIG_MEDIA_CONTROLLER; int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, struct v4l2_subdev_format *source_fmt, struct v4l2_subdev_format *sink_fmt); #endif ; int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd); int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config); int (*set_routing)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, enum v4l2_subdev_format_whence which, struct v4l2_subdev_krouting *route); int (*enable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); int (*disable_streams)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, u32 pad, u64 streams_mask); };”…”�”}”hjÎLsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mèhj­Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÍLh´Mæhj©LubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjåLh]”hŒMembers”…”�”}”(hjçLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjãLubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj©LubjQ)�”}”(hhh]”(jV)�”}”(hŒS``enum_mbus_code`` callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler code. ”h]”(j\)�”}”(hŒ``enum_mbus_code``”h]”hú)�”}”(hjMh]”hŒenum_mbus_code”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MæhjþLubjv)�”}”(hhh]”hÞ)�”}”(hŒ?callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler code.”h]”hŒ?callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler code.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MåhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjþLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jMh´MæhjûLubjV)�”}”(hŒU``enum_frame_size`` callback for VIDIOC_SUBDEV_ENUM_FRAME_SIZE() ioctl handler code. ”h]”(j\)�”}”(hŒ``enum_frame_size``”h]”hú)�”}”(hj>Mh]”hŒenum_frame_size”…”�”}”(hj@Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj"Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j=Ph´MhjûLubjV)�”}”(hŒU``enum_dv_timings`` callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler code. ”h]”(j\)�”}”(hŒ``enum_dv_timings``”h]”hú)�”}”(hjbPh]”hŒenum_dv_timings”…”�”}”(hjdPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj`Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj\Pubjv)�”}”(hhh]”hÞ)�”}”(hŒ@callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler code.”h]”hŒ@callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler code.”…”�”}”(hj{Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjxPubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj\Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jwPh´M hjûLubjV)�”}”(hŒ}``link_validate`` used by the media controller code to check if the links that belongs to a pipeline can be used for stream. ”h]”(j\)�”}”(hŒ``link_validate``”h]”hú)�”}”(hjœPh]”hŒ link_validate”…”�”}”(hjžPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjšPubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj–Pubjv)�”}”(hhh]”hÞ)�”}”(hŒjused by the media controller code to check if the links that belongs to a pipeline can be used for stream.”h]”hŒjused by the media controller code to check if the links that belongs to a pipeline can be used for stream.”…”�”}”(hjµPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj²Pubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj–Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j±Ph´MhjûLubjV)�”}”(hŒI``get_frame_desc`` get the current low level media bus frame parameters. ”h]”(j\)�”}”(hŒ``get_frame_desc``”h]”hú)�”}”(hjÖPh]”hŒget_frame_desc”…”�”}”(hjØPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÔPubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÐPubjv)�”}”(hhh]”hÞ)�”}”(hŒ5get the current low level media bus frame parameters.”h]”hŒ5get the current low level media bus frame parameters.”…”�”}”(hjïPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jëPh´MhjìPubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÐPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jëPh´MhjûLubjV)�”}”(hŒ‹``set_frame_desc`` set the low level media bus frame parameters, **fd** array may be adjusted by the subdev driver to device capabilities. ”h]”(j\)�”}”(hŒ``set_frame_desc``”h]”hú)�”}”(hjQh]”hŒset_frame_desc”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj Qubjv)�”}”(hhh]”hÞ)�”}”(hŒwset the low level media bus frame parameters, **fd** array may be adjusted by the subdev driver to device capabilities.”h]”(hŒ.set the low level media bus frame parameters, ”…”�”}”(hj(Qh²hh³Nh´NubjÄ)�”}”(hŒ**fd**”h]”hŒfd”…”�”}”(hj0Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj(QubhŒC array may be adjusted by the subdev driver to device capabilities.”…”�”}”(hj(Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj%Qubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j$Qh´MhjûLubjV)�”}”(hX``get_mbus_config`` get the media bus configuration of a remote sub-device. The media bus configuration is usually retrieved from the firmware interface at sub-device probe time, immediately applied to the hardware and eventually adjusted by the driver. Remote sub-devices (usually video receivers) shall use this operation to query the transmitting end bus configuration in order to adjust their own one accordingly. Callers should make sure they get the most up-to-date as possible configuration from the remote end, likely calling this operation as close as possible to stream on time. The operation shall fail if the pad index it has been called on is not valid or in case of unrecoverable failures. The config argument has been memset to 0 just before calling the op. ”h]”(j\)�”}”(hŒ``get_mbus_config``”h]”hú)�”}”(hj[Qh]”hŒget_mbus_config”…”�”}”(hj]Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjYQubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M"hjUQubjv)�”}”(hhh]”hÞ)�”}”(hXðget the media bus configuration of a remote sub-device. The media bus configuration is usually retrieved from the firmware interface at sub-device probe time, immediately applied to the hardware and eventually adjusted by the driver. Remote sub-devices (usually video receivers) shall use this operation to query the transmitting end bus configuration in order to adjust their own one accordingly. Callers should make sure they get the most up-to-date as possible configuration from the remote end, likely calling this operation as close as possible to stream on time. The operation shall fail if the pad index it has been called on is not valid or in case of unrecoverable failures. The config argument has been memset to 0 just before calling the op.”h]”hXðget the media bus configuration of a remote sub-device. The media bus configuration is usually retrieved from the firmware interface at sub-device probe time, immediately applied to the hardware and eventually adjusted by the driver. Remote sub-devices (usually video receivers) shall use this operation to query the transmitting end bus configuration in order to adjust their own one accordingly. Callers should make sure they get the most up-to-date as possible configuration from the remote end, likely calling this operation as close as possible to stream on time. The operation shall fail if the pad index it has been called on is not valid or in case of unrecoverable failures. The config argument has been memset to 0 just before calling the op.”…”�”}”(hjtQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjqQubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjUQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jpQh´M"hjûLubjV)�”}”(hŒ³``set_routing`` Enable or disable data connection routes described in the subdevice routing table. Subdevs that implement this operation must set the V4L2_SUBDEV_FL_STREAMS flag. ”h]”(j\)�”}”(hŒ``set_routing``”h]”hú)�”}”(hj•Qh]”hŒ set_routing”…”�”}”(hj—Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj“Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M&hj�Qubjv)�”}”(hhh]”hÞ)�”}”(hŒ¢Enable or disable data connection routes described in the subdevice routing table. Subdevs that implement this operation must set the V4L2_SUBDEV_FL_STREAMS flag.”h]”hŒ¢Enable or disable data connection routes described in the subdevice routing table. Subdevs that implement this operation must set the V4L2_SUBDEV_FL_STREAMS flag.”…”�”}”(hj®Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M$hj«Qubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jªQh´M&hjûLubjV)�”}”(hXN``enable_streams`` Enable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_enable_streams() instead. ”h]”(j\)�”}”(hŒ``enable_streams``”h]”hú)�”}”(hjÏQh]”hŒenable_streams”…”�”}”(hjÑQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÍQubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hjÉQubjv)�”}”(hhh]”hÞ)�”}”(hX:Enable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_enable_streams() instead.”h]”hX:Enable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_enable_streams() instead.”…”�”}”(hjèQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M(hjåQubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÉQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jäQh´M,hjûLubjV)�”}”(hXR``disable_streams`` Disable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_disable_streams() instead. ”h]”(j\)�”}”(hŒ``disable_streams``”h]”hú)�”}”(hj Rh]”hŒdisable_streams”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M7hjRubjv)�”}”(hhh]”hÞ)�”}”(hX<Disable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_disable_streams() instead.”h]”hX<Disable the streams defined in streams_mask on the given source pad. Subdevs that implement this operation must use the active state management provided by the subdev core (enabled through a call to v4l2_subdev_init_finalize() at initialization time). Do not call directly, use v4l2_subdev_disable_streams() instead.”…”�”}”(hj"Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M2hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jRh´M7hjûLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj©LubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjERh]”hŒ Description”…”�”}”(hjGRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjCRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M9hj©LubjŸ)�”}”(hXDrivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument. Drivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”h]”(hÞ)�”}”(hŒŽDrivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”h]”hŒŽDrivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”…”�”}”(hj_Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hj[RubhÞ)�”}”(hŒŽDrivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”h]”hŒŽDrivers that support only a single stream without setting the V4L2_SUBDEV_CAP_STREAMS sub-device capability flag can ignore the mask argument.”…”�”}”(hjnRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M1hj[Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jmRh´M,hj©Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_ops (C struct)”Œc.v4l2_subdev_ops”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_ops”h]”j{)�”}”(hŒstruct v4l2_subdev_ops”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj£Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸRh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M8ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Rh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸRh²hh³j°Rh´M8ubj¤)�”}”(hŒv4l2_subdev_ops”h]”jª)�”}”(hj�Rh]”hŒv4l2_subdev_ops”…”�”}”(hjÃRh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¿Rubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjŸRh²hh³j°Rh´M8ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj›Rh²hh³j°Rh´M8ubah}”(h]”j–Rah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j°Rh´M8hj˜Rh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒSubdev operations”h]”hŒSubdev operations”…”�”}”(hjåRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M{hjâRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj˜Rh²hh³j°Rh´M8ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jýRjøjýRjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX8 **Definition**:: struct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_vbi_ops *vbi; const struct v4l2_subdev_ir_ops *ir; const struct v4l2_subdev_sensor_ops *sensor; const struct v4l2_subdev_pad_ops *pad; }; **Members** ``core`` pointer to :c:type:`struct v4l2_subdev_core_ops `. Can be ``NULL`` ``tuner`` pointer to :c:type:`struct v4l2_subdev_tuner_ops `. Can be ``NULL`` ``audio`` pointer to :c:type:`struct v4l2_subdev_audio_ops `. Can be ``NULL`` ``video`` pointer to :c:type:`struct v4l2_subdev_video_ops `. Can be ``NULL`` ``vbi`` pointer to :c:type:`struct v4l2_subdev_vbi_ops `. Can be ``NULL`` ``ir`` pointer to :c:type:`struct v4l2_subdev_ir_ops `. Can be ``NULL`` ``sensor`` pointer to :c:type:`struct v4l2_subdev_sensor_ops `. Can be ``NULL`` ``pad`` pointer to :c:type:`struct v4l2_subdev_pad_ops `. Can be ``NULL``”h]”(jŸ)�”}”(hXë**Definition**:: struct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_vbi_ops *vbi; const struct v4l2_subdev_ir_ops *ir; const struct v4l2_subdev_sensor_ops *sensor; const struct v4l2_subdev_pad_ops *pad; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj SubhŒ:”…”�”}”(hj Sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjSubj>)�”}”(hXÄstruct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_vbi_ops *vbi; const struct v4l2_subdev_ir_ops *ir; const struct v4l2_subdev_sensor_ops *sensor; const struct v4l2_subdev_pad_ops *pad; };”h]”hXÄstruct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_vbi_ops *vbi; const struct v4l2_subdev_ir_ops *ir; const struct v4l2_subdev_sensor_ops *sensor; const struct v4l2_subdev_pad_ops *pad; };”…”�”}”hj&Ssbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j%Sh´MhjSubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj=Sh]”hŒMembers”…”�”}”(hj?Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj;Subah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŒhjSubjQ)�”}”(hhh]”(jV)�”}”(hŒb``core`` pointer to :c:type:`struct v4l2_subdev_core_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ``core``”h]”hú)�”}”(hj\Sh]”hŒcore”…”�”}”(hj^Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjZSubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M~hjVSubjv)�”}”(hhh]”hÞ)�”}”(hŒXpointer to :c:type:`struct v4l2_subdev_core_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hjuSh²hh³Nh´Nubh)�”}”(hŒ<:c:type:`struct v4l2_subdev_core_ops `”h]”hú)�”}”(hjSh]”hŒstruct v4l2_subdev_core_ops”…”�”}”(hj�Sh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj}Subah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_core_ops”uh1hh³jqSh´M~hjuSubhŒ . Can be ”…”�”}”(hjuSh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjuSubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jqSh´M~hjrSubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjVSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jqSh´M~hjSSubjV)�”}”(hŒe``tuner`` pointer to :c:type:`struct v4l2_subdev_tuner_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ ``tuner``”h]”hú)�”}”(hjÆSh]”hŒtuner”…”�”}”(hjÈSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄSubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÀSubjv)�”}”(hhh]”hÞ)�”}”(hŒZpointer to :c:type:`struct v4l2_subdev_tuner_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hjßSh²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct v4l2_subdev_tuner_ops `”h]”hú)�”}”(hjéSh]”hŒstruct v4l2_subdev_tuner_ops”…”�”}”(hjëSh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjçSubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_tuner_ops”uh1hh³jÛSh´MhjßSubhŒ . Can be ”…”�”}”(hjßSh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjßSubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÛSh´MhjÜSubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÀSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÛSh´MhjSSubjV)�”}”(hŒe``audio`` pointer to :c:type:`struct v4l2_subdev_audio_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ ``audio``”h]”hú)�”}”(hj0Th]”hŒaudio”…”�”}”(hj2Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj.Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M€hj*Tubjv)�”}”(hhh]”hÞ)�”}”(hŒZpointer to :c:type:`struct v4l2_subdev_audio_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hjITh²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct v4l2_subdev_audio_ops `”h]”hú)�”}”(hjSTh]”hŒstruct v4l2_subdev_audio_ops”…”�”}”(hjUTh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjQTubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_audio_ops”uh1hh³jETh´M€hjITubhŒ . Can be ”…”�”}”(hjITh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjtTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjITubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jETh´M€hjFTubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj*Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jETh´M€hjSSubjV)�”}”(hŒe``video`` pointer to :c:type:`struct v4l2_subdev_video_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ ``video``”h]”hú)�”}”(hjšTh]”hŒvideo”…”�”}”(hjœTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj˜Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj”Tubjv)�”}”(hhh]”hÞ)�”}”(hŒZpointer to :c:type:`struct v4l2_subdev_video_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hj³Th²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct v4l2_subdev_video_ops `”h]”hú)�”}”(hj½Th]”hŒstruct v4l2_subdev_video_ops”…”�”}”(hj¿Th²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj»Tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_video_ops”uh1hh³j¯Th´M�hj³TubhŒ . Can be ”…”�”}”(hj³Th²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÞTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj³Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¯Th´M�hj°Tubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj”Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¯Th´M�hjSSubjV)�”}”(hŒ_``vbi`` pointer to :c:type:`struct v4l2_subdev_vbi_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ``vbi``”h]”hú)�”}”(hjUh]”hŒvbi”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‚hjþTubjv)�”}”(hhh]”hÞ)�”}”(hŒVpointer to :c:type:`struct v4l2_subdev_vbi_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hjUh²hh³Nh´Nubh)�”}”(hŒ::c:type:`struct v4l2_subdev_vbi_ops `”h]”hú)�”}”(hj'Uh]”hŒstruct v4l2_subdev_vbi_ops”…”�”}”(hj)Uh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj%Uubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_vbi_ops”uh1hh³jUh´M‚hjUubhŒ . Can be ”…”�”}”(hjUh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjHUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jUh´M‚hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjþTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jUh´M‚hjSSubjV)�”}”(hŒ\``ir`` pointer to :c:type:`struct v4l2_subdev_ir_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ``ir``”h]”hú)�”}”(hjnUh]”hŒir”…”�”}”(hjpUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjlUubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MƒhjhUubjv)�”}”(hhh]”hÞ)�”}”(hŒTpointer to :c:type:`struct v4l2_subdev_ir_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hj‡Uh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_subdev_ir_ops `”h]”hú)�”}”(hj‘Uh]”hŒstruct v4l2_subdev_ir_ops”…”�”}”(hj“Uh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”e•h"]”h$]”h&]”uh1hùhj�Uubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ir_ops”uh1hh³jƒUh´Mƒhj‡UubhŒ . Can be ”…”�”}”(hj‡Uh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj²Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‡Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jƒUh´Mƒhj„Uubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjhUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jƒUh´MƒhjSSubjV)�”}”(hŒh``sensor`` pointer to :c:type:`struct v4l2_subdev_sensor_ops `. Can be ``NULL`` ”h]”(j\)�”}”(hŒ ``sensor``”h]”hú)�”}”(hjØUh]”hŒsensor”…”�”}”(hjÚUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÖUubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M„hjÒUubjv)�”}”(hhh]”hÞ)�”}”(hŒ\pointer to :c:type:`struct v4l2_subdev_sensor_ops `. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hjñUh²hh³Nh´Nubh)�”}”(hŒ@:c:type:`struct v4l2_subdev_sensor_ops `”h]”hú)�”}”(hjûUh]”hŒstruct v4l2_subdev_sensor_ops”…”�”}”(hjýUh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjùUubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_sensor_ops”uh1hh³jíUh´M„hjñUubhŒ . Can be ”…”�”}”(hjñUh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjñUubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jíUh´M„hjîUubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÒUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jíUh´M„hjSSubjV)�”}”(hŒ^``pad`` pointer to :c:type:`struct v4l2_subdev_pad_ops `. Can be ``NULL``”h]”(j\)�”}”(hŒ``pad``”h]”hú)�”}”(hjBVh]”hŒpad”…”�”}”(hjDVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M„hj`. Can be ``NULL``”h]”(hŒ pointer to ”…”�”}”(hj[Vh²hh³Nh´Nubh)�”}”(hŒ::c:type:`struct v4l2_subdev_pad_ops `”h]”hú)�”}”(hjeVh]”hŒstruct v4l2_subdev_pad_ops”…”�”}”(hjgVh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjcVubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M…hj[VubhŒ . Can be ”…”�”}”(hj[Vh²hh³Nh´Nubhú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj‡Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj[Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‚Vh´M…hjXVubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj)�”}”(hX—struct v4l2_subdev_internal_ops { int (*init_state)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state); int (*registered)(struct v4l2_subdev *sd); void (*unregistered)(struct v4l2_subdev *sd); int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); void (*release)(struct v4l2_subdev *sd); };”h]”hX—struct v4l2_subdev_internal_ops { int (*init_state)(struct v4l2_subdev *sd, struct v4l2_subdev_state *state); int (*registered)(struct v4l2_subdev *sd); void (*unregistered)(struct v4l2_subdev *sd); int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); void (*release)(struct v4l2_subdev *sd); };”…”�”}”hjPWsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M˜hj/Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jOWh´M–hj+WubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hjgWh]”hŒMembers”…”�”}”(hjiWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjeWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¡hj+WubjQ)�”}”(hhh]”(jV)�”}”(hŒ=``init_state`` initialize the subdev state to default values ”h]”(j\)�”}”(hŒ``init_state``”h]”hú)�”}”(hj†Wh]”hŒ init_state”…”�”}”(hjˆWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj„Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M•hj€Wubjv)�”}”(hhh]”hÞ)�”}”(hŒ-initialize the subdev state to default values”h]”hŒ-initialize the subdev state to default values”…”�”}”(hjŸWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j›Wh´M•hjœWubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj€Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j›Wh´M•hj}WubjV)�”}”(hŒx``registered`` called when this subdev is registered. When called the v4l2_dev field is set to the correct v4l2_device. ”h]”(j\)�”}”(hŒ``registered``”h]”hú)�”}”(hj¿Wh]”hŒ registered”…”�”}”(hjÁWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj½Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M˜hj¹Wubjv)�”}”(hhh]”hÞ)�”}”(hŒhcalled when this subdev is registered. When called the v4l2_dev field is set to the correct v4l2_device.”h]”hŒhcalled when this subdev is registered. When called the v4l2_dev field is set to the correct v4l2_device.”…”�”}”(hjØWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M—hjÕWubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¹Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÔWh´M˜hj}WubjV)�”}”(hŒ‚``unregistered`` called when this subdev is unregistered. When called the v4l2_dev field is still set to the correct v4l2_device. ”h]”(j\)�”}”(hŒ``unregistered``”h]”hú)�”}”(hjùWh]”hŒ unregistered”…”�”}”(hjûWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj÷Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M›hjóWubjv)�”}”(hhh]”hÞ)�”}”(hŒpcalled when this subdev is unregistered. When called the v4l2_dev field is still set to the correct v4l2_device.”h]”hŒpcalled when this subdev is unregistered. When called the v4l2_dev field is still set to the correct v4l2_device.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MšhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjóWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jXh´M›hj}WubjV)�”}”(hŒI``open`` called when the subdev device node is opened by an application. ”h]”(j\)�”}”(hŒ``open``”h]”hú)�”}”(hj3Xh]”hŒopen”…”�”}”(hj5Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj1Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj-Xubjv)�”}”(hhh]”hÞ)�”}”(hŒ?called when the subdev device node is opened by an application.”h]”hŒ?called when the subdev device node is opened by an application.”…”�”}”(hjLXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jHXh´M�hjIXubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj-Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jHXh´M�hj}WubjV)�”}”(hŒ‹``close`` called when the subdev device node is closed. Please note that it is possible for **close** to be called after **unregistered**! ”h]”(j\)�”}”(hŒ ``close``”h]”hú)�”}”(hjlXh]”hŒclose”…”�”}”(hjnXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjfXubjv)�”}”(hhh]”hÞ)�”}”(hŒ€called when the subdev device node is closed. Please note that it is possible for **close** to be called after **unregistered**!”h]”(hŒRcalled when the subdev device node is closed. Please note that it is possible for ”…”�”}”(hj…Xh²hh³Nh´NubjÄ)�”}”(hŒ **close**”h]”hŒclose”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj…XubhŒ to be called after ”…”�”}”(hj…Xh²hh³Nh´NubjÄ)�”}”(hŒ**unregistered**”h]”hŒ unregistered”…”�”}”(hjŸXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj…XubhŒ!”…”�”}”(hj…Xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŸhj‚Xubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjfXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�Xh´M hj}WubjV)�”}”(hX``release`` called when the last user of the subdev device is gone. This happens after the **unregistered** callback and when the last open filehandle to the v4l-subdevX device node was closed. If no device node was created for this sub-device, then the **release** callback is called right after the **unregistered** callback. The **release** callback is typically used to free the memory containing the v4l2_subdev structure. It is almost certainly required for any sub-device that sets the V4L2_SUBDEV_FL_HAS_DEVNODE flag. ”h]”(j\)�”}”(hŒ ``release``”h]”hú)�”}”(hjÊXh]”hŒrelease”…”�”}”(hjÌXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÈXubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MªhjÄXubjv)�”}”(hhh]”hÞ)�”}”(hXcalled when the last user of the subdev device is gone. This happens after the **unregistered** callback and when the last open filehandle to the v4l-subdevX device node was closed. If no device node was created for this sub-device, then the **release** callback is called right after the **unregistered** callback. The **release** callback is typically used to free the memory containing the v4l2_subdev structure. It is almost certainly required for any sub-device that sets the V4L2_SUBDEV_FL_HAS_DEVNODE flag.”h]”(hŒOcalled when the last user of the subdev device is gone. This happens after the ”…”�”}”(hjãXh²hh³Nh´NubjÄ)�”}”(hŒ**unregistered**”h]”hŒ unregistered”…”�”}”(hjëXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjãXubhŒ“ callback and when the last open filehandle to the v4l-subdevX device node was closed. If no device node was created for this sub-device, then the ”…”�”}”(hjãXh²hh³Nh´NubjÄ)�”}”(hŒ **release**”h]”hŒrelease”…”�”}”(hjýXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjãXubhŒ$ callback is called right after the ”…”�”}”(hjãXh²hh³Nh´NubjÄ)�”}”(hŒ**unregistered**”h]”hŒ unregistered”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjãXubhŒ callback. The ”…”�”}”(hjãXh²hh³Nh´NubjÄ)�”}”(hŒ **release**”h]”hŒrelease”…”�”}”(hj!Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjãXubhŒ¶ callback is typically used to free the memory containing the v4l2_subdev structure. It is almost certainly required for any sub-device that sets the V4L2_SUBDEV_FL_HAS_DEVNODE flag.”…”�”}”(hjãXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢hjàXubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÄXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jßXh´Mªhj}Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj+WubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjNYh]”hŒ Description”…”�”}”(hjPYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjLYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¬hj+Wubj()�”}”(hŒINever call this from drivers, only the v4l2 framework can call these ops.”h]”hÞ)�”}”(hŒINever call this from drivers, only the v4l2 framework can call these ops.”h]”hŒINever call this from drivers, only the v4l2 framework can call these ops.”…”�”}”(hjhYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MªhjdYubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj+Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_platform_data (C struct)”Œc.v4l2_subdev_platform_data”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_platform_data”h]”j{)�”}”(hŒ struct v4l2_subdev_platform_data”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™Yh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M°ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Yh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj™Yh²hh³jªYh´M°ubj¤)�”}”(hŒv4l2_subdev_platform_data”h]”jª)�”}”(hj—Yh]”hŒv4l2_subdev_platform_data”…”�”}”(hj½Yh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¹Yubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj™Yh²hh³jªYh´M°ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj•Yh²hh³jªYh´M°ubah}”(h]”j�Yah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jªYh´M°hj’Yh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒregulators config struct”h]”hŒregulators config struct”…”�”}”(hjßYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÓhjÜYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj’Yh²hh³jªYh´M°ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j÷Yjøj÷Yjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX} **Definition**:: struct v4l2_subdev_platform_data { struct regulator_bulk_data *regulators; int num_regulators; void *host_priv; }; **Members** ``regulators`` Optional regulators used to power on/off the subdevice ``num_regulators`` Number of regululators ``host_priv`` Per-subdevice data, specific for a certain video host device”h]”(jŸ)�”}”(hŒ¡**Definition**:: struct v4l2_subdev_platform_data { struct regulator_bulk_data *regulators; int num_regulators; void *host_priv; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjZubhŒ:”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M×hjÿYubj>)�”}”(hŒ„struct v4l2_subdev_platform_data { struct regulator_bulk_data *regulators; int num_regulators; void *host_priv; };”h]”hŒ„struct v4l2_subdev_platform_data { struct regulator_bulk_data *regulators; int num_regulators; void *host_priv; };”…”�”}”hj Zsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÙhjÿYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jZh´M×hjûYubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj7Zh]”hŒMembers”…”�”}”(hj9Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj5Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MßhjûYubjQ)�”}”(hhh]”(jV)�”}”(hŒF``regulators`` Optional regulators used to power on/off the subdevice ”h]”(j\)�”}”(hŒ``regulators``”h]”hú)�”}”(hjVZh]”hŒ regulators”…”�”}”(hjXZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjTZubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÖhjPZubjv)�”}”(hhh]”hÞ)�”}”(hŒ6Optional regulators used to power on/off the subdevice”h]”hŒ6Optional regulators used to power on/off the subdevice”…”�”}”(hjoZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jkZh´MÖhjlZubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjPZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jkZh´MÖhjMZubjV)�”}”(hŒ*``num_regulators`` Number of regululators ”h]”(j\)�”}”(hŒ``num_regulators``”h]”hú)�”}”(hj�Zh]”hŒnum_regulators”…”�”}”(hj‘Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M×hj‰Zubjv)�”}”(hhh]”hÞ)�”}”(hŒNumber of regululators”h]”hŒNumber of regululators”…”�”}”(hj¨Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¤Zh´M×hj¥Zubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‰Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¤Zh´M×hjMZubjV)�”}”(hŒJ``host_priv`` Per-subdevice data, specific for a certain video host device”h]”(j\)�”}”(hŒ ``host_priv``”h]”hú)�”}”(hjÈZh]”hŒ host_priv”…”�”}”(hjÊZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÆZubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M×hjÂZubjv)�”}”(hhh]”hÞ)�”}”(hŒ[ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj[h²hh³j/[h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj[h²hh³j/[h´MÞubah}”(h]”j[ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j/[h´MÞhj[h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒdescribes a V4L2 sub-device”h]”hŒdescribes a V4L2 sub-device”…”�”}”(hjd[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Máhja[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj[h²hh³j/[h´MÞubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷j|[jøj|[jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX1 **Definition**:: struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; #endif; struct list_head list; struct module *owner; bool owner_v4l2_dev; u32 flags; struct v4l2_device *v4l2_dev; const struct v4l2_subdev_ops *ops; const struct v4l2_subdev_internal_ops *internal_ops; struct v4l2_ctrl_handler *ctrl_handler; char name[52]; u32 grp_id; void *dev_priv; void *host_priv; struct video_device *devnode; struct device *dev; struct fwnode_handle *fwnode; struct list_head async_list; struct list_head async_subdev_endpoint_list; struct v4l2_async_notifier *subdev_notifier; struct list_head asc_list; struct v4l2_subdev_platform_data *pdata; struct mutex *state_lock; struct led_classdev *privacy_led; struct v4l2_subdev_state *active_state; u64 enabled_pads; bool s_stream_enabled; }; **Members** ``entity`` pointer to :c:type:`struct media_entity ` ``list`` List of sub-devices ``owner`` The owner is the same as the driver's :c:type:`struct device ` owner. ``owner_v4l2_dev`` true if the :c:type:`sd->owner ` matches the owner of **v4l2_dev->dev** owner. Initialized by v4l2_device_register_subdev(). ``flags`` subdev flags. Can be: ``V4L2_SUBDEV_FL_IS_I2C`` - Set this flag if this subdev is a i2c device; ``V4L2_SUBDEV_FL_IS_SPI`` - Set this flag if this subdev is a spi device; ``V4L2_SUBDEV_FL_HAS_DEVNODE`` - Set this flag if this subdev needs a device node; ``V4L2_SUBDEV_FL_HAS_EVENTS`` - Set this flag if this subdev generates events. ``v4l2_dev`` pointer to struct :c:type:`v4l2_device` ``ops`` pointer to struct :c:type:`v4l2_subdev_ops` ``internal_ops`` pointer to struct :c:type:`v4l2_subdev_internal_ops`. Never call these internal ops from within a driver! ``ctrl_handler`` The control handler of this subdev. May be NULL. ``name`` Name of the sub-device. Please notice that the name must be unique. ``grp_id`` can be used to group similar subdevs. Value is driver-specific ``dev_priv`` pointer to private data ``host_priv`` pointer to private data used by the device where the subdev is attached. ``devnode`` subdev device node ``dev`` pointer to the physical device, if any ``fwnode`` The fwnode_handle of the subdev, usually the same as either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL). ``async_list`` Links this subdev to a global subdev_list or **notifier->done_list** list. ``async_subdev_endpoint_list`` List entry in async_subdev_endpoint_entry of :c:type:`struct v4l2_async_subdev_endpoint `. ``subdev_notifier`` A sub-device notifier implicitly registered for the sub- device using v4l2_async_register_subdev_sensor(). ``asc_list`` Async connection list, of :c:type:`struct v4l2_async_connection `.subdev_entry. ``pdata`` common part of subdevice platform data ``state_lock`` A pointer to a lock used for all the subdev's states, set by the driver. This is optional. If NULL, each state instance will get a lock of its own. ``privacy_led`` Optional pointer to a LED classdev for the privacy LED for sensors. ``active_state`` Active state for the subdev (NULL for subdevs tracking the state internally). Initialized by calling v4l2_subdev_init_finalize(). ``enabled_pads`` Bitmask of enabled pads used by v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helper functions for fallback cases. ``s_stream_enabled`` Tracks whether streaming has been enabled with s_stream. This is only for call_s_stream() internal use. **Description** Each instance of a subdev driver should create this struct, either stand-alone or embedded in a larger struct. This structure should be initialized by v4l2_subdev_init() or one of its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init().”h]”(jŸ)�”}”(hX **Definition**:: struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; #endif; struct list_head list; struct module *owner; bool owner_v4l2_dev; u32 flags; struct v4l2_device *v4l2_dev; const struct v4l2_subdev_ops *ops; const struct v4l2_subdev_internal_ops *internal_ops; struct v4l2_ctrl_handler *ctrl_handler; char name[52]; u32 grp_id; void *dev_priv; void *host_priv; struct video_device *devnode; struct device *dev; struct fwnode_handle *fwnode; struct list_head async_list; struct list_head async_subdev_endpoint_list; struct v4l2_async_notifier *subdev_notifier; struct list_head asc_list; struct v4l2_subdev_platform_data *pdata; struct mutex *state_lock; struct led_classdev *privacy_led; struct v4l2_subdev_state *active_state; u64 enabled_pads; bool s_stream_enabled; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjŒ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjˆ[ubhŒ:”…”�”}”(hjˆ[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Måhj„[ubj>)�”}”(hX¼struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; #endif; struct list_head list; struct module *owner; bool owner_v4l2_dev; u32 flags; struct v4l2_device *v4l2_dev; const struct v4l2_subdev_ops *ops; const struct v4l2_subdev_internal_ops *internal_ops; struct v4l2_ctrl_handler *ctrl_handler; char name[52]; u32 grp_id; void *dev_priv; void *host_priv; struct video_device *devnode; struct device *dev; struct fwnode_handle *fwnode; struct list_head async_list; struct list_head async_subdev_endpoint_list; struct v4l2_async_notifier *subdev_notifier; struct list_head asc_list; struct v4l2_subdev_platform_data *pdata; struct mutex *state_lock; struct led_classdev *privacy_led; struct v4l2_subdev_state *active_state; u64 enabled_pads; bool s_stream_enabled; };”h]”hX¼struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER); struct media_entity entity; #endif; struct list_head list; struct module *owner; bool owner_v4l2_dev; u32 flags; struct v4l2_device *v4l2_dev; const struct v4l2_subdev_ops *ops; const struct v4l2_subdev_internal_ops *internal_ops; struct v4l2_ctrl_handler *ctrl_handler; char name[52]; u32 grp_id; void *dev_priv; void *host_priv; struct video_device *devnode; struct device *dev; struct fwnode_handle *fwnode; struct list_head async_list; struct list_head async_subdev_endpoint_list; struct v4l2_async_notifier *subdev_notifier; struct list_head asc_list; struct v4l2_subdev_platform_data *pdata; struct mutex *state_lock; struct led_classdev *privacy_led; struct v4l2_subdev_state *active_state; u64 enabled_pads; bool s_stream_enabled; };”…”�”}”hj¥[sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mçhj„[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j¤[h´Måhj€[ubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj¼[h]”hŒMembers”…”�”}”(hj¾[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjº[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€[ubjQ)�”}”(hhh]”(jV)�”}”(hŒC``entity`` pointer to :c:type:`struct media_entity ` ”h]”(j\)�”}”(hŒ ``entity``”h]”hú)�”}”(hjÛ[h]”hŒentity”…”�”}”(hjÝ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÙ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MähjÕ[ubjv)�”}”(hhh]”hÞ)�”}”(hŒ7pointer to :c:type:`struct media_entity `”h]”(hŒ pointer to ”…”�”}”(hjô[h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct media_entity `”h]”hú)�”}”(hjþ[h]”hŒstruct media_entity”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjü[ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_entity”uh1hh³jð[h´Mähjô[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jð[h´Mähjñ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÕ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jð[h´MähjÒ[ubjV)�”}”(hŒ``list`` List of sub-devices ”h]”(j\)�”}”(hŒ``list``”h]”hú)�”}”(hj3\h]”hŒlist”…”�”}”(hj5\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj1\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Måhj-\ubjv)�”}”(hhh]”hÞ)�”}”(hŒList of sub-devices”h]”hŒList of sub-devices”…”�”}”(hjL\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jH\h´MåhjI\ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj-\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jH\h´MåhjÒ[ubjV)�”}”(hŒX``owner`` The owner is the same as the driver's :c:type:`struct device ` owner. ”h]”(j\)�”}”(hŒ ``owner``”h]”hú)�”}”(hjl\h]”hŒowner”…”�”}”(hjn\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhjf\ubjv)�”}”(hhh]”hÞ)�”}”(hŒMThe owner is the same as the driver's :c:type:`struct device ` owner.”h]”(hŒ(The owner is the same as the driver’s ”…”�”}”(hj…\h²hh³Nh´Nubh)�”}”(hŒ :c:type:`struct device `”h]”hú)�”}”(hj�\h]”hŒ struct device”…”�”}”(hj‘\h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj�\ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒdevice”uh1hh³j�\h´Mæhj…\ubhŒ owner.”…”�”}”(hj…\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�\h´Mæhj‚\ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjf\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�\h´MæhjÒ[ubjV)�”}”(hŒ”``owner_v4l2_dev`` true if the :c:type:`sd->owner ` matches the owner of **v4l2_dev->dev** owner. Initialized by v4l2_device_register_subdev(). ”h]”(j\)�”}”(hŒ``owner_v4l2_dev``”h]”hú)�”}”(hjÈ\h]”hŒowner_v4l2_dev”…”�”}”(hjÊ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÆ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MèhjÂ\ubjv)�”}”(hhh]”hÞ)�”}”(hŒ€true if the :c:type:`sd->owner ` matches the owner of **v4l2_dev->dev** owner. Initialized by v4l2_device_register_subdev().”h]”(hŒ true if the ”…”�”}”(hjá\h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sd->owner `”h]”hú)�”}”(hjë\h]”hŒ sd->owner”…”�”}”(hjí\h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjé\ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒsd”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mçhjá\ubhŒ matches the owner of ”…”�”}”(hjá\h²hh³Nh´NubjÄ)�”}”(hŒ**v4l2_dev->dev**”h]”hŒ v4l2_dev->dev”…”�”}”(hj ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjá\ubhŒ5 owner. Initialized by v4l2_device_register_subdev().”…”�”}”(hjá\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j]h´MçhjÞ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÂ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÝ\h´MèhjÒ[ubjV)�”}”(hXW``flags`` subdev flags. Can be: ``V4L2_SUBDEV_FL_IS_I2C`` - Set this flag if this subdev is a i2c device; ``V4L2_SUBDEV_FL_IS_SPI`` - Set this flag if this subdev is a spi device; ``V4L2_SUBDEV_FL_HAS_DEVNODE`` - Set this flag if this subdev needs a device node; ``V4L2_SUBDEV_FL_HAS_EVENTS`` - Set this flag if this subdev generates events. ”h]”(j\)�”}”(hŒ ``flags``”h]”hú)�”}”(hj7]h]”hŒflags”…”�”}”(hj9]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj5]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mïhj1]ubjv)�”}”(hhh]”hÞ)�”}”(hXLsubdev flags. Can be: ``V4L2_SUBDEV_FL_IS_I2C`` - Set this flag if this subdev is a i2c device; ``V4L2_SUBDEV_FL_IS_SPI`` - Set this flag if this subdev is a spi device; ``V4L2_SUBDEV_FL_HAS_DEVNODE`` - Set this flag if this subdev needs a device node; ``V4L2_SUBDEV_FL_HAS_EVENTS`` - Set this flag if this subdev generates events.”h]”(hŒsubdev flags. Can be: ”…”�”}”(hjP]h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_IS_I2C``”h]”hŒV4L2_SUBDEV_FL_IS_I2C”…”�”}”(hjX]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjP]ubhŒ1 - Set this flag if this subdev is a i2c device; ”…”�”}”(hjP]h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_IS_SPI``”h]”hŒV4L2_SUBDEV_FL_IS_SPI”…”�”}”(hjj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjP]ubhŒ1 - Set this flag if this subdev is a spi device; ”…”�”}”(hjP]h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_DEVNODE``”h]”hŒV4L2_SUBDEV_FL_HAS_DEVNODE”…”�”}”(hj|]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjP]ubhŒ5 - Set this flag if this subdev needs a device node; ”…”�”}”(hjP]h²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_FL_HAS_EVENTS``”h]”hŒV4L2_SUBDEV_FL_HAS_EVENTS”…”�”}”(hjŽ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjP]ubhŒ2 - Set this flag if this subdev generates events.”…”�”}”(hjP]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MéhjM]ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj1]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jL]h´MïhjÒ[ubjV)�”}”(hŒ5``v4l2_dev`` pointer to struct :c:type:`v4l2_device` ”h]”(j\)�”}”(hŒ ``v4l2_dev``”h]”hú)�”}”(hj¹]h]”hŒv4l2_dev”…”�”}”(hj»]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj·]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mñhj³]ubjv)�”}”(hhh]”hÞ)�”}”(hŒ'pointer to struct :c:type:`v4l2_device`”h]”(hŒpointer to struct ”…”�”}”(hjÒ]h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_device`”h]”hú)�”}”(hjÜ]h]”hŒ v4l2_device”…”�”}”(hjÞ]h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÚ]ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÖjÚjŒ v4l2_device”uh1hh³jÎ]h´MñhjÒ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎ]h´MñhjÏ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj³]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÎ]h´MñhjÒ[ubjV)�”}”(hŒ4``ops`` pointer to struct :c:type:`v4l2_subdev_ops` ”h]”(j\)�”}”(hŒ``ops``”h]”hú)�”}”(hj^h]”hŒops”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mòhj ^ubjv)�”}”(hhh]”hÞ)�”}”(hŒ+pointer to struct :c:type:`v4l2_subdev_ops`”h]”(hŒpointer to struct ”…”�”}”(hj*^h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_ops`”h]”hú)�”}”(hj4^h]”hŒv4l2_subdev_ops”…”�”}”(hj6^h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj2^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³j&^h´Mòhj*^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&^h´Mòhj'^ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j&^h´MòhjÒ[ubjV)�”}”(hŒ{``internal_ops`` pointer to struct :c:type:`v4l2_subdev_internal_ops`. Never call these internal ops from within a driver! ”h]”(j\)�”}”(hŒ``internal_ops``”h]”hú)�”}”(hji^h]”hŒ internal_ops”…”�”}”(hjk^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjg^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Môhjc^ubjv)�”}”(hhh]”hÞ)�”}”(hŒipointer to struct :c:type:`v4l2_subdev_internal_ops`. Never call these internal ops from within a driver!”h]”(hŒpointer to struct ”…”�”}”(hj‚^h²hh³Nh´Nubh)�”}”(hŒ":c:type:`v4l2_subdev_internal_ops`”h]”hú)�”}”(hjŒ^h]”hŒv4l2_subdev_internal_ops”…”�”}”(hjŽ^h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjŠ^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÖjÚjŒv4l2_subdev_internal_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Móhj‚^ubhŒ5. Never call these internal ops from within a driver!”…”�”}”(hj‚^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©^h´Móhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjc^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j~^h´MôhjÒ[ubjV)�”}”(hŒB``ctrl_handler`` The control handler of this subdev. May be NULL. ”h]”(j\)�”}”(hŒ``ctrl_handler``”h]”hú)�”}”(hjÆ^h]”hŒ ctrl_handler”…”�”}”(hjÈ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÄ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MõhjÀ^ubjv)�”}”(hhh]”hÞ)�”}”(hŒ0The control handler of this subdev. May be NULL.”h]”hŒ0The control handler of this subdev. May be NULL.”…”�”}”(hjß^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÛ^h´MõhjÜ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÀ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÛ^h´MõhjÒ[ubjV)�”}”(hŒM``name`` Name of the sub-device. Please notice that the name must be unique. ”h]”(j\)�”}”(hŒ``name``”h]”hú)�”}”(hjÿ^h]”hŒname”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjý^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Möhjù^ubjv)�”}”(hhh]”hÞ)�”}”(hŒCName of the sub-device. Please notice that the name must be unique.”h]”hŒCName of the sub-device. Please notice that the name must be unique.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j_h´Möhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjù^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j_h´MöhjÒ[ubjV)�”}”(hŒJ``grp_id`` can be used to group similar subdevs. Value is driver-specific ”h]”(j\)�”}”(hŒ ``grp_id``”h]”hú)�”}”(hj8_h]”hŒgrp_id”…”�”}”(hj:_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj6_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M÷hj2_ubjv)�”}”(hhh]”hÞ)�”}”(hŒ>can be used to group similar subdevs. Value is driver-specific”h]”hŒ>can be used to group similar subdevs. Value is driver-specific”…”�”}”(hjQ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jM_h´M÷hjN_ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj2_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jM_h´M÷hjÒ[ubjV)�”}”(hŒ%``dev_priv`` pointer to private data ”h]”(j\)�”}”(hŒ ``dev_priv``”h]”hú)�”}”(hjq_h]”hŒdev_priv”…”�”}”(hjs_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjo_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Møhjk_ubjv)�”}”(hhh]”hÞ)�”}”(hŒpointer to private data”h]”hŒpointer to private data”…”�”}”(hjŠ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j†_h´Møhj‡_ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjk_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j†_h´MøhjÒ[ubjV)�”}”(hŒW``host_priv`` pointer to private data used by the device where the subdev is attached. ”h]”(j\)�”}”(hŒ ``host_priv``”h]”hú)�”}”(hjª_h]”hŒ host_priv”…”�”}”(hj¬_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¨_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Múhj¤_ubjv)�”}”(hhh]”hÞ)�”}”(hŒHpointer to private data used by the device where the subdev is attached.”h]”hŒHpointer to private data used by the device where the subdev is attached.”…”�”}”(hjÃ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MùhjÀ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¤_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¿_h´MúhjÒ[ubjV)�”}”(hŒ``devnode`` subdev device node ”h]”(j\)�”}”(hŒ ``devnode``”h]”hú)�”}”(hjä_h]”hŒdevnode”…”�”}”(hjæ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjâ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MûhjÞ_ubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdev device node”h]”hŒsubdev device node”…”�”}”(hjý_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jù_h´Mûhjú_ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÞ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jù_h´MûhjÒ[ubjV)�”}”(hŒ/``dev`` pointer to the physical device, if any ”h]”(j\)�”}”(hŒ``dev``”h]”hú)�”}”(hj`h]”hŒdev”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mühj`ubjv)�”}”(hhh]”hÞ)�”}”(hŒ&pointer to the physical device, if any”h]”hŒ&pointer to the physical device, if any”…”�”}”(hj6`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j2`h´Mühj3`ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j2`h´MühjÒ[ubjV)�”}”(hŒ„``fwnode`` The fwnode_handle of the subdev, usually the same as either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL). ”h]”(j\)�”}”(hŒ ``fwnode``”h]”hú)�”}”(hjV`h]”hŒfwnode”…”�”}”(hjX`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjT`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MþhjP`ubjv)�”}”(hhh]”hÞ)�”}”(hŒxThe fwnode_handle of the subdev, usually the same as either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).”h]”hŒxThe fwnode_handle of the subdev, usually the same as either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).”…”�”}”(hjo`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mýhjl`ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjP`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jk`h´MþhjÒ[ubjV)�”}”(hŒZ``async_list`` Links this subdev to a global subdev_list or **notifier->done_list** list. ”h]”(j\)�”}”(hŒ``async_list``”h]”hú)�”}”(hj�`h]”hŒ async_list”…”�”}”(hj’`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjŽ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjŠ`ubjv)�”}”(hhh]”hÞ)�”}”(hŒJLinks this subdev to a global subdev_list or **notifier->done_list** list.”h]”(hŒ-Links this subdev to a global subdev_list or ”…”�”}”(hj©`h²hh³Nh´NubjÄ)�”}”(hŒ**notifier->done_list**”h]”hŒnotifier->done_list”…”�”}”(hj±`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj©`ubhŒ list.”…”�”}”(hj©`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mÿhj¦`ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŠ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¥`h´MhjÒ[ubjV)�”}”(hŒ–``async_subdev_endpoint_list`` List entry in async_subdev_endpoint_entry of :c:type:`struct v4l2_async_subdev_endpoint `. ”h]”(j\)�”}”(hŒ``async_subdev_endpoint_list``”h]”hú)�”}”(hjÜ`h]”hŒasync_subdev_endpoint_list”…”�”}”(hjÞ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÚ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÖ`ubjv)�”}”(hhh]”hÞ)�”}”(hŒvList entry in async_subdev_endpoint_entry of :c:type:`struct v4l2_async_subdev_endpoint `.”h]”(hŒ-List entry in async_subdev_endpoint_entry of ”…”�”}”(hjõ`h²hh³Nh´Nubh)�”}”(hŒH:c:type:`struct v4l2_async_subdev_endpoint `”h]”hú)�”}”(hjÿ`h]”hŒ!struct v4l2_async_subdev_endpoint”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjý`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_async_subdev_endpoint”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjõ`ubhŒ.”…”�”}”(hjõ`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jah´Mhjò`ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÖ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jñ`h´MhjÒ[ubjV)�”}”(hŒ``subdev_notifier`` A sub-device notifier implicitly registered for the sub- device using v4l2_async_register_subdev_sensor(). ”h]”(j\)�”}”(hŒ``subdev_notifier``”h]”hú)�”}”(hj9ah]”hŒsubdev_notifier”…”�”}”(hj;ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj7aubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj3aubjv)�”}”(hhh]”hÞ)�”}”(hŒjA sub-device notifier implicitly registered for the sub- device using v4l2_async_register_subdev_sensor().”h]”hŒjA sub-device notifier implicitly registered for the sub- device using v4l2_async_register_subdev_sensor().”…”�”}”(hjRah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjOaubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj3aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jNah´MhjÒ[ubjV)�”}”(hŒt``asc_list`` Async connection list, of :c:type:`struct v4l2_async_connection `.subdev_entry. ”h]”(j\)�”}”(hŒ ``asc_list``”h]”hú)�”}”(hjsah]”hŒasc_list”…”�”}”(hjuah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjqaubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjmaubjv)�”}”(hhh]”hÞ)�”}”(hŒfAsync connection list, of :c:type:`struct v4l2_async_connection `.subdev_entry.”h]”(hŒAsync connection list, of ”…”�”}”(hjŒah²hh³Nh´Nubh)�”}”(hŒ>:c:type:`struct v4l2_async_connection `”h]”hú)�”}”(hj–ah]”hŒstruct v4l2_async_connection”…”�”}”(hj˜ah²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj”aubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_async_connection”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjŒaubhŒ.subdev_entry.”…”�”}”(hjŒah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j³ah´Mhj‰aubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjmaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jˆah´MhjÒ[ubjV)�”}”(hŒ1``pdata`` common part of subdevice platform data ”h]”(j\)�”}”(hŒ ``pdata``”h]”hú)�”}”(hjÐah]”hŒpdata”…”�”}”(hjÒah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÎaubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÊaubjv)�”}”(hhh]”hÞ)�”}”(hŒ&common part of subdevice platform data”h]”hŒ&common part of subdevice platform data”…”�”}”(hjéah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jåah´Mhjæaubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÊaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jåah´MhjÒ[ubjV)�”}”(hŒ£``state_lock`` A pointer to a lock used for all the subdev's states, set by the driver. This is optional. If NULL, each state instance will get a lock of its own. ”h]”(j\)�”}”(hŒ``state_lock``”h]”hú)�”}”(hj bh]”hŒ state_lock”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjbubjv)�”}”(hhh]”hÞ)�”}”(hŒ“A pointer to a lock used for all the subdev's states, set by the driver. This is optional. If NULL, each state instance will get a lock of its own.”h]”hŒ•A pointer to a lock used for all the subdev’s states, set by the driver. This is optional. If NULL, each state instance will get a lock of its own.”…”�”}”(hj"bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jbh´M hjÒ[ubjV)�”}”(hŒT``privacy_led`` Optional pointer to a LED classdev for the privacy LED for sensors. ”h]”(j\)�”}”(hŒ``privacy_led``”h]”hú)�”}”(hjCbh]”hŒ privacy_led”…”�”}”(hjEbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjAbubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj=bubjv)�”}”(hhh]”hÞ)�”}”(hŒCOptional pointer to a LED classdev for the privacy LED for sensors.”h]”hŒCOptional pointer to a LED classdev for the privacy LED for sensors.”…”�”}”(hj\bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jXbh´M hjYbubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj=bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jXbh´M hjÒ[ubjV)�”}”(hŒ“``active_state`` Active state for the subdev (NULL for subdevs tracking the state internally). Initialized by calling v4l2_subdev_init_finalize(). ”h]”(j\)�”}”(hŒ``active_state``”h]”hú)�”}”(hj|bh]”hŒ active_state”…”�”}”(hj~bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjzbubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjvbubjv)�”}”(hhh]”hÞ)�”}”(hŒ�Active state for the subdev (NULL for subdevs tracking the state internally). Initialized by calling v4l2_subdev_init_finalize().”h]”hŒ�Active state for the subdev (NULL for subdevs tracking the state internally). Initialized by calling v4l2_subdev_init_finalize().”…”�”}”(hj•bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj’bubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjvbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‘bh´MhjÒ[ubjV)�”}”(hŒ•``enabled_pads`` Bitmask of enabled pads used by v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helper functions for fallback cases. ”h]”(j\)�”}”(hŒ``enabled_pads``”h]”hú)�”}”(hj¶bh]”hŒ enabled_pads”…”�”}”(hj¸bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj´bubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj°bubjv)�”}”(hhh]”hÞ)�”}”(hŒƒBitmask of enabled pads used by v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helper functions for fallback cases.”h]”hŒƒBitmask of enabled pads used by v4l2_subdev_enable_streams() and v4l2_subdev_disable_streams() helper functions for fallback cases.”…”�”}”(hjÏbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÌbubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj°bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jËbh´MhjÒ[ubjV)�”}”(hŒ~``s_stream_enabled`` Tracks whether streaming has been enabled with s_stream. This is only for call_s_stream() internal use. ”h]”(j\)�”}”(hŒ``s_stream_enabled``”h]”hú)�”}”(hjðbh]”hŒs_stream_enabled”…”�”}”(hjòbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjîbubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjêbubjv)�”}”(hhh]”hÞ)�”}”(hŒgTracks whether streaming has been enabled with s_stream. This is only for call_s_stream() internal use.”h]”hŒgTracks whether streaming has been enabled with s_stream. This is only for call_s_stream() internal use.”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjêbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jch´MhjÒ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj€[ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj,ch]”hŒ Description”…”�”}”(hj.ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj*cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€[ubhÞ)�”}”(hŒnEach instance of a subdev driver should create this struct, either stand-alone or embedded in a larger struct.”h]”hŒnEach instance of a subdev driver should create this struct, either stand-alone or embedded in a larger struct.”…”�”}”(hjBch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€[ubhÞ)�”}”(hŒ‚This structure should be initialized by v4l2_subdev_init() or one of its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init().”h]”hŒ‚This structure should be initialized by v4l2_subdev_init() or one of its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init().”…”�”}”(hjQch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%media_entity_to_v4l2_subdev (C macro)”Œc.media_entity_to_v4l2_subdev”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒmedia_entity_to_v4l2_subdev”h]”j{)�”}”(hŒmedia_entity_to_v4l2_subdev”h]”j¤)�”}”(hŒmedia_entity_to_v4l2_subdev”h]”jª)�”}”(hjzch]”hŒmedia_entity_to_v4l2_subdev”…”�”}”(hj„ch²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj€cubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj|ch²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MHubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjxch²hh³j—ch´MHubah}”(h]”jscah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j—ch´MHhjuch²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjuch²hh³j—ch´MHubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j°cjøj°cjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ%``media_entity_to_v4l2_subdev (ent)``”h]”hú)�”}”(hj¶ch]”hŒ!media_entity_to_v4l2_subdev (ent)”…”�”}”(hj¸ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj´cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MJhjMh²hubjŸ)�”}”(hŒ{Returns a :c:type:`struct v4l2_subdev ` from the :c:type:`struct media_entity ` embedded in it. ”h]”hÞ)�”}”(hŒzReturns a :c:type:`struct v4l2_subdev ` from the :c:type:`struct media_entity ` embedded in it.”h]”(hŒ Returns a ”…”�”}”(hjÐch²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjÚch]”hŒstruct v4l2_subdev”…”�”}”(hjÜch²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjØcubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MHhjÐcubhŒ from the ”…”�”}”(hjÐch²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct media_entity `”h]”hú)�”}”(hjþch]”hŒstruct media_entity”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjücubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_entity”uh1hh³j÷ch´MHhjÐcubhŒ embedded in it.”…”�”}”(hjÐch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j÷ch´MHhjÌcubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j÷ch´MHhjMh²hubjý)�”}”(hŒR**Parameters** ``ent`` pointer to :c:type:`struct media_entity `.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj1dh]”hŒ Parameters”…”�”}”(hj3dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj/dubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MLhj+dubjQ)�”}”(hhh]”jV)�”}”(hŒ@``ent`` pointer to :c:type:`struct media_entity `.”h]”(j\)�”}”(hŒ``ent``”h]”hú)�”}”(hjPdh]”hŒent”…”�”}”(hjRdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjNdubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MNhjJdubjv)�”}”(hhh]”hÞ)�”}”(hŒ8pointer to :c:type:`struct media_entity `.”h]”(hŒ pointer to ”…”�”}”(hjidh²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct media_entity `”h]”hú)�”}”(hjsdh]”hŒstruct media_entity”…”�”}”(hjudh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjqdubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_entity”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MKhjidubhŒ.”…”�”}”(hjidh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�dh´MKhjfdubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjJdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jedh´MNhjGdubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj+dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒvdev_to_v4l2_subdev (C macro)”Œc.vdev_to_v4l2_subdev”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒvdev_to_v4l2_subdev”h]”j{)�”}”(hŒvdev_to_v4l2_subdev”h]”j¤)�”}”(hŒvdev_to_v4l2_subdev”h]”jª)�”}”(hjÇdh]”hŒvdev_to_v4l2_subdev”…”�”}”(hjÑdh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÍdubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÉdh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MWubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÅdh²hh³jädh´MWubah}”(h]”jÀdah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jädh´MWhjÂdh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÂdh²hh³jädh´MWubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷jýdjøjýdjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ``vdev_to_v4l2_subdev (vdev)``”h]”hú)�”}”(hjeh]”hŒvdev_to_v4l2_subdev (vdev)”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MYhjMh²hubjŸ)�”}”(hŒ{Returns a :c:type:`struct v4l2_subdev ` from the :c:type:`struct video_device ` embedded on it. ”h]”hÞ)�”}”(hŒzReturns a :c:type:`struct v4l2_subdev ` from the :c:type:`struct video_device ` embedded on it.”h]”(hŒ Returns a ”…”�”}”(hjeh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj'eh]”hŒstruct v4l2_subdev”…”�”}”(hj)eh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj%eubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MWhjeubhŒ from the ”…”�”}”(hjeh²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct video_device `”h]”hú)�”}”(hjKeh]”hŒstruct video_device”…”�”}”(hjMeh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjIeubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ video_device”uh1hh³jDe• h´MWhjeubhŒ embedded on it.”…”�”}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jDeh´MWhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jDeh´MWhjMh²hubjý)�”}”(hŒR**Parameters** ``vdev`` pointer to :c:type:`struct video_device `”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj~eh]”hŒ Parameters”…”�”}”(hj€eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj|eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M[hjxeubjQ)�”}”(hhh]”jV)�”}”(hŒ@``vdev`` pointer to :c:type:`struct video_device `”h]”(j\)�”}”(hŒ``vdev``”h]”hú)�”}”(hj�eh]”hŒvdev”…”�”}”(hjŸeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj›eubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M]hj—eubjv)�”}”(hhh]”hÞ)�”}”(hŒ7pointer to :c:type:`struct video_device `”h]”(hŒ pointer to ”…”�”}”(hj¶eh²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct video_device `”h]”hú)�”}”(hjÀeh]”hŒstruct video_device”…”�”}”(hjÂeh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¾eubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ video_device”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MZhj¶eubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÝeh´MZhj³eubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj—eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j²eh´M]hj”eubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjxeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_fh (C struct)”Œc.v4l2_subdev_fh”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_fh”h]”j{)�”}”(hŒstruct v4l2_subdev_fh”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$fh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjfh²hh³j#fh´M_ubj¤)�”}”(hŒv4l2_subdev_fh”h]”jª)�”}”(hjfh]”hŒv4l2_subdev_fh”…”�”}”(hj6fh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj2fubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjfh²hh³j#fh´M_ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjfh²hh³j#fh´M_ubah}”(h]”j fah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j#fh´M_hj fh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ3Used for storing subdev information per file handle”h]”hŒ3Used for storing subdev information per file handle”…”�”}”(hjXfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M`hjUfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj fh²hh³j#fh´M_ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jöjj÷jpfjøjpfjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Definition**:: struct v4l2_subdev_fh { struct v4l2_fh vfh; struct module *owner; #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API); struct v4l2_subdev_state *state; u64 client_caps; #endif; }; **Members** ``vfh`` pointer to :c:type:`struct v4l2_fh ` ``owner`` module pointer to the owner of this file handle ``state`` pointer to :c:type:`struct v4l2_subdev_state ` ``client_caps`` bitmask of ``V4L2_SUBDEV_CLIENT_CAP_*``”h]”(jŸ)�”}”(hŒä**Definition**:: struct v4l2_subdev_fh { struct v4l2_fh vfh; struct module *owner; #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API); struct v4l2_subdev_state *state; u64 client_caps; #endif; }; ”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jÄ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj€fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj|fubhŒ:”…”�”}”(hj|fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mdhjxfubj>)�”}”(hŒÁstruct v4l2_subdev_fh { struct v4l2_fh vfh; struct module *owner; #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API); struct v4l2_subdev_state *state; u64 client_caps; #endif; };”h]”hŒÁstruct v4l2_subdev_fh { struct v4l2_fh vfh; struct module *owner; #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API); struct v4l2_subdev_state *state; u64 client_caps; #endif; };”…”�”}”hj™fsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mfhjxfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j˜fh´MdhjtfubhÞ)�”}”(hŒ **Members**”h]”jÄ)�”}”(hj°fh]”hŒMembers”…”�”}”(hj²fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj®fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MohjtfubjQ)�”}”(hhh]”(jV)�”}”(hŒ6``vfh`` pointer to :c:type:`struct v4l2_fh ` ”h]”(j\)�”}”(hŒ``vfh``”h]”hú)�”}”(hjÏfh]”hŒvfh”…”�”}”(hjÑfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÍfubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MchjÉfubjv)�”}”(hhh]”hÞ)�”}”(hŒ-pointer to :c:type:`struct v4l2_fh `”h]”(hŒ pointer to ”…”�”}”(hjèfh²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct v4l2_fh `”h]”hú)�”}”(hjòfh]”hŒstruct v4l2_fh”…”�”}”(hjôfh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjðfubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_fh”uh1hh³jäfh´Mchjèfubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jäfh´Mchjåfubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÉfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jäfh´MchjÆfubjV)�”}”(hŒ:``owner`` module pointer to the owner of this file handle ”h]”(j\)�”}”(hŒ ``owner``”h]”hú)�”}”(hj'gh]”hŒowner”…”�”}”(hj)gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj%gubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mehj!gubjv)�”}”(hhh]”hÞ)�”}”(hŒ/module pointer to the owner of this file handle”h]”hŒ/module pointer to the owner of this file handle”…”�”}”(hj@gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j` ”h]”(j\)�”}”(hŒ ``state``”h]”hú)�”}”(hj`gh]”hŒstate”…”�”}”(hjbgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj^gubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MdhjZgubjv)�”}”(hhh]”hÞ)�”}”(hŒApointer to :c:type:`struct v4l2_subdev_state `”h]”(hŒ pointer to ”…”�”}”(hjygh²hh³Nh´Nubh)�”}”(hŒ6:c:type:`struct v4l2_subdev_state `”h]”hú)�”}”(hjƒgh]”hŒstruct v4l2_subdev_state”…”�”}”(hj…gh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj�gubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_state”uh1hh³jugh´Mdhjygubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jugh´Mdhjvgubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjZgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jugh´MdhjÆfubjV)�”}”(hŒ7``client_caps`` bitmask of ``V4L2_SUBDEV_CLIENT_CAP_*``”h]”(j\)�”}”(hŒ``client_caps``”h]”hú)�”}”(hj¸gh]”hŒ client_caps”…”�”}”(hjºgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¶gubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mehj²gubjv)�”}”(hhh]”hÞ)�”}”(hŒ'bitmask of ``V4L2_SUBDEV_CLIENT_CAP_*``”h]”(hŒ bitmask of ”…”�”}”(hjÑgh²hh³Nh´Nubhú)�”}”(hŒ``V4L2_SUBDEV_CLIENT_CAP_*``”h]”hŒV4L2_SUBDEV_CLIENT_CAP_*”…”�”}”(hjÙgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÑgubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MfhjÎgubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj²gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÍgh´MehjÆfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjtfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒto_v4l2_subdev_fh (C macro)”Œc.to_v4l2_subdev_fh”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒto_v4l2_subdev_fh”h]”j{)�”}”(hŒto_v4l2_subdev_fh”h]”j¤)�”}”(hŒto_v4l2_subdev_fh”h]”jª)�”}”(hjhh]”hŒto_v4l2_subdev_fh”…”�”}”(hj$hh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj hubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjhh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mqubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjhh²hh³j7hh´Mqubah}”(h]”jhah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j7hh´Mqhjhh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjhh²hh³j7hh´Mqubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷jPhjøjPhjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ``to_v4l2_subdev_fh (fh)``”h]”hú)�”}”(hjVhh]”hŒto_v4l2_subdev_fh (fh)”…”�”}”(hjXhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjThubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MshjMh²hubjŸ)�”}”(hŒwReturns a :c:type:`struct v4l2_subdev_fh ` from the :c:type:`struct v4l2_fh ` embedded on it. ”h]”hÞ)�”}”(hŒvReturns a :c:type:`struct v4l2_subdev_fh ` from the :c:type:`struct v4l2_fh ` embedded on it.”h]”(hŒ Returns a ”…”�”}”(hjphh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`struct v4l2_subdev_fh `”h]”hú)�”}”(hjzhh]”hŒstruct v4l2_subdev_fh”…”�”}”(hj|hh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjxhubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_fh”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MqhjphubhŒ from the ”…”�”}”(hjphh²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct v4l2_fh `”h]”hú)�”}”(hjžhh]”hŒstruct v4l2_fh”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjœhubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_fh”uh1hh³j—hh´MqhjphubhŒ embedded on it.”…”�”}”(hjphh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j—hh´Mqhjlhubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j—hh´MqhjMh²hubjý)�”}”(hŒF**Parameters** ``fh`` pointer to :c:type:`struct v4l2_fh `”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÑhh]”hŒ Parameters”…”�”}”(hjÓhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÏhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MuhjËhubjQ)�”}”(hhh]”jV)�”}”(hŒ4``fh`` pointer to :c:type:`struct v4l2_fh `”h]”(j\)�”}”(hŒ``fh``”h]”hú)�”}”(hjðhh]”hŒfh”…”�”}”(hjòhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjîhubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mwhjêhubjv)�”}”(hhh]”hÞ)�”}”(hŒ-pointer to :c:type:`struct v4l2_fh `”h]”(hŒ pointer to ”…”�”}”(hj ih²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct v4l2_fh `”h]”hú)�”}”(hjih]”hŒstruct v4l2_fh”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjiubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_fh”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mthj iubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j0ih´Mthjiubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjêhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jih´Mwhjçhubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjËhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_set_subdevdata (C function)”Œc.v4l2_set_subdevdata”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ:void v4l2_set_subdevdata (struct v4l2_subdev *sd, void *p)”h]”j{)�”}”(hŒ9void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjkih²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jiihjeih²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjeih²hh³jzih´M|ubj¤)�”}”(hŒv4l2_set_subdevdata”h]”jª)�”}”(hŒv4l2_set_subdevdata”h]”hŒv4l2_set_subdevdata”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj‰iubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjeih²hh³jzih´M|ubhŒdesc_parameterlist”“”)�”}”(hŒ!(struct v4l2_subdev *sd, void *p)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj­ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©iubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj©iubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjËih²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÈiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”Œ identifier”Œ reftarget”jÍiŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j׌ ASTIdentifier”“”)�”}”jáij�isbŒc.v4l2_set_subdevdata”†”asbuh1hhj©iubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj©iubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjþih²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jüihj©iubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj©iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj£iubj¨i)�”}”(hŒvoid *p”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj&jh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj"jubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4jh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj"jubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjBjh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj"jubjª)�”}”(hj jh]”hŒp”…”�”}”(hjOjh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj"jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj£iubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjeih²hh³jzih´M|ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjaih²hh³jzih´M|ubah}”(h]”j\iah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jzih´M|hj^ih²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ!Sets V4L2 dev private device data”h]”hŒ!Sets V4L2 dev private device data”…”�”}”(hjxjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M|hjujh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj^ih²hh³jzih´M|ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j�jjøj�jjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ¢**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``void *p`` pointer to the private device data to be stored.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjšjh]”hŒ Parameters”…”�”}”(hjœjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj˜jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M€hj”jubjQ)�”}”(hhh]”(jV)�”}”(hŒQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj¹jh]”hŒstruct v4l2_subdev *sd”…”�”}”(hj»jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj·jubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M~hj³jubjv)�”}”(hhh]”hÞ)�”}”(hŒ5pointer to :c:type:`struct v4l2_subdev `”h]”(hŒ pointer to ”…”�”}”(hjÒjh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjÜjh]”hŒstruct v4l2_subdev”…”�”}”(hjÞjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÚjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jÎjh´M~hjÒjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎjh´M~hjÏjubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj³jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÎjh´M~hj°jubjV)�”}”(hŒ<``void *p`` pointer to the private device data to be stored.”h]”(j\)�”}”(hŒ ``void *p``”h]”hú)�”}”(hjkh]”hŒvoid *p”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M€hj kubjv)�”}”(hhh]”hÞ)�”}”(hŒ0pointer to the private device data to be stored.”h]”hŒ0pointer to the private device data to be stored.”…”�”}”(hj*kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj'kubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j&kh´M€hj°jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj”jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_get_subdevdata (C function)”Œc.v4l2_get_subdevdata”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ9void * v4l2_get_subdevdata (const struct v4l2_subdev *sd)”h]”j{)�”}”(hŒ7void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjkkh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjgkh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‡ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjgkh²hh³jykh´M‡ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjˆkh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjgkh²hh³jykh´M‡ubj¤)�”}”(hŒv4l2_get_subdevdata”h]”jª)�”}”(hŒv4l2_get_subdevdata”h]”hŒv4l2_get_subdevdata”…”�”}”(hj™kh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj•kubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjgkh²hh³jykh´M‡ubj¢i)�”}”(hŒ(const struct v4l2_subdev *sd)”h]”j¨i)�”}”(hŒconst struct v4l2_subdev *sd”h]”(j�)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjµkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±kubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±kubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÑkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±kubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±kubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjïkh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjìkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jñkŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij›ksbŒc.v4l2_get_subdevdata”†”asbuh1hhj±kubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±kubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj±kubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj*lh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj±kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj­kubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjgkh²hh³jykh´M‡ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjckh²hh³jykh´M‡ubah}”(h]”j^kah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jykh´M‡hj`kh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ!Gets V4L2 dev private device data”h]”hŒ!Gets V4L2 dev private device data”…”�”}”(hjTlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‡hjQlh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj`kh²hh³jykh´M‡ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jlljøjlljù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ·**Parameters** ``const struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` **Description** Returns the pointer to the private device data to be stored.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjvlh]”hŒ Parameters”…”�”}”(hjxlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjtlubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‹hjplubjQ)�”}”(hhh]”jV)�”}”(hŒW``const struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ ``const struct v4l2_subdev *sd``”h]”hú)�”}”(hj•lh]”hŒconst struct v4l2_subdev *sd”…”�”}”(hj—lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj“lubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‰hj�lubjv)�”}”(hhh]”hÞ)�”}”(hŒ5pointer to :c:type:`struct v4l2_subdev `”h]”(hŒ pointer to ”…”�”}”(hj®lh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj¸lh]”hŒstruct v4l2_subdev”…”�”}”(hjºlh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¶lubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jªlh´M‰hj®lubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jªlh´M‰hj«lubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jªlh´M‰hjŒlubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjplubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjïlh]”hŒ Description”…”�”}”(hjñlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjílubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‹hjplubhÞ)�”}”(hŒvoid v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4mh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj0mh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCmh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj0mh²hh³jBmh´M“ubj¤)�”}”(hŒv4l2_set_subdev_hostdata”h]”jª)�”}”(hŒv4l2_set_subdev_hostdata”h]”hŒv4l2_set_subdev_hostdata”…”�”}”(hjUmh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjQmubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj0mh²hh³jBmh´M“ubj¢i)�”}”(hŒ!(struct v4l2_subdev *sd, void *p)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjqmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmmubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~mh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjmmubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjŒmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j‘mŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijWmsbŒc.v4l2_set_subdev_hostdata”†”asbuh1hhjmmubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯mh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjmmubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj½mh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjmmubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjÊmh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjmmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjimubj¨i)�”}”(hŒvoid *p”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãmh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjßmubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñmh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjßmubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjÿmh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjßmubjª)�”}”(hj jh]”hŒp”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjßmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjimubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj0mh²hh³jBmh´M“ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj,mh²hh³jBmh´M“ubah}”(h]”j'mah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jBmh´M“hj)mh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒSets V4L2 dev private host data”h]”hŒSets V4L2 dev private host data”…”�”}”(hj5nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M“hj2nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj)mh²hh³jBmh´M“ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jMnjøjMnjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ›**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``void *p`` pointer to the private data to be stored.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjWnh]”hŒ Parameters”…”�”}”(hjYnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjUnubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M—hjQnubjQ)�”}”(hhh]”(jV)�”}”(hŒQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjvnh]”hŒstruct v4l2_subdev *sd”…”�”}”(hjxnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjtnubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M•hjpnubjv)�”}”(hhh]”hÞ)�”}”(hŒ5pointer to :c:type:`struct v4l2_subdev `”h]”(hŒ pointer to ”…”�”}”(hj�nh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj™nh]”hŒstruct v4l2_subdev”…”�”}”(hj›nh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj—nubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³j‹nh´M•hj�nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‹nh´M•hjŒnubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjpnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‹nh´M•hjmnubjV)�”}”(hŒ5``void *p`` pointer to the private data to be stored.”h]”(j\)�”}”(hŒ ``void *p``”h]”hú)�”}”(hjÎnh]”hŒvoid *p”…”�”}”(hjÐnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÌnubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M—hjÈnubjv)�”}”(hhh]”hÞ)�”}”(hŒ)pointer to the private data to be stored.”h]”hŒ)pointer to the private data to be stored.”…”�”}”(hjçnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M–hjänubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÈnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jãnh´M—hjmnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjQnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%v4l2_get_subdev_hostdata (C function)”Œc.v4l2_get_subdev_hostdata”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ>void * v4l2_get_subdev_hostdata (const struct v4l2_subdev *sd)”h]”j{)�”}”(hŒ` **Description** Returns the pointer to the private host data to be stored.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj2ph]”hŒ Parameters”…”�”}”(hj4ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj0pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢hj,pubjQ)�”}”(hhh]”jV)�”}”(hŒW``const struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ ``const struct v4l2_subdev *sd``”h]”hú)�”}”(hjQph]”hŒconst struct v4l2_subdev *sd”…”�”}”(hjSph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjOpubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjKpubjv)�”}”(hhh]”hÞ)�”}”(hŒ5pointer to :c:type:`struct v4l2_subdev `”h]”(hŒ pointer to ”…”�”}”(hjjph²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjtph]”hŒstruct v4l2_subdev”…”�”}”(hjvph²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjrpubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jfph´M hjjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jfph´M hjgpubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjKpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jfph´M hjHpubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj,pubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj«ph]”hŒ Description”…”�”}”(hj­ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj©pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢hj,pubhÞ)�”}”(hŒ:Returns the pointer to the private host data to be stored.”h]”hŒ:Returns the pointer to the private host data to be stored.”…”�”}”(hjÁph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¡hj,pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ.v4l2_subdev_get_fwnode_pad_1_to_1 (C function)”Œ#c.v4l2_subdev_get_fwnode_pad_1_to_1”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒeint v4l2_subdev_get_fwnode_pad_1_to_1 (struct media_entity *entity, struct fwnode_endpoint *endpoint)”h]”j{)�”}”(hŒdint v4l2_subdev_get_fwnode_pad_1_to_1(struct media_entity *entity, struct fwnode_endpoint *endpoint)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjðph²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjìph²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¬ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿph²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjìph²hh³jþph´M¬ubj¤)�”}”(hŒ!v4l2_subdev_get_fwnode_pad_1_to_1”h]”jª)�”}”(hŒ!v4l2_subdev_get_fwnode_pad_1_to_1”h]”hŒ!v4l2_subdev_get_fwnode_pad_1_to_1”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj qubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjìph²hh³jþph´M¬ubj¢i)�”}”(hŒ?(struct media_entity *entity, struct fwnode_endpoint *endpoint)”h]”(j¨i)�”}”(hŒstruct media_entity *entity”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj-qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)qubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:qh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj)qubh)�”}”(hhh]”jª)�”}”(hŒ media_entity”h]”hŒ media_entity”…”�”}”(hjKqh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjHqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jMqŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijqsbŒ#c.v4l2_subdev_get_fwnode_pad_1_to_1”†”asbuh1hhj)qubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkqh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj)qubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjyqh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj)qubjª)�”}”(hŒentity”h]”hŒentity”…”�”}”(hj†qh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj)qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj%qubj¨i)�”}”(hŒ struct fwnode_endpoint *endpoint”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŸqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›qubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬qh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj›qubh)�”}”(hhh]”jª)�”}”(hŒfwnode_endpoint”h]”hŒfwnode_endpoint”…”�”}”(hj½qh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjºqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j¿qŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jgqŒ#c.v4l2_subdev_get_fwnode_pad_1_to_1”†”asbuh1hhj›qubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛqh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj›qubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjéqh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj›qubjª)�”}”(hŒendpoint”h]”hŒendpoint”…”�”}”(hjöqh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj›qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj%qubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjìph²hh³jþph´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjèph²hh³jþph´M¬ubah}”(h]”jãpah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jþph´M¬hjåph²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒCGet pad number from a subdev fwnode endpoint, assuming 1:1 port:pad”h]”hŒCGet pad number from a subdev fwnode endpoint, assuming 1:1 port:pad”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¬hjrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjåph²hh³jþph´M¬ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j8rjøj8rjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXÂ**Parameters** ``struct media_entity *entity`` Pointer to the subdev entity ``struct fwnode_endpoint *endpoint`` Pointer to a parsed fwnode endpoint **Description** This function can be used as the .get_fwnode_pad operation for subdevices that map port numbers and pad indexes 1:1. If the endpoint is owned by the subdevice, the function returns the endpoint port number. Returns the endpoint port number on success or a negative error code.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjBrh]”hŒ Parameters”…”�”}”(hjDrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj@rubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M°hj` ``struct media_link *link`` pointer to :c:type:`struct media_link ` ``struct v4l2_subdev_format *source_fmt`` pointer to :c:type:`struct v4l2_subdev_format ` ``struct v4l2_subdev_format *sink_fmt`` pointer to :c:type:`struct v4l2_subdev_format ` **Description** This function ensures that width, height and the media bus pixel code are equal on both source and sink of the link.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj[uh]”hŒ Parameters”…”�”}”(hj]uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjYuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhjUuubjQ)�”}”(hhh]”(jV)�”}”(hŒQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjzuh]”hŒstruct v4l2_subdev *sd”…”�”}”(hj|uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjxuubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¿hjtuubjv)�”}”(hhh]”hÞ)�”}”(hŒ5pointer to :c:type:`struct v4l2_subdev `”h]”(hŒ pointer to ”…”�”}”(hj“uh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj�uh]”hŒstruct v4l2_subdev”…”�”}”(hjŸuh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj›uubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³j�uh´M¿hj“uubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�uh´M¿hj�uubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjtuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�uh´M¿hjquubjV)�”}”(hŒP``struct media_link *link`` pointer to :c:type:`struct media_link ` ”h]”(j\)�”}”(hŒ``struct media_link *link``”h]”hú)�”}”(hjÒuh]”hŒstruct media_link *link”…”�”}”(hjÔuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÐuubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjÌuubjv)�”}”(hhh]”hÞ)�”}”(hŒ3pointer to :c:type:`struct media_link `”h]”(hŒ pointer to ”…”�”}”(hjëuh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct media_link `”h]”hú)�”}”(hjõuh]”hŒstruct media_link”…”�”}”(hj÷uh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjóuubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_link”uh1hh³jçuh´MÀhjëuubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jçuh´MÀhjèuubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÌuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jçuh´MÀhjquubjV)�”}”(hŒn``struct v4l2_subdev_format *source_fmt`` pointer to :c:type:`struct v4l2_subdev_format ` ”h]”(j\)�”}”(hŒ)``struct v4l2_subdev_format *source_fmt``”h]”hú)�”}”(hj*vh]”hŒ%struct v4l2_subdev_format *source_fmt”…”�”}”(hj,vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj(vubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhj$vubjv)�”}”(hhh]”hÞ)�”}”(hŒCpointer to :c:type:`struct v4l2_subdev_format `”h]”(hŒ pointer to ”…”�”}”(hjCvh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_subdev_format `”h]”hú)�”}”(hjMvh]”hŒstruct v4l2_subdev_format”…”�”}”(hjOvh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjKvubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_format”uh1hh³j?vh´MÁhjCvubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j?vh´MÁhj@vubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj$vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j?vh´MÁhjquubjV)�”}”(hŒl``struct v4l2_subdev_format *sink_fmt`` pointer to :c:type:`struct v4l2_subdev_format ` ”h]”(j\)�”}”(hŒ'``struct v4l2_subdev_format *sink_fmt``”h]”hú)�”}”(hj‚vh]”hŒ#struct v4l2_subdev_format *sink_fmt”…”�”}”(hj„vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj€vubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÂhj|vubjv)�”}”(hhh]”hÞ)�”}”(hŒCpointer to :c:type:`struct v4l2_subdev_format `”h]”(hŒ pointer to ”…”�”}”(hj›vh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_subdev_format `”h]”hú)�”}”(hj¥vh]”hŒstruct v4l2_subdev_format”…”�”}”(hj§vh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj£vubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_format”uh1hh³j—vh´MÂhj›vubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j—vh´MÂhj˜vubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj|vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j—vh´MÂhjquubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjUuubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÜvh]”hŒ Description”…”�”}”(hjÞvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÚvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÄhjUuubhÞ)�”}”(hŒtThis function ensures that width, height and the media bus pixel code are equal on both source and sink of the link.”h]”hŒtThis function ensures that width, height and the media bus pixel code are equal on both source and sink of the link.”…”�”}”(hjòvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÃhjUuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&v4l2_subdev_link_validate (C function)”Œc.v4l2_subdev_link_validate”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ7int v4l2_subdev_link_validate (struct media_link *link)”h]”j{)�”}”(hŒ6int v4l2_subdev_link_validate(struct media_link *link)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hj!wh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjwh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÍubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0wh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjwh²hh³j/wh´MÍubj¤)�”}”(hŒv4l2_subdev_link_validate”h]”jª)�”}”(hŒv4l2_subdev_link_validate”h]”hŒv4l2_subdev_link_validate”…”�”}”(hjBwh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj>wubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjwh²hh³j/wh´MÍubj¢i)�”}”(hŒ(struct media_link *link)”h]”j¨i)�”}”(hŒstruct media_link *link”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj^wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZwubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkwh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjZwubh)�”}”(hhh]”jª)�”}”(hŒ media_link”h]”hŒ media_link”…”�”}”(hj|wh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjywubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j~wŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijDwsbŒc.v4l2_subdev_link_validate”†”asbuh1hhjZwubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœwh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjZwubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjªwh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjZwubjª)�”}”(hŒlink”h]”hŒlink”…”�”}”(hj·wh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjZwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjVwubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjwh²hh³j/wh´MÍubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjwh²hh³j/wh´MÍubah}”(h]”jwah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j/wh´MÍhjwh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒvalidates a media link”h]”hŒvalidates a media link”…”�”}”(hjáwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÍhjÞwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjwh²hh³j/wh´MÍubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jùwjøjùwjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXä**Parameters** ``struct media_link *link`` pointer to :c:type:`struct media_link ` **Description** This function calls the subdev's link_validate ops to validate if a media link is valid for streaming. It also internally calls v4l2_subdev_link_validate_default() to ensure that width, height and the media bus pixel code are equal on both source and sink of the link. The function can be used as a drop-in :c:type:`media_entity_ops.link_validate ` implementation for v4l2_subdev instances. It supports all links between subdevs, as well as links between subdevs and video devices, provided that the video devices also implement their :c:type:`media_entity_ops.link_validate ` operation.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjxh]”hŒ Parameters”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÑhjýwubjQ)�”}”(hhh]”jV)�”}”(hŒP``struct media_link *link`` pointer to :c:type:`struct media_link ` ”h]”(j\)�”}”(hŒ``struct media_link *link``”h]”hú)�”}”(hj"xh]”hŒstruct media_link *link”…”�”}”(hj$xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj xubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÏhjxubjv)�”}”(hhh]”hÞ)�”}”(hŒ3pointer to :c:type:`struct media_link `”h]”(hŒ pointer to ”…”�”}”(hj;xh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct media_link `”h]”hú)�”}”(hjExh]”hŒstruct media_link”…”�”}”(hjGxh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjCxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_link”uh1hh³j7xh´MÏhj;xubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j7xh´MÏhj8xubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j7xh´MÏhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjýwubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj|xh]”hŒ Description”…”�”}”(hj~xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjzxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÑhjýwubhÞ)�”}”(hX This function calls the subdev's link_validate ops to validate if a media link is valid for streaming. It also internally calls v4l2_subdev_link_validate_default() to ensure that width, height and the media bus pixel code are equal on both source and sink of the link.”h]”hXThis function calls the subdev’s link_validate ops to validate if a media link is valid for streaming. It also internally calls v4l2_subdev_link_validate_default() to ensure that width, height and the media bus pixel code are equal on both source and sink of the link.”…”�”}”(hj’xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÐhjýwubhÞ)�”}”(hXbThe function can be used as a drop-in :c:type:`media_entity_ops.link_validate ` implementation for v4l2_subdev instances. It supports all links between subdevs, as well as links between subdevs and video devices, provided that the video devices also implement their :c:type:`media_entity_ops.link_validate ` operation.”h]”(hŒ&The function can be used as a drop-in ”…”�”}”(hj¡xh²hh³Nh´Nubh)�”}”(hŒ;:c:type:`media_entity_ops.link_validate `”h]”hú)�”}”(hj«xh]”hŒmedia_entity_ops.link_validate”…”�”}”(hj­xh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj©xubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒmedia_entity_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÖhj¡xubhŒ» implementation for v4l2_subdev instances. It supports all links between subdevs, as well as links between subdevs and video devices, provided that the video devices also implement their ”…”�”}”(hj¡xh²hh³Nh´Nubh)�”}”(hŒ;:c:type:`media_entity_ops.link_validate `”h]”hú)�”}”(hjÏxh]”hŒmedia_entity_ops.link_validate”…”�”}”(hjÑxh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÍxubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒmedia_entity_ops”uh1hh³jÈxh´MÖhj¡xubhŒ operation.”…”�”}”(hj¡xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÈxh´MÖhjýwubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ)v4l2_subdev_has_pad_interdep (C function)”Œc.v4l2_subdev_has_pad_interdep”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒebool v4l2_subdev_has_pad_interdep (struct media_entity *entity, unsigned int pad0, unsigned int pad1)”h]”j{)�”}”(hŒdbool v4l2_subdev_has_pad_interdep(struct media_entity *entity, unsigned int pad0, unsigned int pad1)”h]”(jji)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjyh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Màubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%yh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjyh²hh³j$yh´Màubj¤)�”}”(hŒv4l2_subdev_has_pad_interdep”h]”jª)�”}”(hŒv4l2_subdev_has_pad_interdep”h]”hŒv4l2_subdev_has_pad_interdep”…”�”}”(hj7yh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj3yubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjyh²hh³j$yh´Màubj¢i)�”}”(hŒC(struct media_entity *entity, unsigned int pad0, unsigned int pad1)”h]”(j¨i)�”}”(hŒstruct media_entity *entity”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjSyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`yh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjOyubh)�”}”(hhh]”jª)�”}”(hŒ media_entity”h]”hŒ media_entity”…”�”}”(hjqyh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjnyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jsyŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij9ysbŒc.v4l2_subdev_has_pad_interdep”†”asbuh1hhjOyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘yh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjOyubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjŸyh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjOyubjª)�”}”(hŒentity”h]”hŒentity”…”�”}”(hj¬yh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjOyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjKyubj¨i)�”}”(hŒunsigned int pad0”h]”(jji)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÅyh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjÁyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁyubjji)�”}”(hŒint”h]”hŒint”…”�”}”(hjáyh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjÁyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁyubjª)�”}”(hŒpad0”h]”hŒpad0”…”�”}”(hjýyh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÁyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjKyubj¨i)�”}”(hŒunsigned int pad1”h]”(jji)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjzubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$zh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjzubjji)�”}”(hŒint”h]”hŒint”…”�”}”(hj2zh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjzubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@zh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjzubjª)�”}”(hŒpad1”h]”hŒpad1”…”�”}”(hjNzh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjKyubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjyh²hh³j$yh´Màubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjyh²hh³j$yh´Màubah}”(h]”j yah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j$yh´Màhj yh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ.MC has_pad_interdep implementation for subdevs”•h]”hŒ.MC has_pad_interdep implementation for subdevs”…”�”}”(hjxzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Màhjuzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj yh²hh³j$yh´Màubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j�zjøj�zjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX**Parameters** ``struct media_entity *entity`` pointer to :c:type:`struct media_entity ` ``unsigned int pad0`` pad number for the first pad ``unsigned int pad1`` pad number for the second pad **Description** This function is an implementation of the media_entity_operations.has_pad_interdep operation for subdevs that implement the multiplexed streams API (as indicated by the V4L2_SUBDEV_FL_STREAMS subdev flag). It considers two pads interdependent if there is an active route between pad0 and pad1.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjšzh]”hŒ Parameters”…”�”}”(hjœzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj˜zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mähj”zubjQ)�”}”(hhh]”(jV)�”}”(hŒX``struct media_entity *entity`` pointer to :c:type:`struct media_entity ` ”h]”(j\)�”}”(hŒ``struct media_entity *entity``”h]”hú)�”}”(hj¹zh]”hŒstruct media_entity *entity”…”�”}”(hj»zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj·zubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mâhj³zubjv)�”}”(hhh]”hÞ)�”}”(hŒ7pointer to :c:type:`struct media_entity `”h]”(hŒ pointer to ”…”�”}”(hjÒzh²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct media_entity `”h]”hú)�”}”(hjÜzh]”hŒstruct media_entity”…”�”}”(hjÞzh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÚzubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ media_entity”uh1hh³jÎzh´MâhjÒzubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎzh´MâhjÏzubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj³zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÎzh´Mâhj°zubjV)�”}”(hŒ3``unsigned int pad0`` pad number for the first pad ”h]”(j\)�”}”(hŒ``unsigned int pad0``”h]”hú)�”}”(hj{h]”hŒunsigned int pad0”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mãhj {ubjv)�”}”(hhh]”hÞ)�”}”(hŒpad number for the first pad”h]”hŒpad number for the first pad”…”�”}”(hj*{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&{h´Mãhj'{ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj {ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j&{h´Mãhj°zubjV)�”}”(hŒ4``unsigned int pad1`` pad number for the second pad ”h]”(j\)�”}”(hŒ``unsigned int pad1``”h]”hú)�”}”(hjJ{h]”hŒunsigned int pad1”…”�”}”(hjL{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjH{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MähjD{ubjv)�”}”(hhh]”hÞ)�”}”(hŒpad number for the second pad”h]”hŒpad number for the second pad”…”�”}”(hjc{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j_{h´Mähj`{ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjD{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j_{h´Mähj°zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj”zubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj…{h]”hŒ Description”…”�”}”(hj‡{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjƒ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhj”zubhÞ)�”}”(hŒÍThis function is an implementation of the media_entity_operations.has_pad_interdep operation for subdevs that implement the multiplexed streams API (as indicated by the V4L2_SUBDEV_FL_STREAMS subdev flag).”h]”hŒÍThis function is an implementation of the media_entity_operations.has_pad_interdep operation for subdevs that implement the multiplexed streams API (as indicated by the V4L2_SUBDEV_FL_STREAMS subdev flag).”…”�”}”(hj›{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Måhj”zubhÞ)�”}”(hŒWIt considers two pads interdependent if there is an active route between pad0 and pad1.”h]”hŒWIt considers two pads interdependent if there is an active route between pad0 and pad1.”…”�”}”(hjª{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mêhj”zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&__v4l2_subdev_state_alloc (C function)”Œc.__v4l2_subdev_state_alloc”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ€struct v4l2_subdev_state * __v4l2_subdev_state_alloc (struct v4l2_subdev *sd, const char *lock_name, struct lock_class_key *key)”h]”j{)�”}”(hŒ~struct v4l2_subdev_state *__v4l2_subdev_state_alloc(struct v4l2_subdev *sd, const char *lock_name, struct lock_class_key *key)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÙ{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ{h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mòubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç{h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÕ{h²hh³jæ{h´Mòubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjø{h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjõ{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jú{Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáiŒ__v4l2_subdev_state_alloc”sbŒc.__v4l2_subdev_state_alloc”†”asbuh1hhjÕ{h²hh³jæ{h´Mòubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÕ{h²hh³jæ{h´Mòubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj'|h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjÕ{h²hh³jæ{h´Mòubj¤)�”}”(hŒ__v4l2_subdev_state_alloc”h]”jª)�”}”(hj|h]”hŒ__v4l2_subdev_state_alloc”…”�”}”(hj8|h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj4|ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÕ{h²hh³jæ{h´Mòubj¢i)�”}”(hŒK(struct v4l2_subdev *sd, const char *lock_name, struct lock_class_key *key)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjS|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjO|ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjq|h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjn|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”js|Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j|Œc.__v4l2_subdev_state_alloc”†”asbuh1hhjO|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjO|ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjO|ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjª|h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjO|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjK|ubj¨i)�”}”(hŒconst char *lock_name”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hjÃ|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¿|ubjji)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÞ|h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¿|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¿|ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjú|h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj¿|ubjª)�”}”(hŒ lock_name”h]”hŒ lock_name”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¿|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjK|ubj¨i)�”}”(hŒstruct lock_class_key *key”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj }h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-}h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}ubh)�”}”(hhh]”jª)�”}”(hŒlock_class_key”h]”hŒlock_class_key”…”�”}”(hj>}h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj;}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j@}Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j|Œc.__v4l2_subdev_state_alloc”†”asbuh1hhj}ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\}h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjj}h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj}ubjª)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjw}h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjK|ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjÕ{h²hh³jæ{h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÑ{h²hh³jæ{h´Mòubah}”(h]”jÌ{ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jæ{h´MòhjÎ{h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒallocate v4l2_subdev_state”h]”hŒallocate v4l2_subdev_state”…”�”}”(hj¡}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mòhjž}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÎ{h²hh³jæ{h´Mòubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j¹}jøj¹}jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX~**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` for which the state is being allocated. ``const char *lock_name`` name of the state lock ``struct lock_class_key *key`` lock_class_key for the lock **Description** Must call __v4l2_subdev_state_free() when state is no longer needed. Not to be called directly by the drivers.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÃ}h]”hŒ Parameters”…”�”}”(hjÅ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÁ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Möhj½}ubjQ)�”}”(hhh]”(jV)�”}”(hŒy``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` for which the state is being allocated. ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjâ}h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjä}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjà}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MôhjÜ}ubjv)�”}”(hhh]”hÞ)�”}”(hŒ]pointer to :c:type:`struct v4l2_subdev ` for which the state is being allocated.”h]”(hŒ pointer to ”…”�”}”(hjû}h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj~h]”hŒstruct v4l2_subdev”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³j÷}h´Môhjû}ubhŒ( for which the state is being allocated.”…”�”}”(hjû}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j÷}h´Môhjø}ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÜ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j÷}h´MôhjÙ}ubjV)�”}”(hŒ1``const char *lock_name`` name of the state lock ”h]”(j\)�”}”(hŒ``const char *lock_name``”h]”hú)�”}”(hj>~h]”hŒconst char *lock_name”…”�”}”(hj@~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj<~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mõhj8~ubjv)�”}”(hhh]”hÞ)�”}”(hŒname of the state lock”h]”hŒname of the state lock”…”�”}”(hjW~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jS~h´MõhjT~ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj8~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jS~h´MõhjÙ}ubjV)�”}”(hŒ;``struct lock_class_key *key`` lock_class_key for the lock ”h]”(j\)�”}”(hŒ``struct lock_class_key *key``”h]”hú)�”}”(hjw~h]”hŒstruct lock_class_key *key”…”�”}”(hjy~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhju~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Möhjq~ubjv)�”}”(hhh]”hÞ)�”}”(hŒlock_class_key for the lock”h]”hŒlock_class_key for the lock”…”�”}”(hj�~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŒ~h´Möhj�~ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjq~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jŒ~h´MöhjÙ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj½}ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj²~h]”hŒ Description”…”�”}”(hj´~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj°~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Møhj½}ubhÞ)�”}”(hŒDMust call __v4l2_subdev_state_free() when state is no longer needed.”h]”hŒDMust call __v4l2_subdev_state_free() when state is no longer needed.”…”�”}”(hjÈ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M÷hj½}ubhÞ)�”}”(hŒ)Not to be called directly by the drivers.”h]”hŒ)Not to be called directly by the drivers.”…”�”}”(hj×~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mùhj½}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%__v4l2_subdev_state_free (C function)”Œc.__v4l2_subdev_state_free”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ?void __v4l2_subdev_state_free (struct v4l2_subdev_state *state)”h]”j{)�”}”(hŒ>void __v4l2_subdev_state_free(struct v4l2_subdev_state *state)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjh²hh³jh´Mubj¤)�”}”(hŒ__v4l2_subdev_state_free”h]”jª)�”}”(hŒ__v4l2_subdev_state_free”h]”hŒ__v4l2_subdev_state_free”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj#ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjh²hh³jh´Mubj¢i)�”}”(hŒ!(struct v4l2_subdev_state *state)”h]”j¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jcŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij)sbŒc.__v4l2_subdev_state_free”†”asbuh1hhj?ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj?ubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj;ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjþ~h²hh³jh´Mubah}”(h]”jù~ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jh´Mhjû~h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒfree a v4l2_subdev_state”h]”hŒfree a v4l2_subdev_state”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjû~h²hh³jh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jÞjøjÞjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ�**Parameters** ``struct v4l2_subdev_state *state`` v4l2_subdev_state to be freed. **Description** Not to be called directly by the drivers.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjèh]”hŒ Parameters”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjâubjQ)�”}”(hhh]”jV)�”}”(hŒC``struct v4l2_subdev_state *state`` v4l2_subdev_state to be freed. ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hj€h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj€ubjv)�”}”(hhh]”hÞ)�”}”(hŒv4l2_subdev_state to be freed.”h]”hŒv4l2_subdev_state to be freed.”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j€h´Mhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j€h´Mhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjâubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjB€h]”hŒ Description”…”�”}”(hjD€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj@€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjâubhÞ)�”}”(hŒ)Not to be called directly by the drivers.”h]”hŒ)Not to be called directly by the drivers.”…”�”}”(hjX€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ#v4l2_subdev_init_finalize (C macro)”Œc.v4l2_subdev_init_finalize”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_init_finalize”h]”j{)�”}”(hŒv4l2_subdev_init_finalize”h]”j¤)�”}”(hŒv4l2_subdev_init_finalize”h]”jª)�”}”(hj�€h]”hŒv4l2_subdev_init_finalize”…”�”}”(hj‹€h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj‡€ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjƒ€h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj€h²hh³jž€h´M ubah}”(h]”jz€ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jž€h´M hj|€h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj|€h²hh³jž€h´M ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j·€jøj·€jù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ"``v4l2_subdev_init_finalize (sd)``”h]”hú)�”}”(hj½€h]”hŒv4l2_subdev_init_finalize (sd)”…”�”}”(hj¿€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj»€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjMh²hubjŸ)�”}”(hŒ.Finalizes the initialization of the subdevice ”h]”hÞ)�”}”(hŒ-Finalizes the initialization of the subdevice”h]”hŒ-Finalizes the initialization of the subdevice”…”�”}”(hj×€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjÓ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jå€h´M hjMh²hubjý)�”}”(hXÍ**Parameters** ``sd`` The subdev **Description** This function finalizes the initialization of the subdev, including allocation of the active state for the subdev. This function must be called by the subdev drivers that use the centralized active state, after the subdev struct has been initialized and media_entity_pads_init() has been called, but before registering the subdev. The user must call v4l2_subdev_cleanup() when the subdev is being removed.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjò€h]”hŒ Parameters”…”�”}”(hjô€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjð€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjì€ubjQ)�”}”(hhh]”jV)�”}”(hŒ``sd`` The subdev ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hj�h]”hŒsd”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj �ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdev”h]”hŒ The subdev”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&�h´M hj'�ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj �ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j&�h´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjì€ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjL�h]”hŒ Description”…”�”}”(hjN�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjJ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjì€ubhÞ)�”}”(hŒrThis function finalizes the initialization of the subdev, including allocation of the active state for the subdev.”h]”hŒrThis function finalizes the initialization of the subdev, including allocation of the active state for the subdev.”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjì€ubhÞ)�”}”(hŒ×This function must be called by the subdev drivers that use the centralized active state, after the subdev struct has been initialized and media_entity_pads_init() has been called, but before registering the subdev.”h]”hŒ×This function must be called by the subdev drivers that use the centralized active state, after the subdev struct has been initialized and media_entity_pads_init() has been called, but before registering the subdev.”…”�”}”(hjq�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjì€ubhÞ)�”}”(hŒJThe user must call v4l2_subdev_cleanup() when the subdev is being removed.”h]”hŒJThe user must call v4l2_subdev_cleanup() when the subdev is being removed.”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjì€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_cleanup (C function)”Œc.v4l2_subdev_cleanup”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ1void v4l2_subdev_cleanup (struct v4l2_subdev *sd)”h]”j{)�”}”(hŒ0void v4l2_subdev_cleanup(struct v4l2_subdev *sd)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¯�h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj«�h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M#ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj«�h²hh³j½�h´M#ubj¤)�”}”(hŒv4l2_subdev_cleanup”h]”jª)�”}”(hŒv4l2_subdev_cleanup”h]”hŒv4l2_subdev_cleanup”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÌ�ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj«�h²hh³j½�h´M#ubj¢i)�”}”(hŒ(struct v4l2_subdev *sd)”h]”j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjì�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjè�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjè�ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj ‚h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j ‚Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijÒ�sbŒc.v4l2_subdev_cleanup”†”asbuh1hhjè�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*‚h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjè�ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj8‚h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjè�ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjE‚h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjè�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjä�ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj«�h²hh³j½�h´M#ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj§�h²hh³j½�h´M#ubah}”(h]”j¢�ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j½�h´M#hj¤�h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ1Releases the resources allocated by the subdevice”h]”hŒ1Releases the resources allocated by the subdevice”…”�”}”(hjo‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M#hjl‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¤�h²hh³j½�h´M#ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j‡‚jøj‡‚jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX**Parameters** ``struct v4l2_subdev *sd`` The subdevice **Description** Clean up a V4L2 async sub-device. Must be called for a sub-device as part of its release if resources have been associated with it using v4l2_async_subdev_endpoint_add() or v4l2_subdev_init_finalize().”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj‘‚h]”hŒ Parameters”…”�”}”(hj“‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M'hj‹‚ubjQ)�”}”(hhh]”jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj°‚h]”hŒstruct v4l2_subdev *sd”…”�”}”(hj²‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj®‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M$hjª‚ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjÉ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅ‚h´M$hjÆ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjª‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÅ‚h´M$hj§‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj‹‚ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjë‚h]”hŒ Description”…”�”}”(hjí‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjé‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M&hj‹‚ubhÞ)�”}”(hŒÉClean up a V4L2 async sub-device. Must be called for a sub-device as part of its release if resources have been associated with it using v4l2_async_subdev_endpoint_add() or v4l2_subdev_init_finalize().”h]”hŒÉClean up a V4L2 async sub-device. Must be called for a sub-device as part of its release if resources have been associated with it using v4l2_async_subdev_endpoint_add() or v4l2_subdev_init_finalize().”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M%hj‹‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&v4l2_subdev_state_get_format (C macro)”Œc.v4l2_subdev_state_get_format”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_state_get_format”h]”j{)�”}”(hŒv4l2_subdev_state_get_format”h]”j¤)�”}”(hŒv4l2_subdev_state_get_format”h]”jª)�”}”(hj*ƒh]”hŒv4l2_subdev_state_get_format”…”�”}”(hj4ƒh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj0ƒubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj,ƒh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj(ƒh²hh³jGƒh´M>ubah}”(h]”j#ƒah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jGƒh´M>hj%ƒh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj%ƒh²hh³jGƒh´M>ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j`ƒjøj`ƒjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ2``v4l2_subdev_state_get_format (state, pad, ...)``”h]”hú)�”}”(hjfƒh]”hŒ.v4l2_subdev_state_get_format (state, pad, ...)”…”�”}”(hjhƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjdƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M@hjMh²hubjŸ)�”}”(hŒGet pointer to a stream format ”h]”hÞ)�”}”(hŒGet pointer to a stream format”h]”hŒGet pointer to a stream format”…”�”}”(hj€ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>hj|ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jŽƒh´M>hjMh²hubjý)�”}”(hXv**Parameters** ``state`` subdevice state ``pad`` pad id ``...`` stream id (optional argument) **Description** This returns a pointer to :c:type:`struct v4l2_mbus_framefmt ` for the given pad + stream in the subdev state. For stream-unaware drivers the format for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj›ƒh]”hŒ Parameters”…”�”}”(hj�ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj™ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MBhj•ƒubjQ)�”}”(hhh]”(jV)�”}”(hŒ``state`` subdevice state ”h]”(j\)�”}”(hŒ ``state``”h]”hú)�”}”(hjºƒh]”hŒstate”…”�”}”(hj¼ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¸ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M?hj´ƒubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hjÓƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jσh´M?hjЃubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj´ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jσh´M?hj±ƒubjV)�”}”(hŒ``pad`` pad id ”h]”(j\)�”}”(hŒ``pad``”h]”hú)�”}”(hjóƒh]”hŒpad”…”�”}”(hjõƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjñƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M@hjíƒubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j„h´M@hj „ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjíƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j„h´M@hj±ƒubjV)�”}”(hŒ&``...`` stream id (optional argument) ”h]”(j\)�”}”(hŒ``...``”h]”hú)�”}”(hj,„h]”hŒ...”…”�”}”(hj.„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj*„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MAhj&„ubjv)�”}”(hhh]”hÞ)�”}”(hŒstream id (optional argument)”h]”hŒstream id (optional argument)”…”�”}”(hjE„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jA„h´MAhjB„ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj&„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jA„h´MAhj±ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj•ƒubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjg„h]”hŒ Description”…”�”}”(hji„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhje„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MChj•ƒubhÞ)�”}”(hŒ‚This returns a pointer to :c:type:`struct v4l2_mbus_framefmt ` for the given pad + stream in the subdev state.”h]”(hŒThis returns a pointer to ”…”�”}”(hj}„h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_mbus_framefmt `”h]”hú)�”}”(hj‡„h]”hŒstruct v4l2_mbus_framefmt”…”�”}”(hj‰„h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj…„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_framefmt”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MBhj}„ubhŒ0 for the given pad + stream in the subdev state.”…”�”}”(hj}„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¤„h´MBhj•ƒubhÞ)�”}”(hŒyFor stream-unaware drivers the format for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”hŒyFor stream-unaware drivers the format for the corresponding pad is returned. If the pad does not exist, NULL is returned.”…”�”}”(hj¯„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MEhj•ƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_state_get_crop (C macro)”Œc.v4l2_subdev_state_get_crop”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_state_get_crop”h]”j{)�”}”(hŒv4l2_subdev_state_get_crop”h]”j¤)�”}”(hŒv4l2_subdev_state_get_crop”h]”jª)�”}”(hjØ„h]”hŒv4l2_subdev_state_get_crop”…”�”}”(hjâ„h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÞ„ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÚ„h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Maubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÖ„h²hh³jõ„h´Maubah}”(h]”jÑ„ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jõ„h´MahjÓ„h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÓ„h²hh³jõ„h´Maubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j…jøj…jù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ0``v4l2_subdev_state_get_crop (state, pad, ...)``”h]”hú)�”}”(hj…h]”hŒ,v4l2_subdev_state_get_crop (state, pad, ...)”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MchjMh²hubjŸ)�”}”(hŒ'Get pointer to a stream crop rectangle ”h]”hÞ)�”}”(hŒ&Get pointer to a stream crop rectangle”h]”hŒ&Get pointer to a stream crop rectangle”…”�”}”(hj.…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mahj*…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j<…h´MahjMh²hubjý)�”}”(hXT**Parameters** ``state`` subdevice state ``pad`` pad id ``...`` stream id (optional argument) **Description** This returns a pointer to crop rectangle for the given pad + stream in the subdev state. For stream-unaware drivers the crop rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjI…h]”hŒ Parameters”…”�”}”(hjK…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjG…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MehjC…ubjQ)�”}”(hhh]”(jV)�”}”(hŒ``state`` subdevice state ”h]”(j\)�”}”(hŒ ``state``”h]”hú)�”}”(hjh…h]”hŒstate”…”�”}”(hjj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjf…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mbhjb…ubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j}…h´Mbhj~…ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjb…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j}…h´Mbhj_…ubjV)�”}”(hŒ``pad`` pad id ”h]”(j\)�”}”(hŒ``pad``”h]”hú)�”}”(hj¡…h]”hŒpad”…”�”}”(hj£…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjŸ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mchj›…ubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hjº…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¶…h´Mchj·…ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj›…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¶…h´Mchj_…ubjV)�”}”(hŒ&``...`` stream id (optional argument) ”h]”(j\)�”}”(hŒ``...``”h]”hú)�”}”(hjÚ…h]”hŒ...”…”�”}”(hjÜ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjØ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MdhjÔ…ubjv)�”}”(hhh]”hÞ)�”}”(hŒstream id (optional argument)”h]”hŒstream id (optional argument)”…”�”}”(hjó…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jï…h´Mdhjð…ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÔ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jï…h´Mdhj_…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjC…ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj†h]”hŒ Description”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MfhjC…ubhÞ)�”}”(hŒXThis returns a pointer to crop rectangle for the given pad + stream in the subdev state.”h]”hŒXThis returns a pointer to crop rectangle for the given pad + stream in the subdev state.”…”�”}”(hj+†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MehjC…ubhÞ)�”}”(hŒ�For stream-unaware drivers the crop rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”hŒ�For stream-unaware drivers the crop rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”…”�”}”(hj:†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhhjC…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ'v4l2_subdev_state_get_compose (C macro)”Œc.v4l2_subdev_state_get_compose”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_state_get_compose”h]”j{)�”}”(hŒv4l2_subdev_state_get_compose”h]”j¤)�”}”(hŒv4l2_subdev_state_get_compose”h]”jª)�”}”(hjc†h]”hŒv4l2_subdev_state_get_compose”…”�”}”(hjm†h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hji†ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hje†h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mwubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhja†h²hh³j€†h´Mwubah}”(h]”j\†ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j€†h´Mwhj^†h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj^†h²hh³j€†h´Mwubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j™†jøj™†jù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ3``v4l2_subdev_state_get_compose (state, pad, ...)``”h]”hú)�”}”(hjŸ†h]”hŒ/v4l2_subdev_state_get_compose (state, pad, ...)”…”�”}”(hj¡†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MyhjMh²hubjŸ)�”}”(hŒ*Get pointer to a stream compose rectangle ”h]”hÞ)�”}”(hŒ)Get pointer to a stream compose rectangle”h]”hŒ)Get pointer to a stream compose rectangle”…”�”}”(hj¹†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mwhjµ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jdžh´MwhjMh²hubjý)�”}”(hXZ**Parameters** ``state`` subdevice state ``pad`` pad id ``...`` stream id (optional argument) **Description** This returns a pointer to compose rectangle for the given pad + stream in the subdev state. For stream-unaware drivers the compose rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÔ†h]”hŒ Parameters”…”�”}”(hjÖ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÒ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M{hjΆubjQ)�”}”(hhh]”(jV)�”}”(hŒ``state`` subdevice state ”h]”(j\)�”}”(hŒ ``state``”h]”hú)�”}”(hjó†h]”hŒstate”…”�”}”(hjõ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjñ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mxhjí†ubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hj ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‡h´Mxhj ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjí†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‡h´Mxhjê†ubjV)�”}”(hŒ``pad`` pad id ”h]”(j\)�”}”(hŒ``pad``”h]”hú)�”}”(hj,‡h]”hŒpad”…”�”}”(hj.‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj*‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Myhj&‡ubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hjE‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jA‡h´MyhjB‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj&‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jA‡h´Myhjê†ubjV)�”}”(hŒ&``...`` stream id (optional argument) ”h]”(j\)�”}”(hŒ``...``”h]”hú)�”}”(hje‡h]”hŒ...”…”�”}”(hjg‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjc‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mzhj_‡ubjv)�”}”(hhh]”hÞ)�”}”(hŒstream id (optional argument)”h]”hŒstream id (optional argument)”…”�”}”(hj~‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jz‡h´Mzhj{‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj_‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jz‡h´Mzhjê†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjΆubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj ‡h]”hŒ Description”…”�”}”(hj¢‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjž‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M|hjΆubhÞ)�”}”(hŒ[This returns a pointer to compose rectangle for the given pad + stream in the subdev state.”h]”hŒ[This returns a pointer to compose rectangle for the given pad + stream in the subdev state.”…”�”}”(hj¶‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M{hjΆubhÞ)�”}”(hŒ„For stream-unaware drivers the compose rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”hŒ„For stream-unaware drivers the compose rectangle for the corresponding pad is returned. If the pad does not exist, NULL is returned.”…”�”}”(hjŇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M~hjΆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ(v4l2_subdev_state_get_interval (C macro)”Œ c.v4l2_subdev_state_get_interval”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_state_get_interval”h]”j{)�”}”(hŒv4l2_subdev_state_get_interval”h]”j¤)�”}”(hŒv4l2_subdev_state_get_interval”h]”jª)�”}”(hjî‡h]”hŒv4l2_subdev_state_get_interval”…”�”}”(hjø‡h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjô‡ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjð‡h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjì‡h²hh³j ˆh´M�ubah}”(h]”jç‡ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j ˆh´M�hjé‡h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjé‡h²hh³j ˆh´M�ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j$ˆjøj$ˆjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ4``v4l2_subdev_state_get_interval (state, pad, ...)``”h]”hú)�”}”(hj*ˆh]”hŒ0v4l2_subdev_state_get_interval (state, pad, ...)”…”�”}”(hj,ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj(ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hjMh²hubjŸ)�”}”(hŒ'Get pointer to a stream frame interval ”h]”hÞ)�”}”(hŒ&Get pointer to a stream frame interval”h]”hŒ&Get pointer to a stream frame interval”…”�”}”(hjDˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj@ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jRˆh´M�hjMh²hubjý)�”}”(hXX**Parameters** ``state`` subdevice state ``pad`` pad id ``...`` stream id (optional argument) **Description** This returns a pointer to the frame interval for the given pad + stream in the subdev state. For stream-unaware drivers the frame interval for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj_ˆh]”hŒ Parameters”…”�”}”(hjaˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj]ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‘hjYˆubjQ)�”}”(hhh]”(jV)�”}”(hŒ``state`` subdevice state ”h]”(j\)�”}”(hŒ ``state``”h]”hú)�”}”(hj~ˆh]”hŒstate”…”�”}”(hj€ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj|ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŽhjxˆubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hj—ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j“ˆh´MŽhj”ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjxˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j“ˆh´MŽhjuˆubjV)�”}”(hŒ``pad`` pad id ”h]”(j\)�”}”(hŒ``pad``”h]”hú)�”}”(hj·ˆh]”hŒpad”…”�”}”(hj¹ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjµˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj±ˆubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hjЈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j̈h´M�hj͈ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj±ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j̈h´M�hjuˆubjV)�”}”(hŒ&``...`` stream id (optional argument) ”h]”(j\)�”}”(hŒ``...``”h]”hú)�”}”(hjðˆh]”hŒ...”…”�”}”(hjòˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjîˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hjêˆubjv)�”}”(hhh]”hÞ)�”}”(hŒstream id (optional argument)”h]”hŒstream id (optional argument)”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‰h´M�hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjêˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‰h´M�hjuˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjYˆubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj+‰h]”hŒ Description”…”�”}”(hj-‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj)‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M’hjYˆubhÞ)�”}”(hŒ\This returns a pointer to the frame interval for the given pad + stream in the subdev state.”h]”hŒ\This returns a pointer to the frame interval for the given pad + stream in the subdev state.”…”�”}”(hjA‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‘hjYˆubhÞ)�”}”(hŒ�For stream-unaware drivers the frame interval for the corresponding pad is returned. If the pad does not exist, NULL is returned.”h]”hŒ�For stream-unaware drivers the frame interval for the corresponding pad is returned. If the pad does not exist, NULL is returned.”…”�”}”(hjP‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M”hjYˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ v4l2_subdev_get_fmt (C function)”Œc.v4l2_subdev_get_fmt”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒtint v4l2_subdev_get_fmt (struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format)”h]”j{)�”}”(hŒsint v4l2_subdev_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj{‰h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjމh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj{‰h²hh³j�‰h´M¥ubj¤)�”}”(hŒv4l2_subdev_get_fmt”h]”jª)�”}”(hŒv4l2_subdev_get_fmt”h]”hŒv4l2_subdev_get_fmt”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjœ‰ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj{‰h²hh³j�‰h´M¥ubj¢i)�”}”(hŒ\(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¼‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸‰ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɉh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸‰ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjÚ‰h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj׉ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j܉Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij¢‰sbŒc.v4l2_subdev_get_fmt”†”asbuh1hhj¸‰ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú‰h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸‰ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj¸‰ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¸‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj´‰ubj¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj.Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*Šubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Šh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj*Šubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjLŠh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjIŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jNŠŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jö‰Œc.v4l2_subdev_get_fmt”†”asbuh1hhj*Šubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjŠh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj*Šubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjxŠh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj*Šubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj…Šh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj*Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj´‰ubj¨i)�”}”(hŒ!struct v4l2_subdev_format *format”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjžŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšŠubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Šh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjšŠubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_format”h]”hŒv4l2_subdev_format”…”�”}”(hj¼Šh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¹Šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j¾ŠŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jö‰Œc.v4l2_subdev_get_fmt”†”asbuh1hhjšŠubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚŠh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjšŠubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjèŠh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjšŠubjª)�”}”(hŒformat”h]”hŒformat”…”�”}”(hjõŠh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjšŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj´‰ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj{‰h²hh³j�‰h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjw‰h²hh³j�‰h´M¥ubah}”(h]”jr‰ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j�‰h´M¥hjt‰h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒFill format based on state”h]”hŒFill format based on state”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥hj‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjt‰h²hh³j�‰h´M¥ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j7‹jøj7‹jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX/**Parameters** ``struct v4l2_subdev *sd`` subdevice ``struct v4l2_subdev_state *state`` subdevice state ``struct v4l2_subdev_format *format`` pointer to :c:type:`struct v4l2_subdev_format ` **Description** Fill **format->format** field based on the information in the **format** struct. This function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_fmt if the subdev driver does not need to do anything special in their get_fmt op. Returns 0 on success, error value otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjA‹h]”hŒ Parameters”…”�”}”(hjC‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj?‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M©hj;‹ubjQ)�”}”(hhh]”(jV)�”}”(hŒ%``struct v4l2_subdev *sd`` subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj`‹h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjb‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj^‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¦hjZ‹ubjv)�”}”(hhh]”hÞ)�”}”(hŒ subdevice”h]”hŒ subdevice”…”�”}”(hjy‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ju‹h´M¦hjv‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjZ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ju‹h´M¦hjW‹ubjV)�”}”(hŒ4``struct v4l2_subdev_state *state`` subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hj™‹h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hj›‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj—‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M§hj“‹ubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hj²‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j®‹h´M§hj¯‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj“‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j®‹h´M§hjW‹ubjV)�”}”(hŒj``struct v4l2_subdev_format *format`` pointer to :c:type:`struct v4l2_subdev_format ` ”h]”(j\)�”}”(hŒ%``struct v4l2_subdev_format *format``”h]”hú)�”}”(hjÒ‹h]”hŒ!struct v4l2_subdev_format *format”…”�”}”(hjÔ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjЋubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¨hjÌ‹ubjv)�”}”(hhh]”hÞ)�”}”(hŒCpointer to :c:type:`struct v4l2_subdev_format `”h]”(hŒ pointer to ”…”�”}”(hjë‹h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_subdev_format `”h]”hú)�”}”(hjõ‹h]”hŒstruct v4l2_subdev_format”…”�”}”(hj÷‹h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjó‹ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_format”uh1hh³jç‹h´M¨hjë‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jç‹h´M¨hjè‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÌ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jç‹h´M¨hjW‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj;‹ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj,Œh]”hŒ Description”…”�”}”(hj.Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj*Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mªhj;‹ubhÞ)�”}”(hŒPFill **format->format** field based on the information in the **format** struct.”h]”(hŒFill ”…”�”}”(hjBŒh²hh³Nh´NubjÄ)�”}”(hŒ**format->format**”h]”hŒformat->format”…”�”}”(hjJŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjBŒubhŒ' field based on the information in the ”…”�”}”(hjBŒh²hh³Nh´NubjÄ)�”}”(hŒ **format**”h]”hŒformat”…”�”}”(hj\Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjBŒubhŒ struct.”…”�”}”(hjBŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M©hj;‹ubhÞ)�”}”(hŒÂThis function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_fmt if the subdev driver does not need to do anything special in their get_fmt op.”h]”hŒÂThis function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_fmt if the subdev driver does not need to do anything special in their get_fmt op.”…”�”}”(hjuŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M«hj;‹ubhÞ)�”}”(hŒ,Returns 0 on success, error value otherwise.”h]”hŒ,Returns 0 on success, error value otherwise.”…”�”}”(hj„Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¯hj;‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ+v4l2_subdev_get_frame_interval (C function)”Œ c.v4l2_subdev_get_frame_interval”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒƒint v4l2_subdev_get_frame_interval (struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *fi)”h]”j{)�”}”(hŒ‚int v4l2_subdev_get_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *fi)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hj³Œh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¯Œh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂŒh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¯Œh²hh³jÁŒh´M¶ubj¤)�”}”(hŒv4l2_subdev_get_frame_interval”h]”jª)�”}”(hŒv4l2_subdev_get_frame_interval”h]”hŒv4l2_subdev_get_frame_interval”…”�”}”(hjÔŒh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÐŒubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj¯Œh²hh³jÁŒh´M¶ubj¢i)�”}”(hŒ`(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_frame_interval *fi)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjðŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìŒubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýŒh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjìŒubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj �ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j�Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijÖŒsbŒ c.v4l2_subdev_get_frame_interval”†”asbuh1hhjìŒubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjìŒubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj<�h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjìŒubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjìŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjèŒubj¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^�ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj}�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j‚�Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j*�Œ c.v4l2_subdev_get_frame_interval”†”asbuh1hhj^�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^�ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj¬�h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj^�ubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj^�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjèŒubj¨i)�”}”(hŒ%struct v4l2_subdev_frame_interval *fi”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎ�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÎ�ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_frame_interval”h]”hŒv4l2_subdev_frame_interval”…”�”}”(hjð�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjí�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jò�Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j*�Œ c.v4l2_subdev_get_frame_interval”†”asbuh1hhjÎ�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÎ�ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjÎ�ubjª)�”}”(hŒfi”h]”hŒfi”…”�”}”(hj)Žh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÎ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjèŒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj¯Œh²hh³jÁŒh´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj«Œh²hh³jÁŒh´M¶ubah}”(h]”j¦Œah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÁŒh´M¶hj¨Œh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ"Fill frame interval based on state”h]”hŒ"Fill frame interval based on state”…”�”}”(hjSŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¶hjPŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¨Œh²hh³jÁŒ•=h´M¶ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jkŽjøjkŽjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXS**Parameters** ``struct v4l2_subdev *sd`` subdevice ``struct v4l2_subdev_state *state`` subdevice state ``struct v4l2_subdev_frame_interval *fi`` pointer to :c:type:`struct v4l2_subdev_frame_interval ` **Description** Fill **fi->interval** field based on the information in the **fi** struct. This function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_frame_interval if the subdev driver does not need to do anything special in their get_frame_interval op. Returns 0 on success, error value otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjuŽh]”hŒ Parameters”…”�”}”(hjwŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjsŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MºhjoŽubjQ)�”}”(hhh]”(jV)�”}”(hŒ%``struct v4l2_subdev *sd`` subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj”Žh]”hŒstruct v4l2_subdev *sd”…”�”}”(hj–Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj’Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M·hjŽŽubjv)�”}”(hhh]”hÞ)�”}”(hŒ subdevice”h]”hŒ subdevice”…”�”}”(hj­Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©Žh´M·hjªŽubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŽŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j©Žh´M·hj‹ŽubjV)�”}”(hŒ4``struct v4l2_subdev_state *state`` subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hjÍŽh]”hŒstruct v4l2_subdev_state *state”…”�”}”(hjÏŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjËŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¸hjÇŽubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hjæŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jâŽh´M¸hjãŽubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÇŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jâŽh´M¸hj‹ŽubjV)�”}”(hŒ~``struct v4l2_subdev_frame_interval *fi`` pointer to :c:type:`struct v4l2_subdev_frame_interval ` ”h]”(j\)�”}”(hŒ)``struct v4l2_subdev_frame_interval *fi``”h]”hú)�”}”(hj�h]”hŒ%struct v4l2_subdev_frame_interval *fi”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¹hj�ubjv)�”}”(hhh]”hÞ)�”}”(hŒSpointer to :c:type:`struct v4l2_subdev_frame_interval `”h]”(hŒ pointer to ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒH:c:type:`struct v4l2_subdev_frame_interval `”h]”hú)�”}”(hj)�h]”hŒ!struct v4l2_subdev_frame_interval”…”�”}”(hj+�h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj'�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_frame_interval”uh1hh³j�h´M¹hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�h´M¹hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�h´M¹hj‹Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjoŽubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj`�h]”hŒ Description”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj^�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M»hjoŽubhÞ)�”}”(hŒJFill **fi->interval** field based on the information in the **fi** struct.”h]”(hŒFill ”…”�”}”(hjv�h²hh³Nh´NubjÄ)�”}”(hŒ**fi->interval**”h]”hŒ fi->interval”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjv�ubhŒ' field based on the information in the ”…”�”}”(hjv�h²hh³Nh´NubjÄ)�”}”(hŒ**fi**”h]”hŒfi”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjv�ubhŒ struct.”…”�”}”(hjv�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MºhjoŽubhÞ)�”}”(hŒØThis function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_frame_interval if the subdev driver does not need to do anything special in their get_frame_interval op.”h]”hŒØThis function can be used by the subdev drivers which support active state to implement v4l2_subdev_pad_ops.get_frame_interval if the subdev driver does not need to do anything special in their get_frame_interval op.”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¼hjoŽubhÞ)�”}”(hŒ,Returns 0 on success, error value otherwise.”h]”hŒ,Returns 0 on success, error value otherwise.”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjoŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_set_routing (C function)”Œc.v4l2_subdev_set_routing”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ�int v4l2_subdev_set_routing (struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing)”h]”j{)�”}”(hŒ€int v4l2_subdev_set_routing(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjã�h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÈubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjã�h²hh³jõ�h´MÈubj¤)�”}”(hŒv4l2_subdev_set_routing”h]”jª)�”}”(hŒv4l2_subdev_set_routing”h]”hŒv4l2_subdev_set_routing”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj�ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjã�h²hh³jõ�h´MÈubj¢i)�”}”(hŒe(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj �ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj �ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj?�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jD�Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij �sbŒc.v4l2_subdev_set_routing”†”asbuh1hhj �ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj �ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjp�h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj �ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj �ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�ubj¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj’�ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj´�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj±�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j¶�Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j^�Œc.v4l2_subdev_set_routing”†”asbuh1hhj’�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj’�ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj’�ubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj’�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�ubj¨i)�”}”(hŒ*const struct v4l2_subdev_krouting *routing”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‘ubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hj!‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.‘h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‘ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_krouting”h]”hŒv4l2_subdev_krouting”…”�”}”(hj?‘h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj<‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jA‘Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j^�Œc.v4l2_subdev_set_routing”†”asbuh1hhj‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]‘h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‘ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjk‘h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj‘ubjª)�”}”(hŒrouting”h]”hŒrouting”…”�”}”(hjx‘h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjã�h²hh³jõ�h´MÈubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjß�h²hh³jõ�h´MÈubah}”(h]”jÚ�ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jõ�h´MÈhjÜ�h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ!Set given routing to subdev state”h]”hŒ!Set given routing to subdev state”…”�”}”(hj¢‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÈhjŸ‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÜ�h²hh³jõ�h´MÈubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jº‘jøjº‘jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¾**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``struct v4l2_subdev_state *state`` The subdevice state ``const struct v4l2_subdev_krouting *routing`` Routing that will be copied to subdev state **Description** This will release old routing table (if any) from the state, allocate enough space for the given routing, and copy the routing. This can be used from the subdev driver's set_routing op, after validating the routing.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÄ‘h]”hŒ Parameters”…”�”}”(hjÆ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÌhj¾‘ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjã‘h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjå‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjá‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÉhjÝ‘ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjü‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jø‘h´MÉhjù‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÝ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jø‘h´MÉhjÚ‘ubjV)�”}”(hŒ8``struct v4l2_subdev_state *state`` The subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hj’h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÊhj’ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe subdevice state”h]”hŒThe subdevice state”…”�”}”(hj5’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j1’h´MÊhj2’ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j1’h´MÊhjÚ‘ubjV)�”}”(hŒ[``const struct v4l2_subdev_krouting *routing`` Routing that will be copied to subdev state ”h]”(j\)�”}”(hŒ.``const struct v4l2_subdev_krouting *routing``”h]”hú)�”}”(hjU’h]”hŒ*const struct v4l2_subdev_krouting *routing”…”�”}”(hjW’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjS’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MËhjO’ubjv)�”}”(hhh]”hÞ)�”}”(hŒ+Routing that will be copied to subdev state”h]”hŒ+Routing that will be copied to subdev state”…”�”}”(hjn’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jj’h´MËhjk’ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjO’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jj’h´MËhjÚ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj¾‘ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj�’h]”hŒ Description”…”�”}”(hj’’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjŽ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÍhj¾‘ubhÞ)�”}”(hŒThis will release old routing table (if any) from the state, allocate enough space for the given routing, and copy the routing.”h]”hŒThis will release old routing table (if any) from the state, allocate enough space for the given routing, and copy the routing.”…”�”}”(hj¦’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÌhj¾‘ubhÞ)�”}”(hŒWThis can be used from the subdev driver's set_routing op, after validating the routing.”h]”hŒYThis can be used from the subdev driver’s set_routing op, after validating the routing.”…”�”}”(hjµ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÏhj¾‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒfor_each_active_route (C macro)”Œc.for_each_active_route”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒfor_each_active_route”h]”j{)�”}”(hŒfor_each_active_route”h]”j¤)�”}”(hŒfor_each_active_route”h]”jª)�”}”(hjÞ’h]”hŒfor_each_active_route”…”�”}”(hjè’h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjä’ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjà’h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÜubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÜ’h²hh³jû’h´MÜubah}”(h]”j×’ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jû’h´MÜhjÙ’h²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÙ’h²hh³jû’h´MÜubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j“jøj“jù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ*``for_each_active_route (routing, route)``”h]”hú)�”}”(hj“h]”hŒ&for_each_active_route (routing, route)”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÞhjMh²hubjŸ)�”}”(hŒ0iterate on all active routes of a routing table ”h]”hÞ)�”}”(hŒ/iterate on all active routes of a routing table”h]”hŒ/iterate on all active routes of a routing table”…”�”}”(hj4“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÜhj0“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jB“h´MÜhjMh²hubjý)�”}”(hŒO**Parameters** ``routing`` The routing table ``route`` The route iterator”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjO“h]”hŒ Parameters”…”�”}”(hjQ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjM“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MàhjI“ubjQ)�”}”(hhh]”(jV)�”}”(hŒ``routing`` The routing table ”h]”(j\)�”}”(hŒ ``routing``”h]”hú)�”}”(hjn“h]”hŒrouting”…”�”}”(hjp“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjl“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÝhjh“ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe routing table”h]”hŒThe routing table”…”�”}”(hj‡“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jƒ“h´MÝhj„“ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjh“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jƒ“h´MÝhje“ubjV)�”}”(hŒ``route`` The route iterator”h]”(j\)�”}”(hŒ ``route``”h]”hú)�”}”(hj§“h]”hŒroute”…”�”}”(hj©“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¥“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mßhj¡“ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe route iterator”h]”hŒThe route iterator”…”�”}”(hjÀ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÞhj½“ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¡“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¼“h´Mßhje“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjI“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ-v4l2_subdev_set_routing_with_fmt (C function)”Œ"c.v4l2_subdev_set_routing_with_fmt”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ°int v4l2_subdev_set_routing_with_fmt (struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing, const struct v4l2_mbus_framefmt *fmt)”h]”j{)�”}”(hŒ¯int v4l2_subdev_set_routing_with_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing, const struct v4l2_mbus_framefmt *fmt)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjý“h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Måubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjý“h²hh³j”h´Måubj¤)�”}”(hŒ v4l2_subdev_set_routing_with_fmt”h]”jª)�”}”(hŒ v4l2_subdev_set_routing_with_fmt”h]”hŒ v4l2_subdev_set_routing_with_fmt”…”�”}”(hj"”h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj”ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjý“h²hh³j”h´Måubj¢i)�”}”(hŒ‹(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, const struct v4l2_subdev_krouting *routing, const struct v4l2_mbus_framefmt *fmt)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj>”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj:”ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj\”h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjY”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j^”Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij$”sbŒ"c.v4l2_subdev_set_routing_with_fmt”†”asbuh1hhj:”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj:”ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjŠ”h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj:”ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj—”h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj:”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj6”ubj¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj°”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¬”ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjΔh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjË”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jДŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jx”Œ"c.v4l2_subdev_set_routing_with_fmt”†”asbuh1hhj¬”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¬”ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjú”h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj¬”ubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¬”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj6”ubj¨i)�”}”(hŒ*const struct v4l2_subdev_krouting *routing”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hj •h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-•h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj•ubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hj;•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH•h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj•ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_krouting”h]”hŒv4l2_subdev_krouting”…”�”}”(hjY•h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjV•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j[•Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jx”Œ"c.v4l2_subdev_set_routing_with_fmt”†”asbuh1hhj•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw•h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj•ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj…•h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj•ubjª)�”}”(hŒrouting”h]”hŒrouting”…”�”}”(hj’•h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj6”ubj¨i)�”}”(hŒ$const struct v4l2_mbus_framefmt *fmt”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hj«•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸•h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§•ubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÆ•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ•h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§•ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_mbus_framefmt”h]”hŒv4l2_mbus_framefmt”…”�”}”(hjä•h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjá•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j敌modname”NŒ classname”NjÖjÙ)�”}”jÜ]”jx”Œ"c.v4l2_subdev_set_routing_with_fmt”†”asbuh1hhj§•ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§•ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj§•ubjª)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj§•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj6”ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjý“h²hh³j”h´Måubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjù“h²hh³j”h´Måubah}”(h]”jô“ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j”h´Måhjö“h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ,Set given routing and format to subdev state”h]”hŒ,Set given routing and format to subdev state”…”�”}”(hjG–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MåhjD–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjö“h²hh³j”h´Måubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j_–jøj_–jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX­**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``struct v4l2_subdev_state *state`` The subdevice state ``const struct v4l2_subdev_krouting *routing`` Routing that will be copied to subdev state ``const struct v4l2_mbus_framefmt *fmt`` Format used to initialize all the streams **Description** This is the same as v4l2_subdev_set_routing, but additionally initializes all the streams using the given format.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hji–h]”hŒ Parameters”…”�”}”(hjk–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjg–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Méhjc–ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjˆ–h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjŠ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj†–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mçhj‚–ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hj¡–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�–h´Mçhjž–ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‚–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�–h´Mçhj–ubjV)�”}”(hŒ8``struct v4l2_subdev_state *state`` The subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hjÁ–h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¿–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mèhj»–ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe subdevice state”h]”hŒThe subdevice state”…”�”}”(hjÚ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÖ–h´Mèhj×–ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj»–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÖ–h´Mèhj–ubjV)�”}”(hŒ[``const struct v4l2_subdev_krouting *routing`` Routing that will be copied to subdev state ”h]”(j\)�”}”(hŒ.``const struct v4l2_subdev_krouting *routing``”h]”hú)�”}”(hjú–h]”hŒ*const struct v4l2_subdev_krouting *routing”…”�”}”(hjü–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjø–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Méhjô–ubjv)�”}”(hhh]”hÞ)�”}”(hŒ+Routing that will be copied to subdev state”h]”hŒ+Routing that will be copied to subdev state”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j—h´Méhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjô–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j—h´Méhj–ubjV)�”}”(hŒS``const struct v4l2_mbus_framefmt *fmt`` Format used to initialize all the streams ”h]”(j\)�”}”(hŒ(``const struct v4l2_mbus_framefmt *fmt``”h]”hú)�”}”(hj3—h]”hŒ$const struct v4l2_mbus_framefmt *fmt”…”�”}”(hj5—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj1—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mêhj-—ubjv)�”}”(hhh]”hÞ)�”}”(hŒ)Format used to initialize all the streams”h]”hŒ)Format used to initialize all the streams”…”�”}”(hjL—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jH—h´MêhjI—ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj-—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jH—h´Mêhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjc–ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjn—h]”hŒ Description”…”�”}”(hjp—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjl—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mìhjc–ubhÞ)�”}”(hŒqThis is the same as v4l2_subdev_set_routing, but additionally initializes all the streams using the given format.”h]”hŒqThis is the same as v4l2_subdev_set_routing, but additionally initializes all the streams using the given format.”…”�”}”(hj„—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mëhjc–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ2v4l2_subdev_routing_find_opposite_end (C function)”Œ'c.v4l2_subdev_routing_find_opposite_end”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒŽint v4l2_subdev_routing_find_opposite_end (const struct v4l2_subdev_krouting *routing, u32 pad, u32 stream, u32 *other_pad, u32 *other_stream)”h]”j{)�”}”(hŒ�int v4l2_subdev_routing_find_opposite_end(const struct v4l2_subdev_krouting *routing, u32 pad, u32 stream, u32 *other_pad, u32 *other_stream)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hj³—h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¯—h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mõubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¯—h²hh³jÁ—h´Mõubj¤)�”}”(hŒ%v4l2_subdev_routing_find_opposite_end”h]”jª)�”}”(hŒ%v4l2_subdev_routing_find_opposite_end”h]”hŒ%v4l2_subdev_routing_find_opposite_end”…”�”}”(hjÔ—h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjЗubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj¯—h²hh³jÁ—h´Mõubj¢i)�”}”(hŒd(const struct v4l2_subdev_krouting *routing, u32 pad, u32 stream, u32 *other_pad, u32 *other_stream)”h]”(j¨i)�”}”(hŒ*const struct v4l2_subdev_krouting *routing”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hjð—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì—ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjì—ubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì—ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjì—ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_krouting”h]”hŒv4l2_subdev_krouting”…”�”}”(hj)˜h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj&˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j+˜Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijÖ—sbŒ'c.v4l2_subdev_routing_find_opposite_end”†”asbuh1hhjì—ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI˜h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjì—ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjW˜h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjì—ubjª)�”}”(hŒrouting”h]”hŒrouting”…”�”}”(hjd˜h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjì—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjè—ubj¨i)�”}”(hŒu32 pad”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj€˜h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj}˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j‚˜Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jE˜Œ'c.v4l2_subdev_routing_find_opposite_end”†”asbuh1hhjy˜ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž˜h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjy˜ubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hj¬˜h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjy˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjè—ubj¨i)�”}”(hŒ u32 stream”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjȘh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjŘubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jʘŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jE˜Œ'c.v4l2_subdev_routing_find_opposite_end”†”asbuh1hhjÁ˜ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ˜h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁ˜ubjª)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjô˜h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÁ˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjè—ubj¨i)�”}”(hŒu32 *other_pad”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j™Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jE˜Œ'c.v4l2_subdev_routing_find_opposite_end”†”asbuh1hhj ™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.™h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj ™ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj<™h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj ™ubjª)�”}”(hŒ other_pad”h]”hŒ other_pad”…”�”}”(hjI™h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj ™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjè—ubj¨i)�”}”(hŒu32 *other_stream”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hje™h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjb™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jg™Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jE˜Œ'c.v4l2_subdev_routing_find_opposite_end”†”asbuh1hhj^™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ™h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^™ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj‘™h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj^™ubjª)�”}”(hŒ other_stream”h]”hŒ other_stream”…”�”}”(hjž™h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj^™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjè—ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj¯—h²hh³jÁ—h´Mõubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj«—h²hh³jÁ—h´Mõubah}”(h]”j¦—ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÁ—h´Mõhj¨—h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒFind the opposite stream”h]”hŒFind the opposite stream”…”�”}”(hjÈ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MõhjÅ™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¨—h²hh³jÁ—h´Mõubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jà™jøjà™jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX0**Parameters** ``const struct v4l2_subdev_krouting *routing`` routing used to find the opposite side ``u32 pad`` pad id ``u32 stream`` stream id ``u32 *other_pad`` pointer used to return the opposite pad ``u32 *other_stream`` pointer used to return the opposite stream **Description** This function uses the routing table to find the pad + stream which is opposite the given pad + stream. **other_pad** and/or **other_stream** can be NULL if the caller does not need the value. Returns 0 on success, or -EINVAL if no matching route is found.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjê™h]”hŒ Parameters”…”�”}”(hjì™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjè™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mùhjä™ubjQ)�”}”(hhh]”(jV)�”}”(hŒV``const struct v4l2_subdev_krouting *routing`` routing used to find the opposite side ”h]”(j\)�”}”(hŒ.``const struct v4l2_subdev_krouting *routing``”h]”hú)�”}”(hj šh]”hŒ*const struct v4l2_subdev_krouting *routing”…”�”}”(hj šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Möhjšubjv)�”}”(hhh]”hÞ)�”}”(hŒ&routing used to find the opposite side”h]”hŒ&routing used to find the opposite side”…”�”}”(hj"šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jšh´Möhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jšh´MöhjšubjV)�”}”(hŒ``u32 pad`` pad id ”h]”(j\)�”}”(hŒ ``u32 pad``”h]”hú)�”}”(hjBšh]”hŒu32 pad”…”�”}”(hjDšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj@šubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M÷hj<šubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hj[šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jWšh´M÷hjXšubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj<šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jWšh´M÷hjšubjV)�”}”(hŒ``u32 stream`` stream id ”h]”(j\)�”}”(hŒ``u32 stream``”h]”hú)�”}”(hj{šh]”hŒ u32 stream”…”�”}”(hj}šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjyšubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Møhjušubjv)�”}”(hhh]”hÞ)�”}”(hŒ stream id”h]”hŒ stream id”…”�”}”(hj”šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�šh´Møhj‘šubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjušubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�šh´MøhjšubjV)�”}”(hŒ;``u32 *other_pad`` pointer used to return the opposite pad ”h]”(j\)�”}”(hŒ``u32 *other_pad``”h]”hú)�”}”(hj´šh]”hŒu32 *other_pad”…”�”}”(hj¶šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj²šubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mùhj®šubjv)�”}”(hhh]”hÞ)�”}”(hŒ'pointer used to return the opposite pad”h]”hŒ'pointer used to return the opposite pad”…”�”}”(hjÍšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÉšh´MùhjÊšubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj®šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÉšh´MùhjšubjV)�”}”(hŒA``u32 *other_stream`` pointer used to return the opposite stream ”h]”(j\)�”}”(hŒ``u32 *other_stream``”h]”hú)�”}”(hjíšh]”hŒu32 *other_stream”…”�”}”(hjïšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjëšubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Múhjçšubjv)�”}”(hhh]”hÞ)�”}”(hŒ*pointer used to return the opposite stream”h]”hŒ*pointer used to return the opposite stream”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j›h´Múhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjçšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j›h´Múhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjä™ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj(›h]”hŒ Description”…”�”}”(hj*›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj&›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mühjä™ubhÞ)�”}”(hŒgThis function uses the routing table to find the pad + stream which is opposite the given pad + stream.”h]”hŒgThis function uses the routing table to find the pad + stream which is opposite the given pad + stream.”…”�”}”(hj>›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mûhjä™ubhÞ)�”}”(hŒX**other_pad** and/or **other_stream** can be NULL if the caller does not need the value.”h]”(jÄ)�”}”(hŒ **other_pad**”h]”hŒ other_pad”…”�”}”(hjQ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjM›ubhŒ and/or ”…”�”}”(hjM›h²hh³Nh´NubjÄ)�”}”(hŒ**other_stream**”h]”hŒ other_stream”…”�”}”(hjc›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjM›ubhŒ3 can be NULL if the caller does not need the value.”…”�”}”(hjM›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mþhjä™ubhÞ)�”}”(hŒ?Returns 0 on success, or -EINVAL if no matching route is found.”h]”hŒ?Returns 0 on success, or -EINVAL if no matching route is found.”…”�”}”(hj|›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjä™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ9v4l2_subdev_state_get_opposite_stream_format (C function)”Œ.c.v4l2_subdev_state_get_opposite_stream_format”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒstruct v4l2_mbus_framefmt * v4l2_subdev_state_get_opposite_stream_format (struct v4l2_subdev_state *state, u32 pad, u32 stream)”h]”j{)�”}”(hŒ}struct v4l2_mbus_framefmt *v4l2_subdev_state_get_opposite_stream_format(struct v4l2_subdev_state *state, u32 pad, u32 stream)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj«›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§›h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹›h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§›h²hh³j¸›h´M ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_mbus_framefmt”h]”hŒv4l2_mbus_framefmt”…”�”}”(hjÊ›h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÇ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÌ›Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáiŒ,v4l2_subdev_state_get_opposite_stream_format”sbŒ.c.v4l2_subdev_state_get_opposite_stream_format”†”asbuh1hhj§›h²hh³j¸›h´M ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë›h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§›h²hh³j¸›h´M ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjù›h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj§›h²hh³j¸›h´M ubj¤)�”}”(hŒ,v4l2_subdev_state_get_opposite_stream_format”h]”jª)�”}”(hjè›h]”hŒ,v4l2_subdev_state_get_opposite_stream_format”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjœubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj§›h²hh³j¸›h´M ubj¢i)�”}”(hŒ6(struct v4l2_subdev_state *state, u32 pad, u32 stream)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj%œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!œubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2œh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj!œubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjCœh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj@œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jEœŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j曌.c.v4l2_subdev_state_get_opposite_stream_format”†”asbuh1hhj!œubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaœh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj!œubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjoœh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj!œubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj|œh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj!œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjœubj¨i)�”}”(hŒu32 pad”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj˜œh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj•œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jšœŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j曌.c.v4l2_subdev_state_get_opposite_stream_format”†”asbuh1hhj‘œubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶œh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‘œubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hjÄœh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj‘œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjœubj¨i)�”}”(hŒ u32 stream”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjàœh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÝœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j✌modname”NŒ classname”NjÖjÙ)�”}”jÜ]”j曌.c.v4l2_subdev_state_get_opposite_stream_format”†”asbuh1hhjÙœubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþœh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÙœubjª)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÙœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjœubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj§›h²hh³j¸›h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj£›h²hh³j¸›h´M ubah}”(h]”jž›ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¸›h´M hj ›h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ%Get pointer to opposite stream format”h]”hŒ%Get pointer to opposite stream format”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hj3�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj ›h²hh³j¸›h´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jN�jøjN�jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXw**Parameters** ``struct v4l2_subdev_state *state`` subdevice state ``u32 pad`` pad id ``u32 stream`` stream id **Description** This returns a pointer to :c:type:`struct v4l2_mbus_framefmt ` for the pad + stream that is opposite the given pad + stream in the subdev state. If the state does not contain the given pad + stream, NULL is returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjX�h]”hŒ Parameters”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjV�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjR�ubjQ)�”}”(hhh]”(jV)�”}”(hŒ4``struct v4l2_subdev_state *state`` subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hjw�h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhju�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjq�ubjv)�”}”(hhh]”hÞ)�”}”(hŒsubdevice state”h]”hŒsubdevice state”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŒ�h´M hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjq�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jŒ�h´M hjn�ubjV)�”}”(hŒ``u32 pad`` pad id ”h]”(j\)�”}”(hŒ ``u32 pad``”h]”hú)�”}”(hj°�h]”hŒu32 pad”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjª�ubjv)�”}”(hhh]”hÞ)�”}”(hŒpad id”h]”hŒpad id”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅ�h´M hjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÅ�h´M hjn�ubjV)�”}”(hŒ``u32 stream`` stream id ”h]”(j\)�”}”(hŒ``u32 stream``”h]”hú)�”}”(hjé�h]”hŒ u32 stream”…”�”}”(hjë�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjç�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjã�ubjv)�”}”(hhh]”hÞ)�”}”(hŒ stream id”h]”hŒ stream id”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jþ�h´M hjÿ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjã�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jþ�h´M hjn�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjR�ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj$žh]”hŒ Description”…”�”}”(hj&žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj"žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjR�ubhÞ)�”}”(hŒ¤This returns a pointer to :c:type:`struct v4l2_mbus_framefmt ` for the pad + stream that is opposite the given pad + stream in the subdev state.”h]”(hŒThis returns a pointer to ”…”�”}”(hj:žh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct v4l2_mbus_framefmt `”h]”hú)�”}”(hjDžh]”hŒstruct v4l2_mbus_framefmt”…”�”}”(hjFžh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjBžubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_mbus_framefmt”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj:žubhŒR for the pad + stream that is opposite the given pad + stream in the subdev state.”…”�”}”(hj:žh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jažh´MhjR�ubhÞ)�”}”(hŒGIf the state does not contain the given pad + stream, NULL is returned.”h]”hŒGIf the state does not contain the given pad + stream, NULL is returned.”…”�”}”(hjlžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjR�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ,v4l2_subdev_state_xlate_streams (C function)”Œ!c.v4l2_subdev_state_xlate_streams”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒmu64 v4l2_subdev_state_xlate_streams (const struct v4l2_subdev_state *state, u32 pad0, u32 pad1, u64 *streams)”h]”j{)�”}”(hŒlu64 v4l2_subdev_state_xlate_streams(const struct v4l2_subdev_state *state, u32 pad0, u32 pad1, u64 *streams)”h]”(h)�”}”(hhh]”jª)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjžžh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj›žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j žŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáiŒv4l2_subdev_state_xlate_streams”sbŒ!c.v4l2_subdev_state_xlate_streams”†”asbuh1hhj—žh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀžh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj—žh²hh³j¿žh´Mubj¤)�”}”(hŒv4l2_subdev_state_xlate_streams”h]”jª)�”}”(hj¼žh]”hŒv4l2_subdev_state_xlate_streams”…”�”}”(hjÒžh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjΞubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj—žh²hh³j¿žh´Mubj¢i)�”}”(hŒI(const struct v4l2_subdev_state *state, u32 pad0, u32 pad1, u64 *streams)”h]”(j¨i)�”}”(hŒ%const struct v4l2_subdev_state *state”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hjížh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúžh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjéžubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjéžubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj&Ÿh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj#Ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j(ŸŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jºžŒ!c.v4l2_subdev_state_xlate_streams”†”asbuh1hhjéžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDŸh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjéžubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjRŸh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjéžubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj_Ÿh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjéžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjåžubj¨i)�”}”(hŒu32 pad0”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj{Ÿh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjxŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j}ŸŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jºžŒ!c.v4l2_subdev_state_xlate_streams”†”asbuh1hhjtŸubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Ÿh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjtŸubjª)�”}”(hŒpad0”h]”hŒpad0”…”�”}”(hj§Ÿh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjtŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjåžubj¨i)�”}”(hŒu32 pad1”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÀŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÅŸŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jºžŒ!c.v4l2_subdev_state_xlate_streams”†”asbuh1hhj¼Ÿubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáŸh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¼Ÿubjª)�”}”(hŒpad1”h]”hŒpad1”…”�”}”(hjïŸh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¼Ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjåžubj¨i)�”}”(hŒ u64 *streams”h]”(h)�”}”(hhh]”jª)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j  Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jºžŒ!c.v4l2_subdev_state_xlate_streams”†”asbuh1hhj ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj ubjª)�”}”(hŒstreams”h]”hŒstreams”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjåžubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj—žh²hh³j¿žh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj“žh²hh³j¿žh´Mubah}”(h]”jŽžah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¿žh´Mhj�žh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ)Translate streams from one pad to another”h]”hŒ)Translate streams from one pad to another”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjk h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj�žh²hh³j¿žh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j† jøj† jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXT**Parameters** ``const struct v4l2_subdev_state *state`` Subdevice state ``u32 pad0`` The first pad ``u32 pad1`` The second pad ``u64 *streams`` Streams bitmask on the first pad **Description** Streams on sink pads of a subdev are routed to source pads as expressed in the subdev state routing table. Stream numbers don't necessarily match on the sink and source side of a route. This function translates stream numbers on **pad0**, expressed as a bitmask in **streams**, to the corresponding streams on **pad1** using the routing table from the **state**. It returns the stream mask on **pad1**, and updates **streams** with the streams that have been found in the routing table. **pad0** and **pad1** must be a sink and a source, in any order. **Return** The bitmask of streams of **pad1** that are routed to **streams** on **pad0**.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj� h]”hŒ Parameters”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjŠ ubjQ)�”}”(hhh]”(jV)�”}”(hŒ:``const struct v4l2_subdev_state *state`` Subdevice state ”h]”(j\)�”}”(hŒ)``const struct v4l2_subdev_state *state``”h]”hú)�”}”(hj¯ h]”hŒ%const struct v4l2_subdev_state *state”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj© ubjv)�”}”(hhh]”hÞ)�”}”(hŒSubdevice state”h]”hŒSubdevice state”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÄ h´MhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj© ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÄ h´Mhj¦ ubjV)�”}”(hŒ``u32 pad0`` The first pad ”h]”(j\)�”}”(hŒ ``u32 pad0``”h]”hú)�”}”(hjè h]”hŒu32 pad0”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjâ ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The first pad”h]”hŒ The first pad”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jý h´Mhjþ ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjâ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jý h´Mhj¦ ubjV)�”}”(hŒ``u32 pad1`` The second pad ”h]”(j\)�”}”(hŒ ``u32 pad1``”h]”hú)�”}”(hj!¡h]”hŒu32 pad1”…”�”}”(hj#¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj¡ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe second pad”h]”hŒThe second pad”…”�”}”(hj:¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j6¡h´Mhj7¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j6¡h´Mhj¦ ubjV)�”}”(hŒ2``u64 *streams`` Streams bitmask on the first pad ”h]”(j\)�”}”(hŒ``u64 *streams``”h]”hú)�”}”(hjZ¡h]”hŒ u64 *streams”…”�”}”(hj\¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjX¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjT¡ubjv)�”}”(hhh]”hÞ)�”}”(hŒ Streams bitmask on the first pad”h]”hŒ Streams bitmask on the first pad”…”�”}”(hjs¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jo¡h´Mhjp¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjT¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jo¡h´Mhj¦ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjŠ ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj•¡h]”hŒ Description”…”�”}”(hj—¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj“¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjŠ ubhÞ)�”}”(hXæStreams on sink pads of a subdev are routed to source pads as expressed in the subdev state routing table. Stream numbers don't necessarily match on the sink and source side of a route. This function translates stream numbers on **pad0**, expressed as a bitmask in **streams**, to the corresponding streams on **pad1** using the routing table from the **state**. It returns the stream mask on **pad1**, and updates **streams** with the streams that have been found in the routing table.”h]”(hŒçStreams on sink pads of a subdev are routed to source pads as expressed in the subdev state routing table. Stream numbers don’t necessarily match on the sink and source side of a route. This function translates stream numbers on ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ**pad0**”h]”hŒpad0”…”�”}”(hj³¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ, expressed as a bitmask in ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ **streams**”h]”hŒstreams”…”�”}”(hjÅ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ", to the corresponding streams on ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ**pad1**”h]”hŒpad1”…”�”}”(hjסh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ" using the routing table from the ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ **state**”h]”hŒstate”…”�”}”(hjé¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ . It returns the stream mask on ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ**pad1**”h]”hŒpad1”…”�”}”(hjû¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ, and updates ”…”�”}”(hj«¡h²hh³Nh´NubjÄ)�”}”(hŒ **streams**”h]”hŒstreams”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«¡ubhŒ< with the streams that have been found in the routing table.”…”�”}”(hj«¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjŠ ubhÞ)�”}”(hŒ@**pad0** and **pad1** must be a sink and a source, in any order.”h]”(jÄ)�”}”(hŒ**pad0**”h]”hŒpad0”…”�”}”(hj*¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj&¢ubhŒ and ”…”�”}”(hj&¢h²hh³Nh´NubjÄ)�”}”(hŒ**pad1**”h]”hŒpad1”…”�”}”(hj<¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj&¢ubhŒ+ must be a sink and a source, in any order.”…”�”}”(hj&¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M'hjŠ ubhÞ)�”}”(hŒ **Return**”h]”jÄ)�”}”(hjW¢h]”hŒReturn”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjU¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M)hjŠ ubhÞ)�”}”(hŒNThe bitmask of streams of **pad1** that are routed to **streams** on **pad0**.”h]”(hŒThe bitmask of streams of ”…”�”}”(hjm¢h²hh³Nh´NubjÄ)�”}”(hŒ**pad1**”h]”hŒpad1”…”�”}”(hju¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjm¢ubhŒ that are routed to ”…”�”}”(hjm¢h²hh³Nh´NubjÄ)�”}”(hŒ **streams**”h]”hŒstreams”…”�”}”(hj‡¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjm¢ubhŒ on ”…”�”}”(hjm¢h²hh³Nh´NubjÄ)�”}”(hŒ**pad0**”h]”hŒpad0”…”�”}”(hj™¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjm¢ubhŒ.”…”�”}”(hjm¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M*hjŠ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ(v4l2_subdev_routing_restriction (C enum)”Œ!c.v4l2_subdev_routing_restriction”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_routing_restriction”h]”j{)�”}”(hŒ$enum v4l2_subdev_routing_restriction”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hjÒ¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj΢h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M/ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà¢h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj΢h²hh³jߢh´M/ubj¤)�”}”(hŒv4l2_subdev_routing_restriction”h]”jª)�”}”(hjÌ¢h]”hŒv4l2_subdev_routing_restriction”…”�”}”(hjò¢h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjî¢ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj΢h²hh³jߢh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÊ¢h²hh³jߢh´M/ubah}”(h]”jÅ¢ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jߢh´M/hjÇ¢h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ'Subdevice internal routing restrictions”h]”hŒ'Subdevice internal routing restrictions”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M0hj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÇ¢h²hh³jߢh´M/ubeh}”(h]”h ]”(jŒenum”eh"]”h$]”h&]”jöjj÷j,£jøj,£jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXñ**Constants** ``V4L2_SUBDEV_ROUTING_NO_1_TO_N`` an input stream shall not be routed to multiple output streams (stream duplication) ``V4L2_SUBDEV_ROUTING_NO_N_TO_1`` multiple input streams shall not be routed to the same output stream (stream merging) ``V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX`` all streams from a sink pad must be routed to a single source pad ``V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX`` all streams on a source pad must originate from a single sink pad ``V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING`` sink pads shall not contain multiplexed streams ``V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING`` source pads shall not contain multiplexed streams ``V4L2_SUBDEV_ROUTING_ONLY_1_TO_1`` only non-overlapping 1-to-1 stream routing is allowed (a combination of **V4L2_SUBDEV_ROUTING_NO_1_TO_N** and **V4L2_SUBDEV_ROUTING_NO_N_TO_1**) ``V4L2_SUBDEV_ROUTING_NO_STREAM_MIX`` all streams from a sink pad must be routed to a single source pad, and that source pad shall not get routes from any other sink pad (a combination of **V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX** and **V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX**) ``V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING`` no multiplexed streams allowed on either source or sink sides.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jÄ)�”}”(hj6£h]”hŒ Constants”…”�”}”(hj8£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj4£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”•h´M4hj0£ubjQ)�”}”(hhh]”(jV)�”}”(hŒv``V4L2_SUBDEV_ROUTING_NO_1_TO_N`` an input stream shall not be routed to multiple output streams (stream duplication) ”h]”(j\)�”}”(hŒ!``V4L2_SUBDEV_ROUTING_NO_1_TO_N``”h]”hú)�”}”(hjU£h]”hŒV4L2_SUBDEV_ROUTING_NO_1_TO_N”…”�”}”(hjW£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjS£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M8hjO£ubjv)�”}”(hhh]”hÞ)�”}”(hŒSan input stream shall not be routed to multiple output streams (stream duplication)”h]”hŒSan input stream shall not be routed to multiple output streams (stream duplication)”…”�”}”(hjn£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M7hjk£ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjO£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jj£h´M8hjL£ubjV)�”}”(hŒx``V4L2_SUBDEV_ROUTING_NO_N_TO_1`` multiple input streams shall not be routed to the same output stream (stream merging) ”h]”(j\)�”}”(hŒ!``V4L2_SUBDEV_ROUTING_NO_N_TO_1``”h]”hú)�”}”(hj�£h]”hŒV4L2_SUBDEV_ROUTING_NO_N_TO_1”…”�”}”(hj‘£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M<hj‰£ubjv)�”}”(hhh]”hÞ)�”}”(hŒUmultiple input streams shall not be routed to the same output stream (stream merging)”h]”hŒUmultiple input streams shall not be routed to the same output stream (stream merging)”…”�”}”(hj¨£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M;hj¥£ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‰£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¤£h´M<hjL£ubjV)�”}”(hŒm``V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX`` all streams from a sink pad must be routed to a single source pad ”h]”(j\)�”}”(hŒ*``V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX``”h]”hú)�”}”(hjÉ£h]”hŒ&V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX”…”�”}”(hjË£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÇ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M?hjãubjv)�”}”(hhh]”hÞ)�”}”(hŒAall streams from a sink pad must be routed to a single source pad”h]”hŒAall streams from a sink pad must be routed to a single source pad”…”�”}”(hjâ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÞ£h´M?hjߣubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÞ£h´M?hjL£ubjV)�”}”(hŒo``V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX`` all streams on a source pad must originate from a single sink pad ”h]”(j\)�”}”(hŒ,``V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX``”h]”hú)�”}”(hj¤h]”hŒ(V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MBhjü£ubjv)�”}”(hhh]”hÞ)�”}”(hŒAall streams on a source pad must originate from a single sink pad”h]”hŒAall streams on a source pad must originate from a single sink pad”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¤h´MBhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjü£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¤h´MBhjL£ubjV)�”}”(hŒ]``V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING`` sink pads shall not contain multiplexed streams ”h]”(j\)�”}”(hŒ,``V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING``”h]”hú)�”}”(hj;¤h]”hŒ(V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING”…”�”}”(hj=¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj9¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MEhj5¤ubjv)�”}”(hhh]”hÞ)�”}”(hŒ/sink pads shall not contain multiplexed streams”h]”hŒ/sink pads shall not contain multiplexed streams”…”�”}”(hjT¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jP¤h´MEhjQ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj5¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jP¤h´MEhjL£ubjV)�”}”(hŒa``V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING`` source pads shall not contain multiplexed streams ”h]”(j\)�”}”(hŒ.``V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING``”h]”hú)�”}”(hjt¤h]”hŒ*V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING”…”�”}”(hjv¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjr¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MHhjn¤ubjv)�”}”(hhh]”hÞ)�”}”(hŒ1source pads shall not contain multiplexed streams”h]”hŒ1source pads shall not contain multiplexed streams”…”�”}”(hj�¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‰¤h´MHhjФubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjn¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j‰¤h´MHhjL£ubjV)�”}”(hŒµ``V4L2_SUBDEV_ROUTING_ONLY_1_TO_1`` only non-overlapping 1-to-1 stream routing is allowed (a combination of **V4L2_SUBDEV_ROUTING_NO_1_TO_N** and **V4L2_SUBDEV_ROUTING_NO_N_TO_1**) ”h]”(j\)�”}”(hŒ#``V4L2_SUBDEV_ROUTING_ONLY_1_TO_1``”h]”hú)�”}”(hj­¤h]”hŒV4L2_SUBDEV_ROUTING_ONLY_1_TO_1”…”�”}”(hj¯¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj«¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MLhj§¤ubjv)�”}”(hhh]”hÞ)�”}”(hŒ�only non-overlapping 1-to-1 stream routing is allowed (a combination of **V4L2_SUBDEV_ROUTING_NO_1_TO_N** and **V4L2_SUBDEV_ROUTING_NO_N_TO_1**)”h]”(hŒHonly non-overlapping 1-to-1 stream routing is allowed (a combination of ”…”�”}”(hjƤh²hh³Nh´NubjÄ)�”}”(hŒ!**V4L2_SUBDEV_ROUTING_NO_1_TO_N**”h]”hŒV4L2_SUBDEV_ROUTING_NO_1_TO_N”…”�”}”(hjΤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjƤubhŒ and ”…”�”}”(hjƤh²hh³Nh´NubjÄ)�”}”(hŒ!**V4L2_SUBDEV_ROUTING_NO_N_TO_1**”h]”hŒV4L2_SUBDEV_ROUTING_NO_N_TO_1”…”�”}”(hjà¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjƤubhŒ)”…”�”}”(hjƤh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MKhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj§¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¤h´MLhjL£ubjV)�”}”(hX``V4L2_SUBDEV_ROUTING_NO_STREAM_MIX`` all streams from a sink pad must be routed to a single source pad, and that source pad shall not get routes from any other sink pad (a combination of **V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX** and **V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX**) ”h]”(j\)�”}”(hŒ%``V4L2_SUBDEV_ROUTING_NO_STREAM_MIX``”h]”hú)�”}”(hj ¥h]”hŒ!V4L2_SUBDEV_ROUTING_NO_STREAM_MIX”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MRhj¥ubjv)�”}”(hhh]”hÞ)�”}”(hŒòall streams from a sink pad must be routed to a single source pad, and that source pad shall not get routes from any other sink pad (a combination of **V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX** and **V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX**)”h]”(hŒ–all streams from a sink pad must be routed to a single source pad, and that source pad shall not get routes from any other sink pad (a combination of ”…”�”}”(hj$¥h²hh³Nh´NubjÄ)�”}”(hŒ***V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX**”h]”hŒ&V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX”…”�”}”(hj,¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj$¥ubhŒ and ”…”�”}”(hj$¥h²hh³Nh´NubjÄ)�”}”(hŒ,**V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX**”h]”hŒ(V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX”…”�”}”(hj>¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj$¥ubhŒ)”…”�”}”(hj$¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MOhj!¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j ¥h´MRhjL£ubjV)�”}”(hŒf``V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING`` no multiplexed streams allowed on either source or sink sides.”h]”(j\)�”}”(hŒ'``V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING``”h]”hú)�”}”(hji¥h]”hŒ#V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING”…”�”}”(hjk¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjg¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MThjc¥ubjv)�”}”(hhh]”hÞ)�”}”(hŒ>no multiplexed streams allowed on either source or sink sides.”h]”hŒ>no multiplexed streams allowed on either source or sink sides.”…”�”}”(hj‚¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MUhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjc¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j~¥h´MThjL£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj0£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ)v4l2_subdev_routing_validate (C function)”Œc.v4l2_subdev_routing_validate”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ”int v4l2_subdev_routing_validate (struct v4l2_subdev *sd, const struct v4l2_subdev_krouting *routing, enum v4l2_subdev_routing_restriction disallow)”h]”j{)�”}”(hŒ“int v4l2_subdev_routing_validate(struct v4l2_subdev *sd, const struct v4l2_subdev_krouting *routing, enum v4l2_subdev_routing_restriction disallow)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjÃ¥h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¿¥h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ¥h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¿¥h²hh³jÑ¥h´M^ubj¤)�”}”(hŒv4l2_subdev_routing_validate”h]”jª)�”}”(hŒv4l2_subdev_routing_validate”h]”hŒv4l2_subdev_routing_validate”…”�”}”(hjä¥h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjà¥ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj¿¥h²hh³jÑ¥h´M^ubj¢i)�”}”(hŒs(struct v4l2_subdev *sd, const struct v4l2_subdev_krouting *routing, enum v4l2_subdev_routing_restriction disallow)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjü¥ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j ¦Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijæ¥sbŒc.v4l2_subdev_routing_validate”†”asbuh1hhjü¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>¦h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjü¥ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjL¦h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjü¥ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjY¦h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjü¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjø¥ubj¨i)�”}”(hŒ*const struct v4l2_subdev_krouting *routing”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn¦ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn¦ubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn¦ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš¦h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn¦ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_krouting”h]”hŒv4l2_subdev_krouting”…”�”}”(hj«¦h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¨¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j­¦Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j:¦Œc.v4l2_subdev_routing_validate”†”asbuh1hhjn¦ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɦh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn¦ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjצh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjn¦ubjª)�”}”(hŒrouting”h]”hŒrouting”…”�”}”(hjä¦h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjn¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjø¥ubj¨i)�”}”(hŒ-enum v4l2_subdev_routing_restriction disallow”h]”(j�)�”}”(hjjh]”hŒenum”…”�”}”(hjý¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù¦ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù¦ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_routing_restriction”h]”hŒv4l2_subdev_routing_restriction”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j§Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j:¦Œc.v4l2_subdev_routing_validate”†”asbuh1hhjù¦ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9§h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù¦ubjª)�”}”(hŒdisallow”h]”hŒdisallow”…”�”}”(hjG§h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjù¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjø¥ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj¿¥h²hh³jÑ¥h´M^ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj»¥h²hh³jÑ¥h´M^ubah}”(h]”j¶¥ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÑ¥h´M^hj¸¥h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ1Verify that routes comply with driver constraints”h]”hŒ1Verify that routes comply with driver constraints”…”�”}”(hjq§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M^hjn§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¸¥h²hh³jÑ¥h´M^ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j‰§jøj‰§jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX[**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``const struct v4l2_subdev_krouting *routing`` Routing to verify ``enum v4l2_subdev_routing_restriction disallow`` Restrictions on routes **Description** This verifies that the given routing complies with the **disallow** constraints. Returns 0 on success, error value otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj“§h]”hŒ Parameters”…”�”}”(hj•§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj‘§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mbhj�§ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj²§h]”hŒstruct v4l2_subdev *sd”…”�”}”(hj´§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj°§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M`hj¬§ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hj˧h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jǧh´M`hjȧubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¬§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jǧh´M`hj©§ubjV)�”}”(hŒA``const struct v4l2_subdev_krouting *routing`` Routing to verify ”h]”(j\)�”}”(hŒ.``const struct v4l2_subdev_krouting *routing``”h]”hú)�”}”(hjë§h]”hŒ*const struct v4l2_subdev_krouting *routing”…”�”}”(hjí§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjé§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mahjå§ubjv)�”}”(hhh]”hÞ)�”}”(hŒRouting to verify”h]”hŒRouting to verify”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¨h´Mahj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjå§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¨h´Mahj©§ubjV)�”}”(hŒI``enum v4l2_subdev_routing_restriction disallow`` Restrictions on routes ”h]”(j\)�”}”(hŒ1``enum v4l2_subdev_routing_restriction disallow``”h]”hú)�”}”(hj$¨h]”hŒ-enum v4l2_subdev_routing_restriction disallow”…”�”}”(hj&¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj"¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mbhj¨ubjv)�”}”(hhh]”hÞ)�”}”(hŒRestrictions on routes”h]”hŒRestrictions on routes”…”�”}”(hj=¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j9¨h´Mbhj:¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j9¨h´Mbhj©§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj�§ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj_¨h]”hŒ Description”…”�”}”(hja¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj]¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mdhj�§ubhÞ)�”}”(hŒPThis verifies that the given routing complies with the **disallow** constraints.”h]”(hŒ7This verifies that the given routing complies with the ”…”�”}”(hju¨h²hh³Nh´NubjÄ)�”}”(hŒ **disallow**”h]”hŒdisallow”…”�”}”(hj}¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhju¨ubhŒ constraints.”…”�”}”(hju¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mchj�§ubhÞ)�”}”(hŒ,Returns 0 on success, error value otherwise.”h]”hŒ,Returns 0 on success, error value otherwise.”…”�”}”(hj–¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mehj�§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ'v4l2_subdev_enable_streams (C function)”Œc.v4l2_subdev_enable_streams”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒRint v4l2_subdev_enable_streams (struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”j{)�”}”(hŒQint v4l2_subdev_enable_streams(struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjŨh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjÁ¨h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mmubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¨h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁ¨h²hh³jÓ¨h´Mmubj¤)�”}”(hŒv4l2_subdev_enable_streams”h]”jª)�”}”(hŒv4l2_subdev_enable_streams”h]”hŒv4l2_subdev_enable_streams”…”�”}”(hjæ¨h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjâ¨ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÁ¨h²hh³jÓ¨h´Mmubj¢i)�”}”(hŒ3(struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ¨ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjþ¨ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j"©Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijè¨sbŒc.v4l2_subdev_enable_streams”†”asbuh1hhjþ¨ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@©h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjþ¨ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjN©h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjþ¨ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj[©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjþ¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjú¨ubj¨i)�”}”(hŒu32 pad”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjw©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjt©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jy©Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j<©Œc.v4l2_subdev_enable_streams”†”asbuh1hhjp©ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•©h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjp©ubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hj£©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjp©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjú¨ubj¨i)�”}”(hŒu64 streams_mask”h]”(h)�”}”(hhh]”jª)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj¿©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¼©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÁ©Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j<©Œc.v4l2_subdev_enable_streams”†”asbuh1hhj¸©ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ©h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸©ubjª)�”}”(hŒ streams_mask”h]”hŒ streams_mask”…”�”}”(hjë©h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¸©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjú¨ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjÁ¨h²hh³jÓ¨h´Mmubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj½¨h²hh³jÓ¨h´Mmubah}”(h]”j¸¨ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÓ¨h´Mmhjº¨h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒEnable streams on a pad”h]”hŒEnable streams on a pad”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mmhjªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjº¨h²hh³jÓ¨h´Mmubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j-ªjøj-ªjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¶**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``u32 pad`` The pad ``u64 streams_mask`` Bitmask of streams to enable **Description** This function enables streams on a source **pad** of a subdevice. The pad is identified by its index, while the streams are identified by the **streams_mask** bitmask. This allows enabling multiple streams on a pad at once. Enabling a stream that is already enabled isn't allowed. If **streams_mask** contains an already enabled stream, this function returns -EALREADY without performing any operation. Per-stream enable is only available for subdevs that implement the .enable_streams() and .disable_streams() operations. For other subdevs, this function implements a best-effort compatibility by calling the .s_stream() operation, limited to subdevs that have a single source pad. Drivers that are not stream-aware shall set **streams_mask** to BIT_ULL(0). **Return** * 0: Success * -EALREADY: One of the streams in streams_mask is already enabled * -EINVAL: The pad index is invalid, or doesn't correspond to a source pad * -EOPNOTSUPP: Falling back to the legacy .s_stream() operation is impossible because the subdev has multiple source pads”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj7ªh]”hŒ Parameters”…”�”}”(hj9ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj5ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mqhj1ªubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjVªh]”hŒstruct v4l2_subdev *sd”…”�”}”(hjXªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjTªubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MnhjPªubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjoªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jkªh´Mnhjlªubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjPªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jkªh´MnhjMªubjV)�”}”(hŒ``u32 pad`` The pad ”h]”(j\)�”}”(hŒ ``u32 pad``”h]”hú)�”}”(hj�ªh]”hŒu32 pad”…”�”}”(hj‘ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj�ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mohj‰ªubjv)�”}”(hhh]”hÞ)�”}”(hŒThe pad”h]”hŒThe pad”…”�”}”(hj¨ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¤ªh´Mohj¥ªubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj‰ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¤ªh´MohjMªubjV)�”}”(hŒ2``u64 streams_mask`` Bitmask of streams to enable ”h]”(j\)�”}”(hŒ``u64 streams_mask``”h]”hú)�”}”(hjȪh]”hŒu64 streams_mask”…”�”}”(hjʪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjƪubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mphjªubjv)�”}”(hhh]”hÞ)�”}”(hŒBitmask of streams to enable”h]”hŒBitmask of streams to enable”…”�”}”(hjáªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jݪh´MphjÞªubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jݪh´MphjMªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj1ªubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj«h]”hŒ Description”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mrhj1ªubhÞ)�”}”(hŒßThis function enables streams on a source **pad** of a subdevice. The pad is identified by its index, while the streams are identified by the **streams_mask** bitmask. This allows enabling multiple streams on a pad at once.”h]”(hŒ*This function enables streams on a source ”…”�”}”(hj«h²hh³Nh´NubjÄ)�”}”(hŒ**pad**”h]”hŒpad”…”�”}”(hj!«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«ubhŒ] of a subdevice. The pad is identified by its index, while the streams are identified by the ”…”�”}”(hj«h²hh³Nh´NubjÄ)�”}”(hŒ**streams_mask**”h]”hŒ streams_mask”…”�”}”(hj3«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj«ubhŒA bitmask. This allows enabling multiple streams on a pad at once.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mqhj1ªubhÞ)�”}”(hŒ²Enabling a stream that is already enabled isn't allowed. If **streams_mask** contains an already enabled stream, this function returns -EALREADY without performing any operation.”h]”(hŒ>Enabling a stream that is already enabled isn’t allowed. If ”…”�”}”(hjL«h²hh³Nh´NubjÄ)�”}”(hŒ**streams_mask**”h]”hŒ streams_mask”…”�”}”(hjT«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjL«ubhŒf contains an already enabled stream, this function returns -EALREADY without performing any operation.”…”�”}”(hjL«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mvhj1ªubhÞ)�”}”(hXPer-stream enable is only available for subdevs that implement the .enable_streams() and .disable_streams() operations. For other subdevs, this function implements a best-effort compatibility by calling the .s_stream() operation, limited to subdevs that have a single source pad.”h]”hXPer-stream enable is only available for subdevs that implement the .enable_streams() and .disable_streams() operations. For other subdevs, this function implements a best-effort compatibility by calling the .s_stream() operation, limited to subdevs that have a single source pad.”…”�”}”(hjm«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mzhj1ªubhÞ)�”}”(hŒKDrivers that are not stream-aware shall set **streams_mask** to BIT_ULL(0).”h]”(hŒ,Drivers that are not stream-aware shall set ”…”�”}”(hj|«h²hh³Nh´NubjÄ)�”}”(hŒ**streams_mask**”h]”hŒ streams_mask”…”�”}”(hj„«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj|«ubhŒ to BIT_ULL(0).”…”�”}”(hj|«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj1ªubhÞ)�”}”(hŒ **Return**”h]”jÄ)�”}”(hjŸ«h]”hŒReturn”…”�”}”(hj¡«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj�«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj1ªubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ 0: Success”h]”hÞ)�”}”(hj¾«h]”hŒ 0: Success”…”�”}”(hjÀ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‚hj¼«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jº«hj·«ubj»«)�”}”(hŒ@-EALREADY: One of the streams in streams_mask is already enabled”h]”hÞ)�”}”(hjÖ«h]”hŒ@-EALREADY: One of the streams in streams_mask is already enabled”…”�”}”(hjØ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MƒhjÔ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jº«hj·«ubj»«)�”}”(hŒH-EINVAL: The pad index is invalid, or doesn't correspond to a source pad”h]”hÞ)�”}”(hjî«h]”hŒJ-EINVAL: The pad index is invalid, or doesn’t correspond to a source pad”…”�”}”(hjð«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M„hjì«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jº«hj·«ubj»«)�”}”(hŒw-EOPNOTSUPP: Falling back to the legacy .s_stream() operation is impossible because the subdev has multiple source pads”h]”hÞ)�”}”(hŒw-EOPNOTSUPP: Falling back to the legacy .s_stream() operation is impossible because the subdev has multiple source pads”h]”hŒw-EOPNOTSUPP: Falling back to the legacy .s_stream() operation is impossible because the subdev has multiple source pads”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M…hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jº«hj·«ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”jjuh1jµ«h³jÍ«h´M‚hj1ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ(v4l2_subdev_disable_streams (C function)”Œc.v4l2_subdev_disable_streams”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒSint v4l2_subdev_disable_streams (struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”j{)�”}”(hŒRint v4l2_subdev_disable_streams(struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjD¬h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj@¬h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS¬h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj@¬h²hh³jR¬h´M�ubj¤)�”}”(hŒv4l2_subdev_disable_streams”h]”jª)�”}”(hŒv4l2_subdev_disable_streams”h]”hŒv4l2_subdev_disable_streams”…”�”}”(hje¬h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hja¬ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj@¬h²hh³jR¬h´M�ubj¢i)�”}”(hŒ3(struct v4l2_subdev *sd, u32 pad, u64 streams_mask)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj�¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}¬ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjެh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}¬ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjŸ¬h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjœ¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j¡¬Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijg¬sbŒc.v4l2_subdev_disable_streams”†”asbuh1hhj}¬ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿¬h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}¬ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjͬh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj}¬ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjÚ¬h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj}¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjy¬ubj¨i)�”}”(hŒu32 pad”h]”(h)�”}”(hhh]”jª)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjö¬h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjó¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jø¬Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j»¬Œc.v4l2_subdev_disable_streams”†”asbuh1hhjï¬ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjï¬ubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hj"­h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjï¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjy¬ubj¨i)�”}”(hŒu64 streams_mask”h]”(h)�”}”(hhh]”jª)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj>­h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj;­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j@­Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j»¬Œc.v4l2_subdev_disable_streams”†”asbuh1hhj7­ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\­h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj7­ubjª)�”}”(hŒ streams_mask”h]”hŒ streams_mask”…”�”}”(hjj­h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj7­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjy¬ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj@¬h²hh³jR¬h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj<¬h²hh³jR¬h´M�ubah}”(h]”j7¬ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jR¬h´M�hj9¬h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒDisable streams on a pad”h]”hŒDisable streams on a pad”…”�”}”(hj”­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj‘­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj9¬h²hh³jR¬h´M�ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j¬­jøj¬­jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¬**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``u32 pad`` The pad ``u64 streams_mask`` Bitmask of streams to disable **Description** This function disables streams on a source **pad** of a subdevice. The pad is identified by its index, while the streams are identified by the **streams_mask** bitmask. This allows disabling multiple streams on a pad at once. Disabling a streams that is not enabled isn't allowed. If **streams_mask** contains a disabled stream, this function returns -EALREADY without performing any operation. Per-stream disable is only available for subdevs that implement the .enable_streams() and .disable_streams() operations. For other subdevs, this function implements a best-effort compatibility by calling the .s_stream() operation, limited to subdevs that have a single source pad. Drivers that are not stream-aware shall set **streams_mask** to BIT_ULL(0). **Return** * 0: Success * -EALREADY: One of the streams in streams_mask is not enabled * -EINVAL: The pad index is invalid, or doesn't correspond to a source pad * -EOPNOTSUPP: Falling back to the legacy .s_stream() operation is impossible because the subdev has multiple source pads”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj¶­h]”hŒ Parameters”…”�”}”(hj¸­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj´­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‘hj°­ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjÕ­h]”hŒstruct v4l2_subdev *sd”…”�”}”(hj×­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÓ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŽhjÏ­ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjî­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jê­h´MŽhjë­ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÏ­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jê­h´MŽhjÌ­ubjV)�”}”(hŒ``u32 pad`` The pad ”h]”(j\)�”}”(hŒ ``u32 pad``”h]”hú)�”}”(hj®h]”hŒu32 pad”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hj®ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe pad”h]”hŒThe pad”…”�”}”(hj'®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j#®h´M�hj$®ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j#®h´M�hjÌ­ubjV)�”}”(hŒ3``u64 streams_mask`` Bitmask of streams to disable ”h]”(j\)�”}”(hŒ``u64 streams_mask``”h]”hú)�”}”(hjG®h]”hŒu64 streams_mask”…”�”}”(hjI®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjE®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M�hjA®ubjv)�”}”(hhh]”hÞ)�”}”(hŒBitmask of streams to disable”h]”hŒBitmask of streams to disable”…”�”}”(hj`®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j\®h´M�hj]®ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjA®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j\®h´M�hjÌ­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj°­ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj‚®h]”hŒ Description”…”�”}”(hj„®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj€®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M’hj°­ubhÞ)�”}”(hŒáThis function disables streams on a source **pad** of a subdevice. The pad is identified by its index, while the streams are identified by the **streams_mask** bitmask. This allows disabling multiple streams on a pad at once.”h]”(hŒ+This function disables streams on a source ”…”�”}”(hj˜®h²hh³Nh´NubjÄ)�”}”(hŒ**pad**”h]”hŒpad”…”�”}”(hj ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj˜®ubhŒ] of a subdevice. The pad is identified by its index, while the streams are identified by the ”…”�”}”(hj˜®h²hh³Nh´NubjÄ)�”}”(hŒ**streams_mask**”h]”hŒ streams_mask”…”�”}”(hj²®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj˜®ubhŒB bitmask. This allows disabling multiple streams on a pad at once.”…”�”}”(hj˜®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‘hj°­ubhÞ)�”}”(hŒ¨Disabling a streams that is not enabled isn't allowed. If **streams_mask** contains a disabled stream, this function returns -EALREADY without performing any operation.”h]”(hŒ` and :c:type:`v4l2_subdev_pad_ops.disable_streams ` operations can use this helper to implement the legacy :c:type:`v4l2_subdev_video_ops.s_stream ` operation. This helper can only be used by subdevs that have a single source pad. **Return** 0 on success, or a negative error code otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÕ°h]”hŒ Parameters”…”�”}”(hj×°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÓ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M±hjϰubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjô°h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjö°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjò°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¯hjî°ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hj ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j ±h´M¯hj ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjî°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j ±h´M¯hjë°ubjV)�”}”(hŒ+``int enable`` Enable or disable streaming ”h]”(j\)�”}”(hŒ``int enable``”h]”hú)�”}”(hj-±h]”hŒ int enable”…”�”}”(hj/±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj+±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M°hj'±ubjv)�”}”(hhh]”hÞ)�”}”(hŒEnable or disable streaming”h]”hŒEnable or disable streaming”…”�”}”(hjF±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jB±h´M°hjC±ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj'±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jB±h´M°hjë°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjϰubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjh±h]”hŒ Description”…”�”}”(hjj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjf±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M²hjϰubhÞ)�”}”(hX@Subdevice drivers that implement the streams-aware :c:type:`v4l2_subdev_pad_ops.enable_streams ` and :c:type:`v4l2_subdev_pad_ops.disable_streams ` operations can use this helper to implement the legacy :c:type:`v4l2_subdev_video_ops.s_stream ` operation.”h]”(hŒ3Subdevice drivers that implement the streams-aware ”…”�”}”(hj~±h²hh³Nh´Nubh)�”}”(hŒB:c:type:`v4l2_subdev_pad_ops.enable_streams `”h]”hú)�”}”(hjˆ±h]”hŒ"v4l2_subdev_pad_ops.enable_streams”…”�”}”(hjбh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj†±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M±hj~±ubhŒ and ”…”�”}”(hj~±h²hh³Nh´Nubh)�”}”(hŒC:c:type:`v4l2_subdev_pad_ops.disable_streams `”h]”hú)�”}”(hj¬±h]”hŒ#v4l2_subdev_pad_ops.disable_streams”…”�”}”(hj®±h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjª±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³j¥±h´M±hj~±ubhŒ8 operations can use this helper to implement the legacy ”…”�”}”(hj~±h²hh³Nh´Nubh)�”}”(hŒ@:c:type:`v4l2_subdev_video_ops.s_stream `”h]”hú)�”}”(hjϱh]”hŒv4l2_subdev_video_ops.s_stream”…”�”}”(hjѱh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjͱubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_video_ops”uh1hh³j¥±h´M±hj~±ubhŒ operation.”…”�”}”(hj~±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¥±h´M±hjϰubhÞ)�”}”(hŒFThis helper can only be used by subdevs that have a single source pad.”h]”hŒFThis helper can only be used by subdevs that have a single source pad.”…”�”}”(hjö±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¶hjϰubhÞ)�”}”(hŒ **Return**”h]”jÄ)�”}”(hj²h]”hŒReturn”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¸hjϰubhÞ)�”}”(hŒ10 on success, or a negative error code otherwise.”h]”hŒ10 on success, or a negative error code otherwise.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¹hjϰubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ5__v4l2_subdev_get_frame_desc_passthrough (C function)”Œ*c.__v4l2_subdev_get_frame_desc_passthrough”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ™int __v4l2_subdev_get_frame_desc_passthrough (struct v4l2_subdev *sd, struct v4l2_subdev_state *state, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”j{)�”}”(hŒ˜int __v4l2_subdev_get_frame_desc_passthrough(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjL²h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjH²h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¾ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[²h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjH²h²hh³jZ²h´M¾ubj¤)�”}”(hŒ(__v4l2_subdev_get_frame_desc_passthrough”h]”jª)�”}”(hŒ(__v4l2_subdev_get_frame_desc_passthrough”h]”hŒ(__v4l2_subdev_get_frame_desc_passthrough”…”�”}”(hjm²h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hji²ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjH²h²hh³jZ²h´M¾ubj¢i)�”}”(hŒl(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj‰²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…²ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–²h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj…²ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj§²h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¤²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j©²Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijo²sbŒ*c.__v4l2_subdev_get_frame_desc_passthrough”†”asbuh1hhj…²ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDzh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj…²ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjÕ²h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj…²ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjâ²h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj…²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�²ubj¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjû²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷²ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj÷²ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j³Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jòŒ*c.__v4l2_subdev_get_frame_desc_passthrough”†”asbuh1hhj÷²ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7³h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj÷²ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjE³h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj÷²ubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjR³h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj÷²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�²ubj¨i)�”}”(hŒunsigned int pad”h]”(jji)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjk³h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjg³ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy³h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjg³ubjji)�”}”(hŒint”h]”hŒint”…”�”}”(hj‡³h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjg³ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•³h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjg³ubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hj£³h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjg³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�²ubj¨i)�”}”(hŒstruct v4l2_mbus_frame_desc *fd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¼³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸³ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɳh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸³ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_mbus_frame_desc”h]”hŒv4l2_mbus_frame_desc”…”�”}”(hjÚ³h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj׳ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jܳŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jòŒ*c.__v4l2_subdev_get_frame_desc_passthrough”†”asbuh1hhj¸³ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø³h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸³ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj¸³ubjª)�”}”(hŒfd”h]”hŒfd”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¸³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj�²ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjH²h²hh³jZ²h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjD²h²hh³jZ²h´M¾ubah}”(h]”j?²ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jZ²h´M¾hjA²h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒSHelper to implement the subdev get_frame_desc operation in simple passthrough cases”h]”hŒSHelper to implement the subdev get_frame_desc operation in simple passthrough cases”…”�”}”(hj=´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¾hj:´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjA²h²hh³jZ²h´M¾ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jU´jøjU´jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX!**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``struct v4l2_subdev_state *state`` The locked subdevice active state ``unsigned int pad`` The source pad index ``struct v4l2_mbus_frame_desc *fd`` The mbus frame desc **Description** This helper implements the get_frame_desc operation for subdevices that pass streams through without modification. The helper iterates over the subdevice's sink pads, calls get_frame_desc on the remote subdevice connected to each sink pad, and collects the frame desc entries for streams that are routed to the given source pad according to the subdevice's routing table. Each entry is copied as-is from the upstream source, with the exception of the 'stream' field which is remapped to the source stream ID from the routing table. The frame desc type is taken from the first upstream source. If multiple sink pads are involved and the upstream sources report different frame desc types, -EPIPE is returned. The caller must hold the subdevice's active state lock. This variant is intended for drivers that need to perform additional work around the passthrough frame descriptor collection. Drivers that do not need any customization should use v4l2_subdev_get_frame_desc_passthrough() instead. **Return** 0 on success, or a negative error code otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj_´h]”hŒ Parameters”…”�”}”(hja´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj]´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÂhjY´ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj~´h]”hŒstruct v4l2_subdev *sd”…”�”}”(hj€´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj|´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjx´ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hj—´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j“´h´MÀhj”´ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjx´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j“´h´MÀhju´ubjV)�”}”(hŒF``struct v4l2_subdev_state *state`` The locked subdevice active state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hj·´h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hj¹´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjµ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhj±´ubjv)�”}”(hhh]”hÞ)�”}”(hŒ!The locked subdevice active state”h]”hŒ!The locked subdevice active state”…”�”}”(hjдh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÌ´h´MÁhjÍ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj±´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÌ´h´MÁhju´ubjV)�”}”(hŒ*``unsigned int pad`` The source pad index ”h]”(j\)�”}”(hŒ``unsigned int pad``”h]”hú)�”}”(hjð´h]”hŒunsigned int pad”…”�”}”(hjò´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjî´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÂhjê´ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe source pad index”h]”hŒThe source pad index”…”�”}”(hj µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jµh´MÂhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjê´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jµh´MÂhju´ubjV)�”}”(hŒ8``struct v4l2_mbus_frame_desc *fd`` The mbus frame desc ”h]”(j\)�”}”(hŒ#``struct v4l2_mbus_frame_desc *fd``”h]”hú)�”}”(hj)µh]”hŒstruct v4l2_mbus_frame_desc *fd”…”�”}”(hj+µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj'µubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÃhj#µubjv)�”}”(hhh]”hÞ)�”}”(hŒThe mbus frame desc”h]”hŒThe mbus frame desc”…”�”}”(hjBµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j>µh´MÃhj?µubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj#µubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j>µh´MÃhju´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjY´ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjdµh]”hŒ Description”…”�”}”(hjfµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjbµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÅhjY´ubhÞ)�”}”(hŒrThis helper implements the get_frame_desc operation for subdevices that pass streams through without modification.”h]”hŒrThis helper implements the get_frame_desc operation for subdevices that pass streams through without modification.”…”�”}”(hjzµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÄhjY´ubhÞ)�”}”(hX The helper iterates over the subdevice's sink pads, calls get_frame_desc on the remote subdevice connected to each sink pad, and collects the frame desc entries for streams that are routed to the given source pad according to the subdevice's routing table. Each entry is copied as-is from the upstream source, with the exception of the 'stream' field which is remapped to the source stream ID from the routing table.”h]”hX¨The helper iterates over the subdevice’s sink pads, calls get_frame_desc on the remote subdevice connected to each sink pad, and collects the frame desc entries for streams that are routed to the given source pad according to the subdevice’s routing table. Each entry is copied as-is from the upstream source, with the exception of the ‘stream’ field which is remapped to the source stream ID from the routing table.”…”�”}”(hj‰µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÇhjY´ubhÞ)�”}”(hŒ¯The frame desc type is taken from the first upstream source. If multiple sink pads are involved and the upstream sources report different frame desc types, -EPIPE is returned.”h]”hŒ¯The frame desc type is taken from the first upstream source. If multiple sink pads are involved and the upstream sources report different frame desc types, -EPIPE is returned.”…”�”}”(hj˜µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÎhjY´ubhÞ)�”}”(hXThe caller must hold the subdevice's active state lock. This variant is intended for drivers that need to perform additional work around the passthrough frame descriptor collection. Drivers that do not need any customization should use v4l2_subdev_get_frame_desc_passthrough() instead.”h]”hXThe caller must hold the subdevice’s active state lock. This variant is intended for drivers that need to perform additional work around the passthrough frame descriptor collection. Drivers that do not need any customization should use v4l2_subdev_get_frame_desc_passthrough() instead.”…”�”}”(hj§µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÒhjY´ubhÞ)�”}”(hŒ **Return**”h]”jÄ)�”}”(hj¸µ•?h]”hŒReturn”…”�”}”(hjºµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj¶µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M×hjY´ubhÞ)�”}”(hŒ10 on success, or a negative error code otherwise.”h]”hŒ10 on success, or a negative error code otherwise.”…”�”}”(hjεh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MØhjY´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ3v4l2_subdev_get_frame_desc_passthrough (C function)”Œ(c.v4l2_subdev_get_frame_desc_passthrough”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒvint v4l2_subdev_get_frame_desc_passthrough (struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”j{)�”}”(hŒuint v4l2_subdev_get_frame_desc_passthrough(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”(jji)�”}”(hŒint”h]”hŒint”…”�”}”(hjýµh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjùµh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Màubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjùµh²hh³j ¶h´Màubj¤)�”}”(hŒ&v4l2_subdev_get_frame_desc_passthrough”h]”jª)�”}”(hŒ&v4l2_subdev_get_frame_desc_passthrough”h]”hŒ&v4l2_subdev_get_frame_desc_passthrough”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¶ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjùµh²hh³j ¶h´Màubj¢i)�”}”(hŒK(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj:¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj6¶ubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjX¶h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjU¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jZ¶Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij ¶sbŒ(c.v4l2_subdev_get_frame_desc_passthrough”†”asbuh1hhj6¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj6¶ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj†¶h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj6¶ubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj“¶h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj6¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj2¶ubj¨i)�”}”(hŒunsigned int pad”h]”(jji)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¬¶h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¨¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¨¶ubjji)�”}”(hŒint”h]”hŒint”…”�”}”(hjȶh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¨¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¨¶ubjª)�”}”(hŒpad”h]”hŒpad”…”�”}”(hjä¶h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¨¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj2¶ubj¨i)�”}”(hŒstruct v4l2_mbus_frame_desc *fd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjý¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù¶ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_mbus_frame_desc”h]”hŒv4l2_mbus_frame_desc”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j·Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jt¶Œ(c.v4l2_subdev_get_frame_desc_passthrough”†”asbuh1hhjù¶ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9·h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù¶ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjG·h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjù¶ubjª)�”}”(hŒfd”h]”hŒfd”…”�”}”(hjT·h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjù¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj2¶ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjùµh²hh³j ¶h´Màubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjõµh²hh³j ¶h´Màubah}”(h]”jðµah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j ¶h´Màhjòµh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒSHelper to implement the subdev get_frame_desc operation in simple passthrough cases”h]”hŒSHelper to implement the subdev get_frame_desc operation in simple passthrough cases”…”�”}”(hj~·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Màhj{·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjòµh²hh³j ¶h´Màubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j–·jøj–·jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX±**Parameters** ``struct v4l2_subdev *sd`` The subdevice ``unsigned int pad`` The source pad index ``struct v4l2_mbus_frame_desc *fd`` The mbus frame desc **Description** This function locks the subdevice's active state, calls __v4l2_subdev_get_frame_desc_passthrough(), and unlocks the state. This function can be assigned directly as the .get_frame_desc callback in :c:type:`v4l2_subdev_pad_ops` for subdevices that pass streams through without modification. Drivers that need to perform additional work should use __v4l2_subdev_get_frame_desc_passthrough() in their custom .get_frame_desc implementation instead. **Return** 0 on success, or a negative error code otherwise.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj ·h]”hŒ Parameters”…”�”}”(hj¢·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjž·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mähjš·ubjQ)�”}”(hhh]”(jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj¿·h]”hŒstruct v4l2_subdev *sd”…”�”}”(hjÁ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj½·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mâhj¹·ubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjØ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÔ·h´MâhjÕ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¹·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÔ·h´Mâhj¶·ubjV)�”}”(hŒ*``unsigned int pad`` The source pad index ”h]”(j\)�”}”(hŒ``unsigned int pad``”h]”hú)�”}”(hjø·h]”hŒunsigned int pad”…”�”}”(hjú·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjö·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mãhjò·ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe source pad index”h]”hŒThe source pad index”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j ¸h´Mãhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjò·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j ¸h´Mãhj¶·ubjV)�”}”(hŒ8``struct v4l2_mbus_frame_desc *fd`` The mbus frame desc ”h]”(j\)�”}”(hŒ#``struct v4l2_mbus_frame_desc *fd``”h]”hú)�”}”(hj1¸h]”hŒstruct v4l2_mbus_frame_desc *fd”…”�”}”(hj3¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj/¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mähj+¸ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe mbus frame desc”h]”hŒThe mbus frame desc”…”�”}”(hjJ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jF¸h´MähjG¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj+¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jF¸h´Mähj¶·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjš·ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjl¸h]”hŒ Description”…”�”}”(hjn¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhjš·ubhÞ)�”}”(hŒzThis function locks the subdevice's active state, calls __v4l2_subdev_get_frame_desc_passthrough(), and unlocks the state.”h]”hŒ|This function locks the subdevice’s active state, calls __v4l2_subdev_get_frame_desc_passthrough(), and unlocks the state.”…”�”}”(hj‚¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Måhjš·ubhÞ)�”}”(hXAThis function can be assigned directly as the .get_frame_desc callback in :c:type:`v4l2_subdev_pad_ops` for subdevices that pass streams through without modification. Drivers that need to perform additional work should use __v4l2_subdev_get_frame_desc_passthrough() in their custom .get_frame_desc implementation instead.”h]”(hŒJThis function can be assigned directly as the .get_frame_desc callback in ”…”�”}”(hj‘¸h²hh³Nh´Nubh)�”}”(hŒ:c:type:`v4l2_subdev_pad_ops`”h]”hú)�”}”(hj›¸h]”hŒv4l2_subdev_pad_ops”…”�”}”(hj�¸h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj™¸ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jÖjÚjŒv4l2_subdev_pad_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mèhj‘¸ubhŒÚ for subdevices that pass streams through without modification. Drivers that need to perform additional work should use __v4l2_subdev_get_frame_desc_passthrough() in their custom .get_frame_desc implementation instead.”…”�”}”(hj‘¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¸¸h´Mèhjš·ubhÞ)�”}”(hŒ **Return**”h]”jÄ)�”}”(hjŸh]”hŒReturn”…”�”}”(hjǸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mîhjš·ubhÞ)�”}”(hŒ10 on success, or a negative error code otherwise.”h]”hŒ10 on success, or a negative error code otherwise.”…”�”}”(hjÛ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mïhjš·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ#v4l2_subdev_lock_state (C function)”Œc.v4l2_subdev_lock_state”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ=void v4l2_subdev_lock_state (struct v4l2_subdev_state *state)”h]”j{)�”}”(hŒvoid v4l2_subdev_unlock_state(struct v4l2_subdev_state *state)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjšºh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj–ºh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ºh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj–ºh²hh³j¨ºh´Mubj¤)�”}”(hŒv4l2_subdev_unlock_state”h]”jª)�”}”(hŒv4l2_subdev_unlock_state”h]”hŒv4l2_subdev_unlock_state”…”�”}”(hj»ºh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj·ºubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj–ºh²hh³j¨ºh´Mubj¢i)�”}”(hŒ!(struct v4l2_subdev_state *state)”h]”j¨i)�”}”(hŒstruct v4l2_subdev_state *state”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj׺h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓºubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäºh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÓºubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjõºh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjòºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j÷ºŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij½ºsbŒc.v4l2_subdev_unlock_state”†”asbuh1hhjÓºubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÓºubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj#»h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjÓºubjª)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj0»h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÓºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjϺubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj–ºh²hh³j¨ºh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj’ºh²hh³j¨ºh´Mubah}”(h]”j�ºah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¨ºh´Mhj�ºh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒUnlocks the subdev state”h]”hŒUnlocks the subdev state”…”�”}”(hjZ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjW»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj�ºh²hh³j¨ºh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jr»jøjr»jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hŒ{**Parameters** ``struct v4l2_subdev_state *state`` The subdevice state **Description** Unlocks the given subdev state.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj|»h]”hŒ Parameters”…”�”}”(hj~»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjz»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjv»ubjQ)�”}”(hhh]”jV)�”}”(hŒ8``struct v4l2_subdev_state *state`` The subdevice state ”h]”(j\)�”}”(hŒ#``struct v4l2_subdev_state *state``”h]”hú)�”}”(hj›»h]”hŒstruct v4l2_subdev_state *state”…”�”}”(hj�»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj™»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj•»ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe subdevice state”h]”hŒThe subdevice state”…”�”}”(hj´»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j°»h´Mhj±»ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj•»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j°»h´Mhj’»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhjv»ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÖ»h]”hŒ Description”…”�”}”(hjØ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÔ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjv»ubhÞ)�”}”(hŒUnlocks the given subdev state.”h]”hŒUnlocks the given subdev state.”…”�”}”(hjì»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjv»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_lock_states (C function)”Œc.v4l2_subdev_lock_states”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒavoid v4l2_subdev_lock_states (struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”j{)�”}”(hŒ`void v4l2_subdev_lock_states(struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj¼h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*¼h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¼h²hh³j)¼h´Mubj¤)�”}”(hŒv4l2_subdev_lock_states”h]”jª)�”}”(hŒv4l2_subdev_lock_states”h]”hŒv4l2_subdev_lock_states”…”�”}”(hj<¼h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj8¼ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj¼h²hh³j)¼h´Mubj¢i)�”}”(hŒD(struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”(j¨i)�”}”(hŒ struct v4l2_subdev_state *state1”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjX¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjT¼ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¼h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjT¼ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjv¼h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjs¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jx¼Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij>¼sbŒc.v4l2_subdev_lock_states”†”asbuh1hhjT¼ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–¼h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjT¼ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj¤¼h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjT¼ubjª)�”}”(hŒstate1”h]”hŒstate1”…”�”}”(hj±¼h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjT¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjP¼ubj¨i)�”}”(hŒ struct v4l2_subdev_state *state2”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjʼh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƼubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×¼h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƼubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hjè¼h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjå¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j꼌modname”NŒ classname”NjÖjÙ)�”}”jÜ]”j’¼Œc.v4l2_subdev_lock_states”†”asbuh1hhjƼubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƼubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjƼubjª)�”}”(hŒstate2”h]”hŒstate2”…”�”}”(hj!½h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjƼubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjP¼ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj¼h²hh³j)¼h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj¼h²hh³j)¼h´Mubah}”(h]”j¼ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j)¼h´Mhj¼h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒLock two sub-device states”h]”hŒLock two sub-device states”…”�”}”(hjK½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MhjH½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¼h²hh³j)¼h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jc½jøjc½jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX **Parameters** ``struct v4l2_subdev_state *state1`` One subdevice state ``struct v4l2_subdev_state *state2`` The other subdevice state **Description** Locks the state of two sub-devices. The states must be unlocked with v4l2_subdev_unlock_states() after use. This differs from calling v4l2_subdev_lock_state() on both states so that if the states share the same lock, the lock is acquired only once (so no deadlock occurs). The caller is responsible for ensuring the locks will always be acquired in the same order.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjm½h]”hŒ Parameters”…”�”}”(hjo½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjk½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjg½ubjQ)�”}”(hhh]”(jV)�”}”(hŒ9``struct v4l2_subdev_state *state1`` One subdevice state ”h]”(j\)�”}”(hŒ$``struct v4l2_subdev_state *state1``”h]”hú)�”}”(hjŒ½h]”hŒ struct v4l2_subdev_state *state1”…”�”}”(hj޽h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjнubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj†½ubjv)�”}”(hhh]”hÞ)�”}”(hŒOne subdevice state”h]”hŒOne subdevice state”…”�”}”(hj¥½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¡½h´Mhj¢½ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj†½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¡½h´Mhjƒ½ubjV)�”}”(hŒ?``struct v4l2_subdev_state *state2`` The other subdevice state ”h]”(j\)�”}”(hŒ$``struct v4l2_subdev_state *state2``”h]”hú)�”}”(hjŽh]”hŒ struct v4l2_subdev_state *state2”…”�”}”(hjǽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj¿½ubjv)�”}”(hhh]”hÞ)�”}”(hŒThe other subdevice state”h]”hŒThe other subdevice state”…”�”}”(hjÞ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÚ½h´MhjÛ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¿½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÚ½h´Mhjƒ½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjg½ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj¾h]”hŒ Description”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjþ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjg½ubhÞ)�”}”(hŒ#Locks the state of two sub-devices.”h]”hŒ#Locks the state of two sub-devices.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjg½ubhÞ)�”}”(hŒGThe states must be unlocked with v4l2_subdev_unlock_states() after use.”h]”hŒGThe states must be unlocked with v4l2_subdev_unlock_states() after use.”…”�”}”(hj%¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjg½ubhÞ)�”}”(hXThis differs from calling v4l2_subdev_lock_state() on both states so that if the states share the same lock, the lock is acquired only once (so no deadlock occurs). The caller is responsible for ensuring the locks will always be acquired in the same order.”h]”hXThis differs from calling v4l2_subdev_lock_state() on both states so that if the states share the same lock, the lock is acquired only once (so no deadlock occurs). The caller is responsible for ensuring the locks will always be acquired in the same order.”…”�”}”(hj4¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhjg½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&v4l2_subdev_unlock_states (C function)”Œc.v4l2_subdev_unlock_states”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒcvoid v4l2_subdev_unlock_states (struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”j{)�”}”(hŒbvoid v4l2_subdev_unlock_states(struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjc¾h²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihj_¾h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M(ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr¾h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj_¾h²hh³jq¾h´M(ubj¤)�”}”(hŒv4l2_subdev_unlock_states”h]”jª)�”}”(hŒv4l2_subdev_unlock_states”h]”hŒv4l2_subdev_unlock_states”…”�”}”(hj„¾h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj€¾ubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj_¾h²hh³jq¾h´M(ubj¢i)�”}”(hŒD(struct v4l2_subdev_state *state1, struct v4l2_subdev_state *state2)”h]”(j¨i)�”}”(hŒ struct v4l2_subdev_state *state1”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj ¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœ¾ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­¾h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjœ¾ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj¾¾h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj»¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÀ¾Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáij†¾sbŒc.v4l2_subdev_unlock_states”†”asbuh1hhjœ¾ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ¾h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjœ¾ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjì¾h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjœ¾ubjª)�”}”(hŒstate1”h]”hŒstate1”…”�”}”(hjù¾h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjœ¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj˜¾ubj¨i)�”}”(hŒ struct v4l2_subdev_state *state2”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¿ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj0¿h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj-¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j2¿Œmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jÚ¾Œc.v4l2_subdev_unlock_states”†”asbuh1hhj¿ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN¿h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¿ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj\¿h²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj¿ubjª)�”}”(hŒstate2”h]”hŒstate2”…”�”}”(hji¿h²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj˜¾ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj_¾h²hh³jq¾h´M(ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj[¾h²hh³jq¾h´M(ubah}”(h]”jV¾ah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jq¾h´M(hjX¾h²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒUnlock two sub-device states”h]”hŒUnlock two sub-device states”…”�”}”(hj“¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M(hj�¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjX¾h²hh³jq¾h´M(ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j«¿jøj«¿jù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hXT**Parameters** ``struct v4l2_subdev_state *state1`` One subdevice state ``struct v4l2_subdev_state *state2`` The other subdevice state **Description** Unlocks the state of two sub-devices. This differs from calling v4l2_subdev_unlock_state() on both states so that if the states share the same lock, the lock is released only once.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjµ¿h]”hŒ Parameters”…”�”}”(hj·¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj³¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hj¯¿ubjQ)�”}”(hhh]”(jV)�”}”(hŒ9``struct v4l2_subdev_state *state1`` One subdevice state ”h]”(j\)�”}”(hŒ$``struct v4l2_subdev_state *state1``”h]”hú)�”}”(hjÔ¿h]”hŒ struct v4l2_subdev_state *state1”…”�”}”(hjÖ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÒ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M)hjοubjv)�”}”(hhh]”hÞ)�”}”(hŒOne subdevice state”h]”hŒOne subdevice state”…”�”}”(hjí¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jé¿h´M)hjê¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjοubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jé¿h´M)hjË¿ubjV)�”}”(hŒ?``struct v4l2_subdev_state *state2`` The other subdevice state ”h]”(j\)�”}”(hŒ$``struct v4l2_subdev_state *state2``”h]”hú)�”}”(hj Àh]”hŒ struct v4l2_subdev_state *state2”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M*hjÀubjv)�”}”(hhh]”hÞ)�”}”(hŒThe other subdevice state”h]”hŒThe other subdevice state”…”�”}”(hj&Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j"Àh´M*hj#Àubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j"Àh´M*hjË¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj¯¿ubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjHÀh]”hŒ Description”…”�”}”(hjJÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjFÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M,hj¯¿ubhÞ)�”}”(hŒ%Unlocks the state of two sub-devices.”h]”hŒ%Unlocks the state of two sub-devices.”…”�”}”(hj^Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M+hj¯¿ubhÞ)�”}”(hŒŽThis differs from calling v4l2_subdev_unlock_state() on both states so that if the states share the same lock, the lock is released only once.”h]”hŒŽThis differs from calling v4l2_subdev_unlock_state() on both states so that if the states share the same lock, the lock is released only once.”…”�”}”(hjmÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M-hj¯¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ2v4l2_subdev_get_unlocked_active_state (C function)”Œ'c.v4l2_subdev_get_unlocked_active_state”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒYstruct v4l2_subdev_state * v4l2_subdev_get_unlocked_active_state (struct v4l2_subdev *sd)”h]”j{)�”}”(hŒWstruct v4l2_subdev_state *v4l2_subdev_get_unlocked_active_state(struct v4l2_subdev *sd)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjœÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜Àh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M:ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªÀh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj˜Àh²hh³j©Àh´M:ubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj»Àh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¸Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j½ÀŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáiŒ%v4l2_subdev_get_unlocked_active_state”sbŒ'c.v4l2_subdev_get_unlocked_active_state”†”asbuh1hhj˜Àh²hh³j©Àh´M:ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜÀh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj˜Àh²hh³j©Àh´M:ubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjêÀh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj˜Àh²hh³j©Àh´M:ubj¤)�”}”(hŒ%v4l2_subdev_get_unlocked_active_state”h]”jª)�”}”(hjÙÀh]”hŒ%v4l2_subdev_get_unlocked_active_state”…”�”}”(hjûÀh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj÷Àubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj˜Àh²hh³j©Àh´M:ubj¢i)�”}”(hŒ(struct v4l2_subdev *sd)”h]”j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Áh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj4Áh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj1Áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j6ÁŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j×ÀŒ'c.v4l2_subdev_get_unlocked_active_state”†”asbuh1hhjÁubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRÁh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÁubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj`Áh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjÁubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjmÁh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjÁubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihj˜Àh²hh³j©Àh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj”Àh²hh³j©Àh´M:ubah}”(h]”j�Àah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j©Àh´M:hj‘Àh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ>Checks that the active subdev state is unlocked and returns it”h]”hŒ>Checks that the active subdev state is unlocked and returns it”…”�”}”(hj—Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M:hj”Áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj‘Àh²hh³j©Àh´M:ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j¯Ájøj¯Ájù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¢**Parameters** ``struct v4l2_subdev *sd`` The subdevice **Description** Returns the active state for the subdevice, or NULL if the subdev does not support active state. If the state is not NULL, calls lockdep_assert_not_held() to issue a warning if the state is locked. This function is to be used e.g. when getting the active state for the sole purpose of passing it forward, without accessing the state fields.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj¹Áh]”hŒ Parameters”…”�”}”(hj»Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj·Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>hj³ÁubjQ)�”}”(hhh]”jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjØÁh]”hŒstruct v4l2_subdev *sd”…”�”}”(hjÚÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÖÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M<hjÒÁubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjñÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jíÁh´M<hjîÁubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÒÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jíÁh´M<hjÏÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj³ÁubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÂh]”hŒ Description”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M>hj³ÁubhÞ)�”}”(hŒÅReturns the active state for the subdevice, or NULL if the subdev does not support active state. If the state is not NULL, calls lockdep_assert_not_held() to issue a warning if the state is locked.”h]”hŒÅReturns the active state for the subdevice, or NULL if the subdev does not support active state. If the state is not NULL, calls lockdep_assert_not_held() to issue a warning if the state is locked.”…”�”}”(hj)Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M=hj³ÁubhÞ)�”}”(hŒŽThis function is to be used e.g. when getting the active state for the sole purpose of passing it forward, without accessing the state fields.”h]”hŒŽThis function is to be used e.g. when getting the active state for the sole purpose of passing it forward, without accessing the state fields.”…”�”}”(hj8Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MAhj³Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ0v4l2_subdev_get_locked_active_state (C function)”Œ%c.v4l2_subdev_get_locked_active_state”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒWstruct v4l2_subdev_state * v4l2_subdev_get_locked_active_state (struct v4l2_subdev *sd)”h]”j{)�”}”(hŒUstruct v4l2_subdev_state *v4l2_subdev_get_locked_active_state(struct v4l2_subdev *sd)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjgÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcÂh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MNubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÂh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjcÂh²hh³jtÂh´MNubh)�”}”(hhh]”jª)�”}”(hŒv4l2_subdev_state”h]”hŒv4l2_subdev_state”…”�”}”(hj†Âh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjƒÂubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jˆÂŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáiŒ#v4l2_subdev_get_locked_active_state”sbŒ%c.v4l2_subdev_get_locked_active_state”†”asbuh1hhjcÂh²hh³jtÂh´MNubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Âh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjcÂh²hh³jtÂh´MNubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjµÂh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjcÂh²hh³jtÂh´MNubj¤)�”}”(hŒ#v4l2_subdev_get_locked_active_state”h]”jª)�”}”(hj¤Âh]”hŒ#v4l2_subdev_get_locked_active_state”…”�”}”(hjÆÂh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÂÂubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjcÂh²hh³jtÂh´MNubj¢i)�”}”(hŒ(struct v4l2_subdev *sd)”h]”j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjáÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝÂubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÂh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÝÂubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjÿÂh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjüÂubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÃŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”j¢ÂŒ%c.v4l2_subdev_get_locked_active_state”†”asbuh1hhjÝÂubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÝÂubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj+Ãh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjÝÂubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hj8Ãh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÝÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjÙÂubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjcÂh²hh³jtÂh´MNubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhj_Âh²hh³jtÂh´MNubah}”(h]”jZÂah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jtÂh´MNhj\Âh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ` to be initialized ``const struct v4l2_subdev_ops *ops`` pointer to :c:type:`struct v4l2_subdev_ops `.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjjÇh]”hŒ Parameters”…”�”}”(hjlÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MyhjdÇubjQ)�”}”(hhh]”(jV)�”}”(hŒg``struct v4l2_subdev *sd`` pointer to the :c:type:`struct v4l2_subdev ` to be initialized ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj‰Çh]”hŒstruct v4l2_subdev *sd”…”�”}”(hj‹Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‡Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MwhjƒÇubjv)�”}”(hhh]”hÞ)�”}”(hŒKpointer to the :c:type:`struct v4l2_subdev ` to be initialized”h]”(hŒpointer to the ”…”�”}”(hj¢Çh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj¬Çh]”hŒstruct v4l2_subdev”…”�”}”(hj®Çh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjªÇubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jžÇh´Mwhj¢ÇubhŒ to be initialized”…”�”}”(hj¢Çh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jžÇh´MwhjŸÇubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjƒÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jžÇh´Mwhj€ÇubjV)�”}”(hŒd``const struct v4l2_subdev_ops *ops`` pointer to :c:type:`struct v4l2_subdev_ops `.”h]”(j\)�”}”(hŒ%``const struct v4l2_subdev_ops *ops``”h]”hú)�”}”(hjåÇh]”hŒ!const struct v4l2_subdev_ops *ops”…”�”}”(hjçÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjãÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MyhjßÇubjv)�”}”(hhh]”hÞ)�”}”(hŒ>pointer to :c:type:`struct v4l2_subdev_ops `.”h]”(hŒ pointer to ”…”�”}”(hjþÇh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjÈh]”hŒstruct v4l2_subdev_ops”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MxhjþÇubhŒ.”…”�”}”(hjþÇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j%Èh´MxhjûÇubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjßÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³júÇh´Myhj€Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjdÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_call (C macro)”Œc.v4l2_subdev_call”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_call”h]”j{)�”}”(hŒv4l2_subdev_call”h]”j¤)�”}”(hŒv4l2_subdev_call”h]”jª)�”}”(hj\Èh]”hŒv4l2_subdev_call”…”�”}”(hjfÈh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjbÈubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hj^Èh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M€ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjZÈh²hh³jyÈh´M€ubah}”(h]”jUÈah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jyÈh´M€hjWÈh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjWÈh²hh³jyÈh´M€ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷j’Èjøj’Èjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ(``v4l2_subdev_call (sd, o, f, args...)``”h]”hú)�”}”(hj˜Èh]”hŒ$v4l2_subdev_call (sd, o, f, args...)”…”�”}”(hjšÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj–Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‚hjMh²hubjŸ)�”}”(hŒ$call an operation of a v4l2_subdev. ”h]”hÞ)�”}”(hŒ#call an operation of a v4l2_subdev.”h]”hŒ#call an operation of a v4l2_subdev.”…”�”}”(hj²Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M€hj®Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jÀÈh´M€hjMh²hubjý)�”}”(hX**Parameters** ``sd`` pointer to the :c:type:`struct v4l2_subdev ` ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Example** err = v4l2_subdev_call(sd, video, s_std, norm);”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjÍÈh]”hŒ Parameters”…”�”}”(hjÏÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjËÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M„hjÇÈubjQ)�”}”(hhh]”(jV)�”}”(hŒA``sd`` pointer to the :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hjìÈh]”hŒsd”…”�”}”(hjîÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjêÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‚hjæÈubjv)�”}”(hhh]”hÞ)�”}”(hŒ9pointer to the :c:type:`struct v4l2_subdev `”h]”(hŒpointer to the ”…”�”}”(hjÉh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjÉh]”hŒstruct v4l2_subdev”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj Éubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jÉh´M‚hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÉh´M‚hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjæÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÉh´M‚hjãÈubjV)�”}”(hŒ�``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ”h]”(j\)�”}”(hŒ``o``”h]”hú)�”}”(hjDÉh]”hŒo”…”�”}”(hjFÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjBÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M„hj>Éubjv)�”}”(hhh]”hÞ)�”}”(hŒ–name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions.”h]”(hŒname of the element at ”…”�”}”(hj]Éh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjgÉh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjiÉh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjeÉubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mƒhj]ÉubhŒ that contains ”…”�”}”(hj]Éh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hj‰Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj]ÉubhŒ9. Each element there groups a set of callbacks functions.”…”�”}”(hj]Éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j„Éh´MƒhjZÉubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj>Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jYÉh´M„hjãÈubjV)�”}”(hŒ¥``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ”h]”(j\)�”}”(hŒ``f``”h]”hú)�”}”(hj³Éh]”hŒf”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj±Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M‡hj­Éubjv)�”}”(hhh]”hÞ)�”}”(hŒžcallback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.”•Œ¤h]”(hŒkcallback function to be called. The callback functions are defined in groups, according to each element at ”…”�”}”(hjÌÉh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjÖÉh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjØÉh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÔÉubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M…hjÌÉubhŒ.”…”�”}”(hjÌÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jóÉh´M…hjÉÉubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj­Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÈÉh´M‡hjãÈubjV)�”}”(hŒ!``args...`` arguments for **f**. ”h]”(j\)�”}”(hŒ ``args...``”h]”hú)�”}”(hjÊh]”hŒargs...”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mˆhj Êubjv)�”}”(hhh]”hÞ)�”}”(hŒarguments for **f**.”h]”(hŒarguments for ”…”�”}”(hj)Êh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hj1Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj)ÊubhŒ.”…”�”}”(hj)Êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j%Êh´Mˆhj&Êubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj Êubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j%Êh´MˆhjãÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjÇÈubhÞ)�”}”(hŒ **Example**”h]”jÄ)�”}”(hj]Êh]”hŒExample”…”�”}”(hj_Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj[Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŠhjÇÈubhÞ)�”}”(hŒ/err = v4l2_subdev_call(sd, video, s_std, norm);”h]”hŒ/err = v4l2_subdev_call(sd, video, s_std, norm);”…”�”}”(hjsÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MŠhjÇÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ'v4l2_subdev_call_state_active (C macro)”Œc.v4l2_subdev_call_state_active”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_call_state_active”h]”j{)�”}”(hŒv4l2_subdev_call_state_active”h]”j¤)�”}”(hŒv4l2_subdev_call_state_active”h]”jª)�”}”(hjœÊh]”hŒv4l2_subdev_call_state_active”…”�”}”(hj¦Êh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¢Êubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjžÊh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mžubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjšÊh²hh³j¹Êh´Mžubah}”(h]”j•Êah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j¹Êh´Mžhj—Êh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj—Êh²hh³j¹Êh´Mžubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷jÒÊjøjÒÊjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ5``v4l2_subdev_call_state_active (sd, o, f, args...)``”h]”hú)�”}”(hjØÊh]”hŒ1v4l2_subdev_call_state_active (sd, o, f, args...)”…”�”}”(hjÚÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÖÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M hjMh²hubjŸ)�”}”(hŒjcall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev its active state. ”h]”hÞ)�”}”(hŒicall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev its active state.”h]”hŒicall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev its active state.”…”�”}”(hjòÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MžhjîÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³jËh´MžhjMh²hubjý)�”}”(hX¹**Parameters** ``sd`` pointer to the :c:type:`struct v4l2_subdev ` ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** This is similar to v4l2_subdev_call(), except that this version can only be used for ops that take a subdev state as a parameter. The macro will get the active state, lock it before calling the op and unlock it after the call.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj Ëh]”hŒ Parameters”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢hjËubjQ)�”}”(hhh]”(jV)�”}”(hŒA``sd`` pointer to the :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hj,Ëh]”hŒsd”…”�”}”(hj.Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj*Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¢hj&Ëubjv)�”}”(hhh]”hÞ)�”}”(hŒ9pointer to the :c:type:`struct v4l2_subdev `”h]”(hŒpointer to the ”…”�”}”(hjEËh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjOËh]”hŒstruct v4l2_subdev”…”�”}”(hjQËh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjMËubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jAËh´M¢hjEËubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jAËh´M¢hjBËubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj&Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jAËh´M¢hj#ËubjV)�”}”(hŒ�``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ”h]”(j\)�”}”(hŒ``o``”h]”hú)�”}”(hj„Ëh]”hŒo”…”�”}”(hj†Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj‚Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¤hj~Ëubjv)�”}”(hhh]”hÞ)�”}”(hŒ–name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions.”h]”(hŒname of the element at ”…”�”}”(hj�Ëh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hj§Ëh]”hŒstruct v4l2_subdev_ops”…”�”}”(hj©Ëh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj¥Ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M£hj�ËubhŒ that contains ”…”�”}”(hj�Ëh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hjÉËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj�ËubhŒ9. Each element there groups a set of callbacks functions.”…”�”}”(hj�Ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÄËh´M£hjšËubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj~Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j™Ëh´M¤hj#ËubjV)�”}”(hŒ¥``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ”h]”(j\)�”}”(hŒ``f``”h]”hú)�”}”(hjóËh]”hŒf”…”�”}”(hjõËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjñËubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M§hjíËubjv)�”}”(hhh]”hÞ)�”}”(hŒžcallback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.”h]”(hŒkcallback function to be called. The callback functions are defined in groups, according to each element at ”…”�”}”(hj Ìh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjÌh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjÌubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¥hj ÌubhŒ.”…”�”}”(hj Ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j3Ìh´M¥hj Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjíËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÌh´M§hj#ËubjV)�”}”(hŒ!``args...`` arguments for **f**. ”h]”(j\)�”}”(hŒ ``args...``”h]”hú)�”}”(hjPÌh]”hŒargs...”…”�”}”(hjRÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjNÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¨hjJÌubjv)�”}”(hhh]”hÞ)�”}”(hŒarguments for **f**.”h]”(hŒarguments for ”…”�”}”(hjiÌh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hjqÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjiÌubhŒ.”…”�”}”(hjiÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jeÌh´M¨hjfÌubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjJÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jeÌh´M¨hj#Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjËubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj�Ìh]”hŒ Description”…”�”}”(hjŸÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj›Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MªhjËubhÞ)�”}”(hŒâThis is similar to v4l2_subdev_call(), except that this version can only be used for ops that take a subdev state as a parameter. The macro will get the active state, lock it before calling the op and unlock it after the call.”h]”hŒâThis is similar to v4l2_subdev_call(), except that this version can only be used for ops that take a subdev state as a parameter. The macro will get the active state, lock it before calling the op and unlock it after the call.”…”�”}”(hj³Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M©hjËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$v4l2_subdev_call_state_try (C macro)”Œc.v4l2_subdev_call_state_try”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_call_state_try”h]”j{)�”}”(hŒv4l2_subdev_call_state_try”h]”j¤)�”}”(hŒv4l2_subdev_call_state_try”h]”jª)�”}”(hjÜÌh]”hŒv4l2_subdev_call_state_try”…”�”}”(hjæÌh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjâÌubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjÞÌh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¼ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjÚÌh²hh³jùÌh´M¼ubah}”(h]”jÕÌah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jùÌh´M¼hj×Ìh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj×Ìh²hh³jùÌh´M¼ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷jÍjøjÍjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ2``v4l2_subdev_call_state_try (sd, o, f, args...)``”h]”hú)�”}”(hjÍh]”hŒ.v4l2_subdev_call_state_try (sd, o, f, args...)”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¾hjMh²hubjŸ)�”}”(hŒucall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev a newly allocated try state. ”h]”hÞ)�”}”(hŒtcall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev a newly allocated try state.”h]”hŒtcall an operation of a v4l2_subdev which takes state as a parameter, passing the subdev a newly allocated try state.”…”�”}”(hj2Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´M¼hj.Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j@Íh´M¼hjMh²hubjý)�”}”(hX²**Parameters** ``sd`` pointer to the :c:type:`struct v4l2_subdev ` ``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ``args...`` arguments for **f**. **Description** This is similar to v4l2_subdev_call_state_active(), except that as this version allocates a new state, this is only usable for V4L2_SUBDEV_FORMAT_TRY use cases. **Note** only legacy non-MC drivers may need this macro.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjMÍh]”hŒ Parameters”…”�”}”(hjOÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjKÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjGÍubjQ)�”}”(hhh]”(jV)�”}”(hŒA``sd`` pointer to the :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hjlÍh]”hŒsd”…”�”}”(hjnÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÀhjfÍubjv)�”}”(hhh]”hÞ)�”}”(hŒ9pointer to the :c:type:`struct v4l2_subdev `”h]”(hŒpointer to the ”…”�”}”(hj…Íh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hj�Íh]”hŒstruct v4l2_subdev”…”�”}”(hj‘Íh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhj�Íubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³j�Íh´MÀhj…Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�Íh´MÀhj‚Íubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjfÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j�Íh´MÀhjcÍubjV)�”}”(hŒ�``o`` name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions. ”h]”(j\)�”}”(hŒ``o``”h]”hú)�”}”(hjÄÍh]”hŒo”…”�”}”(hjÆÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÂÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÂhj¾Íubjv)�”}”(hhh]”hÞ)�”}”(hŒ–name of the element at :c:type:`struct v4l2_subdev_ops ` that contains **f**. Each element there groups a set of callbacks functions.”h]”(hŒname of the element at ”…”�”}”(hjÝÍh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjçÍh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjéÍh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjåÍubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÁhjÝÍubhŒ that contains ”…”�”}”(hjÝÍh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÝÍubhŒ9. Each element there groups a set of callbacks functions.”…”�”}”(hjÝÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎh´MÁhjÚÍubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj¾Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÙÍh´MÂhjcÍubjV)�”}”(hŒ¥``f`` callback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `. ”h]”(j\)�”}”(hŒ``f``”h]”hú)�”}”(hj3Îh]”hŒf”…”�”}”(hj5Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj1Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÅhj-Îubjv)�”}”(hhh]”hÞ)�”}”(hŒžcallback function to be called. The callback functions are defined in groups, according to each element at :c:type:`struct v4l2_subdev_ops `.”h]”(hŒkcallback function to be called. The callback functions are defined in groups, according to each element at ”…”�”}”(hjLÎh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjVÎh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjXÎh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjTÎubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÃhjLÎubhŒ.”…”�”}”(hjLÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jsÎh´MÃhjIÎubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj-Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jHÎh´MÅhjcÍubjV)�”}”(hŒ!``args...`` arguments for **f**. ”h]”(j\)�”}”(hŒ ``args...``”h]”hú)�”}”(hj�Îh]”hŒargs...”…”�”}”(hj’Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjŽÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÆhjŠÎubjv)�”}”(hhh]”hÞ)�”}”(hŒarguments for **f**.”h]”(hŒarguments for ”…”�”}”(hj©Îh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hj±Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj©ÎubhŒ.”…”�”}”(hj©Îh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¥Îh´MÆhj¦Îubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjŠÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¥Îh´MÆhjcÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhjGÍubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjÝÎh]”hŒ Description”…”�”}”(hjßÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÛÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÈhjGÍubhÞ)�”}”(hŒ This is similar to v4l2_subdev_call_state_active(), except that as this version allocates a new state, this is only usable for V4L2_SUBDEV_FORMAT_TRY use cases.”h]”hŒ This is similar to v4l2_subdev_call_state_active(), except that as this version allocates a new state, this is only usable for V4L2_SUBDEV_FORMAT_TRY use cases.”…”�”}”(hjóÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÇhjGÍubhÞ)�”}”(hŒ**Note**”h]”jÄ)�”}”(hjÏh]”hŒNote”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MËhjGÍubhÞ)�”}”(hŒ/only legacy non-MC drivers may need this macro.”h]”hŒ/only legacy non-MC drivers may need this macro.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MÌhjGÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒv4l2_subdev_has_op (C macro)”Œc.v4l2_subdev_has_op”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒv4l2_subdev_has_op”h]”j{)�”}”(hŒv4l2_subdev_has_op”h]”j¤)�”}”(hŒv4l2_subdev_has_op”h]”jª)�”}”(hjCÏh]”hŒv4l2_subdev_has_op”…”�”}”(hjMÏh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjIÏubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjEÏh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mâubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjAÏh²hh³j`Ïh´Mâubah}”(h]”j<Ïah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³j`Ïh´Mâhj>Ïh²hubjÖ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj>Ïh²hh³j`Ïh´Mâubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jöjj÷jyÏjøjyÏjù‰jú‰jû‰uh1joh²hhjMh³Nh´NubhÞ)�”}”(hŒ!``v4l2_subdev_has_op (sd, o, f)``”h]”hú)�”}”(hjÏh]”hŒv4l2_subdev_has_op (sd, o, f)”…”�”}”(hj�Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj}Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MähjMh²hubjŸ)�”}”(hŒ0Checks if a subdev defines a certain operation. ”h]”hÞ)�”}”(hŒ/Checks if a subdev defines a certain operation.”h]”hŒ/Checks if a subdev defines a certain operation.”…”�”}”(hj™Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mâhj•Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jžh³j§Ïh´MâhjMh²hubjý)�”}”(hX **Parameters** ``sd`` pointer to the :c:type:`struct v4l2_subdev ` ``o`` The group of callback functions in :c:type:`struct v4l2_subdev_ops ` which **f** is a part of. ``f`` callback function to be checked for its existence.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj´Ïh]”hŒ Parameters”…”�”}”(hj¶Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj²Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhj®ÏubjQ)�”}”(hhh]”(jV)�”}”(hŒA``sd`` pointer to the :c:type:`struct v4l2_subdev ` ”h]”(j\)�”}”(hŒ``sd``”h]”hú)�”}”(hjÓÏh]”hŒsd”…”�”}”(hjÕÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÑÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MähjÍÏubjv)�”}”(hhh]”hÞ)�”}”(hŒ9pointer to the :c:type:`struct v4l2_subdev `”h]”(hŒpointer to the ”…”�”}”(hjìÏh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct v4l2_subdev `”h]”hú)�”}”(hjöÏh]”hŒstruct v4l2_subdev”…”�”}”(hjøÏh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjôÏubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒ v4l2_subdev”uh1hh³jèÏh´MähjìÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jèÏh´MähjéÏubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjÍÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jèÏh´MähjÊÏubjV)�”}”(hŒv``o`` The group of callback functions in :c:type:`struct v4l2_subdev_ops ` which **f** is a part of. ”h]”(j\)�”}”(hŒ``o``”h]”hú)�”}”(hj+Ðh]”hŒo”…”�”}”(hj-Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj)Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mæhj%Ðubjv)�”}”(hhh]”hÞ)�”}”(hŒoThe group of callback functions in :c:type:`struct v4l2_subdev_ops ` which **f** is a part of.”h]”(hŒ#The group of callback functions in ”…”�”}”(hjDÐh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct v4l2_subdev_ops `”h]”hú)�”}”(hjNÐh]”hŒstruct v4l2_subdev_ops”…”�”}”(hjPÐh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hùhjLÐubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jÖjÚjŒv4l2_subdev_ops”uh1hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MåhjDÐubhŒ which ”…”�”}”(hjDÐh²hh³Nh´NubjÄ)�”}”(hŒ**f**”h]”hŒf”…”�”}”(hjpÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjDÐubhŒ is a part of.”…”�”}”(hjDÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jkÐh´MåhjAÐubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj%Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j@Ðh´MæhjÊÏubjV)�”}”(hŒ8``f`` callback function to be checked for its existence.”h]”(j\)�”}”(hŒ``f``”h]”hú)�”}”(hjšÐh]”hŒf”…”�”}”(hjœÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj˜Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mèhj”Ðubjv)�”}”(hhh]”hÞ)�”}”(hŒ2callback function to be checked for its existence.”h]”hŒ2callback function to be checked for its existence.”…”�”}”(hj³Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mçhj°Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj”Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j¯Ðh´MèhjÊÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj®Ïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%v4l2_subdev_notify_event (C function)”Œc.v4l2_subdev_notify_event”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒSvoid v4l2_subdev_notify_event (struct v4l2_subdev *sd, const struct v4l2_event *ev)”h]”j{)�”}”(hŒRvoid v4l2_subdev_notify_event(struct v4l2_subdev *sd, const struct v4l2_event *ev)”h]”(jji)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjôÐh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjðÐh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Míubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjðÐh²hh³jÑh´Míubj¤)�”}”(hŒv4l2_subdev_notify_event”h]”jª)�”}”(hŒv4l2_subdev_notify_event”h]”hŒv4l2_subdev_notify_event”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÑubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjðÐh²hh³jÑh´Míubj¢i)�”}”(hŒ5(struct v4l2_subdev *sd, const struct v4l2_event *ev)”h]”(j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj1Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-Ñubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Ñh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj-Ñubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hjOÑh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjLÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jQÑŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijÑsbŒc.v4l2_subdev_notify_event”†”asbuh1hhj-Ñubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoÑh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj-Ñubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hj}Ñh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihj-Ñubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjŠÑh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj-Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj)Ñubj¨i)�”}”(hŒconst struct v4l2_event *ev”h]”(j�)�”}”(hj·kh]”hŒconst”…”�”}”(hj£Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸÑubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Ñh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸÑubj�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¾Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸÑubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËÑh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸÑubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_event”h]”hŒ v4l2_event”…”�”}”(hjÜÑh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjÙÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”jÞÑŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jkÑŒc.v4l2_subdev_notify_event”†”asbuh1hhjŸÑubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúÑh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸÑubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjŸÑubjª)�”}”(hŒev”h]”hŒev”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjŸÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihj)Ñubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjðÐh²hh³jÑh´Míubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjìÐh²hh³jÑh´Míubah}”(h]”jçÐah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jÑh´MíhjéÐh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ)Delivers event notification for subdevice”h]”hŒ)Delivers event notification for subdevice”…”�”}”(hj?Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Míhj<Òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjéÐh²hh³jÑh´Míubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷jWÒjøjWÒjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX¥**Parameters** ``struct v4l2_subdev *sd`` The subdev for which to deliver the event ``const struct v4l2_event *ev`` The event to deliver **Description** Will deliver the specified event to all userspace event listeners which are subscribed to the v42l subdev event queue as well as to the bridge driver using the notify callback. The notification type for the notify callback will be ``V4L2_DEVICE_NOTIFY_EVENT``.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hjaÒh]”hŒ Parameters”…”�”}”(hjcÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj_Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mñhj[ÒubjQ)�”}”(hhh]”(jV)�”}”(hŒE``struct v4l2_subdev *sd`` The subdev for which to deliver the event ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hj€Òh]”hŒstruct v4l2_subdev *sd”…”�”}”(hj‚Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj~Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MîhjzÒubjv)�”}”(hhh]”hÞ)�”}”(hŒ)The subdev for which to deliver the event”h]”hŒ)The subdev for which to deliver the event”…”�”}”(hj™Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j•Òh´Mîhj–Òubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjzÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j•Òh´MîhjwÒubjV)�”}”(hŒ5``const struct v4l2_event *ev`` The event to deliver ”h]”(j\)�”}”(hŒ``const struct v4l2_event *ev``”h]”hú)�”}”(hj¹Òh]”hŒconst struct v4l2_event *ev”…”�”}”(hj»Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj·Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mïhj³Òubjv)�”}”(hhh]”hÞ)�”}”(hŒThe event to deliver”h]”hŒThe event to deliver”…”�”}”(hjÒÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎÒh´MïhjÏÒubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj³Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³jÎÒh´MïhjwÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jPhj[ÒubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hjôÒh]”hŒ Description”…”�”}”(hjöÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjòÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mñhj[ÒubhÞ)�”}”(hXWill deliver the specified event to all userspace event listeners which are subscribed to the v42l subdev event queue as well as to the bridge driver using the notify callback. The notification type for the notify callback will be ``V4L2_DEVICE_NOTIFY_EVENT``.”h]”(hŒçWill deliver the specified event to all userspace event listeners which are subscribed to the v42l subdev event queue as well as to the bridge driver using the notify callback. The notification type for the notify callback will be ”…”�”}”(hj Óh²hh³Nh´Nubhú)�”}”(hŒ``V4L2_DEVICE_NOTIFY_EVENT``”h]”hŒV4L2_DEVICE_NOTIFY_EVENT”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhj ÓubhŒ.”…”�”}”(hj Óh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mðhj[Òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%v4l2_subdev_is_streaming (C function)”Œc.v4l2_subdev_is_streaming”hNt”auh1j^hjMh²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ6bool v4l2_subdev_is_streaming (struct v4l2_subdev *sd)”h]”j{)�”}”(hŒ5bool v4l2_subdev_is_streaming(struct v4l2_subdev *sd)”h]”(jji)�”}”(hjyh]”hŒbool”…”�”}”(hjKÓh²hh³Nh´Nubah}”(h]”h ]”jviah"]”h$]”h&]”uh1jiihjGÓh²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Múubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÓh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjGÓh²hh³jXÓh´Múubj¤)�”}”(hŒv4l2_subdev_is_streaming”h]”jª)�”}”(hŒv4l2_subdev_is_streaming”h]”hŒv4l2_subdev_is_streaming”…”�”}”(hjkÓh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjgÓubah}”(h]”h ]”(j¼j½eh"]”h$]”h&]”hÅhÆuh1j£hjGÓh²hh³jXÓh´Múubj¢i)�”}”(hŒ(struct v4l2_subdev *sd)”h]”j¨i)�”}”(hŒstruct v4l2_subdev *sd”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj‡Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒÓubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Óh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƒÓubh)�”}”(hhh]”jª)�”}”(hŒ v4l2_subdev”h]”hŒ v4l2_subdev”…”�”}”(hj¥Óh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hj¢Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jáiŒ reftarget”j§ÓŒmodname”NŒ classname”NjÖjÙ)�”}”jÜ]”jéi)�”}”jáijmÓsbŒc.v4l2_subdev_is_streaming”†”asbuh1hhjƒÓubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅÓh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƒÓubjýi)�”}”(hjjh]”hŒ*”…”�”}”(hjÓÓh²hh³Nh´Nubah}”(h]”h ]”j jah"]”h$]”h&]”uh1jüihjƒÓubjª)�”}”(hŒsd”h]”hŒsd”…”�”}”(hjàÓh²hh³Nh´Nubah}”(h]”h ]”jµah"]”h$]”h&]”uh1j©hjƒÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j§ihjÓubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j¡ihjGÓh²hh³jXÓh´Múubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjLjuh1jzjÈjÉhjCÓh²hh³jXÓh´Múubah}”(h]”j>Óah ]”(jÍjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jth³jXÓh´Múhj@Óh²hubjÖ)�”}”(hhh]”hÞ)�”}”(hŒ%Returns if the subdevice is streaming”h]”hŒ%Returns if the subdevice is streaming”…”�”}”(hj Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MúhjÔh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj@Óh²hh³jXÓh´Múubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jöjj÷j"Ôjøj"Ôjù‰jú‰jû‰uh1joh²hhjMh³Nh´Nubjý)�”}”(hX’**Parameters** ``struct v4l2_subdev *sd`` The subdevice **Description** v4l2_subdev_is_streaming() tells if the subdevice is currently streaming. "Streaming" here means whether .s_stream() or .enable_streams() has been successfully called, and the streaming has not yet been disabled. If the subdevice implements .enable_streams() this function must be called while holding the active state lock.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÄ)�”}”(hj,Ôh]”hŒ Parameters”…”�”}”(hj.Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj*Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mþhj&ÔubjQ)�”}”(hhh]”jV)�”}”(hŒ)``struct v4l2_subdev *sd`` The subdevice ”h]”(j\)�”}”(hŒ``struct v4l2_subdev *sd``”h]”hú)�”}”(hjKÔh]”hŒstruct v4l2_subdev *sd”…”�”}”(hjMÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjIÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´MûhjEÔubjv)�”}”(hhh]”hÞ)�”}”(hŒ The subdevice”h]”hŒ The subdevice”…”�”}”(hjdÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j`Ôh´MûhjaÔubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjEÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jUh³j`Ôh´MûhjBÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jPhj&ÔubhÞ)�”}”(hŒ**Description**”h]”jÄ)�”}”(hj†Ôh]”hŒ Description”…”�”}”(hjˆÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj„Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mýhj&ÔubhÞ)�”}”(hŒÔv4l2_subdev_is_streaming() tells if the subdevice is currently streaming. "Streaming" here means whether .s_stream() or .enable_streams() has been successfully called, and the streaming has not yet been disabled.”h]”hŒØv4l2_subdev_is_streaming() tells if the subdevice is currently streaming. “Streamingâ€� here means whether .s_stream() or .enable_streams() has been successfully called, and the streaming has not yet been disabled.”…”�”}”(hjœÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mühj&ÔubhÞ)�”}”(hŒoIf the subdevice implements .enable_streams() this function must be called while holding the active state lock.”h]”hŒoIf the subdevice implements .enable_streams() this function must be called while holding the active state lock.”…”�”}”(hj«Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-subdev:644: ./include/media/v4l2-subdev.h”h´Mhj&Ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjMh²hh³Nh´Nubeh}”(h]”Œ-v4l2-sub-device-functions-and-data-structures”ah ]”h"]”Œ-v4l2 sub-device functions and data structures”ah$]”h&]”uh1hÈhhh²hh³hÇh´M‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jìÔŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”jt]”jiasŒnameids”}”(jð jí j] jZ jzjwj=jtj<j9ju jr j¿ j¼ j( j% j¤ j¡ jU jR jè jå jÌjÉjÏjÌjíjêj#j jJjGjÆÔjÃÔuŒ nametypes”}”(jð ‰j] ‰jz‰j=ˆj<‰ju ‰j¿ ‰j( ‰j¤ ‰jU ‰jè ‰j̉jωjí‰j#‰jJ‰jÆÔ‰uh}”(jí hÊjZ jojwjªjtj}j9j}jr jDj¼ jx j% j j¡ j+ jR j§ jå j` jÉjó jÌjÏjêjÒj jðjGj&jÃÔjMjmjvj[j`jHjMjc jh j°$jµ$jx(j}(jJ*jO*j‡+jŒ+jÀ,jÅ,j]/jb/jÏ0jÔ0jf2jk2jB3jG3j—8jœ8j;j„;jÌ<jÑ<j©=j®=jBjBj5Dj:DjKFjPFjÌGjÑGj’Ij—Ij>LjCLj–Rj›RjÀVjÅVj�Yj•Yj[j[jscjxcjÀdjÅdj fjfjhjhj\ijaij^kjckj'mj,mjoj ojãpjèpjsj!sjwjwj yjyjÌ{jÑ{jù~jþ~jz€j€j¢�j§�j#ƒj(ƒjÑ„jÖ„j\†ja†jç‡jì‡jr‰jw‰j¦Œj«ŒjÚ�jß�j×’jÜ’jô“jù“j¦—j«—jž›j£›jŽžj“žjÅ¢jÊ¢j¶¥j»¥j¸¨j½¨j7¬j<¬j±¯j¶¯j?²jD²jðµjõµjý¸j¹j�ºj’ºj¼j¼jV¾j[¾j�Àj”ÀjZÂj_Âj%Äj*ÄjðÅjõÅjUÈjZÈj•ÊjšÊjÕÌjÚÌj<ÏjAÏjçÐjìÐj>ÓjCÓuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hhh]”hŒEHyperlink target "media-registering-async-subdevs" is not referenced.”…”�”}”hjVÕsbah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjSÕubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”K¸uh1jQÕubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.