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