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