__v4l2_ctrl_modify_range(9)
π __v4l2_ctrl_modify_range(9) β the unlocked glow-up for your control ranges π
okay so bestie, welcome to the Kernel API Manual β¨ this one's a little kernel-side function that tweaks a control's range while everything is already running, and yes it's the β¨ unlocked β¨ sibling of v4l2_ctrl_modify_range() β meaning the locking is your job, not hers. main character energy: she trusts you π«Ά
πΈ NAME πΈ
__v4l2_ctrl_modify_range β lowkey the unlocked variant of v4l2_ctrl_modify_range(), no cap π
β¨ SYNOPSIS β¨
int __v4l2_ctrl_modify_range (struct v4l2_ctrl *ctrl , s64 min , s64 max , u64 step , s64 def );
π ARGUMENTS π
ctrlβ the control you're updating, bestie. the one getting the glow-up πminβ the control's minimum value. the floor, literally.maxβ the control's maximum value. the ceiling, fr.stepβ the control's step value βdefβ the control's default value. the fallback fit π
π¦ DESCRIPTION π¦
So what does she do? She updates the range of a control on the fly β like, mid-run, no restart, iconic behavior honestly β¨
This works for these control types, and only these, periodt:
INTEGERBOOLEANMENUINTEGER MENUBITMASK
For menu controls specifically, the step value gets interpreted as a menu_skip_mask π iykyk.
β οΈ If one of the range arguments is invalid for this control type, an error is returned. no vibes-based ranges allowed, sorry π
And the big one, the thing you cannot skip:
π₯ The caller is responsible for acquiring the control handler mutex on behalf of __v4l2_ctrl_modify_range.
Like, she's the unlocked version β she is NOT grabbing that mutex for you. that's your job, bestie. do not forget it π
π SEE ALSO π
the whole friend group, and yes we're naming every single one π«Ά
Kernel file ./include/media/v4l2-ctrls.h plus:
union v4l2_ctrl_ptr(9)v4l2_ctrl_ptr_create(9)struct v4l2_ctrl_ops(9)struct v4l2_ctrl_type_ops(9)v4l2_ctrl_notify_fnc(9)struct v4l2_ctrl(9)struct v4l2_ctrl_ref(9)struct v4l2_ctrl_handler(9)struct v4l2_ctrl_config(9)v4l2_ctrl_fill(9)v4l2_ctrl_handler_init_class(9)v4l2_ctrl_handler_init(9)v4l2_ctrl_handler_free(9)v4l2_ctrl_lock(9)v4l2_ctrl_unlock(9)__v4l2_ctrl_handler_setup(9)v4l2_ctrl_handler_setup(9)v4l2_ctrl_handler_log_status(9)v4l2_ctrl_new_custom(9)v4l2_ctrl_new_std(9)v4l2_ctrl_new_std_menu(9)v4l2_ctrl_new_std_menu_items(9)v4l2_ctrl_new_std_compound(9)v4l2_ctrl_new_int_menu(9)v4l2_ctrl_filter(9)v4l2_ctrl_add_handler(9)v4l2_ctrl_radio_filter(9)v4l2_ctrl_cluster(9)v4l2_ctrl_auto_cluster(9)v4l2_ctrl_find(9)v4l2_ctrl_activate(9)__v4l2_ctrl_grab(9)v4l2_ctrl_grab(9)v4l2_ctrl_modify_range(9)__v4l2_ctrl_modify_dimensions(9)v4l2_ctrl_modify_dimensions(9)v4l2_ctrl_notify(9)v4l2_ctrl_get_name(9)v4l2_ctrl_get_menu(9)v4l2_ctrl_get_int_menu(9)v4l2_ctrl_g_ctrl(9)__v4l2_ctrl_s_ctrl(9)v4l2_ctrl_s_ctrl(9)v4l2_ctrl_g_ctrl_int64(9)__v4l2_ctrl_s_ctrl_int64(9)v4l2_ctrl_s_ctrl_int64(9)__v4l2_ctrl_s_ctrl_string(9)v4l2_ctrl_s_ctrl_string(9)__v4l2_ctrl_s_ctrl_compound(9)v4l2_ctrl_s_ctrl_compound(9)v4l2_ctrl_replace(9)v4l2_ctrl_merge(9)v4l2_ctrl_log_status(9)v4l2_ctrl_subscribe_event(9)v4l2_ctrl_poll(9)v4l2_ctrl_request_setup(9)v4l2_ctrl_request_complete(9)v4l2_ctrl_request_hdl_find(9)v4l2_ctrl_request_hdl_put(9)v4l2_ctrl_request_hdl_ctrl_find(9)v4l2_queryctrl(9)v4l2_query_ext_ctrl_to_v4l2_queryctrl(9)v4l2_query_ext_ctrl(9)v4l2_querymenu(9)v4l2_g_ctrl(9)v4l2_s_ctrl(9)v4l2_g_ext_ctrls(9)v4l2_try_ext_ctrls(9)v4l2_s_ext_ctrls(9)v4l2_ctrl_subdev_subscribe_event(9)v4l2_ctrl_subdev_log_status(9)v4l2_ctrl_new_fwnode_properties(9)v4l2_ctrl_type_op_equal(9)v4l2_ctrl_type_op_init(9)v4l2_ctrl_type_op_log(9)v4l2_ctrl_type_op_validate(9)
okay that's the whole page, bestie, you ate that π
β¨ this little beauty lives in ./include/media and the version vibes are dated October 2026 β go forth and lock that mutex fr fr π¦π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms