]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - include/media/davinci/dm355_ccdc.h
UBUNTU: Ubuntu-5.4.0-117.132
[mirror_ubuntu-focal-kernel.git] / include / media / davinci / dm355_ccdc.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3 * Copyright (C) 2005-2009 Texas Instruments Inc
4 */
5 #ifndef _DM355_CCDC_H
6 #define _DM355_CCDC_H
7 #include <media/davinci/ccdc_types.h>
8 #include <media/davinci/vpfe_types.h>
9
10 /* enum for No of pixel per line to be avg. in Black Clamping */
11 enum ccdc_sample_length {
12 CCDC_SAMPLE_1PIXELS,
13 CCDC_SAMPLE_2PIXELS,
14 CCDC_SAMPLE_4PIXELS,
15 CCDC_SAMPLE_8PIXELS,
16 CCDC_SAMPLE_16PIXELS
17 };
18
19 /* enum for No of lines in Black Clamping */
20 enum ccdc_sample_line {
21 CCDC_SAMPLE_1LINES,
22 CCDC_SAMPLE_2LINES,
23 CCDC_SAMPLE_4LINES,
24 CCDC_SAMPLE_8LINES,
25 CCDC_SAMPLE_16LINES
26 };
27
28 /* enum for Alaw gamma width */
29 enum ccdc_gamma_width {
30 CCDC_GAMMA_BITS_13_4,
31 CCDC_GAMMA_BITS_12_3,
32 CCDC_GAMMA_BITS_11_2,
33 CCDC_GAMMA_BITS_10_1,
34 CCDC_GAMMA_BITS_09_0
35 };
36
37 enum ccdc_colpats {
38 CCDC_RED,
39 CCDC_GREEN_RED,
40 CCDC_GREEN_BLUE,
41 CCDC_BLUE
42 };
43
44 struct ccdc_col_pat {
45 enum ccdc_colpats olop;
46 enum ccdc_colpats olep;
47 enum ccdc_colpats elop;
48 enum ccdc_colpats elep;
49 };
50
51 enum ccdc_datasft {
52 CCDC_DATA_NO_SHIFT,
53 CCDC_DATA_SHIFT_1BIT,
54 CCDC_DATA_SHIFT_2BIT,
55 CCDC_DATA_SHIFT_3BIT,
56 CCDC_DATA_SHIFT_4BIT,
57 CCDC_DATA_SHIFT_5BIT,
58 CCDC_DATA_SHIFT_6BIT
59 };
60
61 enum ccdc_data_size {
62 CCDC_DATA_16BITS,
63 CCDC_DATA_15BITS,
64 CCDC_DATA_14BITS,
65 CCDC_DATA_13BITS,
66 CCDC_DATA_12BITS,
67 CCDC_DATA_11BITS,
68 CCDC_DATA_10BITS,
69 CCDC_DATA_8BITS
70 };
71 enum ccdc_mfilt1 {
72 CCDC_NO_MEDIAN_FILTER1,
73 CCDC_AVERAGE_FILTER1,
74 CCDC_MEDIAN_FILTER1
75 };
76
77 enum ccdc_mfilt2 {
78 CCDC_NO_MEDIAN_FILTER2,
79 CCDC_AVERAGE_FILTER2,
80 CCDC_MEDIAN_FILTER2
81 };
82
83 /* structure for ALaw */
84 struct ccdc_a_law {
85 /* Enable/disable A-Law */
86 unsigned char enable;
87 /* Gamma Width Input */
88 enum ccdc_gamma_width gamma_wd;
89 };
90
91 /* structure for Black Clamping */
92 struct ccdc_black_clamp {
93 /* only if bClampEnable is TRUE */
94 unsigned char b_clamp_enable;
95 /* only if bClampEnable is TRUE */
96 enum ccdc_sample_length sample_pixel;
97 /* only if bClampEnable is TRUE */
98 enum ccdc_sample_line sample_ln;
99 /* only if bClampEnable is TRUE */
100 unsigned short start_pixel;
101 /* only if bClampEnable is FALSE */
102 unsigned short sgain;
103 unsigned short dc_sub;
104 };
105
106 /* structure for Black Level Compensation */
107 struct ccdc_black_compensation {
108 /* Constant value to subtract from Red component */
109 unsigned char r;
110 /* Constant value to subtract from Gr component */
111 unsigned char gr;
112 /* Constant value to subtract from Blue component */
113 unsigned char b;
114 /* Constant value to subtract from Gb component */
115 unsigned char gb;
116 };
117
118 struct ccdc_float {
119 int integer;
120 unsigned int decimal;
121 };
122
123 #define CCDC_CSC_COEFF_TABLE_SIZE 16
124 /* structure for color space converter */
125 struct ccdc_csc {
126 unsigned char enable;
127 /*
128 * S8Q5. Use 2 decimal precision, user values range from -3.00 to 3.99.
129 * example - to use 1.03, set integer part as 1, and decimal part as 3
130 * to use -1.03, set integer part as -1 and decimal part as 3
131 */
132 struct ccdc_float coeff[CCDC_CSC_COEFF_TABLE_SIZE];
133 };
134
135 /* Structures for Vertical Defect Correction*/
136 enum ccdc_vdf_csl {
137 CCDC_VDF_NORMAL,
138 CCDC_VDF_HORZ_INTERPOL_SAT,
139 CCDC_VDF_HORZ_INTERPOL
140 };
141
142 enum ccdc_vdf_cuda {
143 CCDC_VDF_WHOLE_LINE_CORRECT,
144 CCDC_VDF_UPPER_DISABLE
145 };
146
147 enum ccdc_dfc_mwr {
148 CCDC_DFC_MWR_WRITE_COMPLETE,
149 CCDC_DFC_WRITE_REG
150 };
151
152 enum ccdc_dfc_mrd {
153 CCDC_DFC_READ_COMPLETE,
154 CCDC_DFC_READ_REG
155 };
156
157 enum ccdc_dfc_ma_rst {
158 CCDC_DFC_INCR_ADDR,
159 CCDC_DFC_CLR_ADDR
160 };
161
162 enum ccdc_dfc_mclr {
163 CCDC_DFC_CLEAR_COMPLETE,
164 CCDC_DFC_CLEAR
165 };
166
167 struct ccdc_dft_corr_ctl {
168 enum ccdc_vdf_csl vdfcsl;
169 enum ccdc_vdf_cuda vdfcuda;
170 unsigned int vdflsft;
171 };
172
173 struct ccdc_dft_corr_mem_ctl {
174 enum ccdc_dfc_mwr dfcmwr;
175 enum ccdc_dfc_mrd dfcmrd;
176 enum ccdc_dfc_ma_rst dfcmarst;
177 enum ccdc_dfc_mclr dfcmclr;
178 };
179
180 #define CCDC_DFT_TABLE_SIZE 16
181 /*
182 * Main Structure for vertical defect correction. Vertical defect
183 * correction can correct up to 16 defects if defects less than 16
184 * then pad the rest with 0
185 */
186 struct ccdc_vertical_dft {
187 unsigned char ver_dft_en;
188 unsigned char gen_dft_en;
189 unsigned int saturation_ctl;
190 struct ccdc_dft_corr_ctl dft_corr_ctl;
191 struct ccdc_dft_corr_mem_ctl dft_corr_mem_ctl;
192 int table_size;
193 unsigned int dft_corr_horz[CCDC_DFT_TABLE_SIZE];
194 unsigned int dft_corr_vert[CCDC_DFT_TABLE_SIZE];
195 unsigned int dft_corr_sub1[CCDC_DFT_TABLE_SIZE];
196 unsigned int dft_corr_sub2[CCDC_DFT_TABLE_SIZE];
197 unsigned int dft_corr_sub3[CCDC_DFT_TABLE_SIZE];
198 };
199
200 struct ccdc_data_offset {
201 unsigned char horz_offset;
202 unsigned char vert_offset;
203 };
204
205 /*
206 * Structure for CCDC configuration parameters for raw capture mode passed
207 * by application
208 */
209 struct ccdc_config_params_raw {
210 /* data shift to be applied before storing */
211 enum ccdc_datasft datasft;
212 /* data size value from 8 to 16 bits */
213 enum ccdc_data_size data_sz;
214 /* median filter for sdram */
215 enum ccdc_mfilt1 mfilt1;
216 enum ccdc_mfilt2 mfilt2;
217 /* low pass filter enable/disable */
218 unsigned char lpf_enable;
219 /* Threshold of median filter */
220 int med_filt_thres;
221 /*
222 * horz and vertical data offset. Applicable for defect correction
223 * and lsc
224 */
225 struct ccdc_data_offset data_offset;
226 /* Structure for Optional A-Law */
227 struct ccdc_a_law alaw;
228 /* Structure for Optical Black Clamp */
229 struct ccdc_black_clamp blk_clamp;
230 /* Structure for Black Compensation */
231 struct ccdc_black_compensation blk_comp;
232 /* structure for vertical Defect Correction Module Configuration */
233 struct ccdc_vertical_dft vertical_dft;
234 /* structure for color space converter Module Configuration */
235 struct ccdc_csc csc;
236 /* color patters for bayer capture */
237 struct ccdc_col_pat col_pat_field0;
238 struct ccdc_col_pat col_pat_field1;
239 };
240
241 #ifdef __KERNEL__
242 #include <linux/io.h>
243
244 #define CCDC_WIN_PAL {0, 0, 720, 576}
245 #define CCDC_WIN_VGA {0, 0, 640, 480}
246
247 struct ccdc_params_ycbcr {
248 /* pixel format */
249 enum ccdc_pixfmt pix_fmt;
250 /* progressive or interlaced frame */
251 enum ccdc_frmfmt frm_fmt;
252 /* video window */
253 struct v4l2_rect win;
254 /* field id polarity */
255 enum vpfe_pin_pol fid_pol;
256 /* vertical sync polarity */
257 enum vpfe_pin_pol vd_pol;
258 /* horizontal sync polarity */
259 enum vpfe_pin_pol hd_pol;
260 /* enable BT.656 embedded sync mode */
261 int bt656_enable;
262 /* cb:y:cr:y or y:cb:y:cr in memory */
263 enum ccdc_pixorder pix_order;
264 /* interleaved or separated fields */
265 enum ccdc_buftype buf_type;
266 };
267
268 /* Gain applied to Raw Bayer data */
269 struct ccdc_gain {
270 unsigned short r_ye;
271 unsigned short gr_cy;
272 unsigned short gb_g;
273 unsigned short b_mg;
274 };
275
276 /* Structure for CCDC configuration parameters for raw capture mode */
277 struct ccdc_params_raw {
278 /* pixel format */
279 enum ccdc_pixfmt pix_fmt;
280 /* progressive or interlaced frame */
281 enum ccdc_frmfmt frm_fmt;
282 /* video window */
283 struct v4l2_rect win;
284 /* field id polarity */
285 enum vpfe_pin_pol fid_pol;
286 /* vertical sync polarity */
287 enum vpfe_pin_pol vd_pol;
288 /* horizontal sync polarity */
289 enum vpfe_pin_pol hd_pol;
290 /* interleaved or separated fields */
291 enum ccdc_buftype buf_type;
292 /* Gain values */
293 struct ccdc_gain gain;
294 /* offset */
295 unsigned int ccdc_offset;
296 /* horizontal flip enable */
297 unsigned char horz_flip_enable;
298 /*
299 * enable to store the image in inverse order in memory
300 * (bottom to top)
301 */
302 unsigned char image_invert_enable;
303 /* Configurable part of raw data */
304 struct ccdc_config_params_raw config_params;
305 };
306
307 #endif
308 #endif /* DM355_CCDC_H */