Lines Matching refs:ctrl

41 		       struct v4l2_ctrl *ctrl,  in ptr_to_user()  argument
46 if (ctrl->is_ptr && !ctrl->is_string) in ptr_to_user()
50 switch (ctrl->type) { in ptr_to_user()
54 c->size = ctrl->elem_size; in ptr_to_user()
70 static int cur_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl) in cur_to_user() argument
72 return ptr_to_user(c, ctrl, ctrl->p_cur); in cur_to_user()
77 struct v4l2_ctrl *ctrl) in new_to_user() argument
79 return ptr_to_user(c, ctrl, ctrl->p_new); in new_to_user()
86 return ptr_to_user(c, ref->ctrl, ref->p_req); in req_to_user()
90 static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl) in def_to_user() argument
94 for (idx = 0; idx < ctrl->elems; idx++) in def_to_user()
95 ctrl->type_ops->init(ctrl, idx, ctrl->p_new); in def_to_user()
97 return ptr_to_user(c, ctrl, ctrl->p_new); in def_to_user()
102 struct v4l2_ctrl *ctrl, in user_to_ptr() argument
108 ctrl->is_new = 1; in user_to_ptr()
109 if (ctrl->is_ptr && !ctrl->is_string) { in user_to_ptr()
113 if (ret || !ctrl->is_array) in user_to_ptr()
115 for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++) in user_to_ptr()
116 ctrl->type_ops->init(ctrl, idx, ptr); in user_to_ptr()
120 switch (ctrl->type) { in user_to_ptr()
128 if (size > ctrl->maximum + 1) in user_to_ptr()
129 size = ctrl->maximum + 1; in user_to_ptr()
139 if (strlen(ptr.p_char) == ctrl->maximum && last) in user_to_ptr()
151 static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl) in user_to_new() argument
153 return user_to_ptr(c, ctrl, ctrl->p_new); in user_to_new()
217 struct v4l2_ctrl *ctrl; in prepare_ext_ctrls() local
247 ctrl = ref->ctrl; in prepare_ext_ctrls()
248 if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED) { in prepare_ext_ctrls()
253 if (ctrl->cluster[0]->ncontrols > 1) in prepare_ext_ctrls()
255 if (ctrl->cluster[0] != ctrl) in prepare_ext_ctrls()
256 ref = find_ref_lock(hdl, ctrl->cluster[0]->id); in prepare_ext_ctrls()
257 if (ctrl->is_ptr && !ctrl->is_string) { in prepare_ext_ctrls()
258 unsigned int tot_size = ctrl->elems * ctrl->elem_size; in prepare_ext_ctrls()
384 if (helpers[i].ref->ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY) in v4l2_g_ext_ctrls_common()
395 master = helpers[i].mref->ctrl; in v4l2_g_ext_ctrls_common()
432 ret = def_to_user(cs->controls + idx, ref->ctrl); in v4l2_g_ext_ctrls_common()
436 ret = new_to_user(cs->controls + idx, ref->ctrl); in v4l2_g_ext_ctrls_common()
438 ret = cur_to_user(cs->controls + idx, ref->ctrl); in v4l2_g_ext_ctrls_common()
471 struct v4l2_ctrl *ctrl = helpers[i].ref->ctrl; in validate_ctrls() local
476 if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY) { in validate_ctrls()
479 ctrl->id); in validate_ctrls()
490 if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)) { in validate_ctrls()
493 ctrl->id); in validate_ctrls()
500 if (ctrl->is_ptr) in validate_ctrls()
502 if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64) in validate_ctrls()
506 ret = validate_new(ctrl, p_new); in validate_ctrls()
563 master = helpers[i].mref->ctrl; in try_set_ext_ctrls_common()
590 if (helpers[tmp_idx].ref->ctrl == master) in try_set_ext_ctrls_common()
607 struct v4l2_ctrl *ctrl = helpers[idx].ref->ctrl; in try_set_ext_ctrls_common() local
609 ret = user_to_new(cs->controls + idx, ctrl); in try_set_ext_ctrls_common()
610 if (!ret && ctrl->is_ptr) { in try_set_ext_ctrls_common()
611 ret = validate_new(ctrl, ctrl->p_new); in try_set_ext_ctrls_common()
615 v4l2_ctrl_get_name(ctrl->id), ret); in try_set_ext_ctrls_common()
637 helpers[idx].ref->ctrl); in try_set_ext_ctrls_common()
693 static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c) in get_ctrl() argument
695 struct v4l2_ctrl *master = ctrl->cluster[0]; in get_ctrl()
703 if (!ctrl->is_int && ctrl->type != V4L2_CTRL_TYPE_INTEGER64) in get_ctrl()
706 if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY) in get_ctrl()
711 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) { in get_ctrl()
715 new_to_user(c, ctrl); in get_ctrl()
717 cur_to_user(c, ctrl); in get_ctrl()
725 struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id); in v4l2_g_ctrl() local
729 if (!ctrl || !ctrl->is_int) in v4l2_g_ctrl()
731 ret = get_ctrl(ctrl, &c); in v4l2_g_ctrl()
738 static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags) in set_ctrl() argument
740 struct v4l2_ctrl *master = ctrl->cluster[0]; in set_ctrl()
749 ret = validate_new(ctrl, ctrl->p_new); in set_ctrl()
758 if (master->is_auto && master->has_volatiles && ctrl == master && in set_ctrl()
759 !is_cur_manual(master) && ctrl->val == master->manual_mode_value) in set_ctrl()
762 ctrl->is_new = 1; in set_ctrl()
767 static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, in set_ctrl_lock() argument
772 v4l2_ctrl_lock(ctrl); in set_ctrl_lock()
773 user_to_new(c, ctrl); in set_ctrl_lock()
774 ret = set_ctrl(fh, ctrl, 0); in set_ctrl_lock()
776 cur_to_user(c, ctrl); in set_ctrl_lock()
777 v4l2_ctrl_unlock(ctrl); in set_ctrl_lock()
784 struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id); in v4l2_s_ctrl() local
788 if (!ctrl || !ctrl->is_int) in v4l2_s_ctrl()
791 if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY) in v4l2_s_ctrl()
795 ret = set_ctrl_lock(fh, ctrl, &c); in v4l2_s_ctrl()
805 s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl) in v4l2_ctrl_g_ctrl() argument
810 if (WARN_ON(!ctrl->is_int)) in v4l2_ctrl_g_ctrl()
813 get_ctrl(ctrl, &c); in v4l2_ctrl_g_ctrl()
818 s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl) in v4l2_ctrl_g_ctrl_int64() argument
823 if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64)) in v4l2_ctrl_g_ctrl_int64()
826 get_ctrl(ctrl, &c); in v4l2_ctrl_g_ctrl_int64()
831 int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val) in __v4l2_ctrl_s_ctrl() argument
833 lockdep_assert_held(ctrl->handler->lock); in __v4l2_ctrl_s_ctrl()
836 if (WARN_ON(!ctrl->is_int)) in __v4l2_ctrl_s_ctrl()
838 ctrl->val = val; in __v4l2_ctrl_s_ctrl()
839 return set_ctrl(NULL, ctrl, 0); in __v4l2_ctrl_s_ctrl()
843 int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val) in __v4l2_ctrl_s_ctrl_int64() argument
845 lockdep_assert_held(ctrl->handler->lock); in __v4l2_ctrl_s_ctrl_int64()
848 if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64)) in __v4l2_ctrl_s_ctrl_int64()
850 *ctrl->p_new.p_s64 = val; in __v4l2_ctrl_s_ctrl_int64()
851 return set_ctrl(NULL, ctrl, 0); in __v4l2_ctrl_s_ctrl_int64()
855 int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s) in __v4l2_ctrl_s_ctrl_string() argument
857 lockdep_assert_held(ctrl->handler->lock); in __v4l2_ctrl_s_ctrl_string()
860 if (WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING)) in __v4l2_ctrl_s_ctrl_string()
862 strscpy(ctrl->p_new.p_char, s, ctrl->maximum + 1); in __v4l2_ctrl_s_ctrl_string()
863 return set_ctrl(NULL, ctrl, 0); in __v4l2_ctrl_s_ctrl_string()
867 int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl, in __v4l2_ctrl_s_ctrl_compound() argument
870 lockdep_assert_held(ctrl->handler->lock); in __v4l2_ctrl_s_ctrl_compound()
873 if (WARN_ON(ctrl->type != type)) in __v4l2_ctrl_s_ctrl_compound()
875 memcpy(ctrl->p_new.p, p, ctrl->elems * ctrl->elem_size); in __v4l2_ctrl_s_ctrl_compound()
876 return set_ctrl(NULL, ctrl, 0); in __v4l2_ctrl_s_ctrl_compound()
883 int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, in __v4l2_ctrl_modify_range() argument
890 lockdep_assert_held(ctrl->handler->lock); in __v4l2_ctrl_modify_range()
892 switch (ctrl->type) { in __v4l2_ctrl_modify_range()
902 if (ctrl->is_array) in __v4l2_ctrl_modify_range()
904 ret = check_range(ctrl->type, min, max, step, def); in __v4l2_ctrl_modify_range()
911 if (ctrl->minimum != min || ctrl->maximum != max || in __v4l2_ctrl_modify_range()
912 ctrl->step != step || ctrl->default_value != def) { in __v4l2_ctrl_modify_range()
914 ctrl->minimum = min; in __v4l2_ctrl_modify_range()
915 ctrl->maximum = max; in __v4l2_ctrl_modify_range()
916 ctrl->step = step; in __v4l2_ctrl_modify_range()
917 ctrl->default_value = def; in __v4l2_ctrl_modify_range()
919 cur_to_new(ctrl); in __v4l2_ctrl_modify_range()
920 if (validate_new(ctrl, ctrl->p_new)) { in __v4l2_ctrl_modify_range()
921 if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64) in __v4l2_ctrl_modify_range()
922 *ctrl->p_new.p_s64 = def; in __v4l2_ctrl_modify_range()
924 *ctrl->p_new.p_s32 = def; in __v4l2_ctrl_modify_range()
927 if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64) in __v4l2_ctrl_modify_range()
928 value_changed = *ctrl->p_new.p_s64 != *ctrl->p_cur.p_s64; in __v4l2_ctrl_modify_range()
930 value_changed = *ctrl->p_new.p_s32 != *ctrl->p_cur.p_s32; in __v4l2_ctrl_modify_range()
932 ret = set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE); in __v4l2_ctrl_modify_range()
934 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE); in __v4l2_ctrl_modify_range()
945 struct v4l2_ctrl *ctrl; in v4l2_query_ext_ctrl() local
980 is_compound = ref->ctrl->is_array || in v4l2_query_ext_ctrl()
981 ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES; in v4l2_query_ext_ctrl()
982 if (id < ref->ctrl->id && in v4l2_query_ext_ctrl()
996 is_compound = ref->ctrl->is_array || in v4l2_query_ext_ctrl()
997 ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES; in v4l2_query_ext_ctrl()
998 if (id < ref->ctrl->id && in v4l2_query_ext_ctrl()
1011 ctrl = ref->ctrl; in v4l2_query_ext_ctrl()
1016 qc->id = ctrl->id; in v4l2_query_ext_ctrl()
1017 strscpy(qc->name, ctrl->name, sizeof(qc->name)); in v4l2_query_ext_ctrl()
1018 qc->flags = user_flags(ctrl); in v4l2_query_ext_ctrl()
1019 qc->type = ctrl->type; in v4l2_query_ext_ctrl()
1020 qc->elem_size = ctrl->elem_size; in v4l2_query_ext_ctrl()
1021 qc->elems = ctrl->elems; in v4l2_query_ext_ctrl()
1022 qc->nr_of_dims = ctrl->nr_of_dims; in v4l2_query_ext_ctrl()
1023 memcpy(qc->dims, ctrl->dims, qc->nr_of_dims * sizeof(qc->dims[0])); in v4l2_query_ext_ctrl()
1024 qc->minimum = ctrl->minimum; in v4l2_query_ext_ctrl()
1025 qc->maximum = ctrl->maximum; in v4l2_query_ext_ctrl()
1026 qc->default_value = ctrl->default_value; in v4l2_query_ext_ctrl()
1027 if (ctrl->type == V4L2_CTRL_TYPE_MENU || in v4l2_query_ext_ctrl()
1028 ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU) in v4l2_query_ext_ctrl()
1031 qc->step = ctrl->step; in v4l2_query_ext_ctrl()
1076 struct v4l2_ctrl *ctrl; in v4l2_querymenu() local
1079 ctrl = v4l2_ctrl_find(hdl, qm->id); in v4l2_querymenu()
1080 if (!ctrl) in v4l2_querymenu()
1085 switch (ctrl->type) { in v4l2_querymenu()
1087 if (!ctrl->qmenu) in v4l2_querymenu()
1091 if (!ctrl->qmenu_int) in v4l2_querymenu()
1098 if (i < ctrl->minimum || i > ctrl->maximum) in v4l2_querymenu()
1102 if (ctrl->menu_skip_mask & (1ULL << i)) in v4l2_querymenu()
1105 if (ctrl->type == V4L2_CTRL_TYPE_MENU) { in v4l2_querymenu()
1106 if (!ctrl->qmenu[i] || ctrl->qmenu[i][0] == '\0') in v4l2_querymenu()
1108 strscpy(qm->name, ctrl->qmenu[i], sizeof(qm->name)); in v4l2_querymenu()
1110 qm->value = ctrl->qmenu_int[i]; in v4l2_querymenu()
1146 struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id); in v4l2_ctrl_add_event() local
1148 if (!ctrl) in v4l2_ctrl_add_event()
1151 v4l2_ctrl_lock(ctrl); in v4l2_ctrl_add_event()
1152 list_add_tail(&sev->node, &ctrl->ev_subs); in v4l2_ctrl_add_event()
1153 if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS && in v4l2_ctrl_add_event()
1155 send_initial_event(sev->fh, ctrl); in v4l2_ctrl_add_event()
1156 v4l2_ctrl_unlock(ctrl); in v4l2_ctrl_add_event()
1162 struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id); in v4l2_ctrl_del_event() local
1164 if (!ctrl) in v4l2_ctrl_del_event()
1167 v4l2_ctrl_lock(ctrl); in v4l2_ctrl_del_event()
1169 v4l2_ctrl_unlock(ctrl); in v4l2_ctrl_del_event()
1174 u32 old_changes = old->u.ctrl.changes; in v4l2_ctrl_replace()
1176 old->u.ctrl = new->u.ctrl; in v4l2_ctrl_replace()
1177 old->u.ctrl.changes |= old_changes; in v4l2_ctrl_replace()
1183 new->u.ctrl.changes |= old->u.ctrl.changes; in v4l2_ctrl_merge()