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)}(hN:c:func:`v4l2_ctrl_handler_free` does not touch the handler's ``error`` field.h](h)}(h :c:func:`v4l2_ctrl_handler_free`h]j)}(hjh]hv4l2_ctrl_handler_free()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_handler_freeuh1hhhhKqhj~ubh does not touch the handler’s }(hj~hhhNhNubj)}(h ``error``h]herror}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh field.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKqhj`hhubh)}(hhh]h)}(hAdd controls: h]h)}(h Add controls:h]h Add controls:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubah}(h]h ]h"]h$]h&]j4j5j6hj7j8jKuh1hhj`hhhhhKsubh)}(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_stduh1hhhhKuhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhj`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}uh1jhhhKwhj`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)}(hj(h]hv4l2_ctrl_new_std_menu()}(hj*hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj&ubah}(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);}hjOsbah}(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 }(hj^hhhNhNubh)}(h&:c:func:`v4l2_ctrl_new_std_menu_items`h]j)}(hjhh]hv4l2_ctrl_new_std_menu_items()}(hjjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_menu_itemsuh1hhhhKhj^ubh:}(hj^hhhNhNubeh}(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);}hjsbah}(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 }(hjhhhNhNubh)}(h$:c:func:`v4l2_ctrl_new_std_compound`h]j)}(hjh]hv4l2_ctrl_new_std_compound()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_std_compounduh1hhhhKhjubh:}(hjhhhNhNubeh}(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)}(hj(h]hv4l2_ctrl_handler_init()}(hj*hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj&ubah}(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) return v4l2_ctrl_handler_free(&foo->ctrl_handler);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) return v4l2_ctrl_handler_free(&foo->ctrl_handler);}hjOsbah}(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 }(hj^hhhNhNubh)}(h:c:func:`v4l2_ctrl_new_std`h]j)}(hjhh]hv4l2_ctrl_new_std()}(hjjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjv4l2_ctrl_new_stduh1hhhhKhj^ubh 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.}(hj^hhhNhNubeh}(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 }(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_stduh1hhhhKhjubhX: 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.}(hjhhhNhNubeh}(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 }(hj"hhhNhNubh)}(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_itemsuh1hhhhKhj"ubhX 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.}(hj"hhhNhNubeh}(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.}(hjShhhNhNubah}(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.}(hjahhhNhNubah}(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.}(hjohhhNhNubah}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(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);}hjsbah}(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.}(hjhhhNhNubah}(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&]uh1hhjhhhhhNubah}(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:}(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_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.}(hj'hhhNhNubah}(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.}(hj5hhhNhNubah}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjEubah}(h]h ]h"]h$]h&]uh1jChj`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}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhM$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).}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjehhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM-hjehhubeh}(h]inheriting-sub-device-controlsah ]h"]inheriting sub-device controlsah$]h&]uh1hhhhhhhhM$ubh)}(hhh](h)}(hAccessing Control Valuesh]hAccessing Control Values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM3ubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM5hjhhubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM8hjhhubh)}(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&]uh1hhhhMAhjhhubj)}(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}uh1jhhhMDhjhhubh)}(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&]uh1hhhhMOhjhhubj)}(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}uh1jhhhMQhjhhubh)}(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&]uh1hhhhMVhjhhubh)}(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&]uh1hhhhMYhjhhubh)}(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]hjhhubh)}(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:}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMchjhhubj)}(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; } }}hj:sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMihjhhubh)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthjhhubh)}(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:}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMyhjhhubj)}(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;}hjesbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM{hjhhubh)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(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);}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(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&]uh1hhhhMhjhhubj)}(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}uh1jhhhMhjhhubeh}(h]accessing-control-valuesah ]h"]accessing control valuesah$]h&]uh1hhhhhhhhM3ubh)}(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; };}hj sbah}(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.}(hj hhhNhNubah}(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.}(hj* hhhNhNubah}(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().}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h] menu-controlsah ]h"] menu controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hCustom Controlsh]hCustom Controls}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN 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&]uh1hhhhMhjN 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);}hjm sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhjN 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&]uh1hhhhMhjN 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjN 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjN hhubeh}(h]custom-controlsah ]h"]custom controlsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hActive and Grabbed Controlsh]hActive and Grabbed Controls}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 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&]uh1hhhhMhj 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&]uh1hhhhMhj 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&]uh1hhhhMhj 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&]uh1hhhhMhj 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; }}hjI 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:}(hjX 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]}hjf 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:}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM-hj hhubj)}(histruct { /* audio cluster */ struct v4l2_ctrl *volume; struct v4l2_ctrl *mute; };h]histruct { /* audio cluster */ struct v4l2_ctrl *volume; struct v4l2_ctrl *mute; };}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM0hj 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:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hj 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);}hj 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMBhj 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&]uh1hhhhMDhj 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&]uh1hhhhMMhj 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&]uh1hhhhMPhj 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&]uh1hhhhMWhj 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&]uh1hhhhMchj 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&]uh1hhhhMhhj 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.}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMnhj 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:}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMqhj 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);}hjT sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMthj 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).}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMyhj 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.}(hjq 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj 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, ...);}hj0 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, ...);}hjM 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}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr 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&]uh1hhhhMhjr 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);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhMhjr 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&]uh1hhhhMhjr 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}uh1jhhhMhjr hhubh)}(h...and in video_ops.s_ctrl:h]h...and in video_ops.s_ctrl:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr 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}uh1jhhhMhjr 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&]uh1hhhhMhjr 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&]uh1hhhhMhjr 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);}hj9 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.}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj 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}(hja 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 .}(hjo 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(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:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj 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);}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jhhhM$hj 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)hj 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&]uh1hhhhM.hj hhubeh}(h]adding-notify-callbacksah ]h"]adding notify callbacksah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h'v4l2_ctrl functions and data structuresh]h'v4l2_ctrl functions and data structures}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM2ubhindex)}(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}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKubhdesc_sig_space)}(h h]h }(hj,hhhNhNubah}(h]h ]wah"]h$]h&]uh1j*hjhhhj)hKubh desc_name)}(h v4l2_ctrl_ptrh]h desc_sig_name)}(hjh]h v4l2_ctrl_ptr}(hjChhhNhNubah}(h]h ]nah"]h$]h&]uh1jAhj=ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j;hjhhhj)hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhj)hKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j hj)hKhj hhubh desc_content)}(hhh]h)}(hA pointer to a control value.h]hA pointer to a control value.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjohhubah}(h]h ]h"]h$]h&]uh1jmhj hhhj)hKubeh}(h]h ](junioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhj 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK!hjubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK#hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKFhjubhdefinition_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:820: ./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.}(hj hhhNhNubah}(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)}(hj*h]hp_s64}(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:820: ./include/media/v4l2-ctrls.hhK hj$ubj)}(hhh]h)}(h!Pointer to a 64-bit signed value.h]h!Pointer to a 64-bit signed value.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hK hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hK hjubj)}(h,``p_u8`` Pointer to a 8-bit unsigned value. h](j)}(h``p_u8``h]j)}(hjch]hp_u8}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK!hj]ubj)}(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&]uh1hhjxhK!hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhK!hjubj)}(h.``p_u16`` Pointer to a 16-bit unsigned value. h](j)}(h ``p_u16``h]j)}(hjh]hp_u16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK"hjubj)}(hhh]h)}(h#Pointer to a 16-bit unsigned value.h]h#Pointer to a 16-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_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:820: ./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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK$hjubj)}(hhh]h)}(hPointer to a string.h]hPointer to a string.}(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)}(h<``p_mpeg2_sequence`` Pointer to a MPEG2 sequence structure. h](j)}(h``p_mpeg2_sequence``h]j)}(hjGh]hp_mpeg2_sequence}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK%hjAubj)}(hhh]h)}(h&Pointer to a MPEG2 sequence structure.h]h&Pointer to a MPEG2 sequence structure.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hK%hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hK%hjubj)}(h:``p_mpeg2_picture`` Pointer to a MPEG2 picture structure. h](j)}(h``p_mpeg2_picture``h]j)}(hjh]hp_mpeg2_picture}(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:820: ./include/media/v4l2-ctrls.hhK&hjzubj)}(hhh]h)}(h%Pointer to a MPEG2 picture structure.h]h%Pointer to a MPEG2 picture structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubj)}(hI``p_mpeg2_quantisation`` Pointer to a MPEG2 quantisation data structure. h](j)}(h``p_mpeg2_quantisation``h]j)}(hjh]hp_mpeg2_quantisation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK'hjubj)}(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&]uh1jhjubeh}(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:820: ./include/media/v4l2-ctrls.hhK(hjubj)}(hhh]h)}(h1Pointer to a FWHT stateless parameters structure.h]h1Pointer to a FWHT stateless parameters structure.}(hj hhhNhNubah}(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)}(hj+h]h p_h264_sps}(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:820: ./include/media/v4l2-ctrls.hhK)hj%ubj)}(hhh]h)}(h'Pointer to a struct v4l2_ctrl_h264_sps.h]h'Pointer to a struct v4l2_ctrl_h264_sps.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK)hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hK)hjubj)}(h7``p_h264_pps`` Pointer to a struct v4l2_ctrl_h264_pps. h](j)}(h``p_h264_pps``h]j)}(hjdh]h p_h264_pps}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK*hj^ubj)}(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&]uh1hhjyhK*hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhK*hjubj)}(hM``p_h264_scaling_matrix`` Pointer to a struct v4l2_ctrl_h264_scaling_matrix. h](j)}(h``p_h264_scaling_matrix``h]j)}(hjh]hp_h264_scaling_matrix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK+hjubj)}(hhh]h)}(h2Pointer to a struct v4l2_ctrl_h264_scaling_matrix.h]h2Pointer to a struct v4l2_ctrl_h264_scaling_matrix.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK+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:820: ./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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK-hj ubj)}(hhh]h)}(h1Pointer to a struct v4l2_ctrl_h264_decode_params.h]h1Pointer to a struct v4l2_ctrl_h264_decode_params.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hK-hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hK-hjubj)}(hI``p_h264_pred_weights`` Pointer to a struct v4l2_ctrl_h264_pred_weights. h](j)}(h``p_h264_pred_weights``h]j)}(hjHh]hp_h264_pred_weights}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK.hjBubj)}(hhh]h)}(h0Pointer to a struct v4l2_ctrl_h264_pred_weights.h]h0Pointer to a struct v4l2_ctrl_h264_pred_weights.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hK.hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hK.hjubj)}(h9``p_vp8_frame`` Pointer to a VP8 frame params structure. h](j)}(h``p_vp8_frame``h]j)}(hjh]h p_vp8_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:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK/hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhK/hjubj)}(hD``p_hevc_sps`` Pointer to an HEVC sequence parameter set structure. h](j)}(h``p_hevc_sps``h]j)}(hjh]h p_hevc_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:820: ./include/media/v4l2-ctrls.hhK2hjubj)}(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&]uh1jhjubeh}(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:820: ./include/media/v4l2-ctrls.hhK3hjubj)}(hhh]h)}(h3Pointer to an HEVC picture parameter set structure.h]h3Pointer to an HEVC picture parameter set structure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK3hj ubah}(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)}(hj,h]hp_hevc_slice_params}(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:820: ./include/media/v4l2-ctrls.hhK4hj&ubj)}(hhh]h)}(h.Pointer to an HEVC slice parameters structure.h]h.Pointer to an HEVC slice parameters structure.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK4hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhK4hjubj)}(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)}(hjeh]hp_vp9_compressed_hdr_probs}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1hhjzhK0hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhK0hjubj)}(h9``p_vp9_frame`` Pointer to a VP9 frame params structure. h](j)}(h``p_vp9_frame``h]j)}(hjh]h p_vp9_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:820: ./include/media/v4l2-ctrls.hhK1hjubj)}(hhh]h)}(h(Pointer to a VP9 frame params structure.h]h(Pointer to a VP9 frame params structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhK6hj ubj)}(hhh]h)}(h0Pointer to an HDR10 Mastering Display structure.h]h0Pointer to an HDR10 Mastering Display structure.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hK6hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hK6hjubj)}(h``p_area`` Pointer to an area. h](j)}(h ``p_area``h]j)}(hjIh]hp_area}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK7hjCubj)}(hhh]h)}(hPointer to an area.h]hPointer to an area.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hK7hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hK7hjubj)}(h9``p_av1_sequence`` Pointer to an AV1 sequence structure. h](j)}(h``p_av1_sequence``h]j)}(hjh]hp_av1_sequence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK8hj|ubj)}(hhh]h)}(h%Pointer to an AV1 sequence structure.h]h%Pointer to an AV1 sequence structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(hI``p_av1_tile_group_entry`` Pointer to an AV1 tile group entry structure. h](j)}(h``p_av1_tile_group_entry``h]j)}(hjh]hp_av1_tile_group_entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhK9hjubj)}(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&]uh1jhjubeh}(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:820: ./include/media/v4l2-ctrls.hhK:hjubj)}(hhh]h)}(h"Pointer to an AV1 frame structure.h]h"Pointer to an AV1 frame structure.}(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)}(h=``p_av1_film_grain`` Pointer to an AV1 film grain structure. h](j)}(h``p_av1_film_grain``h]j)}(hj-h]hp_av1_film_grain}(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:820: ./include/media/v4l2-ctrls.hhK;hj'ubj)}(hhh]h)}(h'Pointer to an AV1 film grain structure.h]h'Pointer to an AV1 film grain structure.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhK;hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhK;hjubj)}(h#``p_rect`` Pointer to a rectangle. h](j)}(h ``p_rect``h]j)}(hjfh]hp_rect}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK=hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hjh]hunion}(hj2hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj.hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKcubj+)}(h h]h }(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.hhhj?hKcubh)}(hhh]jB)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjQhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjNubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjSmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jl ASTIdentifier)}jgv4l2_ctrl_ptr_createsbc.v4l2_ctrl_ptr_createasbuh1hhj.hhhj?hKcubj+)}(h h]h }(hjzhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.hhhj?hKcubj<)}(hv4l2_ctrl_ptr_createh]jB)}(hjwh]hv4l2_ctrl_ptr_create}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj.hhhj?hKcubhdesc_parameterlist)}(h (void *ptr)h]hdesc_parameter)}(h void *ptrh](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjB)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhj.hhhj?hKcubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj*hhhj?hKcubah}(h]j%ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj?hKchj'hhubjn)}(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:820: ./include/media/v4l2-ctrls.hhKchjhhubah}(h]h ]h"]h$]h&]uh1jmhj'hhhj?hKcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(h0**Parameters** ``void *ptr`` The void pointerh](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKghj!ubj)}(hhh]j)}(h``void *ptr`` The void pointerh](j)}(h ``void *ptr``h]j)}(hjFh]h void *ptr}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKihj@ubj)}(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:820: ./include/media/v4l2-ctrls.hhKehj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKihj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_ops (C struct)c.v4l2_ctrl_opshNtauh1j hj hhhNhNubj)}(hhh](j )}(h v4l2_ctrl_opsh]j)}(hstruct v4l2_ctrl_opsh](j)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhKjubj<)}(h v4l2_ctrl_opsh]jB)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhKjubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhKjubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhKjhjhhubjn)}(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:820: ./include/media/v4l2-ctrls.hhKohjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhKjubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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); };}hj sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKuhjubh)}(h **Members**h]j)}(hj1h]hMembers}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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)}(hjPh]hg_volatile_ctrl}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKvhjJubj)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKrhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKvhjGubj)}(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)}(hjh]htry_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:820: ./include/media/v4l2-ctrls.hhKxhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjGubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjGubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKubj+)}(h h]h }(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhj+hKubj<)}(hv4l2_ctrl_type_opsh]jB)}(hjh]hv4l2_ctrl_type_ops}(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj:ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhj+hKubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj+hKubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj+hKhjhhubjn)}(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:820: ./include/media/v4l2-ctrls.hhKhj]hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj+hKubeh}(h]h ](jstructeh"]h$]h&]jjjjxjjxjjjuh1jhhhj hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj|ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./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:820: ./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)}(hj?h]hminimum}(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:820: ./include/media/v4l2-ctrls.hhKhj9ubj)}(hhh]h)}(h2set the value to the minimum value of the control.h]h2set the value to the minimum value of the control.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhjubj)}(h?``maximum`` set the value to the maximum value of the control. h](j)}(h ``maximum``h]j)}(hjxh]hmaximum}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjrubj)}(hhh]h)}(h2set the value to the maximum value of the control.h]h2set the value to the maximum value of the control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``log`` log the value. h](j)}(h``log``h]j)}(hjh]hlog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hlog the value.h]hlog the value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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:820: ./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&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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]jB)}(hj=h]hv4l2_ctrl_notify_fnc}(hjGhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjCubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj?hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKubah}(h]h ]h"]h$]h&]hhj_uh1jj`jahj;hhhjZhKubah}(h]j6ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjZhKhj8hhubjn)}(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}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubhg: typedef for a notify argument with a function that should be called when a control value has changed.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjghhubah}(h]h ]h"]h$]h&]uh1jmhj8hhhjZhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubh)}(h **Syntax**h]j)}(hjh]hSyntax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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)}(hjh]h>void v4l2_ctrl_notify_fnc (struct v4l2_ctrl *ctrl, void *priv)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj hhubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./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 refexplicitrefwarnjkjn)}jq]sbj v4l2_ctrluh1hhj hKhjubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h$``void *priv`` control private data h](j)}(h``void *priv``h]j)}(hjPh]h void *priv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjJubj)}(hhh]h)}(hcontrol private datah]hcontrol private data}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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 }(hjhhhNhNubh)}(h:c:type:`v4l2_ctrl_handler`h]j)}(hjh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl (C struct) c.v4l2_ctrlhNtauh1j hj hhhNhNubj)}(hhh](j )}(h v4l2_ctrlh]j)}(hstruct v4l2_ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhKubj<)}(h v4l2_ctrlh]jB)}(hjh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhKubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhKhjhhubjn)}(hhh]h)}(hThe control structure.h]hThe control structure.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj2hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjMjjMjjjuh1jhhhj hNhNubj)}(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}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjQubj)}(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; };}hjrsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjQubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjQubj)}(hhh](j)}(h``node`` The list node. h](j)}(h``node``h]j)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(hThe list node.h]hThe list node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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:820: ./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&]uh1jhjhKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h"The handler that owns the control.h]h"The handler that owns the control.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKhjubj)}(h-``cluster`` Point to start of cluster array. h](j)}(h ``cluster``h]j)}(hjMh]hcluster}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjGubj)}(hhh]h)}(h Point to start of cluster array.h]h Point to start of cluster array.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjubj)}(h3``ncontrols`` Number of controls in cluster array. h](j)}(h ``ncontrols``h]j)}(hjh]h ncontrols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubj)}(hhh]h)}(h$Number of controls in cluster array.h]h$Number of controls in cluster array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``done`` Internal flag: set for each processed control. h](j)}(h``done``h]j)}(hjh]hdone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(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)}(hj2h]h has_changed}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj,ubj)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjubj)}(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)}(hjlh]h is_private}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjfubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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)}(hjh]his_auto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hL``is_string`` If set, then this control has type ``V4L2_CTRL_TYPE_STRING``. h](j)}(h ``is_string``h]j)}(hj h]h is_string}(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:820: ./include/media/v4l2-ctrls.hhKhj ubj)}(hhh]h)}(h=If set, then this control has type ``V4L2_CTRL_TYPE_STRING``.h](h#If set, then this control has type }(hj3 hhhNhNubj)}(h``V4L2_CTRL_TYPE_STRING``h]hV4L2_CTRL_TYPE_STRING}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubh.}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/ hKhj0 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj/ hKhjubj)}(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)}(hje h]his_ptr}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubh and/or has type }(hj~ hhhNhNubj)}(h``V4L2_CTRL_TYPE_STRING``h]hV4L2_CTRL_TYPE_STRING}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubh. In other words, }(hj~ hhhNhNubh)}(h4:c:type:`struct v4l2_ext_control `h]j)}(hj h]hstruct v4l2_ext_control}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ext_controluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1jhjz hKhjubj)}(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:820: ./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 hKhjubj)}(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:820: ./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 }(hj8!hhhNhNubj)}(h **is_array**h]his_array}(hj@!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8!ubh is also set.}(hj8!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj5!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj4!hKhjubj)}(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)}(hjk!h]h has_volatiles}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji!ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhje!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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhje!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(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)}(hj!h]h call_notify}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhj"ubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hj2"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj."hKhj/"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj."hKhjubj)}(h#``type_ops`` The control type ops. h](j)}(h ``type_ops``h]j)}(hjR"h]htype_ops}(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:820: ./include/media/v4l2-ctrls.hhKhjL"ubj)}(hhh]h)}(hThe control type ops.h]hThe control type ops.}(hjk"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg"hKhjh"ubah}(h]h ]h"]h$]h&]uh1jhjL"ubeh}(h]h ]h"]h$]h&]uh1jhjg"hKhjubj)}(h``id`` The control ID. h](j)}(h``id``h]j)}(hj"h]hid}(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:820: ./include/media/v4l2-ctrls.hhKhj"ubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjubj)}(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:820: ./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"hKhjubj)}(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:820: ./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#hKhjubj)}(h)``minimum`` The control's minimum value. h](j)}(h ``minimum``h]j)}(hj6#h]hminimum}(hj8#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4#ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj0#ubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hjO#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK#hKhjL#ubah}(h]h ]h"]h$]h&]uh1jhj0#ubeh}(h]h ]h"]h$]h&]uh1jhjK#hKhjubj)}(h)``maximum`` The control's maximum value. h](j)}(h ``maximum``h]j)}(hjo#h]hmaximum}(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:820: ./include/media/v4l2-ctrls.hhKhji#ubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhji#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h/``default_value`` The control's default value. h](j)}(h``default_value``h]j)}(hj#h]h default_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:820: ./include/media/v4l2-ctrls.hhKhj#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&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(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:820: ./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#hKhjubj)}(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:820: ./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.}(hj3$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/$hKhj0$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj/$hKhjubj)}(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)}(hjS$h]h new_elems}(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:820: ./include/media/v4l2-ctrls.hhKhjM$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 }(hjl$hhhNhNubj)}(h **elems**h]helems}(hjt$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl$ubhE, except for dynamic arrays. In that case it is in the range of 1 to }(hjl$hhhNhNubj)}(h**p_array_alloc_elems**h]hp_array_alloc_elems}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl$ubh.}(hjl$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhji$ubah}(h]h ]h"]h$]h&]uh1jhjM$ubeh}(h]h ]h"]h$]h&]uh1jhjh$hKhjubj)}(h%``dims`` The size of each dimension. h](j)}(h``dims``h]j)}(hj$h]hdims}(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:820: ./include/media/v4l2-ctrls.hhKhj$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&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjubj)}(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:820: ./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&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj5%h]h{unnamed_union}}(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:820: ./include/media/v4l2-ctrls.hhKhj/%ubj)}(hhh]h)}(h anonymoush]h anonymous}(hjN%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ%hKhjK%ubah}(h]h ]h"]h$]h&]uh1jhj/%ubeh}(h]h ]h"]h$]h&]uh1jhjJ%hKhjubj)}(h9``step`` The control's step value for non-menu controls. h](j)}(h``step``h]j)}(hjn%h]hstep}(hjp%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl%ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhjh%ubj)}(hhh]h)}(h/The control's step value for non-menu controls.h]h1The control’s step value for non-menu controls.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhjh%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(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)}(hj%h]hmenu_skip_mask}(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:820: ./include/media/v4l2-ctrls.hhKhj%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:820: ./include/media/v4l2-ctrls.hhKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(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:820: ./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%hKhjubj)}(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:820: ./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 }(hj3&hhhNhNubj)}(h**type**h]htype}(hj;&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3&ubh is }(hj3&hhhNhNubj)}(h``V4L2_CTRL_TYPE_MENU``h]hV4L2_CTRL_TYPE_MENU}(hjM&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3&ubh.}(hj3&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj0&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj/&hKhjubj)}(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)}(hjx&h]h qmenu_int}(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:820: ./include/media/v4l2-ctrls.hhKhjr&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.: }(hj&hhhNhNubhmath)}(h0:math:`ceil(\frac{maximum - minimum}{step}) + 1`h]h(ceil(\frac{maximum - minimum}{step}) + 1}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj&ubh. Used only if the }(hj&hhhNhNubj)}(h**type**h]htype}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh is }(hj&hhhNhNubj)}(h``V4L2_CTRL_TYPE_INTEGER_MENU``h]hV4L2_CTRL_TYPE_INTEGER_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:820: ./include/media/v4l2-ctrls.hhKhj&ubah}(h]h ]h"]h$]h&]uh1jhjr&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubj)}(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:820: ./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&hKhjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhj9'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj8'hKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhjW'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 }(hjv'hhhNhNubj)}(h **is_array**h]his_array}(hj~'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv'ubh is true.}(hjv'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjr'hKhjs'ubah}(h]h ]h"]h$]h&]uh1jhjW'ubeh}(h]h ]h"]h$]h&]uh1jhjr'hKhjubj)}(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)}(hj'h]hp_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:820: ./include/media/v4l2-ctrls.hhKhj'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&]uh1jhj'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&]uh1jhj'ubh * }(hj'hhhNhNubj)}(h **elem_size**h]h elem_size}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh. Only valid if }(hj'hhhNhNubj)}(h **is_array**h]his_array}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh is true.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhj$(ubj)}(hhh]h)}(hThe control's new s32 value.h]hThe control’s new s32 value.}(hjC(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?(hKhj@(ubah}(h]h ]h"]h$]h&]uh1jhj$(ubeh}(h]h ]h"]h$]h&]uh1jhj?(hKhjubj)}(h.``cur`` Structure to store the current value. h](j)}(h``cur``h]j)}(hjc(h]hcur}(hje(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja(ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1hhjx(hKhjy(ubah}(h]h ]h"]h$]h&]uh1jhj](ubeh}(h]h ]h"]h$]h&]uh1jhjx(hKhjubj)}(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:820: ./include/media/v4l2-ctrls.hhKhj(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 }(hj(hhhNhNubj)}(h**type**h]htype}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh' is represented via a u32 integer (see }(hj(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 refexplicitrefwarnjkj4jv4l2_ctrl_typeuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj(ubh).}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhjubj)}(h``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:820: ./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:820: ./include/media/v4l2-ctrls.hhKhj!)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj )hMhjubj)}(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)}(hjE)h]hp_min}(hjG)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC)ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhj[)ubah}(h]h ]h"]h$]h&]uh1jhj?)ubeh}(h]h ]h"]h$]h&]uh1jhjZ)hMhjubj)}(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}(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:820: ./include/media/v4l2-ctrls.hhMhjy)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).}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jhjy)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(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)}(hj)h]hp_new}(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:820: ./include/media/v4l2-ctrls.hhM hj)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:820: ./include/media/v4l2-ctrls.hhM hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM hjubj)}(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:820: ./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:820: ./include/media/v4l2-ctrls.hhMhj *ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_ref (C struct)c.v4l2_ctrl_refhNtauh1j hj hhhNhNubj)}(hhh](j )}(h v4l2_ctrl_refh]j)}(hstruct v4l2_ctrl_refh](j)}(hjh]hstruct}(hjM*hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjI*hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj[*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjI*hhhjZ*hMubj<)}(h v4l2_ctrl_refh]jB)}(hjG*h]h v4l2_ctrl_ref}(hjm*hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhji*ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjI*hhhjZ*hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjE*hhhjZ*hMubah}(h]j@*ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjZ*hMhjB*hhubjn)}(hhh]h)}(hThe control reference.h]hThe control reference.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMHhj*hhubah}(h]h ]h"]h$]h&]uh1jmhjB*hhhjZ*hMubeh}(h]h ](jstructeh"]h$]h&]jjjj*jj*jjjuh1jhhhj hNhNubj)}(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}(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:820: ./include/media/v4l2-ctrls.hhMLhj*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:820: ./include/media/v4l2-ctrls.hhMNhj*ubh)}(h **Members**h]j)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM\hj*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:820: ./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)}(hj5+h]hnext}(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:820: ./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.}(hjN+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ+hMLhjK+ubah}(h]h ]h"]h$]h&]uh1jhj/+ubeh}(h]h ]h"]h$]h&]uh1jhjJ+hMLhj*ubj)}(h)``ctrl`` The actual control information. h](j)}(h``ctrl``h]j)}(hjn+h]hctrl}(hjp+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl+ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMMhjh+ubj)}(hhh]h)}(hThe actual control information.h]hThe actual control information.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMMhj+ubah}(h]h ]h"]h$]h&]uh1jhjh+ubeh}(h]h ]h"]h$]h&]uh1jhj+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)}(hj+h]hhelper}(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:820: ./include/media/v4l2-ctrls.hhMOhj+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:820: ./include/media/v4l2-ctrls.hhMNhj+ubah}(h]h ]h"]h$]h&]uh1jhj+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:820: ./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&]uh1jhj,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&]uh1jhj8,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMPhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjW,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)}(hjt,h]hreq_done}(hjv,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr,ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMVhjn,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).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMRhj,ubah}(h]h ]h"]h$]h&]uh1jhjn,ubeh}(h]h ]h"]h$]h&]uh1jhj,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)}(hj,h]h p_req_valid}(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:820: ./include/media/v4l2-ctrls.hhMWhj,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&]uh1jhj,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:820: ./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:820: ./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:820: ./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}(hjB-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:-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:820: ./include/media/v4l2-ctrls.hhM[hj7-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj6-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)}(hjm-h]h p_req_elems}(hjo-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk-ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMahjg-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 }(hj-hhhNhNubj)}(h **p_req**h]hp_req}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubhf. This is the same as ctrl->elems, except for dynamic arrays. In that case it is in the range of 1 to }(hj-hhhNhNubj)}(h**p_req_array_alloc_elems**h]hp_req_array_alloc_elems}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh. Only valid if }(hj-hhhNhNubj)}(h**p_req_valid**h]h p_req_valid}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh is true.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM^hj-ubah}(h]h ]h"]h$]h&]uh1jhjg-ubeh}(h]h ]h"]h$]h&]uh1jhj-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:820: ./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&]uh1jhj-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:820: ./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&]uh1jhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(h**Description**h]j)}(hj2.h]h Description}(hj4.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0.ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhhj hhubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_handler (C struct)c.v4l2_ctrl_handlerhNtauh1j hj hhhNhNubj)}(hhh](j )}(hv4l2_ctrl_handlerh]j)}(hstruct v4l2_ctrl_handlerh](j)}(hjh]hstruct}(hjp.hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjl.hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMoubj+)}(h h]h }(hj~.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjl.hhhj}.hMoubj<)}(hv4l2_ctrl_handlerh]jB)}(hjj.h]hv4l2_ctrl_handler}(hj.hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj.ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjl.hhhj}.hMoubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjh.hhhj}.hMoubah}(h]jc.ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj}.hMohje.hhubjn)}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM|hj.hhubah}(h]h ]h"]h$]h&]uh1jmhje.hhhj}.hMoubeh}(h]h ](jstructeh"]h$]h&]jjjj.jj.jjjuh1jhhhj hNhNubj)}(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&]uh1jhj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhj.ubh)}(h **Members**h]j)}(hj/h]hMembers}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(hDefault for "lock".h]hDefault for “lock”.}(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)}(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)}(hjX/h]hlock}(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:820: ./include/media/v4l2-ctrls.hhMhjR/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.}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjn/ubah}(h]h ]h"]h$]h&]uh1jhjR/ubeh}(h]h ]h"]h$]h&]uh1jhjm/hMhj/ubj)}(h6``ctrls`` The list of controls owned by this handler. h](j)}(h ``ctrls``h]j)}(hj/h]hctrls}(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:820: ./include/media/v4l2-ctrls.hhMhj/ubj)}(hhh]h)}(h+The list of controls owned by this handler.h]h+The list of controls owned by this 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)}(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:820: ./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)}(hj0h]hcached}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(hF``buckets`` Buckets for the hashing. Allows for quick control lookup. h](j)}(h ``buckets``h]j)}(hj>0h]hbuckets}(hj@0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj80ubj)}(hhh]h)}(h9Buckets for the hashing. Allows for quick control lookup.h]h9Buckets for the hashing. Allows for quick control lookup.}(hjW0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS0hMhjT0ubah}(h]h ]h"]h$]h&]uh1jhj80ubeh}(h]h ]h"]h$]h&]uh1jhjS0hMhj/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)}(hjw0h]hnotify}(hjy0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjq0ubj)}(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!}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jhjq0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(hE``notify_priv`` Passed as argument to the v4l2_ctrl notify callback. h](j)}(h``notify_priv``h]j)}(hj0h]h notify_priv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj0ubj)}(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&]uh1jhj0ubeh}(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:820: ./include/media/v4l2-ctrls.hhMhj0ubj)}(hhh]h)}(h%Total number of buckets in the array.h]h%Total number of buckets in the array.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(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)}(hj#1h]herror}(hj%1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj1ubj)}(hhh]h)}(h4The error code of the first failed control addition.h]h4The error code of the first failed control addition.}(hj<1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj81hMhj91ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj81hMhj/ubj)}(h6``request_is_queued`` True if the request was queued. h](j)}(h``request_is_queued``h]j)}(hj\1h]hrequest_is_queued}(hj^1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjV1ubj)}(hhh]h)}(hTrue if the request was queued.h]hTrue if the request was queued.}(hju1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq1hMhjr1ubah}(h]h ]h"]h$]h&]uh1jhjV1ubeh}(h]h ]h"]h$]h&]uh1jhjq1hMhj/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)}(hj1h]hrequests}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj1ubj)}(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 (}(hj1hhhNhNubj)}(h**req_obj.ops**h]h req_obj.ops}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh == 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.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj/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:820: ./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:820: ./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)}(hj2h]hreq_obj}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj2ubj)}(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 }(hj42hhhNhNubh)}(h<:c:type:`struct media_request_object `h]j)}(hj>2h]hstruct media_request_object}(hj@2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jmedia_request_objectuh1hhj02hMhj42ubh, used to link into a }(hj42hhhNhNubh)}(h.:c:type:`struct media_request `h]j)}(hja2h]hstruct media_request}(hjc2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj_2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j media_requestuh1hhj02hMhj42ubh%. This request object has a refcount.}(hj42hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj02hMhj12ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj02hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_config (C struct)c.v4l2_ctrl_confighNtauh1j hj hhhNhNubj)}(hhh](j )}(hv4l2_ctrl_configh]j)}(hstruct v4l2_ctrl_configh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj2hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2hhhj2hMubj<)}(hv4l2_ctrl_configh]jB)}(hj2h]hv4l2_ctrl_config}(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj2ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj2hhhj2hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj2hhhj2hMubah}(h]j2ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj2hMhj2hhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jmhj2hhhj2hMubeh}(h]h ](jstructeh"]h$]h&]jjjj3jj3jjjuh1jhhhj hNhNubj)}(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}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj3ubj)}(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; };}hj93sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj3ubh)}(h **Members**h]j)}(hjJ3h]hMembers}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH3ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj3ubj)}(hhh](j)}(h``ops`` The control ops. h](j)}(h``ops``h]j)}(hji3h]hops}(hjk3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjc3ubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjc3ubeh}(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)}(hj3h]htype_ops}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj3ubj)}(hhh]h)}(h8The control type ops. Only needed for compound controls.h]h8The control type ops. Only needed for compound controls.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj`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:820: ./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)}(hj4h]hname}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj4ubj)}(hhh]h)}(hThe control name.h]hThe control name.}(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``type`` The control type. h](j)}(h``type``h]j)}(hjM4h]htype}(hjO4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjG4ubj)}(hhh]h)}(hThe control type.h]hThe control type.}(hjf4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb4hMhjc4ubah}(h]h ]h"]h$]h&]uh1jhjG4ubeh}(h]h ]h"]h$]h&]uh1jhjb4hMhj`3ubj)}(h%``min`` The control's minimum value. h](j)}(h``min``h]j)}(hj4h]hmin}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj4ubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj`3ubj)}(h%``max`` The control's maximum value. h](j)}(h``max``h]j)}(hj4h]hmax}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj4ubj)}(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&]uh1jhj4ubeh}(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:820: ./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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 5hMhj`3ubj)}(h%``def`` The control's default value. h](j)}(h``def``h]j)}(hj15h]hdef}(hj35hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj+5ubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hjJ5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF5hMhjG5ubah}(h]h ]h"]h$]h&]uh1jhj+5ubeh}(h]h ]h"]h$]h&]uh1jhjF5hMhj`3ubj)}(h=``p_def`` The control's default value for compound controls. h](j)}(h ``p_def``h]j)}(hjj5h]hp_def}(hjl5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjd5ubj)}(hhh]h)}(h2The control's default value for compound controls.h]h4The control’s default value for compound controls.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjd5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj`3ubj)}(h=``p_min`` The control's minimum value for compound controls. h](j)}(h ``p_min``h]j)}(hj5h]hp_min}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj5ubj)}(hhh]h)}(h2The control's minimum value for compound controls.h]h4The control’s minimum 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=``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:820: ./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)}(hj6h]hdims}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj6ubj)}(hhh]h)}(hThe size of each dimension.h]hThe size of each dimension.}(hj.6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*6hMhj+6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj*6hMhj`3ubj)}(h0``elem_size`` The size in bytes of the control. h](j)}(h ``elem_size``h]j)}(hjN6h]h elem_size}(hjP6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjH6ubj)}(hhh]h)}(h!The size in bytes of the control.h]h!The size in bytes of the control.}(hjg6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc6hMhjd6ubah}(h]h ]h"]h$]h&]uh1jhjH6ubeh}(h]h ]h"]h$]h&]uh1jhjc6hMhj`3ubj)}(h``flags`` The control's flags. h](j)}(h ``flags``h]j)}(hj6h]hflags}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj6ubj)}(hhh]h)}(hThe control's flags.h]hThe control’s flags.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj`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:820: ./include/media/v4l2-ctrls.hhMhj6ubj)}(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:820: ./include/media/v4l2-ctrls.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(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:820: ./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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj`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)}(hj47h]h qmenu_int}(hj67hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj27ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj.7ubj)}(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.}(hjM7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjJ7ubah}(h]h ]h"]h$]h&]uh1jhj.7ubeh}(h]h ]h"]h$]h&]uh1jhjI7hMhj`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)}(hjn7h]h is_private}(hjp7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl7ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjh7ubj)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjh7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj`3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj7hhhj7hMubj<)}(hv4l2_ctrl_fillh]jB)}(hv4l2_ctrl_fillh]hv4l2_ctrl_fill}(hj7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj7ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj7hhhj7hMubj)}(hk(u32 id, const char **name, enum v4l2_ctrl_type *type, s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)h](j)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hj8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj 8modnameN classnameNjkjn)}jq]jt)}jgj7sbc.v4l2_ctrl_fillasbuh1hhj8ubj+)}(h h]h }(hj'8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8ubjB)}(hidh]hid}(hj58hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(hconst char **nameh](j)}(hconsth]hconst}(hjN8hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjJ8ubj+)}(h h]h }(hj\8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJ8ubj)}(hcharh]hchar}(hjj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ8ubj+)}(h h]h }(hjx8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJ8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ8ubjB)}(hnameh]hname}(hj8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjJ8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(henum v4l2_ctrl_type *typeh](j)}(henumh]henum}(hj8hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj8ubj+)}(h h]h }(hj8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8ubh)}(hhh]jB)}(hv4l2_ctrl_typeh]hv4l2_ctrl_type}(hj8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj8modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhj8ubj+)}(h h]h }(hj8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjB)}(htypeh]htype}(hj9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(hs64 *minh](h)}(hhh]jB)}(hs64h]hs64}(hj-9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj*9ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj/9modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhj&9ubj+)}(h h]h }(hjK9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&9ubj)}(hjh]h*}(hjY9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&9ubjB)}(hminh]hmin}(hjf9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj&9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(hs64 *maxh](h)}(hhh]jB)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj9modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhj{9ubj+)}(h h]h }(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj{9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{9ubjB)}(hmaxh]hmax}(hj9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj{9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(h u64 *steph](h)}(hhh]jB)}(hu64h]hu64}(hj9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj9modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhj9ubj+)}(h h]h }(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjB)}(hsteph]hstep}(hj:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(hs64 *defh](h)}(hhh]jB)}(hs64h]hs64}(hj,:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj):ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj.:modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhj%:ubj+)}(h h]h }(hjJ:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%:ubj)}(hjh]h*}(hjX:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%:ubjB)}(hdefh]hdef}(hje:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj%:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubj)}(h u32 *flagsh](h)}(hhh]jB)}(hu32h]hu32}(hj:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj~:ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj:modnameN classnameNjkjn)}jq]j#8c.v4l2_ctrl_fillasbuh1hhjz:ubj+)}(h h]h }(hj:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjz:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz:ubjB)}(hflagsh]hflags}(hj:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjz:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7ubeh}(h]h ]h"]h$]h&]hhuh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj7hhhj7hMubah}(h]j7ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj7hMhj7hhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1jmhj7hhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhj hNhNubj)}(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&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./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:820: ./include/media/v4l2-ctrls.hhMhjX;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}(hjw;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs;hMhjt;ubah}(h]h ]h"]h$]h&]uh1jhjX;ubeh}(h]h ]h"]h$]h&]uh1jhjs;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)}(hj;h]henum v4l2_ctrl_type *type}(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:820: ./include/media/v4l2-ctrls.hhMhj;ubj)}(hhh]h)}(h+pointer for storing the type of the controlh]h+pointer for storing the type 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)}(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:820: ./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:820: ./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)}(hjB<h]h u64 *step}(hjD<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:820: ./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&]uh1hhjW<hMhjX<ubah}(h]h ]h"]h$]h&]uh1jhj<<ubeh}(h]h ]h"]h$]h&]uh1jhjW<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&]uh1jhjy<ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhju<ubj)}(hhh]h)}(h5pointer for storing the default value for the controlh]h5pointer for storing the default value for the control}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhju<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj;ubj)}(hG``u32 *flags`` pointer for storing the flags to be used on the control h](j)}(h``u32 *flags``h]j)}(hj<h]h u32 *flags}(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:820: ./include/media/v4l2-ctrls.hhMhj<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&]uh1jhj<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&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1jhj=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:820: ./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 }(hj8=hhhNhNubj)}(h**name**h]hname}(hj@=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh, }(hj8=hhhNhNubj)}(h**type**h]htype}(hjR=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh and }(hj8=hhhNhNubj)}(h **flags**h]hflags}(hjd=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh. The contents of }(hj8=hhhNhNubj)}(h**min**h]hmin}(hjv=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh, }hj8=sbj)}(h**max**h]hmax}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh, }hj8=sbj)}(h**step**h]hstep}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh and }hj8=sbj)}(h**def**h]hdef}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8=ubh' may be modified depending on the type.}(hj8=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj;ubjD)}(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:820: ./include/media/v4l2-ctrls.hhMhj=ubah}(h]h ]h"]h$]h&]uh1jChj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj >hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj=hhhj >hMubj<)}(hv4l2_ctrl_handler_init_classh]jB)}(hv4l2_ctrl_handler_init_classh]hv4l2_ctrl_handler_init_class}(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj>ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj=hhhj >hMubj)}(ho(struct v4l2_ctrl_handler *hdl, unsigned int nr_of_controls_hint, struct lock_class_key *key, const char *name)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj;>hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj7>ubj+)}(h h]h }(hjH>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj7>ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjY>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjV>ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj[>modnameN classnameNjkjn)}jq]jt)}jgj!>sbc.v4l2_ctrl_handler_init_classasbuh1hhj7>ubj+)}(h h]h }(hjy>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj7>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7>ubjB)}(hhdlh]hhdl}(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj7>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3>ubj)}(h unsigned int nr_of_controls_hinth](j)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj+)}(h h]h }(hj>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubj)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj+)}(h h]h }(hj>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubjB)}(hnr_of_controls_hinth]hnr_of_controls_hint}(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3>ubj)}(hstruct lock_class_key *keyh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj>ubj+)}(h h]h }(hj ?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubh)}(hhh]jB)}(hlock_class_keyh]hlock_class_key}(hj?hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj?modnameN classnameNjkjn)}jq]ju>c.v4l2_ctrl_handler_init_classasbuh1hhj>ubj+)}(h h]h }(hj:?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubj)}(hjh]h*}(hjH?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjB)}(hkeyh]hkey}(hjU?hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3>ubj)}(hconst char *nameh](j)}(hjP8h]hconst}(hjn?hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjj?ubj+)}(h h]h }(hj{?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjj?ubj)}(hcharh]hchar}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj?ubj+)}(h h]h }(hj?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj?ubjB)}(hnameh]hname}(hj?hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3>ubeh}(h]h ]h"]h$]h&]hhuh1jhj=hhhj >hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj=hhhj >hMubah}(h]j=ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj >hMhj=hhubjn)}(hhh]h)}(hInitialize the control handler.h]hInitialize the control handler.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1jmhj=hhhj >hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``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. ``struct lock_class_key *key`` Used by the lock validator if CONFIG_LOCKDEP is set. ``const char *name`` Used by the lock validator if CONFIG_LOCKDEP is set. **Description** .. attention:: Never use this call directly, always use the v4l2_ctrl_handler_init() macro that hides the **key** and **name** arguments. **Return** returns an error if the buckets could not be allocated. This error will also be stored in **hdl->error**.h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhj@ubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hj6@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2@hMhj3@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj2@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)}(hjV@h]h unsigned int nr_of_controls_hint}(hjX@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT@ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjP@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.}(hjo@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjl@ubah}(h]h ]h"]h$]h&]uh1jhjP@ubeh}(h]h ]h"]h$]h&]uh1jhjk@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)}(hj@h]hstruct lock_class_key *key}(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:820: ./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@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:820: ./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)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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 AhhhNhNubj)}(h**key**h]hkey}(hj(AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubh and }(hj AhhhNhNubj)}(h**name**h]hname}(hj:AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubh arguments.}(hj AhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjAubah}(h]h ]h"]h$]h&]uh1jAhj?ubh)}(h **Return**h]j)}(hj[Ah]hReturn}(hj]AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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 }(hjqAhhhNhNubj)}(h**hdl->error**h]h hdl->error}(hjyAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqAubh.}(hjqAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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]jB)}(hjAh]hv4l2_ctrl_handler_init}(hjAhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjAubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjAhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubah}(h]h ]h"]h$]h&]hhj_uh1jj`jahjAhhhjAhMubah}(h]jAah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjAhMhjAhhubjn)}(hhh]h}(h]h ]h"]h$]h&]uh1jmhjAhhhjAhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjAjjAjjjuh1jhhhj 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:820: ./include/media/v4l2-ctrls.hhM hj hhubj)}(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 }(hjBhhhNhNubh)}(h:c:type:`lock_class_key`h]j)}(hj Bh]hlock_class_key}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jlock_class_keyuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubh) and calls v4l2_ctrl_handler_init_class()}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)BhMhjAubah}(h]h ]h"]h$]h&]uh1jhj)BhMhj hhubj)}(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)}(hj@Bh]h Parameters}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Bubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM"hj:Bubj)}(hhh](j)}(h``hdl`` The control handler. h](j)}(h``hdl``h]j)}(hj_Bh]hhdl}(hjaBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Bubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hjYBubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjxBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtBhM!hjuBubah}(h]h ]h"]h$]h&]uh1jhjYBubeh}(h]h ]h"]h$]h&]uh1jhjtBhM!hjVBubj)}(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)}(hjBh]hnr_of_controls_hint}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM(hjBubj)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM"hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM(hjVBubeh}(h]h ]h"]h$]h&]uh1jhj:Bubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM*hj:Bubh)}(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 refexplicitrefwarnjkj4jlock_class_keyuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1hhjChM)hj:Bubh)}(h9Use this helper function to initialize a control handler.h]h9Use this helper function to initialize a control handler.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM-hj:Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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:int v4l2_ctrl_handler_free (struct v4l2_ctrl_handler *hdl)h]j)}(h9int v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)h](j)}(hinth]hint}(hjKChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGChhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMAubj+)}(h h]h }(hjZChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjGChhhjYChMAubj<)}(hv4l2_ctrl_handler_freeh]jB)}(hv4l2_ctrl_handler_freeh]hv4l2_ctrl_handler_free}(hjlChhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjhCubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjGChhhjYChMAubj)}(h(struct v4l2_ctrl_handler *hdl)h]j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjCubj+)}(h h]h }(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjCubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjChhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjCubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjCmodnameN classnameNjkjn)}jq]jt)}jgjnCsbc.v4l2_ctrl_handler_freeasbuh1hhjCubj+)}(h h]h }(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjB)}(hhdlh]hhdl}(hjChhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjCubah}(h]h ]h"]h$]h&]hhuh1jhjGChhhjYChMAubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjCChhhjYChMAubah}(h]j>Cah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjYChMAhj@Chhubjn)}(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.}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMAhjDhhubah}(h]h ]h"]h$]h&]uh1jmhj@ChhhjYChMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#Djj#Djjjuh1jhhhj hNhNubj)}(h**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. **Description** Does nothing if **hdl** == NULL. **Return** **hdl**'s error field or 0 if **hdl** is NULL.h](h)}(h**Parameters**h]j)}(hj-Dh]h Parameters}(hj/DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Dubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMEhj'Dubj)}(hhh]j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjLDh]hstruct v4l2_ctrl_handler *hdl}(hjNDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJDubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMChjFDubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjeDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaDhMChjbDubah}(h]h ]h"]h$]h&]uh1jhjFDubeh}(h]h ]h"]h$]h&]uh1jhjaDhMChjCDubah}(h]h ]h"]h$]h&]uh1jhj'Dubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMEhj'Dubh)}(h Does nothing if **hdl** == NULL.h](hDoes nothing if }(hjDhhhNhNubj)}(h**hdl**h]hhdl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh == NULL.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMDhj'Dubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMFhj'Dubh)}(h.**hdl**'s error field or 0 if **hdl** is NULL.h](j)}(h**hdl**h]hhdl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh’s error field or 0 if }(hjDhhhNhNubj)}(h**hdl**h]hhdl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh is NULL.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMGhj'Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hvoidh]hvoid}(hj%EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ehhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMLubj+)}(h h]h }(hj4EhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!Ehhhj3EhMLubj<)}(hv4l2_ctrl_lockh]jB)}(hv4l2_ctrl_lockh]hv4l2_ctrl_lock}(hjFEhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjBEubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj!Ehhhj3EhMLubj)}(h(struct v4l2_ctrl *ctrl)h]j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjbEhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj^Eubj+)}(h h]h }(hjoEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^Eubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjEhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj}Eubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjEmodnameN classnameNjkjn)}jq]jt)}jgjHEsbc.v4l2_ctrl_lockasbuh1hhj^Eubj+)}(h h]h }(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^Eubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^EubjB)}(hctrlh]hctrl}(hjEhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj^Eubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZEubah}(h]h ]h"]h$]h&]hhuh1jhj!Ehhhj3EhMLubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjEhhhj3EhMLubah}(h]jEah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj3EhMLhjEhhubjn)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMLhjEhhubah}(h]h ]h"]h$]h&]uh1jmhjEhhhj3EhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhj hNhNubj)}(hA**Parameters** ``struct v4l2_ctrl *ctrl`` The control to lock.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMPhjFubj)}(hhh]j)}(h/``struct v4l2_ctrl *ctrl`` The control to lock.h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hj&Fh]hstruct v4l2_ctrl *ctrl}(hj(FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Fubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMRhj Fubj)}(hhh]h)}(hThe control to lock.h]hThe control to lock.}(hj?FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMNhjerror** is set to the error code (if it wasn't set already).h](h)}(h**Parameters**h]j)}(hjTOh]h Parameters}(hjVOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjROubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjNOubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjsOh]hstruct v4l2_ctrl_handler *hdl}(hjuOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqOubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjmOubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjmOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjjOubj)}(hI``const struct v4l2_ctrl_config *cfg`` The control's configuration data. h](j)}(h&``const struct v4l2_ctrl_config *cfg``h]j)}(hjOh]h"const struct v4l2_ctrl_config *cfg}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjOubj)}(hhh]h)}(h!The control's configuration data.h]h#The control’s configuration data.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjjOubj)}(h;``void *priv`` The control's driver-specific private data. h](j)}(h``void *priv``h]j)}(hjOh]h void *priv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjOubj)}(hhh]h)}(h+The control's driver-specific private data.h]h-The control’s driver-specific private data.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjjOubeh}(h]h ]h"]h$]h&]uh1jhjNOubh)}(h**Description**h]j)}(hj Ph]h Description}(hj"PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjNOubh)}(hIf the :c:type:`v4l2_ctrl` struct could not be allocated then NULL is returned and **hdl->error** is set to the error code (if it wasn't set already).h](hIf the }(hj6PhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hj@Ph]h v4l2_ctrl}(hjBPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>Pubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj6Pubh9 struct could not be allocated then NULL is returned and }(hj6PhhhNhNubj)}(h**hdl->error**h]h hdl->error}(hjbPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Pubh7 is set to the error code (if it wasn’t set already).}(hj6PhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]PhMhjNOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjPhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjPhhhjPhMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjPhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjPubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjPmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_new_stdsbc.v4l2_ctrl_new_stdasbuh1hhjPhhhjPhMubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjPhhhjPhMubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhMubj<)}(hv4l2_ctrl_new_stdh]jB)}(hjPh]hv4l2_ctrl_new_std}(hjPhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjPubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjPhhhjPhMubj)}(hm(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_handler *hdlh](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjQubj+)}(h h]h }(hj!QhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj2QhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj/Qubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj4QmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhjQubj+)}(h h]h }(hjPQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj)}(hjh]h*}(hj^QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjB)}(hhdlh]hhdl}(hjkQhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hconst struct v4l2_ctrl_ops *opsh](j)}(hjP8h]hconst}(hjQhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjQubj+)}(h h]h }(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjQubj+)}(h h]h }(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubh)}(hhh]jB)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hjQhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjQubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjQmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhjQubj+)}(h h]h }(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjB)}(hopsh]hops}(hjQhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjRmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhj Rubj+)}(h h]h }(hj0RhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj RubjB)}(hidh]hid}(hj>RhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj Rubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hs64 minh](h)}(hhh]jB)}(hs64h]hs64}(hjZRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjWRubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj\RmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhjSRubj+)}(h h]h }(hjxRhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjSRubjB)}(hminh]hmin}(hjRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjSRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hs64 maxh](h)}(hhh]jB)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjRmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhjRubj+)}(h h]h }(hjRhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubjB)}(hmaxh]hmax}(hjRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hu64 steph](h)}(hhh]jB)}(hu64h]hu64}(hjRhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjRmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhjRubj+)}(h h]h }(hjShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubjB)}(hsteph]hstep}(hjShhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubj)}(hs64 defh](h)}(hhh]jB)}(hs64h]hs64}(hj2ShhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj/Subah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj4SmodnameN classnameNjkjn)}jq]jPc.v4l2_ctrl_new_stdasbuh1hhj+Subj+)}(h h]h }(hjPShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj+SubjB)}(hdefh]hdef}(hj^ShhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj+Subeh}(h]h ]h"]h$]h&]noemphhhuh1jhj Qubeh}(h]h ]h"]h$]h&]hhuh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjPhhhjPhMubah}(h]jPah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjPhMhjPhhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMhjShhubah}(h]h ]h"]h$]h&]uh1jmhjPhhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhj hNhNubj)}(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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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)}(hjSh]hstruct v4l2_ctrl_handler *hdl}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hjTh]hconst struct v4l2_ctrl_ops *ops}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hj;Th]hu32 id}(hj=ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Tubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj5Tubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjTThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPThMhjQTubah}(h]h ]h"]h$]h&]uh1jhj5Tubeh}(h]h ]h"]h$]h&]uh1jhjPThMhjSubj)}(h)``s64 min`` The control's minimum value. h](j)}(h ``s64 min``h]j)}(hjtTh]hs64 min}(hjvThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrTubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjnTubj)}(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&]uh1jhjnTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h)``s64 max`` The control's maximum value. h](j)}(h ``s64 max``h]j)}(hjTh]hs64 max}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjTubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h&``u64 step`` The control's step value h](j)}(h ``u64 step``h]j)}(hjTh]hu64 step}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjTubj)}(hhh]h)}(hThe control's step valueh]hThe control’s step value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h)``s64 def`` The control's default value. h](j)}(h ``s64 def``h]j)}(hjUh]hs64 def}(hj!UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjUubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hj8UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4UhMhj5Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj4UhMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjZUh]h Description}(hj\UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXUubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjSubh)}(hIf 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).h](hIf the }(hjpUhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjzUh]h v4l2_ctrl}(hj|UhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjxUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjpUubhZ struct could not be allocated, or the control ID is not known, then NULL is returned and }(hjpUhhhNhNubj)}(h**hdl->error**h]h hdl->error}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpUubhC is set to the appropriate error code (if it wasn’t set already).}(hjpUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjSubh)}(hHIf **id** refers to a menu control, then this function will return NULL.h](hIf }(hjUhhhNhNubj)}(h**id**h]hid}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh? refers to a menu control, then this function will return NULL.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjVhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVhhhjVhMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj#VhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj Vubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj%VmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_new_std_menusbc.v4l2_ctrl_new_std_menuasbuh1hhjVhhhjVhMubj+)}(h h]h }(hjDVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVhhhjVhMubj)}(hjh]h*}(hjRVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjVhMubj<)}(hv4l2_ctrl_new_std_menuh]jB)}(hjAVh]hv4l2_ctrl_new_std_menu}(hjcVhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj_Vubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjVhhhjVhMubj)}(hb(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj~VhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjzVubj+)}(h h]h }(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjzVubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjVhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjVubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjVmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjzVubj+)}(h h]h }(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjzVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzVubjB)}(hhdlh]hhdl}(hjVhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjzVubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubj)}(hconst struct v4l2_ctrl_ops *opsh](j)}(hjP8h]hconst}(hjVhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjVubj+)}(h h]h }(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVubj)}(hjh]hstruct}(hj WhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjVubj+)}(h h]h }(hjWhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVubh)}(hhh]jB)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hj'WhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj$Wubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj)WmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjVubj+)}(h h]h }(hjEWhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjVubj)}(hjh]h*}(hjSWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjB)}(hopsh]hops}(hj`WhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubj)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hj|WhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjyWubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj~WmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjuWubj+)}(h h]h }(hjWhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjuWubjB)}(hidh]hid}(hjWhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjuWubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubj)}(hu8 maxh](h)}(hhh]jB)}(hu8h]hu8}(hjWhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjWubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjWmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjWubj+)}(h h]h }(hjWhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjWubjB)}(hmaxh]hmax}(hjWhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjWubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubj)}(hu64 maskh](h)}(hhh]jB)}(hu64h]hu64}(hj XhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj Xubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjXmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjXubj+)}(h h]h }(hj*XhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjXubjB)}(hmaskh]hmask}(hj8XhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjXubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubj)}(hu8 defh](h)}(hhh]jB)}(hu8h]hu8}(hjTXhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjQXubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjVXmodnameN classnameNjkjn)}jq]j?Vc.v4l2_ctrl_new_std_menuasbuh1hhjMXubj+)}(h h]h }(hjrXhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMXubjB)}(hdefh]hdef}(hjXhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjMXubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvVubeh}(h]h ]h"]h$]h&]hhuh1jhjVhhhjVhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjUhhhjVhMubah}(h]jUah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjVhMhjUhhubjn)}(hhh]h)}(h9Allocate and initialize a new standard V4L2 menu control.h]h9Allocate and initialize a new standard V4L2 menu control.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXhhubah}(h]h ]h"]h$]h&]uh1jmhjUhhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhj hNhNubj)}(hXG**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``const struct v4l2_ctrl_ops *ops`` The control ops. ``u32 id`` The control ID. ``u8 max`` The control's maximum value. ``u64 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. ``u8 def`` The control's default value. **Description** Same as v4l2_ctrl_new_std(), but **min** is set to 0 and the **mask** value determines which menu items are to be skipped. If **id** refers to a non-menu control, then this function will return NULL.h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjXh]hstruct v4l2_ctrl_handler *hdl}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjXubj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hj$Yh]hconst struct v4l2_ctrl_ops *ops}(hj&YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Yubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjYubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hj=YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9YhMhj:Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhj9YhMhjXubj)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hj]Yh]hu32 id}(hj_YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Yubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjWYubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjvYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrYhMhjsYubah}(h]h ]h"]h$]h&]uh1jhjWYubeh}(h]h ]h"]h$]h&]uh1jhjrYhMhjXubj)}(h(``u8 max`` The control's maximum value. h](j)}(h ``u8 max``h]j)}(hjYh]hu8 max}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjYubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjXubj)}(hXk``u64 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 ``u64 mask``h]j)}(hjYh]hu64 mask}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjYubj)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjXubj)}(h(``u8 def`` The control's default value. h](j)}(h ``u8 def``h]j)}(hj Zh]hu8 def}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjZubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hj"ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjDZh]h Description}(hjFZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBZubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXubh)}(hzSame as v4l2_ctrl_new_std(), but **min** is set to 0 and the **mask** value determines which menu items are to be skipped.h](h!Same as v4l2_ctrl_new_std(), but }(hjZZhhhNhNubj)}(h**min**h]hmin}(hjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZZubh is set to 0 and the }(hjZZhhhNhNubj)}(h**mask**h]hmask}(hjtZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZZubh5 value determines which menu items are to be skipped.}(hjZZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXubh)}(hLIf **id** refers to a non-menu control, then this function will return NULL.h](hIf }(hjZhhhNhNubj)}(h**id**h]hid}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubhC refers to a non-menu control, then this function will return NULL.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j)v4l2_ctrl_new_std_menu_items (C function)c.v4l2_ctrl_new_std_menu_itemshNtauh1j hj hhhNhNubj)}(hhh](j )}(hstruct v4l2_ctrl * v4l2_ctrl_new_std_menu_items (struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def, const char * const *qmenu)h]j)}(hstruct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def, const char *const *qmenu)h](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjZhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjZhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZhhhjZhMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjZhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjZubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjZmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_new_std_menu_itemssbc.v4l2_ctrl_new_std_menu_itemsasbuh1hhjZhhhjZhMubj+)}(h h]h }(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZhhhjZhMubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhMubj<)}(hv4l2_ctrl_new_std_menu_itemsh]jB)}(hj [h]hv4l2_ctrl_new_std_menu_items}(hj-[hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj)[ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjZhhhjZhMubj)}(h|(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u64 mask, u8 def, const char *const *qmenu)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjH[hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjD[ubj+)}(h h]h }(hjU[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjD[ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjf[hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjc[ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjh[modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhjD[ubj+)}(h h]h }(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjD[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD[ubjB)}(hhdlh]hhdl}(hj[hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjD[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hconst struct v4l2_ctrl_ops *opsh](j)}(hjP8h]hconst}(hj[hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj[ubj+)}(h h]h }(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubj)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj[ubj+)}(h h]h }(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubh)}(hhh]jB)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hj[hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj[modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhj[ubj+)}(h h]h }(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjB)}(hopsh]hops}(hj*\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjF\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjC\ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjH\modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhj?\ubj+)}(h h]h }(hjd\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?\ubjB)}(hidh]hid}(hjr\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hu8 maxh](h)}(hhh]jB)}(hu8h]hu8}(hj\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj\modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhj\ubj+)}(h h]h }(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubjB)}(hmaxh]hmax}(hj\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hu64 maskh](h)}(hhh]jB)}(hu64h]hu64}(hj\hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj\modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhj\ubj+)}(h h]h }(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubjB)}(hmaskh]hmask}(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hu8 defh](h)}(hhh]jB)}(hu8h]hu8}(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj ]modnameN classnameNjkjn)}jq]j [c.v4l2_ctrl_new_std_menu_itemsasbuh1hhj]ubj+)}(h h]h }(hj<]hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj]ubjB)}(hdefh]hdef}(hjJ]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubj)}(hconst char *const *qmenuh](j)}(hjP8h]hconst}(hjc]hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj_]ubj+)}(h h]h }(hjp]hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_]ubj)}(hcharh]hchar}(hj~]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_]ubj+)}(h h]h }(hj]hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_]ubj)}(hjP8h]hconst}(hj]hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj_]ubj+)}(h h]h }(hj]hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_]ubjB)}(hqmenuh]hqmenu}(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj_]ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@[ubeh}(h]h ]h"]h$]h&]hhuh1jhjZhhhjZhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjZhhhjZhMubah}(h]jZah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjZhMhjZhhubjn)}(hhh]h)}(hBCreate a new standard V4L2 menu control with driver specific menu.h]hBCreate a new standard V4L2 menu control with driver specific menu.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1jmhjZhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``const struct v4l2_ctrl_ops *ops`` The control ops. ``u32 id`` The control ID. ``u8 max`` The control's maximum value. ``u64 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. ``u8 def`` The control's default value. ``const char * const *qmenu`` The new menu. **Description** Same as v4l2_ctrl_new_std_menu(), but **qmenu** will be the driver specific menu of this control.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1jhj8^ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj4^ubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjS^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO^hMhjP^ubah}(h]h ]h"]h$]h&]uh1jhj4^ubeh}(h]h ]h"]h$]h&]uh1jhjO^hMhj1^ubj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hjs^h]hconst struct v4l2_ctrl_ops *ops}(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:820: ./include/media/v4l2-ctrls.hhMhjm^ubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjm^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj1^ubj)}(h``u32 id`` The control ID. 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:820: ./include/media/v4l2-ctrls.hhMhj^ubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj1^ubj)}(h(``u8 max`` The control's maximum value. h](j)}(h ``u8 max``h]j)}(hj^h]hu8 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:820: ./include/media/v4l2-ctrls.hhMhj^ubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj1^ubj)}(hXk``u64 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 ``u64 mask``h]j)}(hj_h]hu64 mask}(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:820: ./include/media/v4l2-ctrls.hhMhj_ubj)}(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.}(hj7_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj4_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj3_hMhj1^ubj)}(h(``u8 def`` The control's default value. h](j)}(h ``u8 def``h]j)}(hjX_h]hu8 def}(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:820: ./include/media/v4l2-ctrls.hhMhjR_ubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hjq_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm_hMhjn_ubah}(h]h ]h"]h$]h&]uh1jhjR_ubeh}(h]h ]h"]h$]h&]uh1jhjm_hMhj1^ubj)}(h,``const char * const *qmenu`` The new menu. h](j)}(h``const char * const *qmenu``h]j)}(hj_h]hconst char * const *qmenu}(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:820: ./include/media/v4l2-ctrls.hhMhj_ubj)}(hhh]h)}(h The new menu.h]h The new menu.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj1^ubeh}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj^ubh)}(haSame as v4l2_ctrl_new_std_menu(), but **qmenu** will be the driver specific menu of this control.h](h&Same as v4l2_ctrl_new_std_menu(), but }(hj_hhhNhNubj)}(h **qmenu**h]hqmenu}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh2 will be the driver specific menu of this control.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j'v4l2_ctrl_new_std_compound (C function)c.v4l2_ctrl_new_std_compoundhNtauh1j hj hhhNhNubj)}(hhh](j )}(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, const union v4l2_ctrl_ptr p_min, const union v4l2_ctrl_ptr p_max)h]j)}(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, const union v4l2_ctrl_ptr p_min, const union v4l2_ctrl_ptr p_max)h](j)}(hjh]hstruct}(hj#`hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj`hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj1`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`hhhj0`hMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjB`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?`ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjD`modnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_new_std_compoundsbc.v4l2_ctrl_new_std_compoundasbuh1hhj`hhhj0`hMubj+)}(h h]h }(hjc`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`hhhj0`hMubj)}(hjh]h*}(hjq`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj0`hMubj<)}(hv4l2_ctrl_new_std_compoundh]jB)}(hj``h]hv4l2_ctrl_new_std_compound}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj~`ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj`hhhj0`hMubj)}(h(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, const union v4l2_ctrl_ptr p_def, const union v4l2_ctrl_ptr p_min, const union v4l2_ctrl_ptr p_max)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj`ubj+)}(h h]h }(hj`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj`modnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhj`ubj+)}(h h]h }(hj`hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjB)}(hhdlh]hhdl}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hconst struct v4l2_ctrl_ops *opsh](j)}(hjP8h]hconst}(hj ahhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj aubj+)}(h h]h }(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj aubj)}(hjh]hstruct}(hj(ahhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj aubj+)}(h h]h }(hj5ahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj aubh)}(hhh]jB)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hjFahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjCaubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjHamodnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhj aubj+)}(h h]h }(hjdahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj aubj)}(hjh]h*}(hjrahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubjB)}(hopsh]hops}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj aubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjaubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjamodnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhjaubj+)}(h h]h }(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubjB)}(hidh]hid}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hconst union v4l2_ctrl_ptr p_defh](j)}(hjP8h]hconst}(hjahhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjaubj+)}(h h]h }(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubj)}(hjh]hunion}(hjahhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjaubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubh)}(hhh]jB)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjbubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjbmodnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhjaubj+)}(h h]h }(hj7bhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubjB)}(hp_defh]hp_def}(hjEbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hconst union v4l2_ctrl_ptr p_minh](j)}(hjP8h]hconst}(hj^bhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjZbubj+)}(h h]h }(hjkbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZbubj)}(hjh]hunion}(hjybhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjZbubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZbubh)}(hhh]jB)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjbubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjbmodnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhjZbubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZbubjB)}(hp_minh]hp_min}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjZbubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hconst union v4l2_ctrl_ptr p_maxh](j)}(hjP8h]hconst}(hjbhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjbubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj)}(hjh]hunion}(hjbhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjbubj+)}(h h]h }(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubh)}(hhh]jB)}(h v4l2_ctrl_ptrh]h v4l2_ctrl_ptr}(hjchhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjcubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjcmodnameN classnameNjkjn)}jq]j^`c.v4l2_ctrl_new_std_compoundasbuh1hhjbubj+)}(h h]h }(hj3chhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubjB)}(hp_maxh]hp_max}(hjAchhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjbubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubeh}(h]h ]h"]h$]h&]hhuh1jhj`hhhj0`hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj`hhhj0`hMubah}(h]j`ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj0`hMhj`hhubjn)}(hhh]h)}(h=Allocate and initialize a new standard V4L2 compound control.h]h=Allocate and initialize a new standard V4L2 compound control.}(hjkchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhchhubah}(h]h ]h"]h$]h&]uh1jmhj`hhhj0`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``const struct v4l2_ctrl_ops *ops`` The control ops. ``u32 id`` The control ID. ``const union v4l2_ctrl_ptr p_def`` The control's default value. ``const union v4l2_ctrl_ptr p_min`` The control's minimum value. ``const union v4l2_ctrl_ptr p_max`` The control's maximum value. **Description** Same as v4l2_ctrl_new_std(), but with support for compound controls. To fill in the **p_def**, **p_min** and **p_max** fields, use v4l2_ctrl_ptr_create() to convert a pointer to a const union v4l2_ctrl_ptr. Use v4l2_ctrl_ptr_create(NULL) if you want the default, minimum or maximum value of the compound control to be all zeroes. If the compound control does not set the ``V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX`` flag, then it does not has minimum and maximum values. In that case just use v4l2_ctrl_ptr_create(NULL) for the **p_min** and **p_max** arguments.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjcubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjch]hstruct v4l2_ctrl_handler *hdl}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjcubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hjch]hconst struct v4l2_ctrl_ops *ops}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjcubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubj)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hjdh]hu32 id}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjdubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hj7dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3dhMhj4dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj3dhMhjcubj)}(hA``const union v4l2_ctrl_ptr p_def`` The control's default value. h](j)}(h#``const union v4l2_ctrl_ptr p_def``h]j)}(hjWdh]hconst union v4l2_ctrl_ptr p_def}(hjYdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUdubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjQdubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hjpdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjldhMhjmdubah}(h]h ]h"]h$]h&]uh1jhjQdubeh}(h]h ]h"]h$]h&]uh1jhjldhMhjcubj)}(hA``const union v4l2_ctrl_ptr p_min`` The control's minimum value. h](j)}(h#``const union v4l2_ctrl_ptr p_min``h]j)}(hjdh]hconst union v4l2_ctrl_ptr p_min}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjdubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubj)}(hA``const union v4l2_ctrl_ptr p_max`` The control's maximum value. h](j)}(h#``const union v4l2_ctrl_ptr p_max``h]j)}(hjdh]hconst union v4l2_ctrl_ptr p_max}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjdubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjcubh)}(hX*Same as v4l2_ctrl_new_std(), but with support for compound controls. To fill in the **p_def**, **p_min** and **p_max** fields, use v4l2_ctrl_ptr_create() to convert a pointer to a const union v4l2_ctrl_ptr. Use v4l2_ctrl_ptr_create(NULL) if you want the default, minimum or maximum value of the compound control to be all zeroes. If the compound control does not set the ``V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX`` flag, then it does not has minimum and maximum values. In that case just use v4l2_ctrl_ptr_create(NULL) for the **p_min** and **p_max** arguments.h](hTSame as v4l2_ctrl_new_std(), but with support for compound controls. To fill in the }(hjehhhNhNubj)}(h **p_def**h]hp_def}(hj"ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh, }(hjehhhNhNubj)}(h **p_min**h]hp_min}(hj4ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh and }(hjehhhNhNubj)}(h **p_max**h]hp_max}(hjFehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh fields, use v4l2_ctrl_ptr_create() to convert a pointer to a const union v4l2_ctrl_ptr. Use v4l2_ctrl_ptr_create(NULL) if you want the default, minimum or maximum value of the compound control to be all zeroes. If the compound control does not set the }(hjehhhNhNubj)}(h$``V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX``h]h V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX}(hjXehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubhq flag, then it does not has minimum and maximum values. In that case just use v4l2_ctrl_ptr_create(NULL) for the }(hjehhhNhNubj)}(h **p_min**h]hp_min}(hjjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh and }hjesbj)}(h **p_max**h]hp_max}(hj|ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh arguments.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_ctrl_new_int_menu (C function)c.v4l2_ctrl_new_int_menuhNtauh1j hj hhhNhNubj)}(hhh](j )}(hstruct v4l2_ctrl * v4l2_ctrl_new_int_menu (struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u8 def, const s64 *qmenu_int)h]j)}(hstruct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u8 def, const s64 *qmenu_int)h](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjehhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjehhhjehMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjehhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjeubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjemodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_new_int_menusbc.v4l2_ctrl_new_int_menuasbuh1hhjehhhjehMubj+)}(h h]h }(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjehhhjehMubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubj<)}(hv4l2_ctrl_new_int_menuh]jB)}(hjeh]hv4l2_ctrl_new_int_menu}(hjfhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjfubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjehhhjehMubj)}(hn(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ops, u32 id, u8 max, u8 def, const s64 *qmenu_int)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj/fhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj+fubj+)}(h h]h }(hjhhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjgubj)}(hjh]h*}(hjLhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjB)}(h qmenu_inth]h qmenu_int}(hjYhhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjgubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'fubeh}(h]h ]h"]h$]h&]hhuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjehhhjehMubah}(h]jeah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjehMhjehhubjn)}(hhh]h)}(h0Create a new standard V4L2 integer menu control.h]h0Create a new standard V4L2 integer menu control.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jmhjehhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhj hNhNubj)}(hX-**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``const struct v4l2_ctrl_ops *ops`` The control ops. ``u32 id`` The control ID. ``u8 max`` The control's maximum value. ``u8 def`` The control's default value. ``const s64 *qmenu_int`` The control's menu entries. **Description** Same as v4l2_ctrl_new_std_menu(), but **mask** is set to 0 and it additionally takes as an argument an array of integers determining the menu items. If **id** refers to a non-integer-menu control, then this function will return ``NULL``.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjhh]hstruct v4l2_ctrl_handler *hdl}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h5``const struct v4l2_ctrl_ops *ops`` The control ops. h](j)}(h#``const struct v4l2_ctrl_ops *ops``h]j)}(hjhh]hconst struct v4l2_ctrl_ops *ops}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubj)}(hhh]h)}(hThe control ops.h]hThe control ops.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubj)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hj6ih]hu32 id}(hj8ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4iubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj0iubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjOihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKihMhjLiubah}(h]h ]h"]h$]h&]uh1jhj0iubeh}(h]h ]h"]h$]h&]uh1jhjKihMhjhubj)}(h(``u8 max`` The control's maximum value. h](j)}(h ``u8 max``h]j)}(hjoih]hu8 max}(hjqihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmiubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjiiubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubj)}(h(``u8 def`` The control's default value. h](j)}(h ``u8 def``h]j)}(hjih]hu8 def}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjiubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubj)}(h5``const s64 *qmenu_int`` The control's menu entries. h](j)}(h``const s64 *qmenu_int``h]j)}(hjih]hconst s64 *qmenu_int}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjiubj)}(hhh]h)}(hThe control's menu entries.h]hThe control’s menu entries.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubh)}(hSame as v4l2_ctrl_new_std_menu(), but **mask** is set to 0 and it additionally takes as an argument an array of integers determining the menu items.h](h&Same as v4l2_ctrl_new_std_menu(), but }(hj2jhhhNhNubj)}(h**mask**h]hmask}(hj:jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2jubhf is set to 0 and it additionally takes as an argument an array of integers determining the menu items.}(hj2jhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubh)}(hXIf **id** refers to a non-integer-menu control, then this function will return ``NULL``.h](hIf }(hjSjhhhNhNubj)}(h**id**h]hid}(hj[jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSjubhF refers to a non-integer-menu control, then this function will return }(hjSjhhhNhNubj)}(h``NULL``h]hNULL}(hjmjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSjubh.}(hjSjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_filter (C macro)c.v4l2_ctrl_filterhNtauh1j hj hhhNhNubj)}(hhh](j )}(hv4l2_ctrl_filterh]j)}(hv4l2_ctrl_filterh]j<)}(hv4l2_ctrl_filterh]jB)}(hjjh]hv4l2_ctrl_filter}(hjjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubah}(h]h ]h"]h$]h&]hhj_uh1jj`jahjjhhhjjhMubah}(h]jjah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjjhMhjjhhubjn)}(hhh]h)}(h\**Typedef**: Typedef to define the filter function to be used when adding a control handler.h](j)}(h **Typedef**h]hTypedef}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubhQ: Typedef to define the filter function to be used when adding a control handler.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jmhjjhhhjjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjjjuh1jhhhj hNhNubh)}(h **Syntax**h]j)}(hjjh]hSyntax}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj hhubj)}(h9``bool v4l2_ctrl_filter (const struct v4l2_ctrl *ctrl)`` h]h)}(h8``bool v4l2_ctrl_filter (const struct v4l2_ctrl *ctrl)``h]j)}(hjkh]h4bool v4l2_ctrl_filter (const struct v4l2_ctrl *ctrl)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjkubah}(h]h ]h"]h$]h&]uh1jhj*khMhj hhubj)}(hY**Parameters** ``const struct v4l2_ctrl *ctrl`` pointer to struct :c:type:`v4l2_ctrl`.h](h)}(h**Parameters**h]j)}(hj7kh]h Parameters}(hj9khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5kubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj1kubj)}(hhh]j)}(hG``const struct v4l2_ctrl *ctrl`` pointer to struct :c:type:`v4l2_ctrl`.h](j)}(h ``const struct v4l2_ctrl *ctrl``h]j)}(hjVkh]hconst struct v4l2_ctrl *ctrl}(hjXkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTkubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hjPkubj)}(hhh]h)}(h&pointer to struct :c:type:`v4l2_ctrl`.h](hpointer to struct }(hjokhhhNhNubh)}(h:c:type:`v4l2_ctrl`h]j)}(hjykh]h v4l2_ctrl}(hj{khhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwkubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrluh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjokubh.}(hjokhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMhjlkubah}(h]h ]h"]h$]h&]uh1jhjPkubeh}(h]h ]h"]h$]h&]uh1jhjkkhM!hjMkubah}(h]h ]h"]h$]h&]uh1jhj1kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j"v4l2_ctrl_add_handler (C function)c.v4l2_ctrl_add_handlerhNtauh1j hj hhhNhNubj)}(hhh](j )}(hint v4l2_ctrl_add_handler (struct v4l2_ctrl_handler *hdl, struct v4l2_ctrl_handler *add, v4l2_ctrl_filter filter, bool from_other_dev)h]j)}(hint v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl, struct v4l2_ctrl_handler *add, v4l2_ctrl_filter filter, bool from_other_dev)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjkhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkhhhjkhMubj<)}(hv4l2_ctrl_add_handlerh]jB)}(hv4l2_ctrl_add_handlerh]hv4l2_ctrl_add_handler}(hjkhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjkubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjkhhhjkhMubj)}(hl(struct v4l2_ctrl_handler *hdl, struct v4l2_ctrl_handler *add, v4l2_ctrl_filter filter, bool from_other_dev)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj lubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj lubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj.lhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj+lubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj0lmodnameN classnameNjkjn)}jq]jt)}jgjksbc.v4l2_ctrl_add_handlerasbuh1hhj lubj+)}(h h]h }(hjNlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj lubj)}(hjh]h*}(hj\lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubjB)}(hhdlh]hhdl}(hjilhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj lubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjlubj)}(hstruct v4l2_ctrl_handler *addh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj~lubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj~lubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjlhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjlubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjlmodnameN classnameNjkjn)}jq]jJlc.v4l2_ctrl_add_handlerasbuh1hhj~lubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj~lubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~lubjB)}(haddh]hadd}(hjlhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj~lubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjlubj)}(hv4l2_ctrl_filter filterh](h)}(hhh]jB)}(hv4l2_ctrl_filterh]hv4l2_ctrl_filter}(hjlhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjlubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjlmodnameN classnameNjkjn)}jq]jJlc.v4l2_ctrl_add_handlerasbuh1hhjlubj+)}(h h]h }(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjlubjB)}(hfilterh]hfilter}(hj!mhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjlubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjlubj)}(hbool from_other_devh](j)}(hboolh]hbool}(hj:mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6mubj+)}(h h]h }(hjHmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6mubjB)}(hfrom_other_devh]hfrom_other_dev}(hjVmhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj6mubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjlubeh}(h]h ]h"]h$]h&]hhuh1jhjkhhhjkhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjkhhhjkhMubah}(h]jkah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjkhMhjkhhubjn)}(hhh]h)}(h9Add all controls from handler **add** to handler **hdl**.h](hAdd all controls from handler }(hjmhhhNhNubj)}(h**add**h]hadd}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh to handler }(hjmhhhNhNubj)}(h**hdl**h]hhdl}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj}mhhubah}(h]h ]h"]h$]h&]uh1jmhjkhhhjkhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl_handler *hdl`` The control handler. ``struct v4l2_ctrl_handler *add`` The control handler whose controls you want to add to the **hdl** control handler. ``v4l2_ctrl_filter filter`` This function will filter which controls should be added. ``bool from_other_dev`` If true, then the controls in **add** were defined in another device than **hdl**. **Description** Does 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](h)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hjmubj)}(hhh](j)}(h7``struct v4l2_ctrl_handler *hdl`` The control handler. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjmh]hstruct v4l2_ctrl_handler *hdl}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjmubj)}(hhh]h)}(hThe control handler.h]hThe control handler.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjmubj)}(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)}(hjnh]hstruct v4l2_ctrl_handler *add}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM"hjnubj)}(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 }(hj7nhhhNhNubj)}(h**hdl**h]hhdl}(hj?nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7nubh control handler.}(hj7nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hj4nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj3nhM"hjmubj)}(hV``v4l2_ctrl_filter filter`` This function will filter which controls should be added. h](j)}(h``v4l2_ctrl_filter filter``h]j)}(hjjnh]hv4l2_ctrl_filter filter}(hjlnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhnubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM#hjdnubj)}(hhh]h)}(h9This function will filter which controls should be added.h]h9This function will filter which controls should be added.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM#hjnubah}(h]h ]h"]h$]h&]uh1jhjdnubeh}(h]h ]h"]h$]h&]uh1jhjnhM#hjmubj)}(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:820: ./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 }(hjnhhhNhNubj)}(h**add**h]hadd}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh% were defined in another device than }(hjnhhhNhNubj)}(h**hdl**h]hhdl}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM$hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM%hjmubeh}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM'hjmubh)}(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 }(hjohhhNhNubj)}(h **filter**h]hfilter}(hj!ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubhO is NULL, then all controls are added. Otherwise only those controls for which }(hjohhhNhNubj)}(h **filter**h]hfilter}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh1 returns true will be added. In case of an error }(hjohhhNhNubj)}(h**hdl->error**h]h hdl->error}(hjEohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh< will be set to the error code (if it wasn’t set already).}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM&hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hjMark all controls in the cluster as belonging to that cluster.h]h>Mark all controls in the cluster as belonging to that cluster.}(hjFrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM@hjCrhhubah}(h]h ]h"]h$]h&]uh1jmhjqhhhj6qhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^rjj^rjjjuh1jhhhj hNhNubj)}(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)}(hjhrh]h Parameters}(hjjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfrubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMDhjbrubj)}(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&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMChjrubj)}(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&]uh1hhjrhMChjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMChj~rubj)}(hP``struct v4l2_ctrl **controls`` The cluster control array of size **ncontrols**.h](j)}(h``struct v4l2_ctrl **controls``h]j)}(hjrh]hstruct v4l2_ctrl **controls}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMEhjrubj)}(hhh]h)}(h0The cluster control array of size **ncontrols**.h](h"The cluster control array of size }(hjrhhhNhNubj)}(h **ncontrols**h]h ncontrols}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMDhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMEhj~rubeh}(h]h ]h"]h$]h&]uh1jhjbrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_ctrl_auto_cluster (C function)c.v4l2_ctrl_auto_clusterhNtauh1j hj hhhNhNubj)}(hhh](j )}(hsvoid v4l2_ctrl_auto_cluster (unsigned int ncontrols, struct v4l2_ctrl **controls, u8 manual_val, bool set_volatile)h]j)}(hrvoid v4l2_ctrl_auto_cluster(unsigned int ncontrols, struct v4l2_ctrl **controls, u8 manual_val, bool set_volatile)h](j)}(hvoidh]hvoid}(hj,shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(shhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMJubj+)}(h h]h }(hj;shhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(shhhj:shMJubj<)}(hv4l2_ctrl_auto_clusterh]jB)}(hv4l2_ctrl_auto_clusterh]hv4l2_ctrl_auto_cluster}(hjMshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjIsubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj(shhhj:shMJubj)}(hW(unsigned int ncontrols, struct v4l2_ctrl **controls, u8 manual_val, bool set_volatile)h](j)}(hunsigned int ncontrolsh](j)}(hunsignedh]hunsigned}(hjishhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjesubj+)}(h h]h }(hjwshhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjesubj)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjesubj+)}(h h]h }(hjshhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjesubjB)}(h ncontrolsh]h ncontrols}(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjesubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjasubj)}(hstruct v4l2_ctrl **controlsh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjsubj+)}(h h]h }(hjshhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjsubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjsubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjsmodnameN classnameNjkjn)}jq]jt)}jgjOssbc.v4l2_ctrl_auto_clusterasbuh1hhjsubj+)}(h h]h }(hjshhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjsubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjB)}(hcontrolsh]hcontrols}(hj thhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjsubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjasubj)}(h u8 manual_valh](h)}(hhh]jB)}(hu8h]hu8}(hjtmodnameN classnameNjkjn)}jq]jsc.v4l2_ctrl_auto_clusterasbuh1hhj5tubj+)}(h h]h }(hjZthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj5tubjB)}(h manual_valh]h manual_val}(hjhthhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj5tubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjasubj)}(hbool set_volatileh](j)}(hjuubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMOhj:uubj)}(hhh]h)}(hThe cluster control array of size **ncontrols**. The first control must be the 'auto' control (e.g. autogain, autoexposure, etc.)h](h"The cluster control array of size }(hjYuhhhNhNubj)}(h **ncontrols**h]h ncontrols}(hjauhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYuubhV. The first control must be the ‘auto’ control (e.g. autogain, autoexposure, etc.)}(hjYuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMNhjVuubah}(h]h ]h"]h$]h&]uh1jhj:uubeh}(h]h ]h"]h$]h&]uh1jhjUuhMOhjtubj)}(ha``u8 manual_val`` The value for the first control in the cluster that equals the manual setting. h](j)}(h``u8 manual_val``h]j)}(hjuh]h u8 manual_val}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMQhjuubj)}(hhh]h)}(hNThe value for the first control in the cluster that equals the manual setting.h]hNThe value for the first control in the cluster that equals the manual setting.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMPhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMQhjtubj)}(ha``bool set_volatile`` If true, then all controls except the first auto control will be volatile. h](j)}(h``bool set_volatile``h]j)}(hjuh]hbool set_volatile}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMShjuubj)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMRhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMShjtubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMUhjtubh)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMThjtubh)}(h,The behavior of such controls is as follows:h]h,The behavior of such controls is as follows:}(hj'vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMYhjtubh)}(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).}(hj6vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM[hjtubh)}(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.}(hjEvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM_hjtubh)}(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 }(hjTvhhhNhNubj)}(h``V4L2_CTRL_FLAG_UPDATE``h]hV4L2_CTRL_FLAG_UPDATE}(hj\vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTvubh! flag on the autofoo control and }(hjTvhhhNhNubj)}(h``V4L2_CTRL_FLAG_INACTIVE``h]hV4L2_CTRL_FLAG_INACTIVE}(hjnvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTvubh2 on the foo control(s) if autofoo is in auto mode.}(hjTvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMchjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjvhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMnubj+)}(h h]h }(hjvhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjvhhhjvhMnubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjvhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjvubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjvmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_findsbc.v4l2_ctrl_findasbuh1hhjvhhhjvhMnubj+)}(h h]h }(hjvhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjvhhhjvhMnubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjvhMnubj<)}(hv4l2_ctrl_findh]jB)}(hjvh]hv4l2_ctrl_find}(hjwhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjwubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjvhhhjvhMnubj)}(h'(struct v4l2_ctrl_handler *hdl, u32 id)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj!whhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjwubj+)}(h h]h }(hj.whhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjwubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj?whhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj|h]h Parameters}(hj@|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<|ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj8|ubj)}(hhh](j)}(h8``struct v4l2_ctrl *ctrl`` The control to (de)activate. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hj]|h]hstruct v4l2_ctrl *ctrl}(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:820: ./include/media/v4l2-ctrls.hhMhjW|ubj)}(hhh]h)}(hThe control to (de)activate.h]hThe control to (de)activate.}(hjv|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr|hMhjs|ubah}(h]h ]h"]h$]h&]uh1jhjW|ubeh}(h]h ]h"]h$]h&]uh1jhjr|hMhjT|ubj)}(h<``bool grabbed`` True if the control should become grabbed. h](j)}(h``bool grabbed``h]j)}(hj|h]h bool grabbed}(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:820: ./include/media/v4l2-ctrls.hhMhj|ubj)}(hhh]h)}(h*True if the control should become grabbed.h]h*True if the control should become grabbed.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjT|ubeh}(h]h ]h"]h$]h&]uh1jhj8|ubh)}(h**Description**h]j)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj8|ubh)}(hThis sets or clears the V4L2_CTRL_FLAG_GRABBED flag atomically. Does nothing if **ctrl** == NULL. The V4L2_EVENT_CTRL event will be generated afterwards. This will usually be called when starting or stopping streaming in the driver.h](hPThis sets or clears the V4L2_CTRL_FLAG_GRABBED flag atomically. Does nothing if }(hj|hhhNhNubj)}(h**ctrl**h]hctrl}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh == NULL. The V4L2_EVENT_CTRL event will be generated afterwards. This will usually be called when starting or stopping streaming in the driver.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj8|ubh)}(hGThis function assumes that the control handler is locked by the caller.h]hGThis function assumes that the control handler is locked by the caller.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj8|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_ctrl_grab (C function)c.v4l2_ctrl_grabhNtauh1j hj hhhNhNubj)}(hhh](j )}(h:void v4l2_ctrl_grab (struct v4l2_ctrl *ctrl, bool grabbed)h]j)}(h9void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)h](j)}(hvoidh]hvoid}(hj7}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3}hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjF}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj3}hhhjE}hMubj<)}(hv4l2_ctrl_grabh]jB)}(hv4l2_ctrl_grabh]hv4l2_ctrl_grab}(hjX}hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjT}ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj3}hhhjE}hMubj)}(h&(struct v4l2_ctrl *ctrl, bool grabbed)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjt}hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjp}ubj+)}(h h]h }(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjp}ubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj}hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj}modnameN classnameNjkjn)}jq]jt)}jgjZ}sbc.v4l2_ctrl_grabasbuh1hhjp}ubj+)}(h h]h }(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjp}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp}ubjB)}(hctrlh]hctrl}(hj}hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjp}ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjl}ubj)}(h bool grabbedh](j)}(hjhhhjThMubah}(h]j9ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjThMhj;hhubjn)}(hhh]h)}(h,Unlocked variant of v4l2_ctrl_modify_range()h]h,Unlocked variant of v4l2_ctrl_modify_range()}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jmhj;hhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control to update. ``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** Update the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the **step** value is interpreted as a menu_skip_mask. An error is returned if one of the range arguments is invalid for this control type. The caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_range().h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubj)}(hhh](j)}(h2``struct v4l2_ctrl *ctrl`` The control to update. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjgh]hstruct v4l2_ctrl *ctrl}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjaubj)}(hhh]h)}(hThe control to update.h]hThe control to update.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubj)}(h)``s64 min`` The control's minimum value. h](j)}(h ``s64 min``h]j)}(hjh]hs64 min}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h)``s64 max`` The control's maximum value. 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:820: ./include/media/v4l2-ctrls.hhMhjӁubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӁubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h&``u64 step`` The control's step value h](j)}(h ``u64 step``h]j)}(hjh]hu64 step}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj ubj)}(hhh]h)}(hThe control's step valueh]hThe control’s step value}(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)``s64 def`` The control's default value. h](j)}(h ``s64 def``h]j)}(hjKh]hs64 def}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjEubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubh)}(hUpdate the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the **step** value is interpreted as a menu_skip_mask.h](hUpdate the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the }(hjhhhNhNubj)}(h**step**h]hstep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* value is interpreted as a menu_skip_mask.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubh)}(hTAn error is returned if one of the range arguments is invalid for this control type.h]hTAn error is returned if one of the range arguments is invalid for this control type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubh)}(hjThe caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_range().h]hjThe caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_range().}(hĵhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j#v4l2_ctrl_modify_range (C function)c.v4l2_ctrl_modify_rangehNtauh1j hj hhhNhNubj)}(hhh](j )}(hXint v4l2_ctrl_modify_range (struct v4l2_ctrl *ctrl, s64 min, s64 max, u64 step, s64 def)h]j)}(hWint v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, s64 min, s64 max, u64 step, s64 def)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhj hMubj<)}(hv4l2_ctrl_modify_rangeh]jB)}(hv4l2_ctrl_modify_rangeh]hv4l2_ctrl_modify_range}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhj hMubj)}(h=(struct v4l2_ctrl *ctrl, s64 min, s64 max, u64 step, s64 def)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj4ubj+)}(h h]h }(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj4ubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjVhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjSubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjXmodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_modify_rangeasbuh1hhj4ubj+)}(h h]h }(hjvhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj4ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hs64 minh](h)}(hhh]jB)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jrc.v4l2_ctrl_modify_rangeasbuh1hhjubj+)}(h h]h }(hj˃hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hminh]hmin}(hjكhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hs64 maxh](h)}(hhh]jB)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jrc.v4l2_ctrl_modify_rangeasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hmaxh]hmax}(hj!hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hu64 steph](h)}(hhh]jB)}(hu64h]hu64}(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj?modnameN classnameNjkjn)}jq]jrc.v4l2_ctrl_modify_rangeasbuh1hhj6ubj+)}(h h]h }(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubjB)}(hsteph]hstep}(hjihhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hs64 defh](h)}(hhh]jB)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jrc.v4l2_ctrl_modify_rangeasbuh1hhj~ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj~ubjB)}(hdefh]hdef}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj hMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj hMhjhhubjn)}(hhh]h)}(hUpdate the range of a control.h]hUpdate the range of a control.}(hjۄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj؄hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(hXw**Parameters** ``struct v4l2_ctrl *ctrl`` The control to update. ``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** Update the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the **step** value is interpreted as a menu_skip_mask. An error is returned if one of the range arguments is invalid for this control type. This function assumes that the control handler is not locked and will take the lock itself.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h2``struct v4l2_ctrl *ctrl`` The control to update. 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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe control to update.h]hThe control to update.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h)``s64 min`` The control's minimum value. h](j)}(h ``s64 min``h]j)}(hjUh]hs64 min}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjOubj)}(hhh]h)}(hThe control's minimum value.h]hThe control’s minimum value.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjubj)}(h)``s64 max`` The control's maximum value. h](j)}(h ``s64 max``h]j)}(hjh]hs64 max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe control's maximum value.h]hThe control’s maximum value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``u64 step`` The control's step value h](j)}(h ``u64 step``h]j)}(hjDžh]hu64 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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe control's step valueh]hThe control’s step value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj܅hMhj݅ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj܅hMhjubj)}(h)``s64 def`` The control's default value. h](j)}(h ``s64 def``h]j)}(hjh]hs64 def}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe control's default value.h]hThe control’s default value.}(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&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(hUpdate the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the **step** value is interpreted as a menu_skip_mask.h](hUpdate the range of a control on the fly. This works for control types INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the }(hjQhhhNhNubj)}(h**step**h]hstep}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh* value is interpreted as a menu_skip_mask.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(hTAn error is returned if one of the range arguments is invalid for this control type.h]hTAn error is returned if one of the range arguments is invalid for this control type.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j*__v4l2_ctrl_modify_dimensions (C function)c.__v4l2_ctrl_modify_dimensionshNtauh1j hj hhhNhNubj)}(hhh](j )}(hXint __v4l2_ctrl_modify_dimensions (struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h]j)}(hWint __v4l2_ctrl_modify_dimensions(struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(h__v4l2_ctrl_modify_dimensionsh]jB)}(h__v4l2_ctrl_modify_dimensionsh]h__v4l2_ctrl_modify_dimensions}(hjцhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj͆ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(h6(struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgjӆsbc.__v4l2_ctrl_modify_dimensionsasbuh1hhjubj+)}(h h]h }(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjFhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hu32 dims[V4L2_CTRL_MAX_DIMS]h](h)}(hhh]jB)}(hu32h]hu32}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjdmodnameN classnameNjkjn)}jq]j'c.__v4l2_ctrl_modify_dimensionsasbuh1hhj[ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubjB)}(hdimsh]hdims}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj[ubj)}(h[h]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]jB)}(hV4L2_CTRL_MAX_DIMSh]hV4L2_CTRL_MAX_DIMS}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j'c.__v4l2_ctrl_modify_dimensionsasbuh1hhj[ubj)}(h]h]h]}(hjˇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(h1Unlocked variant of v4l2_ctrl_modify_dimensions()h]h1Unlocked variant of v4l2_ctrl_modify_dimensions()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control to update. ``u32 dims[V4L2_CTRL_MAX_DIMS]`` The control's new dimensions. **Description** Update 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. An error is returned if **dims** is invalid for this control. The caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_dimensions(). **Note** calling 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](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h2``struct v4l2_ctrl *ctrl`` The control to update. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hj6h]hstruct v4l2_ctrl *ctrl}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj0ubj)}(hhh]h)}(hThe control to update.h]hThe control to update.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h?``u32 dims[V4L2_CTRL_MAX_DIMS]`` The control's new dimensions. h](j)}(h ``u32 dims[V4L2_CTRL_MAX_DIMS]``h]j)}(hjoh]hu32 dims[V4L2_CTRL_MAX_DIMS]}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjiubj)}(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&]uh1jhjiubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(h=An error is returned if **dims** is invalid for this control.h](hAn error is returned if }(hjψhhhNhNubj)}(h**dims**h]hdims}(hj׈hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjψubh is invalid for this control.}(hjψhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(hoThe caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_dimensions().h]hoThe caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_dimensions().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j(v4l2_ctrl_modify_dimensions (C function)c.v4l2_ctrl_modify_dimensionshNtauh1j hj hhhNhNubj)}(hhh](j )}(hVint v4l2_ctrl_modify_dimensions (struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h]j)}(hUint v4l2_ctrl_modify_dimensions(struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h](j)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjUhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjBhhhjThMubj<)}(hv4l2_ctrl_modify_dimensionsh]jB)}(hv4l2_ctrl_modify_dimensionsh]hv4l2_ctrl_modify_dimensions}(hjghhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjcubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjBhhhjThMubj)}(h6(struct v4l2_ctrl *ctrl, u32 dims[V4L2_CTRL_MAX_DIMS])h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjisbc.v4l2_ctrl_modify_dimensionsasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjωhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hj܉hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubj)}(hu32 dims[V4L2_CTRL_MAX_DIMS]h](h)}(hhh]jB)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_modify_dimensionsasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hdimsh]hdims}(hj$hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubj)}(hjh]h[}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]jB)}(hV4L2_CTRL_MAX_DIMSh]hV4L2_CTRL_MAX_DIMS}(hjBhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjDmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_modify_dimensionsasbuh1hhjubj)}(hj͇h]h]}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubeh}(h]h ]h"]h$]h&]hhuh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj>hhhjThMubah}(h]j9ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjThMhj;hhubjn)}(hhh]h)}(h*Update the dimensions of an array control.h]h*Update the dimensions of an array control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhj;hhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(hX**Parameters** ``struct v4l2_ctrl *ctrl`` The control to update. ``u32 dims[V4L2_CTRL_MAX_DIMS]`` The control's new dimensions. **Description** Update 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. An error is returned if **dims** is invalid for this control type. This function assumes that the control handler is not locked and will take the lock itself. **Note** calling 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](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h2``struct v4l2_ctrl *ctrl`` The control to update. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjʊh]hstruct v4l2_ctrl *ctrl}(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:820: ./include/media/v4l2-ctrls.hhMhjĊubj)}(hhh]h)}(hThe control to update.h]hThe control to update.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߊhMhjubah}(h]h ]h"]h$]h&]uh1jhjĊubeh}(h]h ]h"]h$]h&]uh1jhjߊhMhjubj)}(h?``u32 dims[V4L2_CTRL_MAX_DIMS]`` The control's new dimensions. h](j)}(h ``u32 dims[V4L2_CTRL_MAX_DIMS]``h]j)}(hjh]hu32 dims[V4L2_CTRL_MAX_DIMS]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(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&]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&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(hBAn error is returned if **dims** is invalid for this control type.h](hAn error is returned if }(hjchhhNhNubj)}(h**dims**h]hdims}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh" is invalid for this control type.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hvoidh]hvoid}(hjڋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֋hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj֋hhhjhMubj<)}(hv4l2_ctrl_notifyh]jB)}(hv4l2_ctrl_notifyh]hv4l2_ctrl_notify}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj֋hhhjhMubj)}(hA(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj5hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj7modnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_notifyasbuh1hhjubj+)}(h h]h }(hjUhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjphhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hv4l2_ctrl_notify_fnc notifyh](h)}(hhh]jB)}(hv4l2_ctrl_notify_fnch]hv4l2_ctrl_notify_fnc}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jQc.v4l2_ctrl_notifyasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hnotifyh]hnotify}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *privh](j)}(hvoidh]hvoid}(hjьhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubj+)}(h h]h }(hjߌhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj͌ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubjB)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj͌ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj֋hhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjҋhhhjhMubah}(h]j͋ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjϋhhubjn)}(hhh]h)}(h0Function to set a notify callback for a control.h]h0Function to set a notify callback for a control.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1jmhjϋhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhj hNhNubj)}(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)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj@ubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjeh]hstruct v4l2_ctrl *ctrl}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj_ubj)}(hhh]h)}(h The control.h]h The control.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe callback function.h]hThe callback function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj\ubj)}(hP``void *priv`` The callback private handle, passed as argument to the callback. h](j)}(h``void *priv``h]j)}(hj׍h]h void *priv}(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:820: ./include/media/v4l2-ctrls.hhMhjэubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjэubeh}(h]h ]h"]h$]h&]uh1jhjhMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hj@ubh)}(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 }(hj(hhhNhNubj)}(h**ctrl**h]hctrl}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh& is NULL, then it will do nothing. If }(hj(hhhNhNubj)}(h **notify**h]hnotify}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh3 is NULL, then the notify callback will be removed.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj@ubh)}(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:820: ./include/media/v4l2-ctrls.hhM#hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM+ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM+ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM+ubj)}(hjh]h*}(hjŽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubj<)}(hv4l2_ctrl_get_nameh]jB)}(hv4l2_ctrl_get_nameh]hv4l2_ctrl_get_name}(hjӎhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjώubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM+ubj)}(h(u32 id)h]j)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjՎsbc.v4l2_ctrl_get_nameasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hidh]hid}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM+ubah}(h]j}ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM+hjhhubjn)}(hhh]h)}(hGet the name of the controlh]hGet the name of the control}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM+hjGhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhj hNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM/hjfubj)}(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:820: ./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&]uh1jhjfubh)}(h**Description**h]j)}(hjƏh]h Description}(hjȏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjďubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM/hjfubh)}(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.}(hj܏hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM.hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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)}(hjP8h]hconst}(hj hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM5ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM5ubj)}(hcharh]hchar}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubj+)}(h h]h }(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM5ubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubj)}(hjP8h]hconst}(hjPhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhjhM5ubj+)}(h h]h }(hj]hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM5ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubj<)}(hv4l2_ctrl_get_menuh]jB)}(hv4l2_ctrl_get_menuh]hv4l2_ctrl_get_menu}(hj|hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjxubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM5ubj)}(h(u32 id)h]j)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj~sbc.v4l2_ctrl_get_menuasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hidh]hid}(hjɐhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM5ubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM5hjhhubjn)}(hhh]h)}(h(Get the menu string array of the controlh]h(Get the menu string array of the control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj hNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM9hjubj)}(hhh]j)}(h``u32 id`` The control ID. h](j)}(h ``u32 id``h]j)}(hj4h]hu32 id}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM7hj.ubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM7hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM7hj+ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM9hjubh)}(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:820: ./include/media/v4l2-ctrls.hhM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM?ubj+)}(h h]h }(hj‘hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM?ubh)}(hhh]jB)}(hs64h]hs64}(hjӑhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjБubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjՑmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_get_int_menusbc.v4l2_ctrl_get_int_menuasbuh1hhjhhhjhM?ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj<)}(hv4l2_ctrl_get_int_menuh]jB)}(hjh]hv4l2_ctrl_get_int_menu}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM?ubj)}(h(u32 id, u32 *len)h](j)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj3modnameN classnameNjkjn)}jq]jc.v4l2_ctrl_get_int_menuasbuh1hhj*ubj+)}(h h]h }(hjOhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj*ubjB)}(hidh]hid}(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj&ubj)}(hu32 *lenh](h)}(hhh]jB)}(hu32h]hu32}(hjyhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjvubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj{modnameN classnameNjkjn)}jq]jc.v4l2_ctrl_get_int_menuasbuh1hhjrubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjB)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjrubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj&ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM?ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM?ubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM?hjhhubjn)}(hhh]h)}(h)Get the integer menu array of the controlh]h)Get the integer menu array of the control}(hjܒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM?hjْhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMChjubj)}(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:820: ./include/media/v4l2-ctrls.hhMAhjubj)}(hhh]h)}(hThe control ID.h]hThe control ID.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMAhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMAhjubj)}(h,``u32 *len`` The size of the integer array. h](j)}(h ``u32 *len``h]j)}(hjVh]hu32 *len}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMBhjPubj)}(hhh]h)}(hThe size of the integer array.h]hThe size of the integer array.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMBhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMBhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMDhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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]jB)}(hs32h]hs32}(hjٓhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj֓ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjۓmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_g_ctrlsbc.v4l2_ctrl_g_ctrlasbuh1hhjғhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMJubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjғhhhjhMJubj<)}(hv4l2_ctrl_g_ctrlh]jB)}(hjh]hv4l2_ctrl_g_ctrl}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjғhhhjhMJubj)}(h(struct v4l2_ctrl *ctrl)h]j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj$ubj+)}(h h]h }(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj$ubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjFhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjCubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjHmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_g_ctrlasbuh1hhj$ubj+)}(h h]h }(hjdhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj$ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjғhhhjhMJubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjΓhhhjhMJubah}(h]jɓah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMJhj˓hhubjn)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMJhjhhubah}(h]h ]h"]h$]h&]uh1jmhj˓hhhjhMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hj˔h]h Parameters}(hj͔hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɔubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMNhjŔubj)}(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:820: ./include/media/v4l2-ctrls.hhMMhjubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjŔubh)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMOhjŔ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 }(hj;hhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjEh]h v4l2_ctrl_ops}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMNhj;ubh functions.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMNhjŔubh)}(h0This function is for integer type controls only.h]h0This function is for integer type controls only.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMRhjŔubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMXubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMXubj<)}(h__v4l2_ctrl_s_ctrlh]jB)}(h__v4l2_ctrl_s_ctrlh]h__v4l2_ctrl_s_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMXubj)}(h!(struct v4l2_ctrl *ctrl, s32 val)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjٕhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjՕubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjՕubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.__v4l2_ctrl_s_ctrlasbuh1hhjՕubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjՕubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՕubjB)}(hctrlh]hctrl}(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjՕubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjѕubj)}(hs32 valh](h)}(hhh]jB)}(hs32h]hs32}(hjNhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjKubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjPmodnameN classnameNjkjn)}jq]jc.__v4l2_ctrl_s_ctrlasbuh1hhjGubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjGubjB)}(hvalh]hval}(hjzhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjѕubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMXubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMXubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMXhjhhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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}(hjȖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĖubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM\hjubj)}(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:820: ./include/media/v4l2-ctrls.hhMZhjߖubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjߖubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjܖubj)}(h``s32 val`` The new value. h](j)}(h ``s32 val``h]j)}(hjh]hs32 val}(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:820: ./include/media/v4l2-ctrls.hhM[hjubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM[hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM[hjܖubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM]hjubh)}(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 }(hjohhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjyh]h v4l2_ctrl_ops}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM\hjoubh functions.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM\hjubh)}(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:820: ./include/media/v4l2-ctrls.hhM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjЗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̗hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMfubj+)}(h h]h }(hjߗhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj̗hhhjޗhMfubj<)}(hv4l2_ctrl_s_ctrlh]jB)}(hv4l2_ctrl_s_ctrlh]hv4l2_ctrl_s_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj̗hhhjޗhMfubj)}(h!(struct v4l2_ctrl *ctrl, s32 val)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj+hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj-modnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_s_ctrlasbuh1hhj ubj+)}(h h]h }(hjKhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjB)}(hctrlh]hctrl}(hjfhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hs32 valh](h)}(hhh]jB)}(hs32h]hs32}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jGc.v4l2_ctrl_s_ctrlasbuh1hhj{ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj{ubjB)}(hvalh]hval}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj{ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj̗hhhjޗhMfubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjȗhhhjޗhMfubah}(h]j×ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjޗhMfhjŗhhubjn)}(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.}(hjؘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMfhj՘hhubah}(h]h ]h"]h$]h&]uh1jmhjŗhhhjޗhMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMjhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMhhjubj)}(hhh]h)}(h The control.h]h The control.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhhjubj)}(h``s32 val`` The new value. h](j)}(h ``s32 val``h]j)}(hjRh]hs32 val}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMihjLubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMihjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMihjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMkhjubh)}(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)}(hjh]h v4l2_ctrl_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMjhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjʙhMjhjubh)}(h0This function is for integer type controls only.h]h0This function is for integer type controls only.}(hjՙhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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]jB)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_g_ctrl_int64sbc.v4l2_ctrl_g_ctrl_int64asbuh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM}ubj+)}(h h]h }(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhj(hM}ubj<)}(hv4l2_ctrl_g_ctrl_int64h]jB)}(hj%h]hv4l2_ctrl_g_ctrl_int64}(hj;hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj7ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhj(hM}ubj)}(h(struct v4l2_ctrl *ctrl)h]j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjRubj+)}(h h]h }(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjthhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjqubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjvmodnameN classnameNjkjn)}jq]j#c.v4l2_ctrl_g_ctrl_int64asbuh1hhjRubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj(hM}ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj(hM}ubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj(hM}hjhhubjn)}(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.}(hjךhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM}hjԚhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj(hM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h The control.h]h The control.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(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 }(hjihhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjsh]h v4l2_ctrl_ops}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjiubh functions.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjʛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƛhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjٛhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjƛhhhj؛hMubj<)}(h__v4l2_ctrl_s_ctrl_int64h]jB)}(h__v4l2_ctrl_s_ctrl_int64h]h__v4l2_ctrl_s_ctrl_int64}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjƛhhhj؛hMubj)}(h!(struct v4l2_ctrl *ctrl, s64 val)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj%hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj'modnameN classnameNjkjn)}jq]jt)}jgjsbc.__v4l2_ctrl_s_ctrl_int64asbuh1hhjubj+)}(h h]h }(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hs64 valh](h)}(hhh]jB)}(hs64h]hs64}(hj|hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjyubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj~modnameN classnameNjkjn)}jq]jAc.__v4l2_ctrl_s_ctrl_int64asbuh1hhjuubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjuubjB)}(hvalh]hval}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjuubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjƛhhhj؛hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj›hhhj؛hMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj؛hMhjhhubjn)}(hhh]h)}(h-Unlocked variant of v4l2_ctrl_s_ctrl_int64().h]h-Unlocked variant of v4l2_ctrl_s_ctrl_int64().}(hjҜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjϜhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj؛hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj ubj)}(hhh]h)}(h The control.h]h 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)}(h``s64 val`` The new value. h](j)}(h ``s64 val``h]j)}(hjLh]hs64 val}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjFubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(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 refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjĝhMhjubh)}(h7This function is for 64-bit integer type controls only.h]h7This function is for 64-bit integer type controls only.}(hjϝhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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 )}(hubj)}(h``s64 val`` The new value. h](j)}(h ``s64 val``h]j)}(hjh]hs64 val}(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:820: ./include/media/v4l2-ctrls.hhMhjzubj)}(hhh]h)}(hThe new value.h]hThe new value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj"ubh)}(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 }(hjџhhhNhNubh)}(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 refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjџubh functions.}(hjџhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj"ubh)}(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:820: ./include/media/v4l2-ctrls.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j&__v4l2_ctrl_s_ctrl_string (C function)c.__v4l2_ctrl_s_ctrl_stringhNtauh1j hj hhhNhNubj)}(hhh](j )}(hEint __v4l2_ctrl_s_ctrl_string (struct v4l2_ctrl *ctrl, const char *s)h]j)}(hDint __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjAhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj.hhhj@hMubj<)}(h__v4l2_ctrl_s_ctrl_stringh]jB)}(h__v4l2_ctrl_s_ctrl_stringh]h__v4l2_ctrl_s_ctrl_string}(hjShhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjOubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj.hhhj@hMubj)}(h'(struct v4l2_ctrl *ctrl, const char *s)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjkubj+)}(h h]h }(hj|hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjUsbc.__v4l2_ctrl_s_ctrl_stringasbuh1hhjkubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjB)}(hctrlh]hctrl}(hjȠhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjkubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(h const char *sh](j)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjݠubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjݠubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݠubj+)}(h h]h }(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjݠubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݠubjB)}(hsh]hs}(hj%hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjݠubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubeh}(h]h ]h"]h$]h&]hhuh1jhj.hhhj@hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj*hhhj@hMubah}(h]j%ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj@hMhj'hhubjn)}(hhh]h)}(h.Unlocked variant of v4l2_ctrl_s_ctrl_string().h]h.Unlocked variant of v4l2_ctrl_s_ctrl_string().}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jmhj'hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhj hNhNubj)}(hX|**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``const char *s`` The new string. **Description** This sets the control's new string 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 string type controls only.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjkubj)}(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:820: ./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"``const char *s`` The new string. h](j)}(h``const char *s``h]j)}(hjɡh]h const char *s}(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:820: ./include/media/v4l2-ctrls.hhMhjáubj)}(hhh]h)}(hThe new string.h]hThe new string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjޡhMhjߡubah}(h]h ]h"]h$]h&]uh1jhjáubeh}(h]h ]h"]h$]h&]uh1jhjޡhMhjubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjkubh)}(hThis sets the control's new string 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 string 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&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjkubh)}(h/This function is for string type controls only.h]h/This function is for string type controls only.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j$v4l2_ctrl_s_ctrl_string (C function)c.v4l2_ctrl_s_ctrl_stringhNtauh1j hj hhhNhNubj)}(hhh](j )}(hCint v4l2_ctrl_s_ctrl_string (struct v4l2_ctrl *ctrl, const char *s)h]j)}(hBint v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)h](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjwhhhjhMubj<)}(hv4l2_ctrl_s_ctrl_stringh]jB)}(hv4l2_ctrl_s_ctrl_stringh]hv4l2_ctrl_s_ctrl_string}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjwhhhjhMubj)}(h'(struct v4l2_ctrl *ctrl, const char *s)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjŢhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hj֢hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjӢubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjآmodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_s_ctrl_stringasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h const char *sh](j)}(hjP8h]hconst}(hj*hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj&ubj+)}(h h]h }(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj)}(hcharh]hchar}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj+)}(h h]h }(hjShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjB)}(hj'h]hs}(hjnhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjwhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjshhhjhMubah}(h]jnah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjphhubjn)}(hhh]h)}(hEHelper function to set a control's string value from within a driver.h]hGHelper function to set a control’s string value from within a driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjphhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(hXj**Parameters** ``struct v4l2_ctrl *ctrl`` The control. ``const char *s`` The new string. **Description** This sets the control's new string 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 string type controls only.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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}(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:820: ./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)}(h"``const char *s`` The new string. h](j)}(h``const char *s``h]j)}(hjh]h const char *s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj ubj)}(hhh]h)}(hThe new string.h]hThe new string.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjϣubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(hThis sets the control's new string 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 string safely by going through the control framework. This function will lock the control’s handler, so it cannot be used from within the }(hjbhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjlh]h v4l2_ctrl_ops}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjbubh functions.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h/This function is for string type controls only.h]h/This function is for string type controls only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j(__v4l2_ctrl_s_ctrl_compound (C function)c.__v4l2_ctrl_s_ctrl_compoundhNtauh1j hj hhhNhNubj)}(hhh](j )}(haint __v4l2_ctrl_s_ctrl_compound (struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h]j)}(h`int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h](j)}(hinth]hint}(hjähhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjҤhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjѤhMubj<)}(h__v4l2_ctrl_s_ctrl_compoundh]jB)}(h__v4l2_ctrl_s_ctrl_compoundh]h__v4l2_ctrl_s_ctrl_compound}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjѤhMubj)}(hA(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgjsbc.__v4l2_ctrl_s_ctrl_compoundasbuh1hhjubj+)}(h h]h }(hj>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjYhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(henum v4l2_ctrl_type typeh](j)}(hj8h]henum}(hjrhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjnubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubh)}(hhh]jB)}(hv4l2_ctrl_typeh]hv4l2_ctrl_type}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j:c.__v4l2_ctrl_s_ctrl_compoundasbuh1hhjnubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubjB)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjnubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h const void *ph](j)}(hjP8h]hconst}(hjեhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjѥubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjѥubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѥubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjѥubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѥubjB)}(hjh]hp}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjѥubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjѤhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjѤhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjѤhMhjhhubjn)}(hhh]h)}(h*Unlocked variant to set a compound controlh]h*Unlocked variant to set a compound control}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjѤhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhj hNhNubj)}(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 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 compound type controls only.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj^ubj)}(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:820: ./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&]uh1jhjhMhjzubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe type of the data.h]hThe type of the data.}(hjզhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѦhMhjҦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѦhMhjzubj)}(h,``const void *p`` The new compound payload. h](j)}(h``const void *p``h]j)}(hjh]h const void *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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe new compound payload.h]hThe new compound payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj^ubh)}(hThis sets the control's new compound payload 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 compound payload 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 }(hjFhhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hjPh]h v4l2_ctrl_ops}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjFubh functions.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhj^ubh)}(h1This function is for compound type controls only.h]h1This function is for compound type controls only.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j&v4l2_ctrl_s_ctrl_compound (C function)c.v4l2_ctrl_s_ctrl_compoundhNtauh1j hj hhhNhNubj)}(hhh](j )}(h_int v4l2_ctrl_s_ctrl_compound (struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h]j)}(h^int v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_ctrl_s_ctrl_compoundh]jB)}(hv4l2_ctrl_s_ctrl_compoundh]hv4l2_ctrl_s_ctrl_compound}(hjȧhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjħubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(hA(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p)h](j)}(hstruct v4l2_ctrl *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjʧsbc.v4l2_ctrl_s_ctrl_compoundasbuh1hhjubj+)}(h h]h }(hj"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjܧubj)}(henum v4l2_ctrl_type typeh](j)}(hj8h]henum}(hjVhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjRubj+)}(h h]h }(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubh)}(hhh]jB)}(hv4l2_ctrl_typeh]hv4l2_ctrl_type}(hjthhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjqubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjvmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_s_ctrl_compoundasbuh1hhjRubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubjB)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjܧubj)}(h const void *ph](j)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjƨhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hvoidh]hvoid}(hjԨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hjh]hp}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjܧubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(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.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj hNhNubj)}(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)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubj)}(hhh](j)}(h(``struct v4l2_ctrl *ctrl`` The control. h](j)}(h``struct v4l2_ctrl *ctrl``h]j)}(hjgh]hstruct v4l2_ctrl *ctrl}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjaubj)}(hhh]h)}(h The control.h]h The control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe type of the data.h]hThe type of the data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h,``const void *p`` The new compound payload. h](j)}(h``const void *p``h]j)}(hj٩h]h const void *p}(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:820: ./include/media/v4l2-ctrls.hhMhjөubj)}(hhh]h)}(hThe new compound payload.h]hThe new compound payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjөubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjBubh)}(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 }(hj*hhhNhNubh)}(h:c:type:`v4l2_ctrl_ops`h]j)}(hj4h]h v4l2_ctrl_ops}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj*ubh functions.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhMhjBubh)}(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:820: ./include/media/v4l2-ctrls.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM ubj<)}(hv4l2_ctrl_replaceh]jB)}(hv4l2_ctrl_replaceh]hv4l2_ctrl_replace}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM ubj)}(h6(struct v4l2_event *old, const struct v4l2_event *new)h](j)}(hstruct v4l2_event *oldh](j)}(hjh]hstruct}(hjȪhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjĪubj+)}(h h]h }(hjժhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjĪubh)}(hhh]jB)}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_replaceasbuh1hhjĪubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjĪubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĪubjB)}(holdh]hold}(hj!hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjĪubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst struct v4l2_event *newh](j)}(hjP8h]hconst}(hj:hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj6ubj+)}(h h]h }(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubj)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj6ubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubh)}(hhh]jB)}(h v4l2_eventh]h v4l2_event}(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjpubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjumodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_replaceasbuh1hhj6ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjB)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM ubah}(h]j~ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM hjhhubjn)}(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 }(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&]uh1jhjޫubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkjn)}jq]jc.v4l2_ctrl_replaceasbjv4l2_subscribed_event_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhKhj֫ubh replace()}(hj֫hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjӫhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(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)}(hj@h]hstruct v4l2_event *old}(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:820: ./include/media/v4l2-ctrls.hhMhj:ubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the reported event;h](hpointer to struct }(hjYhhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjch]h v4l2_event}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_eventuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjYubh with the reported event;}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the modified event;h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjh]h v4l2_event}(hj¬hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_eventuh1hhjhMhjubh with the modified event;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhj'hMubj<)}(hv4l2_ctrl_mergeh]jB)}(hv4l2_ctrl_mergeh]hv4l2_ctrl_merge}(hj:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj6ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhj'hMubj)}(h6(const struct v4l2_event *old, struct v4l2_event *new)h](j)}(hconst struct v4l2_event *oldh](j)}(hjP8h]hconst}(hjVhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjRubj+)}(h h]h }(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubj)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjRubj+)}(h h]h }(hj~hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubh)}(hhh]jB)}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj<sbc.v4l2_ctrl_mergeasbuh1hhjRubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjB)}(holdh]hold}(hjʭhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubj)}(hstruct v4l2_event *newh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj߭ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj߭ubh)}(hhh]jB)}(h v4l2_eventh]h v4l2_event}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_mergeasbuh1hhj߭ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj߭ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߭ubjB)}(hnewh]hnew}(hj:hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj߭ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj'hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj'hMubah}(h]j ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj'hMhjhhubjn)}(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 }(hjdhhhNhNubh)}(hF:c:type:`struct v4l2_subscribed_event_ops `h]j)}(hjnh]h struct v4l2_subscribed_event_ops}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkjn)}jq]jc.v4l2_ctrl_mergeasbjv4l2_subscribed_event_opsuh1hhjhKhjdubh merge()}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjahhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(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)}(hjͮh]hconst struct v4l2_event *old}(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:820: ./include/media/v4l2-ctrls.hhMhjǮubj)}(hhh]h)}(h?pointer to struct :c:type:`v4l2_event` with the reported event;h](hpointer to struct }(hjhhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjh]h v4l2_event}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_eventuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh with the reported event;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjǮubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĮ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)}(hj*h]hstruct v4l2_event *new}(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:820: ./include/media/v4l2-ctrls.hhMhj$ubj)}(hhh]h)}(h=pointer to struct :c:type:`v4l2_event` with the merged event;h](hpointer to struct }(hjChhhNhNubh)}(h:c:type:`v4l2_event`h]j)}(hjMh]h v4l2_event}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_eventuh1hhj?hMhjCubh with the merged event;}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjĮubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM!ubj<)}(hv4l2_ctrl_log_statush]jB)}(hv4l2_ctrl_log_statush]hv4l2_ctrl_log_status}(hjǯhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjïubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM!ubj)}(h(struct file *file, void *fh)h](j)}(hstruct file *fileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj߯ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj߯ubh)}(hhh]jB)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjɯsbc.v4l2_ctrl_log_statusasbuh1hhj߯ubj+)}(h h]h }(hj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj߯ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߯ubjB)}(hfileh]hfile}(hj<hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj߯ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjۯubj)}(hvoid *fhh](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj+)}(h h]h }(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjB)}(hfhh]hfh}(hj~hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjۯubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM!ubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM!hjhhubjn)}(hhh]h)}(h8helper function to implement ``VIDIOC_LOG_STATUS`` ioctlh](hhelper function to implement }(hjhhhNhNubj)}(h``VIDIOC_LOG_STATUS``h]hVIDIOC_LOG_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjҰjjҰjjjuh1jhhhj hNhNubj)}(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)}(hjܰh]h Parameters}(hjްhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڰubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM%hjְubj)}(hhh](j)}(h-``struct file *file`` pointer to struct file h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM#hjubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(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)}(hj4h]hvoid *fh}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM%hj.ubj)}(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 }(hjMhhhNhNubh)}(h0:c:type:`struct v4l2_ioctl_ops `h]j)}(hjWh]hstruct v4l2_ioctl_ops}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ioctl_opsuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM$hjMubh.vidioc_log_status.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthM$hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM%hjubeh}(h]h ]h"]h$]h&]uh1jhjְubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM'hjְubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM&hjְubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjرhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԱhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM-ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjԱhhhjhM-ubj<)}(hv4l2_ctrl_subscribe_eventh]jB)}(hv4l2_ctrl_subscribe_eventh]hv4l2_ctrl_subscribe_event}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjԱhhhjhM-ubj)}(h?(struct v4l2_fh *fh, const struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_fhh]hv4l2_fh}(hj3hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj5modnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_subscribe_eventasbuh1hhjubj+)}(h h]h }(hjShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hfhh]hfh}(hjnhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h)const struct v4l2_event_subscription *subh](j)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj²modnameN classnameNjkjn)}jq]jOc.v4l2_ctrl_subscribe_eventasbuh1hhjubj+)}(h h]h }(hj޲hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hsubh]hsub}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjԱhhhjhM-ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjбhhhjhM-ubah}(h]j˱ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM-hjͱhhubjn)}(hhh]h)}(hSubscribes to an eventh]hSubscribes to an event}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM-hj hhubah}(h]h ]h"]h$]h&]uh1jmhjͱhhhjhM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhj hNhNubj)}(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)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM1hj?ubj)}(hhh](j)}(h1``struct v4l2_fh *fh`` pointer to struct v4l2_fh h](j)}(h``struct v4l2_fh *fh``h]j)}(hjdh]hstruct v4l2_fh *fh}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM0hj^ubj)}(hhh]h)}(hpointer to struct v4l2_fhh]hpointer to struct v4l2_fh}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhM0hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM0hj[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:820: ./include/media/v4l2-ctrls.hhM1hjubj)}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hjhhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]j)}(hjh]hstruct v4l2_event_subscription}(hj³hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_event_subscriptionuh1hhjhM1hjubeh}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM3hj?ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM.hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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]jB)}(h__poll_th]h__poll_t}(hj?hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjAmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_pollsbc.v4l2_ctrl_pollasbuh1hhj8hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM:ubj+)}(h h]h }(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8hhhj`hM:ubj<)}(hv4l2_ctrl_pollh]jB)}(hj]h]hv4l2_ctrl_poll}(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjoubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hj8hhhj`hM:ubj)}(h3(struct file *file, struct poll_table_struct *wait)h](j)}(hstruct file *fileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j[c.v4l2_ctrl_pollasbuh1hhjubj+)}(h h]h }(hjʴhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjشhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct poll_table_struct *waith](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hpoll_table_structh]hpoll_table_struct}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j[c.v4l2_ctrl_pollasbuh1hhjubj+)}(h h]h }(hj:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hwaith]hwait}(hjUhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj8hhhj`hM:ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj4hhhj`hM:ubah}(h]j/ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj`hM:hj1hhubjn)}(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:820: ./include/media/v4l2-ctrls.hhM:hj|hhubah}(h]h ]h"]h$]h&]uh1jmhj1hhhj`hM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM>hjubj)}(hhh](j)}(h-``struct file *file`` pointer to struct file h](j)}(h``struct file *file``h]j)}(hjh]hstruct file *file}(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:820: ./include/media/v4l2-ctrls.hhM=hjubj)}(hhh]h)}(hpointer to struct fileh]hpointer to struct file}(hjٵhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjյhM=hjֵubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjյhM=hjubj)}(hF``struct poll_table_struct *wait`` pointer to struct poll_table_structh](j)}(h"``struct poll_table_struct *wait``h]j)}(hjh]hstruct poll_table_struct *wait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM?hjubj)}(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:820: ./include/media/v4l2-ctrls.hhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMCubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjOhhhjahMCubj<)}(hv4l2_ctrl_request_setuph]jB)}(hv4l2_ctrl_request_setuph]hv4l2_ctrl_request_setup}(hjthhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjpubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjOhhhjahMCubj)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](j)}(hstruct media_request *reqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h media_requesth]h media_request}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjvsbc.v4l2_ctrl_request_setupasbuh1hhjubj+)}(h h]h }(hjζhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjܶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h struct v4l2_ctrl_handler *parenth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj"modnameN classnameNjkjn)}jq]jʶc.v4l2_ctrl_request_setupasbuh1hhjubj+)}(h h]h }(hj>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hparenth]hparent}(hjYhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjOhhhjahMCubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjKhhhjahMCubah}(h]jFah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjahMChjHhhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMChjhhubah}(h]h ]h"]h$]h&]uh1jmhjHhhhjahMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMGhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMEhjubj)}(hhh]h)}(h The requesth]h The request}(hjݷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjٷhMEhjڷubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٷhMEhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMFhjubj)}(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&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMHhjubh)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMQubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyhhhjhMQubj<)}(hv4l2_ctrl_request_completeh]jB)}(hv4l2_ctrl_request_completeh]hv4l2_ctrl_request_complete}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjyhhhjhMQubj)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](j)}(hstruct media_request *reqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjǸhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h media_requesth]h media_request}(hjظhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjոubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjڸmodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_ctrl_request_completeasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h struct v4l2_ctrl_handler *parenth](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj(ubj+)}(h h]h }(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjJhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjGubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjLmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_request_completeasbuh1hhj(ubj+)}(h h]h }(hjhhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjB)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjyhhhjhMQubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjuhhhjhMQubah}(h]jpah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMQhjrhhubjn)}(hhh]h)}(h)Complete a control handler request objecth]h)Complete a control handler request object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMQhjhhubah}(h]h ]h"]h$]h&]uh1jmhjrhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjŹjjŹjjjuh1jhhhj hNhNubj)}(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)}(hjϹh]h Parameters}(hjѹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͹ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMUhjɹubj)}(hhh](j)}(h*``struct media_request *req`` The request h](j)}(h``struct media_request *req``h]j)}(hjh]hstruct media_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMShjubj)}(hhh]h)}(h The requesth]h The request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(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)}(hj'h]h struct v4l2_ctrl_handler *parent}(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:820: ./include/media/v4l2-ctrls.hhMThj!ubj)}(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<hMThj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMThjubeh}(h]h ]h"]h$]h&]uh1jhjɹubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMVhjɹubh)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMUhjɹubh)}(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:820: ./include/media/v4l2-ctrls.hhMYhjɹubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMbubj+)}(h h]h }(hjĺhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjúhMbubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjպhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjҺubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj׺modnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_request_hdl_findsbc.v4l2_ctrl_request_hdl_findasbuh1hhjhhhjúhMbubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjúhMbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjúhMbubj<)}(hv4l2_ctrl_request_hdl_findh]jB)}(hjh]hv4l2_ctrl_request_hdl_find}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjúhMbubj)}(h=(struct media_request *req, struct v4l2_ctrl_handler *parent)h](j)}(hstruct media_request *reqh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj,ubj+)}(h h]h }(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,ubh)}(hhh]jB)}(h media_requesth]h media_request}(hjNhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjKubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjPmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_request_hdl_findasbuh1hhj,ubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjB)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubj)}(h struct v4l2_ctrl_handler *parenth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.v4l2_ctrl_request_hdl_findasbuh1hhjubj+)}(h h]h }(hjܻhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjúhMbubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjúhMbubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjúhMbhjhhubjn)}(hhh]h)}(h'Find the control handler in the requesth]h'Find the control handler in the request}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMbhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjúhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhj hNhNubj)}(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)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMfhj=ubj)}(hhh](j)}(h*``struct media_request *req`` The request h](j)}(h``struct media_request *req``h]j)}(hjbh]hstruct media_request *req}(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:820: ./include/media/v4l2-ctrls.hhMdhj\ubj)}(hhh]h)}(h The requesth]h The request}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMdhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMdhjYubj)}(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:820: ./include/media/v4l2-ctrls.hhMehjubj)}(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&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j)}(hjּh]h Description}(hjؼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԼubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMghj=ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMfhj=ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMjhj=ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMmhj=ubh)}(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:820: ./include/media/v4l2-ctrls.hhMphj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMwubj+)}(h h]h }(hjWhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjDhhhjVhMwubj<)}(hv4l2_ctrl_request_hdl_puth]jB)}(hv4l2_ctrl_request_hdl_puth]hv4l2_ctrl_request_hdl_put}(hjihhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjeubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjDhhhjVhMwubj)}(h(struct v4l2_ctrl_handler *hdl)h]j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjksbc.v4l2_ctrl_request_hdl_putasbuh1hhjubj+)}(h h]h }(hjýhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjѽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hhdlh]hhdl}(hj޽hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj}ubah}(h]h ]h"]h$]h&]hhuh1jhjDhhhjVhMwubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj@hhhjVhMwubah}(h]j;ah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjVhMwhj=hhubjn)}(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:820: ./include/media/v4l2-ctrls.hhMwhjhhubah}(h]h ]h"]h$]h&]uh1jmhj=hhhjVhMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj hNhNubj)}(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)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM{hj$ubj)}(hhh]j)}(h;``struct v4l2_ctrl_handler *hdl`` Put this control handler h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjIh]hstruct v4l2_ctrl_handler *hdl}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMyhjCubj)}(hhh]h)}(hPut this control handlerh]hPut this control handler}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMyhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMyhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM{hj$ubh)}(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:820: ./include/media/v4l2-ctrls.hhMzhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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)}(hjh]hstruct}(hjɾhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjžhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj׾hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjžhhhj־hMubh)}(hhh]jB)}(h v4l2_ctrlh]h v4l2_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgv4l2_ctrl_request_hdl_ctrl_findsb!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhjžhhhj־hMubj+)}(h h]h }(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjžhhhj־hMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjžhhhj־hMubj<)}(hv4l2_ctrl_request_hdl_ctrl_findh]jB)}(hjh]hv4l2_ctrl_request_hdl_ctrl_find}(hj(hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj$ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjžhhhj־hMubj)}(h'(struct v4l2_ctrl_handler *hdl, u32 id)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj?ubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjcmodnameN classnameNjkjn)}jq]j!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhj?ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubj)}(hu32 idh](h)}(hhh]jB)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j!c.v4l2_ctrl_request_hdl_ctrl_findasbuh1hhjubj+)}(h h]h }(hjԿhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubjB)}(hidh]hid}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubeh}(h]h ]h"]h$]h&]hhuh1jhjžhhhj־hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj־hMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj־hMhjhhubjn)}(hhh]h)}(h!Find a control with the given ID.h]h!Find a control with the given ID.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj־hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhj hNhNubj)}(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)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj(ubj)}(hhh](j)}(hH``struct v4l2_ctrl_handler *hdl`` The control handler from the request. h](j)}(h!``struct v4l2_ctrl_handler *hdl``h]j)}(hjMh]hstruct v4l2_ctrl_handler *hdl}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjGubj)}(hhh]h)}(h%The control handler from the request.h]h%The control handler from the request.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(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:820: ./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&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj(ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_queryctrlh]jB)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hj'hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj#ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj?ubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjcmodnameN classnameNjkjn)}jq]jt)}jgj)sbc.v4l2_queryctrlasbuh1hhj?ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubj)}(hstruct v4l2_queryctrl *qch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j}c.v4l2_queryctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hqch]hqc}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hMHelper function to implement :ref:`VIDIOC_QUERYCTRL ` ioctlh](hHelper function to implement }(hj6hhhNhNubh)}(h*:ref:`VIDIOC_QUERYCTRL `h]hinline)}(hj@h]hVIDIOC_QUERYCTRL}(hjDhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjNreftyperef refexplicitrefwarnjvidioc_queryctrluh1hhjhKhj6ubh ioctl}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhj hNhNubj)}(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)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjxubj)}(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:820: ./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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hZ``struct v4l2_queryctrl *qc`` pointer to :c:type:`struct v4l2_queryctrl ` h](j)}(h``struct v4l2_queryctrl *qc``h]j)}(hjh]hstruct v4l2_queryctrl *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(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 refexplicitrefwarnjkj4jv4l2_queryctrluh1hhj hMhjubeh}(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&]uh1jhjxubh)}(h**Description**h]j)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjxubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j2v4l2_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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(h%v4l2_query_ext_ctrl_to_v4l2_queryctrlh]jB)}(h%v4l2_query_ext_ctrl_to_v4l2_queryctrlh]h%v4l2_query_ext_ctrl_to_v4l2_queryctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(hC(struct v4l2_queryctrl *to, const struct v4l2_query_ext_ctrl *from)h](j)}(hstruct v4l2_queryctrl *toh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_queryctrlh]hv4l2_queryctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsb'c.v4l2_query_ext_ctrl_to_v4l2_queryctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(htoh]hto}(hj*hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h&const struct v4l2_query_ext_ctrl *fromh](j)}(hjP8h]hconst}(hjChhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj?ubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj?ubj+)}(h h]h }(hjkhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubh)}(hhh]jB)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hj|hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjyubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj~modnameN classnameNjkjn)}jq]j 'c.v4l2_query_ext_ctrl_to_v4l2_queryctrlasbuh1hhj?ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjB)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hConvert a qec to qe.h]hConvert a qec to qe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh](j)}(h>``struct v4l2_queryctrl *to`` The v4l2_queryctrl to write to. h](j)}(h``struct v4l2_queryctrl *to``h]j)}(hj h]hstruct v4l2_queryctrl *to}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hThe v4l2_queryctrl to write to.h]hThe v4l2_queryctrl to write to.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubj)}(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)}(hjYh]h&const struct v4l2_query_ext_ctrl *from}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjSubj)}(hhh]h)}(h%The v4l2_query_ext_ctrl to read from.h]h%The v4l2_query_ext_ctrl to read from.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_query_ext_ctrlh]jB)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(h?(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj4hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj6modnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_query_ext_ctrlasbuh1hhjubj+)}(h h]h }(hjThhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hhdlh]hhdl}(hjohhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_query_ext_ctrl *qch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_query_ext_ctrlh]hv4l2_query_ext_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jPc.v4l2_query_ext_ctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hRHelper function to implement :ref:`VIDIOC_QUERY_EXT_CTRL ` ioctlh](hHelper function to implement }(hj hhhNhNubh)}(h/:ref:`VIDIOC_QUERY_EXT_CTRL `h]jC)}(hjh]hVIDIOC_QUERY_EXT_CTRL}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_queryctrluh1hhjhKhj ubh ioctl}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhj hNhNubj)}(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)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjIubj)}(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)}(hjnh]hstruct v4l2_ctrl_handler *hdl}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhubj)}(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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(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)}(hjh]hstruct v4l2_query_ext_ctrl *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hEpointer to :c:type:`struct v4l2_query_ext_ctrl `h](h pointer to }(hjhhhNhNubh)}(h::c:type:`struct v4l2_query_ext_ctrl `h]j)}(hjh]hstruct v4l2_query_ext_ctrl}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_query_ext_ctrluh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjIubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjahhhjshMubj<)}(hv4l2_querymenuh]jB)}(hv4l2_querymenuh]hv4l2_querymenu}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjahhhjshMubj)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_querymenuasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_querymenu *qmh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_querymenuh]hv4l2_querymenu}(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj4modnameN classnameNjkjn)}jq]jc.v4l2_querymenuasbuh1hhjubj+)}(h h]h }(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hqmh]hqm}(hjkhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjahhhjshMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahj]hhhjshMubah}(h]jXah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjshMhjZhhubjn)}(hhh]h)}(hMHelper function to implement :ref:`VIDIOC_QUERYMENU ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h*:ref:`VIDIOC_QUERYMENU `h]jC)}(hjh]hVIDIOC_QUERYMENU}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_queryctrluh1hhjhKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjZhhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hZ``struct v4l2_querymenu *qm`` pointer to :c:type:`struct v4l2_querymenu ` h](j)}(h``struct v4l2_querymenu *qm``h]j)}(hjRh]hstruct v4l2_querymenu *qm}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjLubj)}(hhh]h)}(h;pointer to :c:type:`struct v4l2_querymenu `h](h pointer to }(hjkhhhNhNubh)}(h0:c:type:`struct v4l2_querymenu `h]j)}(hjuh]hstruct v4l2_querymenu}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_querymenuuh1hhjghMhjkubeh}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(h v4l2_g_ctrlh]jB)}(h v4l2_g_ctrlh]h v4l2_g_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(h:(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj*ubj+)}(h h]h }(hj;hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj*ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjLhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjIubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjNmodnameN classnameNjkjn)}jq]jt)}jgjsb c.v4l2_g_ctrlasbuh1hhj*ubj+)}(h h]h }(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj&ubj)}(hstruct v4l2_control *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_controlh]h v4l2_control}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jh c.v4l2_g_ctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj&ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hGHelper function to implement :ref:`VIDIOC_G_CTRL ` ioctlh](hHelper function to implement }(hj!hhhNhNubh)}(h$:ref:`VIDIOC_G_CTRL `h]jC)}(hj+h]h VIDIOC_G_CTRL}(hj-hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj7reftyperef refexplicitrefwarnj vidioc_g_ctrluh1hhjhKhj!ubh ioctl}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhj hNhNubj)}(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)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjaubj)}(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:820: ./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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubj)}(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:820: ./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 refexplicitrefwarnjkj4j v4l2_controluh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjaubh)}(h1If hdl == NULL then they will all return -EINVAL.h]h1If hdl == NULL then they will all return -EINVAL.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyhhhjhMubj<)}(h v4l2_s_ctrlh]jB)}(h v4l2_s_ctrlh]h v4l2_s_ctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjyhhhjhMubj)}(hN(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl)h](j1)}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsb c.v4l2_s_ctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj(ubj+)}(h h]h }(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjJhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjGubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjLmodnameN classnameNjkjn)}jq]j c.v4l2_s_ctrlasbuh1hhj(ubj+)}(h h]h }(hjhhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_control *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h v4l2_controlh]h v4l2_control}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j c.v4l2_s_ctrlasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjyhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjuhhhjhMubah}(h]jpah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjrhhubjn)}(hhh]h)}(hGHelper function to implement :ref:`VIDIOC_S_CTRL ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h$:ref:`VIDIOC_S_CTRL `h]jC)}(hj'h]h VIDIOC_S_CTRL}(hj)hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainj3reftyperef refexplicitrefwarnj vidioc_g_ctrluh1hhjhKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjrhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhj hNhNubj)}(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)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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)}(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:820: ./include/media/v4l2-ctrls.hhMhj|ubj)}(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 refexplicitrefwarnjkj4jv4l2_fhuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(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:820: ./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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(hV``struct v4l2_control *ctrl`` pointer to :c:type:`struct v4l2_control ` h](j)}(h``struct v4l2_control *ctrl``h]j)}(hj2h]hstruct v4l2_control *ctrl}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj,ubj)}(hhh]h)}(h7pointer to :c:type:`struct v4l2_control `h](h pointer to }(hjKhhhNhNubh)}(h,:c:type:`struct v4l2_control `h]j)}(hjUh]hstruct v4l2_control}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_controluh1hhjGhMhjKubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_g_ext_ctrlsh]jB)}(hv4l2_g_ext_ctrlsh]hv4l2_g_ext_ctrls}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(hr(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hj,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj.modnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_g_ext_ctrlsasbuh1hhj ubj+)}(h h]h }(hjLhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjB)}(hhdlh]hhdl}(hjghhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct video_device *vdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj|ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubh)}(hhh]jB)}(h video_deviceh]h video_device}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jHc.v4l2_g_ext_ctrlsasbuh1hhj|ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjB)}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj|ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct media_device *mdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h media_deviceh]h media_device}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jHc.v4l2_g_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hmdevh]hmdev}(hjGhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_ext_controls *ch](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj\ubj+)}(h h]h }(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubh)}(hhh]jB)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hj~hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jHc.v4l2_g_ext_ctrlsasbuh1hhj\ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjB)}(hjh]hc}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hQHelper function to implement :ref:`VIDIOC_G_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h.:ref:`VIDIOC_G_EXT_CTRLS `h]jC)}(hjh]hVIDIOC_G_EXT_CTRLS}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhjhKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj ubj)}(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)}(hjEh]hstruct v4l2_ctrl_handler *hdl}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj?ubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hj^hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjhh]hstruct v4l2_ctrl_handler}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjZhMhj^ubeh}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j video_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubj)}(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:820: ./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 refexplicitrefwarnjkj4j media_deviceuh1hhj hMhjubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj<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)}(hjMh]hstruct v4l2_ext_controls *c}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjGubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ext_controls `h](h pointer to }(hjfhhhNhNubh)}(h6:c:type:`struct v4l2_ext_controls `h]j)}(hjph]hstruct v4l2_ext_controls}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ext_controlsuh1hhjbhMhjfubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_try_ext_ctrlsh]jB)}(hv4l2_try_ext_ctrlsh]hv4l2_try_ext_ctrls}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(hr(struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj%ubj+)}(h h]h }(hj6hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjGhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjDubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjImodnameN classnameNjkjn)}jq]jt)}jgjsbc.v4l2_try_ext_ctrlsasbuh1hhj%ubj+)}(h h]h }(hjghhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjB)}(hhdlh]hhdl}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(hstruct video_device *vdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h video_deviceh]h video_device}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jcc.v4l2_try_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hvdevh]hvdev}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(hstruct media_device *mdevh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h media_deviceh]h media_device}(hj)hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj+modnameN classnameNjkjn)}jq]jcc.v4l2_try_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hmdevh]hmdev}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(hstruct v4l2_ext_controls *ch](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjwubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjwubh)}(hhh]jB)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jcc.v4l2_try_ext_ctrlsasbuh1hhjwubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjB)}(hjh]hc}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hSHelper function to implement :ref:`VIDIOC_TRY_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h0:ref:`VIDIOC_TRY_EXT_CTRLS `h]jC)}(hjh]hVIDIOC_TRY_EXT_CTRLS}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhjhKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj hNhNubj)}(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)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj;ubj)}(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)}(hj`h]hstruct v4l2_ctrl_handler *hdl}(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:820: ./include/media/v4l2-ctrls.hhMhjZubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hjyhhhNhNubh)}(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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjuhMhjyubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j video_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubj)}(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:820: ./include/media/v4l2-ctrls.hhMhj ubj)}(hhh]h)}(h7pointer to :c:type:`struct media_device `h](h pointer to }(hj)hhhNhNubh)}(h,:c:type:`struct media_device `h]j)}(hj3h]hstruct media_device}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j media_deviceuh1hhj%hMhj)ubeh}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjWubj)}(hb``struct v4l2_ext_controls *c`` pointer to :c:type:`struct v4l2_ext_controls ` h](j)}(h``struct v4l2_ext_controls *c``h]j)}(hjhh]hstruct v4l2_ext_controls *c}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjbubj)}(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 refexplicitrefwarnjkj4jv4l2_ext_controlsuh1hhj}hMhjubeh}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jv4l2_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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_s_ext_ctrlsh]jB)}(hv4l2_s_ext_ctrlsh]hv4l2_s_ext_ctrls}(hj(hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj$ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(h(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, struct video_device *vdev, struct media_device *mdev, struct v4l2_ext_controls *c)h](j)}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj@ubj+)}(h h]h }(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubh)}(hhh]jB)}(hv4l2_fhh]hv4l2_fh}(hjbhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjdmodnameN classnameNjkjn)}jq]jt)}jgj*sbc.v4l2_s_ext_ctrlsasbuh1hhj@ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjB)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j~c.v4l2_s_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hhdlh]hhdl}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hstruct video_device *vdevh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj"ubj+)}(h h]h }(hj3hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj"ubh)}(hhh]jB)}(h video_deviceh]h video_device}(hjDhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjAubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjFmodnameN classnameNjkjn)}jq]j~c.v4l2_s_ext_ctrlsasbuh1hhj"ubj+)}(h h]h }(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj"ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjB)}(hvdevh]hvdev}(hj}hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hstruct media_device *mdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(h media_deviceh]h media_device}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j~c.v4l2_s_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hmdevh]hmdev}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hstruct v4l2_ext_controls *ch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ext_controlsh]hv4l2_ext_controls}(hj$hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj&modnameN classnameNjkjn)}jq]j~c.v4l2_s_ext_ctrlsasbuh1hhjubj+)}(h h]h }(hjBhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hjh]hc}(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(hQHelper function to implement :ref:`VIDIOC_S_EXT_CTRLS ` ioctlh](hHelper function to implement }(hjhhhNhNubh)}(h.:ref:`VIDIOC_S_EXT_CTRLS `h]jC)}(hjh]hVIDIOC_S_EXT_CTRLS}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjvidioc_g_ext_ctrlsuh1hhjhKhjubh ioctl}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./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}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_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)}(hjCh]hstruct v4l2_ctrl_handler *hdl}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj=ubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ctrl_handler `h](h pointer to }(hj\hhhNhNubh)}(h6:c:type:`struct v4l2_ctrl_handler `h]j)}(hjfh]hstruct v4l2_ctrl_handler}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjXhMhj\ubeh}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct video_device `h](h pointer to }(hjhhhNhNubh)}(h,:c:type:`struct video_device `h]j)}(hjh]hstruct video_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j video_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h7pointer to :c:type:`struct media_device `h](h pointer to }(hj hhhNhNubh)}(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 refexplicitrefwarnjkj4j media_deviceuh1hhjhMhj ubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(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)}(hjKh]hstruct v4l2_ext_controls *c}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjEubj)}(hhh]h)}(hApointer to :c:type:`struct v4l2_ext_controls `h](h pointer to }(hjdhhhNhNubh)}(h6:c:type:`struct v4l2_ext_controls `h]j)}(hjnh]hstruct v4l2_ext_controls}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_ext_controlsuh1hhj`hMhjdubeh}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM ubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhM ubj<)}(h v4l2_ctrl_subdev_subscribe_eventh]jB)}(h v4l2_ctrl_subdev_subscribe_eventh]h v4l2_ctrl_subdev_subscribe_event}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhM ubj)}(hQ(struct v4l2_subdev *sd, struct v4l2_fh *fh, struct v4l2_event_subscription *sub)h](j)}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj#ubj+)}(h h]h }(hj4hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#ubh)}(hhh]jB)}(h v4l2_subdevh]h v4l2_subdev}(hjEhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjBubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjGmodnameN classnameNjkjn)}jq]jt)}jgj sb"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhj#ubj+)}(h h]h }(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjB)}(hsdh]hsd}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct v4l2_fh *fhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_fhh]hv4l2_fh}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]ja"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hfhh]hfh}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h#struct v4l2_event_subscription *subh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_event_subscriptionh]hv4l2_event_subscription}(hj'hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj)modnameN classnameNjkjn)}jq]ja"c.v4l2_ctrl_subdev_subscribe_eventasbuh1hhjubj+)}(h h]h }(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hsubh]hsub}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhM ubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhM hjhhubjn)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkjn)}jq]ja"c.v4l2_ctrl_subdev_subscribe_eventasbjv4l2_subdev_core_opsuh1hhjhKhjubh> 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:820: ./include/media/v4l2-ctrls.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh](j)}(hQ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev ` h](j)}(h``struct v4l2_subdev *sd``h]j)}(hjh]hstruct v4l2_subdev *sd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hj hhhNhNubh)}(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 refexplicitrefwarnjkj4j v4l2_subdevuh1hhjhM hj ubeh}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hE``struct v4l2_fh *fh`` pointer to :c:type:`struct v4l2_fh ` h](j)}(h``struct v4l2_fh *fh``h]j)}(hjKh]hstruct v4l2_fh *fh}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjEubj)}(hhh]h)}(h-pointer to :c:type:`struct v4l2_fh `h](h pointer to }(hjdhhhNhNubh)}(h":c:type:`struct v4l2_fh `h]j)}(hjnh]hstruct v4l2_fh}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_fhuh1hhj`hMhjdubeh}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(hMpointer to :c:type:`struct v4l2_event_subscription `h](h pointer to }(hjhhhNhNubh)}(hB:c:type:`struct v4l2_event_subscription `h]j)}(hjh]hstruct v4l2_event_subscription}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4jv4l2_event_subscriptionuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhj*hMubj<)}(hv4l2_ctrl_subdev_log_statush]jB)}(hv4l2_ctrl_subdev_log_statush]hv4l2_ctrl_subdev_log_status}(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj9ubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhj*hMubj)}(h(struct v4l2_subdev *sd)h]j)}(hstruct v4l2_subdev *sdh](j)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjUubj+)}(h h]h }(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubh)}(hhh]jB)}(h v4l2_subdevh]h v4l2_subdev}(hjwhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjymodnameN classnameNjkjn)}jq]jt)}jgj?sbc.v4l2_ctrl_subdev_log_statusasbuh1hhjUubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjB)}(hsdh]hsd}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj*hMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhj*hMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hj*hMhjhhubjn)}(hhh]h)}(h3Log all controls owned by subdev's control handler.h]h5Log all controls owned by subdev’s control handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhj*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(hb**Parameters** ``struct v4l2_subdev *sd`` pointer to :c:type:`struct v4l2_subdev `h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjubj)}(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:820: ./include/media/v4l2-ctrls.hhMhjubj)}(hhh]h)}(h5pointer to :c:type:`struct v4l2_subdev `h](h pointer to }(hj6hhhNhNubh)}(h*:c:type:`struct v4l2_subdev `h]j)}(hj@h]hstruct v4l2_subdev}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_subdevuh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhj6ubeh}(h]h ]h"]h$]h&]uh1hhj]hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhjhMubj<)}(hv4l2_ctrl_new_fwnode_propertiesh]jB)}(hv4l2_ctrl_new_fwnode_propertiesh]hv4l2_ctrl_new_fwnode_properties}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ](jTjUeh"]h$]h&]hhuh1j;hjhhhjhMubj)}(ht(struct v4l2_ctrl_handler *hdl, const struct v4l2_ctrl_ops *ctrl_ops, const struct v4l2_fwnode_device_properties *p)h](j)}(hstruct v4l2_ctrl_handler *hdlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_ctrl_handlerh]hv4l2_ctrl_handler}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsb!c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hhdlh]hhdl}(hj,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h$const struct v4l2_ctrl_ops *ctrl_opsh](j)}(hjP8h]hconst}(hjEhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjAubj+)}(h h]h }(hjRhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAubj)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjAubj+)}(h h]h }(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAubh)}(hhh]jB)}(h v4l2_ctrl_opsh]h v4l2_ctrl_ops}(hj~hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetjmodnameN classnameNjkjn)}jq]j !c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjAubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjB)}(hctrl_opsh]hctrl_ops}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h-const struct v4l2_fwnode_device_properties *ph](j)}(hjP8h]hconst}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj+)}(h h]h }(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubh)}(hhh]jB)}(hv4l2_fwnode_device_propertiesh]hv4l2_fwnode_device_properties}(hj hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubah}(h]h ]h"]h$]h&] refdomainjreftypejg reftargetj modnameN classnameNjkjn)}jq]j !c.v4l2_ctrl_new_fwnode_propertiesasbuh1hhjubj+)}(h h]h }(hj'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjB)}(hjh]hp}(hjBhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jAhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj_uh1jj`jahjhhhjhMubah}(h]jah ](jejfeh"]h$]h&]jjjk)jlhuh1j hjhMhjhhubjn)}(hhh]h)}(h+Register controls for the device propertiesh]h+Register controls for the device propertiesә}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jmhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM!hjubj)}(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)}(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:820: ./include/media/v4l2-ctrls.hhM hjubj)}(hhh]h)}(hYpointer to :c:type:`struct v4l2_ctrl_handler ` to register controls onh](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 refexplicitrefwarnjkj4jv4l2_ctrl_handleruh1hhjhM hjubh to register controls on}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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}(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:820: ./include/media/v4l2-ctrls.hhM!hjubj)}(hhh]h)}(hSpointer to :c:type:`struct v4l2_ctrl_ops ` to register controls withh](h pointer to }(hj!hhhNhNubh)}(h.:c:type:`struct v4l2_ctrl_ops `h]j)}(hj+h]hstruct v4l2_ctrl_ops}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjkj4j v4l2_ctrl_opsuh1hhjhM!hj!ubh to register controls with}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(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)}(hjdh]h-const struct v4l2_fwnode_device_properties *p}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM"hj^ubj)}(hhh]h)}(hYpointer to :c:type:`struct v4l2_fwnode_device_properties `h](h pointer to }(hj}hhhNhNubh)}(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 refexplicitrefwarnjkj4jv4l2_fwnode_device_propertiesuh1hhjyhM"hj}ubeh}(h]h ]h"]h$]h&]uh1hhjyhM"hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM"hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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 }(hjhhhNhNubj)}(h**p**h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 parameter, if the property has been set to a value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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 }(hjhhhNhNubj)}(h**hdl**h]hhdl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh control handler are not overwritten. Callers should register the controls they want to handle themselves before calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM+hjubh)}(h **Return**h]j)}(hj'h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/media/v4l2-controls:820: ./include/media/v4l2-ctrls.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj 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](j)}(hjCjCCjEjEjsFjxFjGjGjpIjuIjKjKj]MjbMjPjPjUjUjZjZj`j`jejejjjjjkjkjqojvojqj qjsj$sjvjvj yjyj{j {j*}j/}j9j>jjjjj9j>j͋jҋj}jjjjjjɓjΓjjj×jȗjjjj›jjj%j*jnjsjjjjj~jj jjjj˱jбj/j4jFjKjpjujjj;j@jjjjjjjjjXj]jjjpjujjjjjjjjjjjjj_jdj2j7jjjju 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)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jHhhhhhhhKubjI)}(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)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&]levelKtypejcsourcehlineKuh1jHhj`hhhhhKsubjI)}(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&]levelKtypejcsourcehlineKuh1jHhj`hhhhhKubjI)}(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&]levelKtypejcsourcehlineKuh1jHhj`hhhhhKubetransform_messages] transformerN include_log] decorationNhhub.