Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (222 commits) V4L/DVB (13033): pt1: Don't use a deprecated DMA_BIT_MASK macro V4L/DVB (13029): radio-si4713: remove #include <linux/version.h> V4L/DVB (13027): go7007: convert printks to v4l2_info V4L/DVB (13026): s2250-board: Implement brightness and contrast controls V4L/DVB (13025): s2250-board: Fix memory leaks V4L/DVB (13024): go7007: Implement vidioc_g_std and vidioc_querystd V4L/DVB (13023): go7007: Merge struct gofh and go declarations V4L/DVB (13022): go7007: Fix mpeg controls V4L/DVB (13021): go7007: Fix whitespace and line lengths V4L/DVB (13020): go7007: Updates to Kconfig and Makefile V4L/DVB (13019): video: initial support for ADV7180 V4L/DVB (13018): kzalloc failure ignored in au8522_probe() V4L/DVB (13017): gspca: kmalloc failure ignored in sd_start() V4L/DVB (13016): kmalloc failure ignored in lgdt3304_attach() and s921_attach() V4L/DVB (13015): kmalloc failure ignored in m920x_firmware_download() V4L/DVB (13014): Add support for Compro VideoMate E800 (DVB-T part only) V4L/DVB (13013): FM TX: si4713: Kconfig: Fixed two typos. V4L/DVB (13012): uvc: introduce missing kfree V4L/DVB (13011): Change tuner type of BeholdTV cards V4L/DVB (13009): gspca - stv06xx-hdcs: Reduce exposure range ...
This commit is contained in:
@@ -173,7 +173,8 @@ typedef enum fe_modulation {
|
||||
typedef enum fe_transmit_mode {
|
||||
TRANSMISSION_MODE_2K,
|
||||
TRANSMISSION_MODE_8K,
|
||||
TRANSMISSION_MODE_AUTO
|
||||
TRANSMISSION_MODE_AUTO,
|
||||
TRANSMISSION_MODE_4K
|
||||
} fe_transmit_mode_t;
|
||||
|
||||
typedef enum fe_bandwidth {
|
||||
@@ -268,15 +269,42 @@ struct dvb_frontend_event {
|
||||
#define DTV_FE_CAPABILITY 16
|
||||
#define DTV_DELIVERY_SYSTEM 17
|
||||
|
||||
#define DTV_API_VERSION 35
|
||||
#define DTV_API_VERSION 35
|
||||
#define DTV_CODE_RATE_HP 36
|
||||
#define DTV_CODE_RATE_LP 37
|
||||
#define DTV_GUARD_INTERVAL 38
|
||||
#define DTV_TRANSMISSION_MODE 39
|
||||
#define DTV_HIERARCHY 40
|
||||
/* ISDB-T and ISDB-Tsb */
|
||||
#define DTV_ISDBT_PARTIAL_RECEPTION 18
|
||||
#define DTV_ISDBT_SOUND_BROADCASTING 19
|
||||
|
||||
#define DTV_MAX_COMMAND DTV_HIERARCHY
|
||||
#define DTV_ISDBT_SB_SUBCHANNEL_ID 20
|
||||
#define DTV_ISDBT_SB_SEGMENT_IDX 21
|
||||
#define DTV_ISDBT_SB_SEGMENT_COUNT 22
|
||||
|
||||
#define DTV_ISDBT_LAYERA_FEC 23
|
||||
#define DTV_ISDBT_LAYERA_MODULATION 24
|
||||
#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25
|
||||
#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26
|
||||
|
||||
#define DTV_ISDBT_LAYERB_FEC 27
|
||||
#define DTV_ISDBT_LAYERB_MODULATION 28
|
||||
#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29
|
||||
#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30
|
||||
|
||||
#define DTV_ISDBT_LAYERC_FEC 31
|
||||
#define DTV_ISDBT_LAYERC_MODULATION 32
|
||||
#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33
|
||||
#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34
|
||||
|
||||
#define DTV_API_VERSION 35
|
||||
|
||||
#define DTV_CODE_RATE_HP 36
|
||||
#define DTV_CODE_RATE_LP 37
|
||||
#define DTV_GUARD_INTERVAL 38
|
||||
#define DTV_TRANSMISSION_MODE 39
|
||||
#define DTV_HIERARCHY 40
|
||||
|
||||
#define DTV_ISDBT_LAYER_ENABLED 41
|
||||
|
||||
#define DTV_ISDBS_TS_ID 42
|
||||
|
||||
#define DTV_MAX_COMMAND DTV_ISDBS_TS_ID
|
||||
|
||||
typedef enum fe_pilot {
|
||||
PILOT_ON,
|
||||
|
@@ -24,6 +24,6 @@
|
||||
#define _DVBVERSION_H_
|
||||
|
||||
#define DVB_API_VERSION 5
|
||||
#define DVB_API_VERSION_MINOR 0
|
||||
#define DVB_API_VERSION_MINOR 1
|
||||
|
||||
#endif /*_DVBVERSION_H_*/
|
||||
|
@@ -910,9 +910,10 @@ enum v4l2_colorfx {
|
||||
V4L2_COLORFX_SEPIA = 2,
|
||||
};
|
||||
#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32)
|
||||
#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
|
||||
|
||||
/* last CID + 1 */
|
||||
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33)
|
||||
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+34)
|
||||
|
||||
/* MPEG-class control IDs defined by V4L2 */
|
||||
#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
|
||||
|
43
include/media/davinci/ccdc_types.h
Normal file
43
include/media/davinci/ccdc_types.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
**************************************************************************/
|
||||
#ifndef _CCDC_TYPES_H
|
||||
#define _CCDC_TYPES_H
|
||||
enum ccdc_pixfmt {
|
||||
CCDC_PIXFMT_RAW,
|
||||
CCDC_PIXFMT_YCBCR_16BIT,
|
||||
CCDC_PIXFMT_YCBCR_8BIT
|
||||
};
|
||||
|
||||
enum ccdc_frmfmt {
|
||||
CCDC_FRMFMT_PROGRESSIVE,
|
||||
CCDC_FRMFMT_INTERLACED
|
||||
};
|
||||
|
||||
/* PIXEL ORDER IN MEMORY from LSB to MSB */
|
||||
/* only applicable for 8-bit input mode */
|
||||
enum ccdc_pixorder {
|
||||
CCDC_PIXORDER_YCBYCR,
|
||||
CCDC_PIXORDER_CBYCRY,
|
||||
};
|
||||
|
||||
enum ccdc_buftype {
|
||||
CCDC_BUFTYPE_FLD_INTERLEAVED,
|
||||
CCDC_BUFTYPE_FLD_SEPARATED
|
||||
};
|
||||
#endif
|
321
include/media/davinci/dm355_ccdc.h
Normal file
321
include/media/davinci/dm355_ccdc.h
Normal file
@@ -0,0 +1,321 @@
|
||||
/*
|
||||
* Copyright (C) 2005-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
|
||||
*/
|
||||
#ifndef _DM355_CCDC_H
|
||||
#define _DM355_CCDC_H
|
||||
#include <media/davinci/ccdc_types.h>
|
||||
#include <media/davinci/vpfe_types.h>
|
||||
|
||||
/* enum for No of pixel per line to be avg. in Black Clamping */
|
||||
enum ccdc_sample_length {
|
||||
CCDC_SAMPLE_1PIXELS,
|
||||
CCDC_SAMPLE_2PIXELS,
|
||||
CCDC_SAMPLE_4PIXELS,
|
||||
CCDC_SAMPLE_8PIXELS,
|
||||
CCDC_SAMPLE_16PIXELS
|
||||
};
|
||||
|
||||
/* enum for No of lines in Black Clamping */
|
||||
enum ccdc_sample_line {
|
||||
CCDC_SAMPLE_1LINES,
|
||||
CCDC_SAMPLE_2LINES,
|
||||
CCDC_SAMPLE_4LINES,
|
||||
CCDC_SAMPLE_8LINES,
|
||||
CCDC_SAMPLE_16LINES
|
||||
};
|
||||
|
||||
/* enum for Alaw gama width */
|
||||
enum ccdc_gamma_width {
|
||||
CCDC_GAMMA_BITS_13_4,
|
||||
CCDC_GAMMA_BITS_12_3,
|
||||
CCDC_GAMMA_BITS_11_2,
|
||||
CCDC_GAMMA_BITS_10_1,
|
||||
CCDC_GAMMA_BITS_09_0
|
||||
};
|
||||
|
||||
enum ccdc_colpats {
|
||||
CCDC_RED,
|
||||
CCDC_GREEN_RED,
|
||||
CCDC_GREEN_BLUE,
|
||||
CCDC_BLUE
|
||||
};
|
||||
|
||||
struct ccdc_col_pat {
|
||||
enum ccdc_colpats olop;
|
||||
enum ccdc_colpats olep;
|
||||
enum ccdc_colpats elop;
|
||||
enum ccdc_colpats elep;
|
||||
};
|
||||
|
||||
enum ccdc_datasft {
|
||||
CCDC_DATA_NO_SHIFT,
|
||||
CCDC_DATA_SHIFT_1BIT,
|
||||
CCDC_DATA_SHIFT_2BIT,
|
||||
CCDC_DATA_SHIFT_3BIT,
|
||||
CCDC_DATA_SHIFT_4BIT,
|
||||
CCDC_DATA_SHIFT_5BIT,
|
||||
CCDC_DATA_SHIFT_6BIT
|
||||
};
|
||||
|
||||
enum ccdc_data_size {
|
||||
CCDC_DATA_16BITS,
|
||||
CCDC_DATA_15BITS,
|
||||
CCDC_DATA_14BITS,
|
||||
CCDC_DATA_13BITS,
|
||||
CCDC_DATA_12BITS,
|
||||
CCDC_DATA_11BITS,
|
||||
CCDC_DATA_10BITS,
|
||||
CCDC_DATA_8BITS
|
||||
};
|
||||
enum ccdc_mfilt1 {
|
||||
CCDC_NO_MEDIAN_FILTER1,
|
||||
CCDC_AVERAGE_FILTER1,
|
||||
CCDC_MEDIAN_FILTER1
|
||||
};
|
||||
|
||||
enum ccdc_mfilt2 {
|
||||
CCDC_NO_MEDIAN_FILTER2,
|
||||
CCDC_AVERAGE_FILTER2,
|
||||
CCDC_MEDIAN_FILTER2
|
||||
};
|
||||
|
||||
/* structure for ALaw */
|
||||
struct ccdc_a_law {
|
||||
/* Enable/disable A-Law */
|
||||
unsigned char enable;
|
||||
/* Gama Width Input */
|
||||
enum ccdc_gamma_width gama_wd;
|
||||
};
|
||||
|
||||
/* structure for Black Clamping */
|
||||
struct ccdc_black_clamp {
|
||||
/* only if bClampEnable is TRUE */
|
||||
unsigned char b_clamp_enable;
|
||||
/* only if bClampEnable is TRUE */
|
||||
enum ccdc_sample_length sample_pixel;
|
||||
/* only if bClampEnable is TRUE */
|
||||
enum ccdc_sample_line sample_ln;
|
||||
/* only if bClampEnable is TRUE */
|
||||
unsigned short start_pixel;
|
||||
/* only if bClampEnable is FALSE */
|
||||
unsigned short sgain;
|
||||
unsigned short dc_sub;
|
||||
};
|
||||
|
||||
/* structure for Black Level Compensation */
|
||||
struct ccdc_black_compensation {
|
||||
/* Constant value to subtract from Red component */
|
||||
unsigned char r;
|
||||
/* Constant value to subtract from Gr component */
|
||||
unsigned char gr;
|
||||
/* Constant value to subtract from Blue component */
|
||||
unsigned char b;
|
||||
/* Constant value to subtract from Gb component */
|
||||
unsigned char gb;
|
||||
};
|
||||
|
||||
struct ccdc_float {
|
||||
int integer;
|
||||
unsigned int decimal;
|
||||
};
|
||||
|
||||
#define CCDC_CSC_COEFF_TABLE_SIZE 16
|
||||
/* structure for color space converter */
|
||||
struct ccdc_csc {
|
||||
unsigned char enable;
|
||||
/*
|
||||
* S8Q5. Use 2 decimal precision, user values range from -3.00 to 3.99.
|
||||
* example - to use 1.03, set integer part as 1, and decimal part as 3
|
||||
* to use -1.03, set integer part as -1 and decimal part as 3
|
||||
*/
|
||||
struct ccdc_float coeff[CCDC_CSC_COEFF_TABLE_SIZE];
|
||||
};
|
||||
|
||||
/* Structures for Vertical Defect Correction*/
|
||||
enum ccdc_vdf_csl {
|
||||
CCDC_VDF_NORMAL,
|
||||
CCDC_VDF_HORZ_INTERPOL_SAT,
|
||||
CCDC_VDF_HORZ_INTERPOL
|
||||
};
|
||||
|
||||
enum ccdc_vdf_cuda {
|
||||
CCDC_VDF_WHOLE_LINE_CORRECT,
|
||||
CCDC_VDF_UPPER_DISABLE
|
||||
};
|
||||
|
||||
enum ccdc_dfc_mwr {
|
||||
CCDC_DFC_MWR_WRITE_COMPLETE,
|
||||
CCDC_DFC_WRITE_REG
|
||||
};
|
||||
|
||||
enum ccdc_dfc_mrd {
|
||||
CCDC_DFC_READ_COMPLETE,
|
||||
CCDC_DFC_READ_REG
|
||||
};
|
||||
|
||||
enum ccdc_dfc_ma_rst {
|
||||
CCDC_DFC_INCR_ADDR,
|
||||
CCDC_DFC_CLR_ADDR
|
||||
};
|
||||
|
||||
enum ccdc_dfc_mclr {
|
||||
CCDC_DFC_CLEAR_COMPLETE,
|
||||
CCDC_DFC_CLEAR
|
||||
};
|
||||
|
||||
struct ccdc_dft_corr_ctl {
|
||||
enum ccdc_vdf_csl vdfcsl;
|
||||
enum ccdc_vdf_cuda vdfcuda;
|
||||
unsigned int vdflsft;
|
||||
};
|
||||
|
||||
struct ccdc_dft_corr_mem_ctl {
|
||||
enum ccdc_dfc_mwr dfcmwr;
|
||||
enum ccdc_dfc_mrd dfcmrd;
|
||||
enum ccdc_dfc_ma_rst dfcmarst;
|
||||
enum ccdc_dfc_mclr dfcmclr;
|
||||
};
|
||||
|
||||
#define CCDC_DFT_TABLE_SIZE 16
|
||||
/*
|
||||
* Main Structure for vertical defect correction. Vertical defect
|
||||
* correction can correct upto 16 defects if defects less than 16
|
||||
* then pad the rest with 0
|
||||
*/
|
||||
struct ccdc_vertical_dft {
|
||||
unsigned char ver_dft_en;
|
||||
unsigned char gen_dft_en;
|
||||
unsigned int saturation_ctl;
|
||||
struct ccdc_dft_corr_ctl dft_corr_ctl;
|
||||
struct ccdc_dft_corr_mem_ctl dft_corr_mem_ctl;
|
||||
int table_size;
|
||||
unsigned int dft_corr_horz[CCDC_DFT_TABLE_SIZE];
|
||||
unsigned int dft_corr_vert[CCDC_DFT_TABLE_SIZE];
|
||||
unsigned int dft_corr_sub1[CCDC_DFT_TABLE_SIZE];
|
||||
unsigned int dft_corr_sub2[CCDC_DFT_TABLE_SIZE];
|
||||
unsigned int dft_corr_sub3[CCDC_DFT_TABLE_SIZE];
|
||||
};
|
||||
|
||||
struct ccdc_data_offset {
|
||||
unsigned char horz_offset;
|
||||
unsigned char vert_offset;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure for CCDC configuration parameters for raw capture mode passed
|
||||
* by application
|
||||
*/
|
||||
struct ccdc_config_params_raw {
|
||||
/* data shift to be applied before storing */
|
||||
enum ccdc_datasft datasft;
|
||||
/* data size value from 8 to 16 bits */
|
||||
enum ccdc_data_size data_sz;
|
||||
/* median filter for sdram */
|
||||
enum ccdc_mfilt1 mfilt1;
|
||||
enum ccdc_mfilt2 mfilt2;
|
||||
/* low pass filter enable/disable */
|
||||
unsigned char lpf_enable;
|
||||
/* Threshold of median filter */
|
||||
int med_filt_thres;
|
||||
/*
|
||||
* horz and vertical data offset. Appliable for defect correction
|
||||
* and lsc
|
||||
*/
|
||||
struct ccdc_data_offset data_offset;
|
||||
/* Structure for Optional A-Law */
|
||||
struct ccdc_a_law alaw;
|
||||
/* Structure for Optical Black Clamp */
|
||||
struct ccdc_black_clamp blk_clamp;
|
||||
/* Structure for Black Compensation */
|
||||
struct ccdc_black_compensation blk_comp;
|
||||
/* struture for vertical Defect Correction Module Configuration */
|
||||
struct ccdc_vertical_dft vertical_dft;
|
||||
/* structure for color space converter Module Configuration */
|
||||
struct ccdc_csc csc;
|
||||
/* color patters for bayer capture */
|
||||
struct ccdc_col_pat col_pat_field0;
|
||||
struct ccdc_col_pat col_pat_field1;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/io.h>
|
||||
|
||||
#define CCDC_WIN_PAL {0, 0, 720, 576}
|
||||
#define CCDC_WIN_VGA {0, 0, 640, 480}
|
||||
|
||||
struct ccdc_params_ycbcr {
|
||||
/* pixel format */
|
||||
enum ccdc_pixfmt pix_fmt;
|
||||
/* progressive or interlaced frame */
|
||||
enum ccdc_frmfmt frm_fmt;
|
||||
/* video window */
|
||||
struct v4l2_rect win;
|
||||
/* field id polarity */
|
||||
enum vpfe_pin_pol fid_pol;
|
||||
/* vertical sync polarity */
|
||||
enum vpfe_pin_pol vd_pol;
|
||||
/* horizontal sync polarity */
|
||||
enum vpfe_pin_pol hd_pol;
|
||||
/* enable BT.656 embedded sync mode */
|
||||
int bt656_enable;
|
||||
/* cb:y:cr:y or y:cb:y:cr in memory */
|
||||
enum ccdc_pixorder pix_order;
|
||||
/* interleaved or separated fields */
|
||||
enum ccdc_buftype buf_type;
|
||||
};
|
||||
|
||||
/* Gain applied to Raw Bayer data */
|
||||
struct ccdc_gain {
|
||||
unsigned short r_ye;
|
||||
unsigned short gr_cy;
|
||||
unsigned short gb_g;
|
||||
unsigned short b_mg;
|
||||
};
|
||||
|
||||
/* Structure for CCDC configuration parameters for raw capture mode */
|
||||
struct ccdc_params_raw {
|
||||
/* pixel format */
|
||||
enum ccdc_pixfmt pix_fmt;
|
||||
/* progressive or interlaced frame */
|
||||
enum ccdc_frmfmt frm_fmt;
|
||||
/* video window */
|
||||
struct v4l2_rect win;
|
||||
/* field id polarity */
|
||||
enum vpfe_pin_pol fid_pol;
|
||||
/* vertical sync polarity */
|
||||
enum vpfe_pin_pol vd_pol;
|
||||
/* horizontal sync polarity */
|
||||
enum vpfe_pin_pol hd_pol;
|
||||
/* interleaved or separated fields */
|
||||
enum ccdc_buftype buf_type;
|
||||
/* Gain values */
|
||||
struct ccdc_gain gain;
|
||||
/* offset */
|
||||
unsigned int ccdc_offset;
|
||||
/* horizontal flip enable */
|
||||
unsigned char horz_flip_enable;
|
||||
/*
|
||||
* enable to store the image in inverse order in memory
|
||||
* (bottom to top)
|
||||
*/
|
||||
unsigned char image_invert_enable;
|
||||
/* Configurable part of raw data */
|
||||
struct ccdc_config_params_raw config_params;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif /* DM355_CCDC_H */
|
184
include/media/davinci/dm644x_ccdc.h
Normal file
184
include/media/davinci/dm644x_ccdc.h
Normal file
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Copyright (C) 2006-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
|
||||
*/
|
||||
#ifndef _DM644X_CCDC_H
|
||||
#define _DM644X_CCDC_H
|
||||
#include <media/davinci/ccdc_types.h>
|
||||
#include <media/davinci/vpfe_types.h>
|
||||
|
||||
/* enum for No of pixel per line to be avg. in Black Clamping*/
|
||||
enum ccdc_sample_length {
|
||||
CCDC_SAMPLE_1PIXELS,
|
||||
CCDC_SAMPLE_2PIXELS,
|
||||
CCDC_SAMPLE_4PIXELS,
|
||||
CCDC_SAMPLE_8PIXELS,
|
||||
CCDC_SAMPLE_16PIXELS
|
||||
};
|
||||
|
||||
/* enum for No of lines in Black Clamping */
|
||||
enum ccdc_sample_line {
|
||||
CCDC_SAMPLE_1LINES,
|
||||
CCDC_SAMPLE_2LINES,
|
||||
CCDC_SAMPLE_4LINES,
|
||||
CCDC_SAMPLE_8LINES,
|
||||
CCDC_SAMPLE_16LINES
|
||||
};
|
||||
|
||||
/* enum for Alaw gama width */
|
||||
enum ccdc_gama_width {
|
||||
CCDC_GAMMA_BITS_15_6,
|
||||
CCDC_GAMMA_BITS_14_5,
|
||||
CCDC_GAMMA_BITS_13_4,
|
||||
CCDC_GAMMA_BITS_12_3,
|
||||
CCDC_GAMMA_BITS_11_2,
|
||||
CCDC_GAMMA_BITS_10_1,
|
||||
CCDC_GAMMA_BITS_09_0
|
||||
};
|
||||
|
||||
enum ccdc_data_size {
|
||||
CCDC_DATA_16BITS,
|
||||
CCDC_DATA_15BITS,
|
||||
CCDC_DATA_14BITS,
|
||||
CCDC_DATA_13BITS,
|
||||
CCDC_DATA_12BITS,
|
||||
CCDC_DATA_11BITS,
|
||||
CCDC_DATA_10BITS,
|
||||
CCDC_DATA_8BITS
|
||||
};
|
||||
|
||||
/* structure for ALaw */
|
||||
struct ccdc_a_law {
|
||||
/* Enable/disable A-Law */
|
||||
unsigned char enable;
|
||||
/* Gama Width Input */
|
||||
enum ccdc_gama_width gama_wd;
|
||||
};
|
||||
|
||||
/* structure for Black Clamping */
|
||||
struct ccdc_black_clamp {
|
||||
unsigned char enable;
|
||||
/* only if bClampEnable is TRUE */
|
||||
enum ccdc_sample_length sample_pixel;
|
||||
/* only if bClampEnable is TRUE */
|
||||
enum ccdc_sample_line sample_ln;
|
||||
/* only if bClampEnable is TRUE */
|
||||
unsigned short start_pixel;
|
||||
/* only if bClampEnable is TRUE */
|
||||
unsigned short sgain;
|
||||
/* only if bClampEnable is FALSE */
|
||||
unsigned short dc_sub;
|
||||
};
|
||||
|
||||
/* structure for Black Level Compensation */
|
||||
struct ccdc_black_compensation {
|
||||
/* Constant value to subtract from Red component */
|
||||
char r;
|
||||
/* Constant value to subtract from Gr component */
|
||||
char gr;
|
||||
/* Constant value to subtract from Blue component */
|
||||
char b;
|
||||
/* Constant value to subtract from Gb component */
|
||||
char gb;
|
||||
};
|
||||
|
||||
/* structure for fault pixel correction */
|
||||
struct ccdc_fault_pixel {
|
||||
/* Enable or Disable fault pixel correction */
|
||||
unsigned char enable;
|
||||
/* Number of fault pixel */
|
||||
unsigned short fp_num;
|
||||
/* Address of fault pixel table */
|
||||
unsigned int fpc_table_addr;
|
||||
};
|
||||
|
||||
/* Structure for CCDC configuration parameters for raw capture mode passed
|
||||
* by application
|
||||
*/
|
||||
struct ccdc_config_params_raw {
|
||||
/* data size value from 8 to 16 bits */
|
||||
enum ccdc_data_size data_sz;
|
||||
/* Structure for Optional A-Law */
|
||||
struct ccdc_a_law alaw;
|
||||
/* Structure for Optical Black Clamp */
|
||||
struct ccdc_black_clamp blk_clamp;
|
||||
/* Structure for Black Compensation */
|
||||
struct ccdc_black_compensation blk_comp;
|
||||
/* Structure for Fault Pixel Module Configuration */
|
||||
struct ccdc_fault_pixel fault_pxl;
|
||||
};
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/io.h>
|
||||
/* Define to enable/disable video port */
|
||||
#define FP_NUM_BYTES 4
|
||||
/* Define for extra pixel/line and extra lines/frame */
|
||||
#define NUM_EXTRAPIXELS 8
|
||||
#define NUM_EXTRALINES 8
|
||||
|
||||
/* settings for commonly used video formats */
|
||||
#define CCDC_WIN_PAL {0, 0, 720, 576}
|
||||
/* ntsc square pixel */
|
||||
#define CCDC_WIN_VGA {0, 0, (640 + NUM_EXTRAPIXELS), (480 + NUM_EXTRALINES)}
|
||||
|
||||
/* Structure for CCDC configuration parameters for raw capture mode */
|
||||
struct ccdc_params_raw {
|
||||
/* pixel format */
|
||||
enum ccdc_pixfmt pix_fmt;
|
||||
/* progressive or interlaced frame */
|
||||
enum ccdc_frmfmt frm_fmt;
|
||||
/* video window */
|
||||
struct v4l2_rect win;
|
||||
/* field id polarity */
|
||||
enum vpfe_pin_pol fid_pol;
|
||||
/* vertical sync polarity */
|
||||
enum vpfe_pin_pol vd_pol;
|
||||
/* horizontal sync polarity */
|
||||
enum vpfe_pin_pol hd_pol;
|
||||
/* interleaved or separated fields */
|
||||
enum ccdc_buftype buf_type;
|
||||
/*
|
||||
* enable to store the image in inverse
|
||||
* order in memory(bottom to top)
|
||||
*/
|
||||
unsigned char image_invert_enable;
|
||||
/* configurable paramaters */
|
||||
struct ccdc_config_params_raw config_params;
|
||||
};
|
||||
|
||||
struct ccdc_params_ycbcr {
|
||||
/* pixel format */
|
||||
enum ccdc_pixfmt pix_fmt;
|
||||
/* progressive or interlaced frame */
|
||||
enum ccdc_frmfmt frm_fmt;
|
||||
/* video window */
|
||||
struct v4l2_rect win;
|
||||
/* field id polarity */
|
||||
enum vpfe_pin_pol fid_pol;
|
||||
/* vertical sync polarity */
|
||||
enum vpfe_pin_pol vd_pol;
|
||||
/* horizontal sync polarity */
|
||||
enum vpfe_pin_pol hd_pol;
|
||||
/* enable BT.656 embedded sync mode */
|
||||
int bt656_enable;
|
||||
/* cb:y:cr:y or y:cb:y:cr in memory */
|
||||
enum ccdc_pixorder pix_order;
|
||||
/* interleaved or separated fields */
|
||||
enum ccdc_buftype buf_type;
|
||||
};
|
||||
#endif
|
||||
#endif /* _DM644X_CCDC_H */
|
198
include/media/davinci/vpfe_capture.h
Normal file
198
include/media/davinci/vpfe_capture.h
Normal file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#ifndef _VPFE_CAPTURE_H
|
||||
#define _VPFE_CAPTURE_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* Header files */
|
||||
#include <media/v4l2-dev.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/videobuf-dma-contig.h>
|
||||
#include <media/davinci/vpfe_types.h>
|
||||
|
||||
#define VPFE_CAPTURE_NUM_DECODERS 5
|
||||
|
||||
/* Macros */
|
||||
#define VPFE_MAJOR_RELEASE 0
|
||||
#define VPFE_MINOR_RELEASE 0
|
||||
#define VPFE_BUILD 1
|
||||
#define VPFE_CAPTURE_VERSION_CODE ((VPFE_MAJOR_RELEASE << 16) | \
|
||||
(VPFE_MINOR_RELEASE << 8) | \
|
||||
VPFE_BUILD)
|
||||
|
||||
#define CAPTURE_DRV_NAME "vpfe-capture"
|
||||
|
||||
struct vpfe_pixel_format {
|
||||
struct v4l2_fmtdesc fmtdesc;
|
||||
/* bytes per pixel */
|
||||
int bpp;
|
||||
};
|
||||
|
||||
struct vpfe_std_info {
|
||||
int active_pixels;
|
||||
int active_lines;
|
||||
/* current frame format */
|
||||
int frame_format;
|
||||
};
|
||||
|
||||
struct vpfe_route {
|
||||
u32 input;
|
||||
u32 output;
|
||||
};
|
||||
|
||||
struct vpfe_subdev_info {
|
||||
/* Sub device name */
|
||||
char name[32];
|
||||
/* Sub device group id */
|
||||
int grp_id;
|
||||
/* Number of inputs supported */
|
||||
int num_inputs;
|
||||
/* inputs available at the sub device */
|
||||
struct v4l2_input *inputs;
|
||||
/* Sub dev routing information for each input */
|
||||
struct vpfe_route *routes;
|
||||
/* check if sub dev supports routing */
|
||||
int can_route;
|
||||
/* ccdc bus/interface configuration */
|
||||
struct vpfe_hw_if_param ccdc_if_params;
|
||||
/* i2c subdevice board info */
|
||||
struct i2c_board_info board_info;
|
||||
};
|
||||
|
||||
struct vpfe_config {
|
||||
/* Number of sub devices connected to vpfe */
|
||||
int num_subdevs;
|
||||
/* information about each subdev */
|
||||
struct vpfe_subdev_info *sub_devs;
|
||||
/* evm card info */
|
||||
char *card_name;
|
||||
/* ccdc name */
|
||||
char *ccdc;
|
||||
/* vpfe clock */
|
||||
struct clk *vpssclk;
|
||||
struct clk *slaveclk;
|
||||
};
|
||||
|
||||
struct vpfe_device {
|
||||
/* V4l2 specific parameters */
|
||||
/* Identifies video device for this channel */
|
||||
struct video_device *video_dev;
|
||||
/* sub devices */
|
||||
struct v4l2_subdev **sd;
|
||||
/* vpfe cfg */
|
||||
struct vpfe_config *cfg;
|
||||
/* V4l2 device */
|
||||
struct v4l2_device v4l2_dev;
|
||||
/* parent device */
|
||||
struct device *pdev;
|
||||
/* Used to keep track of state of the priority */
|
||||
struct v4l2_prio_state prio;
|
||||
/* number of open instances of the channel */
|
||||
u32 usrs;
|
||||
/* Indicates id of the field which is being displayed */
|
||||
u32 field_id;
|
||||
/* flag to indicate whether decoder is initialized */
|
||||
u8 initialized;
|
||||
/* current interface type */
|
||||
struct vpfe_hw_if_param vpfe_if_params;
|
||||
/* ptr to currently selected sub device */
|
||||
struct vpfe_subdev_info *current_subdev;
|
||||
/* current input at the sub device */
|
||||
int current_input;
|
||||
/* Keeps track of the information about the standard */
|
||||
struct vpfe_std_info std_info;
|
||||
/* std index into std table */
|
||||
int std_index;
|
||||
/* CCDC IRQs used when CCDC/ISIF output to SDRAM */
|
||||
unsigned int ccdc_irq0;
|
||||
unsigned int ccdc_irq1;
|
||||
/* number of buffers in fbuffers */
|
||||
u32 numbuffers;
|
||||
/* List of buffer pointers for storing frames */
|
||||
u8 *fbuffers[VIDEO_MAX_FRAME];
|
||||
/* Pointer pointing to current v4l2_buffer */
|
||||
struct videobuf_buffer *cur_frm;
|
||||
/* Pointer pointing to next v4l2_buffer */
|
||||
struct videobuf_buffer *next_frm;
|
||||
/*
|
||||
* This field keeps track of type of buffer exchange mechanism
|
||||
* user has selected
|
||||
*/
|
||||
enum v4l2_memory memory;
|
||||
/* Used to store pixel format */
|
||||
struct v4l2_format fmt;
|
||||
/*
|
||||
* used when IMP is chained to store the crop window which
|
||||
* is different from the image window
|
||||
*/
|
||||
struct v4l2_rect crop;
|
||||
/* Buffer queue used in video-buf */
|
||||
struct videobuf_queue buffer_queue;
|
||||
/* Queue of filled frames */
|
||||
struct list_head dma_queue;
|
||||
/* Used in video-buf */
|
||||
spinlock_t irqlock;
|
||||
/* IRQ lock for DMA queue */
|
||||
spinlock_t dma_queue_lock;
|
||||
/* lock used to access this structure */
|
||||
struct mutex lock;
|
||||
/* number of users performing IO */
|
||||
u32 io_usrs;
|
||||
/* Indicates whether streaming started */
|
||||
u8 started;
|
||||
/*
|
||||
* offset where second field starts from the starting of the
|
||||
* buffer for field seperated YCbCr formats
|
||||
*/
|
||||
u32 field_off;
|
||||
};
|
||||
|
||||
/* File handle structure */
|
||||
struct vpfe_fh {
|
||||
struct vpfe_device *vpfe_dev;
|
||||
/* Indicates whether this file handle is doing IO */
|
||||
u8 io_allowed;
|
||||
/* Used to keep track priority of this instance */
|
||||
enum v4l2_priority prio;
|
||||
};
|
||||
|
||||
struct vpfe_config_params {
|
||||
u8 min_numbuffers;
|
||||
u8 numbuffers;
|
||||
u32 min_bufsize;
|
||||
u32 device_bufsize;
|
||||
};
|
||||
|
||||
#endif /* End of __KERNEL__ */
|
||||
/**
|
||||
* VPFE_CMD_S_CCDC_RAW_PARAMS - EXPERIMENTAL IOCTL to set raw capture params
|
||||
* This can be used to configure modules such as defect pixel correction,
|
||||
* color space conversion, culling etc. This is an experimental ioctl that
|
||||
* will change in future kernels. So use this ioctl with care !
|
||||
* TODO: This is to be split into multiple ioctls and also explore the
|
||||
* possibility of extending the v4l2 api to include this
|
||||
**/
|
||||
#define VPFE_CMD_S_CCDC_RAW_PARAMS _IOW('V', BASE_VIDIOC_PRIVATE + 1, \
|
||||
void *)
|
||||
#endif /* _DAVINCI_VPFE_H */
|
51
include/media/davinci/vpfe_types.h
Normal file
51
include/media/davinci/vpfe_types.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
#ifndef _VPFE_TYPES_H
|
||||
#define _VPFE_TYPES_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
enum vpfe_pin_pol {
|
||||
VPFE_PINPOL_POSITIVE,
|
||||
VPFE_PINPOL_NEGATIVE
|
||||
};
|
||||
|
||||
enum vpfe_hw_if_type {
|
||||
/* BT656 - 8 bit */
|
||||
VPFE_BT656,
|
||||
/* BT1120 - 16 bit */
|
||||
VPFE_BT1120,
|
||||
/* Raw Bayer */
|
||||
VPFE_RAW_BAYER,
|
||||
/* YCbCr - 8 bit with external sync */
|
||||
VPFE_YCBCR_SYNC_8,
|
||||
/* YCbCr - 16 bit with external sync */
|
||||
VPFE_YCBCR_SYNC_16,
|
||||
/* BT656 - 10 bit */
|
||||
VPFE_BT656_10BIT
|
||||
};
|
||||
|
||||
/* interface description */
|
||||
struct vpfe_hw_if_param {
|
||||
enum vpfe_hw_if_type if_type;
|
||||
enum vpfe_pin_pol hdpol;
|
||||
enum vpfe_pin_pol vdpol;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
69
include/media/davinci/vpss.h
Normal file
69
include/media/davinci/vpss.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 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
|
||||
*
|
||||
* vpss - video processing subsystem module header file.
|
||||
*
|
||||
* Include this header file if a driver needs to configure vpss system
|
||||
* module. It exports a set of library functions for video drivers to
|
||||
* configure vpss system module functions such as clock enable/disable,
|
||||
* vpss interrupt mux to arm, and other common vpss system module
|
||||
* functions.
|
||||
*/
|
||||
#ifndef _VPSS_H
|
||||
#define _VPSS_H
|
||||
|
||||
/* selector for ccdc input selection on DM355 */
|
||||
enum vpss_ccdc_source_sel {
|
||||
VPSS_CCDCIN,
|
||||
VPSS_HSSIIN
|
||||
};
|
||||
|
||||
/* Used for enable/diable VPSS Clock */
|
||||
enum vpss_clock_sel {
|
||||
/* DM355/DM365 */
|
||||
VPSS_CCDC_CLOCK,
|
||||
VPSS_IPIPE_CLOCK,
|
||||
VPSS_H3A_CLOCK,
|
||||
VPSS_CFALD_CLOCK,
|
||||
/*
|
||||
* When using VPSS_VENC_CLOCK_SEL in vpss_enable_clock() api
|
||||
* following applies:-
|
||||
* en = 0 selects ENC_CLK
|
||||
* en = 1 selects ENC_CLK/2
|
||||
*/
|
||||
VPSS_VENC_CLOCK_SEL,
|
||||
VPSS_VPBE_CLOCK,
|
||||
};
|
||||
|
||||
/* select input to ccdc on dm355 */
|
||||
int vpss_select_ccdc_source(enum vpss_ccdc_source_sel src_sel);
|
||||
/* enable/disable a vpss clock, 0 - success, -1 - failure */
|
||||
int vpss_enable_clock(enum vpss_clock_sel clock_sel, int en);
|
||||
|
||||
/* wbl reset for dm644x */
|
||||
enum vpss_wbl_sel {
|
||||
VPSS_PCR_AEW_WBL_0 = 16,
|
||||
VPSS_PCR_AF_WBL_0,
|
||||
VPSS_PCR_RSZ4_WBL_0,
|
||||
VPSS_PCR_RSZ3_WBL_0,
|
||||
VPSS_PCR_RSZ2_WBL_0,
|
||||
VPSS_PCR_RSZ1_WBL_0,
|
||||
VPSS_PCR_PREV_WBL_0,
|
||||
VPSS_PCR_CCDC_WBL_O,
|
||||
};
|
||||
int vpss_clear_wbl_overflow(enum vpss_wbl_sel wbl_sel);
|
||||
#endif
|
@@ -16,24 +16,17 @@
|
||||
#include <linux/pm.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/videobuf-core.h>
|
||||
#include <media/v4l2-device.h>
|
||||
|
||||
struct soc_camera_device {
|
||||
struct list_head list;
|
||||
struct device dev;
|
||||
struct device *control;
|
||||
unsigned short width; /* Current window */
|
||||
unsigned short height; /* sizes */
|
||||
unsigned short x_min; /* Camera capabilities */
|
||||
unsigned short y_min;
|
||||
unsigned short x_current; /* Current window location */
|
||||
unsigned short y_current;
|
||||
struct device *pdev; /* Platform device */
|
||||
s32 user_width;
|
||||
s32 user_height;
|
||||
unsigned short width_min;
|
||||
unsigned short width_max;
|
||||
unsigned short height_min;
|
||||
unsigned short height_max;
|
||||
unsigned short y_skip_top; /* Lines to skip at the top */
|
||||
unsigned short gain;
|
||||
unsigned short exposure;
|
||||
unsigned char iface; /* Host number */
|
||||
unsigned char devnum; /* Device number per host */
|
||||
unsigned char buswidth; /* See comment in .c */
|
||||
@@ -46,7 +39,6 @@ struct soc_camera_device {
|
||||
struct soc_camera_format_xlate *user_formats;
|
||||
int num_user_formats;
|
||||
enum v4l2_field field; /* Preserve field over close() */
|
||||
struct module *owner;
|
||||
void *host_priv; /* Per-device host private data */
|
||||
/* soc_camera.c private count. Only accessed with .video_lock held */
|
||||
int use_count;
|
||||
@@ -59,8 +51,8 @@ struct soc_camera_file {
|
||||
};
|
||||
|
||||
struct soc_camera_host {
|
||||
struct v4l2_device v4l2_dev;
|
||||
struct list_head list;
|
||||
struct device *dev;
|
||||
unsigned char nr; /* Host number */
|
||||
void *priv;
|
||||
const char *drv_name;
|
||||
@@ -73,9 +65,18 @@ struct soc_camera_host_ops {
|
||||
void (*remove)(struct soc_camera_device *);
|
||||
int (*suspend)(struct soc_camera_device *, pm_message_t);
|
||||
int (*resume)(struct soc_camera_device *);
|
||||
/*
|
||||
* .get_formats() is called for each client device format, but
|
||||
* .put_formats() is only called once. Further, if any of the calls to
|
||||
* .get_formats() fail, .put_formats() will not be called at all, the
|
||||
* failing .get_formats() must then clean up internally.
|
||||
*/
|
||||
int (*get_formats)(struct soc_camera_device *, int,
|
||||
struct soc_camera_format_xlate *);
|
||||
int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *);
|
||||
void (*put_formats)(struct soc_camera_device *);
|
||||
int (*cropcap)(struct soc_camera_device *, struct v4l2_cropcap *);
|
||||
int (*get_crop)(struct soc_camera_device *, struct v4l2_crop *);
|
||||
int (*set_crop)(struct soc_camera_device *, struct v4l2_crop *);
|
||||
int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *);
|
||||
int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *);
|
||||
void (*init_videobuf)(struct videobuf_queue *,
|
||||
@@ -83,7 +84,11 @@ struct soc_camera_host_ops {
|
||||
int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *);
|
||||
int (*querycap)(struct soc_camera_host *, struct v4l2_capability *);
|
||||
int (*set_bus_param)(struct soc_camera_device *, __u32);
|
||||
int (*get_ctrl)(struct soc_camera_device *, struct v4l2_control *);
|
||||
int (*set_ctrl)(struct soc_camera_device *, struct v4l2_control *);
|
||||
unsigned int (*poll)(struct file *, poll_table *);
|
||||
const struct v4l2_queryctrl *controls;
|
||||
int num_controls;
|
||||
};
|
||||
|
||||
#define SOCAM_SENSOR_INVERT_PCLK (1 << 0)
|
||||
@@ -102,6 +107,12 @@ struct soc_camera_link {
|
||||
int i2c_adapter_id;
|
||||
struct i2c_board_info *board_info;
|
||||
const char *module_name;
|
||||
/*
|
||||
* For non-I2C devices platform platform has to provide methods to
|
||||
* add a device to the system and to remove
|
||||
*/
|
||||
int (*add_device)(struct soc_camera_link *, struct device *);
|
||||
void (*del_device)(struct soc_camera_link *);
|
||||
/* Optional callbacks to power on or off and reset the sensor */
|
||||
int (*power)(struct device *, int);
|
||||
int (*reset)(struct device *);
|
||||
@@ -115,27 +126,45 @@ struct soc_camera_link {
|
||||
void (*free_bus)(struct soc_camera_link *);
|
||||
};
|
||||
|
||||
static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev)
|
||||
static inline struct soc_camera_device *to_soc_camera_dev(
|
||||
const struct device *dev)
|
||||
{
|
||||
return container_of(dev, struct soc_camera_device, dev);
|
||||
}
|
||||
|
||||
static inline struct soc_camera_host *to_soc_camera_host(struct device *dev)
|
||||
static inline struct soc_camera_host *to_soc_camera_host(
|
||||
const struct device *dev)
|
||||
{
|
||||
return dev_get_drvdata(dev);
|
||||
struct v4l2_device *v4l2_dev = dev_get_drvdata(dev);
|
||||
|
||||
return container_of(v4l2_dev, struct soc_camera_host, v4l2_dev);
|
||||
}
|
||||
|
||||
extern int soc_camera_host_register(struct soc_camera_host *ici);
|
||||
extern void soc_camera_host_unregister(struct soc_camera_host *ici);
|
||||
extern int soc_camera_device_register(struct soc_camera_device *icd);
|
||||
extern void soc_camera_device_unregister(struct soc_camera_device *icd);
|
||||
static inline struct soc_camera_link *to_soc_camera_link(
|
||||
const struct soc_camera_device *icd)
|
||||
{
|
||||
return icd->dev.platform_data;
|
||||
}
|
||||
|
||||
extern int soc_camera_video_start(struct soc_camera_device *icd);
|
||||
extern void soc_camera_video_stop(struct soc_camera_device *icd);
|
||||
static inline struct device *to_soc_camera_control(
|
||||
const struct soc_camera_device *icd)
|
||||
{
|
||||
return dev_get_drvdata(&icd->dev);
|
||||
}
|
||||
|
||||
extern const struct soc_camera_data_format *soc_camera_format_by_fourcc(
|
||||
static inline struct v4l2_subdev *soc_camera_to_subdev(
|
||||
const struct soc_camera_device *icd)
|
||||
{
|
||||
struct device *control = to_soc_camera_control(icd);
|
||||
return dev_get_drvdata(control);
|
||||
}
|
||||
|
||||
int soc_camera_host_register(struct soc_camera_host *ici);
|
||||
void soc_camera_host_unregister(struct soc_camera_host *ici);
|
||||
|
||||
const struct soc_camera_data_format *soc_camera_format_by_fourcc(
|
||||
struct soc_camera_device *icd, unsigned int fourcc);
|
||||
extern const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc(
|
||||
const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc(
|
||||
struct soc_camera_device *icd, unsigned int fourcc);
|
||||
|
||||
struct soc_camera_data_format {
|
||||
@@ -163,30 +192,11 @@ struct soc_camera_format_xlate {
|
||||
};
|
||||
|
||||
struct soc_camera_ops {
|
||||
struct module *owner;
|
||||
int (*probe)(struct soc_camera_device *);
|
||||
void (*remove)(struct soc_camera_device *);
|
||||
int (*suspend)(struct soc_camera_device *, pm_message_t state);
|
||||
int (*resume)(struct soc_camera_device *);
|
||||
int (*init)(struct soc_camera_device *);
|
||||
int (*release)(struct soc_camera_device *);
|
||||
int (*start_capture)(struct soc_camera_device *);
|
||||
int (*stop_capture)(struct soc_camera_device *);
|
||||
int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *);
|
||||
int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *);
|
||||
int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *);
|
||||
unsigned long (*query_bus_param)(struct soc_camera_device *);
|
||||
int (*set_bus_param)(struct soc_camera_device *, unsigned long);
|
||||
int (*get_chip_id)(struct soc_camera_device *,
|
||||
struct v4l2_dbg_chip_ident *);
|
||||
int (*set_std)(struct soc_camera_device *, v4l2_std_id *);
|
||||
int (*enum_input)(struct soc_camera_device *, struct v4l2_input *);
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
int (*get_register)(struct soc_camera_device *, struct v4l2_dbg_register *);
|
||||
int (*set_register)(struct soc_camera_device *, struct v4l2_dbg_register *);
|
||||
#endif
|
||||
int (*get_control)(struct soc_camera_device *, struct v4l2_control *);
|
||||
int (*set_control)(struct soc_camera_device *, struct v4l2_control *);
|
||||
const struct v4l2_queryctrl *controls;
|
||||
int num_controls;
|
||||
};
|
||||
@@ -268,6 +278,21 @@ static inline unsigned long soc_camera_bus_param_compatible(
|
||||
common_flags;
|
||||
}
|
||||
|
||||
static inline void soc_camera_limit_side(unsigned int *start,
|
||||
unsigned int *length, unsigned int start_min,
|
||||
unsigned int length_min, unsigned int length_max)
|
||||
{
|
||||
if (*length < length_min)
|
||||
*length = length_min;
|
||||
else if (*length > length_max)
|
||||
*length = length_max;
|
||||
|
||||
if (*start < start_min)
|
||||
*start = start_min;
|
||||
else if (*start > start_min + length_max - *length)
|
||||
*start = start_min + length_max - *length;
|
||||
}
|
||||
|
||||
extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl,
|
||||
unsigned long flags);
|
||||
|
||||
|
@@ -12,15 +12,18 @@
|
||||
#define __SOC_CAMERA_H__
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/soc_camera.h>
|
||||
|
||||
struct device;
|
||||
|
||||
struct soc_camera_platform_info {
|
||||
int iface;
|
||||
char *format_name;
|
||||
const char *format_name;
|
||||
unsigned long format_depth;
|
||||
struct v4l2_pix_format format;
|
||||
unsigned long bus_param;
|
||||
void (*power)(int);
|
||||
struct device *dev;
|
||||
int (*set_capture)(struct soc_camera_platform_info *info, int enable);
|
||||
struct soc_camera_link link;
|
||||
};
|
||||
|
||||
#endif /* __SOC_CAMERA_H__ */
|
||||
|
@@ -127,6 +127,8 @@
|
||||
#define TUNER_PHILIPS_FM1216MK5 79
|
||||
#define TUNER_PHILIPS_FQ1216LME_MK3 80 /* Active loopthrough, no FM */
|
||||
#define TUNER_PARTSNIC_PTI_5NF05 81
|
||||
#define TUNER_PHILIPS_CU1216L 82
|
||||
#define TUNER_NXP_TDA18271 83
|
||||
|
||||
/* tv card specific */
|
||||
#define TDA9887_PRESENT (1<<0)
|
||||
|
@@ -104,10 +104,6 @@ enum tvp514x_output {
|
||||
* @ vs_polarity: VSYNC Polarity configuration for current interface.
|
||||
*/
|
||||
struct tvp514x_platform_data {
|
||||
char *master;
|
||||
int (*power_set) (enum v4l2_power on);
|
||||
int (*ifparm) (struct v4l2_ifparm *p);
|
||||
int (*priv_data_set) (void *);
|
||||
/* Interface control params */
|
||||
bool clk_polarity;
|
||||
bool hs_polarity;
|
||||
|
@@ -135,6 +135,9 @@ enum {
|
||||
/* module adv7175: just ident 7175 */
|
||||
V4L2_IDENT_ADV7175 = 7175,
|
||||
|
||||
/* module adv7180: just ident 7180 */
|
||||
V4L2_IDENT_ADV7180 = 7180,
|
||||
|
||||
/* module saa7185: just ident 7185 */
|
||||
V4L2_IDENT_SAA7185 = 7185,
|
||||
|
||||
|
@@ -136,24 +136,6 @@ struct v4l2_subdev;
|
||||
struct v4l2_subdev_ops;
|
||||
|
||||
|
||||
/* Load an i2c module and return an initialized v4l2_subdev struct.
|
||||
Only call request_module if module_name != NULL.
|
||||
The client_type argument is the name of the chip that's on the adapter. */
|
||||
struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct i2c_adapter *adapter,
|
||||
const char *module_name, const char *client_type, u8 addr);
|
||||
/* Probe and load an i2c module and return an initialized v4l2_subdev struct.
|
||||
Only call request_module if module_name != NULL.
|
||||
The client_type argument is the name of the chip that's on the adapter. */
|
||||
struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct i2c_adapter *adapter,
|
||||
const char *module_name, const char *client_type,
|
||||
const unsigned short *addrs);
|
||||
/* Like v4l2_i2c_new_probed_subdev, except probe for a single address. */
|
||||
struct v4l2_subdev *v4l2_i2c_new_probed_subdev_addr(struct v4l2_device *v4l2_dev,
|
||||
struct i2c_adapter *adapter,
|
||||
const char *module_name, const char *client_type, u8 addr);
|
||||
|
||||
/* Load an i2c module and return an initialized v4l2_subdev struct.
|
||||
Only call request_module if module_name != NULL.
|
||||
The client_type argument is the name of the chip that's on the adapter. */
|
||||
@@ -163,6 +145,18 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev,
|
||||
int irq, void *platform_data,
|
||||
u8 addr, const unsigned short *probe_addrs);
|
||||
|
||||
/* Load an i2c module and return an initialized v4l2_subdev struct.
|
||||
Only call request_module if module_name != NULL.
|
||||
The client_type argument is the name of the chip that's on the adapter. */
|
||||
static inline struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct i2c_adapter *adapter,
|
||||
const char *module_name, const char *client_type,
|
||||
u8 addr, const unsigned short *probe_addrs)
|
||||
{
|
||||
return v4l2_i2c_new_subdev_cfg(v4l2_dev, adapter, module_name,
|
||||
client_type, 0, NULL, addr, probe_addrs);
|
||||
}
|
||||
|
||||
struct i2c_board_info;
|
||||
|
||||
struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
|
||||
|
@@ -100,8 +100,10 @@ struct video_device
|
||||
|
||||
Also note that vdev->minor is set to -1 if the registration failed. */
|
||||
int __must_check video_register_device(struct video_device *vdev, int type, int nr);
|
||||
int __must_check video_register_device_index(struct video_device *vdev,
|
||||
int type, int nr, int index);
|
||||
|
||||
/* Same as video_register_device, but no warning is issued if the desired
|
||||
device node number was already in use. */
|
||||
int __must_check video_register_device_no_warn(struct video_device *vdev, int type, int nr);
|
||||
|
||||
/* Unregister video devices. Will do nothing if vdev == NULL or
|
||||
vdev->minor < 0. */
|
||||
|
Reference in New Issue
Block a user