v4l2_ctrl_s_ctrl(9)
β¨ NAME β¨
ok so welcome to the Kernel API Manual, bestie π β today's main character is v4l2_ctrl_s_ctrl, and honestly? she's a little workhorse π
v4l2_ctrl_s_ctrl β a helper function to set the control's value from within a driver π lowkey essential, no cap.
πΈ SYNOPSIS πΈ
int v4l2_ctrl_s_ctrl (struct v4l2_ctrl *ctrl , s32 val );
π¦ ARGUMENTS π¦
ctrlβ the control. like, the actual control you're setting, bestie π«Άvalβ the new value. the whole point of the function, honestly π
π DESCRIPTION π
so what does she do? she sets the control's new value safely, by going through the control framework instead of just yolo-ing a raw write π§ that's the whole vibe β safe, framework-approved, iconic.
the way she does it: this function will lock the control's handler π which is great for safety and also means β and this is the important bit β it cannot be used from within the v4l2_ctrl_ops functions π like, do not do that, that's a deadlock situation, fr fr.
β οΈ heads up: this function is for integer type controls only π so if you roll up with a string or a compound control, she's gonna have to decline, respectfully.
π SEE ALSO π
the whole extended family, and yes there are so many of them, they all ate π₯
- the header:
./include/media/v4l2-ctrls.h - pointer squad:
union v4l2_ctrl_ptr(9),v4l2_ctrl_ptr_create(9) - ops & notify:
struct v4l2_ctrl_ops(9),struct v4l2_ctrl_type_ops(9),v4l2_ctrl_notify_fnc(9) - the structs:
struct v4l2_ctrl(9),struct v4l2_ctrl_ref(9),struct v4l2_ctrl_handler(9),struct v4l2_ctrl_config(9) - fill:
v4l2_ctrl_fill(9) - handler era:
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) - making new controls:
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) - filter & add:
v4l2_ctrl_filter(9),v4l2_ctrl_add_handler(9),v4l2_ctrl_radio_filter(9) - clusters:
v4l2_ctrl_cluster(9),v4l2_ctrl_auto_cluster(9) - find/activate/grab:
v4l2_ctrl_find(9),v4l2_ctrl_activate(9),__v4l2_ctrl_grab(9),v4l2_ctrl_grab(9) - modify stuff:
__v4l2_ctrl_modify_range(9),v4l2_ctrl_modify_range(9),__v4l2_ctrl_modify_dimensions(9),v4l2_ctrl_modify_dimensions(9) - notify & getters:
v4l2_ctrl_notify(9),v4l2_ctrl_get_name(9),v4l2_ctrl_get_menu(9),v4l2_ctrl_get_int_menu(9) - the get/set besties:
v4l2_ctrl_g_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) - replace/merge/log:
v4l2_ctrl_replace(9),v4l2_ctrl_merge(9),v4l2_ctrl_log_status(9) - events & poll:
v4l2_ctrl_subscribe_event(9),v4l2_ctrl_poll(9) - requests:
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) - the v4l2 query/ctrl classics:
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) - subdev crew:
v4l2_ctrl_subdev_subscribe_event(9),v4l2_ctrl_subdev_log_status(9) - fwnode:
v4l2_ctrl_new_fwnode_properties(9) - type ops:
v4l2_ctrl_type_op_equal(9),v4l2_ctrl_type_op_init(9),v4l2_ctrl_type_op_log(9),v4l2_ctrl_type_op_validate(9)
and that's the whole page, bestie π«Ά this one lives over in ./include/media and the version we're looking at is dated October 2026 β go forth and set those integer controls safely, mwah πβ¨
π¦ 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