/* * 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 *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_*/