Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * V4L2 controls framework core implementation.
0004  *
0005  * Copyright (C) 2010-2021  Hans Verkuil <hverkuil-cisco@xs4all.nl>
0006  */
0007 
0008 #include <linux/export.h>
0009 #include <linux/mm.h>
0010 #include <linux/slab.h>
0011 #include <media/v4l2-ctrls.h>
0012 #include <media/v4l2-event.h>
0013 #include <media/v4l2-fwnode.h>
0014 
0015 #include "v4l2-ctrls-priv.h"
0016 
0017 static const union v4l2_ctrl_ptr ptr_null;
0018 
0019 static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl,
0020                u32 changes)
0021 {
0022     memset(ev, 0, sizeof(*ev));
0023     ev->type = V4L2_EVENT_CTRL;
0024     ev->id = ctrl->id;
0025     ev->u.ctrl.changes = changes;
0026     ev->u.ctrl.type = ctrl->type;
0027     ev->u.ctrl.flags = user_flags(ctrl);
0028     if (ctrl->is_ptr)
0029         ev->u.ctrl.value64 = 0;
0030     else
0031         ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
0032     ev->u.ctrl.minimum = ctrl->minimum;
0033     ev->u.ctrl.maximum = ctrl->maximum;
0034     if (ctrl->type == V4L2_CTRL_TYPE_MENU
0035         || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
0036         ev->u.ctrl.step = 1;
0037     else
0038         ev->u.ctrl.step = ctrl->step;
0039     ev->u.ctrl.default_value = ctrl->default_value;
0040 }
0041 
0042 void send_initial_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl)
0043 {
0044     struct v4l2_event ev;
0045     u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
0046 
0047     if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
0048         changes |= V4L2_EVENT_CTRL_CH_VALUE;
0049     fill_event(&ev, ctrl, changes);
0050     v4l2_event_queue_fh(fh, &ev);
0051 }
0052 
0053 void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
0054 {
0055     struct v4l2_event ev;
0056     struct v4l2_subscribed_event *sev;
0057 
0058     if (list_empty(&ctrl->ev_subs))
0059         return;
0060     fill_event(&ev, ctrl, changes);
0061 
0062     list_for_each_entry(sev, &ctrl->ev_subs, node)
0063         if (sev->fh != fh ||
0064             (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
0065             v4l2_event_queue_fh(sev->fh, &ev);
0066 }
0067 
0068 static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
0069               union v4l2_ctrl_ptr ptr1,
0070               union v4l2_ctrl_ptr ptr2)
0071 {
0072     switch (ctrl->type) {
0073     case V4L2_CTRL_TYPE_BUTTON:
0074         return false;
0075     case V4L2_CTRL_TYPE_STRING:
0076         idx *= ctrl->elem_size;
0077         /* strings are always 0-terminated */
0078         return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
0079     case V4L2_CTRL_TYPE_INTEGER64:
0080         return ptr1.p_s64[idx] == ptr2.p_s64[idx];
0081     case V4L2_CTRL_TYPE_U8:
0082         return ptr1.p_u8[idx] == ptr2.p_u8[idx];
0083     case V4L2_CTRL_TYPE_U16:
0084         return ptr1.p_u16[idx] == ptr2.p_u16[idx];
0085     case V4L2_CTRL_TYPE_U32:
0086         return ptr1.p_u32[idx] == ptr2.p_u32[idx];
0087     default:
0088         if (ctrl->is_int)
0089             return ptr1.p_s32[idx] == ptr2.p_s32[idx];
0090         idx *= ctrl->elem_size;
0091         return !memcmp(ptr1.p_const + idx, ptr2.p_const + idx,
0092                    ctrl->elem_size);
0093     }
0094 }
0095 
0096 /* Default intra MPEG-2 quantisation coefficients, from the specification. */
0097 static const u8 mpeg2_intra_quant_matrix[64] = {
0098     8,  16, 16, 19, 16, 19, 22, 22,
0099     22, 22, 22, 22, 26, 24, 26, 27,
0100     27, 27, 26, 26, 26, 26, 27, 27,
0101     27, 29, 29, 29, 34, 34, 34, 29,
0102     29, 29, 27, 27, 29, 29, 32, 32,
0103     34, 34, 37, 38, 37, 35, 35, 34,
0104     35, 38, 38, 40, 40, 40, 48, 48,
0105     46, 46, 56, 56, 58, 69, 69, 83
0106 };
0107 
0108 static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
0109                   union v4l2_ctrl_ptr ptr)
0110 {
0111     struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
0112     struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
0113     struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quant;
0114     struct v4l2_ctrl_vp8_frame *p_vp8_frame;
0115     struct v4l2_ctrl_vp9_frame *p_vp9_frame;
0116     struct v4l2_ctrl_fwht_params *p_fwht_params;
0117     struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
0118     void *p = ptr.p + idx * ctrl->elem_size;
0119 
0120     if (ctrl->p_def.p_const)
0121         memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
0122     else
0123         memset(p, 0, ctrl->elem_size);
0124 
0125     switch ((u32)ctrl->type) {
0126     case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
0127         p_mpeg2_sequence = p;
0128 
0129         /* 4:2:0 */
0130         p_mpeg2_sequence->chroma_format = 1;
0131         break;
0132     case V4L2_CTRL_TYPE_MPEG2_PICTURE:
0133         p_mpeg2_picture = p;
0134 
0135         /* interlaced top field */
0136         p_mpeg2_picture->picture_structure = V4L2_MPEG2_PIC_TOP_FIELD;
0137         p_mpeg2_picture->picture_coding_type =
0138                     V4L2_MPEG2_PIC_CODING_TYPE_I;
0139         break;
0140     case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
0141         p_mpeg2_quant = p;
0142 
0143         memcpy(p_mpeg2_quant->intra_quantiser_matrix,
0144                mpeg2_intra_quant_matrix,
0145                ARRAY_SIZE(mpeg2_intra_quant_matrix));
0146         /*
0147          * The default non-intra MPEG-2 quantisation
0148          * coefficients are all 16, as per the specification.
0149          */
0150         memset(p_mpeg2_quant->non_intra_quantiser_matrix, 16,
0151                sizeof(p_mpeg2_quant->non_intra_quantiser_matrix));
0152         break;
0153     case V4L2_CTRL_TYPE_VP8_FRAME:
0154         p_vp8_frame = p;
0155         p_vp8_frame->num_dct_parts = 1;
0156         break;
0157     case V4L2_CTRL_TYPE_VP9_FRAME:
0158         p_vp9_frame = p;
0159         p_vp9_frame->profile = 0;
0160         p_vp9_frame->bit_depth = 8;
0161         p_vp9_frame->flags |= V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
0162             V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING;
0163         break;
0164     case V4L2_CTRL_TYPE_FWHT_PARAMS:
0165         p_fwht_params = p;
0166         p_fwht_params->version = V4L2_FWHT_VERSION;
0167         p_fwht_params->width = 1280;
0168         p_fwht_params->height = 720;
0169         p_fwht_params->flags = V4L2_FWHT_FL_PIXENC_YUV |
0170             (2 << V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET);
0171         break;
0172     case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
0173         p_h264_scaling_matrix = p;
0174         /*
0175          * The default (flat) H.264 scaling matrix when none are
0176          * specified in the bitstream, this is according to formulas
0177          *  (7-8) and (7-9) of the specification.
0178          */
0179         memset(p_h264_scaling_matrix, 16, sizeof(*p_h264_scaling_matrix));
0180         break;
0181     }
0182 }
0183 
0184 static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
0185              union v4l2_ctrl_ptr ptr)
0186 {
0187     switch (ctrl->type) {
0188     case V4L2_CTRL_TYPE_STRING:
0189         idx *= ctrl->elem_size;
0190         memset(ptr.p_char + idx, ' ', ctrl->minimum);
0191         ptr.p_char[idx + ctrl->minimum] = '\0';
0192         break;
0193     case V4L2_CTRL_TYPE_INTEGER64:
0194         ptr.p_s64[idx] = ctrl->default_value;
0195         break;
0196     case V4L2_CTRL_TYPE_INTEGER:
0197     case V4L2_CTRL_TYPE_INTEGER_MENU:
0198     case V4L2_CTRL_TYPE_MENU:
0199     case V4L2_CTRL_TYPE_BITMASK:
0200     case V4L2_CTRL_TYPE_BOOLEAN:
0201         ptr.p_s32[idx] = ctrl->default_value;
0202         break;
0203     case V4L2_CTRL_TYPE_BUTTON:
0204     case V4L2_CTRL_TYPE_CTRL_CLASS:
0205         ptr.p_s32[idx] = 0;
0206         break;
0207     case V4L2_CTRL_TYPE_U8:
0208         ptr.p_u8[idx] = ctrl->default_value;
0209         break;
0210     case V4L2_CTRL_TYPE_U16:
0211         ptr.p_u16[idx] = ctrl->default_value;
0212         break;
0213     case V4L2_CTRL_TYPE_U32:
0214         ptr.p_u32[idx] = ctrl->default_value;
0215         break;
0216     default:
0217         std_init_compound(ctrl, idx, ptr);
0218         break;
0219     }
0220 }
0221 
0222 static void std_log(const struct v4l2_ctrl *ctrl)
0223 {
0224     union v4l2_ctrl_ptr ptr = ctrl->p_cur;
0225 
0226     if (ctrl->is_array) {
0227         unsigned i;
0228 
0229         for (i = 0; i < ctrl->nr_of_dims; i++)
0230             pr_cont("[%u]", ctrl->dims[i]);
0231         pr_cont(" ");
0232     }
0233 
0234     switch (ctrl->type) {
0235     case V4L2_CTRL_TYPE_INTEGER:
0236         pr_cont("%d", *ptr.p_s32);
0237         break;
0238     case V4L2_CTRL_TYPE_BOOLEAN:
0239         pr_cont("%s", *ptr.p_s32 ? "true" : "false");
0240         break;
0241     case V4L2_CTRL_TYPE_MENU:
0242         pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
0243         break;
0244     case V4L2_CTRL_TYPE_INTEGER_MENU:
0245         pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
0246         break;
0247     case V4L2_CTRL_TYPE_BITMASK:
0248         pr_cont("0x%08x", *ptr.p_s32);
0249         break;
0250     case V4L2_CTRL_TYPE_INTEGER64:
0251         pr_cont("%lld", *ptr.p_s64);
0252         break;
0253     case V4L2_CTRL_TYPE_STRING:
0254         pr_cont("%s", ptr.p_char);
0255         break;
0256     case V4L2_CTRL_TYPE_U8:
0257         pr_cont("%u", (unsigned)*ptr.p_u8);
0258         break;
0259     case V4L2_CTRL_TYPE_U16:
0260         pr_cont("%u", (unsigned)*ptr.p_u16);
0261         break;
0262     case V4L2_CTRL_TYPE_U32:
0263         pr_cont("%u", (unsigned)*ptr.p_u32);
0264         break;
0265     case V4L2_CTRL_TYPE_H264_SPS:
0266         pr_cont("H264_SPS");
0267         break;
0268     case V4L2_CTRL_TYPE_H264_PPS:
0269         pr_cont("H264_PPS");
0270         break;
0271     case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
0272         pr_cont("H264_SCALING_MATRIX");
0273         break;
0274     case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
0275         pr_cont("H264_SLICE_PARAMS");
0276         break;
0277     case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
0278         pr_cont("H264_DECODE_PARAMS");
0279         break;
0280     case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
0281         pr_cont("H264_PRED_WEIGHTS");
0282         break;
0283     case V4L2_CTRL_TYPE_FWHT_PARAMS:
0284         pr_cont("FWHT_PARAMS");
0285         break;
0286     case V4L2_CTRL_TYPE_VP8_FRAME:
0287         pr_cont("VP8_FRAME");
0288         break;
0289     case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
0290         pr_cont("HDR10_CLL_INFO");
0291         break;
0292     case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
0293         pr_cont("HDR10_MASTERING_DISPLAY");
0294         break;
0295     case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
0296         pr_cont("MPEG2_QUANTISATION");
0297         break;
0298     case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
0299         pr_cont("MPEG2_SEQUENCE");
0300         break;
0301     case V4L2_CTRL_TYPE_MPEG2_PICTURE:
0302         pr_cont("MPEG2_PICTURE");
0303         break;
0304     case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
0305         pr_cont("VP9_COMPRESSED_HDR");
0306         break;
0307     case V4L2_CTRL_TYPE_VP9_FRAME:
0308         pr_cont("VP9_FRAME");
0309         break;
0310     case V4L2_CTRL_TYPE_HEVC_SPS:
0311         pr_cont("HEVC_SPS");
0312         break;
0313     case V4L2_CTRL_TYPE_HEVC_PPS:
0314         pr_cont("HEVC_PPS");
0315         break;
0316     case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
0317         pr_cont("HEVC_SLICE_PARAMS");
0318         break;
0319     case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
0320         pr_cont("HEVC_SCALING_MATRIX");
0321         break;
0322     case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
0323         pr_cont("HEVC_DECODE_PARAMS");
0324         break;
0325     default:
0326         pr_cont("unknown type %d", ctrl->type);
0327         break;
0328     }
0329 }
0330 
0331 /*
0332  * Round towards the closest legal value. Be careful when we are
0333  * close to the maximum range of the control type to prevent
0334  * wrap-arounds.
0335  */
0336 #define ROUND_TO_RANGE(val, offset_type, ctrl)          \
0337 ({                              \
0338     offset_type offset;                 \
0339     if ((ctrl)->maximum >= 0 &&             \
0340         val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))   \
0341         val = (ctrl)->maximum;              \
0342     else                            \
0343         val += (s32)((ctrl)->step / 2);         \
0344     val = clamp_t(typeof(val), val,             \
0345               (ctrl)->minimum, (ctrl)->maximum);    \
0346     offset = (val) - (ctrl)->minimum;           \
0347     offset = (ctrl)->step * (offset / (u32)(ctrl)->step);   \
0348     val = (ctrl)->minimum + offset;             \
0349     0;                          \
0350 })
0351 
0352 /* Validate a new control */
0353 
0354 #define zero_padding(s) \
0355     memset(&(s).padding, 0, sizeof((s).padding))
0356 #define zero_reserved(s) \
0357     memset(&(s).reserved, 0, sizeof((s).reserved))
0358 
0359 static int
0360 validate_vp9_lf_params(struct v4l2_vp9_loop_filter *lf)
0361 {
0362     unsigned int i;
0363 
0364     if (lf->flags & ~(V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED |
0365               V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE))
0366         return -EINVAL;
0367 
0368     /* That all values are in the accepted range. */
0369     if (lf->level > GENMASK(5, 0))
0370         return -EINVAL;
0371 
0372     if (lf->sharpness > GENMASK(2, 0))
0373         return -EINVAL;
0374 
0375     for (i = 0; i < ARRAY_SIZE(lf->ref_deltas); i++)
0376         if (lf->ref_deltas[i] < -63 || lf->ref_deltas[i] > 63)
0377             return -EINVAL;
0378 
0379     for (i = 0; i < ARRAY_SIZE(lf->mode_deltas); i++)
0380         if (lf->mode_deltas[i] < -63 || lf->mode_deltas[i] > 63)
0381             return -EINVAL;
0382 
0383     zero_reserved(*lf);
0384     return 0;
0385 }
0386 
0387 static int
0388 validate_vp9_quant_params(struct v4l2_vp9_quantization *quant)
0389 {
0390     if (quant->delta_q_y_dc < -15 || quant->delta_q_y_dc > 15 ||
0391         quant->delta_q_uv_dc < -15 || quant->delta_q_uv_dc > 15 ||
0392         quant->delta_q_uv_ac < -15 || quant->delta_q_uv_ac > 15)
0393         return -EINVAL;
0394 
0395     zero_reserved(*quant);
0396     return 0;
0397 }
0398 
0399 static int
0400 validate_vp9_seg_params(struct v4l2_vp9_segmentation *seg)
0401 {
0402     unsigned int i, j;
0403 
0404     if (seg->flags & ~(V4L2_VP9_SEGMENTATION_FLAG_ENABLED |
0405                V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP |
0406                V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE |
0407                V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA |
0408                V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE))
0409         return -EINVAL;
0410 
0411     for (i = 0; i < ARRAY_SIZE(seg->feature_enabled); i++) {
0412         if (seg->feature_enabled[i] &
0413             ~V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK)
0414             return -EINVAL;
0415     }
0416 
0417     for (i = 0; i < ARRAY_SIZE(seg->feature_data); i++) {
0418         static const int range[] = { 255, 63, 3, 0 };
0419 
0420         for (j = 0; j < ARRAY_SIZE(seg->feature_data[j]); j++) {
0421             if (seg->feature_data[i][j] < -range[j] ||
0422                 seg->feature_data[i][j] > range[j])
0423                 return -EINVAL;
0424         }
0425     }
0426 
0427     zero_reserved(*seg);
0428     return 0;
0429 }
0430 
0431 static int
0432 validate_vp9_compressed_hdr(struct v4l2_ctrl_vp9_compressed_hdr *hdr)
0433 {
0434     if (hdr->tx_mode > V4L2_VP9_TX_MODE_SELECT)
0435         return -EINVAL;
0436 
0437     return 0;
0438 }
0439 
0440 static int
0441 validate_vp9_frame(struct v4l2_ctrl_vp9_frame *frame)
0442 {
0443     int ret;
0444 
0445     /* Make sure we're not passed invalid flags. */
0446     if (frame->flags & ~(V4L2_VP9_FRAME_FLAG_KEY_FRAME |
0447           V4L2_VP9_FRAME_FLAG_SHOW_FRAME |
0448           V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT |
0449           V4L2_VP9_FRAME_FLAG_INTRA_ONLY |
0450           V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV |
0451           V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX |
0452           V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE |
0453           V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
0454           V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING |
0455           V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING))
0456         return -EINVAL;
0457 
0458     if (frame->flags & V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT &&
0459         frame->flags & V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX)
0460         return -EINVAL;
0461 
0462     if (frame->profile > V4L2_VP9_PROFILE_MAX)
0463         return -EINVAL;
0464 
0465     if (frame->reset_frame_context > V4L2_VP9_RESET_FRAME_CTX_ALL)
0466         return -EINVAL;
0467 
0468     if (frame->frame_context_idx >= V4L2_VP9_NUM_FRAME_CTX)
0469         return -EINVAL;
0470 
0471     /*
0472      * Profiles 0 and 1 only support 8-bit depth, profiles 2 and 3 only 10
0473      * and 12 bit depths.
0474      */
0475     if ((frame->profile < 2 && frame->bit_depth != 8) ||
0476         (frame->profile >= 2 &&
0477          (frame->bit_depth != 10 && frame->bit_depth != 12)))
0478         return -EINVAL;
0479 
0480     /* Profile 0 and 2 only accept YUV 4:2:0. */
0481     if ((frame->profile == 0 || frame->profile == 2) &&
0482         (!(frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) ||
0483          !(frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
0484         return -EINVAL;
0485 
0486     /* Profile 1 and 3 only accept YUV 4:2:2, 4:4:0 and 4:4:4. */
0487     if ((frame->profile == 1 || frame->profile == 3) &&
0488         ((frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) &&
0489          (frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
0490         return -EINVAL;
0491 
0492     if (frame->interpolation_filter > V4L2_VP9_INTERP_FILTER_SWITCHABLE)
0493         return -EINVAL;
0494 
0495     /*
0496      * According to the spec, tile_cols_log2 shall be less than or equal
0497      * to 6.
0498      */
0499     if (frame->tile_cols_log2 > 6)
0500         return -EINVAL;
0501 
0502     if (frame->reference_mode > V4L2_VP9_REFERENCE_MODE_SELECT)
0503         return -EINVAL;
0504 
0505     ret = validate_vp9_lf_params(&frame->lf);
0506     if (ret)
0507         return ret;
0508 
0509     ret = validate_vp9_quant_params(&frame->quant);
0510     if (ret)
0511         return ret;
0512 
0513     ret = validate_vp9_seg_params(&frame->seg);
0514     if (ret)
0515         return ret;
0516 
0517     zero_reserved(*frame);
0518     return 0;
0519 }
0520 
0521 /*
0522  * Compound controls validation requires setting unused fields/flags to zero
0523  * in order to properly detect unchanged controls with std_equal's memcmp.
0524  */
0525 static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
0526                  union v4l2_ctrl_ptr ptr)
0527 {
0528     struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
0529     struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
0530     struct v4l2_ctrl_vp8_frame *p_vp8_frame;
0531     struct v4l2_ctrl_fwht_params *p_fwht_params;
0532     struct v4l2_ctrl_h264_sps *p_h264_sps;
0533     struct v4l2_ctrl_h264_pps *p_h264_pps;
0534     struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
0535     struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
0536     struct v4l2_ctrl_h264_decode_params *p_h264_dec_params;
0537     struct v4l2_ctrl_hevc_sps *p_hevc_sps;
0538     struct v4l2_ctrl_hevc_pps *p_hevc_pps;
0539     struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
0540     struct v4l2_ctrl_hevc_decode_params *p_hevc_decode_params;
0541     struct v4l2_area *area;
0542     void *p = ptr.p + idx * ctrl->elem_size;
0543     unsigned int i;
0544 
0545     switch ((u32)ctrl->type) {
0546     case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
0547         p_mpeg2_sequence = p;
0548 
0549         switch (p_mpeg2_sequence->chroma_format) {
0550         case 1: /* 4:2:0 */
0551         case 2: /* 4:2:2 */
0552         case 3: /* 4:4:4 */
0553             break;
0554         default:
0555             return -EINVAL;
0556         }
0557         break;
0558 
0559     case V4L2_CTRL_TYPE_MPEG2_PICTURE:
0560         p_mpeg2_picture = p;
0561 
0562         switch (p_mpeg2_picture->intra_dc_precision) {
0563         case 0: /* 8 bits */
0564         case 1: /* 9 bits */
0565         case 2: /* 10 bits */
0566         case 3: /* 11 bits */
0567             break;
0568         default:
0569             return -EINVAL;
0570         }
0571 
0572         switch (p_mpeg2_picture->picture_structure) {
0573         case V4L2_MPEG2_PIC_TOP_FIELD:
0574         case V4L2_MPEG2_PIC_BOTTOM_FIELD:
0575         case V4L2_MPEG2_PIC_FRAME:
0576             break;
0577         default:
0578             return -EINVAL;
0579         }
0580 
0581         switch (p_mpeg2_picture->picture_coding_type) {
0582         case V4L2_MPEG2_PIC_CODING_TYPE_I:
0583         case V4L2_MPEG2_PIC_CODING_TYPE_P:
0584         case V4L2_MPEG2_PIC_CODING_TYPE_B:
0585             break;
0586         default:
0587             return -EINVAL;
0588         }
0589         zero_reserved(*p_mpeg2_picture);
0590         break;
0591 
0592     case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
0593         break;
0594 
0595     case V4L2_CTRL_TYPE_FWHT_PARAMS:
0596         p_fwht_params = p;
0597         if (p_fwht_params->version < V4L2_FWHT_VERSION)
0598             return -EINVAL;
0599         if (!p_fwht_params->width || !p_fwht_params->height)
0600             return -EINVAL;
0601         break;
0602 
0603     case V4L2_CTRL_TYPE_H264_SPS:
0604         p_h264_sps = p;
0605 
0606         /* Some syntax elements are only conditionally valid */
0607         if (p_h264_sps->pic_order_cnt_type != 0) {
0608             p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 = 0;
0609         } else if (p_h264_sps->pic_order_cnt_type != 1) {
0610             p_h264_sps->num_ref_frames_in_pic_order_cnt_cycle = 0;
0611             p_h264_sps->offset_for_non_ref_pic = 0;
0612             p_h264_sps->offset_for_top_to_bottom_field = 0;
0613             memset(&p_h264_sps->offset_for_ref_frame, 0,
0614                    sizeof(p_h264_sps->offset_for_ref_frame));
0615         }
0616 
0617         if (!V4L2_H264_SPS_HAS_CHROMA_FORMAT(p_h264_sps)) {
0618             p_h264_sps->chroma_format_idc = 1;
0619             p_h264_sps->bit_depth_luma_minus8 = 0;
0620             p_h264_sps->bit_depth_chroma_minus8 = 0;
0621 
0622             p_h264_sps->flags &=
0623                 ~V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS;
0624 
0625             if (p_h264_sps->chroma_format_idc < 3)
0626                 p_h264_sps->flags &=
0627                     ~V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE;
0628         }
0629 
0630         if (p_h264_sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY)
0631             p_h264_sps->flags &=
0632                 ~V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD;
0633 
0634         /*
0635          * Chroma 4:2:2 format require at least High 4:2:2 profile.
0636          *
0637          * The H264 specification and well-known parser implementations
0638          * use profile-idc values directly, as that is clearer and
0639          * less ambiguous. We do the same here.
0640          */
0641         if (p_h264_sps->profile_idc < 122 &&
0642             p_h264_sps->chroma_format_idc > 1)
0643             return -EINVAL;
0644         /* Chroma 4:4:4 format require at least High 4:2:2 profile */
0645         if (p_h264_sps->profile_idc < 244 &&
0646             p_h264_sps->chroma_format_idc > 2)
0647             return -EINVAL;
0648         if (p_h264_sps->chroma_format_idc > 3)
0649             return -EINVAL;
0650 
0651         if (p_h264_sps->bit_depth_luma_minus8 > 6)
0652             return -EINVAL;
0653         if (p_h264_sps->bit_depth_chroma_minus8 > 6)
0654             return -EINVAL;
0655         if (p_h264_sps->log2_max_frame_num_minus4 > 12)
0656             return -EINVAL;
0657         if (p_h264_sps->pic_order_cnt_type > 2)
0658             return -EINVAL;
0659         if (p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 > 12)
0660             return -EINVAL;
0661         if (p_h264_sps->max_num_ref_frames > V4L2_H264_REF_LIST_LEN)
0662             return -EINVAL;
0663         break;
0664 
0665     case V4L2_CTRL_TYPE_H264_PPS:
0666         p_h264_pps = p;
0667 
0668         if (p_h264_pps->num_slice_groups_minus1 > 7)
0669             return -EINVAL;
0670         if (p_h264_pps->num_ref_idx_l0_default_active_minus1 >
0671             (V4L2_H264_REF_LIST_LEN - 1))
0672             return -EINVAL;
0673         if (p_h264_pps->num_ref_idx_l1_default_active_minus1 >
0674             (V4L2_H264_REF_LIST_LEN - 1))
0675             return -EINVAL;
0676         if (p_h264_pps->weighted_bipred_idc > 2)
0677             return -EINVAL;
0678         /*
0679          * pic_init_qp_minus26 shall be in the range of
0680          * -(26 + QpBdOffset_y) to +25, inclusive,
0681          *  where QpBdOffset_y is 6 * bit_depth_luma_minus8
0682          */
0683         if (p_h264_pps->pic_init_qp_minus26 < -62 ||
0684             p_h264_pps->pic_init_qp_minus26 > 25)
0685             return -EINVAL;
0686         if (p_h264_pps->pic_init_qs_minus26 < -26 ||
0687             p_h264_pps->pic_init_qs_minus26 > 25)
0688             return -EINVAL;
0689         if (p_h264_pps->chroma_qp_index_offset < -12 ||
0690             p_h264_pps->chroma_qp_index_offset > 12)
0691             return -EINVAL;
0692         if (p_h264_pps->second_chroma_qp_index_offset < -12 ||
0693             p_h264_pps->second_chroma_qp_index_offset > 12)
0694             return -EINVAL;
0695         break;
0696 
0697     case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
0698         break;
0699 
0700     case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
0701         p_h264_pred_weights = p;
0702 
0703         if (p_h264_pred_weights->luma_log2_weight_denom > 7)
0704             return -EINVAL;
0705         if (p_h264_pred_weights->chroma_log2_weight_denom > 7)
0706             return -EINVAL;
0707         break;
0708 
0709     case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
0710         p_h264_slice_params = p;
0711 
0712         if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
0713             p_h264_slice_params->flags &=
0714                 ~V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED;
0715 
0716         if (p_h264_slice_params->colour_plane_id > 2)
0717             return -EINVAL;
0718         if (p_h264_slice_params->cabac_init_idc > 2)
0719             return -EINVAL;
0720         if (p_h264_slice_params->disable_deblocking_filter_idc > 2)
0721             return -EINVAL;
0722         if (p_h264_slice_params->slice_alpha_c0_offset_div2 < -6 ||
0723             p_h264_slice_params->slice_alpha_c0_offset_div2 > 6)
0724             return -EINVAL;
0725         if (p_h264_slice_params->slice_beta_offset_div2 < -6 ||
0726             p_h264_slice_params->slice_beta_offset_div2 > 6)
0727             return -EINVAL;
0728 
0729         if (p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_I ||
0730             p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_SI)
0731             p_h264_slice_params->num_ref_idx_l0_active_minus1 = 0;
0732         if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
0733             p_h264_slice_params->num_ref_idx_l1_active_minus1 = 0;
0734 
0735         if (p_h264_slice_params->num_ref_idx_l0_active_minus1 >
0736             (V4L2_H264_REF_LIST_LEN - 1))
0737             return -EINVAL;
0738         if (p_h264_slice_params->num_ref_idx_l1_active_minus1 >
0739             (V4L2_H264_REF_LIST_LEN - 1))
0740             return -EINVAL;
0741         zero_reserved(*p_h264_slice_params);
0742         break;
0743 
0744     case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
0745         p_h264_dec_params = p;
0746 
0747         if (p_h264_dec_params->nal_ref_idc > 3)
0748             return -EINVAL;
0749         for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
0750             struct v4l2_h264_dpb_entry *dpb_entry =
0751                 &p_h264_dec_params->dpb[i];
0752 
0753             zero_reserved(*dpb_entry);
0754         }
0755         zero_reserved(*p_h264_dec_params);
0756         break;
0757 
0758     case V4L2_CTRL_TYPE_VP8_FRAME:
0759         p_vp8_frame = p;
0760 
0761         switch (p_vp8_frame->num_dct_parts) {
0762         case 1:
0763         case 2:
0764         case 4:
0765         case 8:
0766             break;
0767         default:
0768             return -EINVAL;
0769         }
0770         zero_padding(p_vp8_frame->segment);
0771         zero_padding(p_vp8_frame->lf);
0772         zero_padding(p_vp8_frame->quant);
0773         zero_padding(p_vp8_frame->entropy);
0774         zero_padding(p_vp8_frame->coder_state);
0775         break;
0776 
0777     case V4L2_CTRL_TYPE_HEVC_SPS:
0778         p_hevc_sps = p;
0779 
0780         if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
0781             p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
0782             p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
0783             p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
0784             p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
0785         }
0786 
0787         if (!(p_hevc_sps->flags &
0788               V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
0789             p_hevc_sps->num_long_term_ref_pics_sps = 0;
0790         break;
0791 
0792     case V4L2_CTRL_TYPE_HEVC_PPS:
0793         p_hevc_pps = p;
0794 
0795         if (!(p_hevc_pps->flags &
0796               V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
0797             p_hevc_pps->diff_cu_qp_delta_depth = 0;
0798 
0799         if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
0800             p_hevc_pps->num_tile_columns_minus1 = 0;
0801             p_hevc_pps->num_tile_rows_minus1 = 0;
0802             memset(&p_hevc_pps->column_width_minus1, 0,
0803                    sizeof(p_hevc_pps->column_width_minus1));
0804             memset(&p_hevc_pps->row_height_minus1, 0,
0805                    sizeof(p_hevc_pps->row_height_minus1));
0806 
0807             p_hevc_pps->flags &=
0808                 ~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
0809         }
0810 
0811         if (p_hevc_pps->flags &
0812             V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
0813             p_hevc_pps->pps_beta_offset_div2 = 0;
0814             p_hevc_pps->pps_tc_offset_div2 = 0;
0815         }
0816         break;
0817 
0818     case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
0819         p_hevc_decode_params = p;
0820 
0821         if (p_hevc_decode_params->num_active_dpb_entries >
0822             V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
0823             return -EINVAL;
0824         break;
0825 
0826     case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
0827         break;
0828 
0829     case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
0830         break;
0831 
0832     case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
0833         p_hdr10_mastering = p;
0834 
0835         for (i = 0; i < 3; ++i) {
0836             if (p_hdr10_mastering->display_primaries_x[i] <
0837                 V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
0838                 p_hdr10_mastering->display_primaries_x[i] >
0839                 V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
0840                 p_hdr10_mastering->display_primaries_y[i] <
0841                 V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
0842                 p_hdr10_mastering->display_primaries_y[i] >
0843                 V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
0844                 return -EINVAL;
0845         }
0846 
0847         if (p_hdr10_mastering->white_point_x <
0848             V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
0849             p_hdr10_mastering->white_point_x >
0850             V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
0851             p_hdr10_mastering->white_point_y <
0852             V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
0853             p_hdr10_mastering->white_point_y >
0854             V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
0855             return -EINVAL;
0856 
0857         if (p_hdr10_mastering->max_display_mastering_luminance <
0858             V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
0859             p_hdr10_mastering->max_display_mastering_luminance >
0860             V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
0861             p_hdr10_mastering->min_display_mastering_luminance <
0862             V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
0863             p_hdr10_mastering->min_display_mastering_luminance >
0864             V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
0865             return -EINVAL;
0866 
0867         /* The following restriction comes from ITU-T Rec. H.265 spec */
0868         if (p_hdr10_mastering->max_display_mastering_luminance ==
0869             V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
0870             p_hdr10_mastering->min_display_mastering_luminance ==
0871             V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
0872             return -EINVAL;
0873 
0874         break;
0875 
0876     case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
0877         break;
0878 
0879     case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
0880         return validate_vp9_compressed_hdr(p);
0881 
0882     case V4L2_CTRL_TYPE_VP9_FRAME:
0883         return validate_vp9_frame(p);
0884 
0885     case V4L2_CTRL_TYPE_AREA:
0886         area = p;
0887         if (!area->width || !area->height)
0888             return -EINVAL;
0889         break;
0890 
0891     default:
0892         return -EINVAL;
0893     }
0894 
0895     return 0;
0896 }
0897 
0898 static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
0899             union v4l2_ctrl_ptr ptr)
0900 {
0901     size_t len;
0902     u64 offset;
0903     s64 val;
0904 
0905     switch ((u32)ctrl->type) {
0906     case V4L2_CTRL_TYPE_INTEGER:
0907         return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
0908     case V4L2_CTRL_TYPE_INTEGER64:
0909         /*
0910          * We can't use the ROUND_TO_RANGE define here due to
0911          * the u64 divide that needs special care.
0912          */
0913         val = ptr.p_s64[idx];
0914         if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
0915             val = ctrl->maximum;
0916         else
0917             val += (s64)(ctrl->step / 2);
0918         val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
0919         offset = val - ctrl->minimum;
0920         do_div(offset, ctrl->step);
0921         ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
0922         return 0;
0923     case V4L2_CTRL_TYPE_U8:
0924         return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
0925     case V4L2_CTRL_TYPE_U16:
0926         return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
0927     case V4L2_CTRL_TYPE_U32:
0928         return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
0929 
0930     case V4L2_CTRL_TYPE_BOOLEAN:
0931         ptr.p_s32[idx] = !!ptr.p_s32[idx];
0932         return 0;
0933 
0934     case V4L2_CTRL_TYPE_MENU:
0935     case V4L2_CTRL_TYPE_INTEGER_MENU:
0936         if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
0937             return -ERANGE;
0938         if (ptr.p_s32[idx] < BITS_PER_LONG_LONG &&
0939             (ctrl->menu_skip_mask & BIT_ULL(ptr.p_s32[idx])))
0940             return -EINVAL;
0941         if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
0942             ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
0943             return -EINVAL;
0944         return 0;
0945 
0946     case V4L2_CTRL_TYPE_BITMASK:
0947         ptr.p_s32[idx] &= ctrl->maximum;
0948         return 0;
0949 
0950     case V4L2_CTRL_TYPE_BUTTON:
0951     case V4L2_CTRL_TYPE_CTRL_CLASS:
0952         ptr.p_s32[idx] = 0;
0953         return 0;
0954 
0955     case V4L2_CTRL_TYPE_STRING:
0956         idx *= ctrl->elem_size;
0957         len = strlen(ptr.p_char + idx);
0958         if (len < ctrl->minimum)
0959             return -ERANGE;
0960         if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
0961             return -ERANGE;
0962         return 0;
0963 
0964     default:
0965         return std_validate_compound(ctrl, idx, ptr);
0966     }
0967 }
0968 
0969 static const struct v4l2_ctrl_type_ops std_type_ops = {
0970     .equal = std_equal,
0971     .init = std_init,
0972     .log = std_log,
0973     .validate = std_validate,
0974 };
0975 
0976 void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
0977 {
0978     if (!ctrl)
0979         return;
0980     if (!notify) {
0981         ctrl->call_notify = 0;
0982         return;
0983     }
0984     if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
0985         return;
0986     ctrl->handler->notify = notify;
0987     ctrl->handler->notify_priv = priv;
0988     ctrl->call_notify = 1;
0989 }
0990 EXPORT_SYMBOL(v4l2_ctrl_notify);
0991 
0992 /* Copy the one value to another. */
0993 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
0994                union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to,
0995                unsigned int elems)
0996 {
0997     if (ctrl == NULL)
0998         return;
0999     memcpy(to.p, from.p_const, elems * ctrl->elem_size);
1000 }
1001 
1002 /* Copy the new value to the current value. */
1003 void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
1004 {
1005     bool changed;
1006 
1007     if (ctrl == NULL)
1008         return;
1009 
1010     /* has_changed is set by cluster_changed */
1011     changed = ctrl->has_changed;
1012     if (changed) {
1013         if (ctrl->is_dyn_array)
1014             ctrl->elems = ctrl->new_elems;
1015         ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur, ctrl->elems);
1016     }
1017 
1018     if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
1019         /* Note: CH_FLAGS is only set for auto clusters. */
1020         ctrl->flags &=
1021             ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
1022         if (!is_cur_manual(ctrl->cluster[0])) {
1023             ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1024             if (ctrl->cluster[0]->has_volatiles)
1025                 ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
1026         }
1027         fh = NULL;
1028     }
1029     if (changed || ch_flags) {
1030         /* If a control was changed that was not one of the controls
1031            modified by the application, then send the event to all. */
1032         if (!ctrl->is_new)
1033             fh = NULL;
1034         send_event(fh, ctrl,
1035             (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
1036         if (ctrl->call_notify && changed && ctrl->handler->notify)
1037             ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
1038     }
1039 }
1040 
1041 /* Copy the current value to the new value */
1042 void cur_to_new(struct v4l2_ctrl *ctrl)
1043 {
1044     if (ctrl == NULL)
1045         return;
1046     if (ctrl->is_dyn_array)
1047         ctrl->new_elems = ctrl->elems;
1048     ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
1049 }
1050 
1051 static bool req_alloc_dyn_array(struct v4l2_ctrl_ref *ref, u32 elems)
1052 {
1053     void *tmp;
1054 
1055     if (elems < ref->p_req_dyn_alloc_elems)
1056         return true;
1057 
1058     tmp = kvmalloc(elems * ref->ctrl->elem_size, GFP_KERNEL);
1059 
1060     if (!tmp) {
1061         ref->p_req_dyn_enomem = true;
1062         return false;
1063     }
1064     ref->p_req_dyn_enomem = false;
1065     kvfree(ref->p_req.p);
1066     ref->p_req.p = tmp;
1067     ref->p_req_dyn_alloc_elems = elems;
1068     return true;
1069 }
1070 
1071 /* Copy the new value to the request value */
1072 void new_to_req(struct v4l2_ctrl_ref *ref)
1073 {
1074     struct v4l2_ctrl *ctrl;
1075 
1076     if (!ref)
1077         return;
1078 
1079     ctrl = ref->ctrl;
1080     if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->new_elems))
1081         return;
1082 
1083     ref->p_req_elems = ctrl->new_elems;
1084     ptr_to_ptr(ctrl, ctrl->p_new, ref->p_req, ref->p_req_elems);
1085     ref->p_req_valid = true;
1086 }
1087 
1088 /* Copy the current value to the request value */
1089 void cur_to_req(struct v4l2_ctrl_ref *ref)
1090 {
1091     struct v4l2_ctrl *ctrl;
1092 
1093     if (!ref)
1094         return;
1095 
1096     ctrl = ref->ctrl;
1097     if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->elems))
1098         return;
1099 
1100     ref->p_req_elems = ctrl->elems;
1101     ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req, ctrl->elems);
1102     ref->p_req_valid = true;
1103 }
1104 
1105 /* Copy the request value to the new value */
1106 int req_to_new(struct v4l2_ctrl_ref *ref)
1107 {
1108     struct v4l2_ctrl *ctrl;
1109 
1110     if (!ref)
1111         return 0;
1112 
1113     ctrl = ref->ctrl;
1114 
1115     /*
1116      * This control was never set in the request, so just use the current
1117      * value.
1118      */
1119     if (!ref->p_req_valid) {
1120         if (ctrl->is_dyn_array)
1121             ctrl->new_elems = ctrl->elems;
1122         ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
1123         return 0;
1124     }
1125 
1126     /* Not a dynamic array, so just copy the request value */
1127     if (!ctrl->is_dyn_array) {
1128         ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
1129         return 0;
1130     }
1131 
1132     /* Sanity check, should never happen */
1133     if (WARN_ON(!ref->p_req_dyn_alloc_elems))
1134         return -ENOMEM;
1135 
1136     /*
1137      * Check if the number of elements in the request is more than the
1138      * elements in ctrl->p_dyn. If so, attempt to realloc ctrl->p_dyn.
1139      * Note that p_dyn is allocated with twice the number of elements
1140      * in the dynamic array since it has to store both the current and
1141      * new value of such a control.
1142      */
1143     if (ref->p_req_elems > ctrl->p_dyn_alloc_elems) {
1144         unsigned int sz = ref->p_req_elems * ctrl->elem_size;
1145         void *old = ctrl->p_dyn;
1146         void *tmp = kvzalloc(2 * sz, GFP_KERNEL);
1147 
1148         if (!tmp)
1149             return -ENOMEM;
1150         memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
1151         memcpy(tmp + sz, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
1152         ctrl->p_new.p = tmp;
1153         ctrl->p_cur.p = tmp + sz;
1154         ctrl->p_dyn = tmp;
1155         ctrl->p_dyn_alloc_elems = ref->p_req_elems;
1156         kvfree(old);
1157     }
1158 
1159     ctrl->new_elems = ref->p_req_elems;
1160     ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
1161     return 0;
1162 }
1163 
1164 /* Control range checking */
1165 int check_range(enum v4l2_ctrl_type type,
1166         s64 min, s64 max, u64 step, s64 def)
1167 {
1168     switch (type) {
1169     case V4L2_CTRL_TYPE_BOOLEAN:
1170         if (step != 1 || max > 1 || min < 0)
1171             return -ERANGE;
1172         fallthrough;
1173     case V4L2_CTRL_TYPE_U8:
1174     case V4L2_CTRL_TYPE_U16:
1175     case V4L2_CTRL_TYPE_U32:
1176     case V4L2_CTRL_TYPE_INTEGER:
1177     case V4L2_CTRL_TYPE_INTEGER64:
1178         if (step == 0 || min > max || def < min || def > max)
1179             return -ERANGE;
1180         return 0;
1181     case V4L2_CTRL_TYPE_BITMASK:
1182         if (step || min || !max || (def & ~max))
1183             return -ERANGE;
1184         return 0;
1185     case V4L2_CTRL_TYPE_MENU:
1186     case V4L2_CTRL_TYPE_INTEGER_MENU:
1187         if (min > max || def < min || def > max)
1188             return -ERANGE;
1189         /* Note: step == menu_skip_mask for menu controls.
1190            So here we check if the default value is masked out. */
1191         if (step && ((1 << def) & step))
1192             return -EINVAL;
1193         return 0;
1194     case V4L2_CTRL_TYPE_STRING:
1195         if (min > max || min < 0 || step < 1 || def)
1196             return -ERANGE;
1197         return 0;
1198     default:
1199         return 0;
1200     }
1201 }
1202 
1203 /* Set the handler's error code if it wasn't set earlier already */
1204 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
1205 {
1206     if (hdl->error == 0)
1207         hdl->error = err;
1208     return err;
1209 }
1210 
1211 /* Initialize the handler */
1212 int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
1213                  unsigned nr_of_controls_hint,
1214                  struct lock_class_key *key, const char *name)
1215 {
1216     mutex_init(&hdl->_lock);
1217     hdl->lock = &hdl->_lock;
1218     lockdep_set_class_and_name(hdl->lock, key, name);
1219     INIT_LIST_HEAD(&hdl->ctrls);
1220     INIT_LIST_HEAD(&hdl->ctrl_refs);
1221     hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
1222     hdl->buckets = kvcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
1223                 GFP_KERNEL);
1224     hdl->error = hdl->buckets ? 0 : -ENOMEM;
1225     v4l2_ctrl_handler_init_request(hdl);
1226     return hdl->error;
1227 }
1228 EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
1229 
1230 /* Free all controls and control refs */
1231 void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
1232 {
1233     struct v4l2_ctrl_ref *ref, *next_ref;
1234     struct v4l2_ctrl *ctrl, *next_ctrl;
1235     struct v4l2_subscribed_event *sev, *next_sev;
1236 
1237     if (hdl == NULL || hdl->buckets == NULL)
1238         return;
1239 
1240     v4l2_ctrl_handler_free_request(hdl);
1241 
1242     mutex_lock(hdl->lock);
1243     /* Free all nodes */
1244     list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
1245         list_del(&ref->node);
1246         if (ref->p_req_dyn_alloc_elems)
1247             kvfree(ref->p_req.p);
1248         kfree(ref);
1249     }
1250     /* Free all controls owned by the handler */
1251     list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
1252         list_del(&ctrl->node);
1253         list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
1254             list_del(&sev->node);
1255         kvfree(ctrl->p_dyn);
1256         kvfree(ctrl);
1257     }
1258     kvfree(hdl->buckets);
1259     hdl->buckets = NULL;
1260     hdl->cached = NULL;
1261     hdl->error = 0;
1262     mutex_unlock(hdl->lock);
1263     mutex_destroy(&hdl->_lock);
1264 }
1265 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
1266 
1267 /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
1268    be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
1269    with applications that do not use the NEXT_CTRL flag.
1270 
1271    We just find the n-th private user control. It's O(N), but that should not
1272    be an issue in this particular case. */
1273 static struct v4l2_ctrl_ref *find_private_ref(
1274         struct v4l2_ctrl_handler *hdl, u32 id)
1275 {
1276     struct v4l2_ctrl_ref *ref;
1277 
1278     id -= V4L2_CID_PRIVATE_BASE;
1279     list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1280         /* Search for private user controls that are compatible with
1281            VIDIOC_G/S_CTRL. */
1282         if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1283             V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1284             if (!ref->ctrl->is_int)
1285                 continue;
1286             if (id == 0)
1287                 return ref;
1288             id--;
1289         }
1290     }
1291     return NULL;
1292 }
1293 
1294 /* Find a control with the given ID. */
1295 struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1296 {
1297     struct v4l2_ctrl_ref *ref;
1298     int bucket;
1299 
1300     id &= V4L2_CTRL_ID_MASK;
1301 
1302     /* Old-style private controls need special handling */
1303     if (id >= V4L2_CID_PRIVATE_BASE)
1304         return find_private_ref(hdl, id);
1305     bucket = id % hdl->nr_of_buckets;
1306 
1307     /* Simple optimization: cache the last control found */
1308     if (hdl->cached && hdl->cached->ctrl->id == id)
1309         return hdl->cached;
1310 
1311     /* Not in cache, search the hash */
1312     ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1313     while (ref && ref->ctrl->id != id)
1314         ref = ref->next;
1315 
1316     if (ref)
1317         hdl->cached = ref; /* cache it! */
1318     return ref;
1319 }
1320 
1321 /* Find a control with the given ID. Take the handler's lock first. */
1322 struct v4l2_ctrl_ref *find_ref_lock(struct v4l2_ctrl_handler *hdl, u32 id)
1323 {
1324     struct v4l2_ctrl_ref *ref = NULL;
1325 
1326     if (hdl) {
1327         mutex_lock(hdl->lock);
1328         ref = find_ref(hdl, id);
1329         mutex_unlock(hdl->lock);
1330     }
1331     return ref;
1332 }
1333 
1334 /* Find a control with the given ID. */
1335 struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1336 {
1337     struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1338 
1339     return ref ? ref->ctrl : NULL;
1340 }
1341 EXPORT_SYMBOL(v4l2_ctrl_find);
1342 
1343 /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
1344 int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1345             struct v4l2_ctrl *ctrl,
1346             struct v4l2_ctrl_ref **ctrl_ref,
1347             bool from_other_dev, bool allocate_req)
1348 {
1349     struct v4l2_ctrl_ref *ref;
1350     struct v4l2_ctrl_ref *new_ref;
1351     u32 id = ctrl->id;
1352     u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
1353     int bucket = id % hdl->nr_of_buckets;   /* which bucket to use */
1354     unsigned int size_extra_req = 0;
1355 
1356     if (ctrl_ref)
1357         *ctrl_ref = NULL;
1358 
1359     /*
1360      * Automatically add the control class if it is not yet present and
1361      * the new control is not a compound control.
1362      */
1363     if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
1364         id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1365         if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1366             return hdl->error;
1367 
1368     if (hdl->error)
1369         return hdl->error;
1370 
1371     if (allocate_req && !ctrl->is_dyn_array)
1372         size_extra_req = ctrl->elems * ctrl->elem_size;
1373     new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
1374     if (!new_ref)
1375         return handler_set_err(hdl, -ENOMEM);
1376     new_ref->ctrl = ctrl;
1377     new_ref->from_other_dev = from_other_dev;
1378     if (size_extra_req)
1379         new_ref->p_req.p = &new_ref[1];
1380 
1381     INIT_LIST_HEAD(&new_ref->node);
1382 
1383     mutex_lock(hdl->lock);
1384 
1385     /* Add immediately at the end of the list if the list is empty, or if
1386        the last element in the list has a lower ID.
1387        This ensures that when elements are added in ascending order the
1388        insertion is an O(1) operation. */
1389     if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1390         list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1391         goto insert_in_hash;
1392     }
1393 
1394     /* Find insert position in sorted list */
1395     list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1396         if (ref->ctrl->id < id)
1397             continue;
1398         /* Don't add duplicates */
1399         if (ref->ctrl->id == id) {
1400             kfree(new_ref);
1401             goto unlock;
1402         }
1403         list_add(&new_ref->node, ref->node.prev);
1404         break;
1405     }
1406 
1407 insert_in_hash:
1408     /* Insert the control node in the hash */
1409     new_ref->next = hdl->buckets[bucket];
1410     hdl->buckets[bucket] = new_ref;
1411     if (ctrl_ref)
1412         *ctrl_ref = new_ref;
1413     if (ctrl->handler == hdl) {
1414         /* By default each control starts in a cluster of its own.
1415          * new_ref->ctrl is basically a cluster array with one
1416          * element, so that's perfect to use as the cluster pointer.
1417          * But only do this for the handler that owns the control.
1418          */
1419         ctrl->cluster = &new_ref->ctrl;
1420         ctrl->ncontrols = 1;
1421     }
1422 
1423 unlock:
1424     mutex_unlock(hdl->lock);
1425     return 0;
1426 }
1427 
1428 /* Add a new control */
1429 static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1430             const struct v4l2_ctrl_ops *ops,
1431             const struct v4l2_ctrl_type_ops *type_ops,
1432             u32 id, const char *name, enum v4l2_ctrl_type type,
1433             s64 min, s64 max, u64 step, s64 def,
1434             const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
1435             u32 flags, const char * const *qmenu,
1436             const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
1437             void *priv)
1438 {
1439     struct v4l2_ctrl *ctrl;
1440     unsigned sz_extra;
1441     unsigned nr_of_dims = 0;
1442     unsigned elems = 1;
1443     bool is_array;
1444     unsigned tot_ctrl_size;
1445     unsigned idx;
1446     void *data;
1447     int err;
1448 
1449     if (hdl->error)
1450         return NULL;
1451 
1452     while (dims && dims[nr_of_dims]) {
1453         elems *= dims[nr_of_dims];
1454         nr_of_dims++;
1455         if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
1456             break;
1457     }
1458     is_array = nr_of_dims > 0;
1459 
1460     /* Prefill elem_size for all types handled by std_type_ops */
1461     switch ((u32)type) {
1462     case V4L2_CTRL_TYPE_INTEGER64:
1463         elem_size = sizeof(s64);
1464         break;
1465     case V4L2_CTRL_TYPE_STRING:
1466         elem_size = max + 1;
1467         break;
1468     case V4L2_CTRL_TYPE_U8:
1469         elem_size = sizeof(u8);
1470         break;
1471     case V4L2_CTRL_TYPE_U16:
1472         elem_size = sizeof(u16);
1473         break;
1474     case V4L2_CTRL_TYPE_U32:
1475         elem_size = sizeof(u32);
1476         break;
1477     case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
1478         elem_size = sizeof(struct v4l2_ctrl_mpeg2_sequence);
1479         break;
1480     case V4L2_CTRL_TYPE_MPEG2_PICTURE:
1481         elem_size = sizeof(struct v4l2_ctrl_mpeg2_picture);
1482         break;
1483     case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
1484         elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantisation);
1485         break;
1486     case V4L2_CTRL_TYPE_FWHT_PARAMS:
1487         elem_size = sizeof(struct v4l2_ctrl_fwht_params);
1488         break;
1489     case V4L2_CTRL_TYPE_H264_SPS:
1490         elem_size = sizeof(struct v4l2_ctrl_h264_sps);
1491         break;
1492     case V4L2_CTRL_TYPE_H264_PPS:
1493         elem_size = sizeof(struct v4l2_ctrl_h264_pps);
1494         break;
1495     case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1496         elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
1497         break;
1498     case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1499         elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
1500         break;
1501     case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1502         elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
1503         break;
1504     case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
1505         elem_size = sizeof(struct v4l2_ctrl_h264_pred_weights);
1506         break;
1507     case V4L2_CTRL_TYPE_VP8_FRAME:
1508         elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
1509         break;
1510     case V4L2_CTRL_TYPE_HEVC_SPS:
1511         elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
1512         break;
1513     case V4L2_CTRL_TYPE_HEVC_PPS:
1514         elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
1515         break;
1516     case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
1517         elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
1518         break;
1519     case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
1520         elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
1521         break;
1522     case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
1523         elem_size = sizeof(struct v4l2_ctrl_hevc_decode_params);
1524         break;
1525     case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
1526         elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
1527         break;
1528     case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
1529         elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
1530         break;
1531     case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
1532         elem_size = sizeof(struct v4l2_ctrl_vp9_compressed_hdr);
1533         break;
1534     case V4L2_CTRL_TYPE_VP9_FRAME:
1535         elem_size = sizeof(struct v4l2_ctrl_vp9_frame);
1536         break;
1537     case V4L2_CTRL_TYPE_AREA:
1538         elem_size = sizeof(struct v4l2_area);
1539         break;
1540     default:
1541         if (type < V4L2_CTRL_COMPOUND_TYPES)
1542             elem_size = sizeof(s32);
1543         break;
1544     }
1545 
1546     /* Sanity checks */
1547     if (id == 0 || name == NULL || !elem_size ||
1548         id >= V4L2_CID_PRIVATE_BASE ||
1549         (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1550         (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
1551         handler_set_err(hdl, -ERANGE);
1552         return NULL;
1553     }
1554     err = check_range(type, min, max, step, def);
1555     if (err) {
1556         handler_set_err(hdl, err);
1557         return NULL;
1558     }
1559     if (is_array &&
1560         (type == V4L2_CTRL_TYPE_BUTTON ||
1561          type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
1562         handler_set_err(hdl, -EINVAL);
1563         return NULL;
1564     }
1565     if (flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) {
1566         /*
1567          * For now only support this for one-dimensional arrays only.
1568          *
1569          * This can be relaxed in the future, but this will
1570          * require more effort.
1571          */
1572         if (nr_of_dims != 1) {
1573             handler_set_err(hdl, -EINVAL);
1574             return NULL;
1575         }
1576         /* Start with just 1 element */
1577         elems = 1;
1578     }
1579 
1580     tot_ctrl_size = elem_size * elems;
1581     sz_extra = 0;
1582     if (type == V4L2_CTRL_TYPE_BUTTON)
1583         flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1584             V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1585     else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
1586         flags |= V4L2_CTRL_FLAG_READ_ONLY;
1587     else if (!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) &&
1588          (type == V4L2_CTRL_TYPE_INTEGER64 ||
1589           type == V4L2_CTRL_TYPE_STRING ||
1590           type >= V4L2_CTRL_COMPOUND_TYPES ||
1591           is_array))
1592         sz_extra += 2 * tot_ctrl_size;
1593 
1594     if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
1595         sz_extra += elem_size;
1596 
1597     ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
1598     if (ctrl == NULL) {
1599         handler_set_err(hdl, -ENOMEM);
1600         return NULL;
1601     }
1602 
1603     INIT_LIST_HEAD(&ctrl->node);
1604     INIT_LIST_HEAD(&ctrl->ev_subs);
1605     ctrl->handler = hdl;
1606     ctrl->ops = ops;
1607     ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
1608     ctrl->id = id;
1609     ctrl->name = name;
1610     ctrl->type = type;
1611     ctrl->flags = flags;
1612     ctrl->minimum = min;
1613     ctrl->maximum = max;
1614     ctrl->step = step;
1615     ctrl->default_value = def;
1616     ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
1617     ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
1618     ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
1619     ctrl->is_array = is_array;
1620     ctrl->is_dyn_array = !!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY);
1621     ctrl->elems = elems;
1622     ctrl->new_elems = elems;
1623     ctrl->nr_of_dims = nr_of_dims;
1624     if (nr_of_dims)
1625         memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
1626     ctrl->elem_size = elem_size;
1627     if (type == V4L2_CTRL_TYPE_MENU)
1628         ctrl->qmenu = qmenu;
1629     else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
1630         ctrl->qmenu_int = qmenu_int;
1631     ctrl->priv = priv;
1632     ctrl->cur.val = ctrl->val = def;
1633     data = &ctrl[1];
1634 
1635     if (ctrl->is_dyn_array) {
1636         ctrl->p_dyn_alloc_elems = elems;
1637         ctrl->p_dyn = kvzalloc(2 * elems * elem_size, GFP_KERNEL);
1638         if (!ctrl->p_dyn) {
1639             kvfree(ctrl);
1640             return NULL;
1641         }
1642         data = ctrl->p_dyn;
1643     }
1644 
1645     if (!ctrl->is_int) {
1646         ctrl->p_new.p = data;
1647         ctrl->p_cur.p = data + tot_ctrl_size;
1648     } else {
1649         ctrl->p_new.p = &ctrl->val;
1650         ctrl->p_cur.p = &ctrl->cur.val;
1651     }
1652 
1653     if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
1654         if (ctrl->is_dyn_array)
1655             ctrl->p_def.p = &ctrl[1];
1656         else
1657             ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
1658         memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
1659     }
1660 
1661     for (idx = 0; idx < elems; idx++) {
1662         ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
1663         ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
1664     }
1665 
1666     if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
1667         kvfree(ctrl->p_dyn);
1668         kvfree(ctrl);
1669         return NULL;
1670     }
1671     mutex_lock(hdl->lock);
1672     list_add_tail(&ctrl->node, &hdl->ctrls);
1673     mutex_unlock(hdl->lock);
1674     return ctrl;
1675 }
1676 
1677 struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
1678             const struct v4l2_ctrl_config *cfg, void *priv)
1679 {
1680     bool is_menu;
1681     struct v4l2_ctrl *ctrl;
1682     const char *name = cfg->name;
1683     const char * const *qmenu = cfg->qmenu;
1684     const s64 *qmenu_int = cfg->qmenu_int;
1685     enum v4l2_ctrl_type type = cfg->type;
1686     u32 flags = cfg->flags;
1687     s64 min = cfg->min;
1688     s64 max = cfg->max;
1689     u64 step = cfg->step;
1690     s64 def = cfg->def;
1691 
1692     if (name == NULL)
1693         v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
1694                                 &def, &flags);
1695 
1696     is_menu = (type == V4L2_CTRL_TYPE_MENU ||
1697            type == V4L2_CTRL_TYPE_INTEGER_MENU);
1698     if (is_menu)
1699         WARN_ON(step);
1700     else
1701         WARN_ON(cfg->menu_skip_mask);
1702     if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
1703         qmenu = v4l2_ctrl_get_menu(cfg->id);
1704     } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
1705         handler_set_err(hdl, -EINVAL);
1706         return NULL;
1707     }
1708 
1709     ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
1710             type, min, max,
1711             is_menu ? cfg->menu_skip_mask : step, def,
1712             cfg->dims, cfg->elem_size,
1713             flags, qmenu, qmenu_int, cfg->p_def, priv);
1714     if (ctrl)
1715         ctrl->is_private = cfg->is_private;
1716     return ctrl;
1717 }
1718 EXPORT_SYMBOL(v4l2_ctrl_new_custom);
1719 
1720 /* Helper function for standard non-menu controls */
1721 struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
1722             const struct v4l2_ctrl_ops *ops,
1723             u32 id, s64 min, s64 max, u64 step, s64 def)
1724 {
1725     const char *name;
1726     enum v4l2_ctrl_type type;
1727     u32 flags;
1728 
1729     v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1730     if (type == V4L2_CTRL_TYPE_MENU ||
1731         type == V4L2_CTRL_TYPE_INTEGER_MENU ||
1732         type >= V4L2_CTRL_COMPOUND_TYPES) {
1733         handler_set_err(hdl, -EINVAL);
1734         return NULL;
1735     }
1736     return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1737                  min, max, step, def, NULL, 0,
1738                  flags, NULL, NULL, ptr_null, NULL);
1739 }
1740 EXPORT_SYMBOL(v4l2_ctrl_new_std);
1741 
1742 /* Helper function for standard menu controls */
1743 struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
1744             const struct v4l2_ctrl_ops *ops,
1745             u32 id, u8 _max, u64 mask, u8 _def)
1746 {
1747     const char * const *qmenu = NULL;
1748     const s64 *qmenu_int = NULL;
1749     unsigned int qmenu_int_len = 0;
1750     const char *name;
1751     enum v4l2_ctrl_type type;
1752     s64 min;
1753     s64 max = _max;
1754     s64 def = _def;
1755     u64 step;
1756     u32 flags;
1757 
1758     v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1759 
1760     if (type == V4L2_CTRL_TYPE_MENU)
1761         qmenu = v4l2_ctrl_get_menu(id);
1762     else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
1763         qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
1764 
1765     if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
1766         handler_set_err(hdl, -EINVAL);
1767         return NULL;
1768     }
1769     return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1770                  0, max, mask, def, NULL, 0,
1771                  flags, qmenu, qmenu_int, ptr_null, NULL);
1772 }
1773 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
1774 
1775 /* Helper function for standard menu controls with driver defined menu */
1776 struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
1777             const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
1778             u64 mask, u8 _def, const char * const *qmenu)
1779 {
1780     enum v4l2_ctrl_type type;
1781     const char *name;
1782     u32 flags;
1783     u64 step;
1784     s64 min;
1785     s64 max = _max;
1786     s64 def = _def;
1787 
1788     /* v4l2_ctrl_new_std_menu_items() should only be called for
1789      * standard controls without a standard menu.
1790      */
1791     if (v4l2_ctrl_get_menu(id)) {
1792         handler_set_err(hdl, -EINVAL);
1793         return NULL;
1794     }
1795 
1796     v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1797     if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
1798         handler_set_err(hdl, -EINVAL);
1799         return NULL;
1800     }
1801     return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1802                  0, max, mask, def, NULL, 0,
1803                  flags, qmenu, NULL, ptr_null, NULL);
1804 
1805 }
1806 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
1807 
1808 /* Helper function for standard compound controls */
1809 struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
1810                 const struct v4l2_ctrl_ops *ops, u32 id,
1811                 const union v4l2_ctrl_ptr p_def)
1812 {
1813     const char *name;
1814     enum v4l2_ctrl_type type;
1815     u32 flags;
1816     s64 min, max, step, def;
1817 
1818     v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1819     if (type < V4L2_CTRL_COMPOUND_TYPES) {
1820         handler_set_err(hdl, -EINVAL);
1821         return NULL;
1822     }
1823     return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1824                  min, max, step, def, NULL, 0,
1825                  flags, NULL, NULL, p_def, NULL);
1826 }
1827 EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
1828 
1829 /* Helper function for standard integer menu controls */
1830 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
1831             const struct v4l2_ctrl_ops *ops,
1832             u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
1833 {
1834     const char *name;
1835     enum v4l2_ctrl_type type;
1836     s64 min;
1837     u64 step;
1838     s64 max = _max;
1839     s64 def = _def;
1840     u32 flags;
1841 
1842     v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1843     if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
1844         handler_set_err(hdl, -EINVAL);
1845         return NULL;
1846     }
1847     return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
1848                  0, max, 0, def, NULL, 0,
1849                  flags, NULL, qmenu_int, ptr_null, NULL);
1850 }
1851 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
1852 
1853 /* Add the controls from another handler to our own. */
1854 int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
1855               struct v4l2_ctrl_handler *add,
1856               bool (*filter)(const struct v4l2_ctrl *ctrl),
1857               bool from_other_dev)
1858 {
1859     struct v4l2_ctrl_ref *ref;
1860     int ret = 0;
1861 
1862     /* Do nothing if either handler is NULL or if they are the same */
1863     if (!hdl || !add || hdl == add)
1864         return 0;
1865     if (hdl->error)
1866         return hdl->error;
1867     mutex_lock(add->lock);
1868     list_for_each_entry(ref, &add->ctrl_refs, node) {
1869         struct v4l2_ctrl *ctrl = ref->ctrl;
1870 
1871         /* Skip handler-private controls. */
1872         if (ctrl->is_private)
1873             continue;
1874         /* And control classes */
1875         if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1876             continue;
1877         /* Filter any unwanted controls */
1878         if (filter && !filter(ctrl))
1879             continue;
1880         ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
1881         if (ret)
1882             break;
1883     }
1884     mutex_unlock(add->lock);
1885     return ret;
1886 }
1887 EXPORT_SYMBOL(v4l2_ctrl_add_handler);
1888 
1889 bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
1890 {
1891     if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
1892         return true;
1893     if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
1894         return true;
1895     switch (ctrl->id) {
1896     case V4L2_CID_AUDIO_MUTE:
1897     case V4L2_CID_AUDIO_VOLUME:
1898     case V4L2_CID_AUDIO_BALANCE:
1899     case V4L2_CID_AUDIO_BASS:
1900     case V4L2_CID_AUDIO_TREBLE:
1901     case V4L2_CID_AUDIO_LOUDNESS:
1902         return true;
1903     default:
1904         break;
1905     }
1906     return false;
1907 }
1908 EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
1909 
1910 /* Cluster controls */
1911 void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
1912 {
1913     bool has_volatiles = false;
1914     int i;
1915 
1916     /* The first control is the master control and it must not be NULL */
1917     if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
1918         return;
1919 
1920     for (i = 0; i < ncontrols; i++) {
1921         if (controls[i]) {
1922             controls[i]->cluster = controls;
1923             controls[i]->ncontrols = ncontrols;
1924             if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
1925                 has_volatiles = true;
1926         }
1927     }
1928     controls[0]->has_volatiles = has_volatiles;
1929 }
1930 EXPORT_SYMBOL(v4l2_ctrl_cluster);
1931 
1932 void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
1933                 u8 manual_val, bool set_volatile)
1934 {
1935     struct v4l2_ctrl *master = controls[0];
1936     u32 flag = 0;
1937     int i;
1938 
1939     v4l2_ctrl_cluster(ncontrols, controls);
1940     WARN_ON(ncontrols <= 1);
1941     WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
1942     WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
1943     master->is_auto = true;
1944     master->has_volatiles = set_volatile;
1945     master->manual_mode_value = manual_val;
1946     master->flags |= V4L2_CTRL_FLAG_UPDATE;
1947 
1948     if (!is_cur_manual(master))
1949         flag = V4L2_CTRL_FLAG_INACTIVE |
1950             (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
1951 
1952     for (i = 1; i < ncontrols; i++)
1953         if (controls[i])
1954             controls[i]->flags |= flag;
1955 }
1956 EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
1957 
1958 /*
1959  * Obtain the current volatile values of an autocluster and mark them
1960  * as new.
1961  */
1962 void update_from_auto_cluster(struct v4l2_ctrl *master)
1963 {
1964     int i;
1965 
1966     for (i = 1; i < master->ncontrols; i++)
1967         cur_to_new(master->cluster[i]);
1968     if (!call_op(master, g_volatile_ctrl))
1969         for (i = 1; i < master->ncontrols; i++)
1970             if (master->cluster[i])
1971                 master->cluster[i]->is_new = 1;
1972 }
1973 
1974 /*
1975  * Return non-zero if one or more of the controls in the cluster has a new
1976  * value that differs from the current value.
1977  */
1978 static int cluster_changed(struct v4l2_ctrl *master)
1979 {
1980     bool changed = false;
1981     unsigned int idx;
1982     int i;
1983 
1984     for (i = 0; i < master->ncontrols; i++) {
1985         struct v4l2_ctrl *ctrl = master->cluster[i];
1986         bool ctrl_changed = false;
1987 
1988         if (!ctrl)
1989             continue;
1990 
1991         if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE) {
1992             changed = true;
1993             ctrl_changed = true;
1994         }
1995 
1996         /*
1997          * Set has_changed to false to avoid generating
1998          * the event V4L2_EVENT_CTRL_CH_VALUE
1999          */
2000         if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2001             ctrl->has_changed = false;
2002             continue;
2003         }
2004 
2005         if (ctrl->elems != ctrl->new_elems)
2006             ctrl_changed = true;
2007 
2008         for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
2009             ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
2010                 ctrl->p_cur, ctrl->p_new);
2011         ctrl->has_changed = ctrl_changed;
2012         changed |= ctrl->has_changed;
2013     }
2014     return changed;
2015 }
2016 
2017 /*
2018  * Core function that calls try/s_ctrl and ensures that the new value is
2019  * copied to the current value on a set.
2020  * Must be called with ctrl->handler->lock held.
2021  */
2022 int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
2023                bool set, u32 ch_flags)
2024 {
2025     bool update_flag;
2026     int ret;
2027     int i;
2028 
2029     /*
2030      * Go through the cluster and either validate the new value or
2031      * (if no new value was set), copy the current value to the new
2032      * value, ensuring a consistent view for the control ops when
2033      * called.
2034      */
2035     for (i = 0; i < master->ncontrols; i++) {
2036         struct v4l2_ctrl *ctrl = master->cluster[i];
2037 
2038         if (!ctrl)
2039             continue;
2040 
2041         if (!ctrl->is_new) {
2042             cur_to_new(ctrl);
2043             continue;
2044         }
2045         /*
2046          * Check again: it may have changed since the
2047          * previous check in try_or_set_ext_ctrls().
2048          */
2049         if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
2050             return -EBUSY;
2051     }
2052 
2053     ret = call_op(master, try_ctrl);
2054 
2055     /* Don't set if there is no change */
2056     if (ret || !set || !cluster_changed(master))
2057         return ret;
2058     ret = call_op(master, s_ctrl);
2059     if (ret)
2060         return ret;
2061 
2062     /* If OK, then make the new values permanent. */
2063     update_flag = is_cur_manual(master) != is_new_manual(master);
2064 
2065     for (i = 0; i < master->ncontrols; i++) {
2066         /*
2067          * If we switch from auto to manual mode, and this cluster
2068          * contains volatile controls, then all non-master controls
2069          * have to be marked as changed. The 'new' value contains
2070          * the volatile value (obtained by update_from_auto_cluster),
2071          * which now has to become the current value.
2072          */
2073         if (i && update_flag && is_new_manual(master) &&
2074             master->has_volatiles && master->cluster[i])
2075             master->cluster[i]->has_changed = true;
2076 
2077         new_to_cur(fh, master->cluster[i], ch_flags |
2078             ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
2079     }
2080     return 0;
2081 }
2082 
2083 /* Activate/deactivate a control. */
2084 void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2085 {
2086     /* invert since the actual flag is called 'inactive' */
2087     bool inactive = !active;
2088     bool old;
2089 
2090     if (ctrl == NULL)
2091         return;
2092 
2093     if (inactive)
2094         /* set V4L2_CTRL_FLAG_INACTIVE */
2095         old = test_and_set_bit(4, &ctrl->flags);
2096     else
2097         /* clear V4L2_CTRL_FLAG_INACTIVE */
2098         old = test_and_clear_bit(4, &ctrl->flags);
2099     if (old != inactive)
2100         send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2101 }
2102 EXPORT_SYMBOL(v4l2_ctrl_activate);
2103 
2104 void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2105 {
2106     bool old;
2107 
2108     if (ctrl == NULL)
2109         return;
2110 
2111     lockdep_assert_held(ctrl->handler->lock);
2112 
2113     if (grabbed)
2114         /* set V4L2_CTRL_FLAG_GRABBED */
2115         old = test_and_set_bit(1, &ctrl->flags);
2116     else
2117         /* clear V4L2_CTRL_FLAG_GRABBED */
2118         old = test_and_clear_bit(1, &ctrl->flags);
2119     if (old != grabbed)
2120         send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2121 }
2122 EXPORT_SYMBOL(__v4l2_ctrl_grab);
2123 
2124 /* Call s_ctrl for all controls owned by the handler */
2125 int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2126 {
2127     struct v4l2_ctrl *ctrl;
2128     int ret = 0;
2129 
2130     if (hdl == NULL)
2131         return 0;
2132 
2133     lockdep_assert_held(hdl->lock);
2134 
2135     list_for_each_entry(ctrl, &hdl->ctrls, node)
2136         ctrl->done = false;
2137 
2138     list_for_each_entry(ctrl, &hdl->ctrls, node) {
2139         struct v4l2_ctrl *master = ctrl->cluster[0];
2140         int i;
2141 
2142         /* Skip if this control was already handled by a cluster. */
2143         /* Skip button controls and read-only controls. */
2144         if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
2145             (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
2146             continue;
2147 
2148         for (i = 0; i < master->ncontrols; i++) {
2149             if (master->cluster[i]) {
2150                 cur_to_new(master->cluster[i]);
2151                 master->cluster[i]->is_new = 1;
2152                 master->cluster[i]->done = true;
2153             }
2154         }
2155         ret = call_op(master, s_ctrl);
2156         if (ret)
2157             break;
2158     }
2159 
2160     return ret;
2161 }
2162 EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
2163 
2164 int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2165 {
2166     int ret;
2167 
2168     if (hdl == NULL)
2169         return 0;
2170 
2171     mutex_lock(hdl->lock);
2172     ret = __v4l2_ctrl_handler_setup(hdl);
2173     mutex_unlock(hdl->lock);
2174 
2175     return ret;
2176 }
2177 EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
2178 
2179 /* Log the control name and value */
2180 static void log_ctrl(const struct v4l2_ctrl *ctrl,
2181              const char *prefix, const char *colon)
2182 {
2183     if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
2184         return;
2185     if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2186         return;
2187 
2188     pr_info("%s%s%s: ", prefix, colon, ctrl->name);
2189 
2190     ctrl->type_ops->log(ctrl);
2191 
2192     if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
2193                V4L2_CTRL_FLAG_GRABBED |
2194                V4L2_CTRL_FLAG_VOLATILE)) {
2195         if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
2196             pr_cont(" inactive");
2197         if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
2198             pr_cont(" grabbed");
2199         if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
2200             pr_cont(" volatile");
2201     }
2202     pr_cont("\n");
2203 }
2204 
2205 /* Log all controls owned by the handler */
2206 void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
2207                   const char *prefix)
2208 {
2209     struct v4l2_ctrl *ctrl;
2210     const char *colon = "";
2211     int len;
2212 
2213     if (!hdl)
2214         return;
2215     if (!prefix)
2216         prefix = "";
2217     len = strlen(prefix);
2218     if (len && prefix[len - 1] != ' ')
2219         colon = ": ";
2220     mutex_lock(hdl->lock);
2221     list_for_each_entry(ctrl, &hdl->ctrls, node)
2222         if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
2223             log_ctrl(ctrl, prefix, colon);
2224     mutex_unlock(hdl->lock);
2225 }
2226 EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
2227 
2228 int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
2229                     const struct v4l2_ctrl_ops *ctrl_ops,
2230                     const struct v4l2_fwnode_device_properties *p)
2231 {
2232     if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
2233         u32 orientation_ctrl;
2234 
2235         switch (p->orientation) {
2236         case V4L2_FWNODE_ORIENTATION_FRONT:
2237             orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
2238             break;
2239         case V4L2_FWNODE_ORIENTATION_BACK:
2240             orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
2241             break;
2242         case V4L2_FWNODE_ORIENTATION_EXTERNAL:
2243             orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
2244             break;
2245         default:
2246             return -EINVAL;
2247         }
2248         if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
2249                         V4L2_CID_CAMERA_ORIENTATION,
2250                         V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
2251                         orientation_ctrl))
2252             return hdl->error;
2253     }
2254 
2255     if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
2256         if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
2257                        V4L2_CID_CAMERA_SENSOR_ROTATION,
2258                        p->rotation, p->rotation, 1,
2259                        p->rotation))
2260             return hdl->error;
2261     }
2262 
2263     return hdl->error;
2264 }
2265 EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);