Hi Murali,

Here is the first review. I'll try to review all the patches from this patch 
series
this week. FYI, patch 1/6 is fine.

On Thursday 10 December 2009 18:00:25 m-kariche...@ti.com wrote:
> From: Muralidharan Karicheri <m-kariche...@ti.com>
> 
> This is the header file for ISIF driver on DM365. This has comments 
> incorporated from
> initial version.
> 
> ISIF driver is equivalent to CCDC driver on DM355 and DM644x. This driver is 
> tested for
> YUV capture from TVP514x driver. This patch contains the header files 
> required for
> this driver. The name of the file is changed to reflect the name of IP.
> 
> Reviewed-by: Nori, Sekhar <nsek...@ti.com>
> Signed-off-by: Muralidharan Karicheri <m-kariche...@ti.com>
> ---
> Applies to linux-next tree of v4l-dvb 
>  drivers/media/video/davinci/isif_regs.h |  290 ++++++++++++++++
>  include/media/davinci/isif.h            |  554 
> +++++++++++++++++++++++++++++++
>  2 files changed, 844 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/media/video/davinci/isif_regs.h
>  create mode 100644 include/media/davinci/isif.h
> 

<cut>

> diff --git a/include/media/davinci/isif.h b/include/media/davinci/isif.h
> new file mode 100644
> index 0000000..b75fea7
> --- /dev/null
> +++ b/include/media/davinci/isif.h
> @@ -0,0 +1,554 @@
> +/*
> + * 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

Please add an empty line.

> +#include <media/davinci/ccdc_types.h>
> +#include <media/davinci/vpfe_types.h>

Ditto.

> +/* isif float type S8Q8/U8Q8 */
> +struct isif_float_8 {
> +     /* 8 bit integer part */
> +     __u8 integer;
> +     /* 8 bit decimal part */
> +     __u8 decimal;

Why __u8 instead of u8? This is a kernel-internal file, so it does not need
to use the '__' variants.

If this needs to be publicly available, then it should be in include/linux.

> +};
> +
> +/* 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;
> +     /* U12 value if reset_val_sel = ISIF_BC_VERT_USE_CONFIG_CLAMP_VAL */
> +     __u16 reset_clamp_val;
> +     /* U8Q8. Line average coefficient used in vertical clamp calculation */
> +     __u8 line_ave_coef;
> +#define      ISIF_VERT_BC_SZ_H_2PIXELS       0
> +#define ISIF_VERT_BC_SZ_H_4PIXELS    1
> +#define      ISIF_VERT_BC_SZ_H_8PIXELS       2
> +#define      ISIF_VERT_BC_SZ_H_16PIXELS      3
> +#define      ISIF_VERT_BC_SZ_H_32PIXELS      4
> +#define      ISIF_VERT_BC_SZ_H_64PIXELS      5
> +     /* Width in pixels of the optical black region used for calculation */
> +     __u8 ob_h_sz_calc;
> +     /* 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 Convertion (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;
> +     /* No Shift */
> +#define ISIF_NO_SHIFT                0
> +     /* 1 bit Shift */
> +#define      ISIF_1BIT_SHIFT         1
> +     /* 2 bit Shift */
> +#define      ISIF_2BIT_SHIFT         2
> +     /* 3 bit Shift */
> +#define      ISIF_3BIT_SHIFT         3
> +     /* 4 bit Shift */
> +#define      ISIF_4BIT_SHIFT         4
> +     /* 5 bit Shift */
> +#define ISIF_5BIT_SHIFT              5
> +     /* 6 bit Shift */
> +#define ISIF_6BIT_SHIFT              6

The comment before each shift define seems rather pointless.

> +     /* Data shift applied before storing to SDRAM */
> +     __u8 data_shift;
> +     /* enable input test pattern generation */
> +     __u8 test_pat_gen;
> +};
> +
> +#ifdef __KERNEL__

Hmm. Is this header supposed to be public or private to the 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 {
> +     /* MSB b15 */
> +     ISIF_BIT_MSB_15,
> +     /* MSB b14 */
> +     ISIF_BIT_MSB_14,
> +     /* MSB b13 */
> +     ISIF_BIT_MSB_13,
> +     /* MSB b12 */
> +     ISIF_BIT_MSB_12,
> +     /* MSB b11 */
> +     ISIF_BIT_MSB_11,
> +     /* MSB b10 */
> +     ISIF_BIT_MSB_10,
> +     /* MSB b9 */
> +     ISIF_BIT_MSB_9,
> +     /* MSB b8 */
> +     ISIF_BIT_MSB_8,
> +     /* MSB b7 */
> +     ISIF_BIT_MSB_7

The comment before each entry seems rather pointless.

> +};
> +
> +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}

Please add empty line.

> +#endif
> +#endif
> 

Regards,

        Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to