| 
									
										
										
										
											2010-02-21 15:46:01 -03:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (C) 2008-2009 Texas Instruments Inc | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software | 
					
						
							|  |  |  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*************************************************************************
 | 
					
						
							| 
									
										
										
										
											2011-03-30 22:57:33 -03:00
										 |  |  | ** Color Space Conversion (CSC) | 
					
						
							| 
									
										
										
										
											2010-02-21 15:46:01 -03:00
										 |  |  | *************************************************************************/ | 
					
						
							|  |  |  | #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
 |