root/include/media/davinci/dm355_ccdc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */

/* [<][>][^][v][top][bottom][index][help] */