1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
29d4fa1a1SMauro Carvalho Chehab /*
39d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab  *
69d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab  *
109d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab  * more details.
149d4fa1a1SMauro Carvalho Chehab  */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #ifndef __IA_CSS_S3A_TYPES_H
179d4fa1a1SMauro Carvalho Chehab #define __IA_CSS_S3A_TYPES_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab /* @file
209d4fa1a1SMauro Carvalho Chehab * CSS-API header file for 3A statistics parameters.
219d4fa1a1SMauro Carvalho Chehab */
229d4fa1a1SMauro Carvalho Chehab 
239d4fa1a1SMauro Carvalho Chehab #include <ia_css_frac.h>
249d4fa1a1SMauro Carvalho Chehab 
259d4fa1a1SMauro Carvalho Chehab #if (defined(SYSTEM_css_skycam_c0_system)) && (!defined(PIPE_GENERATION))
269d4fa1a1SMauro Carvalho Chehab #include "../../../../components/stats_3a/src/stats_3a_public.h"
279d4fa1a1SMauro Carvalho Chehab #endif
289d4fa1a1SMauro Carvalho Chehab 
299d4fa1a1SMauro Carvalho Chehab /* 3A configuration. This configures the 3A statistics collection
309d4fa1a1SMauro Carvalho Chehab  *  module.
319d4fa1a1SMauro Carvalho Chehab  */
329d4fa1a1SMauro Carvalho Chehab 
339d4fa1a1SMauro Carvalho Chehab /* 3A statistics grid
349d4fa1a1SMauro Carvalho Chehab  *
359d4fa1a1SMauro Carvalho Chehab  *  ISP block: S3A1 (3A Support for 3A ver.1 (Histogram is not used for AE))
369d4fa1a1SMauro Carvalho Chehab  *             S3A2 (3A Support for 3A ver.2 (Histogram is used for AE))
379d4fa1a1SMauro Carvalho Chehab  *  ISP1: S3A1 is used.
389d4fa1a1SMauro Carvalho Chehab  *  ISP2: S3A2 is used.
399d4fa1a1SMauro Carvalho Chehab  */
409d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_grid_info {
419d4fa1a1SMauro Carvalho Chehab #if defined(SYSTEM_css_skycam_c0_system)
429d4fa1a1SMauro Carvalho Chehab 	u32 ae_enable;					/** ae enabled in binary,
439d4fa1a1SMauro Carvalho Chehab 								   0:disabled, 1:enabled */
449d4fa1a1SMauro Carvalho Chehab 	struct ae_public_config_grid_config
459d4fa1a1SMauro Carvalho Chehab 		ae_grd_info;	/** see description in ae_public.h*/
469d4fa1a1SMauro Carvalho Chehab 
479d4fa1a1SMauro Carvalho Chehab 	u32 awb_enable;					/** awb enabled in binary,
489d4fa1a1SMauro Carvalho Chehab 								   0:disabled, 1:enabled */
499d4fa1a1SMauro Carvalho Chehab 	struct awb_public_config_grid_config
509d4fa1a1SMauro Carvalho Chehab 		awb_grd_info;	/** see description in awb_public.h*/
519d4fa1a1SMauro Carvalho Chehab 
529d4fa1a1SMauro Carvalho Chehab 	u32 af_enable;					/** af enabled in binary,
539d4fa1a1SMauro Carvalho Chehab 								   0:disabled, 1:enabled */
549d4fa1a1SMauro Carvalho Chehab 	struct af_public_grid_config		af_grd_info;	/** see description in af_public.h*/
559d4fa1a1SMauro Carvalho Chehab 
569d4fa1a1SMauro Carvalho Chehab 	u32 awb_fr_enable;					/** awb_fr enabled in binary,
579d4fa1a1SMauro Carvalho Chehab 								   0:disabled, 1:enabled */
589d4fa1a1SMauro Carvalho Chehab 	struct awb_fr_public_grid_config
599d4fa1a1SMauro Carvalho Chehab 		awb_fr_grd_info;/** see description in awb_fr_public.h*/
609d4fa1a1SMauro Carvalho Chehab 
619d4fa1a1SMauro Carvalho Chehab 	u32 elem_bit_depth;    /** TODO:Taken from BYT  - need input from AIQ
629d4fa1a1SMauro Carvalho Chehab 					if needed for SKC
639d4fa1a1SMauro Carvalho Chehab 					Bit depth of element used
649d4fa1a1SMauro Carvalho Chehab 					to calculate 3A statistics.
659d4fa1a1SMauro Carvalho Chehab 					This is 13, which is the normalized
669d4fa1a1SMauro Carvalho Chehab 					bayer bit depth in DSP. */
679d4fa1a1SMauro Carvalho Chehab 
689d4fa1a1SMauro Carvalho Chehab #else
699d4fa1a1SMauro Carvalho Chehab 	u32 enable;            /** 3A statistics enabled.
709d4fa1a1SMauro Carvalho Chehab 					0:disabled, 1:enabled */
719d4fa1a1SMauro Carvalho Chehab 	u32 use_dmem;          /** DMEM or VMEM determines layout.
729d4fa1a1SMauro Carvalho Chehab 					0:3A statistics are stored to VMEM,
739d4fa1a1SMauro Carvalho Chehab 					1:3A statistics are stored to DMEM */
749d4fa1a1SMauro Carvalho Chehab 	u32 has_histogram;     /** Statistics include histogram.
759d4fa1a1SMauro Carvalho Chehab 					0:no histogram, 1:has histogram */
769d4fa1a1SMauro Carvalho Chehab 	u32 width;		    /** Width of 3A grid table.
779d4fa1a1SMauro Carvalho Chehab 					(= Horizontal number of grid cells
789d4fa1a1SMauro Carvalho Chehab 					in table, which cells have effective
799d4fa1a1SMauro Carvalho Chehab 					statistics.) */
809d4fa1a1SMauro Carvalho Chehab 	u32 height;	    /** Height of 3A grid table.
819d4fa1a1SMauro Carvalho Chehab 					(= Vertical number of grid cells
829d4fa1a1SMauro Carvalho Chehab 					in table, which cells have effective
839d4fa1a1SMauro Carvalho Chehab 					statistics.) */
849d4fa1a1SMauro Carvalho Chehab 	u32 aligned_width;     /** Horizontal stride (for alloc).
859d4fa1a1SMauro Carvalho Chehab 					(= Horizontal number of grid cells
869d4fa1a1SMauro Carvalho Chehab 					in table, which means
879d4fa1a1SMauro Carvalho Chehab 					the allocated width.) */
889d4fa1a1SMauro Carvalho Chehab 	u32 aligned_height;    /** Vertical stride (for alloc).
899d4fa1a1SMauro Carvalho Chehab 					(= Vertical number of grid cells
909d4fa1a1SMauro Carvalho Chehab 					in table, which means
919d4fa1a1SMauro Carvalho Chehab 					the allocated height.) */
929d4fa1a1SMauro Carvalho Chehab 	u32 bqs_per_grid_cell; /** Grid cell size in BQ(Bayer Quad) unit.
939d4fa1a1SMauro Carvalho Chehab 					(1BQ means {Gr,R,B,Gb}(2x2 pixels).)
949d4fa1a1SMauro Carvalho Chehab 					Valid values are 8,16,32,64. */
959d4fa1a1SMauro Carvalho Chehab 	u32 deci_factor_log2;  /** log2 of bqs_per_grid_cell. */
969d4fa1a1SMauro Carvalho Chehab 	u32 elem_bit_depth;    /** Bit depth of element used
979d4fa1a1SMauro Carvalho Chehab 					to calculate 3A statistics.
989d4fa1a1SMauro Carvalho Chehab 					This is 13, which is the normalized
999d4fa1a1SMauro Carvalho Chehab 					bayer bit depth in DSP. */
1009d4fa1a1SMauro Carvalho Chehab #endif
1019d4fa1a1SMauro Carvalho Chehab };
1029d4fa1a1SMauro Carvalho Chehab 
1039d4fa1a1SMauro Carvalho Chehab /* This struct should be split into 3, for AE, AWB and AF.
1049d4fa1a1SMauro Carvalho Chehab  * However, that will require driver/ 3A lib modifications.
1059d4fa1a1SMauro Carvalho Chehab  */
1069d4fa1a1SMauro Carvalho Chehab 
1079d4fa1a1SMauro Carvalho Chehab /* 3A configuration. This configures the 3A statistics collection
1089d4fa1a1SMauro Carvalho Chehab  *  module.
1099d4fa1a1SMauro Carvalho Chehab  *
1109d4fa1a1SMauro Carvalho Chehab  *  ae_y_*: Coefficients to calculate luminance from bayer.
1119d4fa1a1SMauro Carvalho Chehab  *  awb_lg_*: Thresholds to check the saturated bayer pixels for AWB.
1129d4fa1a1SMauro Carvalho Chehab  *    Condition of effective pixel for AWB level gate check:
1139d4fa1a1SMauro Carvalho Chehab  *      bayer(sensor) <= awb_lg_high_raw &&
1149d4fa1a1SMauro Carvalho Chehab  *      bayer(when AWB statisitcs is calculated) >= awb_lg_low &&
1159d4fa1a1SMauro Carvalho Chehab  *      bayer(when AWB statisitcs is calculated) <= awb_lg_high
1169d4fa1a1SMauro Carvalho Chehab  *  af_fir*: Coefficients of high pass filter to calculate AF statistics.
1179d4fa1a1SMauro Carvalho Chehab  *
1189d4fa1a1SMauro Carvalho Chehab  *  ISP block: S3A1(ae_y_* for AE/AF, awb_lg_* for AWB)
1199d4fa1a1SMauro Carvalho Chehab  *             S3A2(ae_y_* for AF, awb_lg_* for AWB)
1209d4fa1a1SMauro Carvalho Chehab  *             SDVS1(ae_y_*)
1219d4fa1a1SMauro Carvalho Chehab  *             SDVS2(ae_y_*)
1229d4fa1a1SMauro Carvalho Chehab  *  ISP1: S3A1 and SDVS1 are used.
1239d4fa1a1SMauro Carvalho Chehab  *  ISP2: S3A2 and SDVS2 are used.
1249d4fa1a1SMauro Carvalho Chehab  */
1259d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_config {
1269d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 ae_y_coef_r;	/** Weight of R for Y.
1279d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1289d4fa1a1SMauro Carvalho Chehab 						default/ineffective 25559 */
1299d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 ae_y_coef_g;	/** Weight of G for Y.
1309d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1319d4fa1a1SMauro Carvalho Chehab 						default/ineffective 32768 */
1329d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 ae_y_coef_b;	/** Weight of B for Y.
1339d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1349d4fa1a1SMauro Carvalho Chehab 						default/ineffective 7209 */
1359d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 awb_lg_high_raw;	/** AWB level gate high for raw.
1369d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1379d4fa1a1SMauro Carvalho Chehab 						default 65472(=1023*64),
1389d4fa1a1SMauro Carvalho Chehab 						ineffective 65535 */
1399d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 awb_lg_low;	/** AWB level gate low.
1409d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1419d4fa1a1SMauro Carvalho Chehab 						default 64(=1*64),
1429d4fa1a1SMauro Carvalho Chehab 						ineffective 0 */
1439d4fa1a1SMauro Carvalho Chehab 	ia_css_u0_16 awb_lg_high;	/** AWB level gate high.
1449d4fa1a1SMauro Carvalho Chehab 						u0.16, [0,65535],
1459d4fa1a1SMauro Carvalho Chehab 						default 65535,
1469d4fa1a1SMauro Carvalho Chehab 						ineffective 65535 */
1479d4fa1a1SMauro Carvalho Chehab 	ia_css_s0_15 af_fir1_coef[7];	/** AF FIR coefficients of fir1.
1489d4fa1a1SMauro Carvalho Chehab 						s0.15, [-32768,32767],
1499d4fa1a1SMauro Carvalho Chehab 				default/ineffective
1509d4fa1a1SMauro Carvalho Chehab 				-6689,-12207,-32768,32767,12207,6689,0 */
1519d4fa1a1SMauro Carvalho Chehab 	ia_css_s0_15 af_fir2_coef[7];	/** AF FIR coefficients of fir2.
1529d4fa1a1SMauro Carvalho Chehab 						s0.15, [-32768,32767],
1539d4fa1a1SMauro Carvalho Chehab 				default/ineffective
1549d4fa1a1SMauro Carvalho Chehab 				2053,0,-18437,32767,-18437,2053,0 */
1559d4fa1a1SMauro Carvalho Chehab };
1569d4fa1a1SMauro Carvalho Chehab 
1579d4fa1a1SMauro Carvalho Chehab /* 3A statistics. This structure describes the data stored
1589d4fa1a1SMauro Carvalho Chehab  *  in each 3A grid point.
1599d4fa1a1SMauro Carvalho Chehab  *
1609d4fa1a1SMauro Carvalho Chehab  *  ISP block: S3A1 (3A Support for 3A ver.1) (Histogram is not used for AE)
1619d4fa1a1SMauro Carvalho Chehab  *             S3A2 (3A Support for 3A ver.2) (Histogram is used for AE)
1629d4fa1a1SMauro Carvalho Chehab  *             - ae_y is used only for S3A1.
1639d4fa1a1SMauro Carvalho Chehab  *             - awb_* and af_* are used both for S3A1 and S3A2.
1649d4fa1a1SMauro Carvalho Chehab  *  ISP1: S3A1 is used.
1659d4fa1a1SMauro Carvalho Chehab  *  ISP2: S3A2 is used.
1669d4fa1a1SMauro Carvalho Chehab  */
1679d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_output {
1689d4fa1a1SMauro Carvalho Chehab 	s32 ae_y;    /** Sum of Y in a statistics window, for AE.
1699d4fa1a1SMauro Carvalho Chehab 				(u19.13) */
1709d4fa1a1SMauro Carvalho Chehab 	s32 awb_cnt; /** Number of effective pixels
1719d4fa1a1SMauro Carvalho Chehab 				in a statistics window.
1729d4fa1a1SMauro Carvalho Chehab 				Pixels passed by the AWB level gate check are
1739d4fa1a1SMauro Carvalho Chehab 				judged as "effective". (u32) */
1749d4fa1a1SMauro Carvalho Chehab 	s32 awb_gr;  /** Sum of Gr in a statistics window, for AWB.
1759d4fa1a1SMauro Carvalho Chehab 				All Gr pixels (not only for effective pixels)
1769d4fa1a1SMauro Carvalho Chehab 				are summed. (u19.13) */
1779d4fa1a1SMauro Carvalho Chehab 	s32 awb_r;   /** Sum of R in a statistics window, for AWB.
1789d4fa1a1SMauro Carvalho Chehab 				All R pixels (not only for effective pixels)
1799d4fa1a1SMauro Carvalho Chehab 				are summed. (u19.13) */
1809d4fa1a1SMauro Carvalho Chehab 	s32 awb_b;   /** Sum of B in a statistics window, for AWB.
1819d4fa1a1SMauro Carvalho Chehab 				All B pixels (not only for effective pixels)
1829d4fa1a1SMauro Carvalho Chehab 				are summed. (u19.13) */
1839d4fa1a1SMauro Carvalho Chehab 	s32 awb_gb;  /** Sum of Gb in a statistics window, for AWB.
1849d4fa1a1SMauro Carvalho Chehab 				All Gb pixels (not only for effective pixels)
1859d4fa1a1SMauro Carvalho Chehab 				are summed. (u19.13) */
1869d4fa1a1SMauro Carvalho Chehab 	s32 af_hpf1; /** Sum of |Y| following high pass filter af_fir1
1879d4fa1a1SMauro Carvalho Chehab 				within a statistics window, for AF. (u19.13) */
1889d4fa1a1SMauro Carvalho Chehab 	s32 af_hpf2; /** Sum of |Y| following high pass filter af_fir2
1899d4fa1a1SMauro Carvalho Chehab 				within a statistics window, for AF. (u19.13) */
1909d4fa1a1SMauro Carvalho Chehab };
1919d4fa1a1SMauro Carvalho Chehab 
1929d4fa1a1SMauro Carvalho Chehab /* 3A Statistics. This structure describes the statistics that are generated
1939d4fa1a1SMauro Carvalho Chehab  *  using the provided configuration (ia_css_3a_config).
1949d4fa1a1SMauro Carvalho Chehab  */
1959d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_statistics {
1969d4fa1a1SMauro Carvalho Chehab 	struct ia_css_3a_grid_info
1979d4fa1a1SMauro Carvalho Chehab 		grid;	/** grid info contains the dimensions of the 3A grid */
1989d4fa1a1SMauro Carvalho Chehab 	struct ia_css_3a_output
1999d4fa1a1SMauro Carvalho Chehab 		*data;	/** the pointer to 3a_output[grid.width * grid.height]
2009d4fa1a1SMauro Carvalho Chehab 						     containing the 3A statistics */
2019d4fa1a1SMauro Carvalho Chehab 	struct ia_css_3a_rgby_output *rgby_data;/** the pointer to 3a_rgby_output[256]
2029d4fa1a1SMauro Carvalho Chehab 						     containing the histogram */
2039d4fa1a1SMauro Carvalho Chehab };
2049d4fa1a1SMauro Carvalho Chehab 
2059d4fa1a1SMauro Carvalho Chehab /* Histogram (Statistics for AE).
2069d4fa1a1SMauro Carvalho Chehab  *
2079d4fa1a1SMauro Carvalho Chehab  *  4 histograms(r,g,b,y),
2089d4fa1a1SMauro Carvalho Chehab  *  256 bins for each histogram, unsigned 24bit value for each bin.
2099d4fa1a1SMauro Carvalho Chehab  *    struct ia_css_3a_rgby_output data[256];
2109d4fa1a1SMauro Carvalho Chehab 
2119d4fa1a1SMauro Carvalho Chehab  *  ISP block: HIST2
2129d4fa1a1SMauro Carvalho Chehab  * (ISP1: HIST2 is not used.)
2139d4fa1a1SMauro Carvalho Chehab  *  ISP2: HIST2 is used.
2149d4fa1a1SMauro Carvalho Chehab  */
2159d4fa1a1SMauro Carvalho Chehab struct ia_css_3a_rgby_output {
2169d4fa1a1SMauro Carvalho Chehab 	u32 r;	/** Number of R of one bin of the histogram R. (u24) */
2179d4fa1a1SMauro Carvalho Chehab 	u32 g;	/** Number of G of one bin of the histogram G. (u24) */
2189d4fa1a1SMauro Carvalho Chehab 	u32 b;	/** Number of B of one bin of the histogram B. (u24) */
2199d4fa1a1SMauro Carvalho Chehab 	u32 y;	/** Number of Y of one bin of the histogram Y. (u24) */
2209d4fa1a1SMauro Carvalho Chehab };
2219d4fa1a1SMauro Carvalho Chehab 
2229d4fa1a1SMauro Carvalho Chehab #endif /* __IA_CSS_S3A_TYPES_H */
223