mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 3 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version [author] [kishon] [vijay] [abraham] [i] [kishon]@[ti] [com] this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version [author] [graeme] [gregory] [gg]@[slimlogic] [co] [uk] [author] [kishon] [vijay] [abraham] [i] [kishon]@[ti] [com] [based] [on] [twl6030]_[usb] [c] [author] [hema] [hk] [hemahk]@[ti] [com] this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 1105 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070033.202006027@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
308 lines
7.1 KiB
C
308 lines
7.1 KiB
C
/* 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 */
|