@@ -942,8 +942,6 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
case V4L2_CTRL_TYPE_U8:
case V4L2_CTRL_TYPE_U16:
case V4L2_CTRL_TYPE_U32:
- if (ctrl->is_array)
- return -EINVAL;
ret = check_range(ctrl->type, min, max, step, def);
if (ret)
return ret;
@@ -960,17 +958,10 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
ctrl->default_value = def;
}
cur_to_new(ctrl);
- if (validate_new(ctrl, ctrl->p_new)) {
- if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
- *ctrl->p_new.p_s64 = def;
- else
- *ctrl->p_new.p_s32 = def;
- }
+ if (validate_new(ctrl, ctrl->p_new))
+ ctrl->type_ops->init(ctrl, 0, ctrl->p_new);
- if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
- value_changed = *ctrl->p_new.p_s64 != *ctrl->p_cur.p_s64;
- else
- value_changed = *ctrl->p_new.p_s32 != *ctrl->p_cur.p_s32;
+ value_changed = !ctrl->type_ops->equal(ctrl, ctrl->p_cur, ctrl->p_new);
if (value_changed)
ret = set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
else if (range_changed)
For V4L2_CID_TOF_TINT, which is dynamic array, it is required to use __v4l2_ctrl_modify_range. So the idea is to use type_ops instead of u64 from union. It will allow to work with any type. Signed-off-by: Volodymyr Kharuk <vkh@melexis.com> --- drivers/media/v4l2-core/v4l2-ctrls-api.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-)