linux-headers (unknown)

(root)/
include/
linux/
omap3isp.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  /*
       3   * omap3isp.h
       4   *
       5   * TI OMAP3 ISP - User-space API
       6   *
       7   * Copyright (C) 2010 Nokia Corporation
       8   * Copyright (C) 2009 Texas Instruments, Inc.
       9   *
      10   * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      11   *	     Sakari Ailus <sakari.ailus@iki.fi>
      12   *
      13   * This program is free software; you can redistribute it and/or modify
      14   * it under the terms of the GNU General Public License version 2 as
      15   * published by the Free Software Foundation.
      16   *
      17   * This program is distributed in the hope that it will be useful, but
      18   * WITHOUT ANY WARRANTY; without even the implied warranty of
      19   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      20   * General Public License for more details.
      21   *
      22   * You should have received a copy of the GNU General Public License
      23   * along with this program; if not, write to the Free Software
      24   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
      25   * 02110-1301 USA
      26   */
      27  
      28  #ifndef OMAP3_ISP_USER_H
      29  #define OMAP3_ISP_USER_H
      30  
      31  #include <linux/types.h>
      32  #include <linux/videodev2.h>
      33  
      34  /*
      35   * Private IOCTLs
      36   *
      37   * VIDIOC_OMAP3ISP_CCDC_CFG: Set CCDC configuration
      38   * VIDIOC_OMAP3ISP_PRV_CFG: Set preview engine configuration
      39   * VIDIOC_OMAP3ISP_AEWB_CFG: Set AEWB module configuration
      40   * VIDIOC_OMAP3ISP_HIST_CFG: Set histogram module configuration
      41   * VIDIOC_OMAP3ISP_AF_CFG: Set auto-focus module configuration
      42   * VIDIOC_OMAP3ISP_STAT_REQ: Read statistics (AEWB/AF/histogram) data
      43   * VIDIOC_OMAP3ISP_STAT_EN: Enable/disable a statistics module
      44   */
      45  
      46  #define VIDIOC_OMAP3ISP_CCDC_CFG \
      47  	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct omap3isp_ccdc_update_config)
      48  #define VIDIOC_OMAP3ISP_PRV_CFG \
      49  	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct omap3isp_prev_update_config)
      50  #define VIDIOC_OMAP3ISP_AEWB_CFG \
      51  	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct omap3isp_h3a_aewb_config)
      52  #define VIDIOC_OMAP3ISP_HIST_CFG \
      53  	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config)
      54  #define VIDIOC_OMAP3ISP_AF_CFG \
      55  	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
      56  #define VIDIOC_OMAP3ISP_STAT_REQ \
      57  	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
      58  #define VIDIOC_OMAP3ISP_STAT_REQ_TIME32 \
      59  	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data_time32)
      60  #define VIDIOC_OMAP3ISP_STAT_EN \
      61  	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
      62  
      63  /*
      64   * Events
      65   *
      66   * V4L2_EVENT_OMAP3ISP_AEWB: AEWB statistics data ready
      67   * V4L2_EVENT_OMAP3ISP_AF: AF statistics data ready
      68   * V4L2_EVENT_OMAP3ISP_HIST: Histogram statistics data ready
      69   */
      70  
      71  #define V4L2_EVENT_OMAP3ISP_CLASS	(V4L2_EVENT_PRIVATE_START | 0x100)
      72  #define V4L2_EVENT_OMAP3ISP_AEWB	(V4L2_EVENT_OMAP3ISP_CLASS | 0x1)
      73  #define V4L2_EVENT_OMAP3ISP_AF		(V4L2_EVENT_OMAP3ISP_CLASS | 0x2)
      74  #define V4L2_EVENT_OMAP3ISP_HIST	(V4L2_EVENT_OMAP3ISP_CLASS | 0x3)
      75  
      76  struct omap3isp_stat_event_status {
      77  	__u32 frame_number;
      78  	__u16 config_counter;
      79  	__u8 buf_err;
      80  };
      81  
      82  /* AE/AWB related structures and flags*/
      83  
      84  /* H3A Range Constants */
      85  #define OMAP3ISP_AEWB_MAX_SATURATION_LIM	1023
      86  #define OMAP3ISP_AEWB_MIN_WIN_H			2
      87  #define OMAP3ISP_AEWB_MAX_WIN_H			256
      88  #define OMAP3ISP_AEWB_MIN_WIN_W			6
      89  #define OMAP3ISP_AEWB_MAX_WIN_W			256
      90  #define OMAP3ISP_AEWB_MIN_WINVC			1
      91  #define OMAP3ISP_AEWB_MIN_WINHC			1
      92  #define OMAP3ISP_AEWB_MAX_WINVC			128
      93  #define OMAP3ISP_AEWB_MAX_WINHC			36
      94  #define OMAP3ISP_AEWB_MAX_WINSTART		4095
      95  #define OMAP3ISP_AEWB_MIN_SUB_INC		2
      96  #define OMAP3ISP_AEWB_MAX_SUB_INC		32
      97  #define OMAP3ISP_AEWB_MAX_BUF_SIZE		83600
      98  
      99  #define OMAP3ISP_AF_IIRSH_MIN			0
     100  #define OMAP3ISP_AF_IIRSH_MAX			4095
     101  #define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN	1
     102  #define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX	36
     103  #define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN	1
     104  #define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX	128
     105  #define OMAP3ISP_AF_PAXEL_INCREMENT_MIN		2
     106  #define OMAP3ISP_AF_PAXEL_INCREMENT_MAX		32
     107  #define OMAP3ISP_AF_PAXEL_HEIGHT_MIN		2
     108  #define OMAP3ISP_AF_PAXEL_HEIGHT_MAX		256
     109  #define OMAP3ISP_AF_PAXEL_WIDTH_MIN		16
     110  #define OMAP3ISP_AF_PAXEL_WIDTH_MAX		256
     111  #define OMAP3ISP_AF_PAXEL_HZSTART_MIN		1
     112  #define OMAP3ISP_AF_PAXEL_HZSTART_MAX		4095
     113  #define OMAP3ISP_AF_PAXEL_VTSTART_MIN		0
     114  #define OMAP3ISP_AF_PAXEL_VTSTART_MAX		4095
     115  #define OMAP3ISP_AF_THRESHOLD_MAX		255
     116  #define OMAP3ISP_AF_COEF_MAX			4095
     117  #define OMAP3ISP_AF_PAXEL_SIZE			48
     118  #define OMAP3ISP_AF_MAX_BUF_SIZE		221184
     119  
     120  /**
     121   * struct omap3isp_h3a_aewb_config - AE AWB configuration reset values
     122   * saturation_limit: Saturation limit.
     123   * @win_height: Window Height. Range 2 - 256, even values only.
     124   * @win_width: Window Width. Range 6 - 256, even values only.
     125   * @ver_win_count: Vertical Window Count. Range 1 - 128.
     126   * @hor_win_count: Horizontal Window Count. Range 1 - 36.
     127   * @ver_win_start: Vertical Window Start. Range 0 - 4095.
     128   * @hor_win_start: Horizontal Window Start. Range 0 - 4095.
     129   * @blk_ver_win_start: Black Vertical Windows Start. Range 0 - 4095.
     130   * @blk_win_height: Black Window Height. Range 2 - 256, even values only.
     131   * @subsample_ver_inc: Subsample Vertical points increment Range 2 - 32, even
     132   *                     values only.
     133   * @subsample_hor_inc: Subsample Horizontal points increment Range 2 - 32, even
     134   *                     values only.
     135   * @alaw_enable: AEW ALAW EN flag.
     136   */
     137  struct omap3isp_h3a_aewb_config {
     138  	/*
     139  	 * Common fields.
     140  	 * They should be the first ones and must be in the same order as in
     141  	 * ispstat_generic_config struct.
     142  	 */
     143  	__u32 buf_size;
     144  	__u16 config_counter;
     145  
     146  	/* Private fields */
     147  	__u16 saturation_limit;
     148  	__u16 win_height;
     149  	__u16 win_width;
     150  	__u16 ver_win_count;
     151  	__u16 hor_win_count;
     152  	__u16 ver_win_start;
     153  	__u16 hor_win_start;
     154  	__u16 blk_ver_win_start;
     155  	__u16 blk_win_height;
     156  	__u16 subsample_ver_inc;
     157  	__u16 subsample_hor_inc;
     158  	__u8 alaw_enable;
     159  };
     160  
     161  /**
     162   * struct omap3isp_stat_data - Statistic data sent to or received from user
     163   * @ts: Timestamp of returned framestats.
     164   * @buf: Pointer to pass to user.
     165   * @buf_size: Size of buffer.
     166   * @frame_number: Frame number of requested stats.
     167   * @cur_frame: Current frame number being processed.
     168   * @config_counter: Number of the configuration associated with the data.
     169   */
     170  struct omap3isp_stat_data {
     171  	struct timeval ts;
     172  	void *buf;
     173  	__struct_group(/* no tag */, frame, /* no attrs */,
     174  		__u32 buf_size;
     175  		__u16 frame_number;
     176  		__u16 cur_frame;
     177  		__u16 config_counter;
     178  	);
     179  };
     180  
     181  
     182  /* Histogram related structs */
     183  
     184  /* Flags for number of bins */
     185  #define OMAP3ISP_HIST_BINS_32		0
     186  #define OMAP3ISP_HIST_BINS_64		1
     187  #define OMAP3ISP_HIST_BINS_128		2
     188  #define OMAP3ISP_HIST_BINS_256		3
     189  
     190  /* Number of bins * 4 colors * 4-bytes word */
     191  #define OMAP3ISP_HIST_MEM_SIZE_BINS(n)	((1 << ((n)+5))*4*4)
     192  
     193  #define OMAP3ISP_HIST_MEM_SIZE		1024
     194  #define OMAP3ISP_HIST_MIN_REGIONS	1
     195  #define OMAP3ISP_HIST_MAX_REGIONS	4
     196  #define OMAP3ISP_HIST_MAX_WB_GAIN	255
     197  #define OMAP3ISP_HIST_MIN_WB_GAIN	0
     198  #define OMAP3ISP_HIST_MAX_BIT_WIDTH	14
     199  #define OMAP3ISP_HIST_MIN_BIT_WIDTH	8
     200  #define OMAP3ISP_HIST_MAX_WG		4
     201  #define OMAP3ISP_HIST_MAX_BUF_SIZE	4096
     202  
     203  /* Source */
     204  #define OMAP3ISP_HIST_SOURCE_CCDC	0
     205  #define OMAP3ISP_HIST_SOURCE_MEM	1
     206  
     207  /* CFA pattern */
     208  #define OMAP3ISP_HIST_CFA_BAYER		0
     209  #define OMAP3ISP_HIST_CFA_FOVEONX3	1
     210  
     211  struct omap3isp_hist_region {
     212  	__u16 h_start;
     213  	__u16 h_end;
     214  	__u16 v_start;
     215  	__u16 v_end;
     216  };
     217  
     218  struct omap3isp_hist_config {
     219  	/*
     220  	 * Common fields.
     221  	 * They should be the first ones and must be in the same order as in
     222  	 * ispstat_generic_config struct.
     223  	 */
     224  	__u32 buf_size;
     225  	__u16 config_counter;
     226  
     227  	__u8 num_acc_frames;	/* Num of image frames to be processed and
     228  				   accumulated for each histogram frame */
     229  	__u16 hist_bins;	/* number of bins: 32, 64, 128, or 256 */
     230  	__u8 cfa;		/* BAYER or FOVEON X3 */
     231  	__u8 wg[OMAP3ISP_HIST_MAX_WG];	/* White Balance Gain */
     232  	__u8 num_regions;	/* number of regions to be configured */
     233  	struct omap3isp_hist_region region[OMAP3ISP_HIST_MAX_REGIONS];
     234  };
     235  
     236  /* Auto Focus related structs */
     237  
     238  #define OMAP3ISP_AF_NUM_COEF		11
     239  
     240  enum omap3isp_h3a_af_fvmode {
     241  	OMAP3ISP_AF_MODE_SUMMED = 0,
     242  	OMAP3ISP_AF_MODE_PEAK = 1
     243  };
     244  
     245  /* Red, Green, and blue pixel location in the AF windows */
     246  enum omap3isp_h3a_af_rgbpos {
     247  	OMAP3ISP_AF_GR_GB_BAYER = 0,	/* GR and GB as Bayer pattern */
     248  	OMAP3ISP_AF_RG_GB_BAYER = 1,	/* RG and GB as Bayer pattern */
     249  	OMAP3ISP_AF_GR_BG_BAYER = 2,	/* GR and BG as Bayer pattern */
     250  	OMAP3ISP_AF_RG_BG_BAYER = 3,	/* RG and BG as Bayer pattern */
     251  	OMAP3ISP_AF_GG_RB_CUSTOM = 4,	/* GG and RB as custom pattern */
     252  	OMAP3ISP_AF_RB_GG_CUSTOM = 5	/* RB and GG as custom pattern */
     253  };
     254  
     255  /* Contains the information regarding the Horizontal Median Filter */
     256  struct omap3isp_h3a_af_hmf {
     257  	__u8 enable;	/* Status of Horizontal Median Filter */
     258  	__u8 threshold;	/* Threshold Value for Horizontal Median Filter */
     259  };
     260  
     261  /* Contains the information regarding the IIR Filters */
     262  struct omap3isp_h3a_af_iir {
     263  	__u16 h_start;			/* IIR horizontal start */
     264  	__u16 coeff_set0[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 0 */
     265  	__u16 coeff_set1[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 1 */
     266  };
     267  
     268  /* Contains the information regarding the Paxels Structure in AF Engine */
     269  struct omap3isp_h3a_af_paxel {
     270  	__u16 h_start;	/* Horizontal Start Position */
     271  	__u16 v_start;	/* Vertical Start Position */
     272  	__u8 width;	/* Width of the Paxel */
     273  	__u8 height;	/* Height of the Paxel */
     274  	__u8 h_cnt;	/* Horizontal Count */
     275  	__u8 v_cnt;	/* vertical Count */
     276  	__u8 line_inc;	/* Line Increment */
     277  };
     278  
     279  /* Contains the parameters required for hardware set up of AF Engine */
     280  struct omap3isp_h3a_af_config {
     281  	/*
     282  	 * Common fields.
     283  	 * They should be the first ones and must be in the same order as in
     284  	 * ispstat_generic_config struct.
     285  	 */
     286  	__u32 buf_size;
     287  	__u16 config_counter;
     288  
     289  	struct omap3isp_h3a_af_hmf hmf;		/* HMF configurations */
     290  	struct omap3isp_h3a_af_iir iir;		/* IIR filter configurations */
     291  	struct omap3isp_h3a_af_paxel paxel;	/* Paxel parameters */
     292  	enum omap3isp_h3a_af_rgbpos rgb_pos;	/* RGB Positions */
     293  	enum omap3isp_h3a_af_fvmode fvmode;	/* Accumulator mode */
     294  	__u8 alaw_enable;			/* AF ALAW status */
     295  };
     296  
     297  /* ISP CCDC structs */
     298  
     299  /* Abstraction layer CCDC configurations */
     300  #define OMAP3ISP_CCDC_ALAW		(1 << 0)
     301  #define OMAP3ISP_CCDC_LPF		(1 << 1)
     302  #define OMAP3ISP_CCDC_BLCLAMP		(1 << 2)
     303  #define OMAP3ISP_CCDC_BCOMP		(1 << 3)
     304  #define OMAP3ISP_CCDC_FPC		(1 << 4)
     305  #define OMAP3ISP_CCDC_CULL		(1 << 5)
     306  #define OMAP3ISP_CCDC_CONFIG_LSC	(1 << 7)
     307  #define OMAP3ISP_CCDC_TBL_LSC		(1 << 8)
     308  
     309  #define OMAP3ISP_RGB_MAX		3
     310  
     311  /* Enumeration constants for Alaw input width */
     312  enum omap3isp_alaw_ipwidth {
     313  	OMAP3ISP_ALAW_BIT12_3 = 0x3,
     314  	OMAP3ISP_ALAW_BIT11_2 = 0x4,
     315  	OMAP3ISP_ALAW_BIT10_1 = 0x5,
     316  	OMAP3ISP_ALAW_BIT9_0 = 0x6
     317  };
     318  
     319  /**
     320   * struct omap3isp_ccdc_lsc_config - LSC configuration
     321   * @offset: Table Offset of the gain table.
     322   * @gain_mode_n: Vertical dimension of a paxel in LSC configuration.
     323   * @gain_mode_m: Horizontal dimension of a paxel in LSC configuration.
     324   * @gain_format: Gain table format.
     325   * @fmtsph: Start pixel horizontal from start of the HS sync pulse.
     326   * @fmtlnh: Number of pixels in horizontal direction to use for the data
     327   *          reformatter.
     328   * @fmtslv: Start line from start of VS sync pulse for the data reformatter.
     329   * @fmtlnv: Number of lines in vertical direction for the data reformatter.
     330   * @initial_x: X position, in pixels, of the first active pixel in reference
     331   *             to the first active paxel. Must be an even number.
     332   * @initial_y: Y position, in pixels, of the first active pixel in reference
     333   *             to the first active paxel. Must be an even number.
     334   * @size: Size of LSC gain table. Filled when loaded from userspace.
     335   */
     336  struct omap3isp_ccdc_lsc_config {
     337  	__u16 offset;
     338  	__u8 gain_mode_n;
     339  	__u8 gain_mode_m;
     340  	__u8 gain_format;
     341  	__u16 fmtsph;
     342  	__u16 fmtlnh;
     343  	__u16 fmtslv;
     344  	__u16 fmtlnv;
     345  	__u8 initial_x;
     346  	__u8 initial_y;
     347  	__u32 size;
     348  };
     349  
     350  /**
     351   * struct omap3isp_ccdc_bclamp - Optical & Digital black clamp subtract
     352   * @obgain: Optical black average gain.
     353   * @obstpixel: Start Pixel w.r.t. HS pulse in Optical black sample.
     354   * @oblines: Optical Black Sample lines.
     355   * @oblen: Optical Black Sample Length.
     356   * @dcsubval: Digital Black Clamp subtract value.
     357   */
     358  struct omap3isp_ccdc_bclamp {
     359  	__u8 obgain;
     360  	__u8 obstpixel;
     361  	__u8 oblines;
     362  	__u8 oblen;
     363  	__u16 dcsubval;
     364  };
     365  
     366  /**
     367   * struct omap3isp_ccdc_fpc - Faulty Pixels Correction
     368   * @fpnum: Number of faulty pixels to be corrected in the frame.
     369   * @fpcaddr: Memory address of the FPC Table
     370   */
     371  struct omap3isp_ccdc_fpc {
     372  	__u16 fpnum;
     373  	__u32 fpcaddr;
     374  };
     375  
     376  /**
     377   * struct omap3isp_ccdc_blcomp - Black Level Compensation parameters
     378   * @b_mg: B/Mg pixels. 2's complement. -128 to +127.
     379   * @gb_g: Gb/G pixels. 2's complement. -128 to +127.
     380   * @gr_cy: Gr/Cy pixels. 2's complement. -128 to +127.
     381   * @r_ye: R/Ye pixels. 2's complement. -128 to +127.
     382   */
     383  struct omap3isp_ccdc_blcomp {
     384  	__u8 b_mg;
     385  	__u8 gb_g;
     386  	__u8 gr_cy;
     387  	__u8 r_ye;
     388  };
     389  
     390  /**
     391   * omap3isp_ccdc_culling - Culling parameters
     392   * @v_pattern: Vertical culling pattern.
     393   * @h_odd: Horizontal Culling pattern for odd lines.
     394   * @h_even: Horizontal Culling pattern for even lines.
     395   */
     396  struct omap3isp_ccdc_culling {
     397  	__u8 v_pattern;
     398  	__u16 h_odd;
     399  	__u16 h_even;
     400  };
     401  
     402  /**
     403   * omap3isp_ccdc_update_config - CCDC configuration
     404   * @update: Specifies which CCDC registers should be updated.
     405   * @flag: Specifies which CCDC functions should be enabled.
     406   * @alawip: Enable/Disable A-Law compression.
     407   * @bclamp: Black clamp control register.
     408   * @blcomp: Black level compensation value for RGrGbB Pixels. 2's complement.
     409   * @fpc: Number of faulty pixels corrected in the frame, address of FPC table.
     410   * @cull: Cull control register.
     411   * @lsc: Pointer to LSC gain table.
     412   */
     413  struct omap3isp_ccdc_update_config {
     414  	__u16 update;
     415  	__u16 flag;
     416  	enum omap3isp_alaw_ipwidth alawip;
     417  	struct omap3isp_ccdc_bclamp *bclamp;
     418  	struct omap3isp_ccdc_blcomp *blcomp;
     419  	struct omap3isp_ccdc_fpc *fpc;
     420  	struct omap3isp_ccdc_lsc_config *lsc_cfg;
     421  	struct omap3isp_ccdc_culling *cull;
     422  	__u8 *lsc;
     423  };
     424  
     425  /* Preview configurations */
     426  #define OMAP3ISP_PREV_LUMAENH		(1 << 0)
     427  #define OMAP3ISP_PREV_INVALAW		(1 << 1)
     428  #define OMAP3ISP_PREV_HRZ_MED		(1 << 2)
     429  #define OMAP3ISP_PREV_CFA		(1 << 3)
     430  #define OMAP3ISP_PREV_CHROMA_SUPP	(1 << 4)
     431  #define OMAP3ISP_PREV_WB		(1 << 5)
     432  #define OMAP3ISP_PREV_BLKADJ		(1 << 6)
     433  #define OMAP3ISP_PREV_RGB2RGB		(1 << 7)
     434  #define OMAP3ISP_PREV_COLOR_CONV	(1 << 8)
     435  #define OMAP3ISP_PREV_YC_LIMIT		(1 << 9)
     436  #define OMAP3ISP_PREV_DEFECT_COR	(1 << 10)
     437  /* Bit 11 was OMAP3ISP_PREV_GAMMABYPASS, now merged with OMAP3ISP_PREV_GAMMA */
     438  #define OMAP3ISP_PREV_DRK_FRM_CAPTURE	(1 << 12)
     439  #define OMAP3ISP_PREV_DRK_FRM_SUBTRACT	(1 << 13)
     440  #define OMAP3ISP_PREV_LENS_SHADING	(1 << 14)
     441  #define OMAP3ISP_PREV_NF		(1 << 15)
     442  #define OMAP3ISP_PREV_GAMMA		(1 << 16)
     443  
     444  #define OMAP3ISP_PREV_NF_TBL_SIZE	64
     445  #define OMAP3ISP_PREV_CFA_TBL_SIZE	576
     446  #define OMAP3ISP_PREV_CFA_BLK_SIZE	(OMAP3ISP_PREV_CFA_TBL_SIZE / 4)
     447  #define OMAP3ISP_PREV_GAMMA_TBL_SIZE	1024
     448  #define OMAP3ISP_PREV_YENH_TBL_SIZE	128
     449  
     450  #define OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS	4
     451  
     452  /**
     453   * struct omap3isp_prev_hmed - Horizontal Median Filter
     454   * @odddist: Distance between consecutive pixels of same color in the odd line.
     455   * @evendist: Distance between consecutive pixels of same color in the even
     456   *            line.
     457   * @thres: Horizontal median filter threshold.
     458   */
     459  struct omap3isp_prev_hmed {
     460  	__u8 odddist;
     461  	__u8 evendist;
     462  	__u8 thres;
     463  };
     464  
     465  /*
     466   * Enumeration for CFA Formats supported by preview
     467   */
     468  enum omap3isp_cfa_fmt {
     469  	OMAP3ISP_CFAFMT_BAYER,
     470  	OMAP3ISP_CFAFMT_SONYVGA,
     471  	OMAP3ISP_CFAFMT_RGBFOVEON,
     472  	OMAP3ISP_CFAFMT_DNSPL,
     473  	OMAP3ISP_CFAFMT_HONEYCOMB,
     474  	OMAP3ISP_CFAFMT_RRGGBBFOVEON
     475  };
     476  
     477  /**
     478   * struct omap3isp_prev_cfa - CFA Interpolation
     479   * @format: CFA Format Enum value supported by preview.
     480   * @gradthrs_vert: CFA Gradient Threshold - Vertical.
     481   * @gradthrs_horz: CFA Gradient Threshold - Horizontal.
     482   * @table: Pointer to the CFA table.
     483   */
     484  struct omap3isp_prev_cfa {
     485  	enum omap3isp_cfa_fmt format;
     486  	__u8 gradthrs_vert;
     487  	__u8 gradthrs_horz;
     488  	__u32 table[4][OMAP3ISP_PREV_CFA_BLK_SIZE];
     489  };
     490  
     491  /**
     492   * struct omap3isp_prev_csup - Chrominance Suppression
     493   * @gain: Gain.
     494   * @thres: Threshold.
     495   * @hypf_en: Flag to enable/disable the High Pass Filter.
     496   */
     497  struct omap3isp_prev_csup {
     498  	__u8 gain;
     499  	__u8 thres;
     500  	__u8 hypf_en;
     501  };
     502  
     503  /**
     504   * struct omap3isp_prev_wbal - White Balance
     505   * @dgain: Digital gain (U10Q8).
     506   * @coef3: White balance gain - COEF 3 (U8Q5).
     507   * @coef2: White balance gain - COEF 2 (U8Q5).
     508   * @coef1: White balance gain - COEF 1 (U8Q5).
     509   * @coef0: White balance gain - COEF 0 (U8Q5).
     510   */
     511  struct omap3isp_prev_wbal {
     512  	__u16 dgain;
     513  	__u8 coef3;
     514  	__u8 coef2;
     515  	__u8 coef1;
     516  	__u8 coef0;
     517  };
     518  
     519  /**
     520   * struct omap3isp_prev_blkadj - Black Level Adjustment
     521   * @red: Black level offset adjustment for Red in 2's complement format
     522   * @green: Black level offset adjustment for Green in 2's complement format
     523   * @blue: Black level offset adjustment for Blue in 2's complement format
     524   */
     525  struct omap3isp_prev_blkadj {
     526  	/*Black level offset adjustment for Red in 2's complement format */
     527  	__u8 red;
     528  	/*Black level offset adjustment for Green in 2's complement format */
     529  	__u8 green;
     530  	/* Black level offset adjustment for Blue in 2's complement format */
     531  	__u8 blue;
     532  };
     533  
     534  /**
     535   * struct omap3isp_prev_rgbtorgb - RGB to RGB Blending
     536   * @matrix: Blending values(S12Q8 format)
     537   *              [RR] [GR] [BR]
     538   *              [RG] [GG] [BG]
     539   *              [RB] [GB] [BB]
     540   * @offset: Blending offset value for R,G,B in 2's complement integer format.
     541   */
     542  struct omap3isp_prev_rgbtorgb {
     543  	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
     544  	__u16 offset[OMAP3ISP_RGB_MAX];
     545  };
     546  
     547  /**
     548   * struct omap3isp_prev_csc - Color Space Conversion from RGB-YCbYCr
     549   * @matrix: Color space conversion coefficients(S10Q8)
     550   *              [CSCRY]  [CSCGY]  [CSCBY]
     551   *              [CSCRCB] [CSCGCB] [CSCBCB]
     552   *              [CSCRCR] [CSCGCR] [CSCBCR]
     553   * @offset: CSC offset values for Y offset, CB offset and CR offset respectively
     554   */
     555  struct omap3isp_prev_csc {
     556  	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
     557  	__s16 offset[OMAP3ISP_RGB_MAX];
     558  };
     559  
     560  /**
     561   * struct omap3isp_prev_yclimit - Y, C Value Limit
     562   * @minC: Minimum C value
     563   * @maxC: Maximum C value
     564   * @minY: Minimum Y value
     565   * @maxY: Maximum Y value
     566   */
     567  struct omap3isp_prev_yclimit {
     568  	__u8 minC;
     569  	__u8 maxC;
     570  	__u8 minY;
     571  	__u8 maxY;
     572  };
     573  
     574  /**
     575   * struct omap3isp_prev_dcor - Defect correction
     576   * @couplet_mode_en: Flag to enable or disable the couplet dc Correction in NF
     577   * @detect_correct: Thresholds for correction bit 0:10 detect 16:25 correct
     578   */
     579  struct omap3isp_prev_dcor {
     580  	__u8 couplet_mode_en;
     581  	__u32 detect_correct[OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS];
     582  };
     583  
     584  /**
     585   * struct omap3isp_prev_nf - Noise Filter
     586   * @spread: Spread value to be used in Noise Filter
     587   * @table: Pointer to the Noise Filter table
     588   */
     589  struct omap3isp_prev_nf {
     590  	__u8 spread;
     591  	__u32 table[OMAP3ISP_PREV_NF_TBL_SIZE];
     592  };
     593  
     594  /**
     595   * struct omap3isp_prev_gtables - Gamma correction tables
     596   * @red: Array for red gamma table.
     597   * @green: Array for green gamma table.
     598   * @blue: Array for blue gamma table.
     599   */
     600  struct omap3isp_prev_gtables {
     601  	__u32 red[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
     602  	__u32 green[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
     603  	__u32 blue[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
     604  };
     605  
     606  /**
     607   * struct omap3isp_prev_luma - Luma enhancement
     608   * @table: Array for luma enhancement table.
     609   */
     610  struct omap3isp_prev_luma {
     611  	__u32 table[OMAP3ISP_PREV_YENH_TBL_SIZE];
     612  };
     613  
     614  /**
     615   * struct omap3isp_prev_update_config - Preview engine configuration (user)
     616   * @update: Specifies which ISP Preview registers should be updated.
     617   * @flag: Specifies which ISP Preview functions should be enabled.
     618   * @shading_shift: 3bit value of shift used in shading compensation.
     619   * @luma: Pointer to luma enhancement structure.
     620   * @hmed: Pointer to structure containing the odd and even distance.
     621   *        between the pixels in the image along with the filter threshold.
     622   * @cfa: Pointer to structure containing the CFA interpolation table, CFA.
     623   *       format in the image, vertical and horizontal gradient threshold.
     624   * @csup: Pointer to Structure for Chrominance Suppression coefficients.
     625   * @wbal: Pointer to structure for White Balance.
     626   * @blkadj: Pointer to structure for Black Adjustment.
     627   * @rgb2rgb: Pointer to structure for RGB to RGB Blending.
     628   * @csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr.
     629   * @yclimit: Pointer to structure for Y, C Value Limit.
     630   * @dcor: Pointer to structure for defect correction.
     631   * @nf: Pointer to structure for Noise Filter
     632   * @gamma: Pointer to gamma structure.
     633   */
     634  struct omap3isp_prev_update_config {
     635  	__u32 update;
     636  	__u32 flag;
     637  	__u32 shading_shift;
     638  	struct omap3isp_prev_luma *luma;
     639  	struct omap3isp_prev_hmed *hmed;
     640  	struct omap3isp_prev_cfa *cfa;
     641  	struct omap3isp_prev_csup *csup;
     642  	struct omap3isp_prev_wbal *wbal;
     643  	struct omap3isp_prev_blkadj *blkadj;
     644  	struct omap3isp_prev_rgbtorgb *rgb2rgb;
     645  	struct omap3isp_prev_csc *csc;
     646  	struct omap3isp_prev_yclimit *yclimit;
     647  	struct omap3isp_prev_dcor *dcor;
     648  	struct omap3isp_prev_nf *nf;
     649  	struct omap3isp_prev_gtables *gamma;
     650  };
     651  
     652  #endif	/* OMAP3_ISP_USER_H */