linux/include/media/davinci/dm355_ccdc.h
<<
>>
Prefs
   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 */
  24enum 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 */
  33enum 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 */
  42enum 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
  50enum ccdc_colpats {
  51        CCDC_RED,
  52        CCDC_GREEN_RED,
  53        CCDC_GREEN_BLUE,
  54        CCDC_BLUE
  55};
  56
  57struct 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
  64enum 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
  74enum 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};
  84enum ccdc_mfilt1 {
  85        CCDC_NO_MEDIAN_FILTER1,
  86        CCDC_AVERAGE_FILTER1,
  87        CCDC_MEDIAN_FILTER1
  88};
  89
  90enum ccdc_mfilt2 {
  91        CCDC_NO_MEDIAN_FILTER2,
  92        CCDC_AVERAGE_FILTER2,
  93        CCDC_MEDIAN_FILTER2
  94};
  95
  96/* structure for ALaw */
  97struct 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 */
 105struct 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 */
 120struct 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
 131struct 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 */
 138struct 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*/
 149enum ccdc_vdf_csl {
 150        CCDC_VDF_NORMAL,
 151        CCDC_VDF_HORZ_INTERPOL_SAT,
 152        CCDC_VDF_HORZ_INTERPOL
 153};
 154
 155enum ccdc_vdf_cuda {
 156        CCDC_VDF_WHOLE_LINE_CORRECT,
 157        CCDC_VDF_UPPER_DISABLE
 158};
 159
 160enum ccdc_dfc_mwr {
 161        CCDC_DFC_MWR_WRITE_COMPLETE,
 162        CCDC_DFC_WRITE_REG
 163};
 164
 165enum ccdc_dfc_mrd {
 166        CCDC_DFC_READ_COMPLETE,
 167        CCDC_DFC_READ_REG
 168};
 169
 170enum ccdc_dfc_ma_rst {
 171        CCDC_DFC_INCR_ADDR,
 172        CCDC_DFC_CLR_ADDR
 173};
 174
 175enum ccdc_dfc_mclr {
 176        CCDC_DFC_CLEAR_COMPLETE,
 177        CCDC_DFC_CLEAR
 178};
 179
 180struct ccdc_dft_corr_ctl {
 181        enum ccdc_vdf_csl vdfcsl;
 182        enum ccdc_vdf_cuda vdfcuda;
 183        unsigned int vdflsft;
 184};
 185
 186struct 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 */
 199struct 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
 213struct 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 */
 222struct 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
 260struct 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 */
 282struct 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 */
 290struct 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