MAJOR=4
MINOR=43
DEVNAME=tty43
  +   ˆÂÁ„m¶Àï_†I|¥�+a–Ðz¾””ÔD¨ 	Å �ãl©‹FÿÁ ?÷     /* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 *  V4L2 controls support header.
 *
 *  Copyright (C) 2010  Hans Verkuil <hverkuil@xs4all.nl>
 */

#ifndef _V4L2_CTRLS_H
#define _V4L2_CTRLS_H

#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/videodev2.h>
#include <media/media-request.h>

/*
 * Include the stateless codec compound control definitions.
 * This will move to the public headers once this API is fully stable.
 */
#include <media/hevc-ctrls.h>

/* forward references */
struct file;
struct poll_table_struct;
struct v4l2_ctrl;
struct v4l2_ctrl_handler;
struct v4l2_ctrl_helper;
struct v4l2_fh;
struct v4l2_fwnode_device_properties;
struct v4l2_subdev;
struct v4l2_subscribed_event;
struct video_device;

/**
 * union v4l2_ctrl_ptr - A pointer to a control value.
 * @p_s32:			Pointer to a 32-bit signed value.
 * @p_s64:			Pointer to a 64-bit signed value.
 * @p_u8:			Pointer to a 8-bit unsigned value.
 * @p_u16:			Pointer to a 16-bit unsigned value.
 * @p_u32:			Pointer to a 32-bit unsigned value.
 * @p_char:			Pointer to a string.
 * @p_mpeg2_sequence:		Pointer to a MPEG2 sequence structure.
 * @p_mpeg2_picture:		Pointer to a MPEG2 picture structure.
 * @p_mpeg2_quantisation:	Pointer to a MPEG2 quantisation data structure.
 * @p_fwht_params:		Pointer to a FWHT stateless parameters structure.
 * @p_h264_sps:			Pointer to a struct v4l2_ctrl_h264_sps.
 * @p_h264_pps:			Pointer to a struct v4l2_ctrl_h264_pps.
 * @p_h264_scaling_matrix:	Pointer to a struct v4l2_ctrl_h264_scaling_matrix.
 * @p_h264_slice_params:	Pointer to a struct v4l2_ctrl_h264_slice_params.
 * @p_h264_decode_params:	Pointer to a struct v4l2_ctrl_h264_decode_params.
 * @p_h264_pred_weights:	Pointer to a struct v4l2_ctrl_h264_pred_weights.
 * @p_vp8_frame:		Pointer to a VP8 frame params structure.
 * @p_vp9_compressed_hdr_probs:	Pointer to a VP9 frame compressed header probs structure.
 * @p_vp9_frame:		Pointer to a VP9 frame params structure.
 * @p_hevc_sps:			Pointer to an HEVC sequence parameter set structure.
 * @p_hevc_pps:			Pointer to an HEVC picture parameter set structure.
 * @p_hevc_slice_params:	Pointer to an HEVC slice parameters structure.
 * @p_hdr10_cll:		Pointer to an HDR10 Content Light Level structure.
 * @p_hdr10_mastering:		Pointer to an HDR10 Mastering Display structure.
 * @p_area:			Pointer to an area.
 * @p:				Pointer to a compound value.
 * @p_const:			Pointer to a constant compound value.
 */
union v4l2_ctrl_ptr {
	s32 *p_s32;
	s64 *p_s64;
	u8 *p_u8;
	u16 *p_u16;
	u32 *p_u32;
	char *p_char;
	struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
	struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
	struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation;
	struct v4l2_ctrl_fwht_params *p_fwht_params;
	struct v4l2_ctrl_h264_sps *p_h264_sps;
	struct v4l2_ctrl_h264_pps *p_h264_pps;
	struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
	struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
	struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
	struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs;
	struct v4l2_ctrl_vp9_frame *p_vp9_frame;
	struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
	struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
	struct v4l2_area *p_area;
	void *p;
	const void *p_const;
};

/**
 * v4l2_ctrl_ptr_create() - Helper function to return a v4l2_ctrl_ptr from a
 * void pointer
 * @ptr:	The void pointer
 */
static inline union v4l2_ctrl_ptr v4l2_ctrl_ptr_create(void *ptr)
{
	union v4l2_ctrl_ptr p = { .p = ptr };

	return p;
}

/**
 * struct v4l2_ctrl_ops - The control operations that the driver has to provide.
 *
 * @g_volatile_ctrl: Get a new value for this control. Generally only relevant
 *		for volatile (and usually read-only) controls such 