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