xref: /OK3568_Linux_fs/kernel/include/uapi/linux/rk-isp1-config.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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