Commit cd75981e authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

media: v4l2-ctrls: drop 'elems' argument from control type ops.



The type ops for equal, init and validate have an elems argument,
but this can be taken from struct v4l2_ctrl: ctrl->elems for
equal and init, and ctrl->new_elems for validate (since you are
validating a new control value).

So drop this argument and update all callers.

Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent d91d7bc8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -373,7 +373,7 @@ static const struct v4l2_ctrl_ops dw100_ctrl_ops = {
 * The coordinates are saved in UQ12.4 fixed point format.
 */
static void dw100_ctrl_dewarping_map_init(const struct v4l2_ctrl *ctrl,
					  u32 from_idx, u32 elems,
					  u32 from_idx,
					  union v4l2_ctrl_ptr ptr)
{
	struct dw100_ctx *ctx =
@@ -398,7 +398,7 @@ static void dw100_ctrl_dewarping_map_init(const struct v4l2_ctrl *ctrl,
	ctx->map_height = mh;
	ctx->map_size = mh * mw * sizeof(u32);

	for (idx = from_idx; idx < elems; idx++) {
	for (idx = from_idx; idx < ctrl->elems; idx++) {
		qy = min_t(u32, (idx / mw) * qdy, qsh);
		qx = min_t(u32, (idx % mw) * qdx, qsw);
		map[idx] = dw100_map_format_coordinates(qx, qy);
+4 −4
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ static int req_to_user(struct v4l2_ext_control *c,
/* Helper function: copy the initial control value back to the caller */
static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
{
	ctrl->type_ops->init(ctrl, 0, ctrl->elems, ctrl->p_new);
	ctrl->type_ops->init(ctrl, 0, ctrl->p_new);

	return ptr_to_user(c, ctrl, ctrl->p_new);
}
@@ -126,7 +126,7 @@ static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
		if (ctrl->is_dyn_array)
			ctrl->new_elems = elems;
		else if (ctrl->is_array)
			ctrl->type_ops->init(ctrl, elems, ctrl->elems, ctrl->p_new);
			ctrl->type_ops->init(ctrl, elems, ctrl->p_new);
		return 0;
	}

@@ -494,7 +494,7 @@ EXPORT_SYMBOL(v4l2_g_ext_ctrls);
/* Validate a new control */
static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
{
	return ctrl->type_ops->validate(ctrl, ctrl->new_elems, p_new);
	return ctrl->type_ops->validate(ctrl, p_new);
}

/* Validate controls. */
@@ -1007,7 +1007,7 @@ int __v4l2_ctrl_modify_dimensions(struct v4l2_ctrl *ctrl,
	ctrl->p_cur.p = p_array + elems * ctrl->elem_size;
	for (i = 0; i < ctrl->nr_of_dims; i++)
		ctrl->dims[i] = dims[i];
	ctrl->type_ops->init(ctrl, 0, elems, ctrl->p_cur);
	ctrl->type_ops->init(ctrl, 0, ctrl->p_cur);
	cur_to_new(ctrl);
	send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_VALUE |
			       V4L2_EVENT_CTRL_CH_DIMENSIONS);
+10 −9
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
			v4l2_event_queue_fh(sev->fh, &ev);
}

bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl,
			     union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)
{
	unsigned int i;
@@ -74,7 +74,7 @@ bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
	case V4L2_CTRL_TYPE_BUTTON:
		return false;
	case V4L2_CTRL_TYPE_STRING:
		for (i = 0; i < elems; i++) {
		for (i = 0; i < ctrl->elems; i++) {
			unsigned int idx = i * ctrl->elem_size;

			/* strings are always 0-terminated */
@@ -84,7 +84,7 @@ bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
		return true;
	default:
		return !memcmp(ptr1.p_const, ptr2.p_const,
			       elems * ctrl->elem_size);
			       ctrl->elems * ctrl->elem_size);
	}
}
EXPORT_SYMBOL(v4l2_ctrl_type_op_equal);
@@ -178,9 +178,10 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
}

void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
			    u32 tot_elems, union v4l2_ctrl_ptr ptr)
			    union v4l2_ctrl_ptr ptr)
{
	unsigned int i;
	u32 tot_elems = ctrl->elems;
	u32 elems = tot_elems - from_idx;

	if (from_idx >= tot_elems)
@@ -995,7 +996,7 @@ static int std_validate_elem(const struct v4l2_ctrl *ctrl, u32 idx,
	}
}

int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, u32 elems,
int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl,
			       union v4l2_ctrl_ptr ptr)
{
	unsigned int i;
@@ -1017,11 +1018,11 @@ int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, u32 elems,

	case V4L2_CTRL_TYPE_BUTTON:
	case V4L2_CTRL_TYPE_CTRL_CLASS:
		memset(ptr.p_s32, 0, elems * sizeof(s32));
		memset(ptr.p_s32, 0, ctrl->new_elems * sizeof(s32));
		return 0;
	}

	for (i = 0; !ret && i < elems; i++)
	for (i = 0; !ret && i < ctrl->new_elems; i++)
		ret = std_validate_elem(ctrl, i, ptr);
	return ret;
}
@@ -1724,7 +1725,7 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
	}

	ctrl->type_ops->init(ctrl, 0, elems, ctrl->p_cur);
	ctrl->type_ops->init(ctrl, 0, ctrl->p_cur);
	cur_to_new(ctrl);

	if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
@@ -2069,7 +2070,7 @@ static int cluster_changed(struct v4l2_ctrl *master)
			ctrl_changed = true;
		if (!ctrl_changed)
			ctrl_changed = !ctrl->type_ops->equal(ctrl,
				ctrl->elems, ctrl->p_cur, ctrl->p_new);
				ctrl->p_cur, ctrl->p_new);
		ctrl->has_changed = ctrl_changed;
		changed |= ctrl->has_changed;
	}
+11 −17
Original line number Diff line number Diff line
@@ -121,21 +121,19 @@ struct v4l2_ctrl_ops {
 * struct v4l2_ctrl_type_ops - The control type operations that the driver
 *			       has to provide.
 *
 * @equal: return true if both values are equal.
 * @init: initialize the value.
 * @equal: return true if all ctrl->elems array elements are equal.
 * @init: initialize the value for array elements from from_idx to ctrl->elems.
 * @log: log the value.
 * @validate: validate the value. Return 0 on success and a negative value
 *	otherwise.
 * @validate: validate the value for ctrl->new_elems array elements.
 *	Return 0 on success and a negative value otherwise.
 */
struct v4l2_ctrl_type_ops {
	bool (*equal)(const struct v4l2_ctrl *ctrl, u32 elems,
		      union v4l2_ctrl_ptr ptr1,
		      union v4l2_ctrl_ptr ptr2);
	void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx, u32 tot_elems,
	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 (*log)(const struct v4l2_ctrl *ctrl);
	int (*validate)(const struct v4l2_ctrl *ctrl, u32 elems,
			union v4l2_ctrl_ptr ptr);
	int (*validate)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr);
};

/**
@@ -1543,13 +1541,12 @@ int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
 * v4l2_ctrl_type_op_equal - Default v4l2_ctrl_type_ops equal callback.
 *
 * @ctrl: The v4l2_ctrl pointer.
 * @elems: The number of elements to compare.
 * @ptr1: A v4l2 control value.
 * @ptr2: A v4l2 control value.
 *
 * Return: true if values are equal, otherwise false.
 */
bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl,
			     union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2);

/**
@@ -1557,13 +1554,12 @@ bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
 *
 * @ctrl: The v4l2_ctrl pointer.
 * @from_idx: Starting element index.
 * @elems: The number of elements to initialize.
 * @ptr: The v4l2 control value.
 *
 * Return: void
 */
void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
			    u32 elems, union v4l2_ctrl_ptr ptr);
			    union v4l2_ctrl_ptr ptr);

/**
 * v4l2_ctrl_type_op_log - Default v4l2_ctrl_type_ops log callback.
@@ -1578,12 +1574,10 @@ void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl);
 * v4l2_ctrl_type_op_validate - Default v4l2_ctrl_type_ops validate callback.
 *
 * @ctrl: The v4l2_ctrl pointer.
 * @elems: The number of elements in the control.
 * @ptr: The v4l2 control value.
 *
 * Return: 0 on success, a negative error code on failure.
 */
int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, u32 elems,
			       union v4l2_ctrl_ptr ptr);
int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr);

#endif