sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget2/translations/zh_CN/driver-api/media/v4l2-controlsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/zh_TW/driver-api/media/v4l2-controlsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/it_IT/driver-api/media/v4l2-controlsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/ja_JP/driver-api/media/v4l2-controlsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/ko_KR/driver-api/media/v4l2-controlsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget2/translations/sp_SP/driver-api/media/v4l2-controlsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhL/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls.rsthKubhsection)}(hhh](htitle)}(h V4L2 Controlsh]h V4L2 Controls}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe V4L2 control API seems simple enough, but quickly becomes very hard to implement correctly in drivers. But much of the code needed to handle controls is actually not driver specific and can be moved to the V4L core framework.h]hThe V4L2 control API seems simple enough, but quickly becomes very hard to implement correctly in drivers. But much of the code needed to handle controls is actually not driver specific and can be moved to the V4L core framework.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hEAfter all, the only part that a driver developer is interested in is:h]hEAfter all, the only part that a driver developer is interested in is:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubhenumerated_list)}(hhh](h list_item)}(hHow do I add a control?h]h)}(hjh]hHow do I add a control?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(h0How do I set the control's value? (i.e. s_ctrl) h]h)}(h/How do I set the control's value? (i.e. s_ctrl)h]h1How do I set the control’s value? (i.e. s_ctrl)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1hhhhhhhhKubh)}(hAnd occasionally:h]hAnd occasionally:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h8How do I get the control's value? (i.e. g_volatile_ctrl)h]h)}(hjLh]h:How do I get the control’s value? (i.e. g_volatile_ctrl)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhNubh)}(hEHow do I validate the user's proposed control value? (i.e. try_ctrl) h]h)}(hDHow do I validate the user's proposed control value? (i.e. try_ctrl)h]hFHow do I validate the user’s proposed control value? (i.e. try_ctrl)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjaubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhNubeh}(h]h ]h"]h$]h&]j4j5j6hj7j8startKuh1hhhhhhhhKubh)}(h5All the rest is something that can be done centrally.h]h5All the rest is something that can be done centrally.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe control framework was created in order to implement all the rules of the V4L2 specification with respect to controls in a central place. And to make life as easy as possible for the driver developer.h]hThe control framework was created in order to implement all the rules of the V4L2 specification with respect to controls in a central place. And to make life as easy as possible for the driver developer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hNote that the control framework relies on the presence of a struct :c:type:`v4l2_device` for V4L2 drivers and struct v4l2_subdev for sub-device drivers.h](hCNote that the control framework relies on the presence of a struct }(hjhhhNhNubh)}(h:c:type:`v4l2_device`h]hliteral)}(hjh]h v4l2_device}(hjhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocdriver-api/media/v4l2-controls refdomainjreftypetype refexplicitrefwarn reftarget v4l2_deviceuh1hhhhKhjubh@ for V4L2 drivers and struct v4l2_subdev for sub-device drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hObjects in the frameworkh]hObjects in the framework}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK#ubh)}(hThere are two main objects:h]hThere are two main objects:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjhhubh)}(hThe :c:type:`v4l2_ctrl` object describes the control properties and keeps track of the control's value (both the current value and the proposed new value).h](hThe }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_ctrluh1hhhhK'hjubh object describes the control properties and keeps track of the control’s value (both the current value and the proposed new value).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubh)}(h:c:type:`v4l2_ctrl_handler` is the object that keeps track of controls. It maintains a list of v4l2_ctrl objects that it owns and another list of references to controls, possibly to controls owned by other handlers.h](h)}(h:c:type:`v4l2_ctrl_handler`h]j)}(hj1h]hv4l2_ctrl_handler}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjv4l2_ctrl_handleruh1hhhhK+hj+ubh is the object that keeps track of controls. It maintains a list of v4l2_ctrl objects that it owns and another list of references to controls, possibly to controls owned by other handlers.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubeh}(h]objects-in-the-frameworkah ]h"]objects in the frameworkah$]h&]uh1hhhhhhhhK#ubh)}(hhh](h)}(h+Basic usage for V4L2 and sub-device driversh]h+Basic usage for V4L2 and sub-device drivers}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hhhhhK1ubh)}(hhh]h)}(hPrepare the driver: h]h)}(hPrepare the driver:h]hPrepare the driver:}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjtubah}(h]h ]h"]h$]h&]uh1hhjqhhhhhNubah}(h]h ]h"]h$]h&]j4j5j6hj7j8uh1hhj`hhhhhK3ubh literal_block)}(h#include h]h#include }hjsbah}(h]h ]h"]h$]h&]hhforcelanguagejhighlight_args}uh1jhhhK5hj`hhubh)}(h71.1) Add the handler to your driver's top-level struct:h]h91.1) Add the handler to your driver’s top-level struct:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hj`hhubh)}(hFor V4L2 drivers:h]hFor V4L2 drivers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hj`hhubj)}(hstruct foo_dev { ... struct v4l2_device v4l2_dev; ... struct v4l2_ctrl_handler ctrl_handler; ... };h]hstruct foo_dev { ... struct v4l2_device v4l2_dev; ... struct v4l2_ctrl_handler ctrl_handler; ... };}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhK=hj`hhubh)}(hFor sub-device drivers:h]hFor sub-device drivers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj`hhubj)}(hstruct foo_dev { ... struct v4l2_subdev sd; ... struct v4l2_ctrl_handler ctrl_handler; ... };h]hstruct foo_dev { ... struct v4l2_subdev sd; ... struct v4l2_ctrl_handler ctrl_handler; ... };}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKIhj`hhubh)}(h1.2) Initialize the handler:h]h1.2) Initialize the handler:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShj`hhubj)}(h;v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);h]h;v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKUhj`hhubh)}(hThe second argument is a hint telling the function how many controls this handler is expected to handle. It will allocate a hashtable based on this information. It is a hint only.h]hThe second argument is a hint telling the function how many controls this handler is expected to handle. It will allocate a hashtable based on this information. It is a hint only.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhj`hhubh)}(h.1.3) Hook the control handler into the driver:h]h.1.3) Hook the control handler into the driver:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj`hhubh)}(hFor V4L2 drivers:h]hFor V4L2 drivers:}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj`hhubj)}(h0foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler;h]h0foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler;}hj5sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKahj`hhubh)}(hFor sub-device drivers:h]hFor sub-device drivers:}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehj`hhubj)}(h*foo->sd.ctrl_handler = &foo->ctrl_handler;h]h*foo->sd.ctrl_handler = &foo->ctrl_handler;}hjRsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKghj`hhubh)}(h%1.4) Clean up the handler at the end:h]h%1.4) Clean up the handler at the end:}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhj`hhubj)}(h+v4l2_ctrl_handler_free(&foo->ctrl_handler);h]h+v4l2_ctrl_handler_free(&foo->ctrl_handler);}hjosbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKmhj`hhubh)}(hhh]h)}(hAdd controls: h]h)}(h Add controls:h]h Add controls:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhNubah}(h]h ]h"]h$]h&]j4j5j6hj7j8jKuh1hhj`hhhhhKrubh)}(hAYou add non-menu controls by calling :c:func:`v4l2_ctrl_new_std`:h](h%You add non-menu controls by calling }(hjhhhNhNubh)}(h:c:func:`v4l2_ctrl_new_std`h]j)}(hjh]hv4l2_ctrl_new_std()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_stduh1hhhhKthjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthj`hhubj)}(hstruct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 min, s32 max, u32 step, s32 def);h]hstruct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 min, s32 max, u32 step, s32 def);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKvhj`hhubh)}(hUMenu and integer menu controls are added by calling :c:func:`v4l2_ctrl_new_std_menu`:h](h4Menu and integer menu controls are added by calling }(hjhhhNhNubh)}(h :c:func:`v4l2_ctrl_new_std_menu`h]j)}(hjh]hv4l2_ctrl_new_std_menu()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_menuuh1hhhhK|hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hj`hhubj)}(hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 skip_mask, s32 def);h]hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 skip_mask, s32 def);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hfMenu controls with a driver specific menu are added by calling :c:func:`v4l2_ctrl_new_std_menu_items`:h](h?Menu controls with a driver specific menu are added by calling }(hjhhhNhNubh)}(h&:c:func:`v4l2_ctrl_new_std_menu_items`h]j)}(hj)h]hv4l2_ctrl_new_std_menu_items()}(hj+hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_menu_itemsuh1hhhhKhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubj)}(hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu_items( struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 skip_mask, s32 def, const char * const *qmenu);h]hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu_items( struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 skip_mask, s32 def, const char * const *qmenu);}hjPsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hXStandard compound controls can be added by calling :c:func:`v4l2_ctrl_new_std_compound`:h](h3Standard compound controls can be added by calling }(hj_hhhNhNubh)}(h$:c:func:`v4l2_ctrl_new_std_compound`h]j)}(hjih]hv4l2_ctrl_new_std_compound()}(hjkhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_compounduh1hhhhKhj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubj)}(hstruct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, const union v4l2_ctrl_ptr p_def);h]hstruct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, const union v4l2_ctrl_ptr p_def);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hkInteger menu controls with a driver specific menu can be added by calling :c:func:`v4l2_ctrl_new_int_menu`:h](hJInteger menu controls with a driver specific menu can be added by calling }(hjhhhNhNubh)}(h :c:func:`v4l2_ctrl_new_int_menu`h]j)}(hjh]hv4l2_ctrl_new_int_menu()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_int_menuuh1hhhhKhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubj)}(hstruct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 def, const s64 *qmenu_int);h]hstruct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 def, const s64 *qmenu_int);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hVThese functions are typically called right after the :c:func:`v4l2_ctrl_handler_init`:h](h5These functions are typically called right after the }(hjhhhNhNubh)}(h :c:func:`v4l2_ctrl_handler_init`h]j)}(hjh]hv4l2_ctrl_handler_init()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_handler_inituh1hhhhKhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubj)}(hXstatic const s64 exp_bias_qmenu[] = { -2, -1, 0, 1, 2 }; static const char * const test_pattern[] = { "Disabled", "Vertical Bars", "Solid Black", "Solid White", }; v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_CONTRAST, 0, 255, 1, 128); v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_POWER_LINE_FREQUENCY, V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); v4l2_ctrl_new_int_menu(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_EXPOSURE_BIAS, ARRAY_SIZE(exp_bias_qmenu) - 1, ARRAY_SIZE(exp_bias_qmenu) / 2 - 1, exp_bias_qmenu); v4l2_ctrl_new_std_menu_items(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_TEST_PATTERN, ARRAY_SIZE(test_pattern) - 1, 0, 0, test_pattern); ... if (foo->ctrl_handler.error) { int err = foo->ctrl_handler.error; v4l2_ctrl_handler_free(&foo->ctrl_handler); return err; }h]hXstatic const s64 exp_bias_qmenu[] = { -2, -1, 0, 1, 2 }; static const char * const test_pattern[] = { "Disabled", "Vertical Bars", "Solid Black", "Solid White", }; v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_CONTRAST, 0, 255, 1, 128); v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_POWER_LINE_FREQUENCY, V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); v4l2_ctrl_new_int_menu(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_EXPOSURE_BIAS, ARRAY_SIZE(exp_bias_qmenu) - 1, ARRAY_SIZE(exp_bias_qmenu) / 2 - 1, exp_bias_qmenu); v4l2_ctrl_new_std_menu_items(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_TEST_PATTERN, ARRAY_SIZE(test_pattern) - 1, 0, 0, test_pattern); ... if (foo->ctrl_handler.error) { int err = foo->ctrl_handler.error; v4l2_ctrl_handler_free(&foo->ctrl_handler); return err; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hThe :c:func:`v4l2_ctrl_new_std` function returns the v4l2_ctrl pointer to the new control, but if you do not need to access the pointer outside the control ops, then there is no need to store it.h](hThe }(hjhhhNhNubh)}(h:c:func:`v4l2_ctrl_new_std`h]j)}(hj)h]hv4l2_ctrl_new_std()}(hj+hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_stduh1hhhhKhjubh function returns the v4l2_ctrl pointer to the new control, but if you do not need to access the pointer outside the control ops, then there is no need to store it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hXWThe :c:func:`v4l2_ctrl_new_std` function will fill in most fields based on the control ID except for the min, max, step and default values. These are passed in the last four arguments. These values are driver specific while control attributes like type, name, flags are all global. The control's current value will be set to the default value.h](hThe }(hjPhhhNhNubh)}(h:c:func:`v4l2_ctrl_new_std`h]j)}(hjZh]hv4l2_ctrl_new_std()}(hj\hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_stduh1hhhhKhjPubhX: function will fill in most fields based on the control ID except for the min, max, step and default values. These are passed in the last four arguments. These values are driver specific while control attributes like type, name, flags are all global. The control’s current value will be set to the default value.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hXThe :c:func:`v4l2_ctrl_new_std_menu` function is very similar but it is used for menu controls. There is no min argument since that is always 0 for menu controls, and instead of a step there is a skip_mask argument: if bit X is 1, then menu item X is skipped.h](hThe }(hjhhhNhNubh)}(h :c:func:`v4l2_ctrl_new_std_menu`h]j)}(hjh]hv4l2_ctrl_new_std_menu()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_menuuh1hhhhKhjubh function is very similar but it is used for menu controls. There is no min argument since that is always 0 for menu controls, and instead of a step there is a skip_mask argument: if bit X is 1, then menu item X is skipped.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hX7The :c:func:`v4l2_ctrl_new_int_menu` function creates a new standard integer menu control with driver-specific items in the menu. It differs from v4l2_ctrl_new_std_menu in that it doesn't have the mask argument and takes as the last argument an array of signed 64-bit integers that form an exact menu item list.h](hThe }(hjhhhNhNubh)}(h :c:func:`v4l2_ctrl_new_int_menu`h]j)}(hjh]hv4l2_ctrl_new_int_menu()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_int_menuuh1hhhhKhjubhX function creates a new standard integer menu control with driver-specific items in the menu. It differs from v4l2_ctrl_new_std_menu in that it doesn’t have the mask argument and takes as the last argument an array of signed 64-bit integers that form an exact menu item list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hXThe :c:func:`v4l2_ctrl_new_std_menu_items` function is very similar to v4l2_ctrl_new_std_menu but takes an extra parameter qmenu, which is the driver specific menu for an otherwise standard menu control. A good example for this control is the test pattern control for capture/display/sensors devices that have the capability to generate test patterns. These test patterns are hardware specific, so the contents of the menu will vary from device to device.h](hThe }(hjhhhNhNubh)}(h&:c:func:`v4l2_ctrl_new_std_menu_items`h]j)}(hjh]hv4l2_ctrl_new_std_menu_items()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_menu_itemsuh1hhhhKhjubhX function is very similar to v4l2_ctrl_new_std_menu but takes an extra parameter qmenu, which is the driver specific menu for an otherwise standard menu control. A good example for this control is the test pattern control for capture/display/sensors devices that have the capability to generate test patterns. These test patterns are hardware specific, so the contents of the menu will vary from device to device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hX'Note that if something fails, the function will return NULL or an error and set ctrl_handler->error to the error code. If ctrl_handler->error was already set, then it will just return and do nothing. This is also true for v4l2_ctrl_handler_init if it cannot allocate the internal data structure.h]hX'Note that if something fails, the function will return NULL or an error and set ctrl_handler->error to the error code. If ctrl_handler->error was already set, then it will just return and do nothing. This is also true for v4l2_ctrl_handler_init if it cannot allocate the internal data structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hThis makes it easy to init the handler and just add all controls and only check the error code at the end. Saves a lot of repetitive error checking.h]hThis makes it easy to init the handler and just add all controls and only check the error code at the end. Saves a lot of repetitive error checking.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hbIt is recommended to add controls in ascending control ID order: it will be a bit faster that way.h]hbIt is recommended to add controls in ascending control ID order: it will be a bit faster that way.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hhh]h)}(h(Optionally force initial control setup: h]h)}(h'Optionally force initial control setup:h]h'Optionally force initial control setup:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhNubah}(h]h ]h"]h$]h&]j4j5j6hj7j8jKuh1hhj`hhhhhKubj)}(h,v4l2_ctrl_handler_setup(&foo->ctrl_handler);h]h,v4l2_ctrl_handler_setup(&foo->ctrl_handler);}hj_sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hThis will call s_ctrl for all controls unconditionally. Effectively this initializes the hardware to the default control values. It is recommended that you do this as this ensures that both the internal data structures and the hardware are in sync.h]hThis will call s_ctrl for all controls unconditionally. Effectively this initializes the hardware to the default control values. It is recommended that you do this as this ensures that both the internal data structures and the hardware are in sync.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`hhubh)}(hhh]h)}(h/Finally: implement the :c:type:`v4l2_ctrl_ops` h]h)}(h.Finally: implement the :c:type:`v4l2_ctrl_ops`h](hFinally: implement the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj v4l2_ctrl_opsuh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhNubah}(h]h ]h"]h$]h&]j4j5j6hj7j8jKuh1hhj`hhhhhKubj)}(hSstatic const struct v4l2_ctrl_ops foo_ctrl_ops = { .s_ctrl = foo_s_ctrl, };h]hSstatic const struct v4l2_ctrl_ops foo_ctrl_ops = { .s_ctrl = foo_s_ctrl, };}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhKhj`hhubh)}(hUsually all you need is s_ctrl:h]hUsually all you need is s_ctrl:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj`hhubj)}(hXstatic int foo_s_ctrl(struct v4l2_ctrl *ctrl) { struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); switch (ctrl->id) { case V4L2_CID_BRIGHTNESS: write_reg(0x123, ctrl->val); break; case V4L2_CID_CONTRAST: write_reg(0x456, ctrl->val); break; } return 0; }h]hXstatic int foo_s_ctrl(struct v4l2_ctrl *ctrl) { struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); switch (ctrl->id) { case V4L2_CID_BRIGHTNESS: write_reg(0x123, ctrl->val); break; case V4L2_CID_CONTRAST: write_reg(0x456, ctrl->val); break; } return 0; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj`hhubh)}(hThe control ops are called with the v4l2_ctrl pointer as argument. The new control value has already been validated, so all you need to do is to actually update the hardware registers.h]hThe control ops are called with the v4l2_ctrl pointer as argument. The new control value has already been validated, so all you need to do is to actually update the hardware registers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj`hhubh)}(hYou're done! And this is sufficient for most of the drivers we have. No need to do any validation of control values, or implement QUERYCTRL, QUERY_EXT_CTRL and QUERYMENU. And G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported.h]hYou’re done! And this is sufficient for most of the drivers we have. No need to do any validation of control values, or implement QUERYCTRL, QUERY_EXT_CTRL and QUERYMENU. And G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj`hhubhnote)}(hThe remainder sections deal with more advanced controls topics and scenarios. In practice the basic usage as described above is sufficient for most drivers.h]h)}(hThe remainder sections deal with more advanced controls topics and scenarios. In practice the basic usage as described above is sufficient for most drivers.h]hThe remainder sections deal with more advanced controls topics and scenarios. In practice the basic usage as described above is sufficient for most drivers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM"hjubah}(h]h ]h"]h$]h&]uh1jhj`hhhhhNubeh}(h]+basic-usage-for-v4l2-and-sub-device-driversah ]h"]+basic usage for v4l2 and sub-device driversah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hInheriting Sub-device Controlsh]hInheriting Sub-device Controls}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hhhhhM'ubh)}(hXWhen a sub-device is registered with a V4L2 driver by calling v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev and v4l2_device are set, then the controls of the subdev will become automatically available in the V4L2 driver as well. If the subdev driver contains controls that already exist in the V4L2 driver, then those will be skipped (so a V4L2 driver can always override a subdev control).h]hXWhen a sub-device is registered with a V4L2 driver by calling v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev and v4l2_device are set, then the controls of the subdev will become automatically available in the V4L2 driver as well. If the subdev driver contains controls that already exist in the V4L2 driver, then those will be skipped (so a V4L2 driver can always override a subdev control).}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hj&hhubh)}(hWhat happens here is that v4l2_device_register_subdev() calls v4l2_ctrl_add_handler() adding the controls of the subdev to the controls of v4l2_device.h]hWhat happens here is that v4l2_device_register_subdev() calls v4l2_ctrl_add_handler() adding the controls of the subdev to the controls of v4l2_device.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM0hj&hhubeh}(h]inheriting-sub-device-controlsah ]h"]inheriting sub-device controlsah$]h&]uh1hhhhhhhhM'ubh)}(hhh](h)}(hAccessing Control Valuesh]hAccessing Control Values}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hhhhhM6ubh)}(hRThe following union is used inside the control framework to access control values:h]hRThe following union is used inside the control framework to access control values:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hj[hhubj)}(hgunion v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; char *p_char; void *p; };h]hgunion v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; char *p_char; void *p; };}hjzsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM;hj[hhubh)}(hbThe v4l2_ctrl struct contains these fields that can be used to access both current and new values:h]hbThe v4l2_ctrl struct contains these fields that can be used to access both current and new values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMDhj[hhubj)}(has32 val; struct { s32 val; } cur; union v4l2_ctrl_ptr p_new; union v4l2_ctrl_ptr p_cur;h]has32 val; struct { s32 val; } cur; union v4l2_ctrl_ptr p_new; union v4l2_ctrl_ptr p_cur;}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMGhj[hhubh)}(h+If the control has a simple s32 type, then:h]h+If the control has a simple s32 type, then:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMRhj[hhubj)}(hC&ctrl->val == ctrl->p_new.p_s32 &ctrl->cur.val == ctrl->p_cur.p_s32h]hC&ctrl->val == ctrl->p_new.p_s32 &ctrl->cur.val == ctrl->p_cur.p_s32}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMThj[hhubh)}(hFor all other types use ctrl->p_cur.p. Basically the val and cur.val fields can be considered an alias since these are used so often.h]hFor all other types use ctrl->p_cur.p. Basically the val and cur.val fields can be considered an alias since these are used so often.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMYhj[hhubh)}(hWithin the control ops you can freely use these. The val and cur.val speak for themselves. The p_char pointers point to character buffers of length ctrl->maximum + 1, and are always 0-terminated.h]hWithin the control ops you can freely use these. The val and cur.val speak for themselves. The p_char pointers point to character buffers of length ctrl->maximum + 1, and are always 0-terminated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM\hj[hhubh)}(hX3Unless the control is marked volatile the p_cur field points to the current cached control value. When you create a new control this value is made identical to the default value. After calling v4l2_ctrl_handler_setup() this value is passed to the hardware. It is generally a good idea to call this function.h]hX3Unless the control is marked volatile the p_cur field points to the current cached control value. When you create a new control this value is made identical to the default value. After calling v4l2_ctrl_handler_setup() this value is passed to the hardware. It is generally a good idea to call this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM`hj[hhubh)}(hXRWhenever a new value is set that new value is automatically cached. This means that most drivers do not need to implement the g_volatile_ctrl() op. The exception is for controls that return a volatile register such as a signal strength read-out that changes continuously. In that case you will need to implement g_volatile_ctrl like this:h]hXRWhenever a new value is set that new value is automatically cached. This means that most drivers do not need to implement the g_volatile_ctrl() op. The exception is for controls that return a volatile register such as a signal strength read-out that changes continuously. In that case you will need to implement g_volatile_ctrl like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhj[hhubj)}(hstatic int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl) { switch (ctrl->id) { case V4L2_CID_BRIGHTNESS: ctrl->val = read_reg(0x123); break; } }h]hstatic int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl) { switch (ctrl->id) { case V4L2_CID_BRIGHTNESS: ctrl->val = read_reg(0x123); break; } }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMlhj[hhubh)}(hNote that you use the 'new value' union as well in g_volatile_ctrl. In general controls that need to implement g_volatile_ctrl are read-only controls. If they are not, a V4L2_EVENT_CTRL_CH_VALUE will not be generated when the control changes.h]hNote that you use the ‘new value’ union as well in g_volatile_ctrl. In general controls that need to implement g_volatile_ctrl are read-only controls. If they are not, a V4L2_EVENT_CTRL_CH_VALUE will not be generated when the control changes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMwhj[hhubh)}(hFTo mark a control as volatile you have to set V4L2_CTRL_FLAG_VOLATILE:h]hFTo mark a control as volatile you have to set V4L2_CTRL_FLAG_VOLATILE:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM|hj[hhubj)}(hkctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...); if (ctrl) ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;h]hkctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...); if (ctrl) ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;}hj&sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM~hj[hhubh)}(hFor try/s_ctrl the new values (i.e. as passed by the user) are filled in and you can modify them in try_ctrl or set them in s_ctrl. The 'cur' union contains the current value, which you can use (but not change!) as well.h]hFor try/s_ctrl the new values (i.e. as passed by the user) are filled in and you can modify them in try_ctrl or set them in s_ctrl. The ‘cur’ union contains the current value, which you can use (but not change!) as well.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(hgIf s_ctrl returns 0 (OK), then the control framework will copy the new final values to the 'cur' union.h]hkIf s_ctrl returns 0 (OK), then the control framework will copy the new final values to the ‘cur’ union.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(hXWhile in g_volatile/s/try_ctrl you can access the value of all controls owned by the same handler since the handler's lock is held. If you need to access the value of controls owned by other handlers, then you have to be very careful not to introduce deadlocks.h]hXWhile in g_volatile/s/try_ctrl you can access the value of all controls owned by the same handler since the handler’s lock is held. If you need to access the value of controls owned by other handlers, then you have to be very careful not to introduce deadlocks.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(hOutside of the control ops you have to go through to helper functions to get or set a single control value safely in your driver:h]hOutside of the control ops you have to go through to helper functions to get or set a single control value safely in your driver:}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubj)}(hds32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val);h]hds32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val);}hjmsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj[hhubh)}(hThese functions go through the control framework just as VIDIOC_G/S_CTRL ioctls do. Don't use these inside the control ops g_volatile/s/try_ctrl, though, that will result in a deadlock since these helpers lock the handler as well.h]hThese functions go through the control framework just as VIDIOC_G/S_CTRL ioctls do. Don’t use these inside the control ops g_volatile/s/try_ctrl, though, that will result in a deadlock since these helpers lock the handler as well.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(h,You can also take the handler lock yourself:h]h,You can also take the handler lock yourself:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubj)}(hmutex_lock(&state->ctrl_handler.lock); pr_info("String value is '%s'\n", ctrl1->p_cur.p_char); pr_info("Integer value is '%s'\n", ctrl2->cur.val); mutex_unlock(&state->ctrl_handler.lock);h]hmutex_lock(&state->ctrl_handler.lock); pr_info("String value is '%s'\n", ctrl1->p_cur.p_char); pr_info("Integer value is '%s'\n", ctrl2->cur.val); mutex_unlock(&state->ctrl_handler.lock);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj[hhubeh}(h]accessing-control-valuesah ]h"]accessing control valuesah$]h&]uh1hhhhhhhhM6ubh)}(hhh](h)}(h Menu Controlsh]h Menu Controls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(h)The v4l2_ctrl struct contains this union:h]h)The v4l2_ctrl struct contains this union:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h8union { u32 step; u32 menu_skip_mask; };h]h8union { u32 step; u32 menu_skip_mask; };}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhjhhubh)}(hX9For menu controls menu_skip_mask is used. What it does is that it allows you to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU implementation where you can return -EINVAL if a certain menu item is not present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for menu controls.h]hX9For menu controls menu_skip_mask is used. What it does is that it allows you to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU implementation where you can return -EINVAL if a certain menu item is not present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for menu controls.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXYA good example is the MPEG Audio Layer II Bitrate menu control where the menu is a list of standardized possible bitrates. But in practice hardware implementations will only support a subset of those. By setting the skip mask you can tell the framework which menu items should be skipped. Setting it to 0 means that all menu items are supported.h]hXYA good example is the MPEG Audio Layer II Bitrate menu control where the menu is a list of standardized possible bitrates. But in practice hardware implementations will only support a subset of those. By setting the skip mask you can tell the framework which menu items should be skipped. Setting it to 0 means that all menu items are supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hzYou set this mask either through the v4l2_ctrl_config struct for a custom control, or by calling v4l2_ctrl_new_std_menu().h]hzYou set this mask either through the v4l2_ctrl_config struct for a custom control, or by calling v4l2_ctrl_new_std_menu().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h] menu-controlsah ]h"] menu controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hCustom Controlsh]hCustom Controls}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hEDriver specific controls can be created using v4l2_ctrl_new_custom():h]hEDriver specific controls can be created using v4l2_ctrl_new_custom():}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hXpstatic const struct v4l2_ctrl_config ctrl_filter = { .ops = &ctrl_custom_ops, .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, .name = "Spatial Filter", .type = V4L2_CTRL_TYPE_INTEGER, .flags = V4L2_CTRL_FLAG_SLIDER, .max = 15, .step = 1, }; ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL);h]hXpstatic const struct v4l2_ctrl_config ctrl_filter = { .ops = &ctrl_custom_ops, .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, .name = "Spatial Filter", .type = V4L2_CTRL_TYPE_INTEGER, .flags = V4L2_CTRL_FLAG_SLIDER, .max = 15, .step = 1, }; ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL);}hj. sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj hhubh)}(hWThe last argument is the priv pointer which can be set to driver-specific private data.h]hWThe last argument is the priv pointer which can be set to driver-specific private data.}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hHThe v4l2_ctrl_config struct also has a field to set the is_private flag.h]hHThe v4l2_ctrl_config struct also has a field to set the is_private flag.}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hIf the name field is not set, then the framework will assume this is a standard control and will fill in the name, type and flags fields accordingly.h]hIf the name field is not set, then the framework will assume this is a standard control and will fill in the name, type and flags fields accordingly.}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]custom-controlsah ]h"]custom controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hActive and Grabbed Controlsh]hActive and Grabbed Controls}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo hhhhhMubh)}(hXtIf you get more complex relationships between controls, then you may have to activate and deactivate controls. For example, if the Chroma AGC control is on, then the Chroma Gain control is inactive. That is, you may set it, but the value will not be used by the hardware as long as the automatic gain control is on. Typically user interfaces can disable such input fields.h]hXtIf you get more complex relationships between controls, then you may have to activate and deactivate controls. For example, if the Chroma AGC control is on, then the Chroma Gain control is inactive. That is, you may set it, but the value will not be used by the hardware as long as the automatic gain control is on. Typically user interfaces can disable such input fields.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjo hhubh)}(hYou can set the 'active' status using v4l2_ctrl_activate(). By default all controls are active. Note that the framework does not check for this flag. It is meant purely for GUIs. The function is typically called from within s_ctrl.h]hYou can set the ‘active’ status using v4l2_ctrl_activate(). By default all controls are active. Note that the framework does not check for this flag. It is meant purely for GUIs. The function is typically called from within s_ctrl.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjo hhubh)}(hThe other flag is the 'grabbed' flag. A grabbed control means that you cannot change it because it is in use by some resource. Typical examples are MPEG bitrate controls that cannot be changed while capturing is in progress.h]hThe other flag is the ‘grabbed’ flag. A grabbed control means that you cannot change it because it is in use by some resource. Typical examples are MPEG bitrate controls that cannot be changed while capturing is in progress.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjo hhubh)}(hIf a control is set to 'grabbed' using v4l2_ctrl_grab(), then the framework will return -EBUSY if an attempt is made to set this control. The v4l2_ctrl_grab() function is typically called from the driver when it starts or stops streaming.h]hIf a control is set to ‘grabbed’ using v4l2_ctrl_grab(), then the framework will return -EBUSY if an attempt is made to set this control. The v4l2_ctrl_grab() function is typically called from the driver when it starts or stops streaming.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjo hhubeh}(h]active-and-grabbed-controlsah ]h"]active and grabbed controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hControl Clustersh]hControl Clusters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hBy default all controls are independent from the others. But in more complex scenarios you can get dependencies from one control to another. In that case you need to 'cluster' them:h]hBy default all controls are independent from the others. But in more complex scenarios you can get dependencies from one control to another. In that case you need to ‘cluster’ them:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hXstruct foo { struct v4l2_ctrl_handler ctrl_handler; #define AUDIO_CL_VOLUME (0) #define AUDIO_CL_MUTE (1) struct v4l2_ctrl *audio_cluster[2]; ... }; state->audio_cluster[AUDIO_CL_VOLUME] = v4l2_ctrl_new_std(&state->ctrl_handler, ...); state->audio_cluster[AUDIO_CL_MUTE] = v4l2_ctrl_new_std(&state->ctrl_handler, ...); v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster);h]hXstruct foo { struct v4l2_ctrl_handler ctrl_handler; #define AUDIO_CL_VOLUME (0) #define AUDIO_CL_MUTE (1) struct v4l2_ctrl *audio_cluster[2]; ... }; state->audio_cluster[AUDIO_CL_VOLUME] = v4l2_ctrl_new_std(&state->ctrl_handler, ...); state->audio_cluster[AUDIO_CL_MUTE] = v4l2_ctrl_new_std(&state->ctrl_handler, ...); v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj hhubh)}(hXFrom now on whenever one or more of the controls belonging to the same cluster is set (or 'gotten', or 'tried'), only the control ops of the first control ('volume' in this example) is called. You effectively create a new composite control. Similar to how a 'struct' works in C.h]hX&From now on whenever one or more of the controls belonging to the same cluster is set (or ‘gotten’, or ‘tried’), only the control ops of the first control (‘volume’ in this example) is called. You effectively create a new composite control. Similar to how a ‘struct’ works in C.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj hhubh)}(hSo when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set all two controls belonging to the audio_cluster:h]hSo when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set all two controls belonging to the audio_cluster:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hXstatic int foo_s_ctrl(struct v4l2_ctrl *ctrl) { struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: { struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE]; write_reg(0x123, mute->val ? 0 : ctrl->val); break; } case V4L2_CID_CONTRAST: write_reg(0x456, ctrl->val); break; } return 0; }h]hXstatic int foo_s_ctrl(struct v4l2_ctrl *ctrl) { struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: { struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE]; write_reg(0x123, mute->val ? 0 : ctrl->val); break; } case V4L2_CID_CONTRAST: write_reg(0x456, ctrl->val); break; } return 0; }}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj hhubh)}(hFIn the example above the following are equivalent for the VOLUME case:h]hFIn the example above the following are equivalent for the VOLUME case:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hj hhubj)}(hctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME] ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE]h]hctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME] ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE]}hj' sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM+hj hhubh)}(huIn practice using cluster arrays like this becomes very tiresome. So instead the following equivalent method is used:h]huIn practice using cluster arrays like this becomes very tiresome. So instead the following equivalent method is used:}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM0hj hhubj)}(histruct { /* audio cluster */ struct v4l2_ctrl *volume; struct v4l2_ctrl *mute; };h]histruct { /* audio cluster */ struct v4l2_ctrl *volume; struct v4l2_ctrl *mute; };}hjD sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM3hj hhubh)}(hThe anonymous struct is used to clearly 'cluster' these two control pointers, but it serves no other purpose. The effect is the same as creating an array with two control pointers. So you can just do:h]hThe anonymous struct is used to clearly ‘cluster’ these two control pointers, but it serves no other purpose. The effect is the same as creating an array with two control pointers. So you can just do:}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hj hhubj)}(hstate->volume = v4l2_ctrl_new_std(&state->ctrl_handler, ...); state->mute = v4l2_ctrl_new_std(&state->ctrl_handler, ...); v4l2_ctrl_cluster(2, &state->volume);h]hstate->volume = v4l2_ctrl_new_std(&state->ctrl_handler, ...); state->mute = v4l2_ctrl_new_std(&state->ctrl_handler, ...); v4l2_ctrl_cluster(2, &state->volume);}hja sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM?hj hhubh)}(hHAnd in foo_s_ctrl you can use these pointers directly: state->mute->val.h]hHAnd in foo_s_ctrl you can use these pointers directly: state->mute->val.}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMEhj hhubh)}(hX0Note that controls in a cluster may be NULL. For example, if for some reason mute was never added (because the hardware doesn't support that particular feature), then mute will be NULL. So in that case we have a cluster of 2 controls, of which only 1 is actually instantiated. The only restriction is that the first control of the cluster must always be present, since that is the 'master' control of the cluster. The master control is the one that identifies the cluster and that provides the pointer to the v4l2_ctrl_ops struct that is used for that cluster.h]hX6Note that controls in a cluster may be NULL. For example, if for some reason mute was never added (because the hardware doesn’t support that particular feature), then mute will be NULL. So in that case we have a cluster of 2 controls, of which only 1 is actually instantiated. The only restriction is that the first control of the cluster must always be present, since that is the ‘master’ control of the cluster. The master control is the one that identifies the cluster and that provides the pointer to the v4l2_ctrl_ops struct that is used for that cluster.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhj hhubh)}(hfObviously, all controls in the cluster array must be initialized to either a valid control or to NULL.h]hfObviously, all controls in the cluster array must be initialized to either a valid control or to NULL.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMPhj hhubh)}(hXIn rare cases you might want to know which controls of a cluster actually were set explicitly by the user. For this you can check the 'is_new' flag of each control. For example, in the case of a volume/mute cluster the 'is_new' flag of the mute control would be set if the user called VIDIOC_S_CTRL for mute only. If the user would call VIDIOC_S_EXT_CTRLS for both mute and volume controls, then the 'is_new' flag would be 1 for both controls.h]hXIn rare cases you might want to know which controls of a cluster actually were set explicitly by the user. For this you can check the ‘is_new’ flag of each control. For example, in the case of a volume/mute cluster the ‘is_new’ flag of the mute control would be set if the user called VIDIOC_S_CTRL for mute only. If the user would call VIDIOC_S_EXT_CTRLS for both mute and volume controls, then the ‘is_new’ flag would be 1 for both controls.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMShj hhubh)}(hIThe 'is_new' flag is always 1 when called from v4l2_ctrl_handler_setup().h]hMThe ‘is_new’ flag is always 1 when called from v4l2_ctrl_handler_setup().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhj hhubeh}(h]control-clustersah ]h"]control clustersah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h7Handling autogain/gain-type Controls with Auto Clustersh]h7Handling autogain/gain-type Controls with Auto Clusters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM^ubh)}(hXaA common type of control cluster is one that handles 'auto-foo/foo'-type controls. Typical examples are autogain/gain, autoexposure/exposure, autowhitebalance/red balance/blue balance. In all cases you have one control that determines whether another control is handled automatically by the hardware, or whether it is under manual control from the user.h]hXeA common type of control cluster is one that handles ‘auto-foo/foo’-type controls. Typical examples are autogain/gain, autoexposure/exposure, autowhitebalance/red balance/blue balance. In all cases you have one control that determines whether another control is handled automatically by the hardware, or whether it is under manual control from the user.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM`hj hhubh)}(hIf the cluster is in automatic mode, then the manual controls should be marked inactive and volatile. When the volatile controls are read the g_volatile_ctrl operation should return the value that the hardware's automatic mode set up automatically.h]hIf the cluster is in automatic mode, then the manual controls should be marked inactive and volatile. When the volatile controls are read the g_volatile_ctrl operation should return the value that the hardware’s automatic mode set up automatically.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhj hhubh)}(hXAIf the cluster is put in manual mode, then the manual controls should become active again and the volatile flag is cleared (so g_volatile_ctrl is no longer called while in manual mode). In addition just before switching to manual mode the current values as determined by the auto mode are copied as the new manual values.h]hXAIf the cluster is put in manual mode, then the manual controls should become active again and the volatile flag is cleared (so g_volatile_ctrl is no longer called while in manual mode). In addition just before switching to manual mode the current values as determined by the auto mode are copied as the new manual values.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMkhj hhubh)}(hFinally the V4L2_CTRL_FLAG_UPDATE should be set for the auto control since changing that control affects the control flags of the manual controls.h]hFinally the V4L2_CTRL_FLAG_UPDATE should be set for the auto control since changing that control affects the control flags of the manual controls.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMqhj hhubh)}(hRIn order to simplify this a special variation of v4l2_ctrl_cluster was introduced:h]hRIn order to simplify this a special variation of v4l2_ctrl_cluster was introduced:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthj hhubj)}(hvoid v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls, u8 manual_val, bool set_volatile);h]hvoid v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls, u8 manual_val, bool set_volatile);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMwhj hhubh)}(hXThe first two arguments are identical to v4l2_ctrl_cluster. The third argument tells the framework which value switches the cluster into manual mode. The last argument will optionally set V4L2_CTRL_FLAG_VOLATILE for the non-auto controls. If it is false, then the manual controls are never volatile. You would typically use that if the hardware does not give you the option to read back to values as determined by the auto mode (e.g. if autogain is on, the hardware doesn't allow you to obtain the current gain value).h]hXThe first two arguments are identical to v4l2_ctrl_cluster. The third argument tells the framework which value switches the cluster into manual mode. The last argument will optionally set V4L2_CTRL_FLAG_VOLATILE for the non-auto controls. If it is false, then the manual controls are never volatile. You would typically use that if the hardware does not give you the option to read back to values as determined by the auto mode (e.g. if autogain is on, the hardware doesn’t allow you to obtain the current gain value).}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM|hj hhubh)}(hEThe first control of the cluster is assumed to be the 'auto' control.h]hIThe first control of the cluster is assumed to be the ‘auto’ control.}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hiUsing this function will ensure that you don't need to handle all the complex flag and volatile handling.h]hkUsing this function will ensure that you don’t need to handle all the complex flag and volatile handling.}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]7handling-autogain-gain-type-controls-with-auto-clustersah ]h"]7handling autogain/gain-type controls with auto clustersah$]h&]uh1hhhhhhhhM^ubh)}(hhh](h)}(hVIDIOC_LOG_STATUS Supporth]hVIDIOC_LOG_STATUS Support}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV hhhhhMubh)}(hXCThis ioctl allow you to dump the current status of a driver to the kernel log. The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the value of the controls owned by the given handler to the log. You can supply a prefix as well. If the prefix didn't end with a space, then ': ' will be added for you.h]hXIThis ioctl allow you to dump the current status of a driver to the kernel log. The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the value of the controls owned by the given handler to the log. You can supply a prefix as well. If the prefix didn’t end with a space, then ‘: ‘ will be added for you.}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjV hhubeh}(h]vidioc-log-status-supportah ]h"]vidioc_log_status supportah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h,Different Handlers for Different Video Nodesh]h,Different Handlers for Different Video Nodes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj} hhhhhMubh)}(hUsually the V4L2 driver has just one control handler that is global for all video nodes. But you can also specify different control handlers for different video nodes. You can do that by manually setting the ctrl_handler field of struct video_device.h]hUsually the V4L2 driver has just one control handler that is global for all video nodes. But you can also specify different control handlers for different video nodes. You can do that by manually setting the ctrl_handler field of struct video_device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubh)}(hX@That is no problem if there are no subdevs involved but if there are, then you need to block the automatic merging of subdev controls to the global control handler. You do that by simply setting the ctrl_handler field in struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer merge subdev controls.h]hX@That is no problem if there are no subdevs involved but if there are, then you need to block the automatic merging of subdev controls to the global control handler. You do that by simply setting the ctrl_handler field in struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer merge subdev controls.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubh)}(hXAfter each subdev was added, you will then have to call v4l2_ctrl_add_handler manually to add the subdev's control handler (sd->ctrl_handler) to the desired control handler. This control handler may be specific to the video_device or for a subset of video_device's. For example: the radio device nodes only have audio controls, while the video and vbi device nodes share the same control handler for the audio and video controls.h]hXAfter each subdev was added, you will then have to call v4l2_ctrl_add_handler manually to add the subdev’s control handler (sd->ctrl_handler) to the desired control handler. This control handler may be specific to the video_device or for a subset of video_device’s. For example: the radio device nodes only have audio controls, while the video and vbi device nodes share the same control handler for the audio and video controls.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubh)}(hX'If you want to have one handler (e.g. for a radio device node) have a subset of another handler (e.g. for a video device node), then you should first add the controls to the first handler, add the other controls to the second handler and finally add the first handler to the second. For example:h]hX'If you want to have one handler (e.g. for a radio device node) have a subset of another handler (e.g. for a video device node), then you should first add the controls to the first handler, add the other controls to the second handler and finally add the first handler to the second. For example:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubj)}(hX~v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...); v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler, NULL);h]hX~v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...); v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler, NULL);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj} hhubh)}(hThe last argument to v4l2_ctrl_add_handler() is a filter function that allows you to filter which controls will be added. Set it to NULL if you want to add all controls.h]hThe last argument to v4l2_ctrl_add_handler() is a filter function that allows you to filter which controls will be added. Set it to NULL if you want to add all controls.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubh)}(h.Or you can add specific controls to a handler:h]h.Or you can add specific controls to a handler:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubj)}(hvolume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...);h]hvolume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj} hhubh)}(hTWhat you should not do is make two identical controls for two handlers. For example:h]hTWhat you should not do is make two identical controls for two handlers. For example:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubj)}(hv4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...);h]hv4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj} hhubh)}(hThis would be bad since muting the radio would not change the video mute control. The rule is to have one control for each hardware 'knob' that you can twiddle.h]hThis would be bad since muting the radio would not change the video mute control. The rule is to have one control for each hardware ‘knob’ that you can twiddle.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj} hhubeh}(h],different-handlers-for-different-video-nodesah ]h"],different handlers for different video nodesah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hFinding Controlsh]hFinding Controls}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3 hhhhhMubh)}(htNormally you have created the controls yourself and you can store the struct v4l2_ctrl pointer into your own struct.h]htNormally you have created the controls yourself and you can store the struct v4l2_ctrl pointer into your own struct.}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubh)}(hBut sometimes you need to find a control from another handler that you do not own. For example, if you have to find a volume control from a subdev.h]hBut sometimes you need to find a control from another handler that you do not own. For example, if you have to find a volume control from a subdev.}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubh)}(h*You can do that by calling v4l2_ctrl_find:h]h*You can do that by calling v4l2_ctrl_find:}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubj)}(h\struct v4l2_ctrl *volume; volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME);h]h\struct v4l2_ctrl *volume; volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME);}hjn sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj3 hhubh)}(hySince v4l2_ctrl_find will lock the handler you have to be careful where you use it. For example, this is not a good idea:h]hySince v4l2_ctrl_find will lock the handler you have to be careful where you use it. For example, this is not a good idea:}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubj)}(hstruct v4l2_ctrl_handler ctrl_handler; v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);h]hstruct v4l2_ctrl_handler ctrl_handler; v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj3 hhubh)}(h...and in video_ops.s_ctrl:h]h...and in video_ops.s_ctrl:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubj)}(hjcase V4L2_CID_BRIGHTNESS: contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST); ...h]hjcase V4L2_CID_BRIGHTNESS: contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST); ...}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj3 hhubh)}(hWhen s_ctrl is called by the framework the ctrl_handler.lock is already taken, so attempting to find another control from the same handler will deadlock.h]hWhen s_ctrl is called by the framework the ctrl_handler.lock is already taken, so attempting to find another control from the same handler will deadlock.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubh)}(hGIt is recommended not to use this function from inside the control ops.h]hGIt is recommended not to use this function from inside the control ops.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3 hhubeh}(h]finding-controlsah ]h"]finding controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPreventing Controls inheritanceh]hPreventing Controls inheritance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hXWhen one control handler is added to another using v4l2_ctrl_add_handler, then by default all controls from one are merged to the other. But a subdev might have low-level controls that make sense for some advanced embedded system, but not when it is used in consumer-level hardware. In that case you want to keep those low-level controls local to the subdev. You can do this by simply setting the 'is_private' flag of the control to 1:h]hXWhen one control handler is added to another using v4l2_ctrl_add_handler, then by default all controls from one are merged to the other. But a subdev might have low-level controls that make sense for some advanced embedded system, but not when it is used in consumer-level hardware. In that case you want to keep those low-level controls local to the subdev. You can do this by simply setting the ‘is_private’ flag of the control to 1:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hXKstatic const struct v4l2_ctrl_config ctrl_private = { .ops = &ctrl_custom_ops, .id = V4L2_CID_..., .name = "Some Private Control", .type = V4L2_CTRL_TYPE_INTEGER, .max = 15, .step = 1, .is_private = 1, }; ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL);h]hXKstatic const struct v4l2_ctrl_config ctrl_private = { .ops = &ctrl_custom_ops, .id = V4L2_CID_..., .name = "Some Private Control", .type = V4L2_CTRL_TYPE_INTEGER, .max = 15, .step = 1, .is_private = 1, }; ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhj hhubh)}(hHThese controls will now be skipped when v4l2_ctrl_add_handler is called.h]hHThese controls will now be skipped when v4l2_ctrl_add_handler is called.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]preventing-controls-inheritanceah ]h"]preventing controls inheritanceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h"V4L2_CTRL_TYPE_CTRL_CLASS Controlsh]h"V4L2_CTRL_TYPE_CTRL_CLASS Controls}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hX5Controls of this type can be used by GUIs to get the name of the control class. A fully featured GUI can make a dialog with multiple tabs with each tab containing the controls belonging to a particular control class. The name of each tab can be found by querying a special control with ID .h]hX5Controls of this type can be used by GUIs to get the name of the control class. A fully featured GUI can make a dialog with multiple tabs with each tab containing the controls belonging to a particular control class. The name of each tab can be found by querying a special control with ID .}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hDrivers do not have to care about this. The framework will automatically add a control of this type whenever the first control belonging to a new control class is added.h]hDrivers do not have to care about this. The framework will automatically add a control of this type whenever the first control belonging to a new control class is added.}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]"v4l2-ctrl-type-ctrl-class-controlsah ]h"]"v4l2_ctrl_type_ctrl_class controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hAdding Notify Callbacksh]hAdding Notify Callbacks}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT hhhhhM!ubh)}(hSometimes the platform or bridge driver needs to be notified when a control from a sub-device driver changes. You can set a notify callback by calling this function:h]hSometimes the platform or bridge driver needs to be notified when a control from a sub-device driver changes. You can set a notify callback by calling this function:}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM#hjT hhubj)}(hvvoid v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, void (*notify)(struct v4l2_ctrl *ctrl, void *priv), void *priv);h]hvvoid v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, void (*notify)(struct v4l2_ctrl *ctrl, void *priv), void *priv);}hjs sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM'hjT hhubh)}(hWhenever the give control changes value the notify callback will be called with a pointer to the control and the priv pointer that was passed with v4l2_ctrl_notify. Note that the control's handler lock is held when the notify function is called.h]hWhenever the give control changes value the notify callback will be called with a pointer to the control and the priv pointer that was passed with v4l2_ctrl_notify. Note that the control’s handler lock is held when the notify function is called.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjT hhubh)}(h{There can be only one notify function per control handler. Any attempt to set another notify function will cause a WARN_ON.h]h{There can be only one notify function per control handler. Any attempt to set another notify function will cause a WARN_ON.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM1hjT hhubeh}(h]adding-notify-callbacksah ]h"]adding notify callbacksah$]h&]uh1hhhhhhhhM!ubh)}(hhh](h)}(h'v4l2_ctrl functions and data structuresh]h'v4l2_ctrl functions and data structures}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM5ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlev4l2_ctrl_ptr (C union)c.v4l2_ctrl_ptrhNtauh1j hj hhhNhNubhdesc)}(hhh](hdesc_signature)}(h v4l2_ctrl_ptrh]hdesc_signature_line)}(hunion v4l2_ctrl_ptrh](hdesc_sig_keyword)}(hunionh]hunion}(hj hhhNhNubah}(h]h ]kah"]h$]h&]uh1j hj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKubhdesc_sig_space)}(h h]h }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1j hj hhhj hKubh desc_name)}(h v4l2_ctrl_ptrh]h desc_sig_name)}(hj h]h v4l2_ctrl_ptr}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhj ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j hj hhhj hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j sphinx_line_type declaratorhj hhhj hKubah}(h]j ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j hj hKhj hhubh desc_content)}(hhh]h)}(hA pointer to a control value.h]hA pointer to a control value.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj0hhubah}(h]h ]h"]h$]h&]uh1j.hj hhhj hKubeh}(h]h ](junioneh"]h$]h&]domainjobjtypejKdesctypejKnoindex noindexentrynocontentsentryuh1j hhhj hNhNubh container)}(hX **Definition**:: union v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; u8 *p_u8; u16 *p_u16; u32 *p_u32; char *p_char; struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence; struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture; struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation; struct v4l2_ctrl_fwht_params *p_fwht_params; struct v4l2_ctrl_h264_sps *p_h264_sps; struct v4l2_ctrl_h264_pps *p_h264_pps; struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix; struct v4l2_ctrl_h264_slice_params *p_h264_slice_params; struct v4l2_ctrl_h264_decode_params *p_h264_decode_params; struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights; struct v4l2_ctrl_vp8_frame *p_vp8_frame; struct v4l2_ctrl_hevc_sps *p_hevc_sps; struct v4l2_ctrl_hevc_pps *p_hevc_pps; struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params; struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs; struct v4l2_ctrl_vp9_frame *p_vp9_frame; struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll; struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering; struct v4l2_area *p_area; struct v4l2_ctrl_av1_sequence *p_av1_sequence; struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry; struct v4l2_ctrl_av1_frame *p_av1_frame; struct v4l2_ctrl_av1_film_grain *p_av1_film_grain; struct v4l2_rect *p_rect; void *p; const void *p_const; }; **Members** ``p_s32`` Pointer to a 32-bit signed value. ``p_s64`` Pointer to a 64-bit signed value. ``p_u8`` Pointer to a 8-bit unsigned value. ``p_u16`` Pointer to a 16-bit unsigned value. ``p_u32`` Pointer to a 32-bit unsigned value. ``p_char`` Pointer to a string. ``p_mpeg2_sequence`` Pointer to a MPEG2 sequence structure. ``p_mpeg2_picture`` Pointer to a MPEG2 picture structure. ``p_mpeg2_quantisation`` Pointer to a MPEG2 quantisation data structure. ``p_fwht_params`` Pointer to a FWHT stateless parameters structure. ``p_h264_sps`` Pointer to a struct v4l2_ctrl_h264_sps. ``p_h264_pps`` Pointer to a struct v4l2_ctrl_h264_pps. ``p_h264_scaling_matrix`` Pointer to a struct v4l2_ctrl_h264_scaling_matrix. ``p_h264_slice_params`` Pointer to a struct v4l2_ctrl_h264_slice_params. ``p_h264_decode_params`` Pointer to a struct v4l2_ctrl_h264_decode_params. ``p_h264_pred_weights`` Pointer to a struct v4l2_ctrl_h264_pred_weights. ``p_vp8_frame`` Pointer to a VP8 frame params structure. ``p_hevc_sps`` Pointer to an HEVC sequence parameter set structure. ``p_hevc_pps`` Pointer to an HEVC picture parameter set structure. ``p_hevc_slice_params`` Pointer to an HEVC slice parameters structure. ``p_vp9_compressed_hdr_probs`` Pointer to a VP9 frame compressed header probs structure. ``p_vp9_frame`` Pointer to a VP9 frame params structure. ``p_hdr10_cll`` Pointer to an HDR10 Content Light Level structure. ``p_hdr10_mastering`` Pointer to an HDR10 Mastering Display structure. ``p_area`` Pointer to an area. ``p_av1_sequence`` Pointer to an AV1 sequence structure. ``p_av1_tile_group_entry`` Pointer to an AV1 tile group entry structure. ``p_av1_frame`` Pointer to an AV1 frame structure. ``p_av1_film_grain`` Pointer to an AV1 film grain structure. ``p_rect`` Pointer to a rectangle. ``p`` Pointer to a compound value. ``p_const`` Pointer to a constant compound value.h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj[ubh:}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK!hjWubj)}(hXunion v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; u8 *p_u8; u16 *p_u16; u32 *p_u32; char *p_char; struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence; struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture; struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation; struct v4l2_ctrl_fwht_params *p_fwht_params; struct v4l2_ctrl_h264_sps *p_h264_sps; struct v4l2_ctrl_h264_pps *p_h264_pps; struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix; struct v4l2_ctrl_h264_slice_params *p_h264_slice_params; struct v4l2_ctrl_h264_decode_params *p_h264_decode_params; struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights; struct v4l2_ctrl_vp8_frame *p_vp8_frame; struct v4l2_ctrl_hevc_sps *p_hevc_sps; struct v4l2_ctrl_hevc_pps *p_hevc_pps; struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params; struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs; struct v4l2_ctrl_vp9_frame *p_vp9_frame; struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll; struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering; struct v4l2_area *p_area; struct v4l2_ctrl_av1_sequence *p_av1_sequence; struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry; struct v4l2_ctrl_av1_frame *p_av1_frame; struct v4l2_ctrl_av1_film_grain *p_av1_film_grain; struct v4l2_rect *p_rect; void *p; const void *p_const; };h]hXunion v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; u8 *p_u8; u16 *p_u16; u32 *p_u32; char *p_char; struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence; struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture; struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation; struct v4l2_ctrl_fwht_params *p_fwht_params; struct v4l2_ctrl_h264_sps *p_h264_sps; struct v4l2_ctrl_h264_pps *p_h264_pps; struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix; struct v4l2_ctrl_h264_slice_params *p_h264_slice_params; struct v4l2_ctrl_h264_decode_params *p_h264_decode_params; struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights; struct v4l2_ctrl_vp8_frame *p_vp8_frame; struct v4l2_ctrl_hevc_sps *p_hevc_sps; struct v4l2_ctrl_hevc_pps *p_hevc_pps; struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params; struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs; struct v4l2_ctrl_vp9_frame *p_vp9_frame; struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll; struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering; struct v4l2_area *p_area; struct v4l2_ctrl_av1_sequence *p_av1_sequence; struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry; struct v4l2_ctrl_av1_frame *p_av1_frame; struct v4l2_ctrl_av1_film_grain *p_av1_film_grain; struct v4l2_rect *p_rect; void *p; const void *p_const; };}hjzsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK#hjWubh)}(h **Members**h]j`)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKFhjWubhdefinition_list)}(hhh](hdefinition_list_item)}(h,``p_s32`` Pointer to a 32-bit signed value. h](hterm)}(h ``p_s32``h]j)}(hjh]hp_s32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubh definition)}(hhh]h)}(h!Pointer to a 32-bit signed value.h]h!Pointer to a 32-bit signed value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h,``p_s64`` Pointer to a 64-bit signed value. h](j)}(h ``p_s64``h]j)}(hjh]hp_s64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK hjubj)}(hhh]h)}(h!Pointer to a 64-bit signed value.h]h!Pointer to a 64-bit signed value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(h,``p_u8`` Pointer to a 8-bit unsigned value. h](j)}(h``p_u8``h]j)}(hj$h]hp_u8}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK!hjubj)}(hhh]h)}(h"Pointer to a 8-bit unsigned value.h]h"Pointer to a 8-bit unsigned value.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hK!hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hK!hjubj)}(h.``p_u16`` Pointer to a 16-bit unsigned value. h](j)}(h ``p_u16``h]j)}(hj]h]hp_u16}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK"hjWubj)}(hhh]h)}(h#Pointer to a 16-bit unsigned value.h]h#Pointer to a 16-bit unsigned value.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhK"hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhK"hjubj)}(h.``p_u32`` Pointer to a 32-bit unsigned value. h](j)}(h ``p_u32``h]j)}(hjh]hp_u32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK#hjubj)}(hhh]h)}(h#Pointer to a 32-bit unsigned value.h]h#Pointer to a 32-bit unsigned value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hjubj)}(h ``p_char`` Pointer to a string. h](j)}(h ``p_char``h]j)}(hjh]hp_char}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK$hjubj)}(hhh]h)}(hPointer to a string.h]hPointer to a string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK$hjubj)}(h<``p_mpeg2_sequence`` Pointer to a MPEG2 sequence structure. h](j)}(h``p_mpeg2_sequence``h]j)}(hjh]hp_mpeg2_sequence}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK%hjubj)}(hhh]h)}(h&Pointer to a MPEG2 sequence structure.h]h&Pointer to a MPEG2 sequence structure.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjubj)}(h:``p_mpeg2_picture`` Pointer to a MPEG2 picture structure. h](j)}(h``p_mpeg2_picture``h]j)}(hjAh]hp_mpeg2_picture}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK&hj;ubj)}(hhh]h)}(h%Pointer to a MPEG2 picture structure.h]h%Pointer to a MPEG2 picture structure.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhK&hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhK&hjubj)}(hI``p_mpeg2_quantisation`` Pointer to a MPEG2 quantisation data structure. h](j)}(h``p_mpeg2_quantisation``h]j)}(hjzh]hp_mpeg2_quantisation}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK'hjtubj)}(hhh]h)}(h/Pointer to a MPEG2 quantisation data structure.h]h/Pointer to a MPEG2 quantisation data structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhK'hjubj)}(hD``p_fwht_params`` Pointer to a FWHT stateless parameters structure. h](j)}(h``p_fwht_params``h]j)}(hjh]h p_fwht_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK(hjubj)}(hhh]h)}(h1Pointer to a FWHT stateless parameters structure.h]h1Pointer to a FWHT stateless parameters structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjubj)}(h7``p_h264_sps`` Pointer to a struct v4l2_ctrl_h264_sps. h](j)}(h``p_h264_sps``h]j)}(hjh]h p_h264_sps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK)hjubj)}(hhh]h)}(h'Pointer to a struct v4l2_ctrl_h264_sps.h]h'Pointer to a struct v4l2_ctrl_h264_sps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(h7``p_h264_pps`` Pointer to a struct v4l2_ctrl_h264_pps. h](j)}(h``p_h264_pps``h]j)}(hj%h]h p_h264_pps}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK*hjubj)}(hhh]h)}(h'Pointer to a struct v4l2_ctrl_h264_pps.h]h'Pointer to a struct v4l2_ctrl_h264_pps.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hK*hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hK*hjubj)}(hM``p_h264_scaling_matrix`` Pointer to a struct v4l2_ctrl_h264_scaling_matrix. h](j)}(h``p_h264_scaling_matrix``h]j)}(hj^h]hp_h264_scaling_matrix}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK+hjXubj)}(hhh]h)}(h2Pointer to a struct v4l2_ctrl_h264_scaling_matrix.h]h2Pointer to a struct v4l2_ctrl_h264_scaling_matrix.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshK+hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshK+hjubj)}(hI``p_h264_slice_params`` Pointer to a struct v4l2_ctrl_h264_slice_params. h](j)}(h``p_h264_slice_params``h]j)}(hjh]hp_h264_slice_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK,hjubj)}(hhh]h)}(h0Pointer to a struct v4l2_ctrl_h264_slice_params.h]h0Pointer to a struct v4l2_ctrl_h264_slice_params.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK,hjubj)}(hK``p_h264_decode_params`` Pointer to a struct v4l2_ctrl_h264_decode_params. h](j)}(h``p_h264_decode_params``h]j)}(hjh]hp_h264_decode_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK-hjubj)}(hhh]h)}(h1Pointer to a struct v4l2_ctrl_h264_decode_params.h]h1Pointer to a struct v4l2_ctrl_h264_decode_params.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK-hjubj)}(hI``p_h264_pred_weights`` Pointer to a struct v4l2_ctrl_h264_pred_weights. h](j)}(h``p_h264_pred_weights``h]j)}(hj h]hp_h264_pred_weights}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK.hjubj)}(hhh]h)}(h0Pointer to a struct v4l2_ctrl_h264_pred_weights.h]h0Pointer to a struct v4l2_ctrl_h264_pred_weights.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hjubj)}(h9``p_vp8_frame`` Pointer to a VP8 frame params structure. h](j)}(h``p_vp8_frame``h]j)}(hjBh]h p_vp8_frame}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK/hj<ubj)}(hhh]h)}(h(Pointer to a VP8 frame params structure.h]h(Pointer to a VP8 frame params structure.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhK/hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhK/hjubj)}(hD``p_hevc_sps`` Pointer to an HEVC sequence parameter set structure. h](j)}(h``p_hevc_sps``h]j)}(hj{h]h p_hevc_sps}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK2hjuubj)}(hhh]h)}(h4Pointer to an HEVC sequence parameter set structure.h]h4Pointer to an HEVC sequence parameter set structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhK2hjubj)}(hC``p_hevc_pps`` Pointer to an HEVC picture parameter set structure. h](j)}(h``p_hevc_pps``h]j)}(hjh]h p_hevc_pps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK3hjubj)}(hhh]h)}(h3Pointer to an HEVC picture parameter set structure.h]h3Pointer to an HEVC picture parameter set structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK3hjubj)}(hG``p_hevc_slice_params`` Pointer to an HEVC slice parameters structure. h](j)}(h``p_hevc_slice_params``h]j)}(hjh]hp_hevc_slice_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK4hjubj)}(hhh]h)}(h.Pointer to an HEVC slice parameters structure.h]h.Pointer to an HEVC slice parameters structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubj)}(hY``p_vp9_compressed_hdr_probs`` Pointer to a VP9 frame compressed header probs structure. h](j)}(h``p_vp9_compressed_hdr_probs``h]j)}(hj&h]hp_vp9_compressed_hdr_probs}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK0hj ubj)}(hhh]h)}(h9Pointer to a VP9 frame compressed header probs structure.h]h9Pointer to a VP9 frame compressed header probs structure.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK0hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hK0hjubj)}(h9``p_vp9_frame`` Pointer to a VP9 frame params structure. h](j)}(h``p_vp9_frame``h]j)}(hj_h]h p_vp9_frame}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK1hjYubj)}(hhh]h)}(h(Pointer to a VP9 frame params structure.h]h(Pointer to a VP9 frame params structure.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthK1hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthK1hjubj)}(hC``p_hdr10_cll`` Pointer to an HDR10 Content Light Level structure. h](j)}(h``p_hdr10_cll``h]j)}(hjh]h p_hdr10_cll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK5hjubj)}(hhh]h)}(h2Pointer to an HDR10 Content Light Level structure.h]h2Pointer to an HDR10 Content Light Level structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK5hjubj)}(hG``p_hdr10_mastering`` Pointer to an HDR10 Mastering Display structure. h](j)}(h``p_hdr10_mastering``h]j)}(hjh]hp_hdr10_mastering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK6hjubj)}(hhh]h)}(h0Pointer to an HDR10 Mastering Display structure.h]h0Pointer to an HDR10 Mastering Display structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjubj)}(h``p_area`` Pointer to an area. h](j)}(h ``p_area``h]j)}(hj h]hp_area}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK7hjubj)}(hhh]h)}(hPointer to an area.h]hPointer to an area.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK7hjubj)}(h9``p_av1_sequence`` Pointer to an AV1 sequence structure. h](j)}(h``p_av1_sequence``h]j)}(hjCh]hp_av1_sequence}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK8hj=ubj)}(hhh]h)}(h%Pointer to an AV1 sequence structure.h]h%Pointer to an AV1 sequence structure.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhK8hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhK8hjubj)}(hI``p_av1_tile_group_entry`` Pointer to an AV1 tile group entry structure. h](j)}(h``p_av1_tile_group_entry``h]j)}(hj|h]hp_av1_tile_group_entry}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK9hjvubj)}(hhh]h)}(h-Pointer to an AV1 tile group entry structure.h]h-Pointer to an AV1 tile group entry structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubj)}(h3``p_av1_frame`` Pointer to an AV1 frame structure. h](j)}(h``p_av1_frame``h]j)}(hjh]h p_av1_frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK:hjubj)}(hhh]h)}(h"Pointer to an AV1 frame structure.h]h"Pointer to an AV1 frame structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK:hjubj)}(h=``p_av1_film_grain`` Pointer to an AV1 film grain structure. h](j)}(h``p_av1_film_grain``h]j)}(hjh]hp_av1_film_grain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK;hjubj)}(hhh]h)}(h'Pointer to an AV1 film grain structure.h]h'Pointer to an AV1 film grain structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubj)}(h#``p_rect`` Pointer to a rectangle. h](j)}(h ``p_rect``h]j)}(hj'h]hp_rect}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK=hjubeh}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !v4l2_ctrl_ptr_create (C function)c.v4l2_ctrl_ptr_createhNtauh1j hj hhhNhNubj )}(hhh](j )}(h4union v4l2_ctrl_ptr v4l2_ctrl_ptr_create (void *ptr)h]j )}(h3union v4l2_ctrl_ptr v4l2_ctrl_ptr_create(void *ptr)h](j )}(hj h]hunion}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKgubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKgubh)}(hhh]j)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j- ASTIdentifier)}j(v4l2_ctrl_ptr_createsbc.v4l2_ctrl_ptr_createasbuh1hhjhhhjhKgubj )}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKgubj )}(hv4l2_ctrl_ptr_createh]j)}(hj8h]hv4l2_ctrl_ptr_create}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhKgubhdesc_parameterlist)}(h (void *ptr)h]hdesc_parameter)}(h void *ptrh](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jlhjhubj )}(h h]h }(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjhubj)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjbubah}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhKgubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhKgubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhKghjhhubj/)}(hhh]h)}(h=Helper function to return a v4l2_ctrl_ptr from a void pointerh]h=Helper function to return a v4l2_ctrl_ptr from a void pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKchjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKgubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h0**Parameters** ``void *ptr`` The void pointerh](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKghjubj)}(hhh]j)}(h``void *ptr`` The void pointerh](j)}(h ``void *ptr``h]j)}(hjh]h void *ptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKihjubj)}(hhh]h)}(hThe void pointerh]hThe void pointer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_ops (C struct)c.v4l2_ctrl_opshNtauh1j hj hhhNhNubj )}(hhh](j )}(h v4l2_ctrl_opsh]j )}(hstruct v4l2_ctrl_opsh](j )}(hstructh]hstruct}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKjubj )}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]hhhjohKjubj )}(h v4l2_ctrl_opsh]j)}(hj[h]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj]hhhjohKjubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjYhhhjohKjubah}(h]jTah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjohKjhjVhhubj/)}(hhh]h)}(h6The control operations that the driver has to provide.h]h6The control operations that the driver has to provide.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKohjhhubah}(h]h ]h"]h$]h&]uh1j.hjVhhhjohKjubeh}(h]h ](jstructeh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX-**Definition**:: struct v4l2_ctrl_ops { int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl); int (*try_ctrl)(struct v4l2_ctrl *ctrl); int (*s_ctrl)(struct v4l2_ctrl *ctrl); }; **Members** ``g_volatile_ctrl`` Get a new value for this control. Generally only relevant for volatile (and usually read-only) controls such as a control that returns the current signal strength which changes continuously. If not set, then the currently cached value will be returned. ``try_ctrl`` Test whether the control's value is valid. Only relevant when the usual min/max/step checks are not sufficient. ``s_ctrl`` Actually set the new control value. s_ctrl is compulsory. The ctrl->handler->lock is held when these ops are called, so no one else can access controls owned by that handler.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKshjubj)}(hstruct v4l2_ctrl_ops { int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl); int (*try_ctrl)(struct v4l2_ctrl *ctrl); int (*s_ctrl)(struct v4l2_ctrl *ctrl); };h]hstruct v4l2_ctrl_ops { int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl); int (*try_ctrl)(struct v4l2_ctrl *ctrl); int (*s_ctrl)(struct v4l2_ctrl *ctrl); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKuhjubh)}(h **Members**h]j`)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhK{hjubj)}(hhh](j)}(hX``g_volatile_ctrl`` Get a new value for this control. Generally only relevant for volatile (and usually read-only) controls such as a control that returns the current signal strength which changes continuously. If not set, then the currently cached value will be returned. h](j)}(h``g_volatile_ctrl``h]j)}(hjh]hg_volatile_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKvhj ubj)}(hhh]h)}(hGet a new value for this control. Generally only relevant for volatile (and usually read-only) controls such as a control that returns the current signal strength which changes continuously. If not set, then the currently cached value will be returned.h]hGet a new value for this control. Generally only relevant for volatile (and usually read-only) controls such as a control that returns the current signal strength which changes continuously. If not set, then the currently cached value will be returned.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKrhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKvhjubj)}(h}``try_ctrl`` Test whether the control's value is valid. Only relevant when the usual min/max/step checks are not sufficient. h](j)}(h ``try_ctrl``h]j)}(hjKh]htry_ctrl}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKxhjEubj)}(hhh]h)}(hoTest whether the control's value is valid. Only relevant when the usual min/max/step checks are not sufficient.h]hqTest whether the control’s value is valid. Only relevant when the usual min/max/step checks are not sufficient.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKwhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hKxhjubj)}(h``s_ctrl`` Actually set the new control value. s_ctrl is compulsory. The ctrl->handler->lock is held when these ops are called, so no one else can access controls owned by that handler.h](j)}(h ``s_ctrl``h]j)}(hjh]hs_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKzhjubj)}(hhh]h)}(hActually set the new control value. s_ctrl is compulsory. The ctrl->handler->lock is held when these ops are called, so no one else can access controls owned by that handler.h]hActually set the new control value. s_ctrl is compulsory. The ctrl->handler->lock is held when these ops are called, so no one else can access controls owned by that handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_type_ops (C struct)c.v4l2_ctrl_type_opshNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_ctrl_type_opsh]j )}(hstruct v4l2_ctrl_type_opsh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(hv4l2_ctrl_type_opsh]j)}(hjh]hv4l2_ctrl_type_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhKhjhhubj/)}(hhh]h)}(h;The control type operations that the driver has to provide.h]h;The control type operations that the driver has to provide.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jOjjPj9jQj9jRjSjTuh1j hhhj hNhNubjV)}(hX**Definition**:: struct v4l2_ctrl_type_ops { bool (*equal)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2); void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr); void (*minimum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*maximum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*log)(const struct v4l2_ctrl *ctrl); int (*validate)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr); }; **Members** ``equal`` return true if all ctrl->elems array elements are equal. ``init`` initialize the value for array elements from from_idx to ctrl->elems. ``minimum`` set the value to the minimum value of the control. ``maximum`` set the value to the maximum value of the control. ``log`` log the value. ``validate`` validate the value for ctrl->new_elems array elements. Return 0 on success and a negative value otherwise.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjAubh:}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj=ubj)}(hXstruct v4l2_ctrl_type_ops { bool (*equal)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2); void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr); void (*minimum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*maximum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*log)(const struct v4l2_ctrl *ctrl); int (*validate)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr); };h]hXstruct v4l2_ctrl_type_ops { bool (*equal)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2); void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr); void (*minimum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*maximum)(const struct v4l2_ctrl *ctrl, u32 idx, union v4l2_ctrl_ptr ptr); void (*log)(const struct v4l2_ctrl *ctrl); int (*validate)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr); };}hj^sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj=ubh)}(h **Members**h]j`)}(hjoh]hMembers}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjmubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj=ubj)}(hhh](j)}(hC``equal`` return true if all ctrl->elems array elements are equal. h](j)}(h ``equal``h]j)}(hjh]hequal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h8return true if all ctrl->elems array elements are equal.h]h8return true if all ctrl->elems array elements are equal.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hO``init`` initialize the value for array elements from from_idx to ctrl->elems. h](j)}(h``init``h]j)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hEinitialize the value for array elements from from_idx to ctrl->elems.h]hEinitialize the value for array elements from from_idx to ctrl->elems.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h?``minimum`` set the value to the minimum value of the control. h](j)}(h ``minimum``h]j)}(hjh]hminimum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h2set the value to the minimum value of the control.h]h2set the value to the minimum value of the control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h?``maximum`` set the value to the maximum value of the control. h](j)}(h ``maximum``h]j)}(hj9h]hmaximum}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj3ubj)}(hhh]h)}(h2set the value to the maximum value of the control.h]h2set the value to the maximum value of the control.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhjubj)}(h``log`` log the value. h](j)}(h``log``h]j)}(hjrh]hlog}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjlubj)}(hhh]h)}(hlog the value.h]hlog the value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hw``validate`` validate the value for ctrl->new_elems array elements. Return 0 on success and a negative value otherwise.h](j)}(h ``validate``h]j)}(hjh]hvalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hjvalidate the value for ctrl->new_elems array elements. Return 0 on success and a negative value otherwise.h]hjvalidate the value for ctrl->new_elems array elements. Return 0 on success and a negative value otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_notify_fnc (C macro)c.v4l2_ctrl_notify_fnchNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_ctrl_notify_fnch]j )}(hv4l2_ctrl_notify_fnch]j )}(hv4l2_ctrl_notify_fnch]j)}(hjh]hv4l2_ctrl_notify_fnc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhKhjhhubj/)}(hhh]h)}(hr**Typedef**: typedef for a notify argument with a function that should be called when a control value has changed.h](j`)}(h **Typedef**h]hTypedef}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj+ubhg: typedef for a notify argument with a function that should be called when a control value has changed.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jOjjPjQjQjQjRjSjTuh1j hhhj hNhNubh)}(h **Syntax**h]j`)}(hjWh]hSyntax}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjUubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj hhubh block_quote)}(hC``void v4l2_ctrl_notify_fnc (struct v4l2_ctrl *ctrl, void *priv)`` h]h)}(hB``void v4l2_ctrl_notify_fnc (struct v4l2_ctrl *ctrl, void *priv)``h]j)}(hjuh]h>void v4l2_ctrl_notify_fnc (struct v4l2_ctrl *ctrl, void *priv)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjoubah}(h]h ]h"]h$]h&]uh1jmhjhKhj hhubjV)}(hX **Parameters** ``struct v4l2_ctrl *ctrl`` pointer to struct :c:type:`v4l2_ctrl` ``void *priv`` control private data **Description** This typedef definition is used as an argument to v4l2_ctrl_notify() and as an argument at struct :c:type:`v4l2_ctrl_handler`.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh](j)}(hA``struct v4l2_ctrl *ctrl`` pointer to struct :c:type:`v4l2_ctrl` h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h%pointer to struct :c:type:`v4l2_ctrl`h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,j/)}j2]sbj v4l2_ctrluh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``void *priv`` control private data h](j)}(h``void *priv``h]j)}(hjh]h void *priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubj)}(hhh]h)}(hcontrol private datah]hcontrol private data}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjJubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubh)}(h~This typedef definition is used as an argument to v4l2_ctrl_notify() and as an argument at struct :c:type:`v4l2_ctrl_handler`.h](hbThis typedef definition is used as an argument to v4l2_ctrl_notify() and as an argument at struct }(hjbhhhNhNubh)}(h:c:type:`v4l2_ctrl_handler`h]j)}(hjlh]hv4l2_ctrl_handler}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl (C struct) c.v4l2_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(h v4l2_ctrlh]j )}(hstruct v4l2_ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj )}(h v4l2_ctrlh]j)}(hjh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhKhjhhubj/)}(hhh]h)}(hThe control structure.h]hThe control structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX7**Definition**:: struct v4l2_ctrl { struct list_head node; struct list_head ev_subs; struct v4l2_ctrl_handler *handler; struct v4l2_ctrl **cluster; unsigned int ncontrols; unsigned int done:1; unsigned int is_new:1; unsigned int has_changed:1; unsigned int is_private:1; unsigned int is_auto:1; unsigned int is_int:1; unsigned int is_string:1; unsigned int is_ptr:1; unsigned int is_array:1; unsigned int is_dyn_array:1; unsigned int has_volatiles:1; unsigned int call_notify:1; unsigned int manual_mode_value:8; const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 minimum, maximum, default_value; u32 elems; u32 elem_size; u32 new_elems; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 nr_of_dims; union { u64 step; u64 menu_skip_mask; }; union { const char * const *qmenu; const s64 *qmenu_int; }; unsigned long flags; void *priv; void *p_array; u32 p_array_alloc_elems; s32 val; struct { s32 val; } cur; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; union v4l2_ctrl_ptr p_new; union v4l2_ctrl_ptr p_cur; }; **Members** ``node`` The list node. ``ev_subs`` The list of control event subscriptions. ``handler`` The handler that owns the control. ``cluster`` Point to start of cluster array. ``ncontrols`` Number of controls in cluster array. ``done`` Internal flag: set for each processed control. ``is_new`` Set when the user specified a new value for this control. It is also set when called from v4l2_ctrl_handler_setup(). Drivers should never set this flag. ``has_changed`` Set when the current value differs from the new value. Drivers should never use this flag. ``is_private`` If set, then this control is private to its handler and it will not be added to any other handlers. Drivers can set this flag. ``is_auto`` If set, then this control selects whether the other cluster members are in 'automatic' mode or 'manual' mode. This is used for autogain/gain type clusters. Drivers should never set this flag directly. ``is_int`` If set, then this control has a simple integer value (i.e. it uses ctrl->val). ``is_string`` If set, then this control has type ``V4L2_CTRL_TYPE_STRING``. ``is_ptr`` If set, then this control is an array and/or has type >= ``V4L2_CTRL_COMPOUND_TYPES`` and/or has type ``V4L2_CTRL_TYPE_STRING``. In other words, :c:type:`struct v4l2_ext_control ` uses field p to point to the data. ``is_array`` If set, then this control contains an N-dimensional array. ``is_dyn_array`` If set, then this control contains a dynamically sized 1-dimensional array. If this is set, then **is_array** is also set. ``has_volatiles`` If set, then one or more members of the cluster are volatile. Drivers should never touch this flag. ``call_notify`` If set, then call the handler's notify function whenever the control's value changes. ``manual_mode_value`` If the is_auto flag is set, then this is the value of the auto control that determines if that control is in manual mode. So if the value of the auto control equals this value, then the whole cluster is in manual mode. Drivers should never set this flag directly. ``ops`` The control ops. ``type_ops`` The control type ops. ``id`` The control ID. ``name`` The control name. ``type`` The control type. ``minimum`` The control's minimum value. ``maximum`` The control's maximum value. ``default_value`` The control's default value. ``elems`` The number of elements in the N-dimensional array. ``elem_size`` The size in bytes of the control. ``new_elems`` The number of elements in p_new. This is the same as **elems**, except for dynamic arrays. In that case it is in the range of 1 to **p_array_alloc_elems**. ``dims`` The size of each dimension. ``nr_of_dims`` The number of dimensions in **dims**. ``{unnamed_union}`` anonymous ``step`` The control's step value for non-menu controls. ``menu_skip_mask`` The control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 32 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a u64 or a bit array. ``{unnamed_union}`` anonymous ``qmenu`` A const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. Used only if the **type** is ``V4L2_CTRL_TYPE_MENU``. ``qmenu_int`` A 64-bit integer array for with integer menu items. The size of array must be equal to the menu size, e. g.: :math:`ceil(\frac{maximum - minimum}{step}) + 1`. Used only if the **type** is ``V4L2_CTRL_TYPE_INTEGER_MENU``. ``flags`` The control's flags. ``priv`` The control's private pointer. For use by the driver. It is untouched by the control framework. Note that this pointer is not freed when the control is deleted. Should this be needed then a new internal bitfield can be added to tell the framework to free this pointer. ``p_array`` Pointer to the allocated array. Only valid if **is_array** is true. ``p_array_alloc_elems`` The number of elements in the allocated array for both the cur and new values. So **p_array** is actually sized for 2 * **p_array_alloc_elems** * **elem_size**. Only valid if **is_array** is true. ``val`` The control's new s32 value. ``cur`` Structure to store the current value. ``cur.val`` The control's current value, if the **type** is represented via a u32 integer (see :c:type:`enum v4l2_ctrl_type `). ``p_def`` The control's default value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). ``p_min`` The control's minimum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). ``p_max`` The control's maximum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). ``p_new`` The control's new value represented via a union which provides a standard way of accessing control types through a pointer. ``p_cur`` The control's current value represented via a union which provides a standard way of accessing control types through a pointer.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hX!struct v4l2_ctrl { struct list_head node; struct list_head ev_subs; struct v4l2_ctrl_handler *handler; struct v4l2_ctrl **cluster; unsigned int ncontrols; unsigned int done:1; unsigned int is_new:1; unsigned int has_changed:1; unsigned int is_private:1; unsigned int is_auto:1; unsigned int is_int:1; unsigned int is_string:1; unsigned int is_ptr:1; unsigned int is_array:1; unsigned int is_dyn_array:1; unsigned int has_volatiles:1; unsigned int call_notify:1; unsigned int manual_mode_value:8; const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 minimum, maximum, default_value; u32 elems; u32 elem_size; u32 new_elems; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 nr_of_dims; union { u64 step; u64 menu_skip_mask; }; union { const char * const *qmenu; const s64 *qmenu_int; }; unsigned long flags; void *priv; void *p_array; u32 p_array_alloc_elems; s32 val; struct { s32 val; } cur; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; union v4l2_ctrl_ptr p_new; union v4l2_ctrl_ptr p_cur; };h]hX!struct v4l2_ctrl { struct list_head node; struct list_head ev_subs; struct v4l2_ctrl_handler *handler; struct v4l2_ctrl **cluster; unsigned int ncontrols; unsigned int done:1; unsigned int is_new:1; unsigned int has_changed:1; unsigned int is_private:1; unsigned int is_auto:1; unsigned int is_int:1; unsigned int is_string:1; unsigned int is_ptr:1; unsigned int is_array:1; unsigned int is_dyn_array:1; unsigned int has_volatiles:1; unsigned int call_notify:1; unsigned int manual_mode_value:8; const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 minimum, maximum, default_value; u32 elems; u32 elem_size; u32 new_elems; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 nr_of_dims; union { u64 step; u64 menu_skip_mask; }; union { const char * const *qmenu; const s64 *qmenu_int; }; unsigned long flags; void *priv; void *p_array; u32 p_array_alloc_elems; s32 val; struct { s32 val; } cur; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; union v4l2_ctrl_ptr p_new; union v4l2_ctrl_ptr p_cur; };}hj3sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubh)}(h **Members**h]j`)}(hjDh]hMembers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjBubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh](j)}(h``node`` The list node. h](j)}(h``node``h]j)}(hjch]hnode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj]ubj)}(hhh]h)}(hThe list node.h]hThe list node.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjZubj)}(h5``ev_subs`` The list of control event subscriptions. h](j)}(h ``ev_subs``h]j)}(hjh]hev_subs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h(The list of control event subscriptions.h]h(The list of control event subscriptions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h/``handler`` The handler that owns the control. h](j)}(h ``handler``h]j)}(hjh]hhandler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h"The handler that owns the control.h]h"The handler that owns the control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h-``cluster`` Point to start of cluster array. h](j)}(h ``cluster``h]j)}(hjh]hcluster}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h Point to start of cluster array.h]h Point to start of cluster array.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjZubj)}(h3``ncontrols`` Number of controls in cluster array. h](j)}(h ``ncontrols``h]j)}(hjGh]h ncontrols}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjAubj)}(hhh]h)}(h$Number of controls in cluster array.h]h$Number of controls in cluster array.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjZubj)}(h8``done`` Internal flag: set for each processed control. h](j)}(h``done``h]j)}(hjh]hdone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjzubj)}(hhh]h)}(h.Internal flag: set for each processed control.h]h.Internal flag: set for each processed control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h``is_new`` Set when the user specified a new value for this control. It is also set when called from v4l2_ctrl_handler_setup(). Drivers should never set this flag. h](j)}(h ``is_new``h]j)}(hjh]his_new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hSet when the user specified a new value for this control. It is also set when called from v4l2_ctrl_handler_setup(). Drivers should never set this flag.h]hSet when the user specified a new value for this control. It is also set when called from v4l2_ctrl_handler_setup(). Drivers should never set this flag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hk``has_changed`` Set when the current value differs from the new value. Drivers should never use this flag. h](j)}(h``has_changed``h]j)}(hjh]h has_changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hZSet when the current value differs from the new value. Drivers should never use this flag.h]hZSet when the current value differs from the new value. Drivers should never use this flag.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h``is_private`` If set, then this control is private to its handler and it will not be added to any other handlers. Drivers can set this flag. h](j)}(h``is_private``h]j)}(hj-h]h is_private}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj'ubj)}(hhh]h)}(h~If set, then this control is private to its handler and it will not be added to any other handlers. Drivers can set this flag.h]h~If set, then this control is private to its handler and it will not be added to any other handlers. Drivers can set this flag.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhjZubj)}(h``is_auto`` If set, then this control selects whether the other cluster members are in 'automatic' mode or 'manual' mode. This is used for autogain/gain type clusters. Drivers should never set this flag directly. h](j)}(h ``is_auto``h]j)}(hjgh]his_auto}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjaubj)}(hhh]h)}(hIf set, then this control selects whether the other cluster members are in 'automatic' mode or 'manual' mode. This is used for autogain/gain type clusters. Drivers should never set this flag directly.h]hIf set, then this control selects whether the other cluster members are in ‘automatic’ mode or ‘manual’ mode. This is used for autogain/gain type clusters. Drivers should never set this flag directly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKhjZubj)}(hZ``is_int`` If set, then this control has a simple integer value (i.e. it uses ctrl->val). h](j)}(h ``is_int``h]j)}(hjh]his_int}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hNIf set, then this control has a simple integer value (i.e. it uses ctrl->val).h]hNIf set, then this control has a simple integer value (i.e. it uses ctrl->val).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hL``is_string`` If set, then this control has type ``V4L2_CTRL_TYPE_STRING``. h](j)}(h ``is_string``h]j)}(hjh]h is_string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h=If set, then this control has type ``V4L2_CTRL_TYPE_STRING``.h](h#If set, then this control has type }(hjhhhNhNubj)}(h``V4L2_CTRL_TYPE_STRING``h]hV4L2_CTRL_TYPE_STRING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h``is_ptr`` If set, then this control is an array and/or has type >= ``V4L2_CTRL_COMPOUND_TYPES`` and/or has type ``V4L2_CTRL_TYPE_STRING``. In other words, :c:type:`struct v4l2_ext_control ` uses field p to point to the data. h](j)}(h ``is_ptr``h]j)}(hj& h]his_ptr}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubj)}(hhh]h)}(hIf set, then this control is an array and/or has type >= ``V4L2_CTRL_COMPOUND_TYPES`` and/or has type ``V4L2_CTRL_TYPE_STRING``. In other words, :c:type:`struct v4l2_ext_control ` uses field p to point to the data.h](h9If set, then this control is an array and/or has type >= }(hj? hhhNhNubj)}(h``V4L2_CTRL_COMPOUND_TYPES``h]hV4L2_CTRL_COMPOUND_TYPES}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubh and/or has type }(hj? hhhNhNubj)}(h``V4L2_CTRL_TYPE_STRING``h]hV4L2_CTRL_TYPE_STRING}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubh. In other words, }(hj? hhhNhNubh)}(h4:c:type:`struct v4l2_ext_control `h]j)}(hjm h]hstruct v4l2_ext_control}(hjo hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjk ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ext_controluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj? ubh# uses field p to point to the data.}(hj? hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj< ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj; hKhjZubj)}(hH``is_array`` If set, then this control contains an N-dimensional array. h](j)}(h ``is_array``h]j)}(hj h]his_array}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubj)}(hhh]h)}(h:If set, then this control contains an N-dimensional array.h]h:If set, then this control contains an N-dimensional array.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjZubj)}(h``is_dyn_array`` If set, then this control contains a dynamically sized 1-dimensional array. If this is set, then **is_array** is also set. h](j)}(h``is_dyn_array``h]j)}(hj h]h is_dyn_array}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubj)}(hhh]h)}(hzIf set, then this control contains a dynamically sized 1-dimensional array. If this is set, then **is_array** is also set.h](haIf set, then this control contains a dynamically sized 1-dimensional array. If this is set, then }(hj hhhNhNubj`)}(h **is_array**h]his_array}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj ubh is also set.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjZubj)}(hv``has_volatiles`` If set, then one or more members of the cluster are volatile. Drivers should never touch this flag. h](j)}(h``has_volatiles``h]j)}(hj,!h]h has_volatiles}(hj.!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*!ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj&!ubj)}(hhh]h)}(hcIf set, then one or more members of the cluster are volatile. Drivers should never touch this flag.h]hcIf set, then one or more members of the cluster are volatile. Drivers should never touch this flag.}(hjE!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjB!ubah}(h]h ]h"]h$]h&]uh1jhj&!ubeh}(h]h ]h"]h$]h&]uh1jhjA!hKhjZubj)}(hf``call_notify`` If set, then call the handler's notify function whenever the control's value changes. h](j)}(h``call_notify``h]j)}(hjf!h]h call_notify}(hjh!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd!ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj`!ubj)}(hhh]h)}(hUIf set, then call the handler's notify function whenever the control's value changes.h]hYIf set, then call the handler’s notify function whenever the control’s value changes.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj|!ubah}(h]h ]h"]h$]h&]uh1jhj`!ubeh}(h]h ]h"]h$]h&]uh1jhj{!hKhjZubj)}(hX``manual_mode_value`` If the is_auto flag is set, then this is the value of the auto control that determines if that control is in manual mode. So if the value of the auto control equals this value, then the whole cluster is in manual mode. Drivers should never set this flag directly. h](j)}(h``manual_mode_value``h]j)}(hj!h]hmanual_mode_value}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj!ubj)}(hhh]h)}(hXIf the is_auto flag is set, then this is the value of the auto control that determines if that control is in manual mode. So if the value of the auto control equals this value, then the whole cluster is in manual mode. Drivers should never set this flag directly.h]hXIf the is_auto flag is set, then this is the value of the auto control that determines if that control is in manual mode. So if the value of the auto control equals this value, then the whole cluster is in manual mode. Drivers should never set this flag directly.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjZubj)}(h``ops`` The control ops. h](j)}(h``ops``h]j)}(hj!h]hops}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj!ubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjZubj)}(h#``type_ops`` The control type ops. h](j)}(h ``type_ops``h]j)}(hj"h]htype_ops}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj "ubj)}(hhh]h)}(hThe control type ops.h]hThe control type ops.}(hj,"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj("hKhj)"ubah}(h]h ]h"]h$]h&]uh1jhj "ubeh}(h]h ]h"]h$]h&]uh1jhj("hKhjZubj)}(h``id`` The control ID. h](j)}(h``id``h]j)}(hjL"h]hid}(hjN"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjF"ubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja"hKhjb"ubah}(h]h ]h"]h$]h&]uh1jhjF"ubeh}(h]h ]h"]h$]h&]uh1jhja"hKhjZubj)}(h``name`` The control name. h](j)}(h``name``h]j)}(hj"h]hname}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj"ubj)}(hhh]h)}(hThe control name.h]hThe control name.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjZubj)}(h``type`` The control type. h](j)}(h``type``h]j)}(hj"h]htype}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj"ubj)}(hhh]h)}(hThe control type.h]hThe control type.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjZubj)}(h)``minimum`` The control's minimum value. h](j)}(h ``minimum``h]j)}(hj"h]hminimum}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj"ubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj #hKhj #ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj #hKhjZubj)}(h)``maximum`` The control's maximum value. h](j)}(h ``maximum``h]j)}(hj0#h]hmaximum}(hj2#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj*#ubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjI#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE#hKhjF#ubah}(h]h ]h"]h$]h&]uh1jhj*#ubeh}(h]h ]h"]h$]h&]uh1jhjE#hKhjZubj)}(h/``default_value`` The control's default value. h](j)}(h``default_value``h]j)}(hji#h]h default_value}(hjk#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjc#ubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjc#ubeh}(h]h ]h"]h$]h&]uh1jhj~#hKhjZubj)}(h=``elems`` The number of elements in the N-dimensional array. h](j)}(h ``elems``h]j)}(hj#h]helems}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj#ubj)}(hhh]h)}(h2The number of elements in the N-dimensional array.h]h2The number of elements in the N-dimensional array.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjZubj)}(h0``elem_size`` The size in bytes of the control. h](j)}(h ``elem_size``h]j)}(hj#h]h elem_size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj#ubj)}(hhh]h)}(h!The size in bytes of the control.h]h!The size in bytes of the control.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjZubj)}(h``new_elems`` The number of elements in p_new. This is the same as **elems**, except for dynamic arrays. In that case it is in the range of 1 to **p_array_alloc_elems**. h](j)}(h ``new_elems``h]j)}(hj$h]h new_elems}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj$ubj)}(hhh]h)}(hThe number of elements in p_new. This is the same as **elems**, except for dynamic arrays. In that case it is in the range of 1 to **p_array_alloc_elems**.h](h5The number of elements in p_new. This is the same as }(hj-$hhhNhNubj`)}(h **elems**h]helems}(hj5$hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj-$ubhE, except for dynamic arrays. In that case it is in the range of 1 to }(hj-$hhhNhNubj`)}(h**p_array_alloc_elems**h]hp_array_alloc_elems}(hjG$hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj-$ubh.}(hj-$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj*$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj)$hKhjZubj)}(h%``dims`` The size of each dimension. h](j)}(h``dims``h]j)}(hjr$h]hdims}(hjt$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjl$ubj)}(hhh]h)}(hThe size of each dimension.h]hThe size of each dimension.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjl$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjZubj)}(h5``nr_of_dims`` The number of dimensions in **dims**. h](j)}(h``nr_of_dims``h]j)}(hj$h]h nr_of_dims}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj$ubj)}(hhh]h)}(h%The number of dimensions in **dims**.h](hThe number of dimensions in }(hj$hhhNhNubj`)}(h**dims**h]hdims}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjZubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj$h]h{unnamed_union}}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj$ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj %hKhj %ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj %hKhjZubj)}(h9``step`` The control's step value for non-menu controls. h](j)}(h``step``h]j)}(hj/%h]hstep}(hj1%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj)%ubj)}(hhh]h)}(h/The control's step value for non-menu controls.h]h1The control’s step value for non-menu controls.}(hjH%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD%hKhjE%ubah}(h]h ]h"]h$]h&]uh1jhj)%ubeh}(h]h ]h"]h$]h&]uh1jhjD%hKhjZubj)}(hXz``menu_skip_mask`` The control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 32 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a u64 or a bit array. h](j)}(h``menu_skip_mask``h]j)}(hjh%h]hmenu_skip_mask}(hjj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjb%ubj)}(hhh]h)}(hXfThe control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 32 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a u64 or a bit array.h]hXhThe control’s skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 32 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a u64 or a bit array.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj~%ubah}(h]h ]h"]h$]h&]uh1jhjb%ubeh}(h]h ]h"]h$]h&]uh1jhj}%hKhjZubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj%h]h{unnamed_union}}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj%ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjZubj)}(hX ``qmenu`` A const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. Used only if the **type** is ``V4L2_CTRL_TYPE_MENU``. h](j)}(h ``qmenu``h]j)}(hj%h]hqmenu}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj%ubj)}(hhh]h)}(hA const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. Used only if the **type** is ``V4L2_CTRL_TYPE_MENU``.h](hA const char * array for all menu items. Array entries that are empty strings (“”) correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. Used only if the }(hj%hhhNhNubj`)}(h**type**h]htype}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj%ubh is }(hj%hhhNhNubj)}(h``V4L2_CTRL_TYPE_MENU``h]hV4L2_CTRL_TYPE_MENU}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjZubj)}(h``qmenu_int`` A 64-bit integer array for with integer menu items. The size of array must be equal to the menu size, e. g.: :math:`ceil(\frac{maximum - minimum}{step}) + 1`. Used only if the **type** is ``V4L2_CTRL_TYPE_INTEGER_MENU``. h](j)}(h ``qmenu_int``h]j)}(hj9&h]h qmenu_int}(hj;&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7&ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj3&ubj)}(hhh]h)}(hA 64-bit integer array for with integer menu items. The size of array must be equal to the menu size, e. g.: :math:`ceil(\frac{maximum - minimum}{step}) + 1`. Used only if the **type** is ``V4L2_CTRL_TYPE_INTEGER_MENU``.h](hmA 64-bit integer array for with integer menu items. The size of array must be equal to the menu size, e. g.: }(hjR&hhhNhNubhmath)}(h0:math:`ceil(\frac{maximum - minimum}{step}) + 1`h]h(ceil(\frac{maximum - minimum}{step}) + 1}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1jZ&hjR&ubh. Used only if the }(hjR&hhhNhNubj`)}(h**type**h]htype}(hjn&hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjR&ubh is }(hjR&hhhNhNubj)}(h``V4L2_CTRL_TYPE_INTEGER_MENU``h]hV4L2_CTRL_TYPE_INTEGER_MENU}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR&ubh.}(hjR&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjO&ubah}(h]h ]h"]h$]h&]uh1jhj3&ubeh}(h]h ]h"]h$]h&]uh1jhjN&hKhjZubj)}(h``flags`` The control's flags. h](j)}(h ``flags``h]j)}(hj&h]hflags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj&ubj)}(hhh]h)}(hThe control's flags.h]hThe control’s flags.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjZubj)}(hX``priv`` The control's private pointer. For use by the driver. It is untouched by the control framework. Note that this pointer is not freed when the control is deleted. Should this be needed then a new internal bitfield can be added to tell the framework to free this pointer. h](j)}(h``priv``h]j)}(hj&h]hpriv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj&ubj)}(hhh]h)}(hX The control's private pointer. For use by the driver. It is untouched by the control framework. Note that this pointer is not freed when the control is deleted. Should this be needed then a new internal bitfield can be added to tell the framework to free this pointer.h]hXThe control’s private pointer. For use by the driver. It is untouched by the control framework. Note that this pointer is not freed when the control is deleted. Should this be needed then a new internal bitfield can be added to tell the framework to free this pointer.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjZubj)}(hP``p_array`` Pointer to the allocated array. Only valid if **is_array** is true. h](j)}(h ``p_array``h]j)}(hj'h]hp_array}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj'ubj)}(hhh]h)}(hCPointer to the allocated array. Only valid if **is_array** is true.h](h.Pointer to the allocated array. Only valid if }(hj7'hhhNhNubj`)}(h **is_array**h]his_array}(hj?'hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj7'ubh is true.}(hj7'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3'hKhj4'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj3'hKhjZubj)}(h``p_array_alloc_elems`` The number of elements in the allocated array for both the cur and new values. So **p_array** is actually sized for 2 * **p_array_alloc_elems** * **elem_size**. Only valid if **is_array** is true. h](j)}(h``p_array_alloc_elems``h]j)}(hji'h]hp_array_alloc_elems}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg'ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjc'ubj)}(hhh]h)}(hThe number of elements in the allocated array for both the cur and new values. So **p_array** is actually sized for 2 * **p_array_alloc_elems** * **elem_size**. Only valid if **is_array** is true.h](hRThe number of elements in the allocated array for both the cur and new values. So }(hj'hhhNhNubj`)}(h **p_array**h]hp_array}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj'ubh is actually sized for 2 * }(hj'hhhNhNubj`)}(h**p_array_alloc_elems**h]hp_array_alloc_elems}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj'ubh * }(hj'hhhNhNubj`)}(h **elem_size**h]h elem_size}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj'ubh. Only valid if }(hj'hhhNhNubj`)}(h **is_array**h]his_array}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj'ubh is true.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj'ubah}(h]h ]h"]h$]h&]uh1jhjc'ubeh}(h]h ]h"]h$]h&]uh1jhj~'hKhjZubj)}(h%``val`` The control's new s32 value. h](j)}(h``val``h]j)}(hj'h]hval}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj'ubj)}(hhh]h)}(hThe control's new s32 value.h]hThe control’s new s32 value.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhjZubj)}(h.``cur`` Structure to store the current value. h](j)}(h``cur``h]j)}(hj$(h]hcur}(hj&(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"(ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj(ubj)}(hhh]h)}(h%Structure to store the current value.h]h%Structure to store the current value.}(hj=(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9(hKhj:(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj9(hKhjZubj)}(h``cur.val`` The control's current value, if the **type** is represented via a u32 integer (see :c:type:`enum v4l2_ctrl_type `). h](j)}(h ``cur.val``h]j)}(hj](h]hcur.val}(hj_(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[(ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjW(ubj)}(hhh]h)}(hThe control's current value, if the **type** is represented via a u32 integer (see :c:type:`enum v4l2_ctrl_type `).h](h&The control’s current value, if the }(hjv(hhhNhNubj`)}(h**type**h]htype}(hj~(hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjv(ubh' is represented via a u32 integer (see }(hjv(hhhNhNubh)}(h.:c:type:`enum v4l2_ctrl_type `h]j)}(hj(h]henum v4l2_ctrl_type}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_typeuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjv(ubh).}(hjv(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hKhjs(ubah}(h]h ]h"]h$]h&]uh1jhjW(ubeh}(h]h ]h"]h$]h&]uh1jhjr(hKhjZubj)}(h``p_def`` The control's default value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). h](j)}(h ``p_def``h]j)}(hj(h]hp_def}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj(ubj)}(hhh]h)}(hThe control's default value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).h]hThe control’s default value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjZubj)}(h``p_min`` The control's minimum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). h](j)}(h ``p_min``h]j)}(hj)h]hp_min}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj)ubj)}(hhh]h)}(hThe control's minimum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).h]hThe control’s minimum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjZubj)}(h``p_max`` The control's maximum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only). h](j)}(h ``p_max``h]j)}(hj@)h]hp_max}(hjB)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:)ubj)}(hhh]h)}(hThe control's maximum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).h]hThe control’s maximum value represented via a union which provides a standard way of accessing control types through a pointer (for compound controls only).}(hjY)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjV)ubah}(h]h ]h"]h$]h&]uh1jhj:)ubeh}(h]h ]h"]h$]h&]uh1jhjU)hMhjZubj)}(h``p_new`` The control's new value represented via a union which provides a standard way of accessing control types through a pointer. h](j)}(h ``p_new``h]j)}(hjz)h]hp_new}(hj|)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjt)ubj)}(hhh]h)}(h{The control's new value represented via a union which provides a standard way of accessing control types through a pointer.h]h}The control’s new value represented via a union which provides a standard way of accessing control types through a pointer.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hj)ubah}(h]h ]h"]h$]h&]uh1jhjt)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM hjZubj)}(h``p_cur`` The control's current value represented via a union which provides a standard way of accessing control types through a pointer.h](j)}(h ``p_cur``h]j)}(hj)h]hp_cur}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj)ubj)}(hhh]h)}(hThe control's current value represented via a union which provides a standard way of accessing control types through a pointer.h]hThe control’s current value represented via a union which provides a standard way of accessing control types through a pointer.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjZubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_ref (C struct)c.v4l2_ctrl_refhNtauh1j hj hhhNhNubj )}(hhh](j )}(h v4l2_ctrl_refh]j )}(hstruct v4l2_ctrl_refh](j )}(hjch]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj *hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj *hhhj*hMubj )}(h v4l2_ctrl_refh]j)}(hj*h]h v4l2_ctrl_ref}(hj.*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj**ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj *hhhj*hMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj*hhhj*hMubah}(h]j*ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj*hMhj*hhubj/)}(hhh]h)}(hThe control reference.h]hThe control reference.}(hjP*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMHhjM*hhubah}(h]h ]h"]h$]h&]uh1j.hj*hhhj*hMubeh}(h]h ](jstructeh"]h$]h&]jOjjPjh*jQjh*jRjSjTuh1j hhhj hNhNubjV)}(hXx**Definition**:: struct v4l2_ctrl_ref { struct list_head node; struct v4l2_ctrl_ref *next; struct v4l2_ctrl *ctrl; struct v4l2_ctrl_helper *helper; bool from_other_dev; bool req_done; bool p_req_valid; bool p_req_array_enomem; u32 p_req_array_alloc_elems; u32 p_req_elems; union v4l2_ctrl_ptr p_req; }; **Members** ``node`` List node for the sorted list. ``next`` Single-link list node for the hash. ``ctrl`` The actual control information. ``helper`` Pointer to helper struct. Used internally in ``prepare_ext_ctrls`` function at ``v4l2-ctrl.c``. ``from_other_dev`` If true, then **ctrl** was defined in another device than the :c:type:`struct v4l2_ctrl_handler `. ``req_done`` Internal flag: if the control handler containing this control reference is bound to a media request, then this is set when the control has been applied. This prevents applying controls from a cluster with multiple controls twice (when the first control of a cluster is applied, they all are). ``p_req_valid`` If set, then p_req contains the control value for the request. ``p_req_array_enomem`` If set, then p_req is invalid since allocating space for an array failed. Attempting to read this value shall result in ENOMEM. Only valid if ctrl->is_array is true. ``p_req_array_alloc_elems`` The number of elements allocated for the array. Only valid if **p_req_valid** and ctrl->is_array are true. ``p_req_elems`` The number of elements in **p_req**. This is the same as ctrl->elems, except for dynamic arrays. In that case it is in the range of 1 to **p_req_array_alloc_elems**. Only valid if **p_req_valid** is true. ``p_req`` If the control handler containing this control reference is bound to a media request, then this points to the value of the control that must be applied when the request is executed, or to the value of the control at the time that the request was completed. If **p_req_valid** is false, then this control was never set for this request and the control will not be updated when this request is applied.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hjt*hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjp*ubh:}(hjp*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMLhjl*ubj)}(hXIstruct v4l2_ctrl_ref { struct list_head node; struct v4l2_ctrl_ref *next; struct v4l2_ctrl *ctrl; struct v4l2_ctrl_helper *helper; bool from_other_dev; bool req_done; bool p_req_valid; bool p_req_array_enomem; u32 p_req_array_alloc_elems; u32 p_req_elems; union v4l2_ctrl_ptr p_req; };h]hXIstruct v4l2_ctrl_ref { struct list_head node; struct v4l2_ctrl_ref *next; struct v4l2_ctrl *ctrl; struct v4l2_ctrl_helper *helper; bool from_other_dev; bool req_done; bool p_req_valid; bool p_req_array_enomem; u32 p_req_array_alloc_elems; u32 p_req_elems; union v4l2_ctrl_ptr p_req; };}hj*sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMNhjl*ubh)}(h **Members**h]j`)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj*ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM\hjl*ubj)}(hhh](j)}(h(``node`` List node for the sorted list. h](j)}(h``node``h]j)}(hj*h]hnode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMKhj*ubj)}(hhh]h)}(hList node for the sorted list.h]hList node for the sorted list.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMKhj*ubj)}(h-``next`` Single-link list node for the hash. h](j)}(h``next``h]j)}(hj*h]hnext}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMLhj*ubj)}(hhh]h)}(h#Single-link list node for the hash.h]h#Single-link list node for the hash.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj +hMLhj +ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj +hMLhj*ubj)}(h)``ctrl`` The actual control information. h](j)}(h``ctrl``h]j)}(hj/+h]hctrl}(hj1+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-+ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMMhj)+ubj)}(hhh]h)}(hThe actual control information.h]hThe actual control information.}(hjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD+hMMhjE+ubah}(h]h ]h"]h$]h&]uh1jhj)+ubeh}(h]h ]h"]h$]h&]uh1jhjD+hMMhj*ubj)}(hk``helper`` Pointer to helper struct. Used internally in ``prepare_ext_ctrls`` function at ``v4l2-ctrl.c``. h](j)}(h ``helper``h]j)}(hjh+h]hhelper}(hjj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf+ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMOhjb+ubj)}(hhh]h)}(h_Pointer to helper struct. Used internally in ``prepare_ext_ctrls`` function at ``v4l2-ctrl.c``.h](h-Pointer to helper struct. Used internally in }(hj+hhhNhNubj)}(h``prepare_ext_ctrls``h]hprepare_ext_ctrls}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh function at }(hj+hhhNhNubj)}(h``v4l2-ctrl.c``h]h v4l2-ctrl.c}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMNhj~+ubah}(h]h ]h"]h$]h&]uh1jhjb+ubeh}(h]h ]h"]h$]h&]uh1jhj}+hMOhj*ubj)}(h``from_other_dev`` If true, then **ctrl** was defined in another device than the :c:type:`struct v4l2_ctrl_handler `. h](j)}(h``from_other_dev``h]j)}(hj+h]hfrom_other_dev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhj+ubj)}(hhh]h)}(huIf true, then **ctrl** was defined in another device than the :c:type:`struct v4l2_ctrl_handler `.h](hIf true, then }(hj+hhhNhNubj`)}(h**ctrl**h]hctrl}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj+ubh( was defined in another device than the }(hj+hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hj+h]hstruct v4l2_ctrl_handler}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMPhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMPhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMQhj*ubj)}(hX2``req_done`` Internal flag: if the control handler containing this control reference is bound to a media request, then this is set when the control has been applied. This prevents applying controls from a cluster with multiple controls twice (when the first control of a cluster is applied, they all are). h](j)}(h ``req_done``h]j)}(hj5,h]hreq_done}(hj7,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3,ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMVhj/,ubj)}(hhh]h)}(hX$Internal flag: if the control handler containing this control reference is bound to a media request, then this is set when the control has been applied. This prevents applying controls from a cluster with multiple controls twice (when the first control of a cluster is applied, they all are).h]hX$Internal flag: if the control handler containing this control reference is bound to a media request, then this is set when the control has been applied. This prevents applying controls from a cluster with multiple controls twice (when the first control of a cluster is applied, they all are).}(hjN,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMRhjK,ubah}(h]h ]h"]h$]h&]uh1jhj/,ubeh}(h]h ]h"]h$]h&]uh1jhjJ,hMVhj*ubj)}(hO``p_req_valid`` If set, then p_req contains the control value for the request. h](j)}(h``p_req_valid``h]j)}(hjo,h]h p_req_valid}(hjq,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm,ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMWhji,ubj)}(hhh]h)}(h>If set, then p_req contains the control value for the request.h]h>If set, then p_req contains the control value for the request.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMWhj,ubah}(h]h ]h"]h$]h&]uh1jhji,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMWhj*ubj)}(h``p_req_array_enomem`` If set, then p_req is invalid since allocating space for an array failed. Attempting to read this value shall result in ENOMEM. Only valid if ctrl->is_array is true. h](j)}(h``p_req_array_enomem``h]j)}(hj,h]hp_req_array_enomem}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMZhj,ubj)}(hhh]h)}(hIf set, then p_req is invalid since allocating space for an array failed. Attempting to read this value shall result in ENOMEM. Only valid if ctrl->is_array is true.h]hIf set, then p_req is invalid since allocating space for an array failed. Attempting to read this value shall result in ENOMEM. Only valid if ctrl->is_array is true.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMZhj*ubj)}(h``p_req_array_alloc_elems`` The number of elements allocated for the array. Only valid if **p_req_valid** and ctrl->is_array are true. h](j)}(h``p_req_array_alloc_elems``h]j)}(hj,h]hp_req_array_alloc_elems}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM]hj,ubj)}(hhh]h)}(hjThe number of elements allocated for the array. Only valid if **p_req_valid** and ctrl->is_array are true.h](h>The number of elements allocated for the array. Only valid if }(hj,hhhNhNubj`)}(h**p_req_valid**h]h p_req_valid}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj,ubh and ctrl->is_array are true.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM[hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM]hj*ubj)}(h``p_req_elems`` The number of elements in **p_req**. This is the same as ctrl->elems, except for dynamic arrays. In that case it is in the range of 1 to **p_req_array_alloc_elems**. Only valid if **p_req_valid** is true. h](j)}(h``p_req_elems``h]j)}(hj.-h]h p_req_elems}(hj0-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,-ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMahj(-ubj)}(hhh]h)}(hThe number of elements in **p_req**. This is the same as ctrl->elems, except for dynamic arrays. In that case it is in the range of 1 to **p_req_array_alloc_elems**. Only valid if **p_req_valid** is true.h](hThe number of elements in }(hjG-hhhNhNubj`)}(h **p_req**h]hp_req}(hjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjG-ubhf. This is the same as ctrl->elems, except for dynamic arrays. In that case it is in the range of 1 to }(hjG-hhhNhNubj`)}(h**p_req_array_alloc_elems**h]hp_req_array_alloc_elems}(hja-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjG-ubh. Only valid if }(hjG-hhhNhNubj`)}(h**p_req_valid**h]h p_req_valid}(hjs-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjG-ubh is true.}(hjG-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM^hjD-ubah}(h]h ]h"]h$]h&]uh1jhj(-ubeh}(h]h ]h"]h$]h&]uh1jhjC-hMahj*ubj)}(hX``p_req`` If the control handler containing this control reference is bound to a media request, then this points to the value of the control that must be applied when the request is executed, or to the value of the control at the time that the request was completed. If **p_req_valid** is false, then this control was never set for this request and the control will not be updated when this request is applied.h](j)}(h ``p_req``h]j)}(hj-h]hp_req}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMghj-ubj)}(hhh]h)}(hXIf the control handler containing this control reference is bound to a media request, then this points to the value of the control that must be applied when the request is executed, or to the value of the control at the time that the request was completed. If **p_req_valid** is false, then this control was never set for this request and the control will not be updated when this request is applied.h](hXIf the control handler containing this control reference is bound to a media request, then this points to the value of the control that must be applied when the request is executed, or to the value of the control at the time that the request was completed. If }(hj-hhhNhNubj`)}(h**p_req_valid**h]h p_req_valid}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj-ubh} is false, then this control was never set for this request and the control will not be updated when this request is applied.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMbhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMghj*ubeh}(h]h ]h"]h$]h&]uh1jhjl*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubh)}(h**Description**h]j`)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj-ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMkhj hhubh)}(hEach control handler has a list of these refs. The list_head is used to keep a sorted-by-control-ID list of all controls, while the next pointer is used to link the control in the hash's bucket.h]hEach control handler has a list of these refs. The list_head is used to keep a sorted-by-control-ID list of all controls, while the next pointer is used to link the control in the hash’s bucket.}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMihj hhubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_handler (C struct)c.v4l2_ctrl_handlerhNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_ctrl_handlerh]j )}(hstruct v4l2_ctrl_handlerh](j )}(hjch]hstruct}(hj1.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-.hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMpubj )}(h h]h }(hj?.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-.hhhj>.hMpubj )}(hv4l2_ctrl_handlerh]j)}(hj+.h]hv4l2_ctrl_handler}(hjQ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM.ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj-.hhhj>.hMpubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj).hhhj>.hMpubah}(h]j$.ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj>.hMphj&.hhubj/)}(hhh]h)}(hThe control handler keeps track of all the controls: both the controls owned by the handler and those inherited from other handlers.h]hThe control handler keeps track of all the controls: both the controls owned by the handler and those inherited from other handlers.}(hjs.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM|hjp.hhubah}(h]h ]h"]h$]h&]uh1j.hj&.hhhj>.hMpubeh}(h]h ](jstructeh"]h$]h&]jOjjPj.jQj.jRjSjTuh1j hhhj hNhNubjV)}(hX**Definition**:: struct v4l2_ctrl_handler { struct mutex _lock; struct mutex *lock; struct list_head ctrls; struct list_head ctrl_refs; struct v4l2_ctrl_ref *cached; struct v4l2_ctrl_ref **buckets; v4l2_ctrl_notify_fnc notify; void *notify_priv; u16 nr_of_buckets; int error; bool request_is_queued; struct list_head requests; struct list_head requests_queued; struct media_request_object req_obj; }; **Members** ``_lock`` Default for "lock". ``lock`` Lock to control access to this handler and its controls. May be replaced by the user right after init. ``ctrls`` The list of controls owned by this handler. ``ctrl_refs`` The list of control references. ``cached`` The last found control reference. It is common that the same control is needed multiple times, so this is a simple optimization. ``buckets`` Buckets for the hashing. Allows for quick control lookup. ``notify`` A notify callback that is called whenever the control changes value. Note that the handler's lock is held when the notify function is called! ``notify_priv`` Passed as argument to the v4l2_ctrl notify callback. ``nr_of_buckets`` Total number of buckets in the array. ``error`` The error code of the first failed control addition. ``request_is_queued`` True if the request was queued. ``requests`` List to keep track of open control handler request objects. For the parent control handler (**req_obj.ops** == NULL) this is the list header. When the parent control handler is removed, it has to unbind and put all these requests since they refer to the parent. ``requests_queued`` List of the queued requests. This determines the order in which these controls are applied. Once the request is completed it is removed from this list. ``req_obj`` The :c:type:`struct media_request_object `, used to link into a :c:type:`struct media_request `. This request object has a refcount.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj.ubj)}(hXstruct v4l2_ctrl_handler { struct mutex _lock; struct mutex *lock; struct list_head ctrls; struct list_head ctrl_refs; struct v4l2_ctrl_ref *cached; struct v4l2_ctrl_ref **buckets; v4l2_ctrl_notify_fnc notify; void *notify_priv; u16 nr_of_buckets; int error; bool request_is_queued; struct list_head requests; struct list_head requests_queued; struct media_request_object req_obj; };h]hXstruct v4l2_ctrl_handler { struct mutex _lock; struct mutex *lock; struct list_head ctrls; struct list_head ctrl_refs; struct v4l2_ctrl_ref *cached; struct v4l2_ctrl_ref **buckets; v4l2_ctrl_notify_fnc notify; void *notify_priv; u16 nr_of_buckets; int error; bool request_is_queued; struct list_head requests; struct list_head requests_queued; struct media_request_object req_obj; };}hj.sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj.ubh)}(h **Members**h]j`)}(hj.h]hMembers}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj.ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj.ubj)}(hhh](j)}(h``_lock`` Default for "lock". h](j)}(h ``_lock``h]j)}(hj.h]h_lock}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj.ubj)}(hhh]h)}(hDefault for "lock".h]hDefault for “lock”.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubj)}(hp``lock`` Lock to control access to this handler and its controls. May be replaced by the user right after init. h](j)}(h``lock``h]j)}(hj/h]hlock}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(hfLock to control access to this handler and its controls. May be replaced by the user right after init.h]hfLock to control access to this handler and its controls. May be replaced by the user right after init.}(hj2/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj//ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj./hMhj.ubj)}(h6``ctrls`` The list of controls owned by this handler. h](j)}(h ``ctrls``h]j)}(hjS/h]hctrls}(hjU/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ/ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjM/ubj)}(hhh]h)}(h+The list of controls owned by this handler.h]h+The list of controls owned by this handler.}(hjl/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh/hMhji/ubah}(h]h ]h"]h$]h&]uh1jhjM/ubeh}(h]h ]h"]h$]h&]uh1jhjh/hMhj.ubj)}(h.``ctrl_refs`` The list of control references. h](j)}(h ``ctrl_refs``h]j)}(hj/h]h ctrl_refs}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(hThe list of control references.h]hThe list of control references.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj.ubj)}(h``cached`` The last found control reference. It is common that the same control is needed multiple times, so this is a simple optimization. h](j)}(h ``cached``h]j)}(hj/h]hcached}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(hThe last found control reference. It is common that the same control is needed multiple times, so this is a simple optimization.h]hThe last found control reference. It is common that the same control is needed multiple times, so this is a simple optimization.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj.ubj)}(hF``buckets`` Buckets for the hashing. Allows for quick control lookup. h](j)}(h ``buckets``h]j)}(hj/h]hbuckets}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(h9Buckets for the hashing. Allows for quick control lookup.h]h9Buckets for the hashing. Allows for quick control lookup.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj.ubj)}(h``notify`` A notify callback that is called whenever the control changes value. Note that the handler's lock is held when the notify function is called! h](j)}(h ``notify``h]j)}(hj80h]hnotify}(hj:0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj60ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj20ubj)}(hhh]h)}(hA notify callback that is called whenever the control changes value. Note that the handler's lock is held when the notify function is called!h]hA notify callback that is called whenever the control changes value. Note that the handler’s lock is held when the notify function is called!}(hjQ0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjN0ubah}(h]h ]h"]h$]h&]uh1jhj20ubeh}(h]h ]h"]h$]h&]uh1jhjM0hMhj.ubj)}(hE``notify_priv`` Passed as argument to the v4l2_ctrl notify callback. h](j)}(h``notify_priv``h]j)}(hjr0h]h notify_priv}(hjt0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjl0ubj)}(hhh]h)}(h4Passed as argument to the v4l2_ctrl notify callback.h]h4Passed as argument to the v4l2_ctrl notify callback.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjl0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj.ubj)}(h8``nr_of_buckets`` Total number of buckets in the array. h](j)}(h``nr_of_buckets``h]j)}(hj0h]h nr_of_buckets}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj0ubj)}(hhh]h)}(h%Total number of buckets in the array.h]h%Total number of buckets in the array.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj.ubj)}(h?``error`` The error code of the first failed control addition. h](j)}(h ``error``h]j)}(hj0h]herror}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj0ubj)}(hhh]h)}(h4The error code of the first failed control addition.h]h4The error code of the first failed control addition.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj.ubj)}(h6``request_is_queued`` True if the request was queued. h](j)}(h``request_is_queued``h]j)}(hj1h]hrequest_is_queued}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj1ubj)}(hhh]h)}(hTrue if the request was queued.h]hTrue if the request was queued.}(hj61hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj21hMhj31ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj21hMhj.ubj)}(hX``requests`` List to keep track of open control handler request objects. For the parent control handler (**req_obj.ops** == NULL) this is the list header. When the parent control handler is removed, it has to unbind and put all these requests since they refer to the parent. h](j)}(h ``requests``h]j)}(hjV1h]hrequests}(hjX1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjP1ubj)}(hhh]h)}(hXList to keep track of open control handler request objects. For the parent control handler (**req_obj.ops** == NULL) this is the list header. When the parent control handler is removed, it has to unbind and put all these requests since they refer to the parent.h](h\List to keep track of open control handler request objects. For the parent control handler (}(hjo1hhhNhNubj`)}(h**req_obj.ops**h]h req_obj.ops}(hjw1hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjo1ubh == NULL) this is the list header. When the parent control handler is removed, it has to unbind and put all these requests since they refer to the parent.}(hjo1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjl1ubah}(h]h ]h"]h$]h&]uh1jhjP1ubeh}(h]h ]h"]h$]h&]uh1jhjk1hMhj.ubj)}(h``requests_queued`` List of the queued requests. This determines the order in which these controls are applied. Once the request is completed it is removed from this list. h](j)}(h``requests_queued``h]j)}(hj1h]hrequests_queued}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj1ubj)}(hhh]h)}(hList of the queued requests. This determines the order in which these controls are applied. Once the request is completed it is removed from this list.h]hList of the queued requests. This determines the order in which these controls are applied. Once the request is completed it is removed from this list.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj.ubj)}(h``req_obj`` The :c:type:`struct media_request_object `, used to link into a :c:type:`struct media_request `. This request object has a refcount.h](j)}(h ``req_obj``h]j)}(hj1h]hreq_obj}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj1ubj)}(hhh]h)}(hThe :c:type:`struct media_request_object `, used to link into a :c:type:`struct media_request `. This request object has a refcount.h](hThe }(hj1hhhNhNubh)}(h<:c:type:`struct media_request_object `h]j)}(hj1h]hstruct media_request_object}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjmedia_request_objectuh1hhj1hMhj1ubh, used to link into a }(hj1hhhNhNubh)}(h.:c:type:`struct media_request `h]j)}(hj"2h]hstruct media_request}(hj$2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj 2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj media_requestuh1hhj1hMhj1ubh%. This request object has a refcount.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_config (C struct)c.v4l2_ctrl_confighNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_ctrl_configh]j )}(hstruct v4l2_ctrl_configh](j )}(hjch]hstruct}(hj{2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjw2hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjw2hhhj2hMubj )}(hv4l2_ctrl_configh]j)}(hju2h]hv4l2_ctrl_config}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]hhuh1j hjw2hhhj2hMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjs2hhhj2hMubah}(h]jn2ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj2hMhjp2hhubj/)}(hhh]h)}(h Control configuration structure.h]h Control configuration structure.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1j.hjp2hhhj2hMubeh}(h]h ](jstructeh"]h$]h&]jOjjPj2jQj2jRjSjTuh1j hhhj hNhNubjV)}(hX&**Definition**:: struct v4l2_ctrl_config { const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 min; s64 max; u64 step; s64 def; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 elem_size; u32 flags; u64 menu_skip_mask; const char * const *qmenu; const s64 *qmenu_int; unsigned int is_private:1; }; **Members** ``ops`` The control ops. ``type_ops`` The control type ops. Only needed for compound controls. ``id`` The control ID. ``name`` The control name. ``type`` The control type. ``min`` The control's minimum value. ``max`` The control's maximum value. ``step`` The control's step value for non-menu controls. ``def`` The control's default value. ``p_def`` The control's default value for compound controls. ``p_min`` The control's minimum value for compound controls. ``p_max`` The control's maximum value for compound controls. ``dims`` The size of each dimension. ``elem_size`` The size in bytes of the control. ``flags`` The control's flags. ``menu_skip_mask`` The control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 64 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a bit array. ``qmenu`` A const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. ``qmenu_int`` A const s64 integer array for all menu items of the type V4L2_CTRL_TYPE_INTEGER_MENU. ``is_private`` If set, then this control is private to its handler and it will not be added to any other handlers.h](h)}(h**Definition**::h](j`)}(h**Definition**h]h Definition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj2ubh:}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj2ubj)}(hXstruct v4l2_ctrl_config { const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 min; s64 max; u64 step; s64 def; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 elem_size; u32 flags; u64 menu_skip_mask; const char * const *qmenu; const s64 *qmenu_int; unsigned int is_private:1; };h]hXstruct v4l2_ctrl_config { const struct v4l2_ctrl_ops *ops; const struct v4l2_ctrl_type_ops *type_ops; u32 id; const char *name; enum v4l2_ctrl_type type; s64 min; s64 max; u64 step; s64 def; union v4l2_ctrl_ptr p_def; union v4l2_ctrl_ptr p_min; union v4l2_ctrl_ptr p_max; u32 dims[V4L2_CTRL_MAX_DIMS]; u32 elem_size; u32 flags; u64 menu_skip_mask; const char * const *qmenu; const s64 *qmenu_int; unsigned int is_private:1; };}hj2sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj2ubh)}(h **Members**h]j`)}(hj 3h]hMembers}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj 3ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj2ubj)}(hhh](j)}(h``ops`` The control ops. h](j)}(h``ops``h]j)}(hj*3h]hops}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj$3ubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hjC3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?3hMhj@3ubah}(h]h ]h"]h$]h&]uh1jhj$3ubeh}(h]h ]h"]h$]h&]uh1jhj?3hMhj!3ubj)}(hF``type_ops`` The control type ops. Only needed for compound controls. h](j)}(h ``type_ops``h]j)}(hjc3h]htype_ops}(hje3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj]3ubj)}(hhh]h)}(h8The control type ops. Only needed for compound controls.h]h8The control type ops. Only needed for compound controls.}(hj|3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx3hMhjy3ubah}(h]h ]h"]h$]h&]uh1jhj]3ubeh}(h]h ]h"]h$]h&]uh1jhjx3hMhj!3ubj)}(h``id`` The control ID. h](j)}(h``id``h]j)}(hj3h]hid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj3ubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj!3ubj)}(h``name`` The control name. h](j)}(h``name``h]j)}(hj3h]hname}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj3ubj)}(hhh]h)}(hThe control name.h]hThe control name.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj!3ubj)}(h``type`` The control type. h](j)}(h``type``h]j)}(hj4h]htype}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj4ubj)}(hhh]h)}(hThe control type.h]hThe control type.}(hj'4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#4hMhj$4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj#4hMhj!3ubj)}(h%``min`` The control's minimum value. h](j)}(h``min``h]j)}(hjG4h]hmin}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjA4ubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hj`4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\4hMhj]4ubah}(h]h ]h"]h$]h&]uh1jhjA4ubeh}(h]h ]h"]h$]h&]uh1jhj\4hMhj!3ubj)}(h%``max`` The control's maximum value. h](j)}(h``max``h]j)}(hj4h]hmax}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjz4ubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjz4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj!3ubj)}(h9``step`` The control's step value for non-menu controls. h](j)}(h``step``h]j)}(hj4h]hstep}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj4ubj)}(hhh]h)}(h/The control's step value for non-menu controls.h]h1The control’s step value for non-menu controls.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj!3ubj)}(h%``def`` The control's default value. h](j)}(h``def``h]j)}(hj4h]hdef}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj4ubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj!3ubj)}(h=``p_def`` The control's default value for compound controls. h](j)}(h ``p_def``h]j)}(hj+5h]hp_def}(hj-5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj%5ubj)}(hhh]h)}(h2The control's default value for compound controls.h]h4The control’s default value for compound controls.}(hjD5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@5hMhjA5ubah}(h]h ]h"]h$]h&]uh1jhj%5ubeh}(h]h ]h"]h$]h&]uh1jhj@5hMhj!3ubj)}(h=``p_min`` The control's minimum value for compound controls. h](j)}(h ``p_min``h]j)}(hjd5h]hp_min}(hjf5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj^5ubj)}(hhh]h)}(h2The control's minimum value for compound controls.h]h4The control’s minimum value for compound controls.}(hj}5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy5hMhjz5ubah}(h]h ]h"]h$]h&]uh1jhj^5ubeh}(h]h ]h"]h$]h&]uh1jhjy5hMhj!3ubj)}(h=``p_max`` The control's maximum value for compound controls. h](j)}(h ``p_max``h]j)}(hj5h]hp_max}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj5ubj)}(hhh]h)}(h2The control's maximum value for compound controls.h]h4The control’s maximum value for compound controls.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj!3ubj)}(h%``dims`` The size of each dimension. h](j)}(h``dims``h]j)}(hj5h]hdims}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj5ubj)}(hhh]h)}(hThe size of each dimension.h]hThe size of each dimension.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj!3ubj)}(h0``elem_size`` The size in bytes of the control. h](j)}(h ``elem_size``h]j)}(hj6h]h elem_size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj 6ubj)}(hhh]h)}(h!The size in bytes of the control.h]h!The size in bytes of the control.}(hj(6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$6hMhj%6ubah}(h]h ]h"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]uh1jhj$6hMhj!3ubj)}(h``flags`` The control's flags. h](j)}(h ``flags``h]j)}(hjH6h]hflags}(hjJ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjB6ubj)}(hhh]h)}(hThe control's flags.h]hThe control’s flags.}(hja6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]6hMhj^6ubah}(h]h ]h"]h$]h&]uh1jhjB6ubeh}(h]h ]h"]h$]h&]uh1jhj]6hMhj!3ubj)}(hXq``menu_skip_mask`` The control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 64 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a bit array. h](j)}(h``menu_skip_mask``h]j)}(hj6h]hmenu_skip_mask}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj{6ubj)}(hhh]h)}(hX]The control's skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 64 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a bit array.h]hX_The control’s skip mask for menu controls. This makes it easy to skip menu items that are not valid. If bit X is set, then menu item X is skipped. Of course, this only works for menus with <= 64 menu items. There are no menus that come close to that number, so this is OK. Should we ever need more, then this will have to be extended to a bit array.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jhj{6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj!3ubj)}(h``qmenu`` A const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL. h](j)}(h ``qmenu``h]j)}(hj6h]hqmenu}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj6ubj)}(hhh]h)}(hA const char * array for all menu items. Array entries that are empty strings ("") correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL.h]hA const char * array for all menu items. Array entries that are empty strings (“”) correspond to non-existing menu items (this is in addition to the menu_skip_mask above). The last entry must be NULL.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj!3ubj)}(hd``qmenu_int`` A const s64 integer array for all menu items of the type V4L2_CTRL_TYPE_INTEGER_MENU. h](j)}(h ``qmenu_int``h]j)}(hj6h]h qmenu_int}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj6ubj)}(hhh]h)}(hUA const s64 integer array for all menu items of the type V4L2_CTRL_TYPE_INTEGER_MENU.h]hUA const s64 integer array for all menu items of the type V4L2_CTRL_TYPE_INTEGER_MENU.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj 7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMhj!3ubj)}(hr``is_private`` If set, then this control is private to its handler and it will not be added to any other handlers.h](j)}(h``is_private``h]j)}(hj/7h]h is_private}(hj17hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-7ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj)7ubj)}(hhh]h)}(hcIf set, then this control is private to its handler and it will not be added to any other handlers.h]hcIf set, then this control is private to its handler and it will not be added to any other handlers.}(hjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD7hMhjE7ubah}(h]h ]h"]h$]h&]uh1jhj)7ubeh}(h]h ]h"]h$]h&]uh1jhjD7hMhj!3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_fill (C function)c.v4l2_ctrl_fillhNtauh1j hj hhhNhNubj )}(hhh](j )}(hvoid v4l2_ctrl_fill (u32 id, const char **name, enum v4l2_ctrl_type *type, s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)h]j )}(h~void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)h](jm)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj7hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7hhhj7hMubj )}(hv4l2_ctrl_fillh]j)}(hv4l2_ctrl_fillh]hv4l2_ctrl_fill}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj7hhhj7hMubja)}(hk(u32 id, const char **name, enum v4l2_ctrl_type *type, s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)h](jg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj7modnameN classnameNj,j/)}j2]j5)}j(j7sbc.v4l2_ctrl_fillasbuh1hhj7ubj )}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj)}(hidh]hid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(hconst char **nameh](j )}(hconsth]hconst}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 8ubj )}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 8ubjm)}(hcharh]hchar}(hj+8hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj 8ubj )}(h h]h }(hj98hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 8ubj)}(hjh]h*}(hjG8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 8ubj)}(hjh]h*}(hjT8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 8ubj)}(hnameh]hname}(hja8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(henum v4l2_ctrl_type *typeh](j )}(henumh]henum}(hjz8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjv8ubj )}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjv8ubh)}(hhh]j)}(hv4l2_ctrl_typeh]hv4l2_ctrl_type}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj8modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhjv8ubj )}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjv8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv8ubj)}(htypeh]htype}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(hs64 *minh](h)}(hhh]j)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj8modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhj8ubj )}(h h]h }(hj 9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hminh]hmin}(hj'9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(hs64 *maxh](h)}(hhh]j)}(hs64h]hs64}(hjC9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@9ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjE9modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhj<9ubj )}(h h]h }(hja9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<9ubj)}(hjh]h*}(hjo9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<9ubj)}(hmaxh]hmax}(hj|9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(h u64 *steph](h)}(hhh]j)}(hu64h]hu64}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj9modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhj9ubj )}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hsteph]hstep}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(hs64 *defh](h)}(hhh]j)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj9modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhj9ubj )}(h h]h }(hj :hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj9ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hdefh]hdef}(hj&:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubjg)}(h u32 *flagsh](h)}(hhh]j)}(hu32h]hu32}(hjB:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?:ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjD:modnameN classnameNj,j/)}j2]j7c.v4l2_ctrl_fillasbuh1hhj;:ubj )}(h h]h }(hj`:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;:ubj)}(hjh]h*}(hjn:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;:ubj)}(hflagsh]hflags}(hj{:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj7ubeh}(h]h ]h"]h$]h&]hhuh1j`hj7hhhj7hMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj7hhhj7hMubah}(h]j{7ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj7hMhj}7hhubj/)}(hhh]h)}(h3Fill in the control fields based on the control ID.h]h3Fill in the control fields based on the control ID.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j.hj}7hhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj:jQj:jRjSjTuh1j hhhj hNhNubjV)}(hXa**Parameters** ``u32 id`` ID of the control ``const char **name`` pointer to be filled with a string with the name of the control ``enum v4l2_ctrl_type *type`` pointer for storing the type of the control ``s64 *min`` pointer for storing the minimum value for the control ``s64 *max`` pointer for storing the maximum value for the control ``u64 *step`` pointer for storing the control step ``s64 *def`` pointer for storing the default value for the control ``u32 *flags`` pointer for storing the flags to be used on the control **Description** This works for all standard V4L2 controls. For non-standard controls it will only fill in the given arguments and **name** content will be set to ``NULL``. This function will overwrite the contents of **name**, **type** and **flags**. The contents of **min**, **max**, **step** and **def** may be modified depending on the type. .. note:: Do not use in drivers! It is used internally for backwards compatibility control handling only. Once all drivers are converted to use the new control framework this function will no longer be exported.h](h)}(h**Parameters**h]j`)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj:ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubj)}(hhh](j)}(h``u32 id`` ID of the control h](j)}(h ``u32 id``h]j)}(hj:h]hu32 id}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubj)}(hhh]h)}(hID of the controlh]hID of the control}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj:ubj)}(hV``const char **name`` pointer to be filled with a string with the name of the control h](j)}(h``const char **name``h]j)}(hj;h]hconst char **name}(hj!;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj;ubj)}(hhh]h)}(h?pointer to be filled with a string with the name of the controlh]h?pointer to be filled with a string with the name of the control}(hj8;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4;hMhj5;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj4;hMhj:ubj)}(hJ``enum v4l2_ctrl_type *type`` pointer for storing the type of the control h](j)}(h``enum v4l2_ctrl_type *type``h]j)}(hjX;h]henum v4l2_ctrl_type *type}(hjZ;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV;ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjR;ubj)}(hhh]h)}(h+pointer for storing the type of the controlh]h+pointer for storing the type of the control}(hjq;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm;hMhjn;ubah}(h]h ]h"]h$]h&]uh1jhjR;ubeh}(h]h ]h"]h$]h&]uh1jhjm;hMhj:ubj)}(hC``s64 *min`` pointer for storing the minimum value for the control h](j)}(h ``s64 *min``h]j)}(hj;h]hs64 *min}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj;ubj)}(hhh]h)}(h5pointer for storing the minimum value for the controlh]h5pointer for storing the minimum value for the control}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj:ubj)}(hC``s64 *max`` pointer for storing the maximum value for the control h](j)}(h ``s64 *max``h]j)}(hj;h]hs64 *max}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj;ubj)}(hhh]h)}(h5pointer for storing the maximum value for the controlh]h5pointer for storing the maximum value for the control}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj:ubj)}(h3``u64 *step`` pointer for storing the control step h](j)}(h ``u64 *step``h]j)}(hj<h]h u64 *step}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj;ubj)}(hhh]h)}(h$pointer for storing the control steph]h$pointer for storing the control step}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj:ubj)}(hC``s64 *def`` pointer for storing the default value for the control h](j)}(h ``s64 *def``h]j)}(hj<<h]hs64 *def}(hj><hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:<ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj6<ubj)}(hhh]h)}(h5pointer for storing the default value for the controlh]h5pointer for storing the default value for the control}(hjU<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ<hMhjR<ubah}(h]h ]h"]h$]h&]uh1jhj6<ubeh}(h]h ]h"]h$]h&]uh1jhjQ<hMhj:ubj)}(hG``u32 *flags`` pointer for storing the flags to be used on the control h](j)}(h``u32 *flags``h]j)}(hju<h]h u32 *flags}(hjw<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs<ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjo<ubj)}(hhh]h)}(h7pointer for storing the flags to be used on the controlh]h7pointer for storing the flags to be used on the control}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhjo<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j`)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubh)}(hThis works for all standard V4L2 controls. For non-standard controls it will only fill in the given arguments and **name** content will be set to ``NULL``.h](hrThis works for all standard V4L2 controls. For non-standard controls it will only fill in the given arguments and }(hj<hhhNhNubj`)}(h**name**h]hname}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh content will be set to }(hj<hhhNhNubj)}(h``NULL``h]hNULL}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubh)}(hThis function will overwrite the contents of **name**, **type** and **flags**. The contents of **min**, **max**, **step** and **def** may be modified depending on the type.h](h-This function will overwrite the contents of }(hj<hhhNhNubj`)}(h**name**h]hname}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh, }(hj<hhhNhNubj`)}(h**type**h]htype}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh and }(hj<hhhNhNubj`)}(h **flags**h]hflags}(hj%=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh. The contents of }(hj<hhhNhNubj`)}(h**min**h]hmin}(hj7=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh, }hj<sbj`)}(h**max**h]hmax}(hjI=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh, }hj<sbj`)}(h**step**h]hstep}(hj[=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh and }hj<sbj`)}(h**def**h]hdef}(hjm=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj<ubh' may be modified depending on the type.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubj)}(hDo not use in drivers! It is used internally for backwards compatibility control handling only. Once all drivers are converted to use the new control framework this function will no longer be exported.h]h)}(hDo not use in drivers! It is used internally for backwards compatibility control handling only. Once all drivers are converted to use the new control framework this function will no longer be exported.h]hDo not use in drivers! It is used internally for backwards compatibility control handling only. Once all drivers are converted to use the new control framework this function will no longer be exported.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj=ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j )v4l2_ctrl_handler_init_class (C function)c.v4l2_ctrl_handler_init_classhNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_ctrl_handler_init_class (struct v4l2_ctrl_handler *hdl, unsigned int nr_of_controls_hint, struct lock_class_key *key, const char *name)h]j )}(hint v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl, unsigned int nr_of_controls_hint, struct lock_class_key *key, const char *name)h](jm)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj=hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=hhhj=hMubj )}(hv4l2_ctrl_handler_init_classh]j)}(hv4l2_ctrl_handler_init_classh]hv4l2_ctrl_handler_init_class}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj=hhhj=hMubja)}(ho(struct v4l2_ctrl_handler *hdl, unsigned int nr_of_controls_hint, struct lock_class_key *key, const char *name)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj )}(h h]h }(hj >hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj>modnameN classnameNj,j/)}j2]j5)}j(j=sbc.v4l2_ctrl_handler_init_classasbuh1hhj=ubj )}(h h]h }(hj:>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj)}(hjh]h*}(hjH>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hhdlh]hhdl}(hjU>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj=ubjg)}(h unsigned int nr_of_controls_hinth](jm)}(hunsignedh]hunsigned}(hjn>hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjj>ubj )}(h h]h }(hj|>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjj>ubjm)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjj>ubj )}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjj>ubj)}(hnr_of_controls_hinth]hnr_of_controls_hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj=ubjg)}(hstruct lock_class_key *keyh](j )}(hjch]hstruct}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubj )}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubh)}(hhh]j)}(hlock_class_keyh]hlock_class_key}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj>modnameN classnameNj,j/)}j2]j6>c.v4l2_ctrl_handler_init_classasbuh1hhj>ubj )}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubj)}(hjh]h*}(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hkeyh]hkey}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj=ubjg)}(hconst char *nameh](j )}(hj8h]hconst}(hj/?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+?ubj )}(h h]h }(hjerror**.h](h)}(h**Parameters**h]j`)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj?ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj?ubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hj?h]hstruct v4l2_ctrl_handler *hdl}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj?ubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(hX``unsigned int nr_of_controls_hint`` A hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn't have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though. h](j)}(h$``unsigned int nr_of_controls_hint``h]j)}(hj@h]h unsigned int nr_of_controls_hint}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hj@ubj)}(hhh]h)}(hX~A hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn't have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though.h]hXA hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn’t have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though.}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj-@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj,@hM hj?ubj)}(hT``struct lock_class_key *key`` Used by the lock validator if CONFIG_LOCKDEP is set. h](j)}(h``struct lock_class_key *key``h]j)}(hjQ@h]hstruct lock_class_key *key}(hjS@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO@ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjK@ubj)}(hhh]h)}(h4Used by the lock validator if CONFIG_LOCKDEP is set.h]h4Used by the lock validator if CONFIG_LOCKDEP is set.}(hjj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf@hM hjg@ubah}(h]h ]h"]h$]h&]uh1jhjK@ubeh}(h]h ]h"]h$]h&]uh1jhjf@hM hj?ubj)}(hJ``const char *name`` Used by the lock validator if CONFIG_LOCKDEP is set. h](j)}(h``const char *name``h]j)}(hj@h]hconst char *name}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hj@ubj)}(hhh]h)}(h4Used by the lock validator if CONFIG_LOCKDEP is set.h]h4Used by the lock validator if CONFIG_LOCKDEP is set.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j`)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj@ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj?ubh attention)}(hzNever use this call directly, always use the v4l2_ctrl_handler_init() macro that hides the **key** and **name** arguments.h]h)}(hzNever use this call directly, always use the v4l2_ctrl_handler_init() macro that hides the **key** and **name** arguments.h](h[Never use this call directly, always use the v4l2_ctrl_handler_init() macro that hides the }(hj@hhhNhNubj`)}(h**key**h]hkey}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj@ubh and }(hj@hhhNhNubj`)}(h**name**h]hname}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj@ubh arguments.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj@ubah}(h]h ]h"]h$]h&]uh1j@hj?ubh)}(h **Return**h]j`)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj?ubh)}(hireturns an error if the buckets could not be allocated. This error will also be stored in **hdl->error**.h](hZreturns an error if the buckets could not be allocated. This error will also be stored in }(hj2AhhhNhNubj`)}(h**hdl->error**h]h hdl->error}(hj:AhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj2Aubh.}(hj2AhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_handler_init (C macro)c.v4l2_ctrl_handler_inithNtauh1j hj hhhNhNubj )}(hhh](j )}(hv4l2_ctrl_handler_inith]j )}(hv4l2_ctrl_handler_inith]j )}(hv4l2_ctrl_handler_inith]j)}(hjmAh]hv4l2_ctrl_handler_init}(hjwAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsAubah}(h]h ](jjeh"]h$]h&]hhuh1j hjoAhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM0ubah}(h]h ]h"]h$]h&]hhj uh1j j!j"hjkAhhhjAhM0ubah}(h]jfAah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjAhM0hjhAhhubj/)}(hhh]h}(h]h ]h"]h$]h&]uh1j.hjhAhhhjAhM0ubeh}(h]h ](jmacroeh"]h$]h&]jOjjPjAjQjAjRjSjTuh1j hhhj hNhNubh)}(h5``v4l2_ctrl_handler_init (hdl, nr_of_controls_hint)``h]j)}(hjAh]h1v4l2_ctrl_handler_init (hdl, nr_of_controls_hint)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM2hj hhubjn)}(hlhelper function to create a static struct :c:type:`lock_class_key` and calls v4l2_ctrl_handler_init_class() h]h)}(hkhelper function to create a static struct :c:type:`lock_class_key` and calls v4l2_ctrl_handler_init_class()h](h*helper function to create a static struct }(hjAhhhNhNubh)}(h:c:type:`lock_class_key`h]j)}(hjAh]hlock_class_key}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjlock_class_keyuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjAubh) and calls v4l2_ctrl_handler_init_class()}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jmhjAhMhj hhubjV)}(hX**Parameters** ``hdl`` The control handler. ``nr_of_controls_hint`` A hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn't have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though. **Description** This helper function creates a static struct :c:type:`lock_class_key` and calls v4l2_ctrl_handler_init_class(), providing a proper name for the lock validador. Use this helper function to initialize a control handler.h](h)}(h**Parameters**h]j`)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjAubj)}(hhh](j)}(h``hdl`` The control handler. h](j)}(h``hdl``h]j)}(hj Bh]hhdl}(hj"BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM!hjBubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hj9BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5BhM!hj6Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj5BhM!hjBubj)}(hX``nr_of_controls_hint`` A hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn't have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though. h](j)}(h``nr_of_controls_hint``h]j)}(hjYBh]hnr_of_controls_hint}(hj[BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWBubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM(hjSBubj)}(hhh]h)}(hX~A hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn't have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though.h]hXA hint of how many controls this handler is expected to refer to. This is the total number, so including any inherited controls. It doesn’t have to be precise, but if it is way off, then you either waste memory (too many buckets are allocated) or the control lookup becomes slower (not enough buckets are allocated, so there are more slow list lookups). It will always work, though.}(hjrBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjoBubah}(h]h ]h"]h$]h&]uh1jhjSBubeh}(h]h ]h"]h$]h&]uh1jhjnBhM(hjBubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j`)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjBubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM*hjAubh)}(hThis helper function creates a static struct :c:type:`lock_class_key` and calls v4l2_ctrl_handler_init_class(), providing a proper name for the lock validador.h](h-This helper function creates a static struct }(hjBhhhNhNubh)}(h:c:type:`lock_class_key`h]j)}(hjBh]hlock_class_key}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjlock_class_keyuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM*hjBubhZ and calls v4l2_ctrl_handler_init_class(), providing a proper name for the lock validador.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhM*hjAubh)}(h9Use this helper function to initialize a control handler.h]h9Use this helper function to initialize a control handler.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM.hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_handler_free (C function)c.v4l2_ctrl_handler_freehNtauh1j hj hhhNhNubj )}(hhh](j )}(h;void v4l2_ctrl_handler_free (struct v4l2_ctrl_handler *hdl)h]j )}(h:void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)h](jm)}(hvoidh]hvoid}(hj ChhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjChhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMGubj )}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjChhhjChMGubj )}(hv4l2_ctrl_handler_freeh]j)}(hv4l2_ctrl_handler_freeh]hv4l2_ctrl_handler_free}(hj-ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Cubah}(h]h ](jjeh"]h$]h&]hhuh1j hjChhhjChMGubja)}(h(struct v4l2_ctrl_handler *hdl)h]jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjIChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjECubj )}(h h]h }(hjVChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjECubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjgChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdCubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjiCmodnameN classnameNj,j/)}j2]j5)}j(j/Csbc.v4l2_ctrl_handler_freeasbuh1hhjECubj )}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjECubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjECubj)}(hhdlh]hhdl}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjECubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjACubah}(h]h ]h"]h$]h&]hhuh1j`hjChhhjChMGubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjChhhjChMGubah}(h]jBah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjChMGhjChhubj/)}(hhh]h)}(hAFree all controls owned by the handler and free the control list.h]hAFree all controls owned by the handler and free the control list.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMAhjChhubah}(h]h ]h"]h$]h&]uh1j.hjChhhjChMGubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjCjQjCjRjSjTuh1j hhhj hNhNubjV)}(h{**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. **Description** Does nothing if **hdl** == NULL.h](h)}(h**Parameters**h]j`)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjCubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhjCubj)}(hhh]j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hj Dh]hstruct v4l2_ctrl_handler *hdl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Dubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMChjDubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hj&DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"DhMChj#Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj"DhMChjDubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j`)}(hjHDh]h Description}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjFDubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhjCubh)}(h Does nothing if **hdl** == NULL.h](hDoes nothing if }(hj^DhhhNhNubj`)}(h**hdl**h]hhdl}(hjfDhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj^Dubh == NULL.}(hj^DhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_lock (C function)c.v4l2_ctrl_lockhNtauh1j hj hhhNhNubj )}(hhh](j )}(h,void v4l2_ctrl_lock (struct v4l2_ctrl *ctrl)h]j )}(h+void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl)h](jm)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjDhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMNubj )}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDhhhjDhMNubj )}(hv4l2_ctrl_lockh]j)}(hv4l2_ctrl_lockh]hv4l2_ctrl_lock}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]hhuh1j hjDhhhjDhMNubja)}(h(struct v4l2_ctrl *ctrl)h]jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj )}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjDmodnameN classnameNj,j/)}j2]j5)}j(jDsbc.v4l2_ctrl_lockasbuh1hhjDubj )}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj)}(hjh]h*}(hj(EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hctrlh]hctrl}(hj5EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjDubah}(h]h ]h"]h$]h&]hhuh1j`hjDhhhjDhMNubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjDhhhjDhMNubah}(h]jDah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjDhMNhjDhhubj/)}(hhh]h)}(h@Helper function to lock the handler associated with the control.h]h@Helper function to lock the handler associated with the control.}(hj_EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMJhj\Ehhubah}(h]h ]h"]h$]h&]uh1j.hjDhhhjDhMNubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjwEjQjwEjRjSjTuh1j hhhj hNhNubjV)}(hA**Parameters** ``struct v4l2_ctrl *ctrl`` The control to lock.h](h)}(h**Parameters**h]j`)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjEubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMNhj{Eubj)}(hhh]j)}(h/``struct v4l2_ctrl *ctrl`` The control to lock.h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjEh]hstruct v4l2_ctrl *ctrl}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMPhjEubj)}(hhh]h)}(hThe control to lock.h]hThe control to lock.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMLhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMPhjEubah}(h]h ]h"]h$]h&]uh1jhj{Eubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_unlock (C function)c.v4l2_ctrl_unlockhNtauh1j hj hhhNhNubj )}(hhh](j )}(h.void v4l2_ctrl_unlock (struct v4l2_ctrl *ctrl)h]j )}(h-void v4l2_ctrl_unlock(struct v4l2_ctrl *ctrl)h](jm)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjEhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXubj )}(h h]h }(hj FhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEhhhjFhMXubj )}(hv4l2_ctrl_unlockh]j)}(hv4l2_ctrl_unlockh]hv4l2_ctrl_unlock}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]hhuh1j hjEhhhjFhMXubja)}(h(struct v4l2_ctrl *ctrl)h]jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hj7FhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3Fubj )}(h h]h }(hjDFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3Fubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjUFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRFubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjWFmodnameN classnameNj,j/)}j2]j5)}j(jFsbc.v4l2_ctrl_unlockasbuh1hhj3Fubj )}(h h]h }(hjuFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3Fubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Fubj)}(hctrlh]hctrl}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Fubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj/Fubah}(h]h ]h"]h$]h&]hhuh1j`hjEhhhjFhMXubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjEhhhjFhMXubah}(h]jEah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjFhMXhjEhhubj/)}(hhh]h)}(hBHelper function to unlock the handler associated with the control.h]hBHelper function to unlock the handler associated with the control.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMThjFhhubah}(h]h ]h"]h$]h&]uh1j.hjEhhhjFhMXubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjFjQjFjRjSjTuh1j hhhj hNhNubjV)}(hC**Parameters** ``struct v4l2_ctrl *ctrl`` The control to unlock.h](h)}(h**Parameters**h]j`)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjFubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhjFubj)}(hhh]j)}(h1``struct v4l2_ctrl *ctrl`` The control to unlock.h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjFh]hstruct v4l2_ctrl *ctrl}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMZhjFubj)}(hhh]h)}(hThe control to unlock.h]hThe control to unlock.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMVhjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjGhMZhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j &__v4l2_ctrl_handler_setup (C function)c.__v4l2_ctrl_handler_setuphNtauh1j hj hhhNhNubj )}(hhh](j )}(h=int __v4l2_ctrl_handler_setup (struct v4l2_ctrl_handler *hdl)h]j )}(herror** is set to the error code (if it wasn't set already).h](h)}(h**Parameters**h]j`)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjNubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjNh]hstruct v4l2_ctrl_handler *hdl}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjNubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjNubj)}(hI``const struct v4l2_ctrl_config *cfg`` The control's configuration data. h](j)}(h&``const struct v4l2_ctrl_config *cfg``h]j)}(hj&Oh]h"const struct v4l2_ctrl_config *cfg}(hj(OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Oubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj Oubj)}(hhh]h)}(h!The control's configuration data.h]h#The control’s configuration data.}(hj?OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;OhMhjerror** is set to the error code (if it wasn't set already).h](hIf the }(hjOhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjOh]h v4l2_ctrl}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjOubh9 struct could not be allocated then NULL is returned and }(hjOhhhNhNubj`)}(h**hdl->error**h]h hdl->error}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjOubh7 is set to the error code (if it wasn’t set already).}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_new_std (C function)c.v4l2_ctrl_new_stdhNtauh1j hj hhhNhNubj )}(hhh](j )}(hstruct v4l2_ctrl * v4l2_ctrl_new_std (struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s64 min, s64 max, u64 step, s64 def)h]j )}(hstruct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s64 min, s64 max, u64 step, s64 def)h](j )}(hjch]hstruct}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hj"PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPhhhj!PhMubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hj3PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Pubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj5PmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_new_stdsbc.v4l2_ctrl_new_stdasbuh1hhjPhhhj!PhMubj )}(h h]h }(hjTPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPhhhj!PhMubj)}(hjh]h*}(hjbPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhj!PhMubj )}(hv4l2_ctrl_new_stdh]j)}(hjQPh]hv4l2_ctrl_new_std}(hjsPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoPubah}(h]h ](jjeh"]h$]h&]hhuh1j hjPhhhj!PhMubja)}(hm(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, s64 min, s64 max, u64 step, s64 def)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjPmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjPubj )}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hhdlh]hhdl}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hconst struct v4l2_ctrl_ops *opsh](j )}(hj8h]hconst}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(h h]h }(hj QhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(hjch]hstruct}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj )}(h h]h }(hj&QhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubh)}(hhh]j)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hj7QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Qubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj9QmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjPubj )}(h h]h }(hjUQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj)}(hjh]h*}(hjcQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hopsh]hops}(hjpQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjQmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjQubj )}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQubj)}(hidh]hid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hs64 minh](h)}(hhh]j)}(hs64h]hs64}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjQmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjQubj )}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQubj)}(hminh]hmin}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hs64 maxh](h)}(hhh]j)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjRmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjRubj )}(h h]h }(hj:RhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjRubj)}(hmaxh]hmax}(hjHRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hu64 steph](h)}(hhh]j)}(hu64h]hu64}(hjdRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaRubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjfRmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhj]Rubj )}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]Rubj)}(hsteph]hstep}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Rubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubjg)}(hs64 defh](h)}(hhh]j)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjRmodnameN classnameNj,j/)}j2]jOPc.v4l2_ctrl_new_stdasbuh1hhjRubj )}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjRubj)}(hdefh]hdef}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjPubeh}(h]h ]h"]h$]h&]hhuh1j`hjPhhhj!PhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj Phhhj!PhMubah}(h]jPah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj!PhMhj Phhubj/)}(hhh]h)}(h=Allocate and initialize a new standard V4L2 non-menu control.h]h=Allocate and initialize a new standard V4L2 non-menu control.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1j.hj Phhhj!PhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjSjQjSjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``const struct v4l2_ctrl_ops *ops`` The control ops. ``u32 id`` The control ID. ``s64 min`` The control's minimum value. ``s64 max`` The control's maximum value. ``u64 step`` The control's step value ``s64 def`` The control's default value. **Description** If the :c:type:`v4l2_ctrl` struct could not be allocated, or the control ID is not known, then NULL is returned and **hdl->error** is set to the appropriate error code (if it wasn't set already). If **id** refers to a menu control, then this function will return NULL. Use v4l2_ctrl_new_std_menu() when adding menu controls.h](h)}(h**Parameters**h]j`)}(hj$Sh]h Parameters}(hj&ShhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj"Subah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjCSh]hstruct v4l2_ctrl_handler *hdl}(hjEShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjASubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj=Subj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hj\ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXShMhjYSubah}(h]h ]h"]h$]h&]uh1jhj=Subeh}(h]h ]h"]h$]h&]uh1jhjXShMhj:Subj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hj|Sh]hconst struct v4l2_ctrl_ops *ops}(hj~ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzSubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjvSubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjvSubeh}(h]h ]h"]h$]h&]uh1jhjShMhj:Subj)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hjSh]hu32 id}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhj:Subj)}(h)``s64 min`` The control's minimum value. h](j)}(h ``s64 min``h]j)}(hjSh]hs64 min}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhj:Subj)}(h)``s64 max`` The control's maximum value. h](j)}(h ``s64 max``h]j)}(hj'Th]hs64 max}(hj)ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Tubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj!Tubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hj@ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjerror** is set to the appropriate error code (if it wasn't set already).h](hIf the }(hjThhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjTh]h v4l2_ctrl}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjTubhZ struct could not be allocated, or the control ID is not known, then NULL is returned and }(hjThhhNhNubj`)}(h**hdl->error**h]h hdl->error}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjTubhC is set to the appropriate error code (if it wasn’t set already).}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjSubh)}(hHIf **id** refers to a menu control, then this function will return NULL.h](hIf }(hj.UhhhNhNubj`)}(h**id**h]hid}(hj6UhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj.Uubh? refers to a menu control, then this function will return NULL.}(hj.UhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjSubh)}(h7Use v4l2_ctrl_new_std_menu() when adding menu controls.h]h7Use v4l2_ctrl_new_std_menu() when adding menu controls.}(hjOUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_new_std_menu (C function)c.v4l2_ctrl_new_std_menuhNtauh1j hj hhhNhNubj )}(hhh](j )}(hstruct v4l2_ctrl * v4l2_ctrl_new_std_menu (struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def)h]j )}(hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def)h](j )}(hjch]hstruct}(hj~UhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzUhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzUhhhjUhMubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjUmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_new_std_menusbc.v4l2_ctrl_new_std_menuasbuh1hhjzUhhhjUhMubj )}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzUhhhjUhMubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzUhhhjUhMubj )}(hv4l2_ctrl_new_std_menuh]j)}(hjUh]hv4l2_ctrl_new_std_menu}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]hhuh1j hjzUhhhjUhMubja)}(hb(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjUubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjUubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjVmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhjUubj )}(h h]h }(hj4VhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjUubj)}(hjh]h*}(hjBVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hhdlh]hhdl}(hjOVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hconst struct v4l2_ctrl_ops *opsh](j )}(hj8h]hconst}(hjhVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdVubj )}(h h]h }(hjuVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdVubj )}(hjch]hstruct}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdVubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdVubh)}(hhh]j)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjVmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhjdVubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdVubj)}(hopsh]hops}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdVubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjVmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhjVubj )}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjVubj)}(hidh]hid}(hj"WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hu8 maxh](h)}(hhh]j)}(hu8h]hu8}(hj>WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Wubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj@WmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhj7Wubj )}(h h]h }(hj\WhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7Wubj)}(hmaxh]hmax}(hjjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Wubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hu64 maskh](h)}(hhh]j)}(hu64h]hu64}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjWmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhjWubj )}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hmaskh]hmask}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hu8 defh](h)}(hhh]j)}(hu8h]hu8}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjWmodnameN classnameNj,j/)}j2]jUc.v4l2_ctrl_new_std_menuasbuh1hhjWubj )}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hdefh]hdef}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubeh}(h]h ]h"]h$]h&]hhuh1j`hjzUhhhjUhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjvUhhhjUhMubah}(h]jqUah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjUhMhjsUhhubj/)}(hhh]h)}(h9Allocate and initialize a new standard V4L2 menu control.h]h9Allocate and initialize a new standard V4L2 menu control.}(hj$XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj!Xhhubah}(h]h ]h"]h$]h&]uh1j.hjsUhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjhh]hstruct v4l2_ctrl_handler *hdl}(hj@hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjerror** will be set to the error code (if it wasn't set already).h](h)}(h**Parameters**h]j`)}(hj@mh]h Parameters}(hjBmhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj>mubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:mubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hj_mh]hstruct v4l2_ctrl_handler *hdl}(hjamhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]mubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjYmubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjxmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtmhMhjumubah}(h]h ]h"]h$]h&]uh1jhjYmubeh}(h]h ]h"]h$]h&]uh1jhjtmhMhjVmubj)}(hu``struct v4l2_ctrl_handler *add`` The control handler whose controls you want to add to the **hdl** control handler. h](j)}(h!``struct v4l2_ctrl_handler *add``h]j)}(hjmh]hstruct v4l2_ctrl_handler *add}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjmubj)}(hhh]h)}(hRThe control handler whose controls you want to add to the **hdl** control handler.h](h:The control handler whose controls you want to add to the }(hjmhhhNhNubj`)}(h**hdl**h]hhdl}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjmubh control handler.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjVmubj)}(hV``v4l2_ctrl_filter filter`` This function will filter which controls should be added. h](j)}(h``v4l2_ctrl_filter filter``h]j)}(hjmh]hv4l2_ctrl_filter filter}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM!hjmubj)}(hhh]h)}(h9This function will filter which controls should be added.h]h9This function will filter which controls should be added.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM!hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM!hjVmubj)}(hk``bool from_other_dev`` If true, then the controls in **add** were defined in another device than **hdl**. h](j)}(h``bool from_other_dev``h]j)}(hjnh]hbool from_other_dev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM#hjnubj)}(hhh]h)}(hRIf true, then the controls in **add** were defined in another device than **hdl**.h](hIf true, then the controls in }(hj6nhhhNhNubj`)}(h**add**h]hadd}(hj>nhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj6nubh% were defined in another device than }(hj6nhhhNhNubj`)}(h**hdl**h]hhdl}(hjPnhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj6nubh.}(hj6nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hj3nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj2nhM#hjVmubeh}(h]h ]h"]h$]h&]uh1jhj:mubh)}(h**Description**h]j`)}(hj}nh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj{nubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM%hj:mubh)}(hXDoes nothing if either of the two handlers is a NULL pointer. If **filter** is NULL, then all controls are added. Otherwise only those controls for which **filter** returns true will be added. In case of an error **hdl->error** will be set to the error code (if it wasn't set already).h](hADoes nothing if either of the two handlers is a NULL pointer. If }(hjnhhhNhNubj`)}(h **filter**h]hfilter}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjnubhO is NULL, then all controls are added. Otherwise only those controls for which }(hjnhhhNhNubj`)}(h **filter**h]hfilter}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjnubh1 returns true will be added. In case of an error }(hjnhhhNhNubj`)}(h**hdl->error**h]h hdl->error}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjnubh< will be set to the error code (if it wasn’t set already).}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM%hj:mubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_radio_filter (C function)c.v4l2_ctrl_radio_filterhNtauh1j hj hhhNhNubj )}(hhh](j )}(h:bool v4l2_ctrl_radio_filter (const struct v4l2_ctrl *ctrl)h]j )}(h9bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)h](jm)}(hjlh]hbool}(hjnhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjnhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM;ubj )}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnhhhjohM;ubj )}(hv4l2_ctrl_radio_filterh]j)}(hv4l2_ctrl_radio_filterh]hv4l2_ctrl_radio_filter}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]hhuh1j hjnhhhjohM;ubja)}(h(const struct v4l2_ctrl *ctrl)h]jg)}(hconst struct v4l2_ctrl *ctrlh](j )}(hj8h]hconst}(hj4ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0oubj )}(h h]h }(hjAohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0oubj )}(hjch]hstruct}(hjOohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0oubj )}(h h]h }(hj\ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0oubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjmohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjoubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjoomodnameN classnameNj,j/)}j2]j5)}j(josbc.v4l2_ctrl_radio_filterasbuh1hhj0oubj )}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0oubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0oubj)}(hctrlh]hctrl}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0oubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,oubah}(h]h ]h"]h$]h&]hhuh1j`hjnhhhjohM;ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjnhhhjohM;ubah}(h]jnah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjohM;hjnhhubj/)}(hhh]h)}(h#Standard filter for radio controls.h]h#Standard filter for radio controls.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM1hjohhubah}(h]h ]h"]h$]h&]uh1j.hjnhhhjohM;ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjojQjojRjSjTuh1j hhhj hNhNubjV)}(hXF**Parameters** ``const struct v4l2_ctrl *ctrl`` The control that is filtered. **Description** This will return true for any controls that are valid for radio device nodes. Those are all of the V4L2_CID_AUDIO_* user controls and all FM transmitter class controls. This function is to be used with v4l2_ctrl_add_handler().h](h)}(h**Parameters**h]j`)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjoubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM5hjoubj)}(hhh]j)}(h?``const struct v4l2_ctrl *ctrl`` The control that is filtered. h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjph]hconst struct v4l2_ctrl *ctrl}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM3hj pubj)}(hhh]h)}(hThe control that is filtered.h]hThe control that is filtered.}(hj,phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(phM3hj)pubah}(h]h ]h"]h$]h&]uh1jhj pubeh}(h]h ]h"]h$]h&]uh1jhj(phM3hj pubah}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j`)}(hjNph]h Description}(hjPphhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjLpubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM5hjoubh)}(hThis will return true for any controls that are valid for radio device nodes. Those are all of the V4L2_CID_AUDIO_* user controls and all FM transmitter class controls.h]hThis will return true for any controls that are valid for radio device nodes. Those are all of the V4L2_CID_AUDIO_* user controls and all FM transmitter class controls.}(hjdphhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM5hjoubh)}(h9This function is to be used with v4l2_ctrl_add_handler().h]h9This function is to be used with v4l2_ctrl_add_handler().}(hjsphhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM9hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_cluster (C function)c.v4l2_ctrl_clusterhNtauh1j hj hhhNhNubj )}(hhh](j )}(hLvoid v4l2_ctrl_cluster (unsigned int ncontrols, struct v4l2_ctrl **controls)h]j )}(hKvoid v4l2_ctrl_cluster(unsigned int ncontrols, struct v4l2_ctrl **controls)h](jm)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjphhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMDubj )}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjphhhjphMDubj )}(hv4l2_ctrl_clusterh]j)}(hv4l2_ctrl_clusterh]hv4l2_ctrl_cluster}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]hhuh1j hjphhhjphMDubja)}(h5(unsigned int ncontrols, struct v4l2_ctrl **controls)h](jg)}(hunsigned int ncontrolsh](jm)}(hunsignedh]hunsigned}(hjphhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjpubj )}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjpubjm)}(hinth]hint}(hjphhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjpubj )}(h h]h }(hj qhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjpubj)}(h ncontrolsh]h ncontrols}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjpubjg)}(hstruct v4l2_ctrl **controlsh](j )}(hjch]hstruct}(hj0qhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,qubj )}(h h]h }(hj=qhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,qubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjNqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKqubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjPqmodnameN classnameNj,j/)}j2]j5)}j(jpsbc.v4l2_ctrl_clusterasbuh1hhj,qubj )}(h h]h }(hjnqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,qubj)}(hjh]h*}(hj|qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,qubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,qubj)}(hcontrolsh]hcontrols}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,qubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjpubeh}(h]h ]h"]h$]h&]hhuh1j`hjphhhjphMDubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjphhhjphMDubah}(h]jpah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjphMDhjphhubj/)}(hhh]h)}(h>Mark all controls in the cluster as belonging to that cluster.h]h>Mark all controls in the cluster as belonging to that cluster.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM>hjqhhubah}(h]h ]h"]h$]h&]uh1j.hjphhhjphMDubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjqjQjqjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``unsigned int ncontrols`` The number of controls in this cluster. ``struct v4l2_ctrl **controls`` The cluster control array of size **ncontrols**.h](h)}(h**Parameters**h]j`)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjqubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMBhjqubj)}(hhh](j)}(hC``unsigned int ncontrols`` The number of controls in this cluster. h](j)}(h``unsigned int ncontrols``h]j)}(hjrh]hunsigned int ncontrols}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMAhjqubj)}(hhh]h)}(h'The number of controls in this cluster.h]h'The number of controls in this cluster.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMAhjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhMAhjqubj)}(hP``struct v4l2_ctrl **controls`` The cluster control array of size **ncontrols**.h](j)}(h``struct v4l2_ctrl **controls``h]j)}(hj:rh]hstruct v4l2_ctrl **controls}(hjuubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhj:uubj)}(hhh]h)}(hJIf true, then all controls except the first auto control will be volatile.h]hJIf true, then all controls except the first auto control will be volatile.}(hjYuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMPhjVuubah}(h]h ]h"]h$]h&]uh1jhj:uubeh}(h]h ]h"]h$]h&]uh1jhjUuhMQhjxtubeh}(h]h ]h"]h$]h&]uh1jhj\tubh)}(h**Description**h]j`)}(hj|uh]h Description}(hj~uhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjzuubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMShj\tubh)}(hUse for control groups where one control selects some automatic feature and the other controls are only active whenever the automatic feature is turned off (manual mode). Typical examples: autogain vs gain, auto-whitebalance vs red and blue balance, etc.h]hUse for control groups where one control selects some automatic feature and the other controls are only active whenever the automatic feature is turned off (manual mode). Typical examples: autogain vs gain, auto-whitebalance vs red and blue balance, etc.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMShj\tubh)}(h,The behavior of such controls is as follows:h]h,The behavior of such controls is as follows:}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhj\tubh)}(hWhen the autofoo control is set to automatic, then any manual controls are set to inactive and any reads will call g_volatile_ctrl (if the control was marked volatile).h]hWhen the autofoo control is set to automatic, then any manual controls are set to inactive and any reads will call g_volatile_ctrl (if the control was marked volatile).}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMZhj\tubh)}(hWhen the autofoo control is set to manual, then any manual controls will be marked active, and any reads will just return the current value without going through g_volatile_ctrl.h]hWhen the autofoo control is set to manual, then any manual controls will be marked active, and any reads will just return the current value without going through g_volatile_ctrl.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM^hj\tubh)}(hIn addition, this function will set the ``V4L2_CTRL_FLAG_UPDATE`` flag on the autofoo control and ``V4L2_CTRL_FLAG_INACTIVE`` on the foo control(s) if autofoo is in auto mode.h](h(In addition, this function will set the }(hjuhhhNhNubj)}(h``V4L2_CTRL_FLAG_UPDATE``h]hV4L2_CTRL_FLAG_UPDATE}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh! flag on the autofoo control and }(hjuhhhNhNubj)}(h``V4L2_CTRL_FLAG_INACTIVE``h]hV4L2_CTRL_FLAG_INACTIVE}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh2 on the foo control(s) if autofoo is in auto mode.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMbhj\tubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_find (C function)c.v4l2_ctrl_findhNtauh1j hj hhhNhNubj )}(hhh](j )}(hIstruct v4l2_ctrl * v4l2_ctrl_find (struct v4l2_ctrl_handler *hdl, u32 id)h]j )}(hGstruct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)h](j )}(hjch]hstruct}(hj!vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMtubj )}(h h]h }(hj/vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvhhhj.vhMtubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hj@vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=vubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjBvmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_findsbc.v4l2_ctrl_findasbuh1hhjvhhhj.vhMtubj )}(h h]h }(hjavhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvhhhj.vhMtubj)}(hjh]h*}(hjovhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhj.vhMtubj )}(hv4l2_ctrl_findh]j)}(hj^vh]hv4l2_ctrl_find}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|vubah}(h]h ](jjeh"]h$]h&]hhuh1j hjvhhhj.vhMtubja)}(h'(struct v4l2_ctrl_handler *hdl, u32 id)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvubj )}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjvmodnameN classnameNj,j/)}j2]j\vc.v4l2_ctrl_findasbuh1hhjvubj )}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hhdlh]hhdl}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjvubjg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj wubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjwmodnameN classnameNj,j/)}j2]j\vc.v4l2_ctrl_findasbuh1hhjwubj )}(h h]h }(hj,whhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjwubj)}(hidh]hid}(hj:whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjvubeh}(h]h ]h"]h$]h&]hhuh1j`hjvhhhj.vhMtubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjvhhhj.vhMtubah}(h]jvah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj.vhMthjvhhubj/)}(hhh]h)}(h!Find a control with the given ID.h]h!Find a control with the given ID.}(hjdwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMlhjawhhubah}(h]h ]h"]h$]h&]uh1j.hjvhhhj.vhMtubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj|wjQj|wjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``u32 id`` The control ID to find. **Description** If **hdl** == NULL this will return NULL as well. Will lock the handler so do not use from inside :c:type:`v4l2_ctrl_ops`.h](h)}(h**Parameters**h]j`)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjwubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMphjwubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjwh]hstruct v4l2_ctrl_handler *hdl}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMnhjwubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMnhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMnhjwubj)}(h#``u32 id`` The control ID to find. h](j)}(h ``u32 id``h]j)}(hjwh]hu32 id}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMohjwubj)}(hhh]h)}(hThe control ID to find.h]hThe control ID to find.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMohjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMohjwubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j`)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjxubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMqhjwubh)}(hzIf **hdl** == NULL this will return NULL as well. Will lock the handler so do not use from inside :c:type:`v4l2_ctrl_ops`.h](hIf }(hj/xhhhNhNubj`)}(h**hdl**h]hhdl}(hj7xhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj/xubhX == NULL this will return NULL as well. Will lock the handler so do not use from inside }(hj/xhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjKxh]h v4l2_ctrl_ops}(hjMxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMqhj/xubh.}(hj/xhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhxhMqhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_activate (C function)c.v4l2_ctrl_activatehNtauh1j hj hhhNhNubj )}(hhh](j )}(h=void v4l2_ctrl_activate (struct v4l2_ctrl *ctrl, bool active)h]j )}(hyubj )}(h h]h }(hjOyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>yubj)}(hactiveh]hactive}(hj]yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>yubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjxubeh}(h]h ]h"]h$]h&]hhuh1j`hjxhhhjxhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjxhhhjxhMubah}(h]jxah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjxhMhjxhhubj/)}(hhh]h)}(h$Make the control active or inactive.h]h$Make the control active or inactive.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMwhjyhhubah}(h]h ]h"]h$]h&]uh1j.hjxhhhjxhMubeh}(hD]h ](jfunctioneh"]h$]h&]jOjjPjyjQjyjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control to (de)activate. ``bool active`` True if the control should become active. **Description** This sets or clears the V4L2_CTRL_FLAG_INACTIVE flag atomically. Does nothing if **ctrl** == NULL. This will usually be called from within the s_ctrl op. The V4L2_EVENT_CTRL event will be generated afterwards. This function assumes that the control handler is locked.h](h)}(h**Parameters**h]j`)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjyubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM{hjyubj)}(hhh](j)}(h8``struct v4l2_ctrl *ctrl`` The control to (de)activate. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjyh]hstruct v4l2_ctrl *ctrl}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMxhjyubj)}(hhh]h)}(hThe control to (de)activate.h]hThe control to (de)activate.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMxhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMxhjyubj)}(h:``bool active`` True if the control should become active. h](j)}(h``bool active``h]j)}(hjzh]h bool active}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMyhjyubj)}(hhh]h)}(h)True if the control should become active.h]h)True if the control should become active.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMyhjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjzhMyhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j`)}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj:zubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM{hjyubh)}(hThis sets or clears the V4L2_CTRL_FLAG_INACTIVE flag atomically. Does nothing if **ctrl** == NULL. This will usually be called from within the s_ctrl op. The V4L2_EVENT_CTRL event will be generated afterwards.h](hQThis sets or clears the V4L2_CTRL_FLAG_INACTIVE flag atomically. Does nothing if }(hjRzhhhNhNubj`)}(h**ctrl**h]hctrl}(hjZzhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjRzubhx == NULL. This will usually be called from within the s_ctrl op. The V4L2_EVENT_CTRL event will be generated afterwards.}(hjRzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM{hjyubh)}(h9This function assumes that the control handler is locked.h]h9This function assumes that the control handler is locked.}(hjszhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j __v4l2_ctrl_grab (C function)c.__v4l2_ctrl_grabhNtauh1j hj hhhNhNubj )}(hhh](j )}(hubj)}(hhh]h)}(hThe control to update.h]hThe control to update.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj;ubj)}(h?``u32 dims[V4L2_CTRL_MAX_DIMS]`` The control's new dimensions. h](j)}(h ``u32 dims[V4L2_CTRL_MAX_DIMS]``h]j)}(hj}h]hu32 dims[V4L2_CTRL_MAX_DIMS]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjwubj)}(hhh]h)}(hThe control's new dimensions.h]hThe control’s new dimensions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hUpdate the dimensions of an array control on the fly. The elements of the array are reset to their default value, even if the dimensions are unchanged.h]hUpdate the dimensions of an array control on the fly. The elements of the array are reset to their default value, even if the dimensions are unchanged.}(hjΊhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hBAn error is returned if **dims** is invalid for this control type.h](hAn error is returned if }(hj݊hhhNhNubj`)}(h**dims**h]hdims}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj݊ubh" is invalid for this control type.}(hj݊hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h[This function assumes that the control handler is not locked and will take the lock itself.h]h[This function assumes that the control handler is not locked and will take the lock itself.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h**Note**h]j`)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hcalling this function when the same control is used in pending requests is untested. It should work (a request with the wrong size of the control will drop that control silently), but it will be very confusing.h]hcalling this function when the same control is used in pending requests is untested. It should work (a request with the wrong size of the control will drop that control silently), but it will be very confusing.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_notify (C function)c.v4l2_ctrl_notifyhNtauh1j hj hhhNhNubj )}(hhh](j )}(hWvoid v4l2_ctrl_notify (struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)h]j )}(hVvoid v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)h](jm)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjPhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM%ubj )}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPhhhjbhM%ubj )}(hv4l2_ctrl_notifyh]j)}(hv4l2_ctrl_notifyh]hv4l2_ctrl_notify}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]hhuh1j hjPhhhjbhM%ubja)}(hA(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)h](jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jwsbc.v4l2_ctrl_notifyasbuh1hhjubj )}(h h]h }(hjϋhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj݋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hv4l2_ctrl_notify_fnc notifyh](h)}(hhh]j)}(hv4l2_ctrl_notify_fnch]hv4l2_ctrl_notify_fnc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jˋc.v4l2_ctrl_notifyasbuh1hhjubj )}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnotifyh]hnotify}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h void *privh](jm)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjGubj )}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hprivh]hpriv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjPhhhjbhM%ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjLhhhjbhM%ubah}(h]jGah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjbhM%hjIhhubj/)}(hhh]h)}(h0Function to set a notify callback for a control.h]h0Function to set a notify callback for a control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjIhhhjbhM%ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``v4l2_ctrl_notify_fnc notify`` The callback function. ``void *priv`` The callback private handle, passed as argument to the callback. **Description** This function sets a callback function for the control. If **ctrl** is NULL, then it will do nothing. If **notify** is NULL, then the notify callback will be removed. There can be only one notify. If another already exists, then a WARN_ON will be issued and the function will do nothing.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjŒhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjߌh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj݌ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjٌubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjٌubeh}(h]h ]h"]h$]h&]uh1jhjhMhj֌ubj)}(h7``v4l2_ctrl_notify_fnc notify`` The callback function. h](j)}(h``v4l2_ctrl_notify_fnc notify``h]j)}(hjh]hv4l2_ctrl_notify_fnc notify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe callback function.h]hThe callback function.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj֌ubj)}(hP``void *priv`` The callback private handle, passed as argument to the callback. h](j)}(h``void *priv``h]j)}(hjQh]h void *priv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjKubj)}(hhh]h)}(h@The callback private handle, passed as argument to the callback.h]h@The callback private handle, passed as argument to the callback.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhj֌ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hThis function sets a callback function for the control. If **ctrl** is NULL, then it will do nothing. If **notify** is NULL, then the notify callback will be removed.h](h;This function sets a callback function for the control. If }(hjhhhNhNubj`)}(h**ctrl**h]hctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubh& is NULL, then it will do nothing. If }(hjhhhNhNubj`)}(h **notify**h]hnotify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubh3 is NULL, then the notify callback will be removed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hxThere can be only one notify. If another already exists, then a WARN_ON will be issued and the function will do nothing.\h]hxThere can be only one notify. If another already exists, then a WARN_ON will be issued and the function will do nothing.}(hjՍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_get_name (C function)c.v4l2_ctrl_get_namehNtauh1j hj hhhNhNubj )}(hhh](j )}(h(const char * v4l2_ctrl_get_name (u32 id)h]j )}(h&const char *v4l2_ctrl_get_name(u32 id)h](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM0ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM0ubjm)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhjhM0ubj )}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM0ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0ubj )}(hv4l2_ctrl_get_nameh]j)}(hv4l2_ctrl_get_nameh]hv4l2_ctrl_get_name}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhM0ubja)}(h(u32 id)h]jg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjnmodnameN classnameNj,j/)}j2]j5)}j(jOsbc.v4l2_ctrl_get_nameasbuh1hhjeubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjeubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjaubah}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhM0ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhM0ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM0hjhhubj/)}(hhh]h)}(hGet the name of the controlh]hGet the name of the control}(hjĎhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM)hjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj܎jQj܎jRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``u32 id`` The control ID. **Description** This function returns the name of the given control ID or NULL if it isn't a known control.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM-hjubj)}(hhh]j)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM+hjubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj>ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM-hjubh)}(h[This function returns the name of the given control ID or NULL if it isn't a known control.h]h]This function returns the name of the given control ID or NULL if it isn’t a known control.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_get_menu (C function)c.v4l2_ctrl_get_menuhNtauh1j hj hhhNhNubj )}(hhh](j )}(h0const char * const * v4l2_ctrl_get_menu (u32 id)h]j )}(h-const char *const *v4l2_ctrl_get_menu(u32 id)h](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM:ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM:ubjm)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhjhM:ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM:ubj )}(hj8h]hconst}(hjʏhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM:ubj )}(h h]h }(hj׏hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM:ubj )}(hv4l2_ctrl_get_menuh]j)}(hv4l2_ctrl_get_menuh]hv4l2_ctrl_get_menu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhM:ubja)}(h(u32 id)h]jg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_get_menuasbuh1hhjubj )}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hidh]hid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj ubah}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhM:ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj}hhhjhM:ubah}(h]jxah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM:hjzhhubj/)}(hhh]h)}(h(Get the menu string array of the controlh]h(Get the menu string array of the control}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM3hjjhhubah}(h]h ]h"]h$]h&]uh1j.hjzhhhjhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``u32 id`` The control ID. **Description** This function returns the NULL-terminated menu string array name of the given control ID or NULL if it isn't a known menu control.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM7hjubj)}(hhh]j)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM5hjubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjǐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjÐhM5hjĐubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjÐhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM7hjubh)}(hThis function returns the NULL-terminated menu string array name of the given control ID or NULL if it isn't a known menu control.h]hThis function returns the NULL-terminated menu string array name of the given control ID or NULL if it isn’t a known menu control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_get_int_menu (C function)c.v4l2_ctrl_get_int_menuhNtauh1j hj hhhNhNubj )}(hhh](j )}(h5const s64 * v4l2_ctrl_get_int_menu (u32 id, u32 *len)h]j )}(h3const s64 *v4l2_ctrl_get_int_menu(u32 id, u32 *len)h](j )}(hj8h]hconst}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEubj )}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*hhhj;hMEubh)}(hhh]j)}(hs64h]hs64}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjOmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_get_int_menusbc.v4l2_ctrl_get_int_menuasbuh1hhj*hhhj;hMEubj )}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*hhhj;hMEubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj;hMEubj )}(hv4l2_ctrl_get_int_menuh]j)}(hjkh]hv4l2_ctrl_get_int_menu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj*hhhj;hMEubja)}(h(u32 id, u32 *len)h](jg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jic.v4l2_ctrl_get_int_menuasbuh1hhjubj )}(h h]h }(hjɑhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hidh]hid}(hjבhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hu32 *lenh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jic.v4l2_ctrl_get_int_menuasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj*hhhj;hMEubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj&hhhj;hMEubah}(h]j!ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj;hMEhj#hhubj/)}(hhh]h)}(h)Get the integer menu array of the controlh]h)Get the integer menu array of the control}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM=hjShhubah}(h]h ]h"]h$]h&]uh1j.hj#hhhj;hMEubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjnjQjnjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``u32 id`` The control ID. ``u32 *len`` The size of the integer array. **Description** This function returns the integer array of the given control ID or NULL if it if it isn't a known integer menu control.h](h)}(h**Parameters**h]j`)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjvubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMAhjrubj)}(hhh](j)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM?hjubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubj)}(h,``u32 *len`` The size of the integer array. h](j)}(h ``u32 *len``h]j)}(hjВh]hu32 *len}(hjҒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΒubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM@hjʒubj)}(hhh]h)}(hThe size of the integer array.h]hThe size of the integer array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjʒubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubeh}(h]h ]h"]h$]h&]uh1jhjrubh)}(h**Description**h]j`)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMBhjrubh)}(hwThis function returns the integer array of the given control ID or NULL if it if it isn't a known integer menu control.h]hyThis function returns the integer array of the given control ID or NULL if it if it isn’t a known integer menu control.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMBhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_g_ctrl (C function)c.v4l2_ctrl_g_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(h-s32 v4l2_ctrl_g_ctrl (struct v4l2_ctrl *ctrl)h]j )}(h,s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)h](h)}(hhh]j)}(hs32h]hs32}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjUmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_g_ctrlsbc.v4l2_ctrl_g_ctrlasbuh1hhjLhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMSubj )}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjLhhhjthMSubj )}(hv4l2_ctrl_g_ctrlh]j)}(hjqh]hv4l2_ctrl_g_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjLhhhjthMSubja)}(h(struct v4l2_ctrl *ctrl)h]jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj“modnameN classnameNj,j/)}j2]joc.v4l2_ctrl_g_ctrlasbuh1hhjubj )}(h h]h }(hjޓhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubah}(h]h ]h"]h$]h&]hhuh1j`hjLhhhjthMSubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjHhhhjthMSubah}(h]jCah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjthMShjEhhubj/)}(hhh]h)}(h@Helper function to get the control's value from within a driver.h]hBHelper function to get the control’s value from within a driver.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMHhj hhubah}(h]h ]h"]h$]h&]uh1j.hjEhhhjthMSubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj;jQj;jRjSjTuh1j hhhj hNhNubjV)}(hXD**Parameters** ``struct v4l2_ctrl *ctrl`` The control. **Description** This returns the control's value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for integer type controls only.h](h)}(h**Parameters**h]j`)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjCubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMLhj?ubj)}(hhh]j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjdh]hstruct v4l2_ctrl *ctrl}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMKhj^ubj)}(hhh]h)}(h The control.h]h The control.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMMhj?ubh)}(hThis returns the control's value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis returns the control’s value safely by going through the control framework. This function will lock the control’s handler, so it cannot be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjܔhMMhj?ubh)}(h0This function is for integer type controls only.h]h0This function is for integer type controls only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j __v4l2_ctrl_s_ctrl (C function)c.__v4l2_ctrl_s_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(h8int __v4l2_ctrl_s_ctrl (struct v4l2_ctrl *ctrl, s32 val)h]j )}(h7int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMaubj )}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj$hMaubj )}(h__v4l2_ctrl_s_ctrlh]j)}(h__v4l2_ctrl_s_ctrlh]h__v4l2_ctrl_s_ctrl}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhj$hMaubja)}(h!(struct v4l2_ctrl *ctrl, s32 val)h](jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOubj )}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjsmodnameN classnameNj,j/)}j2]j5)}j(j9sbc.__v4l2_ctrl_s_ctrlasbuh1hhjOubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjKubjg)}(hs32 valh](h)}(hhh]j)}(hs32h]hs32}(hjȕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŕubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjʕmodnameN classnameNj,j/)}j2]jc.__v4l2_ctrl_s_ctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hvalh]hval}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjKubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhj$hMaubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhj$hMaubah}(h]j ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj$hMahj hhubj/)}(hhh]h)}(h'Unlocked variant of v4l2_ctrl_s_ctrl().h]h'Unlocked variant of v4l2_ctrl_s_ctrl().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMVhjhhubah}(h]h ]h"]h$]h&]uh1j.hj hhhj$hMaubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj6jQj6jRjSjTuh1j hhhj hNhNubjV)}(hXu**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``s32 val`` The new value. **Description** This sets the control's new value safely by going through the control framework. This function assumes the control's handler is already locked, allowing it to be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for integer type controls only.h](h)}(h**Parameters**h]j`)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj>ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMZhj:ubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hj_h]hstruct v4l2_ctrl *ctrl}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhjYubj)}(hhh]h)}(h The control.h]h The control.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMXhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMXhjVubj)}(h``s32 val`` The new value. h](j)}(h ``s32 val``h]j)}(hjh]hs32 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMYhjubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j`)}(hjӖh]h Description}(hjՖhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjіubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM[hj:ubh)}(hThis sets the control's new value safely by going through the control framework. This function assumes the control's handler is already locked, allowing it to be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis sets the control’s new value safely by going through the control framework. This function assumes the control’s handler is already locked, allowing it to be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM[hjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM[hj:ubh)}(h0This function is for integer type controls only.h]h0This function is for integer type controls only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM_hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_s_ctrl (C function)c.v4l2_ctrl_s_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(h6int v4l2_ctrl_s_ctrl (struct v4l2_ctrl *ctrl, s32 val)h]j )}(h5int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)h](jm)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjFhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMoubj )}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFhhhjXhMoubj )}(hv4l2_ctrl_s_ctrlh]j)}(hv4l2_ctrl_s_ctrlh]hv4l2_ctrl_s_ctrl}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]hhuh1j hjFhhhjXhMoubja)}(h!(struct v4l2_ctrl *ctrl, s32 val)h](jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jmsbc.v4l2_ctrl_s_ctrlasbuh1hhjubj )}(h h]h }(hjŗhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjӗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hs32 valh](h)}(hhh]j)}(hs32h]hs32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_ctrl_s_ctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hvalh]hval}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjFhhhjXhMoubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjBhhhjXhMoubah}(h]j=ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjXhMohj?hhubj/)}(hhh]h)}(h@Helper function to set the control's value from within a driver.h]hBHelper function to set the control’s value from within a driver.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMdhjOhhubah}(h]h ]h"]h$]h&]uh1j.hj?hhhjXhMoubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjjQjjjRjSjTuh1j hhhj hNhNubjV)}(hXc**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``s32 val`` The new value. **Description** This sets the control's new value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for integer type controls only.h](h)}(h**Parameters**h]j`)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjrubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhhjnubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMfhjubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h``s32 val`` The new value. h](j)}(h ``s32 val``h]j)}(hj̘h]hs32 val}(hjΘhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʘubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMghjƘubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjƘubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j`)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMihjnubh)}(hThis sets the control's new value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis sets the control’s new value safely by going through the control framework. This function will lock the control’s handler, so it cannot be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hj'h]h v4l2_ctrl_ops}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMihjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMihjnubh)}(h0This function is for integer type controls only.h]h0This function is for integer type controls only.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMmhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_g_ctrl_int64 (C function)c.v4l2_ctrl_g_ctrl_int64hNtauh1j hj hhhNhNubj )}(hhh](j )}(h3s64 v4l2_ctrl_g_ctrl_int64 (struct v4l2_ctrl *ctrl)h]j )}(h2s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_g_ctrl_int64sbc.v4l2_ctrl_g_ctrl_int64asbuh1hhjzhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzhhhjhMubj )}(hv4l2_ctrl_g_ctrl_int64h]j)}(hjh]hv4l2_ctrl_g_ctrl_int64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjzhhhjhMubja)}(h(struct v4l2_ctrl *ctrl)h]jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjЙhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̙ubj )}(h h]h }(hjݙhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̙ubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_ctrl_g_ctrl_int64asbuh1hhj̙ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̙ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̙ubj)}(hctrlh]hctrl}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̙ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjșubah}(h]h ]h"]h$]h&]hhuh1j`hjzhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjvhhhjhMubah}(h]jqah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjshhubj/)}(hhh]h)}(hEHelper function to get a 64-bit control's value from within a driver.h]hGHelper function to get a 64-bit control’s value from within a driver.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM{hjNhhubah}(h]h ]h"]h$]h&]uh1j.hjshhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjijQjijRjSjTuh1j hhhj hNhNubjV)}(hXK**Parameters** ``struct v4l2_ctrl *ctrl`` The control. **Description** This returns the control's value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for 64-bit integer type controls only.h](h)}(h**Parameters**h]j`)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjqubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjmubj)}(hhh]j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM~hjubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]j`)}(hj͚h]h Description}(hjϚhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj˚ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjmubh)}(hThis returns the control's value safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis returns the control’s value safely by going through the control framework. This function will lock the control’s handler, so it cannot be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjmubh)}(h7This function is for 64-bit integer type controls only.h]h7This function is for 64-bit integer type controls only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j %__v4l2_ctrl_s_ctrl_int64 (C function)c.__v4l2_ctrl_s_ctrl_int64hNtauh1j hj hhhNhNubj )}(hhh](j )}(h>int __v4l2_ctrl_s_ctrl_int64 (struct v4l2_ctrl *ctrl, s64 val)h]j )}(h=int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val)h](jm)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj@hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@hhhjRhMubj )}(h__v4l2_ctrl_s_ctrl_int64h]j)}(h__v4l2_ctrl_s_ctrl_int64h]h__v4l2_ctrl_s_ctrl_int64}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]hhuh1j hj@hhhjRhMubja)}(h!(struct v4l2_ctrl *ctrl, s64 val)h](jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jgsbc.__v4l2_ctrl_s_ctrl_int64asbuh1hhj}ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj)}(hjh]h*}(hj͛hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hctrlh]hctrl}(hjڛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjyubjg)}(hs64 valh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.__v4l2_ctrl_s_ctrl_int64asbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hvalh]hval}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjyubeh}(h]h ]h"]h$]h&]hhuh1j`hj@hhhjRhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj<hhhjRhMubah}(h]j7ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjRhMhj9hhubj/)}(hhh]h)}(h-Unlocked variant of v4l2_ctrl_s_ctrl_int64().h]h-Unlocked variant of v4l2_ctrl_s_ctrl_int64().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1j.hj9hhhjRhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjdjQjdjRjSjTuh1j hhhj hNhNubjV)}(hX|**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``s64 val`` The new value. **Description** This sets the control's new value safely by going through the control framework. This function assumes the control's handler is already locked, allowing it to be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for 64-bit integer type controls only.h](h)}(h**Parameters**h]j`)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjlubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``s64 val`` The new value. h](j)}(h ``s64 val``h]j)}(hjƜh]hs64 val}(hjȜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĜubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjߜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjۜhMhjܜubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۜhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhubh)}(hThis sets the control's new value safely by going through the control framework. This function assumes the control's handler is already locked, allowing it to be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis sets the control’s new value safely by going through the control framework. This function assumes the control’s handler is already locked, allowing it to be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hj!h]h v4l2_ctrl_ops}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hMhjhubh)}(h7This function is for 64-bit integer type controls only.h]h7This function is for 64-bit integer type controls only.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_s_ctrl_int64 (C function)c.v4l2_ctrl_s_ctrl_int64hNtauh1j hj hhhNhNubj )}(hhh](j )}(hubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhj/hMubja)}(hA(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h](jg)}(hstruct v4l2_ctrl *ctrlh](j )}(hjch]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj )}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj~modnameN classnameNj,j/)}j2]j5)}j(jDsbc.v4l2_ctrl_s_ctrl_compoundasbuh1hhjZubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjVubjg)}(henum v4l2_ctrl_type typeh](j )}(hj|8h]henum}(hjЧhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̧ubj )}(h h]h }(hjݧhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̧ubh)}(hhh]j)}(hv4l2_ctrl_typeh]hv4l2_ctrl_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_ctrl_s_ctrl_compoundasbuh1hhj̧ubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̧ubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̧ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjVubjg)}(h const void *ph](j )}(hj8h]hconst}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj )}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubjm)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj/ubj )}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hp}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjVubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhj/hMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhj/hMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj/hMhjhhubj/)}(hhh]h)}(h?Helper function to set a compound control from within a driver.h]h?Helper function to set a compound control from within a driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``enum v4l2_ctrl_type type`` The type of the data. ``const void *p`` The new compound payload. **Description** This sets the control's new compound payload safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions. This function is for compound type controls only.h](h)}(h**Parameters**h]j`)}(hj¨h]h Parameters}(hjĨhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjh]hstruct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߨubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjۨubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjۨubeh}(h]h ]h"]h$]h&]uh1jhjhMhjبubj)}(h3``enum v4l2_ctrl_type type`` The type of the data. h](j)}(h``enum v4l2_ctrl_type type``h]j)}(hjh]henum v4l2_ctrl_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe type of the data.h]hThe type of the data.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjبubj)}(h,``const void *p`` The new compound payload. h](j)}(h``const void *p``h]j)}(hjSh]h const void *p}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjMubj)}(hhh]h)}(hThe new compound payload.h]hThe new compound payload.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjبubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hThis sets the control's new compound payload safely by going through the control framework. This function will lock the control's handler, so it cannot be used from within the :c:type:`v4l2_ctrl_ops` functions.h](hThis sets the control’s new compound payload safely by going through the control framework. This function will lock the control’s handler, so it cannot be used from within the }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj˩hMhjubh)}(h1This function is for compound type controls only.h]h1This function is for compound type controls only.}(hj֩hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_replace (C function)c.v4l2_ctrl_replacehNtauh1j hj hhhNhNubj )}(hhh](j )}(hMvoid v4l2_ctrl_replace (struct v4l2_event *old, const struct v4l2_event *new)h]j )}(hLvoid v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hv4l2_ctrl_replaceh]j)}(hv4l2_ctrl_replaceh]hv4l2_ctrl_replace}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMubja)}(h6(struct v4l2_event *old, const struct v4l2_event *new)h](jg)}(hstruct v4l2_event *oldh](j )}(hjch]hstruct}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubj )}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubh)}(hhh]j)}(h v4l2_eventh]h v4l2_event}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjbmodnameN classnameNj,j/)}j2]j5)}j(j(sbc.v4l2_ctrl_replaceasbuh1hhj>ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj:ubjg)}(hconst struct v4l2_event *newh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjϪhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjܪhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j|c.v4l2_ctrl_replaceasbuh1hhjubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnewh]hnew}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj:ubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(hwFunction to be used as a callback to :c:type:`struct v4l2_subscribed_event_ops ` replace\(\)h](h%Function to be used as a callback to }(hjPhhhNhNubh)}(hF:c:type:`struct v4l2_subscribed_event_ops `h]j)}(hjZh]h struct v4l2_subscribed_event_ops}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,j/)}j2]j|c.v4l2_ctrl_replaceasbjv4l2_subscribed_event_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhKhjPubh replace()}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjMhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``struct v4l2_event *old`` pointer to struct :c:type:`v4l2_event` with the reported event; ``const struct v4l2_event *new`` pointer to struct :c:type:`v4l2_event` with the modified event;h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh](j)}(h[``struct v4l2_event *old`` pointer to struct :c:type:`v4l2_event` with the reported event; h](j)}(h``struct v4l2_event *old``h]j)}(hjh]hstruct v4l2_event *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the reported event;h](hpointer to struct }(hjӫhhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjݫh]h v4l2_event}(hj߫hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj۫ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_eventuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjӫubh with the reported event;}(hjӫhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjЫubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϫhM hjubj)}(h```const struct v4l2_event *new`` pointer to struct :c:type:`v4l2_event` with the modified event;h](j)}(h ``const struct v4l2_event *new``h]j)}(hjh]hconst struct v4l2_event *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the modified event;h](hpointer to struct }(hj0hhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hj:h]h v4l2_event}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_eventuh1hhj,hMhj0ubh with the modified event;}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_merge (C function)c.v4l2_ctrl_mergehNtauh1j hj hhhNhNubj )}(hhh](j )}(hKvoid v4l2_ctrl_merge (const struct v4l2_event *old, struct v4l2_event *new)h]j )}(hJvoid v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hv4l2_ctrl_mergeh]j)}(hv4l2_ctrl_mergeh]hv4l2_ctrl_merge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMubja)}(h6(const struct v4l2_event *old, struct v4l2_event *new)h](jg)}(hconst struct v4l2_event *oldh](j )}(hj8h]hconst}(hjЬhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̬ubj )}(h h]h }(hjݬhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̬ubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̬ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̬ubh)}(hhh]j)}(h v4l2_eventh]h v4l2_event}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj modnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_mergeasbuh1hhj̬ubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj̬ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̬ubj)}(holdh]hold}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̬ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjȬubjg)}(hstruct v4l2_event *newh](j )}(hjch]hstruct}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubj )}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubh)}(hhh]j)}(h v4l2_eventh]h v4l2_event}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj}modnameN classnameNj,j/)}j2]j%c.v4l2_ctrl_mergeasbuh1hhjYubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjȬubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(htFunction to be used as a callback to :c:type:`struct v4l2_subscribed_event_ops ` merge(\)h](h%Function to be used as a callback to }(hjޭhhhNhNubh)}(hF:c:type:`struct v4l2_subscribed_event_ops `h]j)}(hjh]h struct v4l2_subscribed_event_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,j/)}j2]j%c.v4l2_ctrl_mergeasbjv4l2_subscribed_event_opsuh1hhj|hKhjޭubh merge()}(hjޭhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjۭhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``const struct v4l2_event *old`` pointer to struct :c:type:`v4l2_event` with the reported event; ``struct v4l2_event *new`` pointer to struct :c:type:`v4l2_event` with the merged event;h](h)}(h**Parameters**h]j`)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj&ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj"ubj)}(hhh](j)}(ha``const struct v4l2_event *old`` pointer to struct :c:type:`v4l2_event` with the reported event; h](j)}(h ``const struct v4l2_event *old``h]j)}(hjGh]hconst struct v4l2_event *old}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjAubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the reported event;h](hpointer to struct }(hj`hhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjjh]h v4l2_event}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_eventuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj`ubh with the reported event;}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubj)}(hX``struct v4l2_event *new`` pointer to struct :c:type:`v4l2_event` with the merged event;h](j)}(h``struct v4l2_event *new``h]j)}(hjh]hstruct v4l2_event *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h=pointer to struct :c:type:`v4l2_event` with the merged event;h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjǮh]h v4l2_event}(hjɮhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjŮubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_eventuh1hhjhMhjubh with the merged event;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !v4l2_ctrl_log_status (C function)c.v4l2_ctrl_log_statushNtauh1j hj hhhNhNubj )}(hhh](j )}(h6int v4l2_ctrl_log_status (struct file *file, void *fh)h]j )}(h5int v4l2_ctrl_log_status(struct file *file, void *fh)h](jm)}(hinth]hint}(hj hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM(ubj )}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj.hM(ubj )}(hv4l2_ctrl_log_statush]j)}(hv4l2_ctrl_log_statush]hv4l2_ctrl_log_status}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhj.hM(ubja)}(h(struct file *file, void *fh)h](jg)}(hstruct file *fileh](j )}(hjch]hstruct}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubj )}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubh)}(hhh]j)}(hfileh]hfile}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj}modnameN classnameNj,j/)}j2]j5)}j(jCsbc.v4l2_ctrl_log_statusasbuh1hhjYubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubjg)}(hvoid *fhh](jm)}(hvoidh]hvoid}(hjϯhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj˯ubj )}(h h]h }(hjݯhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj˯ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˯ubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˯ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjUubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhj.hM(ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhj.hM(ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj.hM(hjhhubj/)}(hhh]h)}(h8helper function to implement ``VIDIOC_LOG_STATUS`` ioctlh](hhelper function to implement }(hj"hhhNhNubj)}(h``VIDIOC_LOG_STATUS``h]hVIDIOC_LOG_STATUS}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh ioctl}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhj.hM(ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjLjQjLjRjSjTuh1j hhhj hNhNubjV)}(hXO**Parameters** ``struct file *file`` pointer to struct file ``void *fh`` unused. Kept just to be compatible to the arguments expected by :c:type:`struct v4l2_ioctl_ops `.vidioc_log_status. **Description** Can be used as a vidioc_log_status function that just dumps all controls associated with the filehandle.h](h)}(h**Parameters**h]j`)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjTubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM#hjPubj)}(hhh](j)}(h-``struct file *file`` pointer to struct file h](j)}(h``struct file *file``h]j)}(hjuh]hstruct file *file}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM!hjoubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjlubj)}(h``void *fh`` unused. Kept just to be compatible to the arguments expected by :c:type:`struct v4l2_ioctl_ops `.vidioc_log_status. h](j)}(h ``void *fh``h]j)}(hjh]hvoid *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM#hjubj)}(hhh]h)}(hunused. Kept just to be compatible to the arguments expected by :c:type:`struct v4l2_ioctl_ops `.vidioc_log_status.h](h@unused. Kept just to be compatible to the arguments expected by }(hjǰhhhNhNubh)}(h0:c:type:`struct v4l2_ioctl_ops `h]j)}(hjѰh]hstruct v4l2_ioctl_ops}(hjӰhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjϰubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ioctl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjǰubh.vidioc_log_status.}(hjǰhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM"hjİubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjðhM#hjlubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j`)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM%hjPubh)}(hhCan be used as a vidioc_log_status function that just dumps all controls associated with the filehandle.h]hhCan be used as a vidioc_log_status function that just dumps all controls associated with the filehandle.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM%hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j &v4l2_ctrl_subscribe_event (C function)c.v4l2_ctrl_subscribe_eventhNtauh1j hj hhhNhNubj )}(hhh](j )}(h]int v4l2_ctrl_subscribe_event (struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h]j )}(h\int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](jm)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjNhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM4ubj )}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjNhhhj`hM4ubj )}(hv4l2_ctrl_subscribe_eventh]j)}(hv4l2_ctrl_subscribe_eventh]hv4l2_ctrl_subscribe_event}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]hhuh1j hjNhhhj`hM4ubja)}(h?(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](jg)}(hstruct v4l2_fh *fhh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jusbc.v4l2_ctrl_subscribe_eventasbuh1hhjubj )}(h h]h }(hjͱhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj۱hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h)const struct v4l2_event_subscription *subh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj<modnameN classnameNj,j/)}j2]jɱc.v4l2_ctrl_subscribe_eventasbuh1hhjubj )}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsubh]hsub}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjNhhhj`hM4ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjJhhhj`hM4ubah}(h]jEah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj`hM4hjGhhubj/)}(hhh]h)}(hSubscribes to an eventh]hSubscribes to an event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM+hjhhubah}(h]h ]h"]h$]h&]uh1j.hjGhhhj`hM4ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX)**Parameters** ``struct v4l2_fh *fh`` pointer to struct v4l2_fh ``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` **Description** Can be used as a vidioc_subscribe_event function that just subscribes control events.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM/hjubj)}(hhh](j)}(h1``struct v4l2_fh *fh`` pointer to struct v4l2_fh h](j)}(h``struct v4l2_fh *fh``h]j)}(hj޲h]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܲubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM.hjزubj)}(hhh]h)}(hpointer to struct v4l2_fhh]hpointer to struct v4l2_fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjزubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjղubj)}(h|``const struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription ` h](j)}(h-``const struct v4l2_event_subscription *sub``h]j)}(hjh]h)const struct v4l2_event_subscription *sub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM/hjubj)}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj0hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]j)}(hj:h]hstruct v4l2_event_subscription}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_event_subscriptionuh1hhj,hM/hj0ubeh}(h]h ]h"]h$]h&]uh1hhj,hM/hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM/hjղubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjoubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM1hjubh)}(hUCan be used as a vidioc_subscribe_event function that just subscribes control events.h]hUCan be used as a vidioc_subscribe_event function that just subscribes control events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_ctrl_poll (C function)c.v4l2_ctrl_pollhNtauh1j hj hhhNhNubj )}(hhh](j )}(hK__poll_t v4l2_ctrl_poll (struct file *file, struct poll_table_struct *wait)h]j )}(hJ__poll_t v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)h](h)}(hhh]j)}(h__poll_th]h__poll_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_pollsbc.v4l2_ctrl_pollasbuh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM>ubj )}(h h]h }(hj۳hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjڳhM>ubj )}(hv4l2_ctrl_pollh]j)}(hj׳h]hv4l2_ctrl_poll}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjڳhM>ubja)}(h3(struct file *file, struct poll_table_struct *wait)h](jg)}(hstruct file *fileh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hfileh]hfile}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj(modnameN classnameNj,j/)}j2]jճc.v4l2_ctrl_pollasbuh1hhjubj )}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfileh]hfile}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct poll_table_struct *waith](j )}(hjch]hstruct}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjtubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjtubh)}(hhh]j)}(hpoll_table_structh]hpoll_table_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jճc.v4l2_ctrl_pollasbuh1hhjtubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjtubj)}(hjh]h*}(hj´hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hwaith]hwait}(hjϴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjڳhM>ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjڳhM>ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjڳhM>hjhhubj/)}(hhh]h)}(hSfunction to be used as a callback to the poll() That just polls for control events.h]hSfunction to be used as a callback to the poll() That just polls for control events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjڳhM>ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``struct file *file`` pointer to struct file ``struct poll_table_struct *wait`` pointer to struct poll_table_structh](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM<hjubj)}(hhh](j)}(h-``struct file *file`` pointer to struct file h](j)}(h``struct file *file``h]j)}(hj:h]hstruct file *file}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM;hj4ubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM;hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM;hj1ubj)}(hF``struct poll_table_struct *wait`` pointer to struct poll_table_structh](j)}(h"``struct poll_table_struct *wait``h]j)}(hjsh]hstruct poll_table_struct *wait}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM=hjmubj)}(hhh]h)}(h#pointer to struct poll_table_structh]h#pointer to struct poll_table_struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM<hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM=hj1ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j $v4l2_ctrl_request_setup (C function)c.v4l2_ctrl_request_setuphNtauh1j hj hhhNhNubj )}(hhh](j )}(hYint v4l2_ctrl_request_setup (struct media_request *req, struct v4l2_ctrl_handler *parent)h]j )}(hXint v4l2_ctrl_request_setup(struct media_request *req, struct v4l2_ctrl_handler *parent)h](jm)}(hinth]hint}(hj͵hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjɵhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMKubj )}(h h]h }(hjܵhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjɵhhhj۵hMKubj )}(hv4l2_ctrl_request_setuph]j)}(hv4l2_ctrl_request_setuph]hv4l2_ctrl_request_setup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjɵhhhj۵hMKubja)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](jg)}(hstruct media_request *reqh](j )}(hjch]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h media_requesth]h media_request}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj*modnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_request_setupasbuh1hhjubj )}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hreqh]hreq}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h struct v4l2_ctrl_handler *parenth](j )}(hjch]hstruct}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjxubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjxubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jDc.v4l2_ctrl_request_setupasbuh1hhjxubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjxubj)}(hjh]h*}(hjƶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hparenth]hparent}(hjӶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjɵhhhj۵hMKubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjŵhhhj۵hMKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj۵hMKhjµhhubj/)}(hhh]h)}(h4helper function to apply control values in a requesth]h4helper function to apply control values in a request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1j.hjµhhhj۵hMKubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct media_request *req`` The request ``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) **Description** This is a helper function to call the control handler's s_ctrl callback with the control values contained in the request. Do note that this approach of applying control values in a request is only applicable to memory-to-memory devices.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhjubj)}(hhh](j)}(h*``struct media_request *req`` The request h](j)}(h``struct media_request *req``h]j)}(hj>h]hstruct media_request *req}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMChj8ubj)}(hhh]h)}(h The requesth]h The request}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMChjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMChj5ubj)}(hh``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) h](j)}(h$``struct v4l2_ctrl_handler *parent``h]j)}(hjwh]h struct v4l2_ctrl_handler *parent}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMDhjqubj)}(hhh]h)}(hBThe parent control handler ('priv' in media_request_object_find())h]hFThe parent control handler (‘priv’ in media_request_object_find())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMDhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMFhjubh)}(hThis is a helper function to call the control handler's s_ctrl callback with the control values contained in the request. Do note that this approach of applying control values in a request is only applicable to memory-to-memory devices.h]hThis is a helper function to call the control handler’s s_ctrl callback with the control values contained in the request. Do note that this approach of applying control values in a request is only applicable to memory-to-memory devices.}(hjȷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'v4l2_ctrl_request_complete (C function)c.v4l2_ctrl_request_completehNtauh1j hj hhhNhNubj )}(hhh](j )}(h]void v4l2_ctrl_request_complete (struct media_request *req, struct v4l2_ctrl_handler *parent)h]j )}(h\void v4l2_ctrl_request_complete(struct media_request *req, struct v4l2_ctrl_handler *parent)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM\ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM\ubj )}(hv4l2_ctrl_request_completeh]j)}(hv4l2_ctrl_request_completeh]hv4l2_ctrl_request_complete}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhM\ubja)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](jg)}(hstruct media_request *reqh](j )}(hjch]hstruct}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj )}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubh)}(hhh]j)}(h media_requesth]h media_request}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjTmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_request_completeasbuh1hhj0ubj )}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,ubjg)}(h struct v4l2_ctrl_handler *parenth](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjĸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjƸmodnameN classnameNj,j/)}j2]jnc.v4l2_ctrl_request_completeasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,ubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhM\ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhM\ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM\hjhhubj/)}(hhh]h)}(h)Complete a control handler request objecth]h)Complete a control handler request object}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMOhj$hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhM\ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj?jQj?jRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct media_request *req`` The request ``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) **Description** This function is to be called on each control handler that may have had a request object associated with it, i.e. control handlers of a driver that supports requests. The function first obtains the values of any volatile controls in the control handler and attach them to the request. Then, the function completes the request object.h](h)}(h**Parameters**h]j`)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjGubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMShjCubj)}(hhh](j)}(h*``struct media_request *req`` The request h](j)}(h``struct media_request *req``h]j)}(hjhh]hstruct media_request *req}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhjbubj)}(hhh]h)}(h The requesth]h The request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMQhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMQhj_ubj)}(hh``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) h](j)}(h$``struct v4l2_ctrl_handler *parent``h]j)}(hjh]h struct v4l2_ctrl_handler *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMRhjubj)}(hhh]h)}(hBThe parent control handler ('priv' in media_request_object_find())h]hFThe parent control handler (‘priv’ in media_request_object_find())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j`)}(hjܹh]h Description}(hj޹hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjڹubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMThjCubh)}(hThis function is to be called on each control handler that may have had a request object associated with it, i.e. control handlers of a driver that supports requests.h]hThis function is to be called on each control handler that may have had a request object associated with it, i.e. control handlers of a driver that supports requests.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMThjCubh)}(hThe function first obtains the values of any volatile controls in the control handler and attach them to the request. Then, the function completes the request object.h]hThe function first obtains the values of any volatile controls in the control handler and attach them to the request. Then, the function completes the request object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'v4l2_ctrl_request_hdl_find (C function)c.v4l2_ctrl_request_hdl_findhNtauh1j hj hhhNhNubj )}(hhh](j )}(hsstruct v4l2_ctrl_handler * v4l2_ctrl_request_hdl_find (struct media_request *req, struct v4l2_ctrl_handler *parent)h]j )}(hqstruct v4l2_ctrl_handler *v4l2_ctrl_request_hdl_find(struct media_request *req, struct v4l2_ctrl_handler *parent)h](j )}(hjch]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMqubj )}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,hhhj=hMqubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjQmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_request_hdl_findsbc.v4l2_ctrl_request_hdl_findasbuh1hhj,hhhj=hMqubj )}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,hhhj=hMqubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj=hMqubj )}(hv4l2_ctrl_request_hdl_findh]j)}(hjmh]hv4l2_ctrl_request_hdl_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj,hhhj=hMqubja)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](jg)}(hstruct media_request *reqh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h media_requesth]h media_request}(hjȺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjźubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjʺmodnameN classnameNj,j/)}j2]jkc.v4l2_ctrl_request_hdl_findasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h struct v4l2_ctrl_handler *parenth](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj:modnameN classnameNj,j/)}j2]jkc.v4l2_ctrl_request_hdl_findasbuh1hhjubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj,hhhj=hMqubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj(hhhj=hMqubah}(h]j#ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hj=hMqhj%hhubj/)}(hhh]h)}(h'Find the control handler in the requesth]h'Find the control handler in the request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1j.hj%hhhj=hMqubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct media_request *req`` The request ``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) **Description** This function finds the control handler in the request. It may return NULL if not found. When done, you must call v4l2_ctrl_request_hdl_put() with the returned handler pointer. If the request is not in state VALIDATING or QUEUED, then this function will always return NULL. Note that in state VALIDATING the req_queue_mutex is held, so no objects can be added or deleted from the request. In state QUEUED it is the driver that will have to ensure this.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMdhjubj)}(hhh](j)}(h*``struct media_request *req`` The request h](j)}(h``struct media_request *req``h]j)}(hjܻh]hstruct media_request *req}(hj޻hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڻubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMbhjֻubj)}(hhh]h)}(h The requesth]h The request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjֻubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjӻubj)}(hh``struct v4l2_ctrl_handler *parent`` The parent control handler ('priv' in media_request_object_find()) h](j)}(h$``struct v4l2_ctrl_handler *parent``h]j)}(hjh]h struct v4l2_ctrl_handler *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMchjubj)}(hhh]h)}(hBThe parent control handler ('priv' in media_request_object_find())h]hFThe parent control handler (‘priv’ in media_request_object_find())}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMchj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMchjӻubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMehjubh)}(hThis function finds the control handler in the request. It may return NULL if not found. When done, you must call v4l2_ctrl_request_hdl_put() with the returned handler pointer.h]hThis function finds the control handler in the request. It may return NULL if not found. When done, you must call v4l2_ctrl_request_hdl_put() with the returned handler pointer.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMehjubh)}(h`If the request is not in state VALIDATING or QUEUED, then this function will always return NULL.h]h`If the request is not in state VALIDATING or QUEUED, then this function will always return NULL.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMihjubh)}(hrNote that in state VALIDATING the req_queue_mutex is held, so no objects can be added or deleted from the request.h]hrNote that in state VALIDATING the req_queue_mutex is held, so no objects can be added or deleted from the request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMlhjubh)}(h?In state QUEUED it is the driver that will have to ensure this.h]h?In state QUEUED it is the driver that will have to ensure this.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j &v4l2_ctrl_request_hdl_put (C function)c.v4l2_ctrl_request_hdl_puthNtauh1j hj hhhNhNubj )}(hhh](j )}(h>void v4l2_ctrl_request_hdl_put (struct v4l2_ctrl_handler *hdl)h]j )}(h=void v4l2_ctrl_request_hdl_put(struct v4l2_ctrl_handler *hdl)h](jm)}(hvoidh]hvoid}(hj¼hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM|ubj )}(h h]h }(hjѼhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjмhM|ubj )}(hv4l2_ctrl_request_hdl_puth]j)}(hv4l2_ctrl_request_hdl_puth]hv4l2_ctrl_request_hdl_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߼ubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjмhM|ubja)}(h(struct v4l2_ctrl_handler *hdl)h]jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_request_hdl_putasbuh1hhjubj )}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubah}(h]h ]h"]h$]h&]hhuh1j`hjhhhjмhM|ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjмhM|ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjмhM|hjhhubj/)}(hhh]h)}(hPut the control handlerh]hPut the control handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMuhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjмhM|ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``struct v4l2_ctrl_handler *hdl`` Put this control handler **Description** This function released the control handler previously obtained from' v4l2_ctrl_request_hdl_find().h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMyhjubj)}(hhh]j)}(h;``struct v4l2_ctrl_handler *hdl`` Put this control handler h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjýh]hstruct v4l2_ctrl_handler *hdl}(hjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMwhjubj)}(hhh]h)}(hPut this control handlerh]hPut this control handler}(hjܽhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjؽhMwhjٽubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؽhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMyhjubh)}(hbThis function released the control handler previously obtained from' v4l2_ctrl_request_hdl_find().h]hdThis function released the control handler previously obtained from’ v4l2_ctrl_request_hdl_find().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j ,v4l2_ctrl_request_hdl_ctrl_find (C function)!c.v4l2_ctrl_request_hdl_ctrl_findhNtauh1j hj hhhNhNubj )}(hhh](j )}(hZstruct v4l2_ctrl * v4l2_ctrl_request_hdl_ctrl_find (struct v4l2_ctrl_handler *hdl, u32 id)h]j )}(hXstruct v4l2_ctrl *v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)h](j )}(hjch]hstruct}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhjPhMubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjdmodnameN classnameNj,j/)}j2]j5)}j(v4l2_ctrl_request_hdl_ctrl_findsb!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhj?hhhjPhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhjPhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubj )}(hv4l2_ctrl_request_hdl_ctrl_findh]j)}(hjh]hv4l2_ctrl_request_hdl_ctrl_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj?hhhjPhMubja)}(h'(struct v4l2_ctrl_handler *hdl, u32 id)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjʾhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj۾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؾubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjݾmodnameN classnameNj,j/)}j2]j~!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hu32 idh](h)}(hhh]j)}(hu32h]hu32}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj2modnameN classnameNj,j/)}j2]j~!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhj)ubj )}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj)}(hidh]hid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj?hhhjPhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj;hhhjPhMubah}(h]j6ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjPhMhj8hhubj/)}(hhh]h)}(h!Find a control with the given ID.h]h!Find a control with the given ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hj8hhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler from the request. ``u32 id`` The ID of the control to find. **Description** This function returns a pointer to the control if this control is part of the request or NULL otherwise.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hH``struct v4l2_ctrl_handler *hdl`` The control handler from the request. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjǿh]hstruct v4l2_ctrl_handler *hdl}(hjɿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjſubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h%The control handler from the request.h]h%The control handler from the request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܿhMhjݿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܿhMhjubj)}(h*``u32 id`` The ID of the control to find. h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe ID of the control to find.h]hThe ID of the control to find.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj9ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(hhThis function returns a pointer to the control if this control is part of the request or NULL otherwise.h]hhThis function returns a pointer to the control if this control is part of the request or NULL otherwise.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_queryctrl (C function)c.v4l2_queryctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(hMint v4l2_queryctrl (struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)h]j )}(hLint v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj|hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|hhhjhMubj )}(hv4l2_queryctrlh]j)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj|hhhjhMubja)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_queryctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_queryctrl *qch](j )}(hjch]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj )}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubh)}(hhh]j)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjOmodnameN classnameNj,j/)}j2]jc.v4l2_queryctrlasbuh1hhj+ubj )}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj|hhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjxhhhjhMubah}(h]jsah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjuhhubj/)}(hhh]h)}(hMHelper function to implement :ref:`VIDIOC_QUERYCTRL ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h*:ref:`VIDIOC_QUERYCTRL `h]hinline)}(hjh]hVIDIOC_QUERYCTRL}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_queryctrluh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct v4l2_queryctrl *qc`` pointer to :c:type:`struct v4l2_queryctrl ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hj0hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hj:h]hstruct v4l2_ctrl_handler}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhj,hMhj0ubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(hZ``struct v4l2_queryctrl *qc`` pointer to :c:type:`struct v4l2_queryctrl ` h](j)}(h``struct v4l2_queryctrl *qc``h]j)}(hjoh]hstruct v4l2_queryctrl *qc}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjiubj)}(hhh]h)}(h;pointer to :c:type:`struct v4l2_queryctrl `h](h pointer to }(hjhhhNhNubh)}(h0:c:type:`struct v4l2_queryctrl `h]j)}(hjh]hstruct v4l2_queryctrl}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_queryctrluh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 2v4l2_query_ext_ctrl_to_v4l2_queryctrl (C function)'c.v4l2_query_ext_ctrl_to_v4l2_queryctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(hnvoid v4l2_query_ext_ctrl_to_v4l2_queryctrl (struct v4l2_queryctrl *to, const struct v4l2_query_ext_ctrl *from)h]j )}(hmvoid v4l2_query_ext_ctrl_to_v4l2_queryctrl(struct v4l2_queryctrl *to, const struct v4l2_query_ext_ctrl *from)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhjhMubj )}(h%v4l2_query_ext_ctrl_to_v4l2_queryctrlh]j)}(h%v4l2_query_ext_ctrl_to_v4l2_queryctrlh]h%v4l2_query_ext_ctrl_to_v4l2_queryctrl}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj hhhjhMubja)}(hC(struct v4l2_queryctrl *to, const struct v4l2_query_ext_ctrl *from)h](jg)}(hstruct v4l2_queryctrl *toh](j )}(hjch]hstruct}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj )}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubh)}(hhh]j)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjkmodnameN classnameNj,j/)}j2]j5)}j(j1sb'c.v4l2_query_ext_ctrl_to_v4l2_queryctrlasbuh1hhjGubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(htoh]hto}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjCubjg)}(h&const struct v4l2_query_ext_ctrl *fromh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j'c.v4l2_query_ext_ctrl_to_v4l2_queryctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfromh]hfrom}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjCubeh}(h]h ]h"]h$]h&]hhuh1j`hj hhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(hConvert a qec to qe.h]hConvert a qec to qe.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjqjQjqjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_queryctrl *to`` The v4l2_queryctrl to write to. ``const struct v4l2_query_ext_ctrl *from`` The v4l2_query_ext_ctrl to read from. **Description** This function is a helper to convert a v4l2_query_ext_ctrl into a v4l2_queryctrl.h](h)}(h**Parameters**h]j`)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjyubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjuubj)}(hhh](j)}(h>``struct v4l2_queryctrl *to`` The v4l2_queryctrl to write to. h](j)}(h``struct v4l2_queryctrl *to``h]j)}(hjh]hstruct v4l2_queryctrl *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe v4l2_queryctrl to write to.h]hThe v4l2_queryctrl to write to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hQ``const struct v4l2_query_ext_ctrl *from`` The v4l2_query_ext_ctrl to read from. h](j)}(h*``const struct v4l2_query_ext_ctrl *from``h]j)}(hjh]h&const struct v4l2_query_ext_ctrl *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h%The v4l2_query_ext_ctrl to read from.h]h%The v4l2_query_ext_ctrl to read from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjuubh)}(hQThis function is a helper to convert a v4l2_query_ext_ctrl into a v4l2_queryctrl.h]hQThis function is a helper to convert a v4l2_query_ext_ctrl into a v4l2_queryctrl.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_query_ext_ctrl (C function)c.v4l2_query_ext_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(hWint v4l2_query_ext_ctrl (struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)h]j )}(hVint v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)h](jm)}(hinth]hint}(hjShhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjOhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOhhhjahMubj )}(hv4l2_query_ext_ctrlh]j)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]hhuh1j hjOhhhjahMubja)}(h?(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jvsbc.v4l2_query_ext_ctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_query_ext_ctrl *qch](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj"modnameN classnameNj,j/)}j2]jc.v4l2_query_ext_ctrlasbuh1hhjubj )}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hqch]hqc}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjOhhhjahMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjKhhhjahMubah}(h]jFah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjahMhjHhhubj/)}(hhh]h)}(hRHelper function to implement :ref:`VIDIOC_QUERY_EXT_CTRL ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h/:ref:`VIDIOC_QUERY_EXT_CTRL `h]j)}(hjh]hVIDIOC_QUERY_EXT_CTRL}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_queryctrluh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjHhhhjahMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX%**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct v4l2_query_ext_ctrl *qc`` pointer to :c:type:`struct v4l2_query_ext_ctrl ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hj h]hstruct v4l2_ctrl_handler}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hi``struct v4l2_query_ext_ctrl *qc`` pointer to :c:type:`struct v4l2_query_ext_ctrl ` h](j)}(h"``struct v4l2_query_ext_ctrl *qc``h]j)}(hj@h]hstruct v4l2_query_ext_ctrl *qc}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj:ubj)}(hhh]h)}(hEpointer to :c:type:`struct v4l2_query_ext_ctrl `h](h pointer to }(hjYhhhNhNubh)}(h::c:type:`struct v4l2_query_ext_ctrl `h]j)}(hjch]hstruct v4l2_query_ext_ctrl}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_query_ext_ctrluh1hhjUhMhjYubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_querymenu (C function)c.v4l2_querymenuhNtauh1j hj hhhNhNubj )}(hhh](j )}(hMint v4l2_querymenu (struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)h]j )}(hLint v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hv4l2_querymenuh]j)}(hv4l2_querymenuh]hv4l2_querymenu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMubja)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj<modnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_querymenuasbuh1hhjubj )}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_querymenu *qmh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_querymenuh]hv4l2_querymenu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jVc.v4l2_querymenuasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hqmh]hqm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(hMHelper function to implement :ref:`VIDIOC_QUERYMENU ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h*:ref:`VIDIOC_QUERYMENU `h]j)}(hjh]hVIDIOC_QUERYMENU}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj%reftyperef refexplicitrefwarnjvidioc_queryctrluh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjKjQjKjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct v4l2_querymenu *qm`` pointer to :c:type:`struct v4l2_querymenu ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjSubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjOubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjth]hstruct v4l2_ctrl_handler *hdl}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjnubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjh]hstruct v4l2_ctrl_handler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(hZ``struct v4l2_querymenu *qm`` pointer to :c:type:`struct v4l2_querymenu ` h](j)}(h``struct v4l2_querymenu *qm``h]j)}(hjh]hstruct v4l2_querymenu *qm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h;pointer to :c:type:`struct v4l2_querymenu `h](h pointer to }(hjhhhNhNubh)}(h0:c:type:`struct v4l2_querymenu `h]j)}(hjh]hstruct v4l2_querymenu}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_querymenuuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j`)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj$ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjOubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_g_ctrl (C function) c.v4l2_g_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(hJint v4l2_g_ctrl (struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h]j )}(hIint v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](jm)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjghhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjghhhjyhMubj )}(h v4l2_g_ctrlh]j)}(h v4l2_g_ctrlh]h v4l2_g_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjghhhjyhMubja)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsb c.v4l2_g_ctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_control *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_controlh]h v4l2_control}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj:modnameN classnameNj,j/)}j2]j c.v4l2_g_ctrlasbuh1hhjubj )}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjghhhjyhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjchhhjyhMubah}(h]j^ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjyhMhj`hhubj/)}(hhh]h)}(hGHelper function to implement :ref:`VIDIOC_G_CTRL ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h$:ref:`VIDIOC_G_CTRL `h]j)}(hjh]h VIDIOC_G_CTRL}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnj vidioc_g_ctrluh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hj`hhhjyhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct v4l2_control *ctrl`` pointer to :c:type:`struct v4l2_control ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hj#h]hstruct v4l2_ctrl_handler}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``struct v4l2_control *ctrl`` pointer to :c:type:`struct v4l2_control ` h](j)}(h``struct v4l2_control *ctrl``h]j)}(hjXh]hstruct v4l2_control *ctrl}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjRubj)}(hhh]h)}(h7pointer to :c:type:`struct v4l2_control `h](h pointer to }(hjqhhhNhNubh)}(h,:c:type:`struct v4l2_control `h]j)}(hj{h]hstruct v4l2_control}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_controluh1hhjmhMhjqubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_s_ctrl (C function) c.v4l2_s_ctrlhNtauh1j hj hhhNhNubj )}(hhh](j )}(h^int v4l2_s_ctrl (struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h]j )}(h]int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(h v4l2_s_ctrlh]j)}(h v4l2_s_ctrlh]h v4l2_s_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMubja)}(hN(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](jg)}(hstruct v4l2_fh *fhh](j )}(hjch]hstruct}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj )}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjTmodnameN classnameNj,j/)}j2]j5)}j(jsb c.v4l2_s_ctrlasbuh1hhj0ubj )}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,ubjg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jn c.v4l2_s_ctrlasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,ubjg)}(hstruct v4l2_control *ctrlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_controlh]h v4l2_control}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]Bh ]h"]h$]h&] refdomainjreftypej( reftargetj6modnameN classnameNj,j/)}j2]jn c.v4l2_s_ctrlasbuh1hhjubj )}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhj,ubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(hGHelper function to implement :ref:`VIDIOC_S_CTRL ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h$:ref:`VIDIOC_S_CTRL `h]j)}(hjh]h VIDIOC_S_CTRL}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnj vidioc_g_ctrluh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hXZ**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct v4l2_control *ctrl`` pointer to :c:type:`struct v4l2_control ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j)}(h``struct v4l2_fh *fh``h]j)}(hjh]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]j)}(hjh]hstruct v4l2_fh}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_fhuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjTh]hstruct v4l2_ctrl_handler *hdl}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjNubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjmhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjwh]hstruct v4l2_ctrl_handler}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjihMhjmubeh}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubj)}(hV``struct v4l2_control *ctrl`` pointer to :c:type:`struct v4l2_control ` h](j)}(h``struct v4l2_control *ctrl``h]j)}(hjh]hstruct v4l2_control *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct v4l2_control `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct v4l2_control `h]j)}(hjh]hstruct v4l2_control}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_controluh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_g_ext_ctrls (C function)c.v4l2_g_ext_ctrlshNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_g_ext_ctrls (struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h]j )}(hint v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jm)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjGhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGhhhjYhMubj )}(hv4l2_g_ext_ctrlsh]j)}(hv4l2_g_ext_ctrlsh]hv4l2_g_ext_ctrls}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]hhuh1j hjGhhhjYhMubja)}(hr(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jnsbc.v4l2_g_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct video_device *vdevh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h video_deviceh]h video_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_g_ext_ctrlsasbuh1hhjubj )}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvdevh]hvdev}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct media_device *mdevh](j )}(hjch]hstruct}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjfubj )}(h h]h }(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjfubh)}(hhh]j)}(h media_deviceh]h media_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_g_ext_ctrlsasbuh1hhjfubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hmdevh]hmdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_ext_controls *ch](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_g_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hc}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjGhhhjYhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjChhhjYhMubah}(h]j>ah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjYhMhj@hhubj/)}(hhh]h)}(hQHelper function to implement :ref:`VIDIOC_G_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjZhhhNhNubh)}(h.:ref:`VIDIOC_G_EXT_CTRLS `h]j)}(hjdh]hVIDIOC_G_EXT_CTRLS}(hjfhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj refdomainjpreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhj|hKhjZubh ioctl}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1j.hj@hhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``struct media_device *mdev`` pointer to :c:type:`struct media_device ` ``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjh]hstruct v4l2_ctrl_handler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]j)}(hjh]hstruct video_device *vdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hj0hhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hj:h]hstruct video_device}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj video_deviceuh1hhj,hMhj0ubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(hV``struct media_device *mdev`` pointer to :c:type:`struct media_device ` h](j)}(h``struct media_device *mdev``h]j)}(hjoh]hstruct media_device *mdev}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjiubj)}(hhh]h)}(h7pointer to :c:type:`struct media_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct media_device `h]j)}(hjh]hstruct media_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj media_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hb``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` h](j)}(h``struct v4l2_ext_controls *c``h]j)}(hjh]hstruct v4l2_ext_controls *c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ext_controls `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ext_controls `h]j)}(hjh]hstruct v4l2_ext_controls}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ext_controlsuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_try_ext_ctrls (C function)c.v4l2_try_ext_ctrlshNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_try_ext_ctrls (struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h]j )}(hint v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jm)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjbhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjbhhhjthMubj )}(hv4l2_try_ext_ctrlsh]j)}(hv4l2_try_ext_ctrlsh]hv4l2_try_ext_ctrls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjbhhhjthMubja)}(hr(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_try_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct video_device *vdevh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h video_deviceh]h video_device}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj5modnameN classnameNj,j/)}j2]jc.v4l2_try_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvdevh]hvdev}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct media_device *mdevh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h media_deviceh]h media_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_try_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmdevh]hmdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_ext_controls *ch](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_try_ext_ctrlsasbuh1hhjubj )}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hc}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjbhhhjthMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj^hhhjthMubah}(h]jYah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjthMhj[hhubj/)}(hhh]h)}(hSHelper function to implement :ref:`VIDIOC_TRY_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjuhhhNhNubh)}(h0:ref:`VIDIOC_TRY_EXT_CTRLS `h]j)}(hjh]hVIDIOC_TRY_EXT_CTRLS}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhj|hKhjuubh ioctl}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1j.hj[hhhjthMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``struct media_device *mdev`` pointer to :c:type:`struct media_device ` ``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjh]hstruct v4l2_ctrl_handler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]j)}(hj2h]hstruct video_device *vdev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj,ubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjKhhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hjUh]hstruct video_device}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj video_deviceuh1hhjGhMhjKubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(hV``struct media_device *mdev`` pointer to :c:type:`struct media_device ` h](j)}(h``struct media_device *mdev``h]j)}(hjh]hstruct media_device *mdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct media_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct media_device `h]j)}(hjh]hstruct media_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj media_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hb``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` h](j)}(h``struct v4l2_ext_controls *c``h]j)}(hjh]hstruct v4l2_ext_controls *c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ext_controls `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ext_controls `h]j)}(hjh]hstruct v4l2_ext_controls}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ext_controlsuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj:ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j v4l2_s_ext_ctrls (C function)c.v4l2_s_ext_ctrlshNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_s_ext_ctrls (struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h]j )}(hint v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj}hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}hhhjhMubj )}(hv4l2_s_ext_ctrlsh]j)}(hv4l2_s_ext_ctrlsh]hv4l2_s_ext_ctrls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj}hhhjhMubja)}(h(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](jg)}(hstruct v4l2_fh *fhh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_s_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj )}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjPmodnameN classnameNj,j/)}j2]jc.v4l2_s_ext_ctrlsasbuh1hhj,ubj )}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct video_device *vdevh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h video_deviceh]h video_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_s_ext_ctrlsasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct media_device *mdevh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubh)}(hhh]j)}(h media_deviceh]h media_device}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj0modnameN classnameNj,j/)}j2]jc.v4l2_s_ext_ctrlsasbuh1hhj ubj )}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hmdevh]hmdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_ext_controls *ch](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubh)}(hhh]j)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_s_ext_ctrlsasbuh1hhj|ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj}hhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjyhhhjhMubah}(h]jtah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjvhhubj/)}(hhh]h)}(hQHelper function to implement :ref:`VIDIOC_S_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h.:ref:`VIDIOC_S_EXT_CTRLS `h]j)}(hj h]hVIDIOC_S_EXT_CTRLS}(hj hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhj|hKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPj<jQj<jRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` ``struct video_device *vdev`` pointer to :c:type:`struct video_device ` ``struct media_device *mdev`` pointer to :c:type:`struct media_device ` ``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` **Description** If hdl == NULL then they will all return -EINVAL.h](h)}(h**Parameters**h]j`)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjDubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj@ubj)}(hhh](j)}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j)}(h``struct v4l2_fh *fh``h]j)}(hjeh]hstruct v4l2_fh *fh}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj_ubj)}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hj~hhhNhNubh)}(h":c:type:`struct v4l2_fh `h]j)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_fhuh1hhjzhMhj~ubeh}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\ubj)}(hd``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjh]hstruct v4l2_ctrl_handler *hdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjh]hstruct v4l2_ctrl_handler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj\ubj)}(hV``struct video_device *vdev`` pointer to :c:type:`struct video_device ` h](j)}(h``struct video_device *vdev``h]j)}(hjh]hstruct video_device *vdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hj.hhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hj8h]hstruct video_device}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj video_deviceuh1hhj*hMhj.ubeh}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj\ubj)}(hV``struct media_device *mdev`` pointer to :c:type:`struct media_device ` h](j)}(h``struct media_device *mdev``h]j)}(hjmh]hstruct media_device *mdev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjgubj)}(hhh]h)}(h7pointer to :c:type:`struct media_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct media_device `h]j)}(hjh]hstruct media_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj media_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj\ubj)}(hb``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` h](j)}(h``struct v4l2_ext_controls *c``h]j)}(hjh]hstruct v4l2_ext_controls *c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ext_controls `h](h pointer to }(hjhhhNhNubh)}(h6:c:type:`struct v4l2_ext_controls `h]j)}(hjh]hstruct v4l2_ext_controls}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ext_controlsuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j`)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj@ubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j -v4l2_ctrl_subdev_subscribe_event (C function)"c.v4l2_ctrl_subdev_subscribe_eventhNtauh1j hj hhhNhNubj )}(hhh](j )}(hvint v4l2_ctrl_subdev_subscribe_event (struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h]j )}(huint v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](jm)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`hhhjrhMubj )}(h v4l2_ctrl_subdev_subscribe_eventh]j)}(h v4l2_ctrl_subdev_subscribe_eventh]h v4l2_ctrl_subdev_subscribe_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hj`hhhjrhMubja)}(hQ(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](jg)}(hstruct v4l2_subdev *sdh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_subdevh]h v4l2_subdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsb"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsdh]hsd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hstruct v4l2_fh *fhh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_fhh]hv4l2_fh}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj3modnameN classnameNj,j/)}j2]j"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhjubj )}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfhh]hfh}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h#struct v4l2_event_subscription *subh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsubh]hsub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hj`hhhjrhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hj\hhhjrhMubah}(h]jWah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjrhMhjYhhubj/)}(hhh]h)}(hHelper function to implement as a :c:type:`struct v4l2_subdev_core_ops ` subscribe_event function that just subscribes control events.h](h"Helper function to implement as a }(hjhhhNhNubh)}(h<:c:type:`struct v4l2_subdev_core_ops `h]j)}(hjh]hstruct v4l2_subdev_core_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,j/)}j2]j"c.v4l2_ctrl_subdev_subscribe_eventasbjv4l2_subdev_core_opsuh1hhj|hKhjubh> subscribe_event function that just subscribes control events.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjDjQjDjRjSjTuh1j hhhj hNhNubjV)}(hX#**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` ``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` ``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](h)}(h**Parameters**h]j`)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjLubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjHubj)}(hhh](j)}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j)}(h``struct v4l2_subdev *sd``h]j)}(hjmh]hstruct v4l2_subdev *sd}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjgubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hjhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j)}(hjh]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_subdevuh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM hjdubj)}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j)}(h``struct v4l2_fh *fh``h]j)}(hjh]hstruct v4l2_fh *fh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]j)}(hjh]hstruct v4l2_fh}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_fhuh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjdubj)}(hu``struct v4l2_event_subscription *sub`` pointer to :c:type:`struct v4l2_event_subscription `h](j)}(h'``struct v4l2_event_subscription *sub``h]j)}(hjh]h#struct v4l2_event_subscription *sub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hj6hhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]j)}(hj@h]hstruct v4l2_event_subscription}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_event_subscriptionuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hj6ubeh}(h]h ]h"]h$]h&]uh1hhj]hM hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j (v4l2_ctrl_subdev_log_status (C function)c.v4l2_ctrl_subdev_log_statushNtauh1j hj hhhNhNubj )}(hhh](j )}(h8int v4l2_ctrl_subdev_log_status (struct v4l2_subdev *sd)h]j )}(h7int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj )}(hv4l2_ctrl_subdev_log_statush]j)}(hv4l2_ctrl_subdev_log_statush]hv4l2_ctrl_subdev_log_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMubja)}(h(struct v4l2_subdev *sd)h]jg)}(hstruct v4l2_subdev *sdh](j )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_subdevh]h v4l2_subdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_subdev_log_statusasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsdh]hsd}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubah}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMhjhhubj/)}(hhh]h)}(h3Log all controls owned by subdev's control handler.h]h5Log all controls owned by subdev’s control handler.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjnjQjnjRjSjTuh1j hhhj hNhNubjV)}(hb**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev `h](h)}(h**Parameters**h]j`)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjvubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjrubj)}(hhh]j)}(hP``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev `h](j)}(h``struct v4l2_subdev *sd``h]j)}(hjh]hstruct v4l2_subdev *sd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hjhhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j)}(hjh]hstruct v4l2_subdev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_subdevuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j ,v4l2_ctrl_new_fwnode_properties (C function)!c.v4l2_ctrl_new_fwnode_propertieshNtauh1j hj hhhNhNubj )}(hhh](j )}(hint v4l2_ctrl_new_fwnode_properties (struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ctrl_ops, const struct v4l2_fwnode_device_properties *p)h]j )}(hint v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ctrl_ops, const struct v4l2_fwnode_device_properties *p)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM0ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhjhM0ubj )}(hv4l2_ctrl_new_fwnode_propertiesh]j)}(hv4l2_ctrl_new_fwnode_propertiesh]hv4l2_ctrl_new_fwnode_properties}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj hhhjhM0ubja)}(ht(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ctrl_ops, const struct v4l2_fwnode_device_properties *p)h](jg)}(hstruct v4l2_ctrl_handler *hdlh](j )}(hjch]hstruct}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj )}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubh)}(hhh]j)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmmodnameN classnameNj,j/)}j2]j5)}j(j3sb!c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjIubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjEubjg)}(h$const struct v4l2_ctrl_ops *ctrl_opsh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j!c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrl_opsh]hctrl_ops}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjEubjg)}(h-const struct v4l2_fwnode_device_properties *ph](j )}(hj8h]hconst}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj )}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj )}(hjch]hstruct}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj )}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubh)}(hhh]j)}(hv4l2_fwnode_device_propertiesh]hv4l2_fwnode_device_properties}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j!c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjFubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjEubeh}(h]h ]h"]h$]h&]hhuh1j`hj hhhjhM0ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhM0ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM0hjhhubj/)}(hhh]h)}(h+Register controls for the device propertiesh]h+Register controls for the device properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` to register controls on ``const struct v4l2_ctrl_ops *ctrl_ops`` pointer to :c:type:`struct v4l2_ctrl_ops ` to register controls with ``const struct v4l2_fwnode_device_properties *p`` pointer to :c:type:`struct v4l2_fwnode_device_properties ` **Description** This function registers controls associated to device properties, using the property values contained in **p** parameter, if the property has been set to a value. Currently the following v4l2 controls are parsed and registered: - V4L2_CID_CAMERA_ORIENTATION - V4L2_CID_CAMERA_SENSOR_ROTATION; Controls already registered by the caller with the **hdl** control handler are not overwritten. Callers should register the controls they want to handle themselves before calling this function. **Return** 0 on success, a negative error code on failure.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h|``struct v4l2_ctrl_handler *hdl`` pointer to :c:type:`struct v4l2_ctrl_handler ` to register controls on h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hj&h]hstruct v4l2_ctrl_handler *hdl}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj ubj)}(hhh]h)}(hYpointer to :c:type:`struct v4l2_ctrl_handler ` to register controls onh](h pointer to }(hj?hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjIh]hstruct v4l2_ctrl_handler}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_ctrl_handleruh1hhj;hMhj?ubh to register controls on}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h}``const struct v4l2_ctrl_ops *ctrl_ops`` pointer to :c:type:`struct v4l2_ctrl_ops ` to register controls with h](j)}(h(``const struct v4l2_ctrl_ops *ctrl_ops``h]j)}(hjh]h$const struct v4l2_ctrl_ops *ctrl_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMhj|ubj)}(hhh]h)}(hSpointer to :c:type:`struct v4l2_ctrl_ops ` to register controls withh](h pointer to }(hjhhhNhNubh)}(h.:c:type:`struct v4l2_ctrl_ops `h]j)}(hjh]hstruct v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jj v4l2_ctrl_opsuh1hhjhMhjubh to register controls with}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``const struct v4l2_fwnode_device_properties *p`` pointer to :c:type:`struct v4l2_fwnode_device_properties ` h](j)}(h1``const struct v4l2_fwnode_device_properties *p``h]j)}(hjh]h-const struct v4l2_fwnode_device_properties *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh]h)}(hYpointer to :c:type:`struct v4l2_fwnode_device_properties `h](h pointer to }(hjhhhNhNubh)}(hN:c:type:`struct v4l2_fwnode_device_properties `h]j)}(hjh]h$struct v4l2_fwnode_device_properties}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj,jjv4l2_fwnode_device_propertiesuh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j`)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj6ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjubh)}(hThis function registers controls associated to device properties, using the property values contained in **p** parameter, if the property has been set to a value.h](hiThis function registers controls associated to device properties, using the property values contained in }(hjNhhhNhNubj`)}(h**p**h]hp}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjNubh4 parameter, if the property has been set to a value.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM"hjubh)}(hCurrently the following v4l2 controls are parsed and registered: - V4L2_CID_CAMERA_ORIENTATION - V4L2_CID_CAMERA_SENSOR_ROTATION;h]hCurrently the following v4l2 controls are parsed and registered: - V4L2_CID_CAMERA_ORIENTATION - V4L2_CID_CAMERA_SENSOR_ROTATION;}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM&hjubh)}(hControls already registered by the caller with the **hdl** control handler are not overwritten. Callers should register the controls they want to handle themselves before calling this function.h](h3Controls already registered by the caller with the }(hj~hhhNhNubj`)}(h**hdl**h]hhdl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj~ubh control handler are not overwritten. Callers should register the controls they want to handle themselves before calling this function.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM*hjubh)}(h **Return**h]j`)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM.hjubh)}(h/0 on success, a negative error code on failure.h]h/0 on success, a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j $v4l2_ctrl_type_op_equal (C function)c.v4l2_ctrl_type_op_equalhNtauh1j hj hhhNhNubj )}(hhh](j )}(hobool v4l2_ctrl_type_op_equal (const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)h]j )}(hnbool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)h](jm)}(hjlh]hbool}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM=ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM=ubj )}(hv4l2_ctrl_type_op_equalh]j)}(hv4l2_ctrl_type_op_equalh]hv4l2_ctrl_type_op_equal}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhM=ubja)}(hR(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)h](jg)}(hconst struct v4l2_ctrl *ctrlh](j )}(hj8h]hconst}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj]modnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_type_op_equalasbuh1hhjubj )}(h h]h }(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hunion v4l2_ctrl_ptr ptr1h](j )}(hj h]hunion}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jwc.v4l2_ctrl_type_op_equalasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hptr1h]hptr1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hunion v4l2_ctrl_ptr ptr2h](j )}(hj h]hunion}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj2modnameN classnameNj,j/)}j2]jwc.v4l2_ctrl_type_op_equalasbuh1hhjubj )}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hptr2h]hptr2}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhM=ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhM=ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM=hjhhubj/)}(hhh]h)}(h*Default v4l2_ctrl_type_ops equal callback.h]h*Default v4l2_ctrl_type_ops equal callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhM=ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjjQjjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. ``union v4l2_ctrl_ptr ptr1`` A v4l2 control value. ``union v4l2_ctrl_ptr ptr2`` A v4l2 control value. **Return** true if values are equal, otherwise false.h](h)}(h**Parameters**h]j`)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM9hjubj)}(hhh](j)}(h8``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjh]hconst struct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM7hjubj)}(hhh]h)}(hThe v4l2_ctrl pointer.h]hThe v4l2_ctrl pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubj)}(h3``union v4l2_ctrl_ptr ptr1`` A v4l2 control value. h](j)}(h``union v4l2_ctrl_ptr ptr1``h]j)}(hjh]hunion v4l2_ctrl_ptr ptr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM8hjubj)}(hhh]h)}(hA v4l2 control value.h]hA v4l2 control value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(h3``union v4l2_ctrl_ptr ptr2`` A v4l2 control value. h](j)}(h``union v4l2_ctrl_ptr ptr2``h]j)}(hj9h]hunion v4l2_ctrl_ptr ptr2}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM9hj3ubj)}(hhh]h)}(hA v4l2 control value.h]hA v4l2 control value.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM9hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j`)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjrubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM;hjubh)}(h*true if values are equal, otherwise false.h]h*true if values are equal, otherwise false.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j #v4l2_ctrl_type_op_init (C function)c.v4l2_ctrl_type_op_inithNtauh1j hj hhhNhNubj )}(hhh](j )}(havoid v4l2_ctrl_type_op_init (const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr)h]j )}(h`void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMIubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMIubj )}(hv4l2_ctrl_type_op_inith]j)}(hv4l2_ctrl_type_op_inith]hv4l2_ctrl_type_op_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjhhhjhMIubja)}(hE(const struct v4l2_ctrl *ctrl, u32 from_idx, union v4l2_ctrl_ptr ptr)h](jg)}(hconst struct v4l2_ctrl *ctrlh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetj1modnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_type_op_initasbuh1hhjubj )}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(h u32 from_idxh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jKc.v4l2_ctrl_type_op_initasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfrom_idxh]hfrom_idx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubjg)}(hunion v4l2_ctrl_ptr ptrh](j )}(hj h]hunion}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jKc.v4l2_ctrl_type_op_initasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubeh}(h]h ]h"]h$]h&]hhuh1j`hjhhhjhMIubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhMIubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMIhjhhubj/)}(hhh]h)}(h)Default v4l2_ctrl_type_ops init callback.h]h)Default v4l2_ctrl_type_ops init callback.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMAhj<hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhMIubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjWjQjWjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. ``u32 from_idx`` Starting element index. ``union v4l2_ctrl_ptr ptr`` The v4l2 control value. **Return** voidh](h)}(h**Parameters**h]j`)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj_ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhj[ubj)}(hhh](j)}(h8``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjh]hconst struct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMChjzubj)}(hhh]h)}(hThe v4l2_ctrl pointer.h]hThe v4l2_ctrl pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMChjwubj)}(h)``u32 from_idx`` Starting element index. h](j)}(h``u32 from_idx``h]j)}(hjh]h u32 from_idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMDhjubj)}(hhh]h)}(hStarting element index.h]hStarting element index.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjwubj)}(h4``union v4l2_ctrl_ptr ptr`` The v4l2 control value. h](j)}(h``union v4l2_ctrl_ptr ptr``h]j)}(hjh]hunion v4l2_ctrl_ptr ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMEhjubj)}(hhh]h)}(hThe v4l2 control value.h]hThe v4l2 control value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h **Return**h]j`)}(hj-h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j_hj+ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMGhj[ubh)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMGhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j "v4l2_ctrl_type_op_log (C function)c.v4l2_ctrl_type_op_loghNtauh1j hj hhhNhNubj )}(hhh](j )}(h9void v4l2_ctrl_type_op_log (const struct v4l2_ctrl *ctrl)h]j )}(h8void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl)h](jm)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjnhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMSubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnhhhjhMSubj )}(hv4l2_ctrl_type_op_logh]j)}(hv4l2_ctrl_type_op_logh]hv4l2_ctrl_type_op_log}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1j hjnhhhjhMSubja)}(h(const struct v4l2_ctrl *ctrl)h]jg)}(hconst struct v4l2_ctrl *ctrlh](j )}(hj8h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjch]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(jsbc.v4l2_ctrl_type_op_logasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hctrlh]hctrl}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjubah}(h]h ]h"]h$]h&]hhuh1j`hjnhhhjhMSubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjjhhhjhMSubah}(h]jeah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhMShjghhubj/)}(hhh]h)}(h(Default v4l2_ctrl_type_ops log callback.h]h(Default v4l2_ctrl_type_ops log callback.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMMhjJhhubah}(h]h ]h"]h$]h&]uh1j.hjghhhjhMSubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjejQjejRjSjTuh1j hhhj hNhNubjV)}(h[**Parameters** ``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. **Return** voidh](h)}(h**Parameters**h]j`)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjmubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhjiubj)}(hhh]j)}(h8``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjh]hconst struct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMOhjubj)}(hhh]h)}(hThe v4l2_ctrl pointer.h]hThe v4l2_ctrl pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjiubh)}(h **Return**h]j`)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhjiubh)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMQhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'v4l2_ctrl_type_op_validate (C function)c.v4l2_ctrl_type_op_validatehNtauh1j hj hhhNhNubj )}(hhh](j )}(hVint v4l2_ctrl_type_op_validate (const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr)h]j )}(hUint v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM]ubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhjhM]ubj )}(hv4l2_ctrl_type_op_validateh]j)}(hv4l2_ctrl_type_op_validateh]hv4l2_ctrl_type_op_validate}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]hhuh1j hj hhhjhM]ubja)}(h7(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr)h](jg)}(hconst struct v4l2_ctrl *ctrlh](j )}(hj8h]hconst}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj )}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj )}(hjch]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj )}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubh)}(hhh]j)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]j5)}j(j1sbc.v4l2_ctrl_type_op_validateasbuh1hhjGubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjCubjg)}(hunion v4l2_ctrl_ptr ptrh](j )}(hj h]hunion}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(hhh]j)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej( reftargetjmodnameN classnameNj,j/)}j2]jc.v4l2_ctrl_type_op_validateasbuh1hhjubj )}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hptrh]hptr}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jfhjCubeh}(h]h ]h"]h$]h&]hhuh1j`hj hhhjhM]ubeh}(h]h ]h"]h$]h&]hhj uh1j j!j"hjhhhjhM]ubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1j hjhM]hjhhubj/)}(hhh]h)}(h-Default v4l2_ctrl_type_ops validate callback.h]h-Default v4l2_ctrl_type_ops validate callback.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMVhjIhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhM]ubeh}(h]h ](jfunctioneh"]h$]h&]jOjjPjdjQjdjRjSjTuh1j hhhj hNhNubjV)}(h**Parameters** ``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. ``union v4l2_ctrl_ptr ptr`` The v4l2 control value. **Return** 0 on success, a negative error code on failure.h](h)}(h**Parameters**h]j`)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjlubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMZhjhubj)}(hhh](j)}(h8``const struct v4l2_ctrl *ctrl`` The v4l2_ctrl pointer. h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjh]hconst struct v4l2_ctrl *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMXhjubj)}(hhh]h)}(hThe v4l2_ctrl pointer.h]hThe v4l2_ctrl pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h4``union v4l2_ctrl_ptr ptr`` The v4l2 control value. h](j)}(h``union v4l2_ctrl_ptr ptr``h]j)}(hjh]hunion v4l2_ctrl_ptr ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhMYhjubj)}(hhh]h)}(hThe v4l2 control value.h]hThe v4l2 control value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjhubh)}(h **Return**h]j`)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM[hjhubh)}(h/0 on success, a negative error code on failure.h]h/0 on success, a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:823: ./include/media/v4l2-ctrls.hhM[hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jUhj hhhNhNubeh}(h]'v4l2-ctrl-functions-and-data-structuresah ]h"]'v4l2_ctrl functions and data structuresah$]h&]uh1hhhhhhhhM5ubeh}(h] v4l2-controlsah ]h"] v4l2 controlsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj`error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j:j7jjj]jZj#j jXjUjjj j jl ji j j j j jS jP jz jw j0 j- j j j j jQ jN j j j2j/u nametypes}(j:jj]j#jXjj jl j j jS jz j0 j j jQ j j2uh}(j7hjhjZjj j`jUj&jj[j jji j j jo j j jP j jw jV j- j} j j3 j j jN j j jT j/j j j jjjTjYjjjjjjj*j*j$.j).jn2js2j{7j7j=j=jfAjkAjBjCjDjDjEjEjHGjMGjHjHjJjJjLjLjPj PjqUjvUj;Zj@Zj_j_j"ej'ejjjjj@kjEkjnjnjpjpjrjrjvjvjxjxjzjzj|j|j~j~jhjmjj"jjjGjLjjjxj}j!j&jCjHj jj=jBjqjvj7j<jkjpjjjjj0j5jjjjjjjjjEjJjjjjŵjjj#j(jjj6j;jsjxjjjFjKjjj^jcjjj>jCjYj^jtjyjWj\jjjjjjjjjejjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages](hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "3" (ordinal 3)h]h>Enumerated list start value not ordinal-1: “3” (ordinal 3)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jhhhhhhhKubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jhj`hhhhhKrubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "3" (ordinal 3)h]h>Enumerated list start value not ordinal-1: “3” (ordinal 3)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jhj`hhhhhKubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "4" (ordinal 4)h]h>Enumerated list start value not ordinal-1: “4” (ordinal 4)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jhj`hhhhhKubetransform_messages] transformerN include_log] decorationNhhub.