diff -drupN a/include/media/sunxi_camera.h b/include/media/sunxi_camera.h --- a/include/media/sunxi_camera.h 1970-01-01 03:00:00.000000000 +0300 +++ b/include/media/sunxi_camera.h 2022-06-12 05:28:14.000000000 +0300 @@ -0,0 +1,169 @@ +/* + * include/media/sunxi_camera.h -- Ctrl IDs definitions for sunxi-vfe + * + * Copyright (C) 2014 Allwinnertech Co., Ltd. + * Copyright (C) 2015 Yang Feng + * + * Author: Yang Feng + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ +#ifndef _SUNXI_CAMERA_H_ +#define _SUNXI_CAMERA_H_ + +#include +#include + + +/* Flags for 'capability' and 'capturemode' fields */ +#define V4L2_MODE_HIGHQUALITY 0x0001 +#define V4L2_MODE_VIDEO 0x0002 +#define V4L2_MODE_IMAGE 0x0003 +#define V4L2_MODE_PREVIEW 0x0004 +/* + * USER CIDS + */ +struct v4l2_win_coordinate { + __s32 x1; + __s32 y1; + __s32 x2; + __s32 y2; +}; + +#define V4L2_MAX_WIN_NUM 10 + +#define V4L2_FLASH_LED_MODE_AUTO (V4L2_FLASH_LED_MODE_TORCH+1) +#define V4L2_FLASH_LED_MODE_RED_EYE (V4L2_FLASH_LED_MODE_TORCH+2) + +struct v4l2_win_setting { + __s32 win_num; + struct v4l2_win_coordinate coor[V4L2_MAX_WIN_NUM]; +}; + +enum v4l2_gain_shift { + V4L2_GAIN_SHIFT = 0, + V4L2_SHARP_LEVEL_SHIFT = 8, + V4L2_SHARP_MIN_SHIFT = 20, + V4L2_NDF_SHIFT = 26, +}; + +#define MAX_EXP_FRAMES 5 + +/* The base for the sunxi-vfe controls. Total of 64 controls is reserved for this driver, add by yangfeng */ +#define V4L2_CID_USER_SUNXI_CAMERA_BASE (V4L2_CID_USER_BASE + 0x1050) + +#define V4L2_CID_HFLIP_THUMB (V4L2_CID_USER_SUNXI_CAMERA_BASE+0) +#define V4L2_CID_VFLIP_THUMB (V4L2_CID_USER_SUNXI_CAMERA_BASE+1) +#define V4L2_CID_AUTO_FOCUS_INIT (V4L2_CID_USER_SUNXI_CAMERA_BASE+2) +#define V4L2_CID_AUTO_FOCUS_RELEASE (V4L2_CID_USER_SUNXI_CAMERA_BASE+3) +#define V4L2_CID_GSENSOR_ROTATION (V4L2_CID_USER_SUNXI_CAMERA_BASE+4) +#define V4L2_CID_FRAME_RATE (V4L2_CID_USER_SUNXI_CAMERA_BASE+5) + +enum v4l2_take_picture { + V4L2_TAKE_PICTURE_STOP = 0, + V4L2_TAKE_PICTURE_NORM = 1, + V4L2_TAKE_PICTURE_FAST = 2, + V4L2_TAKE_PICTURE_FLASH = 3, + V4L2_TAKE_PICTURE_HDR = 4, +}; +struct isp_hdr_setting_t { + __s32 hdr_en; + __s32 hdr_mode; + __s32 frames_count; + __s32 total_frames; + __s32 values[MAX_EXP_FRAMES]; +}; + +#define HDR_CTRL_GET 0 +#define HDR_CTRL_SET 1 +struct isp_hdr_ctrl { + __s32 flag; + __s32 count; + struct isp_hdr_setting_t hdr_t; +}; + +#define V4L2_CID_TAKE_PICTURE (V4L2_CID_USER_SUNXI_CAMERA_BASE+6) + +typedef union { + unsigned int dwval; + struct { + unsigned int af_sharp : 16; + unsigned int hdr_cnt : 4; + unsigned int flash_ok : 1; + unsigned int capture_ok : 1; + unsigned int fast_capture_ok : 1; + unsigned int res0 : 9; + } bits; +} IMAGE_FLAG_t; + +#define V4L2_CID_HOR_VISUAL_ANGLE (V4L2_CID_USER_SUNXI_CAMERA_BASE+7) +#define V4L2_CID_VER_VISUAL_ANGLE (V4L2_CID_USER_SUNXI_CAMERA_BASE+8) +#define V4L2_CID_FOCUS_LENGTH (V4L2_CID_USER_SUNXI_CAMERA_BASE+9) +#define V4L2_CID_R_GAIN (V4L2_CID_USER_SUNXI_CAMERA_BASE+10) +#define V4L2_CID_G_GAIN (V4L2_CID_USER_SUNXI_CAMERA_BASE+11) +#define V4L2_CID_B_GAIN (V4L2_CID_USER_SUNXI_CAMERA_BASE+12) + +enum v4l2_sensor_type { + V4L2_SENSOR_TYPE_YUV = 0, + V4L2_SENSOR_TYPE_RAW = 1, +}; + +#define V4L2_CID_SENSOR_TYPE (V4L2_CID_USER_SUNXI_CAMERA_BASE+13) + +/* + * PRIVATE IOCTRLS + */ + +struct isp_stat_buf { + void __user *buf; + __u32 buf_size; +}; +struct isp_exif_attribute { + struct v4l2_fract exposure_time; + struct v4l2_fract shutter_speed; + __u32 fnumber; + __u32 focal_length; + __s32 exposure_bias; + __u32 iso_speed; + __u32 flash_fire; + __u32 brightness; + __s32 reserved[16]; +}; + +struct rot_channel_cfg { + __u32 sel_ch; + __u32 rotation; + struct v4l2_pix_format pix; +}; +#define VIDIOC_ISP_AE_STAT_REQ \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct isp_stat_buf) +#define VIDIOC_ISP_HIST_STAT_REQ \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct isp_stat_buf) +#define VIDIOC_ISP_AF_STAT_REQ \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct isp_stat_buf) +#define VIDIOC_ISP_EXIF_REQ \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct isp_exif_attribute) +#define VIDIOC_ISP_GAMMA_REQ \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct isp_stat_buf) +#define VIDIOC_AUTO_FOCUS_WIN \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct v4l2_win_setting) +#define VIDIOC_AUTO_EXPOSURE_WIN \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct v4l2_win_setting) +#define VIDIOC_HDR_CTRL \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct isp_hdr_ctrl) + +#define VIDIOC_SET_SUBCHANNEL \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct v4l2_pix_format) +#define VIDIOC_SET_ROTCHANNEL \ + _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct rot_channel_cfg) + + +#endif /*_SUNXI_CAMERA_H_*/