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