Merge tag 'selinux-pr-20210629' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / media / v4l2-core / v4l2-ctrls-core.c
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
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
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
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
68 static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
69                       union v4l2_ctrl_ptr ptr1,
70                       union v4l2_ctrl_ptr ptr2)
71 {
72         switch (ctrl->type) {
73         case V4L2_CTRL_TYPE_BUTTON:
74                 return false;
75         case V4L2_CTRL_TYPE_STRING:
76                 idx *= ctrl->elem_size;
77                 /* strings are always 0-terminated */
78                 return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
79         case V4L2_CTRL_TYPE_INTEGER64:
80                 return ptr1.p_s64[idx] == ptr2.p_s64[idx];
81         case V4L2_CTRL_TYPE_U8:
82                 return ptr1.p_u8[idx] == ptr2.p_u8[idx];
83         case V4L2_CTRL_TYPE_U16:
84                 return ptr1.p_u16[idx] == ptr2.p_u16[idx];
85         case V4L2_CTRL_TYPE_U32:
86                 return ptr1.p_u32[idx] == ptr2.p_u32[idx];
87         default:
88                 if (ctrl->is_int)
89                         return ptr1.p_s32[idx] == ptr2.p_s32[idx];
90                 idx *= ctrl->elem_size;
91                 return !memcmp(ptr1.p_const + idx, ptr2.p_const + idx,
92                                ctrl->elem_size);
93         }
94 }
95
96 /* Default intra MPEG-2 quantisation coefficients, from the specification. */
97 static const u8 mpeg2_intra_quant_matrix[64] = {
98         8,  16, 16, 19, 16, 19, 22, 22,
99         22, 22, 22, 22, 26, 24, 26, 27,
100         27, 27, 26, 26, 26, 26, 27, 27,
101         27, 29, 29, 29, 34, 34, 34, 29,
102         29, 29, 27, 27, 29, 29, 32, 32,
103         34, 34, 37, 38, 37, 35, 35, 34,
104         35, 38, 38, 40, 40, 40, 48, 48,
105         46, 46, 56, 56, 58, 69, 69, 83
106 };
107
108 static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
109                               union v4l2_ctrl_ptr ptr)
110 {
111         struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
112         struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
113         struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quant;
114         struct v4l2_ctrl_vp8_frame *p_vp8_frame;
115         struct v4l2_ctrl_fwht_params *p_fwht_params;
116         void *p = ptr.p + idx * ctrl->elem_size;
117
118         if (ctrl->p_def.p_const)
119                 memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
120         else
121                 memset(p, 0, ctrl->elem_size);
122
123         switch ((u32)ctrl->type) {
124         case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
125                 p_mpeg2_sequence = p;
126
127                 /* 4:2:0 */
128                 p_mpeg2_sequence->chroma_format = 1;
129                 break;
130         case V4L2_CTRL_TYPE_MPEG2_PICTURE:
131                 p_mpeg2_picture = p;
132
133                 /* interlaced top field */
134                 p_mpeg2_picture->picture_structure = V4L2_MPEG2_PIC_TOP_FIELD;
135                 p_mpeg2_picture->picture_coding_type =
136                                         V4L2_MPEG2_PIC_CODING_TYPE_I;
137                 break;
138         case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
139                 p_mpeg2_quant = p;
140
141                 memcpy(p_mpeg2_quant->intra_quantiser_matrix,
142                        mpeg2_intra_quant_matrix,
143                        ARRAY_SIZE(mpeg2_intra_quant_matrix));
144                 /*
145                  * The default non-intra MPEG-2 quantisation
146                  * coefficients are all 16, as per the specification.
147                  */
148                 memset(p_mpeg2_quant->non_intra_quantiser_matrix, 16,
149                        sizeof(p_mpeg2_quant->non_intra_quantiser_matrix));
150                 break;
151         case V4L2_CTRL_TYPE_VP8_FRAME:
152                 p_vp8_frame = p;
153                 p_vp8_frame->num_dct_parts = 1;
154                 break;
155         case V4L2_CTRL_TYPE_FWHT_PARAMS:
156                 p_fwht_params = p;
157                 p_fwht_params->version = V4L2_FWHT_VERSION;
158                 p_fwht_params->width = 1280;
159                 p_fwht_params->height = 720;
160                 p_fwht_params->flags = V4L2_FWHT_FL_PIXENC_YUV |
161                         (2 << V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET);
162                 break;
163         }
164 }
165
166 static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
167                      union v4l2_ctrl_ptr ptr)
168 {
169         switch (ctrl->type) {
170         case V4L2_CTRL_TYPE_STRING:
171                 idx *= ctrl->elem_size;
172                 memset(ptr.p_char + idx, ' ', ctrl->minimum);
173                 ptr.p_char[idx + ctrl->minimum] = '\0';
174                 break;
175         case V4L2_CTRL_TYPE_INTEGER64:
176                 ptr.p_s64[idx] = ctrl->default_value;
177                 break;
178         case V4L2_CTRL_TYPE_INTEGER:
179         case V4L2_CTRL_TYPE_INTEGER_MENU:
180         case V4L2_CTRL_TYPE_MENU:
181         case V4L2_CTRL_TYPE_BITMASK:
182         case V4L2_CTRL_TYPE_BOOLEAN:
183                 ptr.p_s32[idx] = ctrl->default_value;
184                 break;
185         case V4L2_CTRL_TYPE_BUTTON:
186         case V4L2_CTRL_TYPE_CTRL_CLASS:
187                 ptr.p_s32[idx] = 0;
188                 break;
189         case V4L2_CTRL_TYPE_U8:
190                 ptr.p_u8[idx] = ctrl->default_value;
191                 break;
192         case V4L2_CTRL_TYPE_U16:
193                 ptr.p_u16[idx] = ctrl->default_value;
194                 break;
195         case V4L2_CTRL_TYPE_U32:
196                 ptr.p_u32[idx] = ctrl->default_value;
197                 break;
198         default:
199                 std_init_compound(ctrl, idx, ptr);
200                 break;
201         }
202 }
203
204 static void std_log(const struct v4l2_ctrl *ctrl)
205 {
206         union v4l2_ctrl_ptr ptr = ctrl->p_cur;
207
208         if (ctrl->is_array) {
209                 unsigned i;
210
211                 for (i = 0; i < ctrl->nr_of_dims; i++)
212                         pr_cont("[%u]", ctrl->dims[i]);
213                 pr_cont(" ");
214         }
215
216         switch (ctrl->type) {
217         case V4L2_CTRL_TYPE_INTEGER:
218                 pr_cont("%d", *ptr.p_s32);
219                 break;
220         case V4L2_CTRL_TYPE_BOOLEAN:
221                 pr_cont("%s", *ptr.p_s32 ? "true" : "false");
222                 break;
223         case V4L2_CTRL_TYPE_MENU:
224                 pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
225                 break;
226         case V4L2_CTRL_TYPE_INTEGER_MENU:
227                 pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
228                 break;
229         case V4L2_CTRL_TYPE_BITMASK:
230                 pr_cont("0x%08x", *ptr.p_s32);
231                 break;
232         case V4L2_CTRL_TYPE_INTEGER64:
233                 pr_cont("%lld", *ptr.p_s64);
234                 break;
235         case V4L2_CTRL_TYPE_STRING:
236                 pr_cont("%s", ptr.p_char);
237                 break;
238         case V4L2_CTRL_TYPE_U8:
239                 pr_cont("%u", (unsigned)*ptr.p_u8);
240                 break;
241         case V4L2_CTRL_TYPE_U16:
242                 pr_cont("%u", (unsigned)*ptr.p_u16);
243                 break;
244         case V4L2_CTRL_TYPE_U32:
245                 pr_cont("%u", (unsigned)*ptr.p_u32);
246                 break;
247         case V4L2_CTRL_TYPE_H264_SPS:
248                 pr_cont("H264_SPS");
249                 break;
250         case V4L2_CTRL_TYPE_H264_PPS:
251                 pr_cont("H264_PPS");
252                 break;
253         case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
254                 pr_cont("H264_SCALING_MATRIX");
255                 break;
256         case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
257                 pr_cont("H264_SLICE_PARAMS");
258                 break;
259         case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
260                 pr_cont("H264_DECODE_PARAMS");
261                 break;
262         case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
263                 pr_cont("H264_PRED_WEIGHTS");
264                 break;
265         case V4L2_CTRL_TYPE_FWHT_PARAMS:
266                 pr_cont("FWHT_PARAMS");
267                 break;
268         case V4L2_CTRL_TYPE_VP8_FRAME:
269                 pr_cont("VP8_FRAME");
270                 break;
271         case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
272                 pr_cont("HDR10_CLL_INFO");
273                 break;
274         case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
275                 pr_cont("HDR10_MASTERING_DISPLAY");
276                 break;
277         case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
278                 pr_cont("MPEG2_QUANTISATION");
279                 break;
280         case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
281                 pr_cont("MPEG2_SEQUENCE");
282                 break;
283         case V4L2_CTRL_TYPE_MPEG2_PICTURE:
284                 pr_cont("MPEG2_PICTURE");
285                 break;
286         default:
287                 pr_cont("unknown type %d", ctrl->type);
288                 break;
289         }
290 }
291
292 /*
293  * Round towards the closest legal value. Be careful when we are
294  * close to the maximum range of the control type to prevent
295  * wrap-arounds.
296  */
297 #define ROUND_TO_RANGE(val, offset_type, ctrl)                  \
298 ({                                                              \
299         offset_type offset;                                     \
300         if ((ctrl)->maximum >= 0 &&                             \
301             val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))   \
302                 val = (ctrl)->maximum;                          \
303         else                                                    \
304                 val += (s32)((ctrl)->step / 2);                 \
305         val = clamp_t(typeof(val), val,                         \
306                       (ctrl)->minimum, (ctrl)->maximum);        \
307         offset = (val) - (ctrl)->minimum;                       \
308         offset = (ctrl)->step * (offset / (u32)(ctrl)->step);   \
309         val = (ctrl)->minimum + offset;                         \
310         0;                                                      \
311 })
312
313 /* Validate a new control */
314
315 #define zero_padding(s) \
316         memset(&(s).padding, 0, sizeof((s).padding))
317 #define zero_reserved(s) \
318         memset(&(s).reserved, 0, sizeof((s).reserved))
319
320 /*
321  * Compound controls validation requires setting unused fields/flags to zero
322  * in order to properly detect unchanged controls with std_equal's memcmp.
323  */
324 static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
325                                  union v4l2_ctrl_ptr ptr)
326 {
327         struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
328         struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
329         struct v4l2_ctrl_vp8_frame *p_vp8_frame;
330         struct v4l2_ctrl_fwht_params *p_fwht_params;
331         struct v4l2_ctrl_h264_sps *p_h264_sps;
332         struct v4l2_ctrl_h264_pps *p_h264_pps;
333         struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
334         struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
335         struct v4l2_ctrl_h264_decode_params *p_h264_dec_params;
336         struct v4l2_ctrl_hevc_sps *p_hevc_sps;
337         struct v4l2_ctrl_hevc_pps *p_hevc_pps;
338         struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
339         struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
340         struct v4l2_ctrl_hevc_decode_params *p_hevc_decode_params;
341         struct v4l2_area *area;
342         void *p = ptr.p + idx * ctrl->elem_size;
343         unsigned int i;
344
345         switch ((u32)ctrl->type) {
346         case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
347                 p_mpeg2_sequence = p;
348
349                 switch (p_mpeg2_sequence->chroma_format) {
350                 case 1: /* 4:2:0 */
351                 case 2: /* 4:2:2 */
352                 case 3: /* 4:4:4 */
353                         break;
354                 default:
355                         return -EINVAL;
356                 }
357                 break;
358
359         case V4L2_CTRL_TYPE_MPEG2_PICTURE:
360                 p_mpeg2_picture = p;
361
362                 switch (p_mpeg2_picture->intra_dc_precision) {
363                 case 0: /* 8 bits */
364                 case 1: /* 9 bits */
365                 case 2: /* 10 bits */
366                 case 3: /* 11 bits */
367                         break;
368                 default:
369                         return -EINVAL;
370                 }
371
372                 switch (p_mpeg2_picture->picture_structure) {
373                 case V4L2_MPEG2_PIC_TOP_FIELD:
374                 case V4L2_MPEG2_PIC_BOTTOM_FIELD:
375                 case V4L2_MPEG2_PIC_FRAME:
376                         break;
377                 default:
378                         return -EINVAL;
379                 }
380
381                 switch (p_mpeg2_picture->picture_coding_type) {
382                 case V4L2_MPEG2_PIC_CODING_TYPE_I:
383                 case V4L2_MPEG2_PIC_CODING_TYPE_P:
384                 case V4L2_MPEG2_PIC_CODING_TYPE_B:
385                         break;
386                 default:
387                         return -EINVAL;
388                 }
389                 zero_reserved(*p_mpeg2_picture);
390                 break;
391
392         case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
393                 break;
394
395         case V4L2_CTRL_TYPE_FWHT_PARAMS:
396                 p_fwht_params = p;
397                 if (p_fwht_params->version < V4L2_FWHT_VERSION)
398                         return -EINVAL;
399                 if (!p_fwht_params->width || !p_fwht_params->height)
400                         return -EINVAL;
401                 break;
402
403         case V4L2_CTRL_TYPE_H264_SPS:
404                 p_h264_sps = p;
405
406                 /* Some syntax elements are only conditionally valid */
407                 if (p_h264_sps->pic_order_cnt_type != 0) {
408                         p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 = 0;
409                 } else if (p_h264_sps->pic_order_cnt_type != 1) {
410                         p_h264_sps->num_ref_frames_in_pic_order_cnt_cycle = 0;
411                         p_h264_sps->offset_for_non_ref_pic = 0;
412                         p_h264_sps->offset_for_top_to_bottom_field = 0;
413                         memset(&p_h264_sps->offset_for_ref_frame, 0,
414                                sizeof(p_h264_sps->offset_for_ref_frame));
415                 }
416
417                 if (!V4L2_H264_SPS_HAS_CHROMA_FORMAT(p_h264_sps)) {
418                         p_h264_sps->chroma_format_idc = 1;
419                         p_h264_sps->bit_depth_luma_minus8 = 0;
420                         p_h264_sps->bit_depth_chroma_minus8 = 0;
421
422                         p_h264_sps->flags &=
423                                 ~V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS;
424
425                         if (p_h264_sps->chroma_format_idc < 3)
426                                 p_h264_sps->flags &=
427                                         ~V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE;
428                 }
429
430                 if (p_h264_sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY)
431                         p_h264_sps->flags &=
432                                 ~V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD;
433
434                 /*
435                  * Chroma 4:2:2 format require at least High 4:2:2 profile.
436                  *
437                  * The H264 specification and well-known parser implementations
438                  * use profile-idc values directly, as that is clearer and
439                  * less ambiguous. We do the same here.
440                  */
441                 if (p_h264_sps->profile_idc < 122 &&
442                     p_h264_sps->chroma_format_idc > 1)
443                         return -EINVAL;
444                 /* Chroma 4:4:4 format require at least High 4:2:2 profile */
445                 if (p_h264_sps->profile_idc < 244 &&
446                     p_h264_sps->chroma_format_idc > 2)
447                         return -EINVAL;
448                 if (p_h264_sps->chroma_format_idc > 3)
449                         return -EINVAL;
450
451                 if (p_h264_sps->bit_depth_luma_minus8 > 6)
452                         return -EINVAL;
453                 if (p_h264_sps->bit_depth_chroma_minus8 > 6)
454                         return -EINVAL;
455                 if (p_h264_sps->log2_max_frame_num_minus4 > 12)
456                         return -EINVAL;
457                 if (p_h264_sps->pic_order_cnt_type > 2)
458                         return -EINVAL;
459                 if (p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 > 12)
460                         return -EINVAL;
461                 if (p_h264_sps->max_num_ref_frames > V4L2_H264_REF_LIST_LEN)
462                         return -EINVAL;
463                 break;
464
465         case V4L2_CTRL_TYPE_H264_PPS:
466                 p_h264_pps = p;
467
468                 if (p_h264_pps->num_slice_groups_minus1 > 7)
469                         return -EINVAL;
470                 if (p_h264_pps->num_ref_idx_l0_default_active_minus1 >
471                     (V4L2_H264_REF_LIST_LEN - 1))
472                         return -EINVAL;
473                 if (p_h264_pps->num_ref_idx_l1_default_active_minus1 >
474                     (V4L2_H264_REF_LIST_LEN - 1))
475                         return -EINVAL;
476                 if (p_h264_pps->weighted_bipred_idc > 2)
477                         return -EINVAL;
478                 /*
479                  * pic_init_qp_minus26 shall be in the range of
480                  * -(26 + QpBdOffset_y) to +25, inclusive,
481                  *  where QpBdOffset_y is 6 * bit_depth_luma_minus8
482                  */
483                 if (p_h264_pps->pic_init_qp_minus26 < -62 ||
484                     p_h264_pps->pic_init_qp_minus26 > 25)
485                         return -EINVAL;
486                 if (p_h264_pps->pic_init_qs_minus26 < -26 ||
487                     p_h264_pps->pic_init_qs_minus26 > 25)
488                         return -EINVAL;
489                 if (p_h264_pps->chroma_qp_index_offset < -12 ||
490                     p_h264_pps->chroma_qp_index_offset > 12)
491                         return -EINVAL;
492                 if (p_h264_pps->second_chroma_qp_index_offset < -12 ||
493                     p_h264_pps->second_chroma_qp_index_offset > 12)
494                         return -EINVAL;
495                 break;
496
497         case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
498                 break;
499
500         case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
501                 p_h264_pred_weights = p;
502
503                 if (p_h264_pred_weights->luma_log2_weight_denom > 7)
504                         return -EINVAL;
505                 if (p_h264_pred_weights->chroma_log2_weight_denom > 7)
506                         return -EINVAL;
507                 break;
508
509         case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
510                 p_h264_slice_params = p;
511
512                 if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
513                         p_h264_slice_params->flags &=
514                                 ~V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED;
515
516                 if (p_h264_slice_params->colour_plane_id > 2)
517                         return -EINVAL;
518                 if (p_h264_slice_params->cabac_init_idc > 2)
519                         return -EINVAL;
520                 if (p_h264_slice_params->disable_deblocking_filter_idc > 2)
521                         return -EINVAL;
522                 if (p_h264_slice_params->slice_alpha_c0_offset_div2 < -6 ||
523                     p_h264_slice_params->slice_alpha_c0_offset_div2 > 6)
524                         return -EINVAL;
525                 if (p_h264_slice_params->slice_beta_offset_div2 < -6 ||
526                     p_h264_slice_params->slice_beta_offset_div2 > 6)
527                         return -EINVAL;
528
529                 if (p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_I ||
530                     p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_SI)
531                         p_h264_slice_params->num_ref_idx_l0_active_minus1 = 0;
532                 if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
533                         p_h264_slice_params->num_ref_idx_l1_active_minus1 = 0;
534
535                 if (p_h264_slice_params->num_ref_idx_l0_active_minus1 >
536                     (V4L2_H264_REF_LIST_LEN - 1))
537                         return -EINVAL;
538                 if (p_h264_slice_params->num_ref_idx_l1_active_minus1 >
539                     (V4L2_H264_REF_LIST_LEN - 1))
540                         return -EINVAL;
541                 zero_reserved(*p_h264_slice_params);
542                 break;
543
544         case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
545                 p_h264_dec_params = p;
546
547                 if (p_h264_dec_params->nal_ref_idc > 3)
548                         return -EINVAL;
549                 for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
550                         struct v4l2_h264_dpb_entry *dpb_entry =
551                                 &p_h264_dec_params->dpb[i];
552
553                         zero_reserved(*dpb_entry);
554                 }
555                 zero_reserved(*p_h264_dec_params);
556                 break;
557
558         case V4L2_CTRL_TYPE_VP8_FRAME:
559                 p_vp8_frame = p;
560
561                 switch (p_vp8_frame->num_dct_parts) {
562                 case 1:
563                 case 2:
564                 case 4:
565                 case 8:
566                         break;
567                 default:
568                         return -EINVAL;
569                 }
570                 zero_padding(p_vp8_frame->segment);
571                 zero_padding(p_vp8_frame->lf);
572                 zero_padding(p_vp8_frame->quant);
573                 zero_padding(p_vp8_frame->entropy);
574                 zero_padding(p_vp8_frame->coder_state);
575                 break;
576
577         case V4L2_CTRL_TYPE_HEVC_SPS:
578                 p_hevc_sps = p;
579
580                 if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
581                         p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
582                         p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
583                         p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
584                         p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
585                 }
586
587                 if (!(p_hevc_sps->flags &
588                       V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
589                         p_hevc_sps->num_long_term_ref_pics_sps = 0;
590                 break;
591
592         case V4L2_CTRL_TYPE_HEVC_PPS:
593                 p_hevc_pps = p;
594
595                 if (!(p_hevc_pps->flags &
596                       V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
597                         p_hevc_pps->diff_cu_qp_delta_depth = 0;
598
599                 if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
600                         p_hevc_pps->num_tile_columns_minus1 = 0;
601                         p_hevc_pps->num_tile_rows_minus1 = 0;
602                         memset(&p_hevc_pps->column_width_minus1, 0,
603                                sizeof(p_hevc_pps->column_width_minus1));
604                         memset(&p_hevc_pps->row_height_minus1, 0,
605                                sizeof(p_hevc_pps->row_height_minus1));
606
607                         p_hevc_pps->flags &=
608                                 ~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
609                 }
610
611                 if (p_hevc_pps->flags &
612                     V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
613                         p_hevc_pps->pps_beta_offset_div2 = 0;
614                         p_hevc_pps->pps_tc_offset_div2 = 0;
615                 }
616
617                 zero_padding(*p_hevc_pps);
618                 break;
619
620         case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
621                 p_hevc_decode_params = p;
622
623                 if (p_hevc_decode_params->num_active_dpb_entries >
624                     V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
625                         return -EINVAL;
626
627                 for (i = 0; i < p_hevc_decode_params->num_active_dpb_entries;
628                      i++) {
629                         struct v4l2_hevc_dpb_entry *dpb_entry =
630                                 &p_hevc_decode_params->dpb[i];
631
632                         zero_padding(*dpb_entry);
633                 }
634                 break;
635
636         case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
637                 p_hevc_slice_params = p;
638
639                 zero_padding(p_hevc_slice_params->pred_weight_table);
640                 zero_padding(*p_hevc_slice_params);
641                 break;
642
643         case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
644                 break;
645
646         case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
647                 p_hdr10_mastering = p;
648
649                 for (i = 0; i < 3; ++i) {
650                         if (p_hdr10_mastering->display_primaries_x[i] <
651                                 V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
652                             p_hdr10_mastering->display_primaries_x[i] >
653                                 V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
654                             p_hdr10_mastering->display_primaries_y[i] <
655                                 V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
656                             p_hdr10_mastering->display_primaries_y[i] >
657                                 V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
658                                 return -EINVAL;
659                 }
660
661                 if (p_hdr10_mastering->white_point_x <
662                         V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
663                     p_hdr10_mastering->white_point_x >
664                         V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
665                     p_hdr10_mastering->white_point_y <
666                         V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
667                     p_hdr10_mastering->white_point_y >
668                         V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
669                         return -EINVAL;
670
671                 if (p_hdr10_mastering->max_display_mastering_luminance <
672                         V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
673                     p_hdr10_mastering->max_display_mastering_luminance >
674                         V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
675                     p_hdr10_mastering->min_display_mastering_luminance <
676                         V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
677                     p_hdr10_mastering->min_display_mastering_luminance >
678                         V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
679                         return -EINVAL;
680
681                 /* The following restriction comes from ITU-T Rec. H.265 spec */
682                 if (p_hdr10_mastering->max_display_mastering_luminance ==
683                         V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
684                     p_hdr10_mastering->min_display_mastering_luminance ==
685                         V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
686                         return -EINVAL;
687
688                 break;
689
690         case V4L2_CTRL_TYPE_AREA:
691                 area = p;
692                 if (!area->width || !area->height)
693                         return -EINVAL;
694                 break;
695
696         default:
697                 return -EINVAL;
698         }
699
700         return 0;
701 }
702
703 static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
704                         union v4l2_ctrl_ptr ptr)
705 {
706         size_t len;
707         u64 offset;
708         s64 val;
709
710         switch ((u32)ctrl->type) {
711         case V4L2_CTRL_TYPE_INTEGER:
712                 return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
713         case V4L2_CTRL_TYPE_INTEGER64:
714                 /*
715                  * We can't use the ROUND_TO_RANGE define here due to
716                  * the u64 divide that needs special care.
717                  */
718                 val = ptr.p_s64[idx];
719                 if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
720                         val = ctrl->maximum;
721                 else
722                         val += (s64)(ctrl->step / 2);
723                 val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
724                 offset = val - ctrl->minimum;
725                 do_div(offset, ctrl->step);
726                 ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
727                 return 0;
728         case V4L2_CTRL_TYPE_U8:
729                 return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
730         case V4L2_CTRL_TYPE_U16:
731                 return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
732         case V4L2_CTRL_TYPE_U32:
733                 return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
734
735         case V4L2_CTRL_TYPE_BOOLEAN:
736                 ptr.p_s32[idx] = !!ptr.p_s32[idx];
737                 return 0;
738
739         case V4L2_CTRL_TYPE_MENU:
740         case V4L2_CTRL_TYPE_INTEGER_MENU:
741                 if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
742                         return -ERANGE;
743                 if (ptr.p_s32[idx] < BITS_PER_LONG_LONG &&
744                     (ctrl->menu_skip_mask & BIT_ULL(ptr.p_s32[idx])))
745                         return -EINVAL;
746                 if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
747                     ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
748                         return -EINVAL;
749                 return 0;
750
751         case V4L2_CTRL_TYPE_BITMASK:
752                 ptr.p_s32[idx] &= ctrl->maximum;
753                 return 0;
754
755         case V4L2_CTRL_TYPE_BUTTON:
756         case V4L2_CTRL_TYPE_CTRL_CLASS:
757                 ptr.p_s32[idx] = 0;
758                 return 0;
759
760         case V4L2_CTRL_TYPE_STRING:
761                 idx *= ctrl->elem_size;
762                 len = strlen(ptr.p_char + idx);
763                 if (len < ctrl->minimum)
764                         return -ERANGE;
765                 if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
766                         return -ERANGE;
767                 return 0;
768
769         default:
770                 return std_validate_compound(ctrl, idx, ptr);
771         }
772 }
773
774 static const struct v4l2_ctrl_type_ops std_type_ops = {
775         .equal = std_equal,
776         .init = std_init,
777         .log = std_log,
778         .validate = std_validate,
779 };
780
781 void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
782 {
783         if (!ctrl)
784                 return;
785         if (!notify) {
786                 ctrl->call_notify = 0;
787                 return;
788         }
789         if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
790                 return;
791         ctrl->handler->notify = notify;
792         ctrl->handler->notify_priv = priv;
793         ctrl->call_notify = 1;
794 }
795 EXPORT_SYMBOL(v4l2_ctrl_notify);
796
797 /* Copy the one value to another. */
798 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
799                        union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
800 {
801         if (ctrl == NULL)
802                 return;
803         memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
804 }
805
806 /* Copy the new value to the current value. */
807 void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
808 {
809         bool changed;
810
811         if (ctrl == NULL)
812                 return;
813
814         /* has_changed is set by cluster_changed */
815         changed = ctrl->has_changed;
816         if (changed)
817                 ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
818
819         if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
820                 /* Note: CH_FLAGS is only set for auto clusters. */
821                 ctrl->flags &=
822                         ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
823                 if (!is_cur_manual(ctrl->cluster[0])) {
824                         ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
825                         if (ctrl->cluster[0]->has_volatiles)
826                                 ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
827                 }
828                 fh = NULL;
829         }
830         if (changed || ch_flags) {
831                 /* If a control was changed that was not one of the controls
832                    modified by the application, then send the event to all. */
833                 if (!ctrl->is_new)
834                         fh = NULL;
835                 send_event(fh, ctrl,
836                         (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
837                 if (ctrl->call_notify && changed && ctrl->handler->notify)
838                         ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
839         }
840 }
841
842 /* Copy the current value to the new value */
843 void cur_to_new(struct v4l2_ctrl *ctrl)
844 {
845         if (ctrl == NULL)
846                 return;
847         ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
848 }
849
850 /* Copy the new value to the request value */
851 void new_to_req(struct v4l2_ctrl_ref *ref)
852 {
853         if (!ref)
854                 return;
855         ptr_to_ptr(ref->ctrl, ref->ctrl->p_new, ref->p_req);
856         ref->valid_p_req = true;
857 }
858
859 /* Copy the current value to the request value */
860 void cur_to_req(struct v4l2_ctrl_ref *ref)
861 {
862         if (!ref)
863                 return;
864         ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->p_req);
865         ref->valid_p_req = true;
866 }
867
868 /* Copy the request value to the new value */
869 void req_to_new(struct v4l2_ctrl_ref *ref)
870 {
871         if (!ref)
872                 return;
873         if (ref->valid_p_req)
874                 ptr_to_ptr(ref->ctrl, ref->p_req, ref->ctrl->p_new);
875         else
876                 ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->ctrl->p_new);
877 }
878
879 /* Control range checking */
880 int check_range(enum v4l2_ctrl_type type,
881                 s64 min, s64 max, u64 step, s64 def)
882 {
883         switch (type) {
884         case V4L2_CTRL_TYPE_BOOLEAN:
885                 if (step != 1 || max > 1 || min < 0)
886                         return -ERANGE;
887                 fallthrough;
888         case V4L2_CTRL_TYPE_U8:
889         case V4L2_CTRL_TYPE_U16:
890         case V4L2_CTRL_TYPE_U32:
891         case V4L2_CTRL_TYPE_INTEGER:
892         case V4L2_CTRL_TYPE_INTEGER64:
893                 if (step == 0 || min > max || def < min || def > max)
894                         return -ERANGE;
895                 return 0;
896         case V4L2_CTRL_TYPE_BITMASK:
897                 if (step || min || !max || (def & ~max))
898                         return -ERANGE;
899                 return 0;
900         case V4L2_CTRL_TYPE_MENU:
901         case V4L2_CTRL_TYPE_INTEGER_MENU:
902                 if (min > max || def < min || def > max)
903                         return -ERANGE;
904                 /* Note: step == menu_skip_mask for menu controls.
905                    So here we check if the default value is masked out. */
906                 if (step && ((1 << def) & step))
907                         return -EINVAL;
908                 return 0;
909         case V4L2_CTRL_TYPE_STRING:
910                 if (min > max || min < 0 || step < 1 || def)
911                         return -ERANGE;
912                 return 0;
913         default:
914                 return 0;
915         }
916 }
917
918 /* Validate a new control */
919 int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
920 {
921         unsigned idx;
922         int err = 0;
923
924         for (idx = 0; !err && idx < ctrl->elems; idx++)
925                 err = ctrl->type_ops->validate(ctrl, idx, p_new);
926         return err;
927 }
928
929 /* Set the handler's error code if it wasn't set earlier already */
930 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
931 {
932         if (hdl->error == 0)
933                 hdl->error = err;
934         return err;
935 }
936
937 /* Initialize the handler */
938 int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
939                                  unsigned nr_of_controls_hint,
940                                  struct lock_class_key *key, const char *name)
941 {
942         mutex_init(&hdl->_lock);
943         hdl->lock = &hdl->_lock;
944         lockdep_set_class_and_name(hdl->lock, key, name);
945         INIT_LIST_HEAD(&hdl->ctrls);
946         INIT_LIST_HEAD(&hdl->ctrl_refs);
947         hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
948         hdl->buckets = kvmalloc_array(hdl->nr_of_buckets,
949                                       sizeof(hdl->buckets[0]),
950                                       GFP_KERNEL | __GFP_ZERO);
951         hdl->error = hdl->buckets ? 0 : -ENOMEM;
952         v4l2_ctrl_handler_init_request(hdl);
953         return hdl->error;
954 }
955 EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
956
957 /* Free all controls and control refs */
958 void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
959 {
960         struct v4l2_ctrl_ref *ref, *next_ref;
961         struct v4l2_ctrl *ctrl, *next_ctrl;
962         struct v4l2_subscribed_event *sev, *next_sev;
963
964         if (hdl == NULL || hdl->buckets == NULL)
965                 return;
966
967         v4l2_ctrl_handler_free_request(hdl);
968
969         mutex_lock(hdl->lock);
970         /* Free all nodes */
971         list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
972                 list_del(&ref->node);
973                 kfree(ref);
974         }
975         /* Free all controls owned by the handler */
976         list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
977                 list_del(&ctrl->node);
978                 list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
979                         list_del(&sev->node);
980                 kvfree(ctrl);
981         }
982         kvfree(hdl->buckets);
983         hdl->buckets = NULL;
984         hdl->cached = NULL;
985         hdl->error = 0;
986         mutex_unlock(hdl->lock);
987         mutex_destroy(&hdl->_lock);
988 }
989 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
990
991 /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
992    be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
993    with applications that do not use the NEXT_CTRL flag.
994
995    We just find the n-th private user control. It's O(N), but that should not
996    be an issue in this particular case. */
997 static struct v4l2_ctrl_ref *find_private_ref(
998                 struct v4l2_ctrl_handler *hdl, u32 id)
999 {
1000         struct v4l2_ctrl_ref *ref;
1001
1002         id -= V4L2_CID_PRIVATE_BASE;
1003         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1004                 /* Search for private user controls that are compatible with
1005                    VIDIOC_G/S_CTRL. */
1006                 if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1007                     V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1008                         if (!ref->ctrl->is_int)
1009                                 continue;
1010                         if (id == 0)
1011                                 return ref;
1012                         id--;
1013                 }
1014         }
1015         return NULL;
1016 }
1017
1018 /* Find a control with the given ID. */
1019 struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1020 {
1021         struct v4l2_ctrl_ref *ref;
1022         int bucket;
1023
1024         id &= V4L2_CTRL_ID_MASK;
1025
1026         /* Old-style private controls need special handling */
1027         if (id >= V4L2_CID_PRIVATE_BASE)
1028                 return find_private_ref(hdl, id);
1029         bucket = id % hdl->nr_of_buckets;
1030
1031         /* Simple optimization: cache the last control found */
1032         if (hdl->cached && hdl->cached->ctrl->id == id)
1033                 return hdl->cached;
1034
1035         /* Not in cache, search the hash */
1036         ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1037         while (ref && ref->ctrl->id != id)
1038                 ref = ref->next;
1039
1040         if (ref)
1041                 hdl->cached = ref; /* cache it! */
1042         return ref;
1043 }
1044
1045 /* Find a control with the given ID. Take the handler's lock first. */
1046 struct v4l2_ctrl_ref *find_ref_lock(struct v4l2_ctrl_handler *hdl, u32 id)
1047 {
1048         struct v4l2_ctrl_ref *ref = NULL;
1049
1050         if (hdl) {
1051                 mutex_lock(hdl->lock);
1052                 ref = find_ref(hdl, id);
1053                 mutex_unlock(hdl->lock);
1054         }
1055         return ref;
1056 }
1057
1058 /* Find a control with the given ID. */
1059 struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1060 {
1061         struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1062
1063         return ref ? ref->ctrl : NULL;
1064 }
1065 EXPORT_SYMBOL(v4l2_ctrl_find);
1066
1067 /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
1068 int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1069                     struct v4l2_ctrl *ctrl,
1070                     struct v4l2_ctrl_ref **ctrl_ref,
1071                     bool from_other_dev, bool allocate_req)
1072 {
1073         struct v4l2_ctrl_ref *ref;
1074         struct v4l2_ctrl_ref *new_ref;
1075         u32 id = ctrl->id;
1076         u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
1077         int bucket = id % hdl->nr_of_buckets;   /* which bucket to use */
1078         unsigned int size_extra_req = 0;
1079
1080         if (ctrl_ref)
1081                 *ctrl_ref = NULL;
1082
1083         /*
1084          * Automatically add the control class if it is not yet present and
1085          * the new control is not a compound control.
1086          */
1087         if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
1088             id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1089                 if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1090                         return hdl->error;
1091
1092         if (hdl->error)
1093                 return hdl->error;
1094
1095         if (allocate_req)
1096                 size_extra_req = ctrl->elems * ctrl->elem_size;
1097         new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
1098         if (!new_ref)
1099                 return handler_set_err(hdl, -ENOMEM);
1100         new_ref->ctrl = ctrl;
1101         new_ref->from_other_dev = from_other_dev;
1102         if (size_extra_req)
1103                 new_ref->p_req.p = &new_ref[1];
1104
1105         INIT_LIST_HEAD(&new_ref->node);
1106
1107         mutex_lock(hdl->lock);
1108
1109         /* Add immediately at the end of the list if the list is empty, or if
1110            the last element in the list has a lower ID.
1111            This ensures that when elements are added in ascending order the
1112            insertion is an O(1) operation. */
1113         if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1114                 list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1115                 goto insert_in_hash;
1116         }
1117
1118         /* Find insert position in sorted list */
1119         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1120                 if (ref->ctrl->id < id)
1121                         continue;
1122                 /* Don't add duplicates */
1123                 if (ref->ctrl->id == id) {
1124                         kfree(new_ref);
1125                         goto unlock;
1126                 }
1127                 list_add(&new_ref->node, ref->node.prev);
1128                 break;
1129         }
1130
1131 insert_in_hash:
1132         /* Insert the control node in the hash */
1133         new_ref->next = hdl->buckets[bucket];
1134         hdl->buckets[bucket] = new_ref;
1135         if (ctrl_ref)
1136                 *ctrl_ref = new_ref;
1137         if (ctrl->handler == hdl) {
1138                 /* By default each control starts in a cluster of its own.
1139                  * new_ref->ctrl is basically a cluster array with one
1140                  * element, so that's perfect to use as the cluster pointer.
1141                  * But only do this for the handler that owns the control.
1142                  */
1143                 ctrl->cluster = &new_ref->ctrl;
1144                 ctrl->ncontrols = 1;
1145         }
1146
1147 unlock:
1148         mutex_unlock(hdl->lock);
1149         return 0;
1150 }
1151
1152 /* Add a new control */
1153 static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1154                         const struct v4l2_ctrl_ops *ops,
1155                         const struct v4l2_ctrl_type_ops *type_ops,
1156                         u32 id, const char *name, enum v4l2_ctrl_type type,
1157                         s64 min, s64 max, u64 step, s64 def,
1158                         const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
1159                         u32 flags, const char * const *qmenu,
1160                         const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
1161                         void *priv)
1162 {
1163         struct v4l2_ctrl *ctrl;
1164         unsigned sz_extra;
1165         unsigned nr_of_dims = 0;
1166         unsigned elems = 1;
1167         bool is_array;
1168         unsigned tot_ctrl_size;
1169         unsigned idx;
1170         void *data;
1171         int err;
1172
1173         if (hdl->error)
1174                 return NULL;
1175
1176         while (dims && dims[nr_of_dims]) {
1177                 elems *= dims[nr_of_dims];
1178                 nr_of_dims++;
1179                 if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
1180                         break;
1181         }
1182         is_array = nr_of_dims > 0;
1183
1184         /* Prefill elem_size for all types handled by std_type_ops */
1185         switch ((u32)type) {
1186         case V4L2_CTRL_TYPE_INTEGER64:
1187                 elem_size = sizeof(s64);
1188                 break;
1189         case V4L2_CTRL_TYPE_STRING:
1190                 elem_size = max + 1;
1191                 break;
1192         case V4L2_CTRL_TYPE_U8:
1193                 elem_size = sizeof(u8);
1194                 break;
1195         case V4L2_CTRL_TYPE_U16:
1196                 elem_size = sizeof(u16);
1197                 break;
1198         case V4L2_CTRL_TYPE_U32:
1199                 elem_size = sizeof(u32);
1200                 break;
1201         case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
1202                 elem_size = sizeof(struct v4l2_ctrl_mpeg2_sequence);
1203                 break;
1204         case V4L2_CTRL_TYPE_MPEG2_PICTURE:
1205                 elem_size = sizeof(struct v4l2_ctrl_mpeg2_picture);
1206                 break;
1207         case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
1208                 elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantisation);
1209                 break;
1210         case V4L2_CTRL_TYPE_FWHT_PARAMS:
1211                 elem_size = sizeof(struct v4l2_ctrl_fwht_params);
1212                 break;
1213         case V4L2_CTRL_TYPE_H264_SPS:
1214                 elem_size = sizeof(struct v4l2_ctrl_h264_sps);
1215                 break;
1216         case V4L2_CTRL_TYPE_H264_PPS:
1217                 elem_size = sizeof(struct v4l2_ctrl_h264_pps);
1218                 break;
1219         case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1220                 elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
1221                 break;
1222         case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1223                 elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
1224                 break;
1225         case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1226                 elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
1227                 break;
1228         case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
1229                 elem_size = sizeof(struct v4l2_ctrl_h264_pred_weights);
1230                 break;
1231         case V4L2_CTRL_TYPE_VP8_FRAME:
1232                 elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
1233                 break;
1234         case V4L2_CTRL_TYPE_HEVC_SPS:
1235                 elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
1236                 break;
1237         case V4L2_CTRL_TYPE_HEVC_PPS:
1238                 elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
1239                 break;
1240         case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
1241                 elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
1242                 break;
1243         case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
1244                 elem_size = sizeof(struct v4l2_ctrl_hevc_decode_params);
1245                 break;
1246         case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
1247                 elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
1248                 break;
1249         case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
1250                 elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
1251                 break;
1252         case V4L2_CTRL_TYPE_AREA:
1253                 elem_size = sizeof(struct v4l2_area);
1254                 break;
1255         default:
1256                 if (type < V4L2_CTRL_COMPOUND_TYPES)
1257                         elem_size = sizeof(s32);
1258                 break;
1259         }
1260         tot_ctrl_size = elem_size * elems;
1261
1262         /* Sanity checks */
1263         if (id == 0 || name == NULL || !elem_size ||
1264             id >= V4L2_CID_PRIVATE_BASE ||
1265             (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1266             (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
1267                 handler_set_err(hdl, -ERANGE);
1268                 return NULL;
1269         }
1270         err = check_range(type, min, max, step, def);
1271         if (err) {
1272                 handler_set_err(hdl, err);
1273                 return NULL;
1274         }
1275         if (is_array &&
1276             (type == V4L2_CTRL_TYPE_BUTTON ||
1277              type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
1278                 handler_set_err(hdl, -EINVAL);
1279                 return NULL;
1280         }
1281
1282         sz_extra = 0;
1283         if (type == V4L2_CTRL_TYPE_BUTTON)
1284                 flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1285                         V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1286         else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
1287                 flags |= V4L2_CTRL_FLAG_READ_ONLY;
1288         else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
1289                  type == V4L2_CTRL_TYPE_STRING ||
1290                  type >= V4L2_CTRL_COMPOUND_TYPES ||
1291                  is_array)
1292                 sz_extra += 2 * tot_ctrl_size;
1293
1294         if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
1295                 sz_extra += elem_size;
1296
1297         ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
1298         if (ctrl == NULL) {
1299                 handler_set_err(hdl, -ENOMEM);
1300                 return NULL;
1301         }
1302
1303         INIT_LIST_HEAD(&ctrl->node);
1304         INIT_LIST_HEAD(&ctrl->ev_subs);
1305         ctrl->handler = hdl;
1306         ctrl->ops = ops;
1307         ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
1308         ctrl->id = id;
1309         ctrl->name = name;
1310         ctrl->type = type;
1311         ctrl->flags = flags;
1312         ctrl->minimum = min;
1313         ctrl->maximum = max;
1314         ctrl->step = step;
1315         ctrl->default_value = def;
1316         ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
1317         ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
1318         ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
1319         ctrl->is_array = is_array;
1320         ctrl->elems = elems;
1321         ctrl->nr_of_dims = nr_of_dims;
1322         if (nr_of_dims)
1323                 memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
1324         ctrl->elem_size = elem_size;
1325         if (type == V4L2_CTRL_TYPE_MENU)
1326                 ctrl->qmenu = qmenu;
1327         else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
1328                 ctrl->qmenu_int = qmenu_int;
1329         ctrl->priv = priv;
1330         ctrl->cur.val = ctrl->val = def;
1331         data = &ctrl[1];
1332
1333         if (!ctrl->is_int) {
1334                 ctrl->p_new.p = data;
1335                 ctrl->p_cur.p = data + tot_ctrl_size;
1336         } else {
1337                 ctrl->p_new.p = &ctrl->val;
1338                 ctrl->p_cur.p = &ctrl->cur.val;
1339         }
1340
1341         if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
1342                 ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
1343                 memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
1344         }
1345
1346         for (idx = 0; idx < elems; idx++) {
1347                 ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
1348                 ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
1349         }
1350
1351         if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
1352                 kvfree(ctrl);
1353                 return NULL;
1354         }
1355         mutex_lock(hdl->lock);
1356         list_add_tail(&ctrl->node, &hdl->ctrls);
1357         mutex_unlock(hdl->lock);
1358         return ctrl;
1359 }
1360
1361 struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
1362                         const struct v4l2_ctrl_config *cfg, void *priv)
1363 {
1364         bool is_menu;
1365         struct v4l2_ctrl *ctrl;
1366         const char *name = cfg->name;
1367         const char * const *qmenu = cfg->qmenu;
1368         const s64 *qmenu_int = cfg->qmenu_int;
1369         enum v4l2_ctrl_type type = cfg->type;
1370         u32 flags = cfg->flags;
1371         s64 min = cfg->min;
1372         s64 max = cfg->max;
1373         u64 step = cfg->step;
1374         s64 def = cfg->def;
1375
1376         if (name == NULL)
1377                 v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
1378                                                                 &def, &flags);
1379
1380         is_menu = (type == V4L2_CTRL_TYPE_MENU ||
1381                    type == V4L2_CTRL_TYPE_INTEGER_MENU);
1382         if (is_menu)
1383                 WARN_ON(step);
1384         else
1385                 WARN_ON(cfg->menu_skip_mask);
1386         if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
1387                 qmenu = v4l2_ctrl_get_menu(cfg->id);
1388         } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
1389                 handler_set_err(hdl, -EINVAL);
1390                 return NULL;
1391         }
1392
1393         ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
1394                         type, min, max,
1395                         is_menu ? cfg->menu_skip_mask : step, def,
1396                         cfg->dims, cfg->elem_size,
1397                         flags, qmenu, qmenu_int, cfg->p_def, priv);
1398         if (ctrl)
1399                 ctrl->is_private = cfg->is_private;
1400         return ctrl;
1401 }
1402 EXPORT_SYMBOL(v4l2_ctrl_new_custom);
1403
1404 /* Helper function for standard non-menu controls */
1405 struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
1406                         const struct v4l2_ctrl_ops *ops,
1407                         u32 id, s64 min, s64 max, u64 step, s64 def)
1408 {
1409         const char *name;
1410         enum v4l2_ctrl_type type;
1411         u32 flags;
1412
1413         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1414         if (type == V4L2_CTRL_TYPE_MENU ||
1415             type == V4L2_CTRL_TYPE_INTEGER_MENU ||
1416             type >= V4L2_CTRL_COMPOUND_TYPES) {
1417                 handler_set_err(hdl, -EINVAL);
1418                 return NULL;
1419         }
1420         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1421                              min, max, step, def, NULL, 0,
1422                              flags, NULL, NULL, ptr_null, NULL);
1423 }
1424 EXPORT_SYMBOL(v4l2_ctrl_new_std);
1425
1426 /* Helper function for standard menu controls */
1427 struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
1428                         const struct v4l2_ctrl_ops *ops,
1429                         u32 id, u8 _max, u64 mask, u8 _def)
1430 {
1431         const char * const *qmenu = NULL;
1432         const s64 *qmenu_int = NULL;
1433         unsigned int qmenu_int_len = 0;
1434         const char *name;
1435         enum v4l2_ctrl_type type;
1436         s64 min;
1437         s64 max = _max;
1438         s64 def = _def;
1439         u64 step;
1440         u32 flags;
1441
1442         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1443
1444         if (type == V4L2_CTRL_TYPE_MENU)
1445                 qmenu = v4l2_ctrl_get_menu(id);
1446         else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
1447                 qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
1448
1449         if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
1450                 handler_set_err(hdl, -EINVAL);
1451                 return NULL;
1452         }
1453         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1454                              0, max, mask, def, NULL, 0,
1455                              flags, qmenu, qmenu_int, ptr_null, NULL);
1456 }
1457 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
1458
1459 /* Helper function for standard menu controls with driver defined menu */
1460 struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
1461                         const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
1462                         u64 mask, u8 _def, const char * const *qmenu)
1463 {
1464         enum v4l2_ctrl_type type;
1465         const char *name;
1466         u32 flags;
1467         u64 step;
1468         s64 min;
1469         s64 max = _max;
1470         s64 def = _def;
1471
1472         /* v4l2_ctrl_new_std_menu_items() should only be called for
1473          * standard controls without a standard menu.
1474          */
1475         if (v4l2_ctrl_get_menu(id)) {
1476                 handler_set_err(hdl, -EINVAL);
1477                 return NULL;
1478         }
1479
1480         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1481         if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
1482                 handler_set_err(hdl, -EINVAL);
1483                 return NULL;
1484         }
1485         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1486                              0, max, mask, def, NULL, 0,
1487                              flags, qmenu, NULL, ptr_null, NULL);
1488
1489 }
1490 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
1491
1492 /* Helper function for standard compound controls */
1493 struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
1494                                 const struct v4l2_ctrl_ops *ops, u32 id,
1495                                 const union v4l2_ctrl_ptr p_def)
1496 {
1497         const char *name;
1498         enum v4l2_ctrl_type type;
1499         u32 flags;
1500         s64 min, max, step, def;
1501
1502         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1503         if (type < V4L2_CTRL_COMPOUND_TYPES) {
1504                 handler_set_err(hdl, -EINVAL);
1505                 return NULL;
1506         }
1507         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1508                              min, max, step, def, NULL, 0,
1509                              flags, NULL, NULL, p_def, NULL);
1510 }
1511 EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
1512
1513 /* Helper function for standard integer menu controls */
1514 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
1515                         const struct v4l2_ctrl_ops *ops,
1516                         u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
1517 {
1518         const char *name;
1519         enum v4l2_ctrl_type type;
1520         s64 min;
1521         u64 step;
1522         s64 max = _max;
1523         s64 def = _def;
1524         u32 flags;
1525
1526         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1527         if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
1528                 handler_set_err(hdl, -EINVAL);
1529                 return NULL;
1530         }
1531         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1532                              0, max, 0, def, NULL, 0,
1533                              flags, NULL, qmenu_int, ptr_null, NULL);
1534 }
1535 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
1536
1537 /* Add the controls from another handler to our own. */
1538 int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
1539                           struct v4l2_ctrl_handler *add,
1540                           bool (*filter)(const struct v4l2_ctrl *ctrl),
1541                           bool from_other_dev)
1542 {
1543         struct v4l2_ctrl_ref *ref;
1544         int ret = 0;
1545
1546         /* Do nothing if either handler is NULL or if they are the same */
1547         if (!hdl || !add || hdl == add)
1548                 return 0;
1549         if (hdl->error)
1550                 return hdl->error;
1551         mutex_lock(add->lock);
1552         list_for_each_entry(ref, &add->ctrl_refs, node) {
1553                 struct v4l2_ctrl *ctrl = ref->ctrl;
1554
1555                 /* Skip handler-private controls. */
1556                 if (ctrl->is_private)
1557                         continue;
1558                 /* And control classes */
1559                 if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1560                         continue;
1561                 /* Filter any unwanted controls */
1562                 if (filter && !filter(ctrl))
1563                         continue;
1564                 ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
1565                 if (ret)
1566                         break;
1567         }
1568         mutex_unlock(add->lock);
1569         return ret;
1570 }
1571 EXPORT_SYMBOL(v4l2_ctrl_add_handler);
1572
1573 bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
1574 {
1575         if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
1576                 return true;
1577         if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
1578                 return true;
1579         switch (ctrl->id) {
1580         case V4L2_CID_AUDIO_MUTE:
1581         case V4L2_CID_AUDIO_VOLUME:
1582         case V4L2_CID_AUDIO_BALANCE:
1583         case V4L2_CID_AUDIO_BASS:
1584         case V4L2_CID_AUDIO_TREBLE:
1585         case V4L2_CID_AUDIO_LOUDNESS:
1586                 return true;
1587         default:
1588                 break;
1589         }
1590         return false;
1591 }
1592 EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
1593
1594 /* Cluster controls */
1595 void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
1596 {
1597         bool has_volatiles = false;
1598         int i;
1599
1600         /* The first control is the master control and it must not be NULL */
1601         if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
1602                 return;
1603
1604         for (i = 0; i < ncontrols; i++) {
1605                 if (controls[i]) {
1606                         controls[i]->cluster = controls;
1607                         controls[i]->ncontrols = ncontrols;
1608                         if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
1609                                 has_volatiles = true;
1610                 }
1611         }
1612         controls[0]->has_volatiles = has_volatiles;
1613 }
1614 EXPORT_SYMBOL(v4l2_ctrl_cluster);
1615
1616 void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
1617                             u8 manual_val, bool set_volatile)
1618 {
1619         struct v4l2_ctrl *master = controls[0];
1620         u32 flag = 0;
1621         int i;
1622
1623         v4l2_ctrl_cluster(ncontrols, controls);
1624         WARN_ON(ncontrols <= 1);
1625         WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
1626         WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
1627         master->is_auto = true;
1628         master->has_volatiles = set_volatile;
1629         master->manual_mode_value = manual_val;
1630         master->flags |= V4L2_CTRL_FLAG_UPDATE;
1631
1632         if (!is_cur_manual(master))
1633                 flag = V4L2_CTRL_FLAG_INACTIVE |
1634                         (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
1635
1636         for (i = 1; i < ncontrols; i++)
1637                 if (controls[i])
1638                         controls[i]->flags |= flag;
1639 }
1640 EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
1641
1642 /*
1643  * Obtain the current volatile values of an autocluster and mark them
1644  * as new.
1645  */
1646 void update_from_auto_cluster(struct v4l2_ctrl *master)
1647 {
1648         int i;
1649
1650         for (i = 1; i < master->ncontrols; i++)
1651                 cur_to_new(master->cluster[i]);
1652         if (!call_op(master, g_volatile_ctrl))
1653                 for (i = 1; i < master->ncontrols; i++)
1654                         if (master->cluster[i])
1655                                 master->cluster[i]->is_new = 1;
1656 }
1657
1658 /*
1659  * Return non-zero if one or more of the controls in the cluster has a new
1660  * value that differs from the current value.
1661  */
1662 static int cluster_changed(struct v4l2_ctrl *master)
1663 {
1664         bool changed = false;
1665         unsigned int idx;
1666         int i;
1667
1668         for (i = 0; i < master->ncontrols; i++) {
1669                 struct v4l2_ctrl *ctrl = master->cluster[i];
1670                 bool ctrl_changed = false;
1671
1672                 if (!ctrl)
1673                         continue;
1674
1675                 if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE) {
1676                         changed = true;
1677                         ctrl_changed = true;
1678                 }
1679
1680                 /*
1681                  * Set has_changed to false to avoid generating
1682                  * the event V4L2_EVENT_CTRL_CH_VALUE
1683                  */
1684                 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
1685                         ctrl->has_changed = false;
1686                         continue;
1687                 }
1688
1689                 for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
1690                         ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
1691                                 ctrl->p_cur, ctrl->p_new);
1692                 ctrl->has_changed = ctrl_changed;
1693                 changed |= ctrl->has_changed;
1694         }
1695         return changed;
1696 }
1697
1698 /*
1699  * Core function that calls try/s_ctrl and ensures that the new value is
1700  * copied to the current value on a set.
1701  * Must be called with ctrl->handler->lock held.
1702  */
1703 int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
1704                        bool set, u32 ch_flags)
1705 {
1706         bool update_flag;
1707         int ret;
1708         int i;
1709
1710         /*
1711          * Go through the cluster and either validate the new value or
1712          * (if no new value was set), copy the current value to the new
1713          * value, ensuring a consistent view for the control ops when
1714          * called.
1715          */
1716         for (i = 0; i < master->ncontrols; i++) {
1717                 struct v4l2_ctrl *ctrl = master->cluster[i];
1718
1719                 if (!ctrl)
1720                         continue;
1721
1722                 if (!ctrl->is_new) {
1723                         cur_to_new(ctrl);
1724                         continue;
1725                 }
1726                 /*
1727                  * Check again: it may have changed since the
1728                  * previous check in try_or_set_ext_ctrls().
1729                  */
1730                 if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
1731                         return -EBUSY;
1732         }
1733
1734         ret = call_op(master, try_ctrl);
1735
1736         /* Don't set if there is no change */
1737         if (ret || !set || !cluster_changed(master))
1738                 return ret;
1739         ret = call_op(master, s_ctrl);
1740         if (ret)
1741                 return ret;
1742
1743         /* If OK, then make the new values permanent. */
1744         update_flag = is_cur_manual(master) != is_new_manual(master);
1745
1746         for (i = 0; i < master->ncontrols; i++) {
1747                 /*
1748                  * If we switch from auto to manual mode, and this cluster
1749                  * contains volatile controls, then all non-master controls
1750                  * have to be marked as changed. The 'new' value contains
1751                  * the volatile value (obtained by update_from_auto_cluster),
1752                  * which now has to become the current value.
1753                  */
1754                 if (i && update_flag && is_new_manual(master) &&
1755                     master->has_volatiles && master->cluster[i])
1756                         master->cluster[i]->has_changed = true;
1757
1758                 new_to_cur(fh, master->cluster[i], ch_flags |
1759                         ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
1760         }
1761         return 0;
1762 }
1763
1764 /* Activate/deactivate a control. */
1765 void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
1766 {
1767         /* invert since the actual flag is called 'inactive' */
1768         bool inactive = !active;
1769         bool old;
1770
1771         if (ctrl == NULL)
1772                 return;
1773
1774         if (inactive)
1775                 /* set V4L2_CTRL_FLAG_INACTIVE */
1776                 old = test_and_set_bit(4, &ctrl->flags);
1777         else
1778                 /* clear V4L2_CTRL_FLAG_INACTIVE */
1779                 old = test_and_clear_bit(4, &ctrl->flags);
1780         if (old != inactive)
1781                 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
1782 }
1783 EXPORT_SYMBOL(v4l2_ctrl_activate);
1784
1785 void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
1786 {
1787         bool old;
1788
1789         if (ctrl == NULL)
1790                 return;
1791
1792         lockdep_assert_held(ctrl->handler->lock);
1793
1794         if (grabbed)
1795                 /* set V4L2_CTRL_FLAG_GRABBED */
1796                 old = test_and_set_bit(1, &ctrl->flags);
1797         else
1798                 /* clear V4L2_CTRL_FLAG_GRABBED */
1799                 old = test_and_clear_bit(1, &ctrl->flags);
1800         if (old != grabbed)
1801                 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
1802 }
1803 EXPORT_SYMBOL(__v4l2_ctrl_grab);
1804
1805 /* Call s_ctrl for all controls owned by the handler */
1806 int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
1807 {
1808         struct v4l2_ctrl *ctrl;
1809         int ret = 0;
1810
1811         if (hdl == NULL)
1812                 return 0;
1813
1814         lockdep_assert_held(hdl->lock);
1815
1816         list_for_each_entry(ctrl, &hdl->ctrls, node)
1817                 ctrl->done = false;
1818
1819         list_for_each_entry(ctrl, &hdl->ctrls, node) {
1820                 struct v4l2_ctrl *master = ctrl->cluster[0];
1821                 int i;
1822
1823                 /* Skip if this control was already handled by a cluster. */
1824                 /* Skip button controls and read-only controls. */
1825                 if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
1826                     (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
1827                         continue;
1828
1829                 for (i = 0; i < master->ncontrols; i++) {
1830                         if (master->cluster[i]) {
1831                                 cur_to_new(master->cluster[i]);
1832                                 master->cluster[i]->is_new = 1;
1833                                 master->cluster[i]->done = true;
1834                         }
1835                 }
1836                 ret = call_op(master, s_ctrl);
1837                 if (ret)
1838                         break;
1839         }
1840
1841         return ret;
1842 }
1843 EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
1844
1845 int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
1846 {
1847         int ret;
1848
1849         if (hdl == NULL)
1850                 return 0;
1851
1852         mutex_lock(hdl->lock);
1853         ret = __v4l2_ctrl_handler_setup(hdl);
1854         mutex_unlock(hdl->lock);
1855
1856         return ret;
1857 }
1858 EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
1859
1860 /* Log the control name and value */
1861 static void log_ctrl(const struct v4l2_ctrl *ctrl,
1862                      const char *prefix, const char *colon)
1863 {
1864         if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
1865                 return;
1866         if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1867                 return;
1868
1869         pr_info("%s%s%s: ", prefix, colon, ctrl->name);
1870
1871         ctrl->type_ops->log(ctrl);
1872
1873         if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
1874                            V4L2_CTRL_FLAG_GRABBED |
1875                            V4L2_CTRL_FLAG_VOLATILE)) {
1876                 if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
1877                         pr_cont(" inactive");
1878                 if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
1879                         pr_cont(" grabbed");
1880                 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
1881                         pr_cont(" volatile");
1882         }
1883         pr_cont("\n");
1884 }
1885
1886 /* Log all controls owned by the handler */
1887 void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
1888                                   const char *prefix)
1889 {
1890         struct v4l2_ctrl *ctrl;
1891         const char *colon = "";
1892         int len;
1893
1894         if (!hdl)
1895                 return;
1896         if (!prefix)
1897                 prefix = "";
1898         len = strlen(prefix);
1899         if (len && prefix[len - 1] != ' ')
1900                 colon = ": ";
1901         mutex_lock(hdl->lock);
1902         list_for_each_entry(ctrl, &hdl->ctrls, node)
1903                 if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
1904                         log_ctrl(ctrl, prefix, colon);
1905         mutex_unlock(hdl->lock);
1906 }
1907 EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
1908
1909 int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
1910                                     const struct v4l2_ctrl_ops *ctrl_ops,
1911                                     const struct v4l2_fwnode_device_properties *p)
1912 {
1913         if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
1914                 u32 orientation_ctrl;
1915
1916                 switch (p->orientation) {
1917                 case V4L2_FWNODE_ORIENTATION_FRONT:
1918                         orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
1919                         break;
1920                 case V4L2_FWNODE_ORIENTATION_BACK:
1921                         orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
1922                         break;
1923                 case V4L2_FWNODE_ORIENTATION_EXTERNAL:
1924                         orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
1925                         break;
1926                 default:
1927                         return -EINVAL;
1928                 }
1929                 if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
1930                                             V4L2_CID_CAMERA_ORIENTATION,
1931                                             V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
1932                                             orientation_ctrl))
1933                         return hdl->error;
1934         }
1935
1936         if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
1937                 if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
1938                                        V4L2_CID_CAMERA_SENSOR_ROTATION,
1939                                        p->rotation, p->rotation, 1,
1940                                        p->rotation))
1941                         return hdl->error;
1942         }
1943
1944         return hdl->error;
1945 }
1946 EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);