xref: /linux/drivers/media/v4l2-core/v4l2-ctrls-core.c (revision 0cdee263bc5e7b20f657ea09f9272f50c568f35b)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * V4L2 controls framework core implementation.
4  *
5  * Copyright (C) 2010-2021  Hans Verkuil <hverkuil-cisco@xs4all.nl>
6  */
7 
8 #include <linux/export.h>
9 #include <linux/mm.h>
10 #include <linux/slab.h>
11 #include <media/v4l2-ctrls.h>
12 #include <media/v4l2-event.h>
13 #include <media/v4l2-fwnode.h>
14 
15 #include "v4l2-ctrls-priv.h"
16 
17 static const union v4l2_ctrl_ptr ptr_null;
18 
fill_event(struct v4l2_event * ev,struct v4l2_ctrl * ctrl,u32 changes)19 static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl,
20 		       u32 changes)
21 {
22 	memset(ev, 0, sizeof(*ev));
23 	ev->type = V4L2_EVENT_CTRL;
24 	ev->id = ctrl->id;
25 	ev->u.ctrl.changes = changes;
26 	ev->u.ctrl.type = ctrl->type;
27 	ev->u.ctrl.flags = user_flags(ctrl);
28 	if (ctrl->is_ptr)
29 		ev->u.ctrl.value64 = 0;
30 	else
31 		ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
32 	ev->u.ctrl.minimum = ctrl->minimum;
33 	ev->u.ctrl.maximum = ctrl->maximum;
34 	if (ctrl->type == V4L2_CTRL_TYPE_MENU
35 	    || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
36 		ev->u.ctrl.step = 1;
37 	else
38 		ev->u.ctrl.step = ctrl->step;
39 	ev->u.ctrl.default_value = ctrl->default_value;
40 }
41 
send_initial_event(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl)42 void send_initial_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl)
43 {
44 	struct v4l2_event ev;
45 	u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
46 
47 	if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
48 		changes |= V4L2_EVENT_CTRL_CH_VALUE;
49 	fill_event(&ev, ctrl, changes);
50 	v4l2_event_queue_fh(fh, &ev);
51 }
52 
send_event(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl,u32 changes)53 void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
54 {
55 	struct v4l2_event ev;
56 	struct v4l2_subscribed_event *sev;
57 
58 	if (list_empty(&ctrl->ev_subs))
59 		return;
60 	fill_event(&ev, ctrl, changes);
61 
62 	list_for_each_entry(sev, &ctrl->ev_subs, node)
63 		if (sev->fh != fh ||
64 		    (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
65 			v4l2_event_queue_fh(sev->fh, &ev);
66 }
67 
v4l2_ctrl_type_op_equal(const struct v4l2_ctrl * ctrl,union v4l2_ctrl_ptr ptr1,union v4l2_ctrl_ptr ptr2)68 bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl,
69 			     union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)
70 {
71 	unsigned int i;
72 
73 	switch (ctrl->type) {
74 	case V4L2_CTRL_TYPE_BUTTON:
75 		return false;
76 	case V4L2_CTRL_TYPE_STRING:
77 		for (i = 0; i < ctrl->elems; i++) {
78 			unsigned int idx = i * ctrl->elem_size;
79 
80 			/* strings are always 0-terminated */
81 			if (strcmp(ptr1.p_char + idx, ptr2.p_char + idx))
82 				return false;
83 		}
84 		return true;
85 	default:
86 		return !memcmp(ptr1.p_const, ptr2.p_const,
87 			       ctrl->elems * ctrl->elem_size);
88 	}
89 }
90 EXPORT_SYMBOL(v4l2_ctrl_type_op_equal);
91 
92 /* Default intra MPEG-2 quantisation coefficients, from the specification. */
93 static const u8 mpeg2_intra_quant_matrix[64] = {
94 	8,  16, 16, 19, 16, 19, 22, 22,
95 	22, 22, 22, 22, 26, 24, 26, 27,
96 	27, 27, 26, 26, 26, 26, 27, 27,
97 	27, 29, 29, 29, 34, 34, 34, 29,
98 	29, 29, 27, 27, 29, 29, 32, 32,
99 	34, 34, 37, 38, 37, 35, 35, 34,
100 	35, 38, 38, 40, 40, 40, 48, 48,
101 	46, 46, 56, 56, 58, 69, 69, 83
102 };
103 
std_init_compound(const struct v4l2_ctrl * ctrl,u32 idx,union v4l2_ctrl_ptr ptr)104 static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
105 			      union v4l2_ctrl_ptr ptr)
106 {
107 	struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
108 	struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
109 	struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quant;
110 	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
111 	struct v4l2_ctrl_vp9_frame *p_vp9_frame;
112 	struct v4l2_ctrl_fwht_params *p_fwht_params;
113 	struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
114 	struct v4l2_ctrl_av1_sequence *p_av1_sequence;
115 	void *p = ptr.p + idx * ctrl->elem_size;
116 
117 	if (ctrl->p_def.p_const)
118 		memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
119 	else
120 		memset(p, 0, ctrl->elem_size);
121 
122 	switch ((u32)ctrl->type) {
123 	case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
124 		p_mpeg2_sequence = p;
125 
126 		/* 4:2:0 */
127 		p_mpeg2_sequence->chroma_format = 1;
128 		break;
129 	case V4L2_CTRL_TYPE_MPEG2_PICTURE:
130 		p_mpeg2_picture = p;
131 
132 		/* interlaced top field */
133 		p_mpeg2_picture->picture_structure = V4L2_MPEG2_PIC_TOP_FIELD;
134 		p_mpeg2_picture->picture_coding_type =
135 					V4L2_MPEG2_PIC_CODING_TYPE_I;
136 		break;
137 	case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
138 		p_mpeg2_quant = p;
139 
140 		memcpy(p_mpeg2_quant->intra_quantiser_matrix,
141 		       mpeg2_intra_quant_matrix,
142 		       ARRAY_SIZE(mpeg2_intra_quant_matrix));
143 		/*
144 		 * The default non-intra MPEG-2 quantisation
145 		 * coefficients are all 16, as per the specification.
146 		 */
147 		memset(p_mpeg2_quant->non_intra_quantiser_matrix, 16,
148 		       sizeof(p_mpeg2_quant->non_intra_quantiser_matrix));
149 		break;
150 	case V4L2_CTRL_TYPE_VP8_FRAME:
151 		p_vp8_frame = p;
152 		p_vp8_frame->num_dct_parts = 1;
153 		break;
154 	case V4L2_CTRL_TYPE_VP9_FRAME:
155 		p_vp9_frame = p;
156 		p_vp9_frame->profile = 0;
157 		p_vp9_frame->bit_depth = 8;
158 		p_vp9_frame->flags |= V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
159 			V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING;
160 		break;
161 	case V4L2_CTRL_TYPE_AV1_SEQUENCE:
162 		p_av1_sequence = p;
163 		p_av1_sequence->bit_depth = 8;
164 		break;
165 	case V4L2_CTRL_TYPE_FWHT_PARAMS:
166 		p_fwht_params = p;
167 		p_fwht_params->version = V4L2_FWHT_VERSION;
168 		p_fwht_params->width = 1280;
169 		p_fwht_params->height = 720;
170 		p_fwht_params->flags = V4L2_FWHT_FL_PIXENC_YUV |
171 			(2 << V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET);
172 		break;
173 	case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
174 		p_h264_scaling_matrix = p;
175 		/*
176 		 * The default (flat) H.264 scaling matrix when none are
177 		 * specified in the bitstream, this is according to formulas
178 		 *  (7-8) and (7-9) of the specification.
179 		 */
180 		memset(p_h264_scaling_matrix, 16, sizeof(*p_h264_scaling_matrix));
181 		break;
182 	}
183 }
184 
std_min_compound(const struct v4l2_ctrl * ctrl,u32 idx,union v4l2_ctrl_ptr ptr)185 static void std_min_compound(const struct v4l2_ctrl *ctrl, u32 idx,
186 			     union v4l2_ctrl_ptr ptr)
187 {
188 	void *p = ptr.p + idx * ctrl->elem_size;
189 
190 	if (ctrl->p_min.p_const)
191 		memcpy(p, ctrl->p_min.p_const, ctrl->elem_size);
192 	else
193 		memset(p, 0, ctrl->elem_size);
194 }
195 
std_max_compound(const struct v4l2_ctrl * ctrl,u32 idx,union v4l2_ctrl_ptr ptr)196 static void std_max_compound(const struct v4l2_ctrl *ctrl, u32 idx,
197 			     union v4l2_ctrl_ptr ptr)
198 {
199 	void *p = ptr.p + idx * ctrl->elem_size;
200 
201 	if (ctrl->p_max.p_const)
202 		memcpy(p, ctrl->p_max.p_const, ctrl->elem_size);
203 	else
204 		memset(p, 0, ctrl->elem_size);
205 }
206 
__v4l2_ctrl_type_op_init(const struct v4l2_ctrl * ctrl,u32 from_idx,u32 which,union v4l2_ctrl_ptr ptr)207 static void __v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
208 				     u32 which, union v4l2_ctrl_ptr ptr)
209 {
210 	unsigned int i;
211 	u32 tot_elems = ctrl->elems;
212 	u32 elems = tot_elems - from_idx;
213 	s64 value;
214 
215 	switch (which) {
216 	case V4L2_CTRL_WHICH_DEF_VAL:
217 		value = ctrl->default_value;
218 		break;
219 	case V4L2_CTRL_WHICH_MAX_VAL:
220 		value = ctrl->maximum;
221 		break;
222 	case V4L2_CTRL_WHICH_MIN_VAL:
223 		value = ctrl->minimum;
224 		break;
225 	default:
226 		return;
227 	}
228 
229 	switch (ctrl->type) {
230 	case V4L2_CTRL_TYPE_STRING:
231 		if (which == V4L2_CTRL_WHICH_DEF_VAL)
232 			value = ctrl->minimum;
233 
234 		for (i = from_idx; i < tot_elems; i++) {
235 			unsigned int offset = i * ctrl->elem_size;
236 
237 			memset(ptr.p_char + offset, ' ', value);
238 			ptr.p_char[offset + value] = '\0';
239 		}
240 		break;
241 	case V4L2_CTRL_TYPE_INTEGER64:
242 		if (value) {
243 			for (i = from_idx; i < tot_elems; i++)
244 				ptr.p_s64[i] = value;
245 		} else {
246 			memset(ptr.p_s64 + from_idx, 0, elems * sizeof(s64));
247 		}
248 		break;
249 	case V4L2_CTRL_TYPE_INTEGER:
250 	case V4L2_CTRL_TYPE_INTEGER_MENU:
251 	case V4L2_CTRL_TYPE_MENU:
252 	case V4L2_CTRL_TYPE_BITMASK:
253 	case V4L2_CTRL_TYPE_BOOLEAN:
254 		if (value) {
255 			for (i = from_idx; i < tot_elems; i++)
256 				ptr.p_s32[i] = value;
257 		} else {
258 			memset(ptr.p_s32 + from_idx, 0, elems * sizeof(s32));
259 		}
260 		break;
261 	case V4L2_CTRL_TYPE_BUTTON:
262 	case V4L2_CTRL_TYPE_CTRL_CLASS:
263 		memset(ptr.p_s32 + from_idx, 0, elems * sizeof(s32));
264 		break;
265 	case V4L2_CTRL_TYPE_U8:
266 		memset(ptr.p_u8 + from_idx, value, elems);
267 		break;
268 	case V4L2_CTRL_TYPE_U16:
269 		if (value) {
270 			for (i = from_idx; i < tot_elems; i++)
271 				ptr.p_u16[i] = value;
272 		} else {
273 			memset(ptr.p_u16 + from_idx, 0, elems * sizeof(u16));
274 		}
275 		break;
276 	case V4L2_CTRL_TYPE_U32:
277 		if (value) {
278 			for (i = from_idx; i < tot_elems; i++)
279 				ptr.p_u32[i] = value;
280 		} else {
281 			memset(ptr.p_u32 + from_idx, 0, elems * sizeof(u32));
282 		}
283 		break;
284 	default:
285 		for (i = from_idx; i < tot_elems; i++) {
286 			switch (which) {
287 			case V4L2_CTRL_WHICH_DEF_VAL:
288 				std_init_compound(ctrl, i, ptr);
289 				break;
290 			case V4L2_CTRL_WHICH_MAX_VAL:
291 				std_max_compound(ctrl, i, ptr);
292 				break;
293 			case V4L2_CTRL_WHICH_MIN_VAL:
294 				std_min_compound(ctrl, i, ptr);
295 				break;
296 			}
297 		}
298 		break;
299 	}
300 }
301 
v4l2_ctrl_type_op_init(const struct v4l2_ctrl * ctrl,u32 from_idx,union v4l2_ctrl_ptr ptr)302 void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
303 			    union v4l2_ctrl_ptr ptr)
304 {
305 	__v4l2_ctrl_type_op_init(ctrl, from_idx, V4L2_CTRL_WHICH_DEF_VAL, ptr);
306 }
307 EXPORT_SYMBOL(v4l2_ctrl_type_op_init);
308 
v4l2_ctrl_type_op_minimum(const struct v4l2_ctrl * ctrl,u32 from_idx,union v4l2_ctrl_ptr ptr)309 static void v4l2_ctrl_type_op_minimum(const struct v4l2_ctrl *ctrl,
310 				      u32 from_idx, union v4l2_ctrl_ptr ptr)
311 {
312 	__v4l2_ctrl_type_op_init(ctrl, from_idx, V4L2_CTRL_WHICH_MIN_VAL, ptr);
313 }
314 
v4l2_ctrl_type_op_maximum(const struct v4l2_ctrl * ctrl,u32 from_idx,union v4l2_ctrl_ptr ptr)315 static void v4l2_ctrl_type_op_maximum(const struct v4l2_ctrl *ctrl,
316 				      u32 from_idx, union v4l2_ctrl_ptr ptr)
317 {
318 	__v4l2_ctrl_type_op_init(ctrl, from_idx, V4L2_CTRL_WHICH_MAX_VAL, ptr);
319 }
320 
v4l2_ctrl_type_op_log(const struct v4l2_ctrl * ctrl)321 void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl)
322 {
323 	union v4l2_ctrl_ptr ptr = ctrl->p_cur;
324 
325 	if (ctrl->is_array) {
326 		unsigned i;
327 
328 		for (i = 0; i < ctrl->nr_of_dims; i++)
329 			pr_cont("[%u]", ctrl->dims[i]);
330 		pr_cont(" ");
331 	}
332 
333 	switch (ctrl->type) {
334 	case V4L2_CTRL_TYPE_INTEGER:
335 		pr_cont("%d", *ptr.p_s32);
336 		break;
337 	case V4L2_CTRL_TYPE_BOOLEAN:
338 		pr_cont("%s", *ptr.p_s32 ? "true" : "false");
339 		break;
340 	case V4L2_CTRL_TYPE_MENU:
341 		pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
342 		break;
343 	case V4L2_CTRL_TYPE_INTEGER_MENU:
344 		pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
345 		break;
346 	case V4L2_CTRL_TYPE_BITMASK:
347 		pr_cont("0x%08x", *ptr.p_s32);
348 		break;
349 	case V4L2_CTRL_TYPE_INTEGER64:
350 		pr_cont("%lld", *ptr.p_s64);
351 		break;
352 	case V4L2_CTRL_TYPE_STRING:
353 		pr_cont("%s", ptr.p_char);
354 		break;
355 	case V4L2_CTRL_TYPE_U8:
356 		pr_cont("%u", (unsigned)*ptr.p_u8);
357 		break;
358 	case V4L2_CTRL_TYPE_U16:
359 		pr_cont("%u", (unsigned)*ptr.p_u16);
360 		break;
361 	case V4L2_CTRL_TYPE_U32:
362 		pr_cont("%u", (unsigned)*ptr.p_u32);
363 		break;
364 	case V4L2_CTRL_TYPE_AREA:
365 		pr_cont("%ux%u", ptr.p_area->width, ptr.p_area->height);
366 		break;
367 	case V4L2_CTRL_TYPE_H264_SPS:
368 		pr_cont("H264_SPS");
369 		break;
370 	case V4L2_CTRL_TYPE_H264_PPS:
371 		pr_cont("H264_PPS");
372 		break;
373 	case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
374 		pr_cont("H264_SCALING_MATRIX");
375 		break;
376 	case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
377 		pr_cont("H264_SLICE_PARAMS");
378 		break;
379 	case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
380 		pr_cont("H264_DECODE_PARAMS");
381 		break;
382 	case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
383 		pr_cont("H264_PRED_WEIGHTS");
384 		break;
385 	case V4L2_CTRL_TYPE_FWHT_PARAMS:
386 		pr_cont("FWHT_PARAMS");
387 		break;
388 	case V4L2_CTRL_TYPE_VP8_FRAME:
389 		pr_cont("VP8_FRAME");
390 		break;
391 	case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
392 		pr_cont("HDR10_CLL_INFO");
393 		break;
394 	case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
395 		pr_cont("HDR10_MASTERING_DISPLAY");
396 		break;
397 	case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
398 		pr_cont("MPEG2_QUANTISATION");
399 		break;
400 	case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
401 		pr_cont("MPEG2_SEQUENCE");
402 		break;
403 	case V4L2_CTRL_TYPE_MPEG2_PICTURE:
404 		pr_cont("MPEG2_PICTURE");
405 		break;
406 	case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
407 		pr_cont("VP9_COMPRESSED_HDR");
408 		break;
409 	case V4L2_CTRL_TYPE_VP9_FRAME:
410 		pr_cont("VP9_FRAME");
411 		break;
412 	case V4L2_CTRL_TYPE_HEVC_SPS:
413 		pr_cont("HEVC_SPS");
414 		break;
415 	case V4L2_CTRL_TYPE_HEVC_PPS:
416 		pr_cont("HEVC_PPS");
417 		break;
418 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
419 		pr_cont("HEVC_SLICE_PARAMS");
420 		break;
421 	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
422 		pr_cont("HEVC_SCALING_MATRIX");
423 		break;
424 	case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
425 		pr_cont("HEVC_DECODE_PARAMS");
426 		break;
427 	case V4L2_CTRL_TYPE_AV1_SEQUENCE:
428 		pr_cont("AV1_SEQUENCE");
429 		break;
430 	case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
431 		pr_cont("AV1_TILE_GROUP_ENTRY");
432 		break;
433 	case V4L2_CTRL_TYPE_AV1_FRAME:
434 		pr_cont("AV1_FRAME");
435 		break;
436 	case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
437 		pr_cont("AV1_FILM_GRAIN");
438 		break;
439 	case V4L2_CTRL_TYPE_RECT:
440 		pr_cont("(%d,%d)/%ux%u",
441 			ptr.p_rect->left, ptr.p_rect->top,
442 			ptr.p_rect->width, ptr.p_rect->height);
443 		break;
444 	default:
445 		pr_cont("unknown type %d", ctrl->type);
446 		break;
447 	}
448 }
449 EXPORT_SYMBOL(v4l2_ctrl_type_op_log);
450 
451 /*
452  * Round towards the closest legal value. Be careful when we are
453  * close to the maximum range of the control type to prevent
454  * wrap-arounds.
455  */
456 #define ROUND_TO_RANGE(val, offset_type, ctrl)			\
457 ({								\
458 	offset_type offset;					\
459 	if ((ctrl)->maximum >= 0 &&				\
460 	    val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))	\
461 		val = (ctrl)->maximum;				\
462 	else							\
463 		val += (s32)((ctrl)->step / 2);			\
464 	val = clamp_t(typeof(val), val,				\
465 		      (ctrl)->minimum, (ctrl)->maximum);	\
466 	offset = (val) - (ctrl)->minimum;			\
467 	offset = (ctrl)->step * (offset / (u32)(ctrl)->step);	\
468 	val = (ctrl)->minimum + offset;				\
469 	0;							\
470 })
471 
472 /* Validate a new control */
473 
474 #define zero_padding(s) \
475 	memset(&(s).padding, 0, sizeof((s).padding))
476 #define zero_reserved(s) \
477 	memset(&(s).reserved, 0, sizeof((s).reserved))
478 
479 static int
validate_vp9_lf_params(struct v4l2_vp9_loop_filter * lf)480 validate_vp9_lf_params(struct v4l2_vp9_loop_filter *lf)
481 {
482 	unsigned int i;
483 
484 	if (lf->flags & ~(V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED |
485 			  V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE))
486 		return -EINVAL;
487 
488 	/* That all values are in the accepted range. */
489 	if (lf->level > GENMASK(5, 0))
490 		return -EINVAL;
491 
492 	if (lf->sharpness > GENMASK(2, 0))
493 		return -EINVAL;
494 
495 	for (i = 0; i < ARRAY_SIZE(lf->ref_deltas); i++)
496 		if (lf->ref_deltas[i] < -63 || lf->ref_deltas[i] > 63)
497 			return -EINVAL;
498 
499 	for (i = 0; i < ARRAY_SIZE(lf->mode_deltas); i++)
500 		if (lf->mode_deltas[i] < -63 || lf->mode_deltas[i] > 63)
501 			return -EINVAL;
502 
503 	zero_reserved(*lf);
504 	return 0;
505 }
506 
507 static int
validate_vp9_quant_params(struct v4l2_vp9_quantization * quant)508 validate_vp9_quant_params(struct v4l2_vp9_quantization *quant)
509 {
510 	if (quant->delta_q_y_dc < -15 || quant->delta_q_y_dc > 15 ||
511 	    quant->delta_q_uv_dc < -15 || quant->delta_q_uv_dc > 15 ||
512 	    quant->delta_q_uv_ac < -15 || quant->delta_q_uv_ac > 15)
513 		return -EINVAL;
514 
515 	zero_reserved(*quant);
516 	return 0;
517 }
518 
519 static int
validate_vp9_seg_params(struct v4l2_vp9_segmentation * seg)520 validate_vp9_seg_params(struct v4l2_vp9_segmentation *seg)
521 {
522 	unsigned int i, j;
523 
524 	if (seg->flags & ~(V4L2_VP9_SEGMENTATION_FLAG_ENABLED |
525 			   V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP |
526 			   V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE |
527 			   V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA |
528 			   V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE))
529 		return -EINVAL;
530 
531 	for (i = 0; i < ARRAY_SIZE(seg->feature_enabled); i++) {
532 		if (seg->feature_enabled[i] &
533 		    ~V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK)
534 			return -EINVAL;
535 	}
536 
537 	for (i = 0; i < ARRAY_SIZE(seg->feature_data); i++) {
538 		static const int range[] = { 255, 63, 3, 0 };
539 
540 		for (j = 0; j < ARRAY_SIZE(seg->feature_data[j]); j++) {
541 			if (seg->feature_data[i][j] < -range[j] ||
542 			    seg->feature_data[i][j] > range[j])
543 				return -EINVAL;
544 		}
545 	}
546 
547 	zero_reserved(*seg);
548 	return 0;
549 }
550 
551 static int
validate_vp9_compressed_hdr(struct v4l2_ctrl_vp9_compressed_hdr * hdr)552 validate_vp9_compressed_hdr(struct v4l2_ctrl_vp9_compressed_hdr *hdr)
553 {
554 	if (hdr->tx_mode > V4L2_VP9_TX_MODE_SELECT)
555 		return -EINVAL;
556 
557 	return 0;
558 }
559 
560 static int
validate_vp9_frame(struct v4l2_ctrl_vp9_frame * frame)561 validate_vp9_frame(struct v4l2_ctrl_vp9_frame *frame)
562 {
563 	int ret;
564 
565 	/* Make sure we're not passed invalid flags. */
566 	if (frame->flags & ~(V4L2_VP9_FRAME_FLAG_KEY_FRAME |
567 		  V4L2_VP9_FRAME_FLAG_SHOW_FRAME |
568 		  V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT |
569 		  V4L2_VP9_FRAME_FLAG_INTRA_ONLY |
570 		  V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV |
571 		  V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX |
572 		  V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE |
573 		  V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
574 		  V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING |
575 		  V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING))
576 		return -EINVAL;
577 
578 	if (frame->flags & V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT &&
579 	    frame->flags & V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX)
580 		return -EINVAL;
581 
582 	if (frame->profile > V4L2_VP9_PROFILE_MAX)
583 		return -EINVAL;
584 
585 	if (frame->reset_frame_context > V4L2_VP9_RESET_FRAME_CTX_ALL)
586 		return -EINVAL;
587 
588 	if (frame->frame_context_idx >= V4L2_VP9_NUM_FRAME_CTX)
589 		return -EINVAL;
590 
591 	/*
592 	 * Profiles 0 and 1 only support 8-bit depth, profiles 2 and 3 only 10
593 	 * and 12 bit depths.
594 	 */
595 	if ((frame->profile < 2 && frame->bit_depth != 8) ||
596 	    (frame->profile >= 2 &&
597 	     (frame->bit_depth != 10 && frame->bit_depth != 12)))
598 		return -EINVAL;
599 
600 	/* Profile 0 and 2 only accept YUV 4:2:0. */
601 	if ((frame->profile == 0 || frame->profile == 2) &&
602 	    (!(frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) ||
603 	     !(frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
604 		return -EINVAL;
605 
606 	/* Profile 1 and 3 only accept YUV 4:2:2, 4:4:0 and 4:4:4. */
607 	if ((frame->profile == 1 || frame->profile == 3) &&
608 	    ((frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) &&
609 	     (frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
610 		return -EINVAL;
611 
612 	if (frame->interpolation_filter > V4L2_VP9_INTERP_FILTER_SWITCHABLE)
613 		return -EINVAL;
614 
615 	/*
616 	 * According to the spec, tile_cols_log2 shall be less than or equal
617 	 * to 6.
618 	 */
619 	if (frame->tile_cols_log2 > 6)
620 		return -EINVAL;
621 
622 	if (frame->reference_mode > V4L2_VP9_REFERENCE_MODE_SELECT)
623 		return -EINVAL;
624 
625 	ret = validate_vp9_lf_params(&frame->lf);
626 	if (ret)
627 		return ret;
628 
629 	ret = validate_vp9_quant_params(&frame->quant);
630 	if (ret)
631 		return ret;
632 
633 	ret = validate_vp9_seg_params(&frame->seg);
634 	if (ret)
635 		return ret;
636 
637 	zero_reserved(*frame);
638 	return 0;
639 }
640 
validate_av1_quantization(struct v4l2_av1_quantization * q)641 static int validate_av1_quantization(struct v4l2_av1_quantization *q)
642 {
643 	if (q->flags > GENMASK(2, 0))
644 		return -EINVAL;
645 
646 	if (q->delta_q_y_dc < -64 || q->delta_q_y_dc > 63 ||
647 	    q->delta_q_u_dc < -64 || q->delta_q_u_dc > 63 ||
648 	    q->delta_q_v_dc < -64 || q->delta_q_v_dc > 63 ||
649 	    q->delta_q_u_ac < -64 || q->delta_q_u_ac > 63 ||
650 	    q->delta_q_v_ac < -64 || q->delta_q_v_ac > 63 ||
651 	    q->delta_q_res > GENMASK(1, 0))
652 		return -EINVAL;
653 
654 	if (q->qm_y > GENMASK(3, 0) ||
655 	    q->qm_u > GENMASK(3, 0) ||
656 	    q->qm_v > GENMASK(3, 0))
657 		return -EINVAL;
658 
659 	return 0;
660 }
661 
validate_av1_segmentation(struct v4l2_av1_segmentation * s)662 static int validate_av1_segmentation(struct v4l2_av1_segmentation *s)
663 {
664 	u32 i;
665 	u32 j;
666 
667 	if (s->flags > GENMASK(4, 0))
668 		return -EINVAL;
669 
670 	for (i = 0; i < ARRAY_SIZE(s->feature_data); i++) {
671 		static const int segmentation_feature_signed[] = { 1, 1, 1, 1, 1, 0, 0, 0 };
672 		static const int segmentation_feature_max[] = { 255, 63, 63, 63, 63, 7, 0, 0};
673 
674 		for (j = 0; j < ARRAY_SIZE(s->feature_data[j]); j++) {
675 			s32 limit = segmentation_feature_max[j];
676 
677 			if (segmentation_feature_signed[j]) {
678 				if (s->feature_data[i][j] < -limit ||
679 				    s->feature_data[i][j] > limit)
680 					return -EINVAL;
681 			} else {
682 				if (s->feature_data[i][j] < 0 || s->feature_data[i][j] > limit)
683 					return -EINVAL;
684 			}
685 		}
686 	}
687 
688 	return 0;
689 }
690 
validate_av1_loop_filter(struct v4l2_av1_loop_filter * lf)691 static int validate_av1_loop_filter(struct v4l2_av1_loop_filter *lf)
692 {
693 	u32 i;
694 
695 	if (lf->flags > GENMASK(3, 0))
696 		return -EINVAL;
697 
698 	for (i = 0; i < ARRAY_SIZE(lf->level); i++) {
699 		if (lf->level[i] > GENMASK(5, 0))
700 			return -EINVAL;
701 	}
702 
703 	if (lf->sharpness > GENMASK(2, 0))
704 		return -EINVAL;
705 
706 	for (i = 0; i < ARRAY_SIZE(lf->ref_deltas); i++) {
707 		if (lf->ref_deltas[i] < -64 || lf->ref_deltas[i] > 63)
708 			return -EINVAL;
709 	}
710 
711 	for (i = 0; i < ARRAY_SIZE(lf->mode_deltas); i++) {
712 		if (lf->mode_deltas[i] < -64 || lf->mode_deltas[i] > 63)
713 			return -EINVAL;
714 	}
715 
716 	return 0;
717 }
718 
validate_av1_cdef(struct v4l2_av1_cdef * cdef)719 static int validate_av1_cdef(struct v4l2_av1_cdef *cdef)
720 {
721 	u32 i;
722 
723 	if (cdef->damping_minus_3 > GENMASK(1, 0) ||
724 	    cdef->bits > GENMASK(1, 0))
725 		return -EINVAL;
726 
727 	for (i = 0; i < 1 << cdef->bits; i++) {
728 		if (cdef->y_pri_strength[i] > GENMASK(3, 0) ||
729 		    cdef->y_sec_strength[i] > 4 ||
730 		    cdef->uv_pri_strength[i] > GENMASK(3, 0) ||
731 		    cdef->uv_sec_strength[i] > 4)
732 			return -EINVAL;
733 	}
734 
735 	return 0;
736 }
737 
validate_av1_loop_restauration(struct v4l2_av1_loop_restoration * lr)738 static int validate_av1_loop_restauration(struct v4l2_av1_loop_restoration *lr)
739 {
740 	if (lr->lr_unit_shift > 3 || lr->lr_uv_shift > 1)
741 		return -EINVAL;
742 
743 	return 0;
744 }
745 
validate_av1_film_grain(struct v4l2_ctrl_av1_film_grain * fg)746 static int validate_av1_film_grain(struct v4l2_ctrl_av1_film_grain *fg)
747 {
748 	u32 i;
749 
750 	if (fg->flags > GENMASK(4, 0))
751 		return -EINVAL;
752 
753 	if (fg->film_grain_params_ref_idx > GENMASK(2, 0) ||
754 	    fg->num_y_points > 14 ||
755 	    fg->num_cb_points > 10 ||
756 	    fg->num_cr_points > GENMASK(3, 0) ||
757 	    fg->grain_scaling_minus_8 > GENMASK(1, 0) ||
758 	    fg->ar_coeff_lag > GENMASK(1, 0) ||
759 	    fg->ar_coeff_shift_minus_6 > GENMASK(1, 0) ||
760 	    fg->grain_scale_shift > GENMASK(1, 0))
761 		return -EINVAL;
762 
763 	if (!(fg->flags & V4L2_AV1_FILM_GRAIN_FLAG_APPLY_GRAIN))
764 		return 0;
765 
766 	for (i = 1; i < fg->num_y_points; i++)
767 		if (fg->point_y_value[i] <= fg->point_y_value[i - 1])
768 			return -EINVAL;
769 
770 	for (i = 1; i < fg->num_cb_points; i++)
771 		if (fg->point_cb_value[i] <= fg->point_cb_value[i - 1])
772 			return -EINVAL;
773 
774 	for (i = 1; i < fg->num_cr_points; i++)
775 		if (fg->point_cr_value[i] <= fg->point_cr_value[i - 1])
776 			return -EINVAL;
777 
778 	return 0;
779 }
780 
validate_av1_frame(struct v4l2_ctrl_av1_frame * f)781 static int validate_av1_frame(struct v4l2_ctrl_av1_frame *f)
782 {
783 	int ret = 0;
784 
785 	ret = validate_av1_quantization(&f->quantization);
786 	if (ret)
787 		return ret;
788 	ret = validate_av1_segmentation(&f->segmentation);
789 	if (ret)
790 		return ret;
791 	ret = validate_av1_loop_filter(&f->loop_filter);
792 	if (ret)
793 		return ret;
794 	ret = validate_av1_cdef(&f->cdef);
795 	if (ret)
796 		return ret;
797 	ret = validate_av1_loop_restauration(&f->loop_restoration);
798 	if (ret)
799 		return ret;
800 
801 	if (f->flags &
802 	~(V4L2_AV1_FRAME_FLAG_SHOW_FRAME |
803 	  V4L2_AV1_FRAME_FLAG_SHOWABLE_FRAME |
804 	  V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE |
805 	  V4L2_AV1_FRAME_FLAG_DISABLE_CDF_UPDATE |
806 	  V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS |
807 	  V4L2_AV1_FRAME_FLAG_FORCE_INTEGER_MV |
808 	  V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC |
809 	  V4L2_AV1_FRAME_FLAG_USE_SUPERRES |
810 	  V4L2_AV1_FRAME_FLAG_ALLOW_HIGH_PRECISION_MV |
811 	  V4L2_AV1_FRAME_FLAG_IS_MOTION_MODE_SWITCHABLE |
812 	  V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS |
813 	  V4L2_AV1_FRAME_FLAG_DISABLE_FRAME_END_UPDATE_CDF |
814 	  V4L2_AV1_FRAME_FLAG_ALLOW_WARPED_MOTION |
815 	  V4L2_AV1_FRAME_FLAG_REFERENCE_SELECT |
816 	  V4L2_AV1_FRAME_FLAG_REDUCED_TX_SET |
817 	  V4L2_AV1_FRAME_FLAG_SKIP_MODE_ALLOWED |
818 	  V4L2_AV1_FRAME_FLAG_SKIP_MODE_PRESENT |
819 	  V4L2_AV1_FRAME_FLAG_FRAME_SIZE_OVERRIDE |
820 	  V4L2_AV1_FRAME_FLAG_BUFFER_REMOVAL_TIME_PRESENT |
821 	  V4L2_AV1_FRAME_FLAG_FRAME_REFS_SHORT_SIGNALING))
822 		return -EINVAL;
823 
824 	if (f->superres_denom > GENMASK(2, 0) + 9)
825 		return -EINVAL;
826 
827 	return 0;
828 }
829 
validate_av1_sequence(struct v4l2_ctrl_av1_sequence * s)830 static int validate_av1_sequence(struct v4l2_ctrl_av1_sequence *s)
831 {
832 	if (s->flags &
833 	~(V4L2_AV1_SEQUENCE_FLAG_STILL_PICTURE |
834 	 V4L2_AV1_SEQUENCE_FLAG_USE_128X128_SUPERBLOCK |
835 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_FILTER_INTRA |
836 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTRA_EDGE_FILTER |
837 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTERINTRA_COMPOUND |
838 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_MASKED_COMPOUND |
839 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_WARPED_MOTION |
840 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_DUAL_FILTER |
841 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_ORDER_HINT |
842 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_JNT_COMP |
843 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_REF_FRAME_MVS |
844 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_SUPERRES |
845 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_CDEF |
846 	 V4L2_AV1_SEQUENCE_FLAG_ENABLE_RESTORATION |
847 	 V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME |
848 	 V4L2_AV1_SEQUENCE_FLAG_COLOR_RANGE |
849 	 V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X |
850 	 V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y |
851 	 V4L2_AV1_SEQUENCE_FLAG_FILM_GRAIN_PARAMS_PRESENT |
852 	 V4L2_AV1_SEQUENCE_FLAG_SEPARATE_UV_DELTA_Q))
853 		return -EINVAL;
854 
855 	if (s->seq_profile == 1 && s->flags & V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME)
856 		return -EINVAL;
857 
858 	/* reserved */
859 	if (s->seq_profile > 2)
860 		return -EINVAL;
861 
862 	/* TODO: PROFILES */
863 	return 0;
864 }
865 
866 /*
867  * Compound controls validation requires setting unused fields/flags to zero
868  * in order to properly detect unchanged controls with v4l2_ctrl_type_op_equal's
869  * memcmp.
870  */
std_validate_compound(const struct v4l2_ctrl * ctrl,u32 idx,union v4l2_ctrl_ptr ptr)871 static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
872 				 union v4l2_ctrl_ptr ptr)
873 {
874 	struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
875 	struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
876 	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
877 	struct v4l2_ctrl_fwht_params *p_fwht_params;
878 	struct v4l2_ctrl_h264_sps *p_h264_sps;
879 	struct v4l2_ctrl_h264_pps *p_h264_pps;
880 	struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
881 	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
882 	struct v4l2_ctrl_h264_decode_params *p_h264_dec_params;
883 	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
884 	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
885 	struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
886 	struct v4l2_ctrl_hevc_decode_params *p_hevc_decode_params;
887 	struct v4l2_area *area;
888 	struct v4l2_rect *rect;
889 	void *p = ptr.p + idx * ctrl->elem_size;
890 	unsigned int i;
891 
892 	switch ((u32)ctrl->type) {
893 	case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
894 		p_mpeg2_sequence = p;
895 
896 		switch (p_mpeg2_sequence->chroma_format) {
897 		case 1: /* 4:2:0 */
898 		case 2: /* 4:2:2 */
899 		case 3: /* 4:4:4 */
900 			break;
901 		default:
902 			return -EINVAL;
903 		}
904 		break;
905 
906 	case V4L2_CTRL_TYPE_MPEG2_PICTURE:
907 		p_mpeg2_picture = p;
908 
909 		switch (p_mpeg2_picture->intra_dc_precision) {
910 		case 0: /* 8 bits */
911 		case 1: /* 9 bits */
912 		case 2: /* 10 bits */
913 		case 3: /* 11 bits */
914 			break;
915 		default:
916 			return -EINVAL;
917 		}
918 
919 		switch (p_mpeg2_picture->picture_structure) {
920 		case V4L2_MPEG2_PIC_TOP_FIELD:
921 		case V4L2_MPEG2_PIC_BOTTOM_FIELD:
922 		case V4L2_MPEG2_PIC_FRAME:
923 			break;
924 		default:
925 			return -EINVAL;
926 		}
927 
928 		switch (p_mpeg2_picture->picture_coding_type) {
929 		case V4L2_MPEG2_PIC_CODING_TYPE_I:
930 		case V4L2_MPEG2_PIC_CODING_TYPE_P:
931 		case V4L2_MPEG2_PIC_CODING_TYPE_B:
932 			break;
933 		default:
934 			return -EINVAL;
935 		}
936 		zero_reserved(*p_mpeg2_picture);
937 		break;
938 
939 	case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
940 		break;
941 
942 	case V4L2_CTRL_TYPE_FWHT_PARAMS:
943 		p_fwht_params = p;
944 		if (p_fwht_params->version < V4L2_FWHT_VERSION)
945 			return -EINVAL;
946 		if (!p_fwht_params->width || !p_fwht_params->height)
947 			return -EINVAL;
948 		break;
949 
950 	case V4L2_CTRL_TYPE_H264_SPS:
951 		p_h264_sps = p;
952 
953 		/* Some syntax elements are only conditionally valid */
954 		if (p_h264_sps->pic_order_cnt_type != 0) {
955 			p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 = 0;
956 		} else if (p_h264_sps->pic_order_cnt_type != 1) {
957 			p_h264_sps->num_ref_frames_in_pic_order_cnt_cycle = 0;
958 			p_h264_sps->offset_for_non_ref_pic = 0;
959 			p_h264_sps->offset_for_top_to_bottom_field = 0;
960 			memset(&p_h264_sps->offset_for_ref_frame, 0,
961 			       sizeof(p_h264_sps->offset_for_ref_frame));
962 		}
963 
964 		if (!V4L2_H264_SPS_HAS_CHROMA_FORMAT(p_h264_sps)) {
965 			p_h264_sps->chroma_format_idc = 1;
966 			p_h264_sps->bit_depth_luma_minus8 = 0;
967 			p_h264_sps->bit_depth_chroma_minus8 = 0;
968 
969 			p_h264_sps->flags &=
970 				~V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS;
971 		}
972 
973 		if (p_h264_sps->chroma_format_idc < 3)
974 			p_h264_sps->flags &=
975 				~V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE;
976 
977 		if (p_h264_sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY)
978 			p_h264_sps->flags &=
979 				~V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD;
980 
981 		/*
982 		 * Chroma 4:2:2 format require at least High 4:2:2 profile.
983 		 *
984 		 * The H264 specification and well-known parser implementations
985 		 * use profile-idc values directly, as that is clearer and
986 		 * less ambiguous. We do the same here.
987 		 */
988 		if (p_h264_sps->profile_idc < 122 &&
989 		    p_h264_sps->chroma_format_idc > 1)
990 			return -EINVAL;
991 		/* Chroma 4:4:4 format require at least High 4:2:2 profile */
992 		if (p_h264_sps->profile_idc < 244 &&
993 		    p_h264_sps->chroma_format_idc > 2)
994 			return -EINVAL;
995 		if (p_h264_sps->chroma_format_idc > 3)
996 			return -EINVAL;
997 
998 		if (p_h264_sps->bit_depth_luma_minus8 > 6)
999 			return -EINVAL;
1000 		if (p_h264_sps->bit_depth_chroma_minus8 > 6)
1001 			return -EINVAL;
1002 		if (p_h264_sps->log2_max_frame_num_minus4 > 12)
1003 			return -EINVAL;
1004 		if (p_h264_sps->pic_order_cnt_type > 2)
1005 			return -EINVAL;
1006 		if (p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 > 12)
1007 			return -EINVAL;
1008 		if (p_h264_sps->max_num_ref_frames > V4L2_H264_REF_LIST_LEN)
1009 			return -EINVAL;
1010 		break;
1011 
1012 	case V4L2_CTRL_TYPE_H264_PPS:
1013 		p_h264_pps = p;
1014 
1015 		if (p_h264_pps->num_slice_groups_minus1 > 7)
1016 			return -EINVAL;
1017 		if (p_h264_pps->num_ref_idx_l0_default_active_minus1 >
1018 		    (V4L2_H264_REF_LIST_LEN - 1))
1019 			return -EINVAL;
1020 		if (p_h264_pps->num_ref_idx_l1_default_active_minus1 >
1021 		    (V4L2_H264_REF_LIST_LEN - 1))
1022 			return -EINVAL;
1023 		if (p_h264_pps->weighted_bipred_idc > 2)
1024 			return -EINVAL;
1025 		/*
1026 		 * pic_init_qp_minus26 shall be in the range of
1027 		 * -(26 + QpBdOffset_y) to +25, inclusive,
1028 		 *  where QpBdOffset_y is 6 * bit_depth_luma_minus8
1029 		 */
1030 		if (p_h264_pps->pic_init_qp_minus26 < -62 ||
1031 		    p_h264_pps->pic_init_qp_minus26 > 25)
1032 			return -EINVAL;
1033 		if (p_h264_pps->pic_init_qs_minus26 < -26 ||
1034 		    p_h264_pps->pic_init_qs_minus26 > 25)
1035 			return -EINVAL;
1036 		if (p_h264_pps->chroma_qp_index_offset < -12 ||
1037 		    p_h264_pps->chroma_qp_index_offset > 12)
1038 			return -EINVAL;
1039 		if (p_h264_pps->second_chroma_qp_index_offset < -12 ||
1040 		    p_h264_pps->second_chroma_qp_index_offset > 12)
1041 			return -EINVAL;
1042 		break;
1043 
1044 	case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1045 		break;
1046 
1047 	case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
1048 		p_h264_pred_weights = p;
1049 
1050 		if (p_h264_pred_weights->luma_log2_weight_denom > 7)
1051 			return -EINVAL;
1052 		if (p_h264_pred_weights->chroma_log2_weight_denom > 7)
1053 			return -EINVAL;
1054 		break;
1055 
1056 	case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1057 		p_h264_slice_params = p;
1058 
1059 		if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
1060 			p_h264_slice_params->flags &=
1061 				~V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED;
1062 
1063 		if (p_h264_slice_params->colour_plane_id > 2)
1064 			return -EINVAL;
1065 		if (p_h264_slice_params->cabac_init_idc > 2)
1066 			return -EINVAL;
1067 		if (p_h264_slice_params->disable_deblocking_filter_idc > 2)
1068 			return -EINVAL;
1069 		if (p_h264_slice_params->slice_alpha_c0_offset_div2 < -6 ||
1070 		    p_h264_slice_params->slice_alpha_c0_offset_div2 > 6)
1071 			return -EINVAL;
1072 		if (p_h264_slice_params->slice_beta_offset_div2 < -6 ||
1073 		    p_h264_slice_params->slice_beta_offset_div2 > 6)
1074 			return -EINVAL;
1075 
1076 		if (p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_I ||
1077 		    p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_SI)
1078 			p_h264_slice_params->num_ref_idx_l0_active_minus1 = 0;
1079 		if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
1080 			p_h264_slice_params->num_ref_idx_l1_active_minus1 = 0;
1081 
1082 		if (p_h264_slice_params->num_ref_idx_l0_active_minus1 >
1083 		    (V4L2_H264_REF_LIST_LEN - 1))
1084 			return -EINVAL;
1085 		if (p_h264_slice_params->num_ref_idx_l1_active_minus1 >
1086 		    (V4L2_H264_REF_LIST_LEN - 1))
1087 			return -EINVAL;
1088 		zero_reserved(*p_h264_slice_params);
1089 		break;
1090 
1091 	case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1092 		p_h264_dec_params = p;
1093 
1094 		if (p_h264_dec_params->nal_ref_idc > 3)
1095 			return -EINVAL;
1096 		for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
1097 			struct v4l2_h264_dpb_entry *dpb_entry =
1098 				&p_h264_dec_params->dpb[i];
1099 
1100 			zero_reserved(*dpb_entry);
1101 		}
1102 		zero_reserved(*p_h264_dec_params);
1103 		break;
1104 
1105 	case V4L2_CTRL_TYPE_VP8_FRAME:
1106 		p_vp8_frame = p;
1107 
1108 		switch (p_vp8_frame->num_dct_parts) {
1109 		case 1:
1110 		case 2:
1111 		case 4:
1112 		case 8:
1113 			break;
1114 		default:
1115 			return -EINVAL;
1116 		}
1117 		zero_padding(p_vp8_frame->segment);
1118 		zero_padding(p_vp8_frame->lf);
1119 		zero_padding(p_vp8_frame->quant);
1120 		zero_padding(p_vp8_frame->entropy);
1121 		zero_padding(p_vp8_frame->coder_state);
1122 		break;
1123 
1124 	case V4L2_CTRL_TYPE_HEVC_SPS:
1125 		p_hevc_sps = p;
1126 
1127 		if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
1128 			p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
1129 			p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
1130 			p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
1131 			p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
1132 		}
1133 
1134 		if (!(p_hevc_sps->flags &
1135 		      V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
1136 			p_hevc_sps->num_long_term_ref_pics_sps = 0;
1137 		break;
1138 
1139 	case V4L2_CTRL_TYPE_HEVC_PPS:
1140 		p_hevc_pps = p;
1141 
1142 		if (!(p_hevc_pps->flags &
1143 		      V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
1144 			p_hevc_pps->diff_cu_qp_delta_depth = 0;
1145 
1146 		if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
1147 			p_hevc_pps->num_tile_columns_minus1 = 0;
1148 			p_hevc_pps->num_tile_rows_minus1 = 0;
1149 			memset(&p_hevc_pps->column_width_minus1, 0,
1150 			       sizeof(p_hevc_pps->column_width_minus1));
1151 			memset(&p_hevc_pps->row_height_minus1, 0,
1152 			       sizeof(p_hevc_pps->row_height_minus1));
1153 
1154 			p_hevc_pps->flags &=
1155 				~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
1156 		}
1157 
1158 		if (p_hevc_pps->flags &
1159 		    V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
1160 			p_hevc_pps->pps_beta_offset_div2 = 0;
1161 			p_hevc_pps->pps_tc_offset_div2 = 0;
1162 		}
1163 		break;
1164 
1165 	case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
1166 		p_hevc_decode_params = p;
1167 
1168 		if (p_hevc_decode_params->num_active_dpb_entries >
1169 		    V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
1170 			return -EINVAL;
1171 		break;
1172 
1173 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
1174 		break;
1175 
1176 	case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
1177 		break;
1178 
1179 	case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
1180 		p_hdr10_mastering = p;
1181 
1182 		for (i = 0; i < 3; ++i) {
1183 			if (p_hdr10_mastering->display_primaries_x[i] <
1184 				V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
1185 			    p_hdr10_mastering->display_primaries_x[i] >
1186 				V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
1187 			    p_hdr10_mastering->display_primaries_y[i] <
1188 				V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
1189 			    p_hdr10_mastering->display_primaries_y[i] >
1190 				V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
1191 				return -EINVAL;
1192 		}
1193 
1194 		if (p_hdr10_mastering->white_point_x <
1195 			V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
1196 		    p_hdr10_mastering->white_point_x >
1197 			V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
1198 		    p_hdr10_mastering->white_point_y <
1199 			V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
1200 		    p_hdr10_mastering->white_point_y >
1201 			V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
1202 			return -EINVAL;
1203 
1204 		if (p_hdr10_mastering->max_display_mastering_luminance <
1205 			V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
1206 		    p_hdr10_mastering->max_display_mastering_luminance >
1207 			V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
1208 		    p_hdr10_mastering->min_display_mastering_luminance <
1209 			V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
1210 		    p_hdr10_mastering->min_display_mastering_luminance >
1211 			V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
1212 			return -EINVAL;
1213 
1214 		/* The following restriction comes from ITU-T Rec. H.265 spec */
1215 		if (p_hdr10_mastering->max_display_mastering_luminance ==
1216 			V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
1217 		    p_hdr10_mastering->min_display_mastering_luminance ==
1218 			V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
1219 			return -EINVAL;
1220 
1221 		break;
1222 
1223 	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
1224 		break;
1225 
1226 	case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
1227 		return validate_vp9_compressed_hdr(p);
1228 
1229 	case V4L2_CTRL_TYPE_VP9_FRAME:
1230 		return validate_vp9_frame(p);
1231 	case V4L2_CTRL_TYPE_AV1_FRAME:
1232 		return validate_av1_frame(p);
1233 	case V4L2_CTRL_TYPE_AV1_SEQUENCE:
1234 		return validate_av1_sequence(p);
1235 	case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
1236 		break;
1237 	case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
1238 		return validate_av1_film_grain(p);
1239 
1240 	case V4L2_CTRL_TYPE_AREA:
1241 		area = p;
1242 		if (!area->width || !area->height)
1243 			return -EINVAL;
1244 		break;
1245 
1246 	case V4L2_CTRL_TYPE_RECT:
1247 		rect = p;
1248 		if (!rect->width || !rect->height)
1249 			return -EINVAL;
1250 		break;
1251 
1252 	default:
1253 		return -EINVAL;
1254 	}
1255 
1256 	return 0;
1257 }
1258 
std_validate_elem(const struct v4l2_ctrl * ctrl,u32 idx,union v4l2_ctrl_ptr ptr)1259 static int std_validate_elem(const struct v4l2_ctrl *ctrl, u32 idx,
1260 			     union v4l2_ctrl_ptr ptr)
1261 {
1262 	size_t len;
1263 	u64 offset;
1264 	s64 val;
1265 
1266 	switch ((u32)ctrl->type) {
1267 	case V4L2_CTRL_TYPE_INTEGER:
1268 		return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
1269 	case V4L2_CTRL_TYPE_INTEGER64:
1270 		/*
1271 		 * We can't use the ROUND_TO_RANGE define here due to
1272 		 * the u64 divide that needs special care.
1273 		 */
1274 		val = ptr.p_s64[idx];
1275 		if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
1276 			val = ctrl->maximum;
1277 		else
1278 			val += (s64)(ctrl->step / 2);
1279 		val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
1280 		offset = val - ctrl->minimum;
1281 		do_div(offset, ctrl->step);
1282 		ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
1283 		return 0;
1284 	case V4L2_CTRL_TYPE_U8:
1285 		return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
1286 	case V4L2_CTRL_TYPE_U16:
1287 		return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
1288 	case V4L2_CTRL_TYPE_U32:
1289 		return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
1290 
1291 	case V4L2_CTRL_TYPE_BOOLEAN:
1292 		ptr.p_s32[idx] = !!ptr.p_s32[idx];
1293 		return 0;
1294 
1295 	case V4L2_CTRL_TYPE_MENU:
1296 	case V4L2_CTRL_TYPE_INTEGER_MENU:
1297 		if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
1298 			return -ERANGE;
1299 		if (ptr.p_s32[idx] < BITS_PER_LONG_LONG &&
1300 		    (ctrl->menu_skip_mask & BIT_ULL(ptr.p_s32[idx])))
1301 			return -EINVAL;
1302 		if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
1303 		    ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
1304 			return -EINVAL;
1305 		return 0;
1306 
1307 	case V4L2_CTRL_TYPE_BITMASK:
1308 		ptr.p_s32[idx] &= ctrl->maximum;
1309 		return 0;
1310 
1311 	case V4L2_CTRL_TYPE_BUTTON:
1312 	case V4L2_CTRL_TYPE_CTRL_CLASS:
1313 		ptr.p_s32[idx] = 0;
1314 		return 0;
1315 
1316 	case V4L2_CTRL_TYPE_STRING:
1317 		idx *= ctrl->elem_size;
1318 		len = strlen(ptr.p_char + idx);
1319 		if (len < ctrl->minimum)
1320 			return -ERANGE;
1321 		if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
1322 			return -ERANGE;
1323 		return 0;
1324 
1325 	default:
1326 		return std_validate_compound(ctrl, idx, ptr);
1327 	}
1328 }
1329 
v4l2_ctrl_type_op_validate(const struct v4l2_ctrl * ctrl,union v4l2_ctrl_ptr ptr)1330 int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl,
1331 			       union v4l2_ctrl_ptr ptr)
1332 {
1333 	unsigned int i;
1334 	int ret = 0;
1335 
1336 	switch ((u32)ctrl->type) {
1337 	case V4L2_CTRL_TYPE_U8:
1338 		if (ctrl->maximum == 0xff && ctrl->minimum == 0 && ctrl->step == 1)
1339 			return 0;
1340 		break;
1341 	case V4L2_CTRL_TYPE_U16:
1342 		if (ctrl->maximum == 0xffff && ctrl->minimum == 0 && ctrl->step == 1)
1343 			return 0;
1344 		break;
1345 	case V4L2_CTRL_TYPE_U32:
1346 		if (ctrl->maximum == 0xffffffff && ctrl->minimum == 0 && ctrl->step == 1)
1347 			return 0;
1348 		break;
1349 
1350 	case V4L2_CTRL_TYPE_BUTTON:
1351 	case V4L2_CTRL_TYPE_CTRL_CLASS:
1352 		memset(ptr.p_s32, 0, ctrl->new_elems * sizeof(s32));
1353 		return 0;
1354 	}
1355 
1356 	for (i = 0; !ret && i < ctrl->new_elems; i++)
1357 		ret = std_validate_elem(ctrl, i, ptr);
1358 	return ret;
1359 }
1360 EXPORT_SYMBOL(v4l2_ctrl_type_op_validate);
1361 
1362 static const struct v4l2_ctrl_type_ops std_type_ops = {
1363 	.equal = v4l2_ctrl_type_op_equal,
1364 	.init = v4l2_ctrl_type_op_init,
1365 	.minimum = v4l2_ctrl_type_op_minimum,
1366 	.maximum = v4l2_ctrl_type_op_maximum,
1367 	.log = v4l2_ctrl_type_op_log,
1368 	.validate = v4l2_ctrl_type_op_validate,
1369 };
1370 
v4l2_ctrl_notify(struct v4l2_ctrl * ctrl,v4l2_ctrl_notify_fnc notify,void * priv)1371 void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
1372 {
1373 	if (!ctrl)
1374 		return;
1375 	if (!notify) {
1376 		ctrl->call_notify = 0;
1377 		return;
1378 	}
1379 	if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
1380 		return;
1381 	ctrl->handler->notify = notify;
1382 	ctrl->handler->notify_priv = priv;
1383 	ctrl->call_notify = 1;
1384 }
1385 EXPORT_SYMBOL(v4l2_ctrl_notify);
1386 
1387 /* Copy the one value to another. */
ptr_to_ptr(struct v4l2_ctrl * ctrl,union v4l2_ctrl_ptr from,union v4l2_ctrl_ptr to,unsigned int elems)1388 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
1389 		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to,
1390 		       unsigned int elems)
1391 {
1392 	if (ctrl == NULL)
1393 		return;
1394 	memcpy(to.p, from.p_const, elems * ctrl->elem_size);
1395 }
1396 
1397 /* Copy the new value to the current value. */
new_to_cur(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl,u32 ch_flags)1398 void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
1399 {
1400 	bool changed;
1401 
1402 	if (ctrl == NULL)
1403 		return;
1404 
1405 	/* has_changed is set by cluster_changed */
1406 	changed = ctrl->has_changed;
1407 	if (changed) {
1408 		if (ctrl->is_dyn_array)
1409 			ctrl->elems = ctrl->new_elems;
1410 		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur, ctrl->elems);
1411 	}
1412 
1413 	if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
1414 		/* Note: CH_FLAGS is only set for auto clusters. */
1415 		ctrl->flags &=
1416 			~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
1417 		if (!is_cur_manual(ctrl->cluster[0])) {
1418 			ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1419 			if (ctrl->cluster[0]->has_volatiles)
1420 				ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
1421 		}
1422 		fh = NULL;
1423 	}
1424 	if (changed || ch_flags) {
1425 		/* If a control was changed that was not one of the controls
1426 		   modified by the application, then send the event to all. */
1427 		if (!ctrl->is_new)
1428 			fh = NULL;
1429 		send_event(fh, ctrl,
1430 			(changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
1431 		if (ctrl->call_notify && changed && ctrl->handler->notify)
1432 			ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
1433 	}
1434 }
1435 
1436 /* Copy the current value to the new value */
cur_to_new(struct v4l2_ctrl * ctrl)1437 void cur_to_new(struct v4l2_ctrl *ctrl)
1438 {
1439 	if (ctrl == NULL)
1440 		return;
1441 	if (ctrl->is_dyn_array)
1442 		ctrl->new_elems = ctrl->elems;
1443 	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
1444 }
1445 
req_alloc_array(struct v4l2_ctrl_ref * ref,u32 elems)1446 static bool req_alloc_array(struct v4l2_ctrl_ref *ref, u32 elems)
1447 {
1448 	void *tmp;
1449 
1450 	if (elems == ref->p_req_array_alloc_elems)
1451 		return true;
1452 	if (ref->ctrl->is_dyn_array &&
1453 	    elems < ref->p_req_array_alloc_elems)
1454 		return true;
1455 
1456 	tmp = kvmalloc(elems * ref->ctrl->elem_size, GFP_KERNEL);
1457 
1458 	if (!tmp) {
1459 		ref->p_req_array_enomem = true;
1460 		return false;
1461 	}
1462 	ref->p_req_array_enomem = false;
1463 	kvfree(ref->p_req.p);
1464 	ref->p_req.p = tmp;
1465 	ref->p_req_array_alloc_elems = elems;
1466 	return true;
1467 }
1468 
1469 /* Copy the new value to the request value */
new_to_req(struct v4l2_ctrl_ref * ref)1470 void new_to_req(struct v4l2_ctrl_ref *ref)
1471 {
1472 	struct v4l2_ctrl *ctrl;
1473 
1474 	if (!ref)
1475 		return;
1476 
1477 	ctrl = ref->ctrl;
1478 	if (ctrl->is_array && !req_alloc_array(ref, ctrl->new_elems))
1479 		return;
1480 
1481 	ref->p_req_elems = ctrl->new_elems;
1482 	ptr_to_ptr(ctrl, ctrl->p_new, ref->p_req, ref->p_req_elems);
1483 	ref->p_req_valid = true;
1484 }
1485 
1486 /* Copy the current value to the request value */
cur_to_req(struct v4l2_ctrl_ref * ref)1487 void cur_to_req(struct v4l2_ctrl_ref *ref)
1488 {
1489 	struct v4l2_ctrl *ctrl;
1490 
1491 	if (!ref)
1492 		return;
1493 
1494 	ctrl = ref->ctrl;
1495 	if (ctrl->is_array && !req_alloc_array(ref, ctrl->elems))
1496 		return;
1497 
1498 	ref->p_req_elems = ctrl->elems;
1499 	ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req, ctrl->elems);
1500 	ref->p_req_valid = true;
1501 }
1502 
1503 /* Copy the request value to the new value */
req_to_new(struct v4l2_ctrl_ref * ref)1504 int req_to_new(struct v4l2_ctrl_ref *ref)
1505 {
1506 	struct v4l2_ctrl *ctrl;
1507 
1508 	if (!ref)
1509 		return 0;
1510 
1511 	ctrl = ref->ctrl;
1512 
1513 	/*
1514 	 * This control was never set in the request, so just use the current
1515 	 * value.
1516 	 */
1517 	if (!ref->p_req_valid) {
1518 		if (ctrl->is_dyn_array)
1519 			ctrl->new_elems = ctrl->elems;
1520 		ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
1521 		return 0;
1522 	}
1523 
1524 	/* Not an array, so just copy the request value */
1525 	if (!ctrl->is_array) {
1526 		ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
1527 		return 0;
1528 	}
1529 
1530 	/* Sanity check, should never happen */
1531 	if (WARN_ON(!ref->p_req_array_alloc_elems))
1532 		return -ENOMEM;
1533 
1534 	if (!ctrl->is_dyn_array &&
1535 	    ref->p_req_elems != ctrl->p_array_alloc_elems)
1536 		return -ENOMEM;
1537 
1538 	/*
1539 	 * Check if the number of elements in the request is more than the
1540 	 * elements in ctrl->p_array. If so, attempt to realloc ctrl->p_array.
1541 	 * Note that p_array is allocated with twice the number of elements
1542 	 * in the dynamic array since it has to store both the current and
1543 	 * new value of such a control.
1544 	 */
1545 	if (ref->p_req_elems > ctrl->p_array_alloc_elems) {
1546 		unsigned int sz = ref->p_req_elems * ctrl->elem_size;
1547 		void *old = ctrl->p_array;
1548 		void *tmp = kvzalloc(2 * sz, GFP_KERNEL);
1549 
1550 		if (!tmp)
1551 			return -ENOMEM;
1552 		memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
1553 		memcpy(tmp + sz, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
1554 		ctrl->p_new.p = tmp;
1555 		ctrl->p_cur.p = tmp + sz;
1556 		ctrl->p_array = tmp;
1557 		ctrl->p_array_alloc_elems = ref->p_req_elems;
1558 		kvfree(old);
1559 	}
1560 
1561 	ctrl->new_elems = ref->p_req_elems;
1562 	ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
1563 	return 0;
1564 }
1565 
1566 /* Control range checking */
check_range(enum v4l2_ctrl_type type,s64 min,s64 max,u64 step,s64 def)1567 int check_range(enum v4l2_ctrl_type type,
1568 		s64 min, s64 max, u64 step, s64 def)
1569 {
1570 	switch (type) {
1571 	case V4L2_CTRL_TYPE_BOOLEAN:
1572 		if (step != 1 || max > 1 || min < 0)
1573 			return -ERANGE;
1574 		fallthrough;
1575 	case V4L2_CTRL_TYPE_U8:
1576 	case V4L2_CTRL_TYPE_U16:
1577 	case V4L2_CTRL_TYPE_U32:
1578 	case V4L2_CTRL_TYPE_INTEGER:
1579 	case V4L2_CTRL_TYPE_INTEGER64:
1580 		if (step == 0 || min > max || def < min || def > max)
1581 			return -ERANGE;
1582 		return 0;
1583 	case V4L2_CTRL_TYPE_BITMASK:
1584 		if (step || min || !max || (def & ~max))
1585 			return -ERANGE;
1586 		return 0;
1587 	case V4L2_CTRL_TYPE_MENU:
1588 	case V4L2_CTRL_TYPE_INTEGER_MENU:
1589 		if (min > max || def < min || def > max ||
1590 		    min < 0 || (step && max >= BITS_PER_LONG_LONG))
1591 			return -ERANGE;
1592 		/* Note: step == menu_skip_mask for menu controls.
1593 		   So here we check if the default value is masked out. */
1594 		if (def < BITS_PER_LONG_LONG && (step & BIT_ULL(def)))
1595 			return -EINVAL;
1596 		return 0;
1597 	case V4L2_CTRL_TYPE_STRING:
1598 		if (min > max || min < 0 || step < 1 || def)
1599 			return -ERANGE;
1600 		return 0;
1601 	default:
1602 		return 0;
1603 	}
1604 }
1605 
1606 /* Set the handler's error code if it wasn't set earlier already */
handler_set_err(struct v4l2_ctrl_handler * hdl,int err)1607 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
1608 {
1609 	if (hdl->error == 0)
1610 		hdl->error = err;
1611 	return err;
1612 }
1613 
1614 /* Initialize the handler */
v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler * hdl,unsigned nr_of_controls_hint,struct lock_class_key * key,const char * name)1615 int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
1616 				 unsigned nr_of_controls_hint,
1617 				 struct lock_class_key *key, const char *name)
1618 {
1619 	mutex_init(&hdl->_lock);
1620 	hdl->lock = &hdl->_lock;
1621 	lockdep_set_class_and_name(hdl->lock, key, name);
1622 	INIT_LIST_HEAD(&hdl->ctrls);
1623 	INIT_LIST_HEAD(&hdl->ctrl_refs);
1624 	hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
1625 	hdl->buckets = kvcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
1626 				GFP_KERNEL);
1627 	hdl->error = hdl->buckets ? 0 : -ENOMEM;
1628 	v4l2_ctrl_handler_init_request(hdl);
1629 	return hdl->error;
1630 }
1631 EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
1632 
1633 /* Free all controls and control refs */
v4l2_ctrl_handler_free(struct v4l2_ctrl_handler * hdl)1634 int v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
1635 {
1636 	struct v4l2_ctrl_ref *ref, *next_ref;
1637 	struct v4l2_ctrl *ctrl, *next_ctrl;
1638 	struct v4l2_subscribed_event *sev, *next_sev;
1639 
1640 	if (!hdl)
1641 		return 0;
1642 
1643 	if (!hdl->buckets)
1644 		return hdl->error;
1645 
1646 	v4l2_ctrl_handler_free_request(hdl);
1647 
1648 	mutex_lock(hdl->lock);
1649 	/* Free all nodes */
1650 	list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
1651 		list_del(&ref->node);
1652 		if (ref->p_req_array_alloc_elems)
1653 			kvfree(ref->p_req.p);
1654 		kfree(ref);
1655 	}
1656 	/* Free all controls owned by the handler */
1657 	list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
1658 		list_del(&ctrl->node);
1659 		list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
1660 			list_del(&sev->node);
1661 		kvfree(ctrl->p_array);
1662 		kvfree(ctrl);
1663 	}
1664 	kvfree(hdl->buckets);
1665 	hdl->buckets = NULL;
1666 	hdl->cached = NULL;
1667 	mutex_unlock(hdl->lock);
1668 	mutex_destroy(&hdl->_lock);
1669 
1670 	return hdl->error;
1671 }
1672 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
1673 
1674 /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
1675    be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
1676    with applications that do not use the NEXT_CTRL flag.
1677 
1678    We just find the n-th private user control. It's O(N), but that should not
1679    be an issue in this particular case. */
find_private_ref(struct v4l2_ctrl_handler * hdl,u32 id)1680 static struct v4l2_ctrl_ref *find_private_ref(
1681 		struct v4l2_ctrl_handler *hdl, u32 id)
1682 {
1683 	struct v4l2_ctrl_ref *ref;
1684 
1685 	id -= V4L2_CID_PRIVATE_BASE;
1686 	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1687 		/* Search for private user controls that are compatible with
1688 		   VIDIOC_G/S_CTRL. */
1689 		if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1690 		    V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1691 			if (!ref->ctrl->is_int)
1692 				continue;
1693 			if (id == 0)
1694 				return ref;
1695 			id--;
1696 		}
1697 	}
1698 	return NULL;
1699 }
1700 
1701 /* Find a control with the given ID. */
find_ref(struct v4l2_ctrl_handler * hdl,u32 id)1702 struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1703 {
1704 	struct v4l2_ctrl_ref *ref;
1705 	int bucket;
1706 
1707 	id &= V4L2_CTRL_ID_MASK;
1708 
1709 	/* Old-style private controls need special handling */
1710 	if (id >= V4L2_CID_PRIVATE_BASE)
1711 		return find_private_ref(hdl, id);
1712 	bucket = id % hdl->nr_of_buckets;
1713 
1714 	/* Simple optimization: cache the last control found */
1715 	if (hdl->cached && hdl->cached->ctrl->id == id)
1716 		return hdl->cached;
1717 
1718 	/* Not in cache, search the hash */
1719 	ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1720 	while (ref && ref->ctrl->id != id)
1721 		ref = ref->next;
1722 
1723 	if (ref)
1724 		hdl->cached = ref; /* cache it! */
1725 	return ref;
1726 }
1727 
1728 /* Find a control with the given ID. Take the handler's lock first. */
find_ref_lock(struct v4l2_ctrl_handler * hdl,u32 id)1729 struct v4l2_ctrl_ref *find_ref_lock(struct v4l2_ctrl_handler *hdl, u32 id)
1730 {
1731 	struct v4l2_ctrl_ref *ref = NULL;
1732 
1733 	if (hdl) {
1734 		mutex_lock(hdl->lock);
1735 		ref = find_ref(hdl, id);
1736 		mutex_unlock(hdl->lock);
1737 	}
1738 	return ref;
1739 }
1740 
1741 /* Find a control with the given ID. */
v4l2_ctrl_find(struct v4l2_ctrl_handler * hdl,u32 id)1742 struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1743 {
1744 	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1745 
1746 	return ref ? ref->ctrl : NULL;
1747 }
1748 EXPORT_SYMBOL(v4l2_ctrl_find);
1749 
1750 /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
handler_new_ref(struct v4l2_ctrl_handler * hdl,struct v4l2_ctrl * ctrl,struct v4l2_ctrl_ref ** ctrl_ref,bool from_other_dev,bool allocate_req)1751 int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1752 		    struct v4l2_ctrl *ctrl,
1753 		    struct v4l2_ctrl_ref **ctrl_ref,
1754 		    bool from_other_dev, bool allocate_req)
1755 {
1756 	struct v4l2_ctrl_ref *ref;
1757 	struct v4l2_ctrl_ref *new_ref;
1758 	u32 id = ctrl->id;
1759 	u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
1760 	int bucket = id % hdl->nr_of_buckets;	/* which bucket to use */
1761 	unsigned int size_extra_req = 0;
1762 
1763 	if (ctrl_ref)
1764 		*ctrl_ref = NULL;
1765 
1766 	/*
1767 	 * Automatically add the control class if it is not yet present and
1768 	 * the new control is not a compound control.
1769 	 */
1770 	if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
1771 	    id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1772 		if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1773 			return hdl->error;
1774 
1775 	if (hdl->error)
1776 		return hdl->error;
1777 
1778 	if (allocate_req && !ctrl->is_array)
1779 		size_extra_req = ctrl->elems * ctrl->elem_size;
1780 	new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
1781 	if (!new_ref)
1782 		return handler_set_err(hdl, -ENOMEM);
1783 	new_ref->ctrl = ctrl;
1784 	new_ref->from_other_dev = from_other_dev;
1785 	if (size_extra_req)
1786 		new_ref->p_req.p = &new_ref[1];
1787 
1788 	INIT_LIST_HEAD(&new_ref->node);
1789 
1790 	mutex_lock(hdl->lock);
1791 
1792 	/* Add immediately at the end of the list if the list is empty, or if
1793 	   the last element in the list has a lower ID.
1794 	   This ensures that when elements are added in ascending order the
1795 	   insertion is an O(1) operation. */
1796 	if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1797 		list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1798 		goto insert_in_hash;
1799 	}
1800 
1801 	/* Find insert position in sorted list */
1802 	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1803 		if (ref->ctrl->id < id)
1804 			continue;
1805 		/* Don't add duplicates */
1806 		if (ref->ctrl->id == id) {
1807 			kfree(new_ref);
1808 			goto unlock;
1809 		}
1810 		list_add(&new_ref->node, ref->node.prev);
1811 		break;
1812 	}
1813 
1814 insert_in_hash:
1815 	/* Insert the control node in the hash */
1816 	new_ref->next = hdl->buckets[bucket];
1817 	hdl->buckets[bucket] = new_ref;
1818 	if (ctrl_ref)
1819 		*ctrl_ref = new_ref;
1820 	if (ctrl->handler == hdl) {
1821 		/* By default each control starts in a cluster of its own.
1822 		 * new_ref->ctrl is basically a cluster array with one
1823 		 * element, so that's perfect to use as the cluster pointer.
1824 		 * But only do this for the handler that owns the control.
1825 		 */
1826 		ctrl->cluster = &new_ref->ctrl;
1827 		ctrl->ncontrols = 1;
1828 	}
1829 
1830 unlock:
1831 	mutex_unlock(hdl->lock);
1832 	return 0;
1833 }
1834 
1835 /* Add a new control */
v4l2_ctrl_new(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,const struct v4l2_ctrl_type_ops * type_ops,u32 id,const char * name,enum v4l2_ctrl_type type,s64 min,s64 max,u64 step,s64 def,const u32 dims[V4L2_CTRL_MAX_DIMS],u32 elem_size,u32 flags,const char * const * qmenu,const s64 * qmenu_int,const union v4l2_ctrl_ptr p_def,const union v4l2_ctrl_ptr p_min,const union v4l2_ctrl_ptr p_max,void * priv)1836 static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1837 			const struct v4l2_ctrl_ops *ops,
1838 			const struct v4l2_ctrl_type_ops *type_ops,
1839 			u32 id, const char *name, enum v4l2_ctrl_type type,
1840 			s64 min, s64 max, u64 step, s64 def,
1841 			const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
1842 			u32 flags, const char * const *qmenu,
1843 			const s64 *qmenu_int,
1844 			const union v4l2_ctrl_ptr p_def,
1845 			const union v4l2_ctrl_ptr p_min,
1846 			const union v4l2_ctrl_ptr p_max,
1847 			void *priv)
1848 {
1849 	struct v4l2_ctrl *ctrl;
1850 	unsigned sz_extra;
1851 	unsigned nr_of_dims = 0;
1852 	unsigned elems = 1;
1853 	bool is_array;
1854 	unsigned tot_ctrl_size;
1855 	void *data;
1856 	int err;
1857 
1858 	if (hdl->error)
1859 		return NULL;
1860 
1861 	while (dims && dims[nr_of_dims]) {
1862 		elems *= dims[nr_of_dims];
1863 		nr_of_dims++;
1864 		if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
1865 			break;
1866 	}
1867 	is_array = nr_of_dims > 0;
1868 
1869 	/* Prefill elem_size for all types handled by std_type_ops */
1870 	switch ((u32)type) {
1871 	case V4L2_CTRL_TYPE_INTEGER64:
1872 		elem_size = sizeof(s64);
1873 		break;
1874 	case V4L2_CTRL_TYPE_STRING:
1875 		elem_size = max + 1;
1876 		break;
1877 	case V4L2_CTRL_TYPE_U8:
1878 		elem_size = sizeof(u8);
1879 		break;
1880 	case V4L2_CTRL_TYPE_U16:
1881 		elem_size = sizeof(u16);
1882 		break;
1883 	case V4L2_CTRL_TYPE_U32:
1884 		elem_size = sizeof(u32);
1885 		break;
1886 	case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
1887 		elem_size = sizeof(struct v4l2_ctrl_mpeg2_sequence);
1888 		break;
1889 	case V4L2_CTRL_TYPE_MPEG2_PICTURE:
1890 		elem_size = sizeof(struct v4l2_ctrl_mpeg2_picture);
1891 		break;
1892 	case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
1893 		elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantisation);
1894 		break;
1895 	case V4L2_CTRL_TYPE_FWHT_PARAMS:
1896 		elem_size = sizeof(struct v4l2_ctrl_fwht_params);
1897 		break;
1898 	case V4L2_CTRL_TYPE_H264_SPS:
1899 		elem_size = sizeof(struct v4l2_ctrl_h264_sps);
1900 		break;
1901 	case V4L2_CTRL_TYPE_H264_PPS:
1902 		elem_size = sizeof(struct v4l2_ctrl_h264_pps);
1903 		break;
1904 	case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1905 		elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
1906 		break;
1907 	case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1908 		elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
1909 		break;
1910 	case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1911 		elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
1912 		break;
1913 	case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
1914 		elem_size = sizeof(struct v4l2_ctrl_h264_pred_weights);
1915 		break;
1916 	case V4L2_CTRL_TYPE_VP8_FRAME:
1917 		elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
1918 		break;
1919 	case V4L2_CTRL_TYPE_HEVC_SPS:
1920 		elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
1921 		break;
1922 	case V4L2_CTRL_TYPE_HEVC_PPS:
1923 		elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
1924 		break;
1925 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
1926 		elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
1927 		break;
1928 	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
1929 		elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
1930 		break;
1931 	case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
1932 		elem_size = sizeof(struct v4l2_ctrl_hevc_decode_params);
1933 		break;
1934 	case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
1935 		elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
1936 		break;
1937 	case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
1938 		elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
1939 		break;
1940 	case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
1941 		elem_size = sizeof(struct v4l2_ctrl_vp9_compressed_hdr);
1942 		break;
1943 	case V4L2_CTRL_TYPE_VP9_FRAME:
1944 		elem_size = sizeof(struct v4l2_ctrl_vp9_frame);
1945 		break;
1946 	case V4L2_CTRL_TYPE_AV1_SEQUENCE:
1947 		elem_size = sizeof(struct v4l2_ctrl_av1_sequence);
1948 		break;
1949 	case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
1950 		elem_size = sizeof(struct v4l2_ctrl_av1_tile_group_entry);
1951 		break;
1952 	case V4L2_CTRL_TYPE_AV1_FRAME:
1953 		elem_size = sizeof(struct v4l2_ctrl_av1_frame);
1954 		break;
1955 	case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
1956 		elem_size = sizeof(struct v4l2_ctrl_av1_film_grain);
1957 		break;
1958 	case V4L2_CTRL_TYPE_AREA:
1959 		elem_size = sizeof(struct v4l2_area);
1960 		break;
1961 	case V4L2_CTRL_TYPE_RECT:
1962 		elem_size = sizeof(struct v4l2_rect);
1963 		break;
1964 	default:
1965 		if (type < V4L2_CTRL_COMPOUND_TYPES)
1966 			elem_size = sizeof(s32);
1967 		break;
1968 	}
1969 
1970 	if (type < V4L2_CTRL_COMPOUND_TYPES &&
1971 	    type != V4L2_CTRL_TYPE_BUTTON &&
1972 	    type != V4L2_CTRL_TYPE_CTRL_CLASS &&
1973 	    type != V4L2_CTRL_TYPE_STRING)
1974 		flags |= V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX;
1975 
1976 	/* Sanity checks */
1977 	if (id == 0 || name == NULL || !elem_size ||
1978 	    id >= V4L2_CID_PRIVATE_BASE ||
1979 	    (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1980 	    (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
1981 		handler_set_err(hdl, -ERANGE);
1982 		return NULL;
1983 	}
1984 
1985 	err = check_range(type, min, max, step, def);
1986 	if (err) {
1987 		handler_set_err(hdl, err);
1988 		return NULL;
1989 	}
1990 	if (is_array &&
1991 	    (type == V4L2_CTRL_TYPE_BUTTON ||
1992 	     type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
1993 		handler_set_err(hdl, -EINVAL);
1994 		return NULL;
1995 	}
1996 	if (flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) {
1997 		/*
1998 		 * For now only support this for one-dimensional arrays only.
1999 		 *
2000 		 * This can be relaxed in the future, but this will
2001 		 * require more effort.
2002 		 */
2003 		if (nr_of_dims != 1) {
2004 			handler_set_err(hdl, -EINVAL);
2005 			return NULL;
2006 		}
2007 		/* Start with just 1 element */
2008 		elems = 1;
2009 	}
2010 
2011 	tot_ctrl_size = elem_size * elems;
2012 	sz_extra = 0;
2013 	if (type == V4L2_CTRL_TYPE_BUTTON)
2014 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
2015 			V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
2016 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
2017 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
2018 	else if (!is_array &&
2019 		 (type == V4L2_CTRL_TYPE_INTEGER64 ||
2020 		  type == V4L2_CTRL_TYPE_STRING ||
2021 		  type >= V4L2_CTRL_COMPOUND_TYPES))
2022 		sz_extra += 2 * tot_ctrl_size;
2023 
2024 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
2025 		sz_extra += elem_size;
2026 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_min.p_const)
2027 		sz_extra += elem_size;
2028 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_max.p_const)
2029 		sz_extra += elem_size;
2030 
2031 	ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
2032 	if (ctrl == NULL) {
2033 		handler_set_err(hdl, -ENOMEM);
2034 		return NULL;
2035 	}
2036 
2037 	INIT_LIST_HEAD(&ctrl->node);
2038 	INIT_LIST_HEAD(&ctrl->ev_subs);
2039 	ctrl->handler = hdl;
2040 	ctrl->ops = ops;
2041 	ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
2042 	ctrl->id = id;
2043 	ctrl->name = name;
2044 	ctrl->type = type;
2045 	ctrl->flags = flags;
2046 	ctrl->minimum = min;
2047 	ctrl->maximum = max;
2048 	ctrl->step = step;
2049 	ctrl->default_value = def;
2050 	ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
2051 	ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
2052 	ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
2053 	ctrl->is_array = is_array;
2054 	ctrl->is_dyn_array = !!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY);
2055 	ctrl->elems = elems;
2056 	ctrl->new_elems = elems;
2057 	ctrl->nr_of_dims = nr_of_dims;
2058 	if (nr_of_dims)
2059 		memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
2060 	ctrl->elem_size = elem_size;
2061 	if (type == V4L2_CTRL_TYPE_MENU)
2062 		ctrl->qmenu = qmenu;
2063 	else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2064 		ctrl->qmenu_int = qmenu_int;
2065 	ctrl->priv = priv;
2066 	ctrl->cur.val = ctrl->val = def;
2067 	data = &ctrl[1];
2068 
2069 	if (ctrl->is_array) {
2070 		ctrl->p_array_alloc_elems = elems;
2071 		ctrl->p_array = kvzalloc(2 * elems * elem_size, GFP_KERNEL);
2072 		if (!ctrl->p_array) {
2073 			kvfree(ctrl);
2074 			return NULL;
2075 		}
2076 		data = ctrl->p_array;
2077 	}
2078 
2079 	if (!ctrl->is_int) {
2080 		ctrl->p_new.p = data;
2081 		ctrl->p_cur.p = data + tot_ctrl_size;
2082 	} else {
2083 		ctrl->p_new.p = &ctrl->val;
2084 		ctrl->p_cur.p = &ctrl->cur.val;
2085 	}
2086 
2087 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
2088 		if (ctrl->is_array)
2089 			ctrl->p_def.p = &ctrl[1];
2090 		else
2091 			ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
2092 		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
2093 	}
2094 
2095 	if (flags & V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX) {
2096 		void *ptr = ctrl->p_def.p;
2097 
2098 		if (p_min.p_const) {
2099 			ptr += elem_size;
2100 			ctrl->p_min.p = ptr;
2101 			memcpy(ctrl->p_min.p, p_min.p_const, elem_size);
2102 		}
2103 
2104 		if (p_max.p_const) {
2105 			ptr += elem_size;
2106 			ctrl->p_max.p = ptr;
2107 			memcpy(ctrl->p_max.p, p_max.p_const, elem_size);
2108 		}
2109 	}
2110 
2111 	ctrl->type_ops->init(ctrl, 0, ctrl->p_cur);
2112 	cur_to_new(ctrl);
2113 
2114 	if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
2115 		kvfree(ctrl->p_array);
2116 		kvfree(ctrl);
2117 		return NULL;
2118 	}
2119 	mutex_lock(hdl->lock);
2120 	list_add_tail(&ctrl->node, &hdl->ctrls);
2121 	mutex_unlock(hdl->lock);
2122 	return ctrl;
2123 }
2124 
v4l2_ctrl_new_custom(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_config * cfg,void * priv)2125 struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
2126 			const struct v4l2_ctrl_config *cfg, void *priv)
2127 {
2128 	bool is_menu;
2129 	struct v4l2_ctrl *ctrl;
2130 	const char *name = cfg->name;
2131 	const char * const *qmenu = cfg->qmenu;
2132 	const s64 *qmenu_int = cfg->qmenu_int;
2133 	enum v4l2_ctrl_type type = cfg->type;
2134 	u32 flags = cfg->flags;
2135 	s64 min = cfg->min;
2136 	s64 max = cfg->max;
2137 	u64 step = cfg->step;
2138 	s64 def = cfg->def;
2139 
2140 	if (name == NULL)
2141 		v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
2142 								&def, &flags);
2143 
2144 	is_menu = (type == V4L2_CTRL_TYPE_MENU ||
2145 		   type == V4L2_CTRL_TYPE_INTEGER_MENU);
2146 	if (is_menu)
2147 		WARN_ON(step);
2148 	else
2149 		WARN_ON(cfg->menu_skip_mask);
2150 	if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
2151 		qmenu = v4l2_ctrl_get_menu(cfg->id);
2152 	} else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
2153 		handler_set_err(hdl, -EINVAL);
2154 		return NULL;
2155 	}
2156 
2157 	ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
2158 			type, min, max,
2159 			is_menu ? cfg->menu_skip_mask : step, def,
2160 			cfg->dims, cfg->elem_size,
2161 			flags, qmenu, qmenu_int, cfg->p_def, cfg->p_min,
2162 			cfg->p_max, priv);
2163 	if (ctrl)
2164 		ctrl->is_private = cfg->is_private;
2165 	return ctrl;
2166 }
2167 EXPORT_SYMBOL(v4l2_ctrl_new_custom);
2168 
2169 /* Helper function for standard non-menu controls */
v4l2_ctrl_new_std(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,s64 min,s64 max,u64 step,s64 def)2170 struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
2171 			const struct v4l2_ctrl_ops *ops,
2172 			u32 id, s64 min, s64 max, u64 step, s64 def)
2173 {
2174 	const char *name;
2175 	enum v4l2_ctrl_type type;
2176 	u32 flags;
2177 
2178 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2179 	if (type == V4L2_CTRL_TYPE_MENU ||
2180 	    type == V4L2_CTRL_TYPE_INTEGER_MENU ||
2181 	    type >= V4L2_CTRL_COMPOUND_TYPES) {
2182 		handler_set_err(hdl, -EINVAL);
2183 		return NULL;
2184 	}
2185 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2186 			     min, max, step, def, NULL, 0,
2187 			     flags, NULL, NULL, ptr_null, ptr_null,
2188 			     ptr_null, NULL);
2189 }
2190 EXPORT_SYMBOL(v4l2_ctrl_new_std);
2191 
2192 /* Helper function for standard menu controls */
v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,u8 _max,u64 mask,u8 _def)2193 struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
2194 			const struct v4l2_ctrl_ops *ops,
2195 			u32 id, u8 _max, u64 mask, u8 _def)
2196 {
2197 	const char * const *qmenu = NULL;
2198 	const s64 *qmenu_int = NULL;
2199 	unsigned int qmenu_int_len = 0;
2200 	const char *name;
2201 	enum v4l2_ctrl_type type;
2202 	s64 min;
2203 	s64 max = _max;
2204 	s64 def = _def;
2205 	u64 step;
2206 	u32 flags;
2207 
2208 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2209 
2210 	if (type == V4L2_CTRL_TYPE_MENU)
2211 		qmenu = v4l2_ctrl_get_menu(id);
2212 	else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2213 		qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
2214 
2215 	if ((!qmenu && !qmenu_int) || (qmenu_int && max >= qmenu_int_len)) {
2216 		handler_set_err(hdl, -EINVAL);
2217 		return NULL;
2218 	}
2219 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2220 			     0, max, mask, def, NULL, 0,
2221 			     flags, qmenu, qmenu_int, ptr_null, ptr_null,
2222 			     ptr_null, NULL);
2223 }
2224 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
2225 
2226 /* Helper function for standard menu controls with driver defined menu */
v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,u8 _max,u64 mask,u8 _def,const char * const * qmenu)2227 struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
2228 			const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
2229 			u64 mask, u8 _def, const char * const *qmenu)
2230 {
2231 	enum v4l2_ctrl_type type;
2232 	const char *name;
2233 	u32 flags;
2234 	u64 step;
2235 	s64 min;
2236 	s64 max = _max;
2237 	s64 def = _def;
2238 
2239 	/* v4l2_ctrl_new_std_menu_items() should only be called for
2240 	 * standard controls without a standard menu.
2241 	 */
2242 	if (v4l2_ctrl_get_menu(id)) {
2243 		handler_set_err(hdl, -EINVAL);
2244 		return NULL;
2245 	}
2246 
2247 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2248 	if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
2249 		handler_set_err(hdl, -EINVAL);
2250 		return NULL;
2251 	}
2252 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2253 			     0, max, mask, def, NULL, 0,
2254 			     flags, qmenu, NULL, ptr_null, ptr_null,
2255 			     ptr_null, NULL);
2256 
2257 }
2258 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
2259 
2260 /* Helper function for standard compound controls */
v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,const union v4l2_ctrl_ptr p_def,const union v4l2_ctrl_ptr p_min,const union v4l2_ctrl_ptr p_max)2261 struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
2262 				const struct v4l2_ctrl_ops *ops, u32 id,
2263 				const union v4l2_ctrl_ptr p_def,
2264 				const union v4l2_ctrl_ptr p_min,
2265 				const union v4l2_ctrl_ptr p_max)
2266 {
2267 	const char *name;
2268 	enum v4l2_ctrl_type type;
2269 	u32 flags;
2270 	s64 min, max, step, def;
2271 
2272 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2273 	if (type < V4L2_CTRL_COMPOUND_TYPES) {
2274 		handler_set_err(hdl, -EINVAL);
2275 		return NULL;
2276 	}
2277 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2278 			     min, max, step, def, NULL, 0,
2279 			     flags, NULL, NULL, p_def, p_min, p_max, NULL);
2280 }
2281 EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
2282 
2283 /* Helper function for standard integer menu controls */
v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,u8 _max,u8 _def,const s64 * qmenu_int)2284 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
2285 			const struct v4l2_ctrl_ops *ops,
2286 			u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
2287 {
2288 	const char *name;
2289 	enum v4l2_ctrl_type type;
2290 	s64 min;
2291 	u64 step;
2292 	s64 max = _max;
2293 	s64 def = _def;
2294 	u32 flags;
2295 
2296 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2297 	if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
2298 		handler_set_err(hdl, -EINVAL);
2299 		return NULL;
2300 	}
2301 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2302 			     0, max, 0, def, NULL, 0,
2303 			     flags, NULL, qmenu_int, ptr_null, ptr_null,
2304 			     ptr_null, NULL);
2305 }
2306 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
2307 
2308 /* Add the controls from another handler to our own. */
v4l2_ctrl_add_handler(struct v4l2_ctrl_handler * hdl,struct v4l2_ctrl_handler * add,bool (* filter)(const struct v4l2_ctrl * ctrl),bool from_other_dev)2309 int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
2310 			  struct v4l2_ctrl_handler *add,
2311 			  bool (*filter)(const struct v4l2_ctrl *ctrl),
2312 			  bool from_other_dev)
2313 {
2314 	struct v4l2_ctrl_ref *ref;
2315 	int ret = 0;
2316 
2317 	/* Do nothing if either handler is NULL or if they are the same */
2318 	if (!hdl || !add || hdl == add)
2319 		return 0;
2320 	if (hdl->error)
2321 		return hdl->error;
2322 	mutex_lock(add->lock);
2323 	list_for_each_entry(ref, &add->ctrl_refs, node) {
2324 		struct v4l2_ctrl *ctrl = ref->ctrl;
2325 
2326 		/* Skip handler-private controls. */
2327 		if (ctrl->is_private)
2328 			continue;
2329 		/* And control classes */
2330 		if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2331 			continue;
2332 		/* Filter any unwanted controls */
2333 		if (filter && !filter(ctrl))
2334 			continue;
2335 		ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
2336 		if (ret)
2337 			break;
2338 	}
2339 	mutex_unlock(add->lock);
2340 	return ret;
2341 }
2342 EXPORT_SYMBOL(v4l2_ctrl_add_handler);
2343 
v4l2_ctrl_radio_filter(const struct v4l2_ctrl * ctrl)2344 bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
2345 {
2346 	if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
2347 		return true;
2348 	if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
2349 		return true;
2350 	switch (ctrl->id) {
2351 	case V4L2_CID_AUDIO_MUTE:
2352 	case V4L2_CID_AUDIO_VOLUME:
2353 	case V4L2_CID_AUDIO_BALANCE:
2354 	case V4L2_CID_AUDIO_BASS:
2355 	case V4L2_CID_AUDIO_TREBLE:
2356 	case V4L2_CID_AUDIO_LOUDNESS:
2357 		return true;
2358 	default:
2359 		break;
2360 	}
2361 	return false;
2362 }
2363 EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
2364 
2365 /* Cluster controls */
v4l2_ctrl_cluster(unsigned ncontrols,struct v4l2_ctrl ** controls)2366 void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
2367 {
2368 	bool has_volatiles = false;
2369 	int i;
2370 
2371 	/* The first control is the master control and it must not be NULL */
2372 	if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
2373 		return;
2374 
2375 	for (i = 0; i < ncontrols; i++) {
2376 		if (controls[i]) {
2377 			controls[i]->cluster = controls;
2378 			controls[i]->ncontrols = ncontrols;
2379 			if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
2380 				has_volatiles = true;
2381 		}
2382 	}
2383 	controls[0]->has_volatiles = has_volatiles;
2384 }
2385 EXPORT_SYMBOL(v4l2_ctrl_cluster);
2386 
v4l2_ctrl_auto_cluster(unsigned ncontrols,struct v4l2_ctrl ** controls,u8 manual_val,bool set_volatile)2387 void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
2388 			    u8 manual_val, bool set_volatile)
2389 {
2390 	struct v4l2_ctrl *master = controls[0];
2391 	u32 flag = 0;
2392 	int i;
2393 
2394 	v4l2_ctrl_cluster(ncontrols, controls);
2395 	WARN_ON(ncontrols <= 1);
2396 	WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
2397 	WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
2398 	master->is_auto = true;
2399 	master->has_volatiles = set_volatile;
2400 	master->manual_mode_value = manual_val;
2401 	master->flags |= V4L2_CTRL_FLAG_UPDATE;
2402 
2403 	if (!is_cur_manual(master))
2404 		flag = V4L2_CTRL_FLAG_INACTIVE |
2405 			(set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
2406 
2407 	for (i = 1; i < ncontrols; i++)
2408 		if (controls[i])
2409 			controls[i]->flags |= flag;
2410 }
2411 EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
2412 
2413 /*
2414  * Obtain the current volatile values of an autocluster and mark them
2415  * as new.
2416  */
update_from_auto_cluster(struct v4l2_ctrl * master)2417 void update_from_auto_cluster(struct v4l2_ctrl *master)
2418 {
2419 	int i;
2420 
2421 	for (i = 1; i < master->ncontrols; i++)
2422 		cur_to_new(master->cluster[i]);
2423 	if (!call_op(master, g_volatile_ctrl))
2424 		for (i = 1; i < master->ncontrols; i++)
2425 			if (master->cluster[i])
2426 				master->cluster[i]->is_new = 1;
2427 }
2428 
2429 /*
2430  * Return non-zero if one or more of the controls in the cluster has a new
2431  * value that differs from the current value.
2432  */
cluster_changed(struct v4l2_ctrl * master)2433 static int cluster_changed(struct v4l2_ctrl *master)
2434 {
2435 	bool changed = false;
2436 	int i;
2437 
2438 	for (i = 0; i < master->ncontrols; i++) {
2439 		struct v4l2_ctrl *ctrl = master->cluster[i];
2440 		bool ctrl_changed = false;
2441 
2442 		if (!ctrl)
2443 			continue;
2444 
2445 		if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE) {
2446 			changed = true;
2447 			ctrl_changed = true;
2448 		}
2449 
2450 		/*
2451 		 * Set has_changed to false to avoid generating
2452 		 * the event V4L2_EVENT_CTRL_CH_VALUE
2453 		 */
2454 		if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2455 			ctrl->has_changed = false;
2456 			continue;
2457 		}
2458 
2459 		if (ctrl->elems != ctrl->new_elems)
2460 			ctrl_changed = true;
2461 		if (!ctrl_changed)
2462 			ctrl_changed = !ctrl->type_ops->equal(ctrl,
2463 				ctrl->p_cur, ctrl->p_new);
2464 		ctrl->has_changed = ctrl_changed;
2465 		changed |= ctrl->has_changed;
2466 	}
2467 	return changed;
2468 }
2469 
2470 /*
2471  * Core function that calls try/s_ctrl and ensures that the new value is
2472  * copied to the current value on a set.
2473  * Must be called with ctrl->handler->lock held.
2474  */
try_or_set_cluster(struct v4l2_fh * fh,struct v4l2_ctrl * master,bool set,u32 ch_flags)2475 int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
2476 		       bool set, u32 ch_flags)
2477 {
2478 	bool update_flag;
2479 	int ret;
2480 	int i;
2481 
2482 	/*
2483 	 * Go through the cluster and either validate the new value or
2484 	 * (if no new value was set), copy the current value to the new
2485 	 * value, ensuring a consistent view for the control ops when
2486 	 * called.
2487 	 */
2488 	for (i = 0; i < master->ncontrols; i++) {
2489 		struct v4l2_ctrl *ctrl = master->cluster[i];
2490 
2491 		if (!ctrl)
2492 			continue;
2493 
2494 		if (!ctrl->is_new) {
2495 			cur_to_new(ctrl);
2496 			continue;
2497 		}
2498 		/*
2499 		 * Check again: it may have changed since the
2500 		 * previous check in try_or_set_ext_ctrls().
2501 		 */
2502 		if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
2503 			return -EBUSY;
2504 	}
2505 
2506 	ret = call_op(master, try_ctrl);
2507 
2508 	/* Don't set if there is no change */
2509 	if (ret || !set || !cluster_changed(master))
2510 		return ret;
2511 	ret = call_op(master, s_ctrl);
2512 	if (ret)
2513 		return ret;
2514 
2515 	/* If OK, then make the new values permanent. */
2516 	update_flag = is_cur_manual(master) != is_new_manual(master);
2517 
2518 	for (i = 0; i < master->ncontrols; i++) {
2519 		/*
2520 		 * If we switch from auto to manual mode, and this cluster
2521 		 * contains volatile controls, then all non-master controls
2522 		 * have to be marked as changed. The 'new' value contains
2523 		 * the volatile value (obtained by update_from_auto_cluster),
2524 		 * which now has to become the current value.
2525 		 */
2526 		if (i && update_flag && is_new_manual(master) &&
2527 		    master->has_volatiles && master->cluster[i])
2528 			master->cluster[i]->has_changed = true;
2529 
2530 		new_to_cur(fh, master->cluster[i], ch_flags |
2531 			((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
2532 	}
2533 	return 0;
2534 }
2535 
2536 /* Activate/deactivate a control. */
v4l2_ctrl_activate(struct v4l2_ctrl * ctrl,bool active)2537 void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2538 {
2539 	/* invert since the actual flag is called 'inactive' */
2540 	bool inactive = !active;
2541 	bool old;
2542 
2543 	if (ctrl == NULL)
2544 		return;
2545 
2546 	if (inactive)
2547 		/* set V4L2_CTRL_FLAG_INACTIVE */
2548 		old = test_and_set_bit(4, &ctrl->flags);
2549 	else
2550 		/* clear V4L2_CTRL_FLAG_INACTIVE */
2551 		old = test_and_clear_bit(4, &ctrl->flags);
2552 	if (old != inactive)
2553 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2554 }
2555 EXPORT_SYMBOL(v4l2_ctrl_activate);
2556 
__v4l2_ctrl_grab(struct v4l2_ctrl * ctrl,bool grabbed)2557 void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2558 {
2559 	bool old;
2560 
2561 	if (ctrl == NULL)
2562 		return;
2563 
2564 	lockdep_assert_held(ctrl->handler->lock);
2565 
2566 	if (grabbed)
2567 		/* set V4L2_CTRL_FLAG_GRABBED */
2568 		old = test_and_set_bit(1, &ctrl->flags);
2569 	else
2570 		/* clear V4L2_CTRL_FLAG_GRABBED */
2571 		old = test_and_clear_bit(1, &ctrl->flags);
2572 	if (old != grabbed)
2573 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2574 }
2575 EXPORT_SYMBOL(__v4l2_ctrl_grab);
2576 
2577 /* Call s_ctrl for all controls owned by the handler */
__v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler * hdl)2578 int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2579 {
2580 	struct v4l2_ctrl *ctrl;
2581 	int ret = 0;
2582 
2583 	if (hdl == NULL)
2584 		return 0;
2585 
2586 	lockdep_assert_held(hdl->lock);
2587 
2588 	list_for_each_entry(ctrl, &hdl->ctrls, node)
2589 		ctrl->done = false;
2590 
2591 	list_for_each_entry(ctrl, &hdl->ctrls, node) {
2592 		struct v4l2_ctrl *master = ctrl->cluster[0];
2593 		int i;
2594 
2595 		/* Skip if this control was already handled by a cluster. */
2596 		/* Skip button controls and read-only controls. */
2597 		if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
2598 		    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
2599 			continue;
2600 
2601 		for (i = 0; i < master->ncontrols; i++) {
2602 			if (master->cluster[i]) {
2603 				cur_to_new(master->cluster[i]);
2604 				master->cluster[i]->is_new = 1;
2605 				master->cluster[i]->done = true;
2606 			}
2607 		}
2608 		ret = call_op(master, s_ctrl);
2609 		if (ret)
2610 			break;
2611 	}
2612 
2613 	return ret;
2614 }
2615 EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
2616 
v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler * hdl)2617 int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2618 {
2619 	int ret;
2620 
2621 	if (hdl == NULL)
2622 		return 0;
2623 
2624 	mutex_lock(hdl->lock);
2625 	ret = __v4l2_ctrl_handler_setup(hdl);
2626 	mutex_unlock(hdl->lock);
2627 
2628 	return ret;
2629 }
2630 EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
2631 
2632 /* Log the control name and value */
log_ctrl(const struct v4l2_ctrl * ctrl,const char * prefix,const char * colon)2633 static void log_ctrl(const struct v4l2_ctrl *ctrl,
2634 		     const char *prefix, const char *colon)
2635 {
2636 	if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
2637 		return;
2638 	if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2639 		return;
2640 
2641 	pr_info("%s%s%s: ", prefix, colon, ctrl->name);
2642 
2643 	ctrl->type_ops->log(ctrl);
2644 
2645 	if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
2646 			   V4L2_CTRL_FLAG_GRABBED |
2647 			   V4L2_CTRL_FLAG_VOLATILE)) {
2648 		if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
2649 			pr_cont(" inactive");
2650 		if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
2651 			pr_cont(" grabbed");
2652 		if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
2653 			pr_cont(" volatile");
2654 	}
2655 	pr_cont("\n");
2656 }
2657 
2658 /* Log all controls owned by the handler */
v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler * hdl,const char * prefix)2659 void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
2660 				  const char *prefix)
2661 {
2662 	struct v4l2_ctrl *ctrl;
2663 	const char *colon = "";
2664 	int len;
2665 
2666 	if (!hdl)
2667 		return;
2668 	if (!prefix)
2669 		prefix = "";
2670 	len = strlen(prefix);
2671 	if (len && prefix[len - 1] != ' ')
2672 		colon = ": ";
2673 	mutex_lock(hdl->lock);
2674 	list_for_each_entry(ctrl, &hdl->ctrls, node)
2675 		if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
2676 			log_ctrl(ctrl, prefix, colon);
2677 	mutex_unlock(hdl->lock);
2678 }
2679 EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
2680 
v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ctrl_ops,const struct v4l2_fwnode_device_properties * p)2681 int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
2682 				    const struct v4l2_ctrl_ops *ctrl_ops,
2683 				    const struct v4l2_fwnode_device_properties *p)
2684 {
2685 	if (hdl->error)
2686 		return hdl->error;
2687 
2688 	if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
2689 		u32 orientation_ctrl;
2690 
2691 		switch (p->orientation) {
2692 		case V4L2_FWNODE_ORIENTATION_FRONT:
2693 			orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
2694 			break;
2695 		case V4L2_FWNODE_ORIENTATION_BACK:
2696 			orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
2697 			break;
2698 		case V4L2_FWNODE_ORIENTATION_EXTERNAL:
2699 			orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
2700 			break;
2701 		default:
2702 			return -EINVAL;
2703 		}
2704 		if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
2705 					    V4L2_CID_CAMERA_ORIENTATION,
2706 					    V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
2707 					    orientation_ctrl))
2708 			return hdl->error;
2709 	}
2710 
2711 	if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
2712 		if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
2713 				       V4L2_CID_CAMERA_SENSOR_ROTATION,
2714 				       p->rotation, p->rotation, 1,
2715 				       p->rotation))
2716 			return hdl->error;
2717 	}
2718 
2719 	return hdl->error;
2720 }
2721 EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);
2722