mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
518 lines
14 KiB
518 lines
14 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* Copyright (C) 2008-2009 Texas Instruments Inc |
|
* |
|
* isif header file |
|
*/ |
|
#ifndef _ISIF_H |
|
#define _ISIF_H |
|
|
|
#include <media/davinci/ccdc_types.h> |
|
#include <media/davinci/vpfe_types.h> |
|
|
|
/* isif float type S8Q8/U8Q8 */ |
|
struct isif_float_8 { |
|
/* 8 bit integer part */ |
|
__u8 integer; |
|
/* 8 bit decimal part */ |
|
__u8 decimal; |
|
}; |
|
|
|
/* isif float type U16Q16/S16Q16 */ |
|
struct isif_float_16 { |
|
/* 16 bit integer part */ |
|
__u16 integer; |
|
/* 16 bit decimal part */ |
|
__u16 decimal; |
|
}; |
|
|
|
/************************************************************************ |
|
* Vertical Defect Correction parameters |
|
***********************************************************************/ |
|
/* Defect Correction (DFC) table entry */ |
|
struct isif_vdfc_entry { |
|
/* vertical position of defect */ |
|
__u16 pos_vert; |
|
/* horizontal position of defect */ |
|
__u16 pos_horz; |
|
/* |
|
* Defect level of Vertical line defect position. This is subtracted |
|
* from the data at the defect position |
|
*/ |
|
__u8 level_at_pos; |
|
/* |
|
* Defect level of the pixels upper than the vertical line defect. |
|
* This is subtracted from the data |
|
*/ |
|
__u8 level_up_pixels; |
|
/* |
|
* Defect level of the pixels lower than the vertical line defect. |
|
* This is subtracted from the data |
|
*/ |
|
__u8 level_low_pixels; |
|
}; |
|
|
|
#define ISIF_VDFC_TABLE_SIZE 8 |
|
struct isif_dfc { |
|
/* enable vertical defect correction */ |
|
__u8 en; |
|
/* Defect level subtraction. Just fed through if saturating */ |
|
#define ISIF_VDFC_NORMAL 0 |
|
/* |
|
* Defect level subtraction. Horizontal interpolation ((i-2)+(i+2))/2 |
|
* if data saturating |
|
*/ |
|
#define ISIF_VDFC_HORZ_INTERPOL_IF_SAT 1 |
|
/* Horizontal interpolation (((i-2)+(i+2))/2) */ |
|
#define ISIF_VDFC_HORZ_INTERPOL 2 |
|
/* one of the vertical defect correction modes above */ |
|
__u8 corr_mode; |
|
/* 0 - whole line corrected, 1 - not pixels upper than the defect */ |
|
__u8 corr_whole_line; |
|
#define ISIF_VDFC_NO_SHIFT 0 |
|
#define ISIF_VDFC_SHIFT_1 1 |
|
#define ISIF_VDFC_SHIFT_2 2 |
|
#define ISIF_VDFC_SHIFT_3 3 |
|
#define ISIF_VDFC_SHIFT_4 4 |
|
/* |
|
* defect level shift value. level_at_pos, level_upper_pos, |
|
* and level_lower_pos can be shifted up by this value. Choose |
|
* one of the values above |
|
*/ |
|
__u8 def_level_shift; |
|
/* defect saturation level */ |
|
__u16 def_sat_level; |
|
/* number of vertical defects. Max is ISIF_VDFC_TABLE_SIZE */ |
|
__u16 num_vdefects; |
|
/* VDFC table ptr */ |
|
struct isif_vdfc_entry table[ISIF_VDFC_TABLE_SIZE]; |
|
}; |
|
|
|
struct isif_horz_bclamp { |
|
|
|
/* Horizontal clamp disabled. Only vertical clamp value is subtracted */ |
|
#define ISIF_HORZ_BC_DISABLE 0 |
|
/* |
|
* Horizontal clamp value is calculated and subtracted from image data |
|
* along with vertical clamp value |
|
*/ |
|
#define ISIF_HORZ_BC_CLAMP_CALC_ENABLED 1 |
|
/* |
|
* Horizontal clamp value calculated from previous image is subtracted |
|
* from image data along with vertical clamp value. |
|
*/ |
|
#define ISIF_HORZ_BC_CLAMP_NOT_UPDATED 2 |
|
/* horizontal clamp mode. One of the values above */ |
|
__u8 mode; |
|
/* |
|
* pixel value limit enable. |
|
* 0 - limit disabled |
|
* 1 - pixel value limited to 1023 |
|
*/ |
|
__u8 clamp_pix_limit; |
|
/* Select Most left window for bc calculation */ |
|
#define ISIF_SEL_MOST_LEFT_WIN 0 |
|
/* Select Most right window for bc calculation */ |
|
#define ISIF_SEL_MOST_RIGHT_WIN 1 |
|
/* Select most left or right window for clamp val calculation */ |
|
__u8 base_win_sel_calc; |
|
/* Window count per color for calculation. range 1-32 */ |
|
__u8 win_count_calc; |
|
/* Window start position - horizontal for calculation. 0 - 8191 */ |
|
__u16 win_start_h_calc; |
|
/* Window start position - vertical for calculation 0 - 8191 */ |
|
__u16 win_start_v_calc; |
|
#define ISIF_HORZ_BC_SZ_H_2PIXELS 0 |
|
#define ISIF_HORZ_BC_SZ_H_4PIXELS 1 |
|
#define ISIF_HORZ_BC_SZ_H_8PIXELS 2 |
|
#define ISIF_HORZ_BC_SZ_H_16PIXELS 3 |
|
/* Width of the sample window in pixels for calculation */ |
|
__u8 win_h_sz_calc; |
|
#define ISIF_HORZ_BC_SZ_V_32PIXELS 0 |
|
#define ISIF_HORZ_BC_SZ_V_64PIXELS 1 |
|
#define ISIF_HORZ_BC_SZ_V_128PIXELS 2 |
|
#define ISIF_HORZ_BC_SZ_V_256PIXELS 3 |
|
/* Height of the sample window in pixels for calculation */ |
|
__u8 win_v_sz_calc; |
|
}; |
|
|
|
/************************************************************************ |
|
* Black Clamp parameters |
|
***********************************************************************/ |
|
struct isif_vert_bclamp { |
|
/* Reset value used is the clamp value calculated */ |
|
#define ISIF_VERT_BC_USE_HORZ_CLAMP_VAL 0 |
|
/* Reset value used is reset_clamp_val configured */ |
|
#define ISIF_VERT_BC_USE_CONFIG_CLAMP_VAL 1 |
|
/* No update, previous image value is used */ |
|
#define ISIF_VERT_BC_NO_UPDATE 2 |
|
/* |
|
* Reset value selector for vertical clamp calculation. Use one of |
|
* the above values |
|
*/ |
|
__u8 reset_val_sel; |
|
/* U8Q8. Line average coefficient used in vertical clamp calculation */ |
|
__u8 line_ave_coef; |
|
/* Height of the optical black region for calculation */ |
|
__u16 ob_v_sz_calc; |
|
/* Optical black region start position - horizontal. 0 - 8191 */ |
|
__u16 ob_start_h; |
|
/* Optical black region start position - vertical 0 - 8191 */ |
|
__u16 ob_start_v; |
|
}; |
|
|
|
struct isif_black_clamp { |
|
/* |
|
* This offset value is added irrespective of the clamp enable status. |
|
* S13 |
|
*/ |
|
__u16 dc_offset; |
|
/* |
|
* Enable black/digital clamp value to be subtracted from the image data |
|
*/ |
|
__u8 en; |
|
/* |
|
* black clamp mode. same/separate clamp for 4 colors |
|
* 0 - disable - same clamp value for all colors |
|
* 1 - clamp value calculated separately for all colors |
|
*/ |
|
__u8 bc_mode_color; |
|
/* Vrtical start position for bc subtraction */ |
|
__u16 vert_start_sub; |
|
/* Black clamp for horizontal direction */ |
|
struct isif_horz_bclamp horz; |
|
/* Black clamp for vertical direction */ |
|
struct isif_vert_bclamp vert; |
|
}; |
|
|
|
/************************************************************************* |
|
** Color Space Conversion (CSC) |
|
*************************************************************************/ |
|
#define ISIF_CSC_NUM_COEFF 16 |
|
struct isif_color_space_conv { |
|
/* Enable color space conversion */ |
|
__u8 en; |
|
/* |
|
* csc coeffient table. S8Q5, M00 at index 0, M01 at index 1, and |
|
* so forth |
|
*/ |
|
struct isif_float_8 coeff[ISIF_CSC_NUM_COEFF]; |
|
}; |
|
|
|
|
|
/************************************************************************* |
|
** Black Compensation parameters |
|
*************************************************************************/ |
|
struct isif_black_comp { |
|
/* Comp for Red */ |
|
__s8 r_comp; |
|
/* Comp for Gr */ |
|
__s8 gr_comp; |
|
/* Comp for Blue */ |
|
__s8 b_comp; |
|
/* Comp for Gb */ |
|
__s8 gb_comp; |
|
}; |
|
|
|
/************************************************************************* |
|
** Gain parameters |
|
*************************************************************************/ |
|
struct isif_gain { |
|
/* Gain for Red or ye */ |
|
struct isif_float_16 r_ye; |
|
/* Gain for Gr or cy */ |
|
struct isif_float_16 gr_cy; |
|
/* Gain for Gb or g */ |
|
struct isif_float_16 gb_g; |
|
/* Gain for Blue or mg */ |
|
struct isif_float_16 b_mg; |
|
}; |
|
|
|
#define ISIF_LINEAR_TAB_SIZE 192 |
|
/************************************************************************* |
|
** Linearization parameters |
|
*************************************************************************/ |
|
struct isif_linearize { |
|
/* Enable or Disable linearization of data */ |
|
__u8 en; |
|
/* Shift value applied */ |
|
__u8 corr_shft; |
|
/* scale factor applied U11Q10 */ |
|
struct isif_float_16 scale_fact; |
|
/* Size of the linear table */ |
|
__u16 table[ISIF_LINEAR_TAB_SIZE]; |
|
}; |
|
|
|
/* Color patterns */ |
|
#define ISIF_RED 0 |
|
#define ISIF_GREEN_RED 1 |
|
#define ISIF_GREEN_BLUE 2 |
|
#define ISIF_BLUE 3 |
|
struct isif_col_pat { |
|
__u8 olop; |
|
__u8 olep; |
|
__u8 elop; |
|
__u8 elep; |
|
}; |
|
|
|
/************************************************************************* |
|
** Data formatter parameters |
|
*************************************************************************/ |
|
struct isif_fmtplen { |
|
/* |
|
* number of program entries for SET0, range 1 - 16 |
|
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is |
|
* ISIF_COMBINE |
|
*/ |
|
__u16 plen0; |
|
/* |
|
* number of program entries for SET1, range 1 - 16 |
|
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is |
|
* ISIF_COMBINE |
|
*/ |
|
__u16 plen1; |
|
/** |
|
* number of program entries for SET2, range 1 - 16 |
|
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is |
|
* ISIF_COMBINE |
|
*/ |
|
__u16 plen2; |
|
/** |
|
* number of program entries for SET3, range 1 - 16 |
|
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is |
|
* ISIF_COMBINE |
|
*/ |
|
__u16 plen3; |
|
}; |
|
|
|
struct isif_fmt_cfg { |
|
#define ISIF_SPLIT 0 |
|
#define ISIF_COMBINE 1 |
|
/* Split or combine or line alternate */ |
|
__u8 fmtmode; |
|
/* enable or disable line alternating mode */ |
|
__u8 ln_alter_en; |
|
#define ISIF_1LINE 0 |
|
#define ISIF_2LINES 1 |
|
#define ISIF_3LINES 2 |
|
#define ISIF_4LINES 3 |
|
/* Split/combine line number */ |
|
__u8 lnum; |
|
/* Address increment Range 1 - 16 */ |
|
__u8 addrinc; |
|
}; |
|
|
|
struct isif_fmt_addr_ptr { |
|
/* Initial address */ |
|
__u32 init_addr; |
|
/* output line number */ |
|
#define ISIF_1STLINE 0 |
|
#define ISIF_2NDLINE 1 |
|
#define ISIF_3RDLINE 2 |
|
#define ISIF_4THLINE 3 |
|
__u8 out_line; |
|
}; |
|
|
|
struct isif_fmtpgm_ap { |
|
/* program address pointer */ |
|
__u8 pgm_aptr; |
|
/* program address increment or decrement */ |
|
__u8 pgmupdt; |
|
}; |
|
|
|
struct isif_data_formatter { |
|
/* Enable/Disable data formatter */ |
|
__u8 en; |
|
/* data formatter configuration */ |
|
struct isif_fmt_cfg cfg; |
|
/* Formatter program entries length */ |
|
struct isif_fmtplen plen; |
|
/* first pixel in a line fed to formatter */ |
|
__u16 fmtrlen; |
|
/* HD interval for output line. Only valid when split line */ |
|
__u16 fmthcnt; |
|
/* formatter address pointers */ |
|
struct isif_fmt_addr_ptr fmtaddr_ptr[16]; |
|
/* program enable/disable */ |
|
__u8 pgm_en[32]; |
|
/* program address pointers */ |
|
struct isif_fmtpgm_ap fmtpgm_ap[32]; |
|
}; |
|
|
|
struct isif_df_csc { |
|
/* Color Space Conversion confguration, 0 - csc, 1 - df */ |
|
__u8 df_or_csc; |
|
/* csc configuration valid if df_or_csc is 0 */ |
|
struct isif_color_space_conv csc; |
|
/* data formatter configuration valid if df_or_csc is 1 */ |
|
struct isif_data_formatter df; |
|
/* start pixel in a line at the input */ |
|
__u32 start_pix; |
|
/* number of pixels in input line */ |
|
__u32 num_pixels; |
|
/* start line at the input */ |
|
__u32 start_line; |
|
/* number of lines at the input */ |
|
__u32 num_lines; |
|
}; |
|
|
|
struct isif_gain_offsets_adj { |
|
/* Gain adjustment per color */ |
|
struct isif_gain gain; |
|
/* Offset adjustment */ |
|
__u16 offset; |
|
/* Enable or Disable Gain adjustment for SDRAM data */ |
|
__u8 gain_sdram_en; |
|
/* Enable or Disable Gain adjustment for IPIPE data */ |
|
__u8 gain_ipipe_en; |
|
/* Enable or Disable Gain adjustment for H3A data */ |
|
__u8 gain_h3a_en; |
|
/* Enable or Disable Gain adjustment for SDRAM data */ |
|
__u8 offset_sdram_en; |
|
/* Enable or Disable Gain adjustment for IPIPE data */ |
|
__u8 offset_ipipe_en; |
|
/* Enable or Disable Gain adjustment for H3A data */ |
|
__u8 offset_h3a_en; |
|
}; |
|
|
|
struct isif_cul { |
|
/* Horizontal Cull pattern for odd lines */ |
|
__u8 hcpat_odd; |
|
/* Horizontal Cull pattern for even lines */ |
|
__u8 hcpat_even; |
|
/* Vertical Cull pattern */ |
|
__u8 vcpat; |
|
/* Enable or disable lpf. Apply when cull is enabled */ |
|
__u8 en_lpf; |
|
}; |
|
|
|
struct isif_compress { |
|
#define ISIF_ALAW 0 |
|
#define ISIF_DPCM 1 |
|
#define ISIF_NO_COMPRESSION 2 |
|
/* Compression Algorithm used */ |
|
__u8 alg; |
|
/* Choose Predictor1 for DPCM compression */ |
|
#define ISIF_DPCM_PRED1 0 |
|
/* Choose Predictor2 for DPCM compression */ |
|
#define ISIF_DPCM_PRED2 1 |
|
/* Predictor for DPCM compression */ |
|
__u8 pred; |
|
}; |
|
|
|
/* all the stuff in this struct will be provided by userland */ |
|
struct isif_config_params_raw { |
|
/* Linearization parameters for image sensor data input */ |
|
struct isif_linearize linearize; |
|
/* Data formatter or CSC */ |
|
struct isif_df_csc df_csc; |
|
/* Defect Pixel Correction (DFC) confguration */ |
|
struct isif_dfc dfc; |
|
/* Black/Digital Clamp configuration */ |
|
struct isif_black_clamp bclamp; |
|
/* Gain, offset adjustments */ |
|
struct isif_gain_offsets_adj gain_offset; |
|
/* Culling */ |
|
struct isif_cul culling; |
|
/* A-Law and DPCM compression options */ |
|
struct isif_compress compress; |
|
/* horizontal offset for Gain/LSC/DFC */ |
|
__u16 horz_offset; |
|
/* vertical offset for Gain/LSC/DFC */ |
|
__u16 vert_offset; |
|
/* color pattern for field 0 */ |
|
struct isif_col_pat col_pat_field0; |
|
/* color pattern for field 1 */ |
|
struct isif_col_pat col_pat_field1; |
|
#define ISIF_NO_SHIFT 0 |
|
#define ISIF_1BIT_SHIFT 1 |
|
#define ISIF_2BIT_SHIFT 2 |
|
#define ISIF_3BIT_SHIFT 3 |
|
#define ISIF_4BIT_SHIFT 4 |
|
#define ISIF_5BIT_SHIFT 5 |
|
#define ISIF_6BIT_SHIFT 6 |
|
/* Data shift applied before storing to SDRAM */ |
|
__u8 data_shift; |
|
/* enable input test pattern generation */ |
|
__u8 test_pat_gen; |
|
}; |
|
|
|
#ifdef __KERNEL__ |
|
struct isif_ycbcr_config { |
|
/* isif pixel format */ |
|
enum ccdc_pixfmt pix_fmt; |
|
/* isif frame format */ |
|
enum ccdc_frmfmt frm_fmt; |
|
/* ISIF crop window */ |
|
struct v4l2_rect win; |
|
/* field polarity */ |
|
enum vpfe_pin_pol fid_pol; |
|
/* interface VD polarity */ |
|
enum vpfe_pin_pol vd_pol; |
|
/* interface HD polarity */ |
|
enum vpfe_pin_pol hd_pol; |
|
/* isif pix order. Only used for ycbcr capture */ |
|
enum ccdc_pixorder pix_order; |
|
/* isif buffer type. Only used for ycbcr capture */ |
|
enum ccdc_buftype buf_type; |
|
}; |
|
|
|
/* MSB of image data connected to sensor port */ |
|
enum isif_data_msb { |
|
ISIF_BIT_MSB_15, |
|
ISIF_BIT_MSB_14, |
|
ISIF_BIT_MSB_13, |
|
ISIF_BIT_MSB_12, |
|
ISIF_BIT_MSB_11, |
|
ISIF_BIT_MSB_10, |
|
ISIF_BIT_MSB_9, |
|
ISIF_BIT_MSB_8, |
|
ISIF_BIT_MSB_7 |
|
}; |
|
|
|
enum isif_cfa_pattern { |
|
ISIF_CFA_PAT_MOSAIC, |
|
ISIF_CFA_PAT_STRIPE |
|
}; |
|
|
|
struct isif_params_raw { |
|
/* isif pixel format */ |
|
enum ccdc_pixfmt pix_fmt; |
|
/* isif frame format */ |
|
enum ccdc_frmfmt frm_fmt; |
|
/* video window */ |
|
struct v4l2_rect win; |
|
/* field polarity */ |
|
enum vpfe_pin_pol fid_pol; |
|
/* interface VD polarity */ |
|
enum vpfe_pin_pol vd_pol; |
|
/* interface HD polarity */ |
|
enum vpfe_pin_pol hd_pol; |
|
/* buffer type. Applicable for interlaced mode */ |
|
enum ccdc_buftype buf_type; |
|
/* Gain values */ |
|
struct isif_gain gain; |
|
/* cfa pattern */ |
|
enum isif_cfa_pattern cfa_pat; |
|
/* Data MSB position */ |
|
enum isif_data_msb data_msb; |
|
/* Enable horizontal flip */ |
|
unsigned char horz_flip_en; |
|
/* Enable image invert vertically */ |
|
unsigned char image_invert_en; |
|
|
|
/* all the userland defined stuff*/ |
|
struct isif_config_params_raw config_params; |
|
}; |
|
|
|
enum isif_data_pack { |
|
ISIF_PACK_16BIT, |
|
ISIF_PACK_12BIT, |
|
ISIF_PACK_8BIT |
|
}; |
|
|
|
#define ISIF_WIN_NTSC {0, 0, 720, 480} |
|
#define ISIF_WIN_VGA {0, 0, 640, 480} |
|
|
|
#endif |
|
#endif
|
|
|