13d0407baSopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Rockchip isp1 driver 43d0407baSopenharmony_ci * Copyright (C) 2017 Rockchip Electronics Co., Ltd. 53d0407baSopenharmony_ci */ 63d0407baSopenharmony_ci 73d0407baSopenharmony_ci#ifndef _UAPI_RKISP1_CONFIG_H 83d0407baSopenharmony_ci#define _UAPI_RKISP1_CONFIG_H 93d0407baSopenharmony_ci 103d0407baSopenharmony_ci#include <linux/types.h> 113d0407baSopenharmony_ci#include <linux/v4l2-controls.h> 123d0407baSopenharmony_ci#include "rkisp21-config.h" 133d0407baSopenharmony_ci 143d0407baSopenharmony_ci#define CIFISP_MODULE_DPCC (1 << 0) 153d0407baSopenharmony_ci#define CIFISP_MODULE_BLS (1 << 1) 163d0407baSopenharmony_ci#define CIFISP_MODULE_SDG (1 << 2) 173d0407baSopenharmony_ci#define CIFISP_MODULE_HST (1 << 3) 183d0407baSopenharmony_ci#define CIFISP_MODULE_LSC (1 << 4) 193d0407baSopenharmony_ci#define CIFISP_MODULE_AWB_GAIN (1 << 5) 203d0407baSopenharmony_ci#define CIFISP_MODULE_FLT (1 << 6) 213d0407baSopenharmony_ci#define CIFISP_MODULE_BDM (1 << 7) 223d0407baSopenharmony_ci#define CIFISP_MODULE_CTK (1 << 8) 233d0407baSopenharmony_ci#define CIFISP_MODULE_GOC (1 << 9) 243d0407baSopenharmony_ci#define CIFISP_MODULE_CPROC (1 << 10) 253d0407baSopenharmony_ci#define CIFISP_MODULE_AFC (1 << 11) 263d0407baSopenharmony_ci#define CIFISP_MODULE_AWB (1 << 12) 273d0407baSopenharmony_ci#define CIFISP_MODULE_IE (1 << 13) 283d0407baSopenharmony_ci#define CIFISP_MODULE_AEC (1 << 14) 293d0407baSopenharmony_ci#define CIFISP_MODULE_WDR (1 << 15) 303d0407baSopenharmony_ci#define CIFISP_MODULE_DPF (1 << 16) 313d0407baSopenharmony_ci#define CIFISP_MODULE_DPF_STRENGTH (1 << 17) 323d0407baSopenharmony_ci#define CIFISP_MODULE_DEMOSAICLP (1 << 18) 333d0407baSopenharmony_ci#define CIFISP_MODULE_RK_IESHARP (1 << 19) 343d0407baSopenharmony_ci 353d0407baSopenharmony_ci#define CIFISP_CTK_COEFF_MAX 0x100 363d0407baSopenharmony_ci#define CIFISP_CTK_OFFSET_MAX 0x800 373d0407baSopenharmony_ci 383d0407baSopenharmony_ci#define CIFISP_AE_MEAN_MAX 81 393d0407baSopenharmony_ci#define CIFISP_HIST_BIN_N_MAX 32 403d0407baSopenharmony_ci#define CIFISP_AFM_MAX_WINDOWS 3 413d0407baSopenharmony_ci#define CIFISP_DEGAMMA_CURVE_SIZE 17 423d0407baSopenharmony_ci 433d0407baSopenharmony_ci#define CIFISP_BDM_MAX_TH 0xFF 443d0407baSopenharmony_ci 453d0407baSopenharmony_ci/* 463d0407baSopenharmony_ci * Black level compensation 473d0407baSopenharmony_ci */ 483d0407baSopenharmony_ci/* maximum value for horizontal start address */ 493d0407baSopenharmony_ci#define CIFISP_BLS_START_H_MAX 0x00000FFF 503d0407baSopenharmony_ci/* maximum value for horizontal stop address */ 513d0407baSopenharmony_ci#define CIFISP_BLS_STOP_H_MAX 0x00000FFF 523d0407baSopenharmony_ci/* maximum value for vertical start address */ 533d0407baSopenharmony_ci#define CIFISP_BLS_START_V_MAX 0x00000FFF 543d0407baSopenharmony_ci/* maximum value for vertical stop address */ 553d0407baSopenharmony_ci#define CIFISP_BLS_STOP_V_MAX 0x00000FFF 563d0407baSopenharmony_ci/* maximum is 2^18 = 262144*/ 573d0407baSopenharmony_ci#define CIFISP_BLS_SAMPLES_MAX 0x00000012 583d0407baSopenharmony_ci/* maximum value for fixed black level */ 593d0407baSopenharmony_ci#define CIFISP_BLS_FIX_SUB_MAX 0x00000FFF 603d0407baSopenharmony_ci/* minimum value for fixed black level */ 613d0407baSopenharmony_ci#define CIFISP_BLS_FIX_SUB_MIN 0xFFFFF000 623d0407baSopenharmony_ci/* 13 bit range (signed)*/ 633d0407baSopenharmony_ci#define CIFISP_BLS_FIX_MASK 0x00001FFF 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci/* 663d0407baSopenharmony_ci * Automatic white balance measurments 673d0407baSopenharmony_ci */ 683d0407baSopenharmony_ci#define CIFISP_AWB_MAX_GRID 1 693d0407baSopenharmony_ci#define CIFISP_AWB_MAX_FRAMES 7 703d0407baSopenharmony_ci 713d0407baSopenharmony_ci/* 723d0407baSopenharmony_ci * Gamma out 733d0407baSopenharmony_ci */ 743d0407baSopenharmony_ci/* Maximum number of color samples supported */ 753d0407baSopenharmony_ci#define CIFISP_GAMMA_OUT_MAX_SAMPLES 34 763d0407baSopenharmony_ci 773d0407baSopenharmony_ci/* 783d0407baSopenharmony_ci * Lens shade correction 793d0407baSopenharmony_ci */ 803d0407baSopenharmony_ci#define CIFISP_LSC_GRAD_TBL_SIZE 8 813d0407baSopenharmony_ci#define CIFISP_LSC_SIZE_TBL_SIZE 8 823d0407baSopenharmony_ci/* 833d0407baSopenharmony_ci * The following matches the tuning process, 843d0407baSopenharmony_ci * not the max capabilities of the chip. 853d0407baSopenharmony_ci * Last value unused. 863d0407baSopenharmony_ci */ 873d0407baSopenharmony_ci#define CIFISP_LSC_DATA_TBL_SIZE 290 883d0407baSopenharmony_ci 893d0407baSopenharmony_ci/* 903d0407baSopenharmony_ci * Histogram calculation 913d0407baSopenharmony_ci */ 923d0407baSopenharmony_ci/* Last 3 values unused. */ 933d0407baSopenharmony_ci#define CIFISP_HISTOGRAM_WEIGHT_GRIDS_SIZE 81 943d0407baSopenharmony_ci 953d0407baSopenharmony_ci/* 963d0407baSopenharmony_ci * Defect Pixel Cluster Correction 973d0407baSopenharmony_ci */ 983d0407baSopenharmony_ci#define CIFISP_DPCC_METHODS_MAX 3 993d0407baSopenharmony_ci 1003d0407baSopenharmony_ci/* 1013d0407baSopenharmony_ci * Denoising pre filter 1023d0407baSopenharmony_ci */ 1033d0407baSopenharmony_ci#define CIFISP_DPF_MAX_NLF_COEFFS 17 1043d0407baSopenharmony_ci#define CIFISP_DPF_MAX_SPATIAL_COEFFS 6 1053d0407baSopenharmony_ci 1063d0407baSopenharmony_ci/* WDR */ 1073d0407baSopenharmony_ci#define CIFISP_WDR_SIZE 48 1083d0407baSopenharmony_ci 1093d0407baSopenharmony_ci/* 1103d0407baSopenharmony_ci * Measurement types 1113d0407baSopenharmony_ci */ 1123d0407baSopenharmony_ci#define CIFISP_STAT_AWB (1 << 0) 1133d0407baSopenharmony_ci#define CIFISP_STAT_AUTOEXP (1 << 1) 1143d0407baSopenharmony_ci#define CIFISP_STAT_AFM_FIN (1 << 2) 1153d0407baSopenharmony_ci#define CIFISP_STAT_HIST (1 << 3) 1163d0407baSopenharmony_ci#define CIFISP_STAT_EMB_DATA (1 << 4) 1173d0407baSopenharmony_ci 1183d0407baSopenharmony_ci/* ADD DATA */ 1193d0407baSopenharmony_ci#define CIFISP_ADD_DATA_FIFO_SIZE (2048 * 4) 1203d0407baSopenharmony_ci 1213d0407baSopenharmony_ci/* Private v4l2 event */ 1223d0407baSopenharmony_ci#define CIFISP_V4L2_EVENT_STREAM_START \ 1233d0407baSopenharmony_ci (V4L2_EVENT_PRIVATE_START + 1) 1243d0407baSopenharmony_ci#define CIFISP_V4L2_EVENT_STREAM_STOP \ 1253d0407baSopenharmony_ci (V4L2_EVENT_PRIVATE_START + 2) 1263d0407baSopenharmony_ci 1273d0407baSopenharmony_ci/* 1283d0407baSopenharmony_ci * private control id 1293d0407baSopenharmony_ci */ 1303d0407baSopenharmony_cienum cifisp_ctrl_id { 1313d0407baSopenharmony_ci CIFISP_CID_EMB_VC = (V4L2_CTRL_CLASS_CAMERA | 0x1001), 1323d0407baSopenharmony_ci CIFISP_CID_EMB_DT, 1333d0407baSopenharmony_ci CIFISP_CID_LAST 1343d0407baSopenharmony_ci}; 1353d0407baSopenharmony_ci 1363d0407baSopenharmony_cienum cifisp_histogram_mode { 1373d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_DISABLE, 1383d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_RGB_COMBINED, 1393d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_R_HISTOGRAM, 1403d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_G_HISTOGRAM, 1413d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_B_HISTOGRAM, 1423d0407baSopenharmony_ci CIFISP_HISTOGRAM_MODE_Y_HISTOGRAM 1433d0407baSopenharmony_ci}; 1443d0407baSopenharmony_ci 1453d0407baSopenharmony_cienum cifisp_awb_mode_type { 1463d0407baSopenharmony_ci CIFISP_AWB_MODE_MANUAL, 1473d0407baSopenharmony_ci CIFISP_AWB_MODE_RGB, 1483d0407baSopenharmony_ci CIFISP_AWB_MODE_YCBCR 1493d0407baSopenharmony_ci}; 1503d0407baSopenharmony_ci 1513d0407baSopenharmony_cienum cifisp_flt_mode { 1523d0407baSopenharmony_ci CIFISP_FLT_STATIC_MODE, 1533d0407baSopenharmony_ci CIFISP_FLT_DYNAMIC_MODE 1543d0407baSopenharmony_ci}; 1553d0407baSopenharmony_ci 1563d0407baSopenharmony_ci/** 1573d0407baSopenharmony_ci * enum cifisp_exp_ctrl_auotostop - stop modes 1583d0407baSopenharmony_ci * @CIFISP_EXP_CTRL_AUTOSTOP_0: continuous measurement 1593d0407baSopenharmony_ci * @CIFISP_EXP_CTRL_AUTOSTOP_1: stop measuring after a complete frame 1603d0407baSopenharmony_ci */ 1613d0407baSopenharmony_cienum cifisp_exp_ctrl_auotostop { 1623d0407baSopenharmony_ci CIFISP_EXP_CTRL_AUTOSTOP_0 = 0, 1633d0407baSopenharmony_ci CIFISP_EXP_CTRL_AUTOSTOP_1 = 1, 1643d0407baSopenharmony_ci}; 1653d0407baSopenharmony_ci 1663d0407baSopenharmony_ci/** 1673d0407baSopenharmony_ci * enum cifisp_exp_meas_mode - Exposure measure mode 1683d0407baSopenharmony_ci * @CIFISP_EXP_MEASURING_MODE_0: Y = 16 + 0.25R + 0.5G + 0.1094B 1693d0407baSopenharmony_ci * @CIFISP_EXP_MEASURING_MODE_1: Y = (R + G + B) x (85/256) 1703d0407baSopenharmony_ci */ 1713d0407baSopenharmony_cienum cifisp_exp_meas_mode { 1723d0407baSopenharmony_ci CIFISP_EXP_MEASURING_MODE_0, 1733d0407baSopenharmony_ci CIFISP_EXP_MEASURING_MODE_1, 1743d0407baSopenharmony_ci}; 1753d0407baSopenharmony_ci 1763d0407baSopenharmony_ci/*---------- PART1: Input Parameters ------------*/ 1773d0407baSopenharmony_ci 1783d0407baSopenharmony_cistruct cifisp_window { 1793d0407baSopenharmony_ci unsigned short h_offs; 1803d0407baSopenharmony_ci unsigned short v_offs; 1813d0407baSopenharmony_ci unsigned short h_size; 1823d0407baSopenharmony_ci unsigned short v_size; 1833d0407baSopenharmony_ci} __attribute__ ((packed)); 1843d0407baSopenharmony_ci 1853d0407baSopenharmony_ci/** 1863d0407baSopenharmony_ci * struct cifisp_bls_fixed_val - BLS fixed subtraction values 1873d0407baSopenharmony_ci * 1883d0407baSopenharmony_ci * The values will be subtracted from the sensor 1893d0407baSopenharmony_ci * values. Therefore a negative value means addition instead of subtraction! 1903d0407baSopenharmony_ci * 1913d0407baSopenharmony_ci * @r: Fixed (signed!) subtraction value for Bayer pattern R 1923d0407baSopenharmony_ci * @gr: Fixed (signed!) subtraction value for Bayer pattern Gr 1933d0407baSopenharmony_ci * @gb: Fixed (signed!) subtraction value for Bayer pattern Gb 1943d0407baSopenharmony_ci * @b: Fixed (signed!) subtraction value for Bayer pattern B 1953d0407baSopenharmony_ci */ 1963d0407baSopenharmony_cistruct cifisp_bls_fixed_val { 1973d0407baSopenharmony_ci signed short r; 1983d0407baSopenharmony_ci signed short gr; 1993d0407baSopenharmony_ci signed short gb; 2003d0407baSopenharmony_ci signed short b; 2013d0407baSopenharmony_ci} __attribute__ ((packed)); 2023d0407baSopenharmony_ci 2033d0407baSopenharmony_ci/** 2043d0407baSopenharmony_ci * struct cifisp_bls_config - Configuration used by black level subtraction 2053d0407baSopenharmony_ci * 2063d0407baSopenharmony_ci * @enable_auto: Automatic mode activated means that the measured values 2073d0407baSopenharmony_ci * are subtracted.Otherwise the fixed subtraction 2083d0407baSopenharmony_ci * values will be subtracted. 2093d0407baSopenharmony_ci * @en_windows: enabled window 2103d0407baSopenharmony_ci * @bls_window1: Measurement window 1 size 2113d0407baSopenharmony_ci * @bls_window2: Measurement window 2 size 2123d0407baSopenharmony_ci * @bls_samples: Set amount of measured pixels for each Bayer position 2133d0407baSopenharmony_ci * (A, B,C and D) to 2^bls_samples. 2143d0407baSopenharmony_ci * @cifisp_bls_fixed_val: Fixed subtraction values 2153d0407baSopenharmony_ci */ 2163d0407baSopenharmony_cistruct cifisp_bls_config { 2173d0407baSopenharmony_ci unsigned char enable_auto; 2183d0407baSopenharmony_ci unsigned char en_windows; 2193d0407baSopenharmony_ci struct cifisp_window bls_window1; 2203d0407baSopenharmony_ci struct cifisp_window bls_window2; 2213d0407baSopenharmony_ci unsigned char bls_samples; 2223d0407baSopenharmony_ci struct cifisp_bls_fixed_val fixed_val; 2233d0407baSopenharmony_ci} __attribute__ ((packed)); 2243d0407baSopenharmony_ci 2253d0407baSopenharmony_ci/** 2263d0407baSopenharmony_ci * struct cifisp_dpcc_methods_config - Methods Configuration used by Defect Pixel Cluster Correction 2273d0407baSopenharmony_ci * 2283d0407baSopenharmony_ci * @method: 2293d0407baSopenharmony_ci * @line_thresh: 2303d0407baSopenharmony_ci * @line_mad_fac: 2313d0407baSopenharmony_ci * @pg_fac: 2323d0407baSopenharmony_ci * @rnd_thresh: 2333d0407baSopenharmony_ci * @rg_fac: 2343d0407baSopenharmony_ci */ 2353d0407baSopenharmony_cistruct cifisp_dpcc_methods_config { 2363d0407baSopenharmony_ci unsigned int method; 2373d0407baSopenharmony_ci unsigned int line_thresh; 2383d0407baSopenharmony_ci unsigned int line_mad_fac; 2393d0407baSopenharmony_ci unsigned int pg_fac; 2403d0407baSopenharmony_ci unsigned int rnd_thresh; 2413d0407baSopenharmony_ci unsigned int rg_fac; 2423d0407baSopenharmony_ci} __attribute__ ((packed)); 2433d0407baSopenharmony_ci 2443d0407baSopenharmony_ci/** 2453d0407baSopenharmony_ci * struct cifisp_dpcc_methods_config - Configuration used by Defect Pixel Cluster Correction 2463d0407baSopenharmony_ci * 2473d0407baSopenharmony_ci * @mode: dpcc output mode 2483d0407baSopenharmony_ci * @output_mode: whether use hard coded methods 2493d0407baSopenharmony_ci * @set_use: stage1 methods set 2503d0407baSopenharmony_ci * @methods: methods config 2513d0407baSopenharmony_ci * @ro_limits: rank order limits 2523d0407baSopenharmony_ci * @rnd_offs: differential rank offsets for rank neighbor difference 2533d0407baSopenharmony_ci */ 2543d0407baSopenharmony_cistruct cifisp_dpcc_config { 2553d0407baSopenharmony_ci unsigned int mode; 2563d0407baSopenharmony_ci unsigned int output_mode; 2573d0407baSopenharmony_ci unsigned int set_use; 2583d0407baSopenharmony_ci struct cifisp_dpcc_methods_config methods[CIFISP_DPCC_METHODS_MAX]; 2593d0407baSopenharmony_ci unsigned int ro_limits; 2603d0407baSopenharmony_ci unsigned int rnd_offs; 2613d0407baSopenharmony_ci} __attribute__ ((packed)); 2623d0407baSopenharmony_ci 2633d0407baSopenharmony_cistruct cifisp_gamma_corr_curve { 2643d0407baSopenharmony_ci unsigned short gamma_y[CIFISP_DEGAMMA_CURVE_SIZE]; 2653d0407baSopenharmony_ci} __attribute__ ((packed)); 2663d0407baSopenharmony_ci 2673d0407baSopenharmony_cistruct cifisp_gamma_curve_x_axis_pnts { 2683d0407baSopenharmony_ci unsigned int gamma_dx0; 2693d0407baSopenharmony_ci unsigned int gamma_dx1; 2703d0407baSopenharmony_ci} __attribute__ ((packed)); 2713d0407baSopenharmony_ci 2723d0407baSopenharmony_ci/** 2733d0407baSopenharmony_ci * struct cifisp_gamma_corr_curve - Configuration used by sensor degamma 2743d0407baSopenharmony_ci * 2753d0407baSopenharmony_ci * @curve_x: gamma curve point definition axis for x 2763d0407baSopenharmony_ci * @xa_pnts: x increments 2773d0407baSopenharmony_ci */ 2783d0407baSopenharmony_cistruct cifisp_sdg_config { 2793d0407baSopenharmony_ci struct cifisp_gamma_corr_curve curve_r; 2803d0407baSopenharmony_ci struct cifisp_gamma_corr_curve curve_g; 2813d0407baSopenharmony_ci struct cifisp_gamma_corr_curve curve_b; 2823d0407baSopenharmony_ci struct cifisp_gamma_curve_x_axis_pnts xa_pnts; 2833d0407baSopenharmony_ci} __attribute__ ((packed)); 2843d0407baSopenharmony_ci 2853d0407baSopenharmony_ci/** 2863d0407baSopenharmony_ci * struct cifisp_lsc_config - Configuration used by Lens shading correction 2873d0407baSopenharmony_ci * 2883d0407baSopenharmony_ci * refer to datasheet for details 2893d0407baSopenharmony_ci */ 2903d0407baSopenharmony_cistruct cifisp_lsc_config { 2913d0407baSopenharmony_ci unsigned int r_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 2923d0407baSopenharmony_ci unsigned int gr_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 2933d0407baSopenharmony_ci unsigned int gb_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 2943d0407baSopenharmony_ci unsigned int b_data_tbl[CIFISP_LSC_DATA_TBL_SIZE]; 2953d0407baSopenharmony_ci 2963d0407baSopenharmony_ci unsigned int x_grad_tbl[CIFISP_LSC_GRAD_TBL_SIZE]; 2973d0407baSopenharmony_ci unsigned int y_grad_tbl[CIFISP_LSC_GRAD_TBL_SIZE]; 2983d0407baSopenharmony_ci 2993d0407baSopenharmony_ci unsigned int x_size_tbl[CIFISP_LSC_SIZE_TBL_SIZE]; 3003d0407baSopenharmony_ci unsigned int y_size_tbl[CIFISP_LSC_SIZE_TBL_SIZE]; 3013d0407baSopenharmony_ci unsigned short config_width; 3023d0407baSopenharmony_ci unsigned short config_height; 3033d0407baSopenharmony_ci} __attribute__ ((packed)); 3043d0407baSopenharmony_ci 3053d0407baSopenharmony_ci/** 3063d0407baSopenharmony_ci * struct cifisp_ie_config - Configuration used by image effects 3073d0407baSopenharmony_ci * 3083d0407baSopenharmony_ci * @eff_mat_1: 3x3 Matrix Coefficients for Emboss Effect 1 3093d0407baSopenharmony_ci * @eff_mat_2: 3x3 Matrix Coefficients for Emboss Effect 2 3103d0407baSopenharmony_ci * @eff_mat_3: 3x3 Matrix Coefficients for Emboss 3/Sketch 1 3113d0407baSopenharmony_ci * @eff_mat_4: 3x3 Matrix Coefficients for Sketch Effect 2 3123d0407baSopenharmony_ci * @eff_mat_5: 3x3 Matrix Coefficients for Sketch Effect 3 3133d0407baSopenharmony_ci * @eff_tint: Chrominance increment values of tint (used for sepia effect) 3143d0407baSopenharmony_ci */ 3153d0407baSopenharmony_cistruct cifisp_ie_config { 3163d0407baSopenharmony_ci unsigned short effect; 3173d0407baSopenharmony_ci unsigned short color_sel; 3183d0407baSopenharmony_ci unsigned short eff_mat_1; 3193d0407baSopenharmony_ci unsigned short eff_mat_2; 3203d0407baSopenharmony_ci unsigned short eff_mat_3; 3213d0407baSopenharmony_ci unsigned short eff_mat_4; 3223d0407baSopenharmony_ci unsigned short eff_mat_5; 3233d0407baSopenharmony_ci unsigned short eff_tint; 3243d0407baSopenharmony_ci} __attribute__ ((packed)); 3253d0407baSopenharmony_ci 3263d0407baSopenharmony_ci/** 3273d0407baSopenharmony_ci * struct cifisp_cproc_config - Configuration used by Color Processing 3283d0407baSopenharmony_ci * 3293d0407baSopenharmony_ci * @c_out_range: Chrominance pixel clipping range at output. (0 for limit, 1 for full) 3303d0407baSopenharmony_ci * @y_in_range: Luminance pixel clipping range at output. 3313d0407baSopenharmony_ci * @y_out_range: Luminance pixel clipping range at output. 3323d0407baSopenharmony_ci * @contrast: 00~ff, 0.0~1.992 3333d0407baSopenharmony_ci * @brightness: 80~7F, -128~+127 3343d0407baSopenharmony_ci * @sat: saturation, 00~FF, 0.0~1.992 3353d0407baSopenharmony_ci * @hue: 80~7F, -90~+87.188 3363d0407baSopenharmony_ci */ 3373d0407baSopenharmony_cistruct cifisp_cproc_config { 3383d0407baSopenharmony_ci unsigned char c_out_range; 3393d0407baSopenharmony_ci unsigned char y_in_range; 3403d0407baSopenharmony_ci unsigned char y_out_range; 3413d0407baSopenharmony_ci unsigned char contrast; 3423d0407baSopenharmony_ci unsigned char brightness; 3433d0407baSopenharmony_ci unsigned char sat; 3443d0407baSopenharmony_ci unsigned char hue; 3453d0407baSopenharmony_ci} __attribute__ ((packed)); 3463d0407baSopenharmony_ci 3473d0407baSopenharmony_ci/** 3483d0407baSopenharmony_ci * struct cifisp_awb_meas_config - Configuration used by auto white balance 3493d0407baSopenharmony_ci * 3503d0407baSopenharmony_ci * @awb_wnd: white balance measurement window (in pixels) 3513d0407baSopenharmony_ci * @max_y: only pixels values < max_y contribute to awb measurement, set to 0 to disable this feature 3523d0407baSopenharmony_ci * @min_y: only pixels values > min_y contribute to awb measurement 3533d0407baSopenharmony_ci * @max_csum: Chrominance sum maximum value, only consider pixels with Cb+Cr, smaller than threshold for awb measurements 3543d0407baSopenharmony_ci * @min_c: Chrominance minimum value, only consider pixels with Cb/Cr each greater than threshold value for awb measurements 3553d0407baSopenharmony_ci * @frames: number of frames - 1 used for mean value calculation(ucFrames=0 means 1 Frame) 3563d0407baSopenharmony_ci * @awb_ref_cr: reference Cr value for AWB regulation, target for AWB 3573d0407baSopenharmony_ci * @awb_ref_cb: reference Cb value for AWB regulation, target for AWB 3583d0407baSopenharmony_ci */ 3593d0407baSopenharmony_cistruct cifisp_awb_meas_config { 3603d0407baSopenharmony_ci /* 3613d0407baSopenharmony_ci * Note: currently the h and v offsets are mapped to grid offsets 3623d0407baSopenharmony_ci */ 3633d0407baSopenharmony_ci struct cifisp_window awb_wnd; 3643d0407baSopenharmony_ci enum cifisp_awb_mode_type awb_mode; 3653d0407baSopenharmony_ci unsigned char max_y; 3663d0407baSopenharmony_ci unsigned char min_y; 3673d0407baSopenharmony_ci unsigned char max_csum; 3683d0407baSopenharmony_ci unsigned char min_c; 3693d0407baSopenharmony_ci unsigned char frames; 3703d0407baSopenharmony_ci unsigned char awb_ref_cr; 3713d0407baSopenharmony_ci unsigned char awb_ref_cb; 3723d0407baSopenharmony_ci bool enable_ymax_cmp; 3733d0407baSopenharmony_ci} __attribute__ ((packed)); 3743d0407baSopenharmony_ci 3753d0407baSopenharmony_ci/** 3763d0407baSopenharmony_ci * struct cifisp_awb_gain_config - Configuration used by auto white balance gain 3773d0407baSopenharmony_ci * 3783d0407baSopenharmony_ci * out_data_x = ( AWB_GEAIN_X * in_data + 128) >> 8 3793d0407baSopenharmony_ci */ 3803d0407baSopenharmony_cistruct cifisp_awb_gain_config { 3813d0407baSopenharmony_ci unsigned short gain_red; 3823d0407baSopenharmony_ci unsigned short gain_green_r; 3833d0407baSopenharmony_ci unsigned short gain_blue; 3843d0407baSopenharmony_ci unsigned short gain_green_b; 3853d0407baSopenharmony_ci} __attribute__ ((packed)); 3863d0407baSopenharmony_ci 3873d0407baSopenharmony_ci/** 3883d0407baSopenharmony_ci * struct cifisp_flt_config - Configuration used by ISP filtering 3893d0407baSopenharmony_ci * 3903d0407baSopenharmony_ci * @mode: ISP_FILT_MODE register fields 3913d0407baSopenharmony_ci * @grn_stage1: ISP_FILT_MODE register fields 3923d0407baSopenharmony_ci * @chr_h_mode: ISP_FILT_MODE register fields 3933d0407baSopenharmony_ci * @chr_v_mode: ISP_FILT_MODE register fields 3943d0407baSopenharmony_ci * 3953d0407baSopenharmony_ci * refer to datasheet for details. 3963d0407baSopenharmony_ci */ 3973d0407baSopenharmony_cistruct cifisp_flt_config { 3983d0407baSopenharmony_ci enum cifisp_flt_mode mode; 3993d0407baSopenharmony_ci unsigned char grn_stage1; 4003d0407baSopenharmony_ci unsigned char chr_h_mode; 4013d0407baSopenharmony_ci unsigned char chr_v_mode; 4023d0407baSopenharmony_ci unsigned int thresh_bl0; 4033d0407baSopenharmony_ci unsigned int thresh_bl1; 4043d0407baSopenharmony_ci unsigned int thresh_sh0; 4053d0407baSopenharmony_ci unsigned int thresh_sh1; 4063d0407baSopenharmony_ci unsigned int lum_weight; 4073d0407baSopenharmony_ci unsigned int fac_sh1; 4083d0407baSopenharmony_ci unsigned int fac_sh0; 4093d0407baSopenharmony_ci unsigned int fac_mid; 4103d0407baSopenharmony_ci unsigned int fac_bl0; 4113d0407baSopenharmony_ci unsigned int fac_bl1; 4123d0407baSopenharmony_ci} __attribute__ ((packed)); 4133d0407baSopenharmony_ci 4143d0407baSopenharmony_ci/** 4153d0407baSopenharmony_ci * struct cifisp_bdm_config - Configuration used by Bayer DeMosaic 4163d0407baSopenharmony_ci * 4173d0407baSopenharmony_ci * @demosaic_th: threshod for bayer demosaicing texture detection 4183d0407baSopenharmony_ci */ 4193d0407baSopenharmony_cistruct cifisp_bdm_config { 4203d0407baSopenharmony_ci unsigned char demosaic_th; 4213d0407baSopenharmony_ci} __attribute__ ((packed)); 4223d0407baSopenharmony_ci 4233d0407baSopenharmony_ci/** 4243d0407baSopenharmony_ci * struct cifisp_ctk_config - Configuration used by Cross Talk correction 4253d0407baSopenharmony_ci * 4263d0407baSopenharmony_ci * @coeff: color correction matrix 4273d0407baSopenharmony_ci * @ct_offset_b: offset for the crosstalk correction matrix 4283d0407baSopenharmony_ci */ 4293d0407baSopenharmony_cistruct cifisp_ctk_config { 4303d0407baSopenharmony_ci unsigned short coeff0; 4313d0407baSopenharmony_ci unsigned short coeff1; 4323d0407baSopenharmony_ci unsigned short coeff2; 4333d0407baSopenharmony_ci unsigned short coeff3; 4343d0407baSopenharmony_ci unsigned short coeff4; 4353d0407baSopenharmony_ci unsigned short coeff5; 4363d0407baSopenharmony_ci unsigned short coeff6; 4373d0407baSopenharmony_ci unsigned short coeff7; 4383d0407baSopenharmony_ci unsigned short coeff8; 4393d0407baSopenharmony_ci unsigned short ct_offset_r; 4403d0407baSopenharmony_ci unsigned short ct_offset_g; 4413d0407baSopenharmony_ci unsigned short ct_offset_b; 4423d0407baSopenharmony_ci} __attribute__ ((packed)); 4433d0407baSopenharmony_ci 4443d0407baSopenharmony_cienum cifisp_goc_mode { 4453d0407baSopenharmony_ci CIFISP_GOC_MODE_LOGARITHMIC, 4463d0407baSopenharmony_ci CIFISP_GOC_MODE_EQUIDISTANT 4473d0407baSopenharmony_ci}; 4483d0407baSopenharmony_ci 4493d0407baSopenharmony_ci/** 4503d0407baSopenharmony_ci * struct cifisp_goc_config - Configuration used by Gamma Out correction 4513d0407baSopenharmony_ci * 4523d0407baSopenharmony_ci * @mode: goc mode 4533d0407baSopenharmony_ci * @gamma_y: gamma out curve y-axis for all color components 4543d0407baSopenharmony_ci */ 4553d0407baSopenharmony_cistruct cifisp_goc_config { 4563d0407baSopenharmony_ci enum cifisp_goc_mode mode; 4573d0407baSopenharmony_ci unsigned short gamma_y[CIFISP_GAMMA_OUT_MAX_SAMPLES]; 4583d0407baSopenharmony_ci} __attribute__ ((packed)); 4593d0407baSopenharmony_ci 4603d0407baSopenharmony_ci/** 4613d0407baSopenharmony_ci * struct cifisp_hst_config - Configuration used by Histogram 4623d0407baSopenharmony_ci * 4633d0407baSopenharmony_ci * @mode: histogram mode 4643d0407baSopenharmony_ci * @histogram_predivider: process every stepsize pixel, all other pixels are skipped 4653d0407baSopenharmony_ci * @meas_window: coordinates of the meas window 4663d0407baSopenharmony_ci * @hist_weight: weighting factor for sub-windows 4673d0407baSopenharmony_ci */ 4683d0407baSopenharmony_cistruct cifisp_hst_config { 4693d0407baSopenharmony_ci enum cifisp_histogram_mode mode; 4703d0407baSopenharmony_ci unsigned char histogram_predivider; 4713d0407baSopenharmony_ci struct cifisp_window meas_window; 4723d0407baSopenharmony_ci unsigned char hist_weight[CIFISP_HISTOGRAM_WEIGHT_GRIDS_SIZE]; 4733d0407baSopenharmony_ci} __attribute__ ((packed)); 4743d0407baSopenharmony_ci 4753d0407baSopenharmony_ci/** 4763d0407baSopenharmony_ci * struct cifisp_aec_config - Configuration used by Auto Exposure Control 4773d0407baSopenharmony_ci * 4783d0407baSopenharmony_ci * @mode: Exposure measure mode 4793d0407baSopenharmony_ci * @autostop: stop mode (from enum cifisp_exp_ctrl_auotostop) 4803d0407baSopenharmony_ci * @meas_window: coordinates of the meas window 4813d0407baSopenharmony_ci */ 4823d0407baSopenharmony_cistruct cifisp_aec_config { 4833d0407baSopenharmony_ci enum cifisp_exp_meas_mode mode; 4843d0407baSopenharmony_ci __u32 autostop; 4853d0407baSopenharmony_ci struct cifisp_window meas_window; 4863d0407baSopenharmony_ci} __attribute__ ((packed)); 4873d0407baSopenharmony_ci 4883d0407baSopenharmony_ci/** 4893d0407baSopenharmony_ci * struct cifisp_afc_config - Configuration used by Auto Focus Control 4903d0407baSopenharmony_ci * 4913d0407baSopenharmony_ci * @num_afm_win: max CIFISP_AFM_MAX_WINDOWS 4923d0407baSopenharmony_ci * @afm_win: coordinates of the meas window 4933d0407baSopenharmony_ci * @thres: threshold used for minimizing the influence of noise 4943d0407baSopenharmony_ci * @var_shift: the number of bits for the shift operation at the end of the calculation chain. 4953d0407baSopenharmony_ci */ 4963d0407baSopenharmony_cistruct cifisp_afc_config { 4973d0407baSopenharmony_ci unsigned char num_afm_win; 4983d0407baSopenharmony_ci struct cifisp_window afm_win[CIFISP_AFM_MAX_WINDOWS]; 4993d0407baSopenharmony_ci unsigned int thres; 5003d0407baSopenharmony_ci unsigned int var_shift; 5013d0407baSopenharmony_ci} __attribute__ ((packed)); 5023d0407baSopenharmony_ci 5033d0407baSopenharmony_ci/** 5043d0407baSopenharmony_ci * enum cifisp_dpf_gain_usage - dpf gain usage 5053d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_DISABLED: don't use any gains in preprocessing stage 5063d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_NF_GAINS: use only the noise function gains from registers DPF_NF_GAIN_R, ... 5073d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_LSC_GAINS: use only the gains from LSC module 5083d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_NF_LSC_GAINS: use the noise function gains and the gains from LSC module 5093d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_AWB_GAINS: use only the gains from AWB module 5103d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_AWB_LSC_GAINS: use the gains from AWB and LSC module 5113d0407baSopenharmony_ci * @CIFISP_DPF_GAIN_USAGE_MAX: upper border (only for an internal evaluation) 5123d0407baSopenharmony_ci */ 5133d0407baSopenharmony_cienum cifisp_dpf_gain_usage { 5143d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_DISABLED, 5153d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_NF_GAINS, 5163d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_LSC_GAINS, 5173d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_NF_LSC_GAINS, 5183d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_AWB_GAINS, 5193d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_AWB_LSC_GAINS, 5203d0407baSopenharmony_ci CIFISP_DPF_GAIN_USAGE_MAX 5213d0407baSopenharmony_ci}; 5223d0407baSopenharmony_ci 5233d0407baSopenharmony_ci/** 5243d0407baSopenharmony_ci * enum cifisp_dpf_gain_usage - dpf gain usage 5253d0407baSopenharmony_ci * @CIFISP_DPF_RB_FILTERSIZE_13x9: red and blue filter kernel size 13x9 (means 7x5 active pixel) 5263d0407baSopenharmony_ci * @CIFISP_DPF_RB_FILTERSIZE_9x9: red and blue filter kernel size 9x9 (means 5x5 active pixel) 5273d0407baSopenharmony_ci */ 5283d0407baSopenharmony_cienum cifisp_dpf_rb_filtersize { 5293d0407baSopenharmony_ci CIFISP_DPF_RB_FILTERSIZE_13x9, 5303d0407baSopenharmony_ci CIFISP_DPF_RB_FILTERSIZE_9x9, 5313d0407baSopenharmony_ci}; 5323d0407baSopenharmony_ci 5333d0407baSopenharmony_ci/** 5343d0407baSopenharmony_ci * enum cifisp_dpf_nll_scale_mode - dpf noise level scale mode 5353d0407baSopenharmony_ci * @CIFISP_NLL_SCALE_LINEAR: use a linear scaling 5363d0407baSopenharmony_ci * @CIFISP_NLL_SCALE_LOGARITHMIC: use a logarithmic scaling 5373d0407baSopenharmony_ci */ 5383d0407baSopenharmony_cienum cifisp_dpf_nll_scale_mode { 5393d0407baSopenharmony_ci CIFISP_NLL_SCALE_LINEAR, 5403d0407baSopenharmony_ci CIFISP_NLL_SCALE_LOGARITHMIC, 5413d0407baSopenharmony_ci}; 5423d0407baSopenharmony_ci 5433d0407baSopenharmony_cistruct cifisp_dpf_nll { 5443d0407baSopenharmony_ci unsigned short coeff[CIFISP_DPF_MAX_NLF_COEFFS]; 5453d0407baSopenharmony_ci enum cifisp_dpf_nll_scale_mode scale_mode; 5463d0407baSopenharmony_ci} __attribute__ ((packed)); 5473d0407baSopenharmony_ci 5483d0407baSopenharmony_cistruct cifisp_dpf_rb_flt { 5493d0407baSopenharmony_ci enum cifisp_dpf_rb_filtersize fltsize; 5503d0407baSopenharmony_ci unsigned char spatial_coeff[CIFISP_DPF_MAX_SPATIAL_COEFFS]; 5513d0407baSopenharmony_ci bool r_enable; 5523d0407baSopenharmony_ci bool b_enable; 5533d0407baSopenharmony_ci} __attribute__ ((packed)); 5543d0407baSopenharmony_ci 5553d0407baSopenharmony_cistruct cifisp_dpf_g_flt { 5563d0407baSopenharmony_ci unsigned char spatial_coeff[CIFISP_DPF_MAX_SPATIAL_COEFFS]; 5573d0407baSopenharmony_ci bool gr_enable; 5583d0407baSopenharmony_ci bool gb_enable; 5593d0407baSopenharmony_ci} __attribute__ ((packed)); 5603d0407baSopenharmony_ci 5613d0407baSopenharmony_cistruct cifisp_dpf_gain { 5623d0407baSopenharmony_ci enum cifisp_dpf_gain_usage mode; 5633d0407baSopenharmony_ci unsigned short nf_r_gain; 5643d0407baSopenharmony_ci unsigned short nf_b_gain; 5653d0407baSopenharmony_ci unsigned short nf_gr_gain; 5663d0407baSopenharmony_ci unsigned short nf_gb_gain; 5673d0407baSopenharmony_ci} __attribute__ ((packed)); 5683d0407baSopenharmony_ci 5693d0407baSopenharmony_ci/** 5703d0407baSopenharmony_ci * struct cifisp_dpf_config - Configuration used by De-noising pre-filter 5713d0407baSopenharmony_ci * 5723d0407baSopenharmony_ci * @gain: noise function gain 5733d0407baSopenharmony_ci * @g_flt: green filter config 5743d0407baSopenharmony_ci * @rb_flt: red blue filter config 5753d0407baSopenharmony_ci * @nll: noise level lookup 5763d0407baSopenharmony_ci */ 5773d0407baSopenharmony_cistruct cifisp_dpf_config { 5783d0407baSopenharmony_ci struct cifisp_dpf_gain gain; 5793d0407baSopenharmony_ci struct cifisp_dpf_g_flt g_flt; 5803d0407baSopenharmony_ci struct cifisp_dpf_rb_flt rb_flt; 5813d0407baSopenharmony_ci struct cifisp_dpf_nll nll; 5823d0407baSopenharmony_ci} __attribute__ ((packed)); 5833d0407baSopenharmony_ci 5843d0407baSopenharmony_ci/** 5853d0407baSopenharmony_ci * struct cifisp_dpf_strength_config - strength of the filter 5863d0407baSopenharmony_ci * 5873d0407baSopenharmony_ci * @r: filter strength of the RED filter 5883d0407baSopenharmony_ci * @g: filter strength of the GREEN filter 5893d0407baSopenharmony_ci * @b: filter strength of the BLUE filter 5903d0407baSopenharmony_ci */ 5913d0407baSopenharmony_cistruct cifisp_dpf_strength_config { 5923d0407baSopenharmony_ci unsigned char r; 5933d0407baSopenharmony_ci unsigned char g; 5943d0407baSopenharmony_ci unsigned char b; 5953d0407baSopenharmony_ci} __attribute__ ((packed)); 5963d0407baSopenharmony_ci 5973d0407baSopenharmony_ci/** 5983d0407baSopenharmony_ci * enum cifisp_wdr_mode - wdr mode 5993d0407baSopenharmony_ci * @CIFISP_WDR_MODE_BLOCK: use a linear scaling 6003d0407baSopenharmony_ci * @CIFISP_WDR_MODE_GLOBAL: use a logarithmic scaling 6013d0407baSopenharmony_ci */ 6023d0407baSopenharmony_cienum cifisp_wdr_mode { 6033d0407baSopenharmony_ci CIFISP_WDR_MODE_BLOCK, 6043d0407baSopenharmony_ci CIFISP_WDR_MODE_GLOBAL 6053d0407baSopenharmony_ci}; 6063d0407baSopenharmony_ci 6073d0407baSopenharmony_ci/** 6083d0407baSopenharmony_ci * struct cifisp_wdr_config - Gamma Out correction 6093d0407baSopenharmony_ci */ 6103d0407baSopenharmony_cistruct cifisp_wdr_config { 6113d0407baSopenharmony_ci enum cifisp_wdr_mode mode; 6123d0407baSopenharmony_ci unsigned int c_wdr[CIFISP_WDR_SIZE]; 6133d0407baSopenharmony_ci} __attribute__ ((packed)); 6143d0407baSopenharmony_ci 6153d0407baSopenharmony_ci/** 6163d0407baSopenharmony_ci * struct cifisp_demosaiclp_config - rk demosiac low pass 6173d0407baSopenharmony_ci */ 6183d0407baSopenharmony_cistruct cifisp_demosaiclp_config { 6193d0407baSopenharmony_ci unsigned char rb_filter_en; 6203d0407baSopenharmony_ci unsigned char hp_filter_en; 6213d0407baSopenharmony_ci unsigned char lu_divided[4]; 6223d0407baSopenharmony_ci unsigned char thgrad_divided[5]; 6233d0407baSopenharmony_ci unsigned char thdiff_divided[5]; 6243d0407baSopenharmony_ci unsigned char thcsc_divided[5]; 6253d0407baSopenharmony_ci unsigned short thvar_divided[5]; 6263d0407baSopenharmony_ci unsigned char th_grad; 6273d0407baSopenharmony_ci unsigned char th_diff; 6283d0407baSopenharmony_ci unsigned char th_csc; 6293d0407baSopenharmony_ci unsigned short th_var; 6303d0407baSopenharmony_ci unsigned char th_var_en; 6313d0407baSopenharmony_ci unsigned char th_csc_en; 6323d0407baSopenharmony_ci unsigned char th_diff_en; 6333d0407baSopenharmony_ci unsigned char th_grad_en; 6343d0407baSopenharmony_ci unsigned char use_old_lp; 6353d0407baSopenharmony_ci unsigned char similarity_th; 6363d0407baSopenharmony_ci unsigned char flat_level_sel; 6373d0407baSopenharmony_ci unsigned char pattern_level_sel; 6383d0407baSopenharmony_ci unsigned char edge_level_sel; 6393d0407baSopenharmony_ci unsigned char thgrad_r_fct; 6403d0407baSopenharmony_ci unsigned char thdiff_r_fct; 6413d0407baSopenharmony_ci unsigned char thvar_r_fct; 6423d0407baSopenharmony_ci unsigned char thgrad_b_fct; 6433d0407baSopenharmony_ci unsigned char thdiff_b_fct; 6443d0407baSopenharmony_ci unsigned char thvar_b_fct; 6453d0407baSopenharmony_ci} __attribute__ ((packed)); 6463d0407baSopenharmony_ci 6473d0407baSopenharmony_ci/** 6483d0407baSopenharmony_ci * struct cifisp_rkiesharp_config - rk ie sharp 6493d0407baSopenharmony_ci */ 6503d0407baSopenharmony_cistruct cifisp_rkiesharp_config { 6513d0407baSopenharmony_ci unsigned char coring_thr; 6523d0407baSopenharmony_ci unsigned char full_range; 6533d0407baSopenharmony_ci unsigned char switch_avg; 6543d0407baSopenharmony_ci unsigned char yavg_thr[4]; 6553d0407baSopenharmony_ci unsigned char delta1[5]; 6563d0407baSopenharmony_ci unsigned char delta2[5]; 6573d0407baSopenharmony_ci unsigned char maxnumber[5]; 6583d0407baSopenharmony_ci unsigned char minnumber[5]; 6593d0407baSopenharmony_ci unsigned char gauss_flat_coe[9]; 6603d0407baSopenharmony_ci unsigned char gauss_noise_coe[9]; 6613d0407baSopenharmony_ci unsigned char gauss_other_coe[9]; 6623d0407baSopenharmony_ci unsigned char line1_filter_coe[6]; 6633d0407baSopenharmony_ci unsigned char line2_filter_coe[9]; 6643d0407baSopenharmony_ci unsigned char line3_filter_coe[6]; 6653d0407baSopenharmony_ci unsigned short grad_seq[4]; 6663d0407baSopenharmony_ci unsigned char sharp_factor[5]; 6673d0407baSopenharmony_ci unsigned char uv_gauss_flat_coe[15]; 6683d0407baSopenharmony_ci unsigned char uv_gauss_noise_coe[15]; 6693d0407baSopenharmony_ci unsigned char uv_gauss_other_coe[15]; 6703d0407baSopenharmony_ci unsigned char lap_mat_coe[9]; 6713d0407baSopenharmony_ci} __attribute__ ((packed)); 6723d0407baSopenharmony_ci 6733d0407baSopenharmony_ci/** 6743d0407baSopenharmony_ci * struct cifisp_isp_other_cfg - Parameters for some blocks in rockchip isp1 6753d0407baSopenharmony_ci * 6763d0407baSopenharmony_ci * @dpcc_config: Defect Pixel Cluster Correction config 6773d0407baSopenharmony_ci * @bls_config: Black Level Subtraction config 6783d0407baSopenharmony_ci * @sdg_config: sensor degamma config 6793d0407baSopenharmony_ci * @lsc_config: Lens Shade config 6803d0407baSopenharmony_ci * @awb_gain_config: Auto White balance gain config 6813d0407baSopenharmony_ci * @flt_config: filter config 6823d0407baSopenharmony_ci * @bdm_config: demosaic config 6833d0407baSopenharmony_ci * @ctk_config: cross talk config 6843d0407baSopenharmony_ci * @goc_config: gamma out config 6853d0407baSopenharmony_ci * @bls_config: black level suntraction config 6863d0407baSopenharmony_ci * @dpf_config: De-noising pre-filter config 6873d0407baSopenharmony_ci * @dpf_strength_config: dpf strength config 6883d0407baSopenharmony_ci * @cproc_config: color process config 6893d0407baSopenharmony_ci * @ie_config: image effects config 6903d0407baSopenharmony_ci */ 6913d0407baSopenharmony_cistruct cifisp_isp_other_cfg { 6923d0407baSopenharmony_ci struct cifisp_dpcc_config dpcc_config; 6933d0407baSopenharmony_ci struct cifisp_bls_config bls_config; 6943d0407baSopenharmony_ci struct cifisp_sdg_config sdg_config; 6953d0407baSopenharmony_ci struct cifisp_lsc_config lsc_config; 6963d0407baSopenharmony_ci struct cifisp_awb_gain_config awb_gain_config; 6973d0407baSopenharmony_ci struct cifisp_flt_config flt_config; 6983d0407baSopenharmony_ci struct cifisp_bdm_config bdm_config; 6993d0407baSopenharmony_ci struct cifisp_ctk_config ctk_config; 7003d0407baSopenharmony_ci struct cifisp_goc_config goc_config; 7013d0407baSopenharmony_ci struct cifisp_dpf_config dpf_config; 7023d0407baSopenharmony_ci struct cifisp_dpf_strength_config dpf_strength_config; 7033d0407baSopenharmony_ci struct cifisp_cproc_config cproc_config; 7043d0407baSopenharmony_ci struct cifisp_ie_config ie_config; 7053d0407baSopenharmony_ci struct cifisp_wdr_config wdr_config; 7063d0407baSopenharmony_ci struct cifisp_demosaiclp_config demosaiclp_config; 7073d0407baSopenharmony_ci struct cifisp_rkiesharp_config rkiesharp_config; 7083d0407baSopenharmony_ci} __attribute__ ((packed)); 7093d0407baSopenharmony_ci 7103d0407baSopenharmony_ci/** 7113d0407baSopenharmony_ci * struct cifisp_isp_meas_cfg - Rockchip ISP1 Measure Parameters 7123d0407baSopenharmony_ci * 7133d0407baSopenharmony_ci * @awb_meas_config: auto white balance config 7143d0407baSopenharmony_ci * @hst_config: histogram config 7153d0407baSopenharmony_ci * @aec_config: auto exposure config 7163d0407baSopenharmony_ci * @afc_config: auto focus config 7173d0407baSopenharmony_ci */ 7183d0407baSopenharmony_cistruct cifisp_isp_meas_cfg { 7193d0407baSopenharmony_ci struct cifisp_awb_meas_config awb_meas_config; 7203d0407baSopenharmony_ci struct cifisp_hst_config hst_config; 7213d0407baSopenharmony_ci struct cifisp_aec_config aec_config; 7223d0407baSopenharmony_ci struct cifisp_afc_config afc_config; 7233d0407baSopenharmony_ci} __attribute__ ((packed)); 7243d0407baSopenharmony_ci 7253d0407baSopenharmony_ci/** 7263d0407baSopenharmony_ci * struct rkisp1_isp_params_cfg - Rockchip ISP1 Input Parameters Meta Data 7273d0407baSopenharmony_ci * 7283d0407baSopenharmony_ci * @module_en_update: mask the enable bits of which module should be updated 7293d0407baSopenharmony_ci * @module_ens: mask the enable value of each module, only update the module 7303d0407baSopenharmony_ci * which correspond bit was set in module_en_update 7313d0407baSopenharmony_ci * @module_cfg_update: mask the config bits of which module should be updated 7323d0407baSopenharmony_ci * @meas: measurement config 7333d0407baSopenharmony_ci * @others: other config 7343d0407baSopenharmony_ci */ 7353d0407baSopenharmony_cistruct rkisp1_isp_params_cfg { 7363d0407baSopenharmony_ci unsigned int module_en_update; 7373d0407baSopenharmony_ci unsigned int module_ens; 7383d0407baSopenharmony_ci unsigned int module_cfg_update; 7393d0407baSopenharmony_ci 7403d0407baSopenharmony_ci struct cifisp_isp_meas_cfg meas; 7413d0407baSopenharmony_ci struct cifisp_isp_other_cfg others; 7423d0407baSopenharmony_ci} __attribute__ ((packed)); 7433d0407baSopenharmony_ci 7443d0407baSopenharmony_ci/*---------- PART2: Measurement Statistics ------------*/ 7453d0407baSopenharmony_ci 7463d0407baSopenharmony_ci/** 7473d0407baSopenharmony_ci * struct cifisp_bls_meas_val - AWB measured values 7483d0407baSopenharmony_ci * 7493d0407baSopenharmony_ci * @cnt: White pixel count, number of "white pixels" found during laster measurement 7503d0407baSopenharmony_ci * @mean_y_or_g: Mean value of Y within window and frames, Green if RGB is selected. 7513d0407baSopenharmony_ci * @mean_cb_or_b: Mean value of Cb within window and frames, Blue if RGB is selected. 7523d0407baSopenharmony_ci * @mean_cr_or_r: Mean value of Cr within window and frames, Red if RGB is selected. 7533d0407baSopenharmony_ci */ 7543d0407baSopenharmony_cistruct cifisp_awb_meas { 7553d0407baSopenharmony_ci unsigned int cnt; 7563d0407baSopenharmony_ci unsigned char mean_y_or_g; 7573d0407baSopenharmony_ci unsigned char mean_cb_or_b; 7583d0407baSopenharmony_ci unsigned char mean_cr_or_r; 7593d0407baSopenharmony_ci} __attribute__ ((packed)); 7603d0407baSopenharmony_ci 7613d0407baSopenharmony_ci/** 7623d0407baSopenharmony_ci * struct cifisp_awb_stat - statistics automatic white balance data 7633d0407baSopenharmony_ci * 7643d0407baSopenharmony_ci * @awb_mean: Mean measured data 7653d0407baSopenharmony_ci */ 7663d0407baSopenharmony_cistruct cifisp_awb_stat { 7673d0407baSopenharmony_ci struct cifisp_awb_meas awb_mean[CIFISP_AWB_MAX_GRID]; 7683d0407baSopenharmony_ci} __attribute__ ((packed)); 7693d0407baSopenharmony_ci 7703d0407baSopenharmony_ci/** 7713d0407baSopenharmony_ci * struct cifisp_bls_meas_val - BLS measured values 7723d0407baSopenharmony_ci * 7733d0407baSopenharmony_ci * @meas_r: Mean measured value for Bayer pattern R 7743d0407baSopenharmony_ci * @meas_gr: Mean measured value for Bayer pattern Gr 7753d0407baSopenharmony_ci * @meas_gb: Mean measured value for Bayer pattern Gb 7763d0407baSopenharmony_ci * @meas_b: Mean measured value for Bayer pattern B 7773d0407baSopenharmony_ci */ 7783d0407baSopenharmony_cistruct cifisp_bls_meas_val { 7793d0407baSopenharmony_ci unsigned short meas_r; 7803d0407baSopenharmony_ci unsigned short meas_gr; 7813d0407baSopenharmony_ci unsigned short meas_gb; 7823d0407baSopenharmony_ci unsigned short meas_b; 7833d0407baSopenharmony_ci} __attribute__ ((packed)); 7843d0407baSopenharmony_ci 7853d0407baSopenharmony_ci/** 7863d0407baSopenharmony_ci * struct cifisp_ae_stat - statistics auto exposure data 7873d0407baSopenharmony_ci * 7883d0407baSopenharmony_ci * @exp_mean: Mean luminance value of block xx 7893d0407baSopenharmony_ci * @bls_val: available wit exposure results 7903d0407baSopenharmony_ci * 7913d0407baSopenharmony_ci * Image is divided into 5x5 blocks. 7923d0407baSopenharmony_ci */ 7933d0407baSopenharmony_cistruct cifisp_ae_stat { 7943d0407baSopenharmony_ci unsigned char exp_mean[CIFISP_AE_MEAN_MAX]; 7953d0407baSopenharmony_ci struct cifisp_bls_meas_val bls_val; 7963d0407baSopenharmony_ci} __attribute__ ((packed)); 7973d0407baSopenharmony_ci 7983d0407baSopenharmony_ci/** 7993d0407baSopenharmony_ci * struct cifisp_af_meas_val - AF measured values 8003d0407baSopenharmony_ci * 8013d0407baSopenharmony_ci * @sum: sharpness, refer to datasheet for definition 8023d0407baSopenharmony_ci * @lum: luminance, refer to datasheet for definition 8033d0407baSopenharmony_ci */ 8043d0407baSopenharmony_cistruct cifisp_af_meas_val { 8053d0407baSopenharmony_ci unsigned int sum; 8063d0407baSopenharmony_ci unsigned int lum; 8073d0407baSopenharmony_ci} __attribute__ ((packed)); 8083d0407baSopenharmony_ci 8093d0407baSopenharmony_ci/** 8103d0407baSopenharmony_ci * struct cifisp_af_stat - statistics auto focus data 8113d0407baSopenharmony_ci * 8123d0407baSopenharmony_ci * @window: AF measured value of window x 8133d0407baSopenharmony_ci * 8143d0407baSopenharmony_ci * The module measures the sharpness in 3 windows of selectable size via 8153d0407baSopenharmony_ci * register settings(ISP_AFM_*_A/B/C) 8163d0407baSopenharmony_ci */ 8173d0407baSopenharmony_cistruct cifisp_af_stat { 8183d0407baSopenharmony_ci struct cifisp_af_meas_val window[CIFISP_AFM_MAX_WINDOWS]; 8193d0407baSopenharmony_ci} __attribute__ ((packed)); 8203d0407baSopenharmony_ci 8213d0407baSopenharmony_ci/** 8223d0407baSopenharmony_ci * struct cifisp_hist_stat - statistics histogram data 8233d0407baSopenharmony_ci * 8243d0407baSopenharmony_ci * @hist_bins: measured bin counters 8253d0407baSopenharmony_ci * 8263d0407baSopenharmony_ci * Measurement window divided into 25 sub-windows, set 8273d0407baSopenharmony_ci * with ISP_HIST_XXX 8283d0407baSopenharmony_ci */ 8293d0407baSopenharmony_cistruct cifisp_hist_stat { 8303d0407baSopenharmony_ci unsigned int hist_bins[CIFISP_HIST_BIN_N_MAX]; 8313d0407baSopenharmony_ci} __attribute__ ((packed)); 8323d0407baSopenharmony_ci 8333d0407baSopenharmony_ci/** 8343d0407baSopenharmony_ci * struct cifisp_embedded_data - embedded data 8353d0407baSopenharmony_ci * 8363d0407baSopenharmony_ci * @data: embedded data 8373d0407baSopenharmony_ci * 8383d0407baSopenharmony_ci */ 8393d0407baSopenharmony_cistruct cifisp_embedded_data { 8403d0407baSopenharmony_ci unsigned char data[CIFISP_ADD_DATA_FIFO_SIZE]; 8413d0407baSopenharmony_ci} __attribute__ ((packed)); 8423d0407baSopenharmony_ci 8433d0407baSopenharmony_ci/** 8443d0407baSopenharmony_ci * struct rkisp1_stat_buffer - Rockchip ISP1 Statistics Data 8453d0407baSopenharmony_ci * 8463d0407baSopenharmony_ci * @cifisp_awb_stat: statistics data for automatic white balance 8473d0407baSopenharmony_ci * @cifisp_ae_stat: statistics data for auto exposure 8483d0407baSopenharmony_ci * @cifisp_af_stat: statistics data for auto focus 8493d0407baSopenharmony_ci * @cifisp_hist_stat: statistics histogram data 8503d0407baSopenharmony_ci */ 8513d0407baSopenharmony_cistruct cifisp_stat { 8523d0407baSopenharmony_ci struct cifisp_awb_stat awb; 8533d0407baSopenharmony_ci struct cifisp_ae_stat ae; 8543d0407baSopenharmony_ci struct cifisp_af_stat af; 8553d0407baSopenharmony_ci struct cifisp_hist_stat hist; 8563d0407baSopenharmony_ci struct cifisp_embedded_data emd; 8573d0407baSopenharmony_ci} __attribute__ ((packed)); 8583d0407baSopenharmony_ci 8593d0407baSopenharmony_ci/** 8603d0407baSopenharmony_ci * struct rkisp1_stat_buffer - Rockchip ISP1 Statistics Meta Data 8613d0407baSopenharmony_ci * 8623d0407baSopenharmony_ci * @meas_type: measurement types (CIFISP_STAT_ definitions) 8633d0407baSopenharmony_ci * @frame_id: frame ID for sync 8643d0407baSopenharmony_ci * @params: statistics data 8653d0407baSopenharmony_ci */ 8663d0407baSopenharmony_cistruct rkisp1_stat_buffer { 8673d0407baSopenharmony_ci unsigned int meas_type; 8683d0407baSopenharmony_ci unsigned int frame_id; 8693d0407baSopenharmony_ci struct cifisp_stat params; 8703d0407baSopenharmony_ci} __attribute__ ((packed)); 8713d0407baSopenharmony_ci 8723d0407baSopenharmony_ci#endif /* _UAPI_RKISP1_CONFIG_H */ 873