cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

v4l2-ctrls-core.c (58548B)


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