cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dm355_ccdc.h (7291B)


      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 */
     11enum 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 */
     20enum 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 */
     29enum 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
     37enum ccdc_colpats {
     38	CCDC_RED,
     39	CCDC_GREEN_RED,
     40	CCDC_GREEN_BLUE,
     41	CCDC_BLUE
     42};
     43
     44struct 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
     51enum 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
     61enum 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};
     71enum ccdc_mfilt1 {
     72	CCDC_NO_MEDIAN_FILTER1,
     73	CCDC_AVERAGE_FILTER1,
     74	CCDC_MEDIAN_FILTER1
     75};
     76
     77enum ccdc_mfilt2 {
     78	CCDC_NO_MEDIAN_FILTER2,
     79	CCDC_AVERAGE_FILTER2,
     80	CCDC_MEDIAN_FILTER2
     81};
     82
     83/* structure for ALaw */
     84struct 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 */
     92struct 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 */
    107struct 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
    118struct 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 */
    125struct 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*/
    136enum ccdc_vdf_csl {
    137	CCDC_VDF_NORMAL,
    138	CCDC_VDF_HORZ_INTERPOL_SAT,
    139	CCDC_VDF_HORZ_INTERPOL
    140};
    141
    142enum ccdc_vdf_cuda {
    143	CCDC_VDF_WHOLE_LINE_CORRECT,
    144	CCDC_VDF_UPPER_DISABLE
    145};
    146
    147enum ccdc_dfc_mwr {
    148	CCDC_DFC_MWR_WRITE_COMPLETE,
    149	CCDC_DFC_WRITE_REG
    150};
    151
    152enum ccdc_dfc_mrd {
    153	CCDC_DFC_READ_COMPLETE,
    154	CCDC_DFC_READ_REG
    155};
    156
    157enum ccdc_dfc_ma_rst {
    158	CCDC_DFC_INCR_ADDR,
    159	CCDC_DFC_CLR_ADDR
    160};
    161
    162enum ccdc_dfc_mclr {
    163	CCDC_DFC_CLEAR_COMPLETE,
    164	CCDC_DFC_CLEAR
    165};
    166
    167struct ccdc_dft_corr_ctl {
    168	enum ccdc_vdf_csl vdfcsl;
    169	enum ccdc_vdf_cuda vdfcuda;
    170	unsigned int vdflsft;
    171};
    172
    173struct 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 */
    186struct 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
    200struct 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 */
    209struct 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
    247struct 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 */
    269struct 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 */
    277struct 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 */