301 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef _AD_INT_H_
 | |
| #define _AD_INT_H_
 | |
| 
 | |
| //#include "sensor_cmd_if.h"
 | |
| #include "kflow_videocapture/ctl_sen.h"
 | |
| #define AD_MODULE_VERSION "1.01.012"
 | |
| 
 | |
| #define AD_CHIP_MAX CTL_SEN_ID_MAX
 | |
| #define AD_PIN_CTRL_MAX 20
 | |
| typedef struct {
 | |
| 	UINT32 pin;
 | |
| 	UINT32 lvl;
 | |
| 	UINT32 hold_time;
 | |
| } AD_OUT_PIN_CTL;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 mclk_sel;
 | |
|     UINT32 total_ctl_cnt;
 | |
|     AD_OUT_PIN_CTL pin_ctrl[AD_PIN_CTRL_MAX];
 | |
| } AD_PWR_CTL; //for linux/rtos
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 ofst_x;
 | |
| 	UINT32 ofst_y;
 | |
| } AD_CROP_OFST; //sie crop start
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 chip_id;
 | |
| 	UINT32 vin_id;
 | |
| 	UINT32 vout_id;
 | |
| 	BOOL inited;
 | |
| } AD_ID_MAP;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 vin_id;
 | |
| 	UINT32 data;
 | |
| } AD_INFO_CFG;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * Data format                                                                  *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_DATA_FMT_422 = 0,
 | |
| 	AD_DATA_FMT_420,
 | |
| 	AD_DATA_FMT_MAX,
 | |
| } AD_DATA_FMT;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * Data protocol                                                                  *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_DATA_PROTCL_CCIR601 = 0,
 | |
| 	AD_DATA_PROTCL_CCIR656,
 | |
| 	AD_DATA_PROTCL_CCIR709,
 | |
| 	AD_DATA_PROTCL_CCIR1120,
 | |
| 	AD_DATA_PROTCL_MAX,
 | |
| } AD_DATA_PRTCL;
 | |
| 
 | |
| typedef enum {
 | |
| 	AD_DATA_ORDER_YUYV = 0,
 | |
| 	AD_DATA_ORDER_YVYU,
 | |
| 	AD_DATA_ORDER_UYVY,
 | |
| 	AD_DATA_ORDER_VYUY,
 | |
| 	AD_DATA_ORDER_MAX,
 | |
| } AD_DATA_ORDER;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * Bus type	                                                                   *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_BUS_TYPE_PARALLEL = 0,
 | |
| 	AD_BUS_TYPE_SERIAL,
 | |
| 	AD_BUS_TYPE_MAX,
 | |
| } AD_BUS_TYPE;
 | |
| 
 | |
| 
 | |
| /*******************************************************************************
 | |
| * Data bit depth                                                               *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_DATA_DEPTH_8BIT = 0,
 | |
| 	AD_DATA_DEPTH_16BIT,
 | |
| 	AD_DATA_DEPTH_MAX,
 | |
| } AD_DATA_DEPTH;
 | |
| /*******************************************************************************
 | |
| * video output mux number                                                      *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_MUX_NUM_UNKNOWN = 0,
 | |
| 	AD_MUX_NUM_1 = 1,
 | |
| 	AD_MUX_NUM_2 = 2,
 | |
| 	AD_MUX_NUM_4 = 4,
 | |
| 	AD_MUX_NUM_8 = 8,
 | |
| 	AD_MUX_NUM_MAX,
 | |
| } AD_MUX_NUM;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * MIPI lane number                                                             *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_MIPI_LANE_NUM_1 = 1,
 | |
| 	AD_MIPI_LANE_NUM_2 = 2,
 | |
| 	AD_MIPI_LANE_NUM_4 = 4,
 | |
| } AD_MIPI_LANE_NUM;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * video detect type                                                            *
 | |
| *******************************************************************************/
 | |
| typedef enum {
 | |
| 	AD_TYPE_AUTO = 0, //
 | |
| 	AD_TYPE_AHD = 0x1, //bit 0
 | |
| 	AD_TYPE_TVI = 0x2, //bit 1
 | |
| 	AD_TYPE_CVI = 0x4, //bit 2
 | |
| 	AD_TYPE_SDI = 0x8, // bit 3
 | |
| 	AD_TYPE_MAX = 0x0f, // bit 0~3
 | |
| } AD_DET_TYPE;
 | |
| 
 | |
| 
 | |
| /*******************************************************************************
 | |
| * ad information                        									   *
 | |
| *******************************************************************************/
 | |
| typedef struct {
 | |
| 	UINT32 mode_idx;
 | |
| 	UINT32 width;
 | |
| 	UINT32 height;
 | |
| 	UINT32 fps;
 | |
| 	BOOL prog;
 | |
| } VDO_INFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	BOOL active;
 | |
| 	BOOL vloss;
 | |
| 
 | |
| 	VDO_INFO ui_format;
 | |
| 	VDO_INFO det_format;
 | |
| 	VDO_INFO cur_format;
 | |
| } AD_VIN;
 | |
| 
 | |
| typedef struct {
 | |
| 	BOOL active;
 | |
| 	AD_BUS_TYPE bus_type;
 | |
| 	AD_DATA_FMT fmt;
 | |
| 	AD_DATA_PRTCL protocal;
 | |
| 	AD_DATA_DEPTH depth;
 | |
| 	AD_MUX_NUM mux_num;
 | |
| 	UINT32 clk_rate;
 | |
| 	UINT32 data_rate;
 | |
| 
 | |
| 	// mipi
 | |
| 	UINT32 data_lane_num; // this mean the real HW data lanes, driver can use less than it.
 | |
| 	UINT32 virtual_ch;
 | |
| 
 | |
| 	UINT32 vout2vin_map;
 | |
| } AD_VOUT;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 mode; //[in]
 | |
| 	UINT32 out_id; //[in]
 | |
| 	AD_BUS_TYPE bus_type; //[out]
 | |
| 	AD_MUX_NUM mux_num; //[out] parallel
 | |
| 	UINT32 in_clock; //[out]
 | |
| 	UINT32 out_clock; //[out] parallel
 | |
| 	UINT32 data_rate; //[out]
 | |
| 	AD_MIPI_LANE_NUM mipi_lane_num; //[out] serial  //[out] serial, this mean the real data lanes which driver used
 | |
| 	AD_DATA_PRTCL protocal; //[out]
 | |
| 	AD_DATA_ORDER yuv_order; //[out]
 | |
| 	AD_CROP_OFST crop_start;
 | |
| } AD_MODE_INFO;
 | |
| 
 | |
| 
 | |
| #define AD_STS_UNKNOWN	0x00000000
 | |
| #define AD_STS_INIT 	0x00000001
 | |
| #define AD_STS_OPEN 	0x00000002
 | |
| 
 | |
| typedef struct {
 | |
| 	char *name;
 | |
| 
 | |
| 	UINT32 vin_max;
 | |
| 	UINT32 vout_max;
 | |
| 
 | |
| 	AD_VIN *vin;
 | |
| 	AD_VOUT *vout;
 | |
| 
 | |
| 	UINT32 i2c_addr;
 | |
| 	UINT32 status;		//keep current status
 | |
| 	UINT32 rev[5];		//0: sensor_id
 | |
| } AD_INFO;
 | |
| 
 | |
| 
 | |
| /*******************************************************************************
 | |
| * AD_CFGID item                         									   *
 | |
| *******************************************************************************/
 | |
| typedef struct {
 | |
| 	UINT32 vout_id;					///< [in]input port id
 | |
| 	AD_DATA_FMT fmt; 				///< [in/out]
 | |
| 	AD_DATA_PRTCL protocal;			///< [in/out]
 | |
| } AD_VOUT_DATA_FMT_INFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 vin_id;					///< [in]input port id
 | |
| 	UINT32 vout_id;					///< [in]output port id
 | |
| 	UINT32 id;						///< [in/out]virtual channel id
 | |
| } AD_VIRTUAL_CHANNEL_INFO;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 vin_id;					///< [in]input port id
 | |
| 	UINT32 vout_id;					///< [in]output port id
 | |
| 	UINT32 manual_idx;				///< [in] manual index, 0~2, CSI only support 3 manual setting
 | |
| 	CTL_SEN_MIPI_MANUAL_INFO data_info;	///< [in/out]manual CSI data type
 | |
| } AD_MIPI_MANUAL_DATA_TYPE;
 | |
| 
 | |
| typedef enum {
 | |
| 	AD_CFGID_DATA_FORMAT = 0,			///< AD_VOUT_DATA_FMT_INFO
 | |
| 	AD_CFGID_VIRTUAL_CH_ID,			///< AD_VIRTUAL_CHANNEL_INFO
 | |
| 	AD_CFGID_MIPI_MANUAL_ID, 		///< AD_VIRTUAL_CHANNEL_INFO
 | |
| 	AD_CFGID_MODE_IDX_SEL, 			///< MODE_INFO : get mode_idx from driver
 | |
| 	AD_CFGID_MODE_INFO,				///< AD_MODE_INFO : get mode_info from driver
 | |
| 	AD_CFGID_I2C_FUNC, 				///<
 | |
|     AD_CFGID_DET_CAM_TYPE,          ///< AD_DET_TYPE : assign multi-type for detection
 | |
| 	AD_CFGID_MAX,
 | |
| } AD_CFGID;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * i2c_ch: i2c channel number of each chip group                                *
 | |
| * i2c_addr: i2c slave address of each chip in the group                        *
 | |
| *******************************************************************************/
 | |
| typedef struct {
 | |
| 	UINT32 i2c_ch;
 | |
| 	UINT32 i2c_addr;
 | |
| 	AD_PWR_CTL pwr_info; //for Linux & Rtos
 | |
| } AD_INIT_INFO;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * vin_id:input port index                                                      *
 | |
| * vout_id:output port index                                                    *
 | |
| * mode: sensor mode, just for driver reference                                 *
 | |
| * ui_info: specify input setting                                               *
 | |
| * cur_info: real ad setting                                                    *
 | |
| * cur_update: should be set TRUE after changing mode correctly                  *
 | |
| *******************************************************************************/
 | |
| typedef struct {
 | |
| 	UINT32 vin_id; // [in]
 | |
| 	UINT32 vout_id; // [in]
 | |
| 	UINT32 mode; // [in]
 | |
| 	VDO_INFO ui_info; // [in]
 | |
| 	VDO_INFO cur_info; // [out]
 | |
| 	BOOL cur_update; //[out]
 | |
| } AD_CHGMODE_INFO;
 | |
| 
 | |
| /*******************************************************************************
 | |
| * vin_id:input port index                                                      *
 | |
| * det_info: input detection                                                    *
 | |
| * vin_loss: video signal loss                                                  *
 | |
| *******************************************************************************/
 | |
| typedef struct {
 | |
| 	UINT32 vin_id; //[in]
 | |
| 	VDO_INFO det_info; // [out]
 | |
| 	BOOL vin_loss; //[out]
 | |
| } AD_DECET_INFO;
 | |
| 
 | |
| typedef enum {
 | |
| 	AD_I2C_W = 0,
 | |
| 	AD_I2C_R,
 | |
| 	AD_I2C_MAX,
 | |
| } AD_I2C_RW;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT8 *data; // [in/out] put reg_addr+reg_value in data[0]~data[addr_len+data_len-1], I2C trasfer data[0] first; for I2c reading, received data will put in data[addr_len]~data[addr_len+data_len-1]
 | |
| 	UINT32 addr_len; //[in]
 | |
| 	UINT32 data_len; //[in]
 | |
| } AD_I2C_INFO;
 | |
| 
 | |
| typedef ER (*ad_i2c_rw_if)(UINT32 chip_id, AD_I2C_RW rw_flg, AD_I2C_INFO i2c_data);
 | |
| 
 | |
| typedef struct {
 | |
| 	ER(*open)(UINT32 chip_id, void *ext_data);								//ext_data type: AD_INIT_INFO
 | |
| 	ER(*close)(UINT32 chip_id, void *ext_data);								//ext_data type: NULL
 | |
| 	ER(*init)(UINT32 chip_id, void *ext_data);								//ext_data type: NULL
 | |
| 	ER(*uninit)(UINT32 chip_id, void *ext_data);							//ext_data type: NULL
 | |
| 	ER(*get_cfg)(UINT32 chip_id, AD_CFGID item, void *data);				//reference AD_CFGID
 | |
| 	ER(*set_cfg)(UINT32 chip_id, AD_CFGID item, void *data);				//reference AD_CFGID
 | |
| 	ER(*chgmode)(UINT32 chip_id, void *ext_data);							//ext_data type: AD_CHGMODE_INFO
 | |
| 	ER(*det_plug_in)(UINT32 chip_id, void *ext_data);						//ext_data type: NULL
 | |
| 	ER(*i2c_write)(UINT32 chip_id, UINT32 reg_addr, UINT32 value, UINT32 data_len);
 | |
| 	ER(*i2c_read)(UINT32 chip_id, UINT32 reg_addr, UINT32 *value, UINT32 data_len);
 | |
| 	ER(*pwr_ctl)(UINT32 chip_id, CTL_SEN_PWR_CTRL_FLAG flag, CTL_SEN_CLK_CB clk_cb);
 | |
| 	ER(*dbg_info)(char *str_cmd);	//ext_data type: NULL
 | |
| } AD_OP;
 | |
| 
 | |
| typedef struct {
 | |
| 	UINT32 chip_max;
 | |
| 	AD_INFO *chip;
 | |
| 
 | |
| 	UINT32 slav_tab_max;
 | |
| 	UINT32 *slav_addr_tab;
 | |
| 
 | |
| 	AD_OP op;
 | |
| } AD_DEV;
 | |
| #endif
 | 
