1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Rockchip isp1 driver 4*4882a593Smuzhiyun * Copyright (C) 2017 Rockchip Electronics Co., Ltd. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _UAPI_RK_ISP1_CONFIG_H 8*4882a593Smuzhiyun #define _UAPI_RK_ISP1_CONFIG_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/types.h> 11*4882a593Smuzhiyun #include <linux/v4l2-controls.h> 12*4882a593Smuzhiyun #include "rk-isp21-config.h" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define CIFISP_MODULE_DPCC (1 << 0) 15*4882a593Smuzhiyun #define CIFISP_MODULE_BLS (1 << 1) 16*4882a593Smuzhiyun #define CIFISP_MODULE_SDG (1 << 2) 17*4882a593Smuzhiyun #define CIFISP_MODULE_HST (1 << 3) 18*4882a593Smuzhiyun #define CIFISP_MODULE_LSC (1 << 4) 19*4882a593Smuzhiyun #define CIFISP_MODULE_AWB_GAIN (1 << 5) 20*4882a593Smuzhiyun #define CIFISP_MODULE_FLT (1 << 6) 21*4882a593Smuzhiyun #define CIFISP_MODULE_BDM (1 << 7) 22*4882a593Smuzhiyun #define CIFISP_MODULE_CTK (1 << 8) 23*4882a593Smuzhiyun #define CIFISP_MODULE_GOC (1 << 9) 24*4882a593Smuzhiyun #define CIFISP_MODULE_CPROC (1 << 10) 25*4882a593Smuzhiyun #define CIFISP_MODULE_AFC (1 << 11) 26*4882a593Smuzhiyun #define CIFISP_MODULE_AWB (1 << 12) 27*4882a593Smuzhiyun #define CIFISP_MODULE_IE (1 << 13) 28*4882a593Smuzhiyun #define CIFISP_MODULE_AEC (1 << 14) 29*4882a593Smuzhiyun #define CIFISP_MODULE_WDR (1 << 15) 30*4882a593Smuzhiyun #define CIFISP_MODULE_DPF (1 << 16) 31*4882a593Smuzhiyun #define CIFISP_MODULE_DPF_STRENGTH (1 << 17) 32*4882a593Smuzhiyun #define CIFISP_MODULE_DEMOSAICLP (1 << 18) 33*4882a593Smuzhiyun #define CIFISP_MODULE_RK_IESHARP (1 << 19) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define CIFISP_CTK_COEFF_MAX 0x100 36*4882a593Smuzhiyun #define CIFISP_CTK_OFFSET_MAX 0x800 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define CIFISP_AE_MEAN_MAX 81 39*4882a593Smuzhiyun #define CIFISP_HIST_BIN_N_MAX 32 40*4882a593Smuzhiyun #define CIFISP_AFM_MAX_WINDOWS 3 41*4882a593Smuzhiyun #define CIFISP_DEGAMMA_CURVE_SIZE 17 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define CIFISP_BDM_MAX_TH 0xFF 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* 46*4882a593Smuzhiyun * Black level compensation 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun /* maximum value for horizontal start address */ 49*4882a593Smuzhiyun #define CIFISP_BLS_START_H_MAX 0x00000FFF 50*4882a593Smuzhiyun /* maximum value for horizontal stop address */ 51*4882a593Smuzhiyun #define CIFISP_BLS_STOP_H_MAX 0x00000FFF 52*4882a593Smuzhiyun /* maximum value for vertical start address */ 53*4882a593Smuzhiyun #define CIFISP_BLS_START_V_MAX 0x00000FFF 54*4882a593Smuzhiyun /* maximum value for vertical stop address */ 55*4882a593Smuzhiyun #define CIFISP_BLS_STOP_V_MAX 0x00000FFF 56*4882a593Smuzhiyun /* maximum is 2^18 = 262144*/ 57*4882a593Smuzhiyun #define CIFISP_BLS_SAMPLES_MAX 0x00000012 58*4882a593Smuzhiyun /* maximum value for fixed black level */ 59*4882a593Smuzhiyun #define CIFISP_BLS_FIX_SUB_MAX 0x00000FFF 60*4882a593Smuzhiyun /* minimum value for fixed black level */ 61*4882a593Smuzhiyun #define CIFISP_BLS_FIX_SUB_MIN 0xFFFFF000 62*4882a593Smuzhiyun /* 13 bit range (signed)*/ 63*4882a593Smuzhiyun #define CIFISP_BLS_FIX_MASK 0x00001FFF 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* 66*4882a593Smuzhiyun * Automatic white balance measurments 67*4882a593Smuzhiyun */ 68*4882a593Smuzhiyun #define CIFISP_AWB_MAX_GRID 1 69*4882a593Smuzhiyun #define CIFISP_AWB_MAX_FRAMES 7 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* 72*4882a593Smuzhiyun * Gamma out 73*4882a593Smuzhiyun */ 74*4882a593Smuzhiyun /* Maximum number of color samples supported */ 75*4882a593Smuzhiyun #define CIFISP_GAMMA_OUT_MAX_SAMPLES 34 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* 78*4882a593Smuzhiyun * Lens shade correction 79*4882a593Smuzhiyun */ 80*4882a593Smuzhiyun #define CIFISP_LSC_GRAD_TBL_SIZE 8 81*4882a593Smuzhiyun #define CIFISP_LSC_SIZE_TBL_SIZE 8 82*4882a593Smuzhiyun /* 83*4882a593Smuzhiyun * The following matches the tuning process, 84*4882a593Smuzhiyun * not the max capabilities of the chip. 85*4882a593Smuzhiyun * Last value unused. 86*4882a593Smuzhiyun */ 87*4882a593Smuzhiyun #define CIFISP_LSC_DATA_TBL_SIZE 290 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* 90*4882a593Smuzhiyun * Histogram calculation 91*4882a593Smuzhiyun */ 92*4882a593Smuzhiyun /* Last 3 values unused. */ 93*4882a593Smuzhiyun #define CIFISP_HISTOGRAM_WEIGHT_GRIDS_SIZE 81 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* 96*4882a593Smuzhiyun * Defect Pixel Cluster Correction 97*4882a593Smuzhiyun */ 98*4882a593Smuzhiyun #define CIFISP_DPCC_METHODS_MAX 3 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* 101*4882a593Smuzhiyun * Denoising pre filter 102*4882a593Smuzhiyun */ 103*4882a593Smuzhiyun #define CIFISP_DPF_MAX_NLF_COEFFS 17 104*4882a593Smuzhiyun #define CIFISP_DPF_MAX_SPATIAL_COEFFS 6 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* WDR */ 107*4882a593Smuzhiyun #define CIFISP_WDR_SIZE 48 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun /* 110*4882a593Smuzhiyun * Measurement types 111*4882a593Smuzhiyun */ 112*4882a593Smuzhiyun #define CIFISP_STAT_AWB (1 << 0) 113*4882a593Smuzhiyun #define CIFISP_STAT_AUTOEXP (1 << 1) 114*4882a593Smuzhiyun #define CIFISP_STAT_AFM_FIN (1 << 2) 115*4882a593Smuzhiyun #define CIFISP_STAT_HIST (1 << 3) 116*4882a593Smuzhiyun #define CIFISP_STAT_EMB_DATA (1 << 4) 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* ADD DATA */ 119*4882a593Smuzhiyun #define CIFISP_ADD_DATA_FIFO_SIZE (2048 * 4) 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* Private v4l2 event */ 122*4882a593Smuzhiyun #define CIFISP_V4L2_EVENT_STREAM_START \ 123*4882a593Smuzhiyun (V4L2_EVENT_PRIVATE_START + 1) 124*4882a593Smuzhiyun #define CIFISP_V4L2_EVENT_STREAM_STOP \ 125*4882a593Smuzhiyun (V4L2_EVENT_PRIVATE_START + 2) 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* 128*4882a593Smuzhiyun * private control id 129*4882a593Smuzhiyun */ 130*4882a593Smuzhiyun enum cifisp_ctrl_id { 131*4882a593Smuzhiyun CIFISP_CID_EMB_VC = (V4L2_CTRL_CLASS_CAMERA | 0x1001), 132*4882a593Smuzhiyun CIFISP_CID_EMB_DT, 133*4882a593Smuzhiyun CIFISP_CID_LAST 134*4882a593Smuzhiyun }; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun enum cifisp_histogram_mode { 137*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_DISABLE, 138*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_RGB_COMBINED, 139*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_R_HISTOGRAM, 140*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_G_HISTOGRAM, 141*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_B_HISTOGRAM, 142*4882a593Smuzhiyun CIFISP_HISTOGRAM_MODE_Y_HISTOGRAM 143*4882a593Smuzhiyun }; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun enum cifisp_awb_mode_type { 146*4882a593Smuzhiyun CIFISP_AWB_MODE_MANUAL, 147*4882a593Smuzhiyun CIFISP_AWB_MODE_RGB, 148*4882a593Smuzhiyun CIFISP_AWB_MODE_YCBCR 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun enum cifisp_flt_mode { 152*4882a593Smuzhiyun CIFISP_FLT_STATIC_MODE, 153*4882a593Smuzhiyun CIFISP_FLT_DYNAMIC_MODE 154*4882a593Smuzhiyun }; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /** 157*4882a593Smuzhiyun * enum cifisp_exp_ctrl_auotostop - stop modes 158*4882a593Smuzhiyun * @CIFISP_EXP_CTRL_AUTOSTOP_0: continuous measurement 159*4882a593Smuzhiyun * @CIFISP_EXP_CTRL_AUTOSTOP_1: stop measuring after a complete frame 160*4882a593Smuzhiyun */ 161*4882a593Smuzhiyun enum cifisp_exp_ctrl_auotostop { 162*4882a593Smuzhiyun CIFISP_EXP_CTRL_AUTOSTOP_0 = 0, 163*4882a593Smuzhiyun CIFISP_EXP_CTRL_AUTOSTOP_1 = 1, 164*4882a593Smuzhiyun }; 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun /** 167*4882a593Smuzhiyun * enum cifisp_exp_meas_mode - Exposure measure mode 168*4882a593Smuzhiyun * @CIFISP_EXP_MEASURING_MODE_0: Y = 16 + 0.25R + 0.5G + 0.1094B 169*4882a593Smuzhiyun * @CIFISP_EXP_MEASURING_MODE_1: Y = (R + G + B) x (85/256) 170*4882a593Smuzhiyun */ 171*4882a593Smuzhiyun enum cifisp_exp_meas_mode { 172*4882a593Smuzhiyun CIFISP_EXP_MEASURING_MODE_0, 173*4882a593Smuzhiyun CIFISP_EXP_MEASURING_MODE_1, 174*4882a593Smuzhiyun }; 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /*---------- PART1: Input Parameters ------------*/ 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun struct cifisp_window { 179*4882a593Smuzhiyun unsigned short h_offs; 180*4882a593Smuzhiyun unsigned short v_offs; 181*4882a593Smuzhiyun unsigned short h_size; 182*4882a593Smuzhiyun unsigned short v_size; 183*4882a593Smuzhiyun } __attribute__ ((packed)); 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /** 186*4882a593Smuzhiyun * struct cifisp_bls_fixed_val - BLS fixed subtraction values 187*4882a593Smuzhiyun * 188*4882a593Smuzhiyun * The values will be subtracted from the sensor 189*4882a593Smuzhiyun * values. Therefore a negative value means addition instead of subtraction! 190*4882a593Smuzhiyun * 191*4882a593Smuzhiyun * @r: Fixed (signed!) subtraction value for Bayer pattern R 192*4882a593Smuzhiyun * @gr: Fixed (signed!) subtraction value for Bayer pattern Gr 193*4882a593Smuzhiyun * @gb: Fixed (signed!) subtraction value for Bayer pattern Gb 194*4882a593Smuzhiyun * @b: Fixed (signed!) subtraction value for Bayer pattern B 195*4882a593Smuzhiyun */ 196*4882a593Smuzhiyun struct cifisp_bls_fixed_val { 197*4882a593Smuzhiyun signed short r; 198*4882a593Smuzhiyun signed short gr; 199*4882a593Smuzhiyun signed short gb; 200*4882a593Smuzhiyun signed short b; 201*4882a593Smuzhiyun } __attribute__ ((packed)); 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /** 204*4882a593Smuzhiyun * struct cifisp_bls_config - Configuration used by black level subtraction 205*4882a593Smuzhiyun * 206*4882a593Smuzhiyun * @enable_auto: Automatic mode activated means that the measured values 207*4882a593Smuzhiyun * are subtracted.Otherwise the fixed subtraction 208*4882a593Smuzhiyun * values will be subtracted. 209*4882a593Smuzhiyun * @en_windows: enabled window 210*4882a593Smuzhiyun * @bls_window1: Measurement window 1 size 211*4882a593Smuzhiyun * @bls_window2: Measurement window 2 size 212*4882a593Smuzhiyun * @bls_samples: Set amount of measured pixels for each Bayer position 213*4882a593Smuzhiyun * (A, B,C and D) to 2^bls_samples. 214*4882a593Smuzhiyun * @cifisp_bls_fixed_val: Fixed subtraction values 215*4882a593Smuzhiyun */ 216*4882a593Smuzhiyun struct cifisp_bls_config { 217*4882a593Smuzhiyun unsigned char enable_auto; 218*4882a593Smuzhiyun unsigned char en_windows; 219*4882a593Smuzhiyun struct cifisp_window bls_window1; 220*4882a593Smuzhiyun struct cifisp_window bls_window2; 221*4882a593Smuzhiyun unsigned char bls_samples; 222*4882a593Smuzhiyun struct cifisp_bls_fixed_val fixed_val; 223*4882a593Smuzhiyun } __attribute__ ((packed)); 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /** 226*4882a593Smuzhiyun * struct cifisp_dpcc_methods_config - Methods Configuration used by Defect Pixel Cluster Correction 227*4882a593Smuzhiyun * 228*4882a593Smuzhiyun * @method: 229*4882a593Smuzhiyun * @line_thresh: 230*4882a593Smuzhiyun * @line_mad_fac: 231*4882a593Smuzhiyun * @pg_fac: 232*4882a593Smuzhiyun * @rnd_thresh: 233*4882a593Smuzhiyun * @rg_fac: 234*4882a593Smuzhiyun */ 235*4882a593Smuzhiyun struct cifisp_dpcc_methods_config { 236*4882a593Smuzhiyun unsigned int method; 237*4882a593Smuzhiyun unsigned int line_thresh; 238*4882a593Smuzhiyun unsigned int line_mad_fac; 239*4882a593Smuzhiyun unsigned int pg_fac; 240*4882a593Smuzhiyun unsigned int rnd_thresh; 241*4882a593Smuzhiyun unsigned int rg_fac; 242*4882a593Smuzhiyun } __attribute__ ((packed)); 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun /** 245*4882a593Smuzhiyun * struct cifisp_dpcc_methods_config - Configuration used by Defect Pixel Cluster Correction 246*4882a593Smuzhiyun * 247*4882a593Smuzhiyun * @mode: dpcc output mode 248*4882a593Smuzhiyun * @output_mode: whether use hard coded methods 249*4882a593Smuzhiyun * @set_use: stage1 methods set 250*4882a593Smuzhiyun * @methods: methods config 251*4882a593Smuzhiyun * @ro_limits: rank order limits 252*4882a593Smuzhiyun * @rnd_offs: differential rank offsets for rank neighbor difference 253*4882a593Smuzhiyun */ 254*4882a593Smuzhiyun struct cifisp_dpcc_config { 255*4882a593Smuzhiyun unsigned int mode; 256*4882a593Smuzhiyun unsigned int output_mode; 257*4882a593Smuzhiyun unsigned int set_use; 258*4882a593Smuzhiyun struct cifisp_dpcc_methods_config methods[CIFISP_DPCC_METHODS_MAX]; 259*4882a593Smuzhiyun unsigned int ro_limits; 260*4882a593Smuzhiyun unsigned int rnd_offs; 261*4882a593Smuzhiyun } __attribute__ ((packed)); 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun struct cifisp_gamma_corr_curve { 264*4882a593Smuzhiyun unsigned short gamma_y[CIFISP_DEGAMMA_CURVE_SIZE]; 265*4882a593Smuzhiyun } __attribute__ ((packed)); 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun struct cifisp_gamma_curve_x_axis_pnts { 268*4882a593Smuzhiyun unsigned int gamma_dx0; 269*4882a593Smuzhiyun unsigned int gamma_dx1; 270*4882a593Smuzhiyun } __attribute__ ((packed)); 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun /** 273*4882a593Smuzhiyun * struct cifisp_gamma_corr_curve - Configuration used by sensor degamma 274*4882a593Smuzhiyun * 275*4882a593Smuzhiyun * @curve_x: gamma curve point definition axis for x 276*4882a593Smuzhiyun * @xa_pnts: x increments 277*4882a593Smuzhiyun */ 278*4882a593Smuzhiyun struct cifisp_sdg_config { 279*4882a593Smuzhiyun struct cifisp_gamma_corr_curve curve_r; 280*4882a593Smuzhiyun struct cifisp_gamma_corr_curve curve_g; 281*4882a593Smuzhiyun struct cifisp_gamma_corr_curve curve_b; 282*4882a593Smuzhiyun struct cifisp_gamma_curve_x_axis_pnts xa_pnts; 283*4882a593Smuzhiyun } __attribute__ ((packed)); 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /** 286*4882a593Smuzhiyun * struct cifisp_lsc_config - Configuration used by Lens shading correction 287*4882a593Smuzhiyun * 288*4882a593Smuzhiyun * refer to datasheet for details 289*4882a593Smuzhiyun */ 290*4882a593Smuzhiyun struct cifisp_lsc_config { 291*4882a593Smuzhiyun unsigned int r_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 292*4882a593Smuzhiyun unsigned int gr_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 293*4882a593Smuzhiyun unsigned int gb_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 294*4882a593Smuzhiyun unsigned int b_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun unsigned int x_grad_tbl[CIFISP_LSC_GRAD_TBL_SIZE]; 297*4882a593Smuzhiyun unsigned int y_grad_tbl[CIFISP_LSC_GRAD_TBL_SIZE]; 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun unsigned int x_size_tbl[CIFISP_LSC_SIZE_TBL_SIZE]; 300*4882a593Smuzhiyun unsigned int y_size_tbl[CIFISP_LSC_SIZE_TBL_SIZE]; 301*4882a593Smuzhiyun unsigned short config_width; 302*4882a593Smuzhiyun unsigned short config_height; 303*4882a593Smuzhiyun } __attribute__ ((packed)); 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun /** 306*4882a593Smuzhiyun * struct cifisp_ie_config - Configuration used by image effects 307*4882a593Smuzhiyun * 308*4882a593Smuzhiyun * @eff_mat_1: 3x3 Matrix Coefficients for Emboss Effect 1 309*4882a593Smuzhiyun * @eff_mat_2: 3x3 Matrix Coefficients for Emboss Effect 2 310*4882a593Smuzhiyun * @eff_mat_3: 3x3 Matrix Coefficients for Emboss 3/Sketch 1 311*4882a593Smuzhiyun * @eff_mat_4: 3x3 Matrix Coefficients for Sketch Effect 2 312*4882a593Smuzhiyun * @eff_mat_5: 3x3 Matrix Coefficients for Sketch Effect 3 313*4882a593Smuzhiyun * @eff_tint: Chrominance increment values of tint (used for sepia effect) 314*4882a593Smuzhiyun */ 315*4882a593Smuzhiyun struct cifisp_ie_config { 316*4882a593Smuzhiyun unsigned short effect; 317*4882a593Smuzhiyun unsigned short color_sel; 318*4882a593Smuzhiyun unsigned short eff_mat_1; 319*4882a593Smuzhiyun unsigned short eff_mat_2; 320*4882a593Smuzhiyun unsigned short eff_mat_3; 321*4882a593Smuzhiyun unsigned short eff_mat_4; 322*4882a593Smuzhiyun unsigned short eff_mat_5; 323*4882a593Smuzhiyun unsigned short eff_tint; 324*4882a593Smuzhiyun } __attribute__ ((packed)); 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun /** 327*4882a593Smuzhiyun * struct cifisp_cproc_config - Configuration used by Color Processing 328*4882a593Smuzhiyun * 329*4882a593Smuzhiyun * @c_out_range: Chrominance pixel clipping range at output. (0 for limit, 1 for full) 330*4882a593Smuzhiyun * @y_in_range: Luminance pixel clipping range at output. 331*4882a593Smuzhiyun * @y_out_range: Luminance pixel clipping range at output. 332*4882a593Smuzhiyun * @contrast: 00~ff, 0.0~1.992 333*4882a593Smuzhiyun * @brightness: 80~7F, -128~+127 334*4882a593Smuzhiyun * @sat: saturation, 00~FF, 0.0~1.992 335*4882a593Smuzhiyun * @hue: 80~7F, -90~+87.188 336*4882a593Smuzhiyun */ 337*4882a593Smuzhiyun struct cifisp_cproc_config { 338*4882a593Smuzhiyun unsigned char c_out_range; 339*4882a593Smuzhiyun unsigned char y_in_range; 340*4882a593Smuzhiyun unsigned char y_out_range; 341*4882a593Smuzhiyun unsigned char contrast; 342*4882a593Smuzhiyun unsigned char brightness; 343*4882a593Smuzhiyun unsigned char sat; 344*4882a593Smuzhiyun unsigned char hue; 345*4882a593Smuzhiyun } __attribute__ ((packed)); 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun /** 348*4882a593Smuzhiyun * struct cifisp_awb_meas_config - Configuration used by auto white balance 349*4882a593Smuzhiyun * 350*4882a593Smuzhiyun * @awb_wnd: white balance measurement window (in pixels) 351*4882a593Smuzhiyun * @max_y: only pixels values < max_y contribute to awb measurement, set to 0 to disable this feature 352*4882a593Smuzhiyun * @min_y: only pixels values > min_y contribute to awb measurement 353*4882a593Smuzhiyun * @max_csum: Chrominance sum maximum value, only consider pixels with Cb+Cr, smaller than threshold for awb measurements 354*4882a593Smuzhiyun * @min_c: Chrominance minimum value, only consider pixels with Cb/Cr each greater than threshold value for awb measurements 355*4882a593Smuzhiyun * @frames: number of frames - 1 used for mean value calculation(ucFrames=0 means 1 Frame) 356*4882a593Smuzhiyun * @awb_ref_cr: reference Cr value for AWB regulation, target for AWB 357*4882a593Smuzhiyun * @awb_ref_cb: reference Cb value for AWB regulation, target for AWB 358*4882a593Smuzhiyun */ 359*4882a593Smuzhiyun struct cifisp_awb_meas_config { 360*4882a593Smuzhiyun /* 361*4882a593Smuzhiyun * Note: currently the h and v offsets are mapped to grid offsets 362*4882a593Smuzhiyun */ 363*4882a593Smuzhiyun struct cifisp_window awb_wnd; 364*4882a593Smuzhiyun enum cifisp_awb_mode_type awb_mode; 365*4882a593Smuzhiyun unsigned char max_y; 366*4882a593Smuzhiyun unsigned char min_y; 367*4882a593Smuzhiyun unsigned char max_csum; 368*4882a593Smuzhiyun unsigned char min_c; 369*4882a593Smuzhiyun unsigned char frames; 370*4882a593Smuzhiyun unsigned char awb_ref_cr; 371*4882a593Smuzhiyun unsigned char awb_ref_cb; 372*4882a593Smuzhiyun _Bool enable_ymax_cmp; 373*4882a593Smuzhiyun } __attribute__ ((packed)); 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun /** 376*4882a593Smuzhiyun * struct cifisp_awb_gain_config - Configuration used by auto white balance gain 377*4882a593Smuzhiyun * 378*4882a593Smuzhiyun * out_data_x = ( AWB_GEAIN_X * in_data + 128) >> 8 379*4882a593Smuzhiyun */ 380*4882a593Smuzhiyun struct cifisp_awb_gain_config { 381*4882a593Smuzhiyun unsigned short gain_red; 382*4882a593Smuzhiyun unsigned short gain_green_r; 383*4882a593Smuzhiyun unsigned short gain_blue; 384*4882a593Smuzhiyun unsigned short gain_green_b; 385*4882a593Smuzhiyun } __attribute__ ((packed)); 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun /** 388*4882a593Smuzhiyun * struct cifisp_flt_config - Configuration used by ISP filtering 389*4882a593Smuzhiyun * 390*4882a593Smuzhiyun * @mode: ISP_FILT_MODE register fields 391*4882a593Smuzhiyun * @grn_stage1: ISP_FILT_MODE register fields 392*4882a593Smuzhiyun * @chr_h_mode: ISP_FILT_MODE register fields 393*4882a593Smuzhiyun * @chr_v_mode: ISP_FILT_MODE register fields 394*4882a593Smuzhiyun * 395*4882a593Smuzhiyun * refer to datasheet for details. 396*4882a593Smuzhiyun */ 397*4882a593Smuzhiyun struct cifisp_flt_config { 398*4882a593Smuzhiyun enum cifisp_flt_mode mode; 399*4882a593Smuzhiyun unsigned char grn_stage1; 400*4882a593Smuzhiyun unsigned char chr_h_mode; 401*4882a593Smuzhiyun unsigned char chr_v_mode; 402*4882a593Smuzhiyun unsigned int thresh_bl0; 403*4882a593Smuzhiyun unsigned int thresh_bl1; 404*4882a593Smuzhiyun unsigned int thresh_sh0; 405*4882a593Smuzhiyun unsigned int thresh_sh1; 406*4882a593Smuzhiyun unsigned int lum_weight; 407*4882a593Smuzhiyun unsigned int fac_sh1; 408*4882a593Smuzhiyun unsigned int fac_sh0; 409*4882a593Smuzhiyun unsigned int fac_mid; 410*4882a593Smuzhiyun unsigned int fac_bl0; 411*4882a593Smuzhiyun unsigned int fac_bl1; 412*4882a593Smuzhiyun } __attribute__ ((packed)); 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /** 415*4882a593Smuzhiyun * struct cifisp_bdm_config - Configuration used by Bayer DeMosaic 416*4882a593Smuzhiyun * 417*4882a593Smuzhiyun * @demosaic_th: threshod for bayer demosaicing texture detection 418*4882a593Smuzhiyun */ 419*4882a593Smuzhiyun struct cifisp_bdm_config { 420*4882a593Smuzhiyun unsigned char demosaic_th; 421*4882a593Smuzhiyun } __attribute__ ((packed)); 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun /** 424*4882a593Smuzhiyun * struct cifisp_ctk_config - Configuration used by Cross Talk correction 425*4882a593Smuzhiyun * 426*4882a593Smuzhiyun * @coeff: color correction matrix 427*4882a593Smuzhiyun * @ct_offset_b: offset for the crosstalk correction matrix 428*4882a593Smuzhiyun */ 429*4882a593Smuzhiyun struct cifisp_ctk_config { 430*4882a593Smuzhiyun unsigned short coeff0; 431*4882a593Smuzhiyun unsigned short coeff1; 432*4882a593Smuzhiyun unsigned short coeff2; 433*4882a593Smuzhiyun unsigned short coeff3; 434*4882a593Smuzhiyun unsigned short coeff4; 435*4882a593Smuzhiyun unsigned short coeff5; 436*4882a593Smuzhiyun unsigned short coeff6; 437*4882a593Smuzhiyun unsigned short coeff7; 438*4882a593Smuzhiyun unsigned short coeff8; 439*4882a593Smuzhiyun unsigned short ct_offset_r; 440*4882a593Smuzhiyun unsigned short ct_offset_g; 441*4882a593Smuzhiyun unsigned short ct_offset_b; 442*4882a593Smuzhiyun } __attribute__ ((packed)); 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun enum cifisp_goc_mode { 445*4882a593Smuzhiyun CIFISP_GOC_MODE_LOGARITHMIC, 446*4882a593Smuzhiyun CIFISP_GOC_MODE_EQUIDISTANT 447*4882a593Smuzhiyun }; 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun /** 450*4882a593Smuzhiyun * struct cifisp_goc_config - Configuration used by Gamma Out correction 451*4882a593Smuzhiyun * 452*4882a593Smuzhiyun * @mode: goc mode 453*4882a593Smuzhiyun * @gamma_y: gamma out curve y-axis for all color components 454*4882a593Smuzhiyun */ 455*4882a593Smuzhiyun struct cifisp_goc_config { 456*4882a593Smuzhiyun enum cifisp_goc_mode mode; 457*4882a593Smuzhiyun unsigned short gamma_y[CIFISP_GAMMA_OUT_MAX_SAMPLES]; 458*4882a593Smuzhiyun } __attribute__ ((packed)); 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /** 461*4882a593Smuzhiyun * struct cifisp_hst_config - Configuration used by Histogram 462*4882a593Smuzhiyun * 463*4882a593Smuzhiyun * @mode: histogram mode 464*4882a593Smuzhiyun * @histogram_predivider: process every stepsize pixel, all other pixels are skipped 465*4882a593Smuzhiyun * @meas_window: coordinates of the meas window 466*4882a593Smuzhiyun * @hist_weight: weighting factor for sub-windows 467*4882a593Smuzhiyun */ 468*4882a593Smuzhiyun struct cifisp_hst_config { 469*4882a593Smuzhiyun enum cifisp_histogram_mode mode; 470*4882a593Smuzhiyun unsigned char histogram_predivider; 471*4882a593Smuzhiyun struct cifisp_window meas_window; 472*4882a593Smuzhiyun unsigned char hist_weight[CIFISP_HISTOGRAM_WEIGHT_GRIDS_SIZE]; 473*4882a593Smuzhiyun } __attribute__ ((packed)); 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun /** 476*4882a593Smuzhiyun * struct cifisp_aec_config - Configuration used by Auto Exposure Control 477*4882a593Smuzhiyun * 478*4882a593Smuzhiyun * @mode: Exposure measure mode 479*4882a593Smuzhiyun * @autostop: stop mode (from enum cifisp_exp_ctrl_auotostop) 480*4882a593Smuzhiyun * @meas_window: coordinates of the meas window 481*4882a593Smuzhiyun */ 482*4882a593Smuzhiyun struct cifisp_aec_config { 483*4882a593Smuzhiyun enum cifisp_exp_meas_mode mode; 484*4882a593Smuzhiyun __u32 autostop; 485*4882a593Smuzhiyun struct cifisp_window meas_window; 486*4882a593Smuzhiyun } __attribute__ ((packed)); 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun /** 489*4882a593Smuzhiyun * struct cifisp_afc_config - Configuration used by Auto Focus Control 490*4882a593Smuzhiyun * 491*4882a593Smuzhiyun * @num_afm_win: max CIFISP_AFM_MAX_WINDOWS 492*4882a593Smuzhiyun * @afm_win: coordinates of the meas window 493*4882a593Smuzhiyun * @thres: threshold used for minimizing the influence of noise 494*4882a593Smuzhiyun * @var_shift: the number of bits for the shift operation at the end of the calculation chain. 495*4882a593Smuzhiyun */ 496*4882a593Smuzhiyun struct cifisp_afc_config { 497*4882a593Smuzhiyun unsigned char num_afm_win; 498*4882a593Smuzhiyun struct cifisp_window afm_win[CIFISP_AFM_MAX_WINDOWS]; 499*4882a593Smuzhiyun unsigned int thres; 500*4882a593Smuzhiyun unsigned int var_shift; 501*4882a593Smuzhiyun } __attribute__ ((packed)); 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun /** 504*4882a593Smuzhiyun * enum cifisp_dpf_gain_usage - dpf gain usage 505*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_DISABLED: don't use any gains in preprocessing stage 506*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_NF_GAINS: use only the noise function gains from registers DPF_NF_GAIN_R, ... 507*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_LSC_GAINS: use only the gains from LSC module 508*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_NF_LSC_GAINS: use the noise function gains and the gains from LSC module 509*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_AWB_GAINS: use only the gains from AWB module 510*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_AWB_LSC_GAINS: use the gains from AWB and LSC module 511*4882a593Smuzhiyun * @CIFISP_DPF_GAIN_USAGE_MAX: upper border (only for an internal evaluation) 512*4882a593Smuzhiyun */ 513*4882a593Smuzhiyun enum cifisp_dpf_gain_usage { 514*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_DISABLED, 515*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_NF_GAINS, 516*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_LSC_GAINS, 517*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_NF_LSC_GAINS, 518*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_AWB_GAINS, 519*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_AWB_LSC_GAINS, 520*4882a593Smuzhiyun CIFISP_DPF_GAIN_USAGE_MAX 521*4882a593Smuzhiyun }; 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun /** 524*4882a593Smuzhiyun * enum cifisp_dpf_gain_usage - dpf gain usage 525*4882a593Smuzhiyun * @CIFISP_DPF_RB_FILTERSIZE_13x9: red and blue filter kernel size 13x9 (means 7x5 active pixel) 526*4882a593Smuzhiyun * @CIFISP_DPF_RB_FILTERSIZE_9x9: red and blue filter kernel size 9x9 (means 5x5 active pixel) 527*4882a593Smuzhiyun */ 528*4882a593Smuzhiyun enum cifisp_dpf_rb_filtersize { 529*4882a593Smuzhiyun CIFISP_DPF_RB_FILTERSIZE_13x9, 530*4882a593Smuzhiyun CIFISP_DPF_RB_FILTERSIZE_9x9, 531*4882a593Smuzhiyun }; 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun /** 534*4882a593Smuzhiyun * enum cifisp_dpf_nll_scale_mode - dpf noise level scale mode 535*4882a593Smuzhiyun * @CIFISP_NLL_SCALE_LINEAR: use a linear scaling 536*4882a593Smuzhiyun * @CIFISP_NLL_SCALE_LOGARITHMIC: use a logarithmic scaling 537*4882a593Smuzhiyun */ 538*4882a593Smuzhiyun enum cifisp_dpf_nll_scale_mode { 539*4882a593Smuzhiyun CIFISP_NLL_SCALE_LINEAR, 540*4882a593Smuzhiyun CIFISP_NLL_SCALE_LOGARITHMIC, 541*4882a593Smuzhiyun }; 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun struct cifisp_dpf_nll { 544*4882a593Smuzhiyun unsigned short coeff[CIFISP_DPF_MAX_NLF_COEFFS]; 545*4882a593Smuzhiyun enum cifisp_dpf_nll_scale_mode scale_mode; 546*4882a593Smuzhiyun } __attribute__ ((packed)); 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun struct cifisp_dpf_rb_flt { 549*4882a593Smuzhiyun enum cifisp_dpf_rb_filtersize fltsize; 550*4882a593Smuzhiyun unsigned char spatial_coeff[CIFISP_DPF_MAX_SPATIAL_COEFFS]; 551*4882a593Smuzhiyun _Bool r_enable; 552*4882a593Smuzhiyun _Bool b_enable; 553*4882a593Smuzhiyun } __attribute__ ((packed)); 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun struct cifisp_dpf_g_flt { 556*4882a593Smuzhiyun unsigned char spatial_coeff[CIFISP_DPF_MAX_SPATIAL_COEFFS]; 557*4882a593Smuzhiyun _Bool gr_enable; 558*4882a593Smuzhiyun _Bool gb_enable; 559*4882a593Smuzhiyun } __attribute__ ((packed)); 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun struct cifisp_dpf_gain { 562*4882a593Smuzhiyun enum cifisp_dpf_gain_usage mode; 563*4882a593Smuzhiyun unsigned short nf_r_gain; 564*4882a593Smuzhiyun unsigned short nf_b_gain; 565*4882a593Smuzhiyun unsigned short nf_gr_gain; 566*4882a593Smuzhiyun unsigned short nf_gb_gain; 567*4882a593Smuzhiyun } __attribute__ ((packed)); 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun /** 570*4882a593Smuzhiyun * struct cifisp_dpf_config - Configuration used by De-noising pre-filter 571*4882a593Smuzhiyun * 572*4882a593Smuzhiyun * @gain: noise function gain 573*4882a593Smuzhiyun * @g_flt: green filter config 574*4882a593Smuzhiyun * @rb_flt: red blue filter config 575*4882a593Smuzhiyun * @nll: noise level lookup 576*4882a593Smuzhiyun */ 577*4882a593Smuzhiyun struct cifisp_dpf_config { 578*4882a593Smuzhiyun struct cifisp_dpf_gain gain; 579*4882a593Smuzhiyun struct cifisp_dpf_g_flt g_flt; 580*4882a593Smuzhiyun struct cifisp_dpf_rb_flt rb_flt; 581*4882a593Smuzhiyun struct cifisp_dpf_nll nll; 582*4882a593Smuzhiyun } __attribute__ ((packed)); 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun /** 585*4882a593Smuzhiyun * struct cifisp_dpf_strength_config - strength of the filter 586*4882a593Smuzhiyun * 587*4882a593Smuzhiyun * @r: filter strength of the RED filter 588*4882a593Smuzhiyun * @g: filter strength of the GREEN filter 589*4882a593Smuzhiyun * @b: filter strength of the BLUE filter 590*4882a593Smuzhiyun */ 591*4882a593Smuzhiyun struct cifisp_dpf_strength_config { 592*4882a593Smuzhiyun unsigned char r; 593*4882a593Smuzhiyun unsigned char g; 594*4882a593Smuzhiyun unsigned char b; 595*4882a593Smuzhiyun } __attribute__ ((packed)); 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun /** 598*4882a593Smuzhiyun * enum cifisp_wdr_mode - wdr mode 599*4882a593Smuzhiyun * @CIFISP_WDR_MODE_BLOCK: use a linear scaling 600*4882a593Smuzhiyun * @CIFISP_WDR_MODE_GLOBAL: use a logarithmic scaling 601*4882a593Smuzhiyun */ 602*4882a593Smuzhiyun enum cifisp_wdr_mode { 603*4882a593Smuzhiyun CIFISP_WDR_MODE_BLOCK, 604*4882a593Smuzhiyun CIFISP_WDR_MODE_GLOBAL 605*4882a593Smuzhiyun }; 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun /** 608*4882a593Smuzhiyun * struct cifisp_wdr_config - Gamma Out correction 609*4882a593Smuzhiyun */ 610*4882a593Smuzhiyun struct cifisp_wdr_config { 611*4882a593Smuzhiyun enum cifisp_wdr_mode mode; 612*4882a593Smuzhiyun unsigned int c_wdr[CIFISP_WDR_SIZE]; 613*4882a593Smuzhiyun } __attribute__ ((packed)); 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun /** 616*4882a593Smuzhiyun * struct cifisp_demosaiclp_config - rk demosiac low pass 617*4882a593Smuzhiyun */ 618*4882a593Smuzhiyun struct cifisp_demosaiclp_config { 619*4882a593Smuzhiyun unsigned char rb_filter_en; 620*4882a593Smuzhiyun unsigned char hp_filter_en; 621*4882a593Smuzhiyun unsigned char lu_divided[4]; 622*4882a593Smuzhiyun unsigned char thgrad_divided[5]; 623*4882a593Smuzhiyun unsigned char thdiff_divided[5]; 624*4882a593Smuzhiyun unsigned char thcsc_divided[5]; 625*4882a593Smuzhiyun unsigned short thvar_divided[5]; 626*4882a593Smuzhiyun unsigned char th_grad; 627*4882a593Smuzhiyun unsigned char th_diff; 628*4882a593Smuzhiyun unsigned char th_csc; 629*4882a593Smuzhiyun unsigned short th_var; 630*4882a593Smuzhiyun unsigned char th_var_en; 631*4882a593Smuzhiyun unsigned char th_csc_en; 632*4882a593Smuzhiyun unsigned char th_diff_en; 633*4882a593Smuzhiyun unsigned char th_grad_en; 634*4882a593Smuzhiyun unsigned char use_old_lp; 635*4882a593Smuzhiyun unsigned char similarity_th; 636*4882a593Smuzhiyun unsigned char flat_level_sel; 637*4882a593Smuzhiyun unsigned char pattern_level_sel; 638*4882a593Smuzhiyun unsigned char edge_level_sel; 639*4882a593Smuzhiyun unsigned char thgrad_r_fct; 640*4882a593Smuzhiyun unsigned char thdiff_r_fct; 641*4882a593Smuzhiyun unsigned char thvar_r_fct; 642*4882a593Smuzhiyun unsigned char thgrad_b_fct; 643*4882a593Smuzhiyun unsigned char thdiff_b_fct; 644*4882a593Smuzhiyun unsigned char thvar_b_fct; 645*4882a593Smuzhiyun } __attribute__ ((packed)); 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun /** 648*4882a593Smuzhiyun * struct cifisp_rkiesharp_config - rk ie sharp 649*4882a593Smuzhiyun */ 650*4882a593Smuzhiyun struct cifisp_rkiesharp_config { 651*4882a593Smuzhiyun unsigned char coring_thr; 652*4882a593Smuzhiyun unsigned char full_range; 653*4882a593Smuzhiyun unsigned char switch_avg; 654*4882a593Smuzhiyun unsigned char yavg_thr[4]; 655*4882a593Smuzhiyun unsigned char delta1[5]; 656*4882a593Smuzhiyun unsigned char delta2[5]; 657*4882a593Smuzhiyun unsigned char maxnumber[5]; 658*4882a593Smuzhiyun unsigned char minnumber[5]; 659*4882a593Smuzhiyun unsigned char gauss_flat_coe[9]; 660*4882a593Smuzhiyun unsigned char gauss_noise_coe[9]; 661*4882a593Smuzhiyun unsigned char gauss_other_coe[9]; 662*4882a593Smuzhiyun unsigned char line1_filter_coe[6]; 663*4882a593Smuzhiyun unsigned char line2_filter_coe[9]; 664*4882a593Smuzhiyun unsigned char line3_filter_coe[6]; 665*4882a593Smuzhiyun unsigned short grad_seq[4]; 666*4882a593Smuzhiyun unsigned char sharp_factor[5]; 667*4882a593Smuzhiyun unsigned char uv_gauss_flat_coe[15]; 668*4882a593Smuzhiyun unsigned char uv_gauss_noise_coe[15]; 669*4882a593Smuzhiyun unsigned char uv_gauss_other_coe[15]; 670*4882a593Smuzhiyun unsigned char lap_mat_coe[9]; 671*4882a593Smuzhiyun } __attribute__ ((packed)); 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun /** 674*4882a593Smuzhiyun * struct cifisp_isp_other_cfg - Parameters for some blocks in rockchip isp1 675*4882a593Smuzhiyun * 676*4882a593Smuzhiyun * @dpcc_config: Defect Pixel Cluster Correction config 677*4882a593Smuzhiyun * @bls_config: Black Level Subtraction config 678*4882a593Smuzhiyun * @sdg_config: sensor degamma config 679*4882a593Smuzhiyun * @lsc_config: Lens Shade config 680*4882a593Smuzhiyun * @awb_gain_config: Auto White balance gain config 681*4882a593Smuzhiyun * @flt_config: filter config 682*4882a593Smuzhiyun * @bdm_config: demosaic config 683*4882a593Smuzhiyun * @ctk_config: cross talk config 684*4882a593Smuzhiyun * @goc_config: gamma out config 685*4882a593Smuzhiyun * @bls_config: black level suntraction config 686*4882a593Smuzhiyun * @dpf_config: De-noising pre-filter config 687*4882a593Smuzhiyun * @dpf_strength_config: dpf strength config 688*4882a593Smuzhiyun * @cproc_config: color process config 689*4882a593Smuzhiyun * @ie_config: image effects config 690*4882a593Smuzhiyun */ 691*4882a593Smuzhiyun struct cifisp_isp_other_cfg { 692*4882a593Smuzhiyun struct cifisp_dpcc_config dpcc_config; 693*4882a593Smuzhiyun struct cifisp_bls_config bls_config; 694*4882a593Smuzhiyun struct cifisp_sdg_config sdg_config; 695*4882a593Smuzhiyun struct cifisp_lsc_config lsc_config; 696*4882a593Smuzhiyun struct cifisp_awb_gain_config awb_gain_config; 697*4882a593Smuzhiyun struct cifisp_flt_config flt_config; 698*4882a593Smuzhiyun struct cifisp_bdm_config bdm_config; 699*4882a593Smuzhiyun struct cifisp_ctk_config ctk_config; 700*4882a593Smuzhiyun struct cifisp_goc_config goc_config; 701*4882a593Smuzhiyun struct cifisp_dpf_config dpf_config; 702*4882a593Smuzhiyun struct cifisp_dpf_strength_config dpf_strength_config; 703*4882a593Smuzhiyun struct cifisp_cproc_config cproc_config; 704*4882a593Smuzhiyun struct cifisp_ie_config ie_config; 705*4882a593Smuzhiyun struct cifisp_wdr_config wdr_config; 706*4882a593Smuzhiyun struct cifisp_demosaiclp_config demosaiclp_config; 707*4882a593Smuzhiyun struct cifisp_rkiesharp_config rkiesharp_config; 708*4882a593Smuzhiyun } __attribute__ ((packed)); 709*4882a593Smuzhiyun 710*4882a593Smuzhiyun /** 711*4882a593Smuzhiyun * struct cifisp_isp_meas_cfg - Rockchip ISP1 Measure Parameters 712*4882a593Smuzhiyun * 713*4882a593Smuzhiyun * @awb_meas_config: auto white balance config 714*4882a593Smuzhiyun * @hst_config: histogram config 715*4882a593Smuzhiyun * @aec_config: auto exposure config 716*4882a593Smuzhiyun * @afc_config: auto focus config 717*4882a593Smuzhiyun */ 718*4882a593Smuzhiyun struct cifisp_isp_meas_cfg { 719*4882a593Smuzhiyun struct cifisp_awb_meas_config awb_meas_config; 720*4882a593Smuzhiyun struct cifisp_hst_config hst_config; 721*4882a593Smuzhiyun struct cifisp_aec_config aec_config; 722*4882a593Smuzhiyun struct cifisp_afc_config afc_config; 723*4882a593Smuzhiyun } __attribute__ ((packed)); 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun /** 726*4882a593Smuzhiyun * struct rkisp1_isp_params_cfg - Rockchip ISP1 Input Parameters Meta Data 727*4882a593Smuzhiyun * 728*4882a593Smuzhiyun * @module_en_update: mask the enable bits of which module should be updated 729*4882a593Smuzhiyun * @module_ens: mask the enable value of each module, only update the module 730*4882a593Smuzhiyun * which correspond bit was set in module_en_update 731*4882a593Smuzhiyun * @module_cfg_update: mask the config bits of which module should be updated 732*4882a593Smuzhiyun * @meas: measurement config 733*4882a593Smuzhiyun * @others: other config 734*4882a593Smuzhiyun */ 735*4882a593Smuzhiyun struct rkisp1_isp_params_cfg { 736*4882a593Smuzhiyun unsigned int module_en_update; 737*4882a593Smuzhiyun unsigned int module_ens; 738*4882a593Smuzhiyun unsigned int module_cfg_update; 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun struct cifisp_isp_meas_cfg meas; 741*4882a593Smuzhiyun struct cifisp_isp_other_cfg others; 742*4882a593Smuzhiyun } __attribute__ ((packed)); 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun /*---------- PART2: Measurement Statistics ------------*/ 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun /** 747*4882a593Smuzhiyun * struct cifisp_bls_meas_val - AWB measured values 748*4882a593Smuzhiyun * 749*4882a593Smuzhiyun * @cnt: White pixel count, number of "white pixels" found during laster measurement 750*4882a593Smuzhiyun * @mean_y_or_g: Mean value of Y within window and frames, Green if RGB is selected. 751*4882a593Smuzhiyun * @mean_cb_or_b: Mean value of Cb within window and frames, Blue if RGB is selected. 752*4882a593Smuzhiyun * @mean_cr_or_r: Mean value of Cr within window and frames, Red if RGB is selected. 753*4882a593Smuzhiyun */ 754*4882a593Smuzhiyun struct cifisp_awb_meas { 755*4882a593Smuzhiyun unsigned int cnt; 756*4882a593Smuzhiyun unsigned char mean_y_or_g; 757*4882a593Smuzhiyun unsigned char mean_cb_or_b; 758*4882a593Smuzhiyun unsigned char mean_cr_or_r; 759*4882a593Smuzhiyun } __attribute__ ((packed)); 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun /** 762*4882a593Smuzhiyun * struct cifisp_awb_stat - statistics automatic white balance data 763*4882a593Smuzhiyun * 764*4882a593Smuzhiyun * @awb_mean: Mean measured data 765*4882a593Smuzhiyun */ 766*4882a593Smuzhiyun struct cifisp_awb_stat { 767*4882a593Smuzhiyun struct cifisp_awb_meas awb_mean[CIFISP_AWB_MAX_GRID]; 768*4882a593Smuzhiyun } __attribute__ ((packed)); 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun /** 771*4882a593Smuzhiyun * struct cifisp_bls_meas_val - BLS measured values 772*4882a593Smuzhiyun * 773*4882a593Smuzhiyun * @meas_r: Mean measured value for Bayer pattern R 774*4882a593Smuzhiyun * @meas_gr: Mean measured value for Bayer pattern Gr 775*4882a593Smuzhiyun * @meas_gb: Mean measured value for Bayer pattern Gb 776*4882a593Smuzhiyun * @meas_b: Mean measured value for Bayer pattern B 777*4882a593Smuzhiyun */ 778*4882a593Smuzhiyun struct cifisp_bls_meas_val { 779*4882a593Smuzhiyun unsigned short meas_r; 780*4882a593Smuzhiyun unsigned short meas_gr; 781*4882a593Smuzhiyun unsigned short meas_gb; 782*4882a593Smuzhiyun unsigned short meas_b; 783*4882a593Smuzhiyun } __attribute__ ((packed)); 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun /** 786*4882a593Smuzhiyun * struct cifisp_ae_stat - statistics auto exposure data 787*4882a593Smuzhiyun * 788*4882a593Smuzhiyun * @exp_mean: Mean luminance value of block xx 789*4882a593Smuzhiyun * @bls_val: available wit exposure results 790*4882a593Smuzhiyun * 791*4882a593Smuzhiyun * Image is divided into 5x5 blocks. 792*4882a593Smuzhiyun */ 793*4882a593Smuzhiyun struct cifisp_ae_stat { 794*4882a593Smuzhiyun unsigned char exp_mean[CIFISP_AE_MEAN_MAX]; 795*4882a593Smuzhiyun struct cifisp_bls_meas_val bls_val; 796*4882a593Smuzhiyun } __attribute__ ((packed)); 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun /** 799*4882a593Smuzhiyun * struct cifisp_af_meas_val - AF measured values 800*4882a593Smuzhiyun * 801*4882a593Smuzhiyun * @sum: sharpness, refer to datasheet for definition 802*4882a593Smuzhiyun * @lum: luminance, refer to datasheet for definition 803*4882a593Smuzhiyun */ 804*4882a593Smuzhiyun struct cifisp_af_meas_val { 805*4882a593Smuzhiyun unsigned int sum; 806*4882a593Smuzhiyun unsigned int lum; 807*4882a593Smuzhiyun } __attribute__ ((packed)); 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun /** 810*4882a593Smuzhiyun * struct cifisp_af_stat - statistics auto focus data 811*4882a593Smuzhiyun * 812*4882a593Smuzhiyun * @window: AF measured value of window x 813*4882a593Smuzhiyun * 814*4882a593Smuzhiyun * The module measures the sharpness in 3 windows of selectable size via 815*4882a593Smuzhiyun * register settings(ISP_AFM_*_A/B/C) 816*4882a593Smuzhiyun */ 817*4882a593Smuzhiyun struct cifisp_af_stat { 818*4882a593Smuzhiyun struct cifisp_af_meas_val window[CIFISP_AFM_MAX_WINDOWS]; 819*4882a593Smuzhiyun } __attribute__ ((packed)); 820*4882a593Smuzhiyun 821*4882a593Smuzhiyun /** 822*4882a593Smuzhiyun * struct cifisp_hist_stat - statistics histogram data 823*4882a593Smuzhiyun * 824*4882a593Smuzhiyun * @hist_bins: measured bin counters 825*4882a593Smuzhiyun * 826*4882a593Smuzhiyun * Measurement window divided into 25 sub-windows, set 827*4882a593Smuzhiyun * with ISP_HIST_XXX 828*4882a593Smuzhiyun */ 829*4882a593Smuzhiyun struct cifisp_hist_stat { 830*4882a593Smuzhiyun unsigned int hist_bins[CIFISP_HIST_BIN_N_MAX]; 831*4882a593Smuzhiyun } __attribute__ ((packed)); 832*4882a593Smuzhiyun 833*4882a593Smuzhiyun /** 834*4882a593Smuzhiyun * struct cifisp_embedded_data - embedded data 835*4882a593Smuzhiyun * 836*4882a593Smuzhiyun * @data: embedded data 837*4882a593Smuzhiyun * 838*4882a593Smuzhiyun */ 839*4882a593Smuzhiyun struct cifisp_embedded_data { 840*4882a593Smuzhiyun unsigned char data[CIFISP_ADD_DATA_FIFO_SIZE]; 841*4882a593Smuzhiyun } __attribute__ ((packed)); 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun /** 844*4882a593Smuzhiyun * struct rkisp1_stat_buffer - Rockchip ISP1 Statistics Data 845*4882a593Smuzhiyun * 846*4882a593Smuzhiyun * @cifisp_awb_stat: statistics data for automatic white balance 847*4882a593Smuzhiyun * @cifisp_ae_stat: statistics data for auto exposure 848*4882a593Smuzhiyun * @cifisp_af_stat: statistics data for auto focus 849*4882a593Smuzhiyun * @cifisp_hist_stat: statistics histogram data 850*4882a593Smuzhiyun */ 851*4882a593Smuzhiyun struct cifisp_stat { 852*4882a593Smuzhiyun struct cifisp_awb_stat awb; 853*4882a593Smuzhiyun struct cifisp_ae_stat ae; 854*4882a593Smuzhiyun struct cifisp_af_stat af; 855*4882a593Smuzhiyun struct cifisp_hist_stat hist; 856*4882a593Smuzhiyun struct cifisp_embedded_data emd; 857*4882a593Smuzhiyun } __attribute__ ((packed)); 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun /** 860*4882a593Smuzhiyun * struct rkisp1_stat_buffer - Rockchip ISP1 Statistics Meta Data 861*4882a593Smuzhiyun * 862*4882a593Smuzhiyun * @meas_type: measurement types (CIFISP_STAT_ definitions) 863*4882a593Smuzhiyun * @frame_id: frame ID for sync 864*4882a593Smuzhiyun * @params: statistics data 865*4882a593Smuzhiyun */ 866*4882a593Smuzhiyun struct rkisp1_stat_buffer { 867*4882a593Smuzhiyun unsigned int meas_type; 868*4882a593Smuzhiyun unsigned int frame_id; 869*4882a593Smuzhiyun struct cifisp_stat params; 870*4882a593Smuzhiyun } __attribute__ ((packed)); 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun #endif /* _UAPI_RK_ISP1_CONFIG_H */ 873