firmware/br-ext-chip-xiongmai/package/xiongmai-osdrv2/files/sensor/snsX123/XAx_cmos.c

1174 lines
33 KiB
C

#include "xm_type.h"
#include "xm_comm_isp.h"
#include "xm_comm_sns.h"
#include "xm_sns_ctrl.h"
#include "mpi_isp.h"
#include "mpi_ae.h"
#include "mpi_awb.h"
#include "xm_awb_comm.h"
#include "xm_print.h"
#include "XAx_cmos.h"
#include "xm530_isp.h"
XM_U16 gu16FullLines = 750;
XM_U32 gu32MaxAGainInit;
XM_U8 gu8Fps;
XM_U8 gu8MaxShutterOfst = 4;
XM_SENSOR_CHIP gSensorChip = SENSOR_CHIP_UNKNOW;
XM_U8 gu8Resolution = 1<<RSLTION_BIT_720P;
XM_U8 gu8GainMode = SMS_TAB3; // 增益模式
//static const ISP_CMOS_AGC_TABLE_S* pstIspAgcTable = NULL;
XM_U8 gAppEncoderinfo; // 0: AHD 1:CVI 2:TVI
ISP_CMOS_SNS_ATTR_S gstSnsAttr = {0};
ISP_SNS_REGS_INFO_S g_stSnsRegsInfo;
ISP_I2C_DATA_S gstIspI2CData[8];
XM_U32 gau32PreI2CData[8];
// 高温逻辑/ 普通增益Cal
GAIN_MODE_DT gstGainModeDt = {
.stOvTab = {0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF}
};
const XM_U16 gau16GainTbl_SmatSns[64]={
1024,1088,1152,1216,1280,1344,1408,1472,1536,1600,1664,1728,1792,1856,1920,1984,2048,2176,2304,2432,2560,2688,2816,
2944,3072,3200,3328,3456,3584,3712,3840,3968,4096,4352,4608,4864,5120,5376,5632,5888,6144,6400,6656,6912,7168,7424,
7680,7936,8192,8704,9216,9728,10240,10752,11264,11776,12288,12800,13312,13824,14336,14848,15360,15872
};
static const ISP_AWB_CALIBRATION_V2_S gstAwbCalCom = {
{0, 0, 4096, 2537, 3013, 1771, 593, 4096},
{4096, 4096, 0, 0, 4096, 4096, 4096, 1888},
{-536, -2892, -1496, -4096, -3037, -3792, -1331, -2560},
213,
0, 1675, 0, 2485,
{0, 540, 949, 1255, 1371, 1499, 1654, 1784, 2485, 0, 0, 0, 0, 0, 0, 0},
{2000, 2500, 2800, 4000, 4150, 5000, 6500, 7500, 12000, 0, 0, 0, 0, 0, 0, 0},
{1619, 1024, 2112, 0}
};
static const AE_SENSOR_DEFAULT_V2_S *pstAeSnsDef = NULL;
void (*pfn_gainLogic)(XM_U32 u32AllGain) = NULL;
void (*pfn_shutLogic)(XM_U32 u32IntTime) = NULL;
XM_U32 gu32ShutNow = 100;
XM_U32 gau32AllGain = 16;
XM_U32 gu32AGainNow = 0;
XM_U32 gu32AGainMin = 0;
XM_U32 gu32DGainNow = 0;
XM_U32 gu32DGainMin = 0;
XM_U8 gu8BlcDpcFlg = 0;
static const ISP_AWB_CALIBRATION_V2_S* pstAwbCal = NULL;
static const ISP_COLORMATRIX_AUTO_S* pstCcm = NULL;
static const ISP_CMOS_AGC_TABLE_S *pstAgcTab = NULL;
XM_U32 (*pfn_sensor_getlist)(XM_U16 *pu16Num) = NULL;
const ISP_CMOS_GAMMA_S gstIspGamma = //gamma 96
{
1,
{
0x000,0x00d,0x01a,0x027,0x034,0x041,0x04d,0x059,0x065,0x070,0x07c,0x087,0x092,0x09d,0x0a7,0x0b2,
0x0bc,0x0c7,0x0d1,0x0da,0x0e4,0x0ee,0x0f7,0x100,0x109,0x112,0x11b,0x124,0x12d,0x135,0x13d,0x146,
0x14e,0x15d,0x16d,0x17c,0x18a,0x198,0x1a6,0x1b4,0x1c1,0x1ce,0x1da,0x1e6,0x1f2,0x1fe,0x209,0x214,
0x21f,0x233,0x247,0x25a,0x26c,0x27e,0x28f,0x29f,0x2ae,0x2bd,0x2cb,0x2d9,0x2e6,0x2f3,0x2ff,0x30b,
0x316,0x321,0x32c,0x337,0x341,0x34a,0x354,0x35d,0x366,0x36e,0x377,0x37f,0x387,0x38e,0x396,0x39d,
0x3a4,0x3ab,0x3b2,0x3b8,0x3bf,0x3c5,0x3cb,0x3d1,0x3d7,0x3dc,0x3e2,0x3e7,0x3ec,0x3f2,0x3f7,0x3fc,
0x3ff
}
};
static XM_S32 cmos_get_isp_default(ISP_CMOS_DEFAULT_S *pstDef)
{
if (XM_NULL == pstDef)
{
return -1;
}
pstDef->stGamma.bValid = XM_TRUE;
ExtCfg_GammaTab_Get(0, pstDef->stGamma.au16Gamma);
pstDef->stGamma.bValid = XM_TRUE;
XM_MPI_ISP_Memncpy((XM_U8 *)&(pstDef->stGamma),(XM_U8 *)&(gstIspGamma),sizeof(ISP_CMOS_GAMMA_S));
XM_MPI_ISP_Memncpy((XM_U8*)&(pstDef->stAgcTbl), (XM_U8*)pstAgcTab, sizeof(ISP_CMOS_AGC_TABLE_S));
return 0;
}
static XM_S32 cmos_get_ae_default(AE_SENSOR_DEFAULT_S *pstAeSnsDft)
{
AE_SENSOR_DEFAULT_V2_S stAeSnsDef;
XM_S32 s32Ret;
if (XM_NULL == pstAeSnsDft)
{
return -1;
}
pstAeSnsDft->u32FullLinesStd = HD720P_LINES-4;
pstAeSnsDft->u8AeCompensation = 50;
pstAeSnsDft->u32LinesPer500ms = pstAeSnsDft->u32FullLinesStd*25/2;
pstAeSnsDft->u32FlickerFreq = 0;
pstAeSnsDft->u32ISPDgainShift = 8;
pstAeSnsDft->u32MinISPDgain = 1 << pstAeSnsDft->u32ISPDgainShift;
pstAeSnsDft->u32InitExp[0] = 750;
pstAeSnsDft->u32InitExp[1] = 750;
pstAeSnsDft->u32InitExp[2] = 750;
pstAeSnsDft->u32InitExp[3] = 750;
pstAeSnsDft->u16AlgMode = 0x00;
pstAeSnsDft->u32UpdateCfg = 0x01000003;
if(ExtCfg_CheckFun(1, ROM_FUN_AEDEF) == XM_SUCCESS)
{
stAeSnsDef.u32MaxIntTime = 700;
cmos_get_ae_default_ext(&stAeSnsDef);
pstAeSnsDef = (const AE_SENSOR_DEFAULT_V2_S *)&stAeSnsDef;
s32Ret = ExtCfg_Lum_Get();
if(s32Ret!= XM_FAILURE) pstAeSnsDft->u8AeCompensation = (XM_U8)s32Ret;
}
if(pstAeSnsDef != NULL)
{
pstAeSnsDft->u32MaxIntTime = pstAeSnsDef->u32MaxIntTime;
pstAeSnsDft->u32MinIntTime = pstAeSnsDef->u32MinIntTime;
pstAeSnsDft->u32MaxAgain = pstAeSnsDef->u32MaxAgain;
pstAeSnsDft->u32MinAgain = pstAeSnsDef->u32MinAgain;
pstAeSnsDft->u32MaxDgain = pstAeSnsDef->u32MaxDgain;
pstAeSnsDft->u32MinDgain = pstAeSnsDef->u32MinDgain;
pstAeSnsDft->u32MaxISPDgain= pstAeSnsDef->u32MaxISPDgain;
pstAeSnsDft->u32UpdateCfg = pstAeSnsDef->u32UpdateCfg;
pstAeSnsDft->u32InitExp[0] = pstAeSnsDef->u32InitExp[0];
pstAeSnsDft->u32InitExp[1] = pstAeSnsDef->u32InitExp[1];
pstAeSnsDft->u32InitExp[2] = pstAeSnsDef->u32InitExp[2];
pstAeSnsDft->u32InitExp[3] = pstAeSnsDef->u32InitExp[3];
pstAeSnsDft->u16AlgMode = pstAeSnsDef->u16AlgMode;
}
gu32MaxAGainInit = pstAeSnsDef->u32MaxAgain;
return 0;
}
#if 0
XM_S32 cmos_set_gainMode_data(XM_U8 u8Mode, GAIN_MODE_DT *pstGainDt)
{
XM_U32 u32Len;
u32Len = sizeof(GAIN_MODE_DT);
XM_MPI_ISP_Memncpy((XM_U8*)&gstGainModeDt,(XM_U8*)pstGainDt, u32Len);
#ifdef DEBUG_ON
// 调试用
switch(u8Mode)
{
case SMS_LINE:
case SOI_TAB: DEBUG("cmos_set_gainMode_data(Line):\n");
PrintInt(8,(XM_U32)gstGainModeDt.stLinear.u8AgainSft); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stLinear.u8AgainMin); DBG("\r\n");
break;
case SMS_TAB:
case SMS_TAB1:
case SMS_TAB2:
case SMS_TAB3: DEBUG("cmos_set_gainMode_data(SmsTab):\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8En); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8MinGain); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[0]); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitUp); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitDn); DBG("\r\n");
break;
case OV_TAB:
case OV_LINE:
DEBUG("cmos_set_gainMode_data(OV):\n");
PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Hold); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Again); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Dgain); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stOvTab.u32Blc); DBG("\r\n");
break;
case PS_LINE: DEBUG("cmos_set_gainMode_data(PS):\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u8En); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[0]); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u16Reg[1]); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitUp); DBG("\r\n");
PrintInt(8,(XM_U32)gstGainModeDt.stHtLgc.u32LimitDn); DBG("\r\n");
break;
default: DEBUG("cmos_set_gainMode_data: NotSupport\n");
break;
}
DEBUG("cmos_set_gainMode_data over!\n");
#endif
return XM_SUCCESS;
}
#endif
XM_S32 cmos_set_sns_attr(ISP_CMOS_SNS_ATTR_S *pstSnsAttr)
{
if(pstSnsAttr == NULL)
{
ERR("cmos_set_sns_attr failed!\n");
return XM_FAILURE;
}
XM_MPI_ISP_Memncpy((XM_U8*)&gstSnsAttr, (XM_U8*)pstSnsAttr, sizeof(ISP_CMOS_SNS_ATTR_S));
return XM_SUCCESS;
}
XM_S32 cmos_get_sns_attr(ISP_CMOS_SNS_ATTR_S *pstSnsAttr)
{
if(pstSnsAttr == NULL)
{
ERR("cmos_get_sns_attr failed!\n");
return XM_FAILURE;
}
XM_MPI_ISP_Memncpy((XM_U8*)pstSnsAttr, (XM_U8*)&gstSnsAttr, sizeof(ISP_CMOS_SNS_ATTR_S));
return XM_SUCCESS;
}
XM_VOID cmos_gain_calc_table_com(XM_U32 u32InTimes,AE_SENSOR_GAININFO_S *pstAeSnsGainInfo)
{
if(XM_NULL == pstAeSnsGainInfo)
{
return;
}
pstAeSnsGainInfo->u32GainDb = u32InTimes;
pstAeSnsGainInfo->u32SnsTimes = u32InTimes;
return;
}
static XM_S32 cmos_get_awb_default(AWB_SENSOR_DEFAULT_S *pstAwbSnsDft)
{
const AWB_COEF_TABLE_S* pstAwb;
if (XM_NULL == pstAwbSnsDft)
{
return XM_FAILURE;
}
pstAwb = (AWB_COEF_TABLE_S*)pstAwbCal;
// Awb
pstAwbSnsDft->pstRbTable = pstAwb;
// CCM
if(ExtCfg_CCM_Set(&(pstAwbSnsDft->stCcm)) != XM_SUCCESS)
{
XM_MPI_ISP_Memncpy((XM_U8*)&(pstAwbSnsDft->stCcm), (XM_U8*)pstCcm, sizeof(ISP_COLORMATRIX_AUTO_S));
}
return XM_SUCCESS;
}
/****************************************************************************
* callback structure *
****************************************************************************/
static XM_S32 cmos_init_sensor_exp_function(ISP_SENSOR_EXP_FUNC_S *pstSensorExpFunc)
{
pstSensorExpFunc->pfn_cmos_sensor_init = NULL;
pstSensorExpFunc->pfn_cmos_get_isp_default = cmos_get_isp_default;
pstSensorExpFunc->pfn_cmos_set_pixel_detect = NULL;
pstSensorExpFunc->pfn_cmos_get_sensor_max_resolution = NULL;
pstSensorExpFunc->pfn_cmos_set_mirror_flip = NULL;
return 0;
}
static XM_S32 cmos_init_ae_exp_function(AE_SENSOR_EXP_FUNC_S *pstExpFuncs)
{
pstExpFuncs->pfn_cmos_get_ae_default = cmos_get_ae_default;
pstExpFuncs->pfn_cmos_fps_get = NULL;
pstExpFuncs->pfn_cmos_fps_set = NULL;
pstExpFuncs->pfn_cmos_slow_framerate_set= NULL;
pstExpFuncs->pfn_cmos_inttime_update = NULL;
pstExpFuncs->pfn_cmos_gains_update = NULL;
pstExpFuncs->pfn_cmos_again_calc_table = NULL;
pstExpFuncs->pfn_cmos_dgain_calc_table = NULL;
return 0;
}
static XM_S32 cmos_init_awb_exp_function(AWB_SENSOR_EXP_FUNC_S *pstExpFuncs)
{
pstExpFuncs->pfn_cmos_get_awb_default = cmos_get_awb_default;
return 0;
}
void sensor_init()
{
XM_U32 u32Addr;
XM_U16 u16Num;
if(pfn_sensor_getlist == NULL) return;
u32Addr = (*pfn_sensor_getlist)(&u16Num);
if((gSnsRegAddrByte == 2) || (gSnsRegDataByte == 2))
sensor_input_2(u32Addr,u16Num);
else
sensor_input_1(u32Addr,u16Num);
DEBUG("sensor_init Ok!\n");
}
int sensor_register_callback(ISP_DEV IspDev)
{
XM_S32 s32Ret;
ALG_LIB_S stLib;
ISP_SENSOR_REGISTER_S stIspRegister;
AE_SENSOR_REGISTER_S stAeRegister;
AWB_SENSOR_REGISTER_S stAwbRegister;
IspDev = (IspDev<0)?0:((IspDev>(ISP_NUM_MAX-1))?(ISP_NUM_MAX-1):IspDev);
gu32AGainNow = 0;
gu32AGainMin = 0;
gu32DGainNow = 0;
gu32DGainMin = 0;
gu8BlcDpcFlg = 0;
pstAwbCal = NULL;
pstCcm = NULL;
pstAgcTab = NULL;
pstAeSnsDef = NULL;
cmos_init_sensor_exp_function(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function(&(stAwbRegister.stSnsExp));
switch(gSensorChip)
{
#ifdef SENS_X1X_SOIH65
case SENSOR_CHIP_H65:
cmos_init_sensor_exp_function_soi(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_soi(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_h65;
pstCcm = &g_stAwbCcm_h65;
pstAgcTab = &g_stIspAgcTable_h65;
pstAeSnsDef = &gstAeSnsDef_h65;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_h65;
#endif
break;
#endif
#ifdef SENS_X1X_SP140A
case SENSOR_CHIP_SP140A:
cmos_init_sensor_exp_function_sp140A(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sp140A(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_sp140A;
pstCcm = &g_stAwbCcm_sp140A;
pstAgcTab = &g_stIspAgcTable_sp140A;
pstAeSnsDef = &gstAeSnsDef_sp140A;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sp140A;
#endif
break;
#endif
#ifdef SENS_X1X_SOIH62
case SENSOR_CHIP_H62:
cmos_init_sensor_exp_function_h62(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_h62(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_h62;
pstCcm = &g_stAwbCcm_h62;
pstAgcTab = &g_stIspAgcTable_h62;
pstAeSnsDef = &gstAeSnsDef_h62;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_h62;
#endif
break;
#endif
#ifdef SENS_X1X_OV9732
case SENSOR_CHIP_OV9732:
cmos_init_sensor_exp_function_OV9732(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_OV9732(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_OV9732;
pstCcm = &g_stAwbCcm_OV9732;
pstAgcTab = &g_stIspAgcTable_OV9732;
pstAeSnsDef = &gstAeSnsDef_OV9732;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_OV9732;
#endif
break;
#endif
#ifdef SENS_X1X_SC1235
case SENSOR_CHIP_SC1235:
cmos_init_sensor_exp_function_sc2235(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc1235(&(stAeRegister.stSnsExp));
pfn_gainLogic = gainLogic_sc1235;
pfn_shutLogic = shutLogic_sc2235;
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_sc1235;
pstCcm = &g_stAwbCcm_sc1235;
pstAgcTab = &g_stIspAgcTable_sc1235;
pstAeSnsDef = &gstAeSnsDef_sc1235;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc1235;
#endif
break;
#endif
#ifdef SENS_X1X_SC2145H
case SENSOR_CHIP_SC2145H:
cmos_init_sensor_exp_function_sc2145H(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2145H(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
if(gu16SensorSwitch==2)
{
pstAwbCal = &gstAwbCal_sc2145H_A;
}
else
{
pstAwbCal = &gstAwbCal_sc2145H_B;
}
pstCcm = &g_stAwbCcm_sc2145H;
pstAgcTab = &g_stIspAgcTable_sc2145H;
pstAeSnsDef = &gstAeSnsDef_sc2235;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2145H;
#endif
break;
#endif
#ifdef SENS_X20_IMX323
case SENSOR_CHIP_IMX323:
cmos_init_sensor_exp_function_imx323(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_imx323(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_imx323;
pstCcm = &g_stAwbCcm_imx323;
pstAgcTab = &g_stIspAgcTable_imx323;
pstAeSnsDef = &gstAeSnsDef_imx323;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_imx323;
#endif
break;
#endif
#ifdef SENS_X20_IMX307
case SENSOR_CHIP_IMX307:
cmos_init_sensor_exp_function_imx307(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_imx307(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_imx307;
pstCcm = &g_stAwbCcm_imx307;
pstAgcTab = &g_stIspAgcTable_imx307;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_imx307;
#endif
break;
#endif
#ifdef SENS_X20_F37
case SENSOR_CHIP_F37:
cmos_init_sensor_exp_function_F37(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_F37(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_F37;
pstCcm = &g_stAwbCcm_F37;
pstAgcTab = &g_stIspAgcTable_F37;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_F37;
#endif
break;
#endif
#ifdef SENS_X20_SC2335
case SENSOR_CHIP_SC2335:
cmos_init_sensor_exp_function_sc2335(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2335(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_sc2335(&(stAwbRegister.stSnsExp));
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2335;
break;
#endif
#ifdef SENS_X20_SP2305
case SENSOR_CHIP_SP2305:
cmos_init_sensor_exp_function_SP2305(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_SP2305(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_SP2305;
pstCcm = &g_stAwbCcm_SP2305;
pstAgcTab = &g_stIspAgcTable_SP2305;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_SP2305;
#endif
break;
#endif
#ifdef SENS_X20_MIS2003
case SENSOR_CHIP_MIS2003:
cmos_init_sensor_exp_function_MIS2003(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_MIS2003(&(stAeRegister.stSnsExp));
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_MIS2003;
pstCcm = &g_stAwbCcm_MIS2003;
pstAgcTab = &g_stIspAgcTable_MIS2003;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_MIS2003;
#endif
break;
#endif
#ifdef SENS_X20_SC2235
case SENSOR_CHIP_SC2235:
cmos_init_sensor_exp_function_sc2235(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2235(&(stAeRegister.stSnsExp));
pfn_gainLogic = gainLogic_sc2235;
pfn_shutLogic = shutLogic_sc2235;
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_sc2235;
pstCcm = &g_stAwbCcm_sc2235;
pstAgcTab = &g_stIspAgcTable_sc2235;
pstAeSnsDef = &gstAeSnsDef_sc2235;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2235;
#endif
break;
#endif
#ifdef SENS_X20_SC2235P
case SENSOR_CHIP_SC2235P:
cmos_init_sensor_exp_function_sc2235P(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2235P(&(stAeRegister.stSnsExp));
pfn_gainLogic = gainLogic_sc2235P;
pfn_shutLogic = shutLogic_sc2235;
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_sc2235P;
pstCcm = &g_stAwbCcm_sc2235P;
pstAgcTab = &g_stIspAgcTable_sc2235P;
pstAeSnsDef = &gstAeSnsDef_sc2235p;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2235P;
#endif
break;
#endif
#ifdef SENS_X20_SC307E
case SENSOR_CHIP_SC307E:
cmos_init_sensor_exp_function_sc307e(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc307e(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_sc307e(&(stAwbRegister.stSnsExp));
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc307e;
break;
#endif
#ifdef SENS_X20_SC2235E
case SENSOR_CHIP_SC2235E:
cmos_init_sensor_exp_function_sc2235E(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2235E(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_sc2235E(&(stAwbRegister.stSnsExp));
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2235E;
break;
#endif
#ifdef SENS_X20_SC2145
case SENSOR_CHIP_SC2145:
cmos_init_sensor_exp_function_sc2145(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc2145(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_sc2145(&(stAwbRegister.stSnsExp));
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc2145;
break;
#endif
#ifdef SENS_X20_SC3035
case SENSOR_CHIP_SC3035:
cmos_init_sensor_exp_function_sc3035(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc3035(&(stAeRegister.stSnsExp));
break;
#endif
#ifdef SENS_X30_SC4236
case SENSOR_CHIP_SC4236:
cmos_init_sensor_exp_function_sc4236(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc4236(&(stAeRegister.stSnsExp));
pfn_gainLogic = gainLogic_sc4236;
pfn_shutLogic = shutLogic_sc4236;
#if(defined SOC_SYSTEM) || (defined SOC_ALIOS)
pstAwbCal = &gstAwbCal_sc4236;
pstCcm = &g_stAwbCcm_sc4236;
pstAgcTab = &g_stIspAgcTable_sc4236;
pstAeSnsDef = &gstAeSnsDef_sc4236;
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_sc4236;
#endif
break;
#endif
#ifdef SENS_X30_AUGE
case SENSOR_CHIP_AUGE:
cmos_init_sensor_exp_function_auge(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_auge(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_auge(&(stAwbRegister.stSnsExp));
gu8MaxShutterOfst = 4;
pfn_sensor_getlist = sensor_getlist_auge;
break;
#endif
#ifdef SENS_X30_SC3035
case SENSOR_CHIP_SC3035:
cmos_init_sensor_exp_function_sc3035(&(stIspRegister.stSnsExp));
cmos_init_ae_exp_function_sc3035(&(stAeRegister.stSnsExp));
cmos_init_awb_exp_function_sc3035(&(stAwbRegister.stSnsExp));
pfn_sensor_getlist = sensor_getlist_sc3035;
gu8MaxShutterOfst = 4;
break;
#endif
default:
#ifdef DEBUG_ON
ERR("Not Support this sensor!\n");
#endif
return XM_FAILURE;
break;
}
if(ExtCfg_CheckFun(1, ROM_FUN_SNSINIT) == XM_SUCCESS)
stIspRegister.stSnsExp.pfn_cmos_sensor_init = sensor_init_ext;
else
stIspRegister.stSnsExp.pfn_cmos_sensor_init = sensor_init;
if(ExtCfg_CheckFun(1, ROM_FUN_FPS) == XM_SUCCESS)
stAeRegister.stSnsExp.pfn_cmos_fps_set = cmos_fps_set_ex;
if(ExtCfg_CheckFun(1, ROM_FUN_MF) == XM_SUCCESS)
stIspRegister.stSnsExp.pfn_cmos_set_mirror_flip = cmos_set_mirror_flip_ex;
if(ExtCfg_CheckFun(1, ROM_FUN_TABAGAIN) == XM_SUCCESS)
stAeRegister.stSnsExp.pfn_cmos_again_calc_table = cmos_again_calc_table_ex;
if(ExtCfg_CheckFun(1, ROM_FUN_TABDGAIN) == XM_SUCCESS)
stAeRegister.stSnsExp.pfn_cmos_dgain_calc_table = cmos_dgain_calc_table_ex;
#if 0
if(ExtCfg_CheckFun(1, ROM_FUN_UPDATEGAIN) == XM_SUCCESS)
stAeRegister.stSnsExp.pfn_cmos_gains_update = cmos_gains_update_ex;
if(ExtCfg_CheckFun(1, ROM_FUN_UPDATESHUT) == XM_SUCCESS)
stAeRegister.stSnsExp.pfn_cmos_inttime_update = cmos_inttime_update_ex;
#endif
if(ExtCfg_CheckFun(1, ROM_FUN_GAINLOGIC) == XM_SUCCESS)
pfn_gainLogic = gainLogic_ex;
if(ExtCfg_CheckFun(1, ROM_FUN_SHUTLOGIC) == XM_SUCCESS)
pfn_shutLogic = shutLogic_ex;
if(ExtCfg_GetExtCfgFlg() && (stIspRegister.stSnsExp.pfn_cmos_sensor_init))
{
stIspRegister.stSnsExp.pfn_cmos_sensor_init();
}
s32Ret = XM_MPI_ISP_SensorRegCallBack((XM_S32)gSensorChip, (const ISP_SENSOR_REGISTER_S * const)&stIspRegister);
if (s32Ret)
{
return s32Ret;
}
stLib.s32Id = (XM_S32)gSensorChip;
XM_MPI_ISP_Memncpy((XM_U8*)stLib.acLibName, (XM_U8*)XM_AE_LIB_NAME, sizeof(XM_AE_LIB_NAME));
s32Ret = XM_MPI_AE_SensorRegCallBack(IspDev, &stLib, (XM_S32)gSensorChip, &stAeRegister);
if (s32Ret)
{
return s32Ret;
}
stLib.s32Id = (XM_S32)gSensorChip;
XM_MPI_ISP_Memncpy((XM_U8*)stLib.acLibName, (XM_U8*)XM_AWB_LIB_NAME, sizeof(XM_AWB_LIB_NAME));
s32Ret = XM_MPI_AWB_SensorRegCallBack(&stLib, (XM_S32)gSensorChip, &stAwbRegister);
if (s32Ret)
{
return s32Ret;
}
return 0;
}
int sensor_unregister_callback(ISP_DEV IspDev)
{
XM_S32 s32Ret;
ALG_LIB_S stLib;
IspDev = (IspDev<0)?0:((IspDev>(ISP_NUM_MAX-1))?(ISP_NUM_MAX-1):IspDev);
s32Ret = XM_MPI_ISP_SensorUnRegCallBack((XM_S32)gSensorChip);
if (s32Ret)
{
return s32Ret;
}
stLib.s32Id = (XM_S32)gSensorChip;
s32Ret = XM_MPI_AE_SensorUnRegCallBack(IspDev, &stLib, (XM_S32)gSensorChip);
if (s32Ret)
{
return s32Ret;
}
return 0;
}
int sensor_mode_set(XM_U8 u8Mode)
{
return 0;
}
int sensor_mode_get()
{
int s32RsFlg = 1<<RSLTION_BIT_BUTT;
return s32RsFlg;
}
static int sensor_get_chip_in(I2C_DATA_S *pstI2CData)
{
XM_U32 u32SnsChipFilt = SENSOR_CHIP_UNKNOW;
XM_S32 s32Id,s32Tmp,s32version=0;
if(pstI2CData == NULL)
return -1;
START_TAB:
switch(gSensorChip)
{
case SENSOR_CHIP_UNKNOW:
//break;
;
case SENSOR_CHIP_H62:
case SENSOR_CHIP_H65:
if((u32SnsChipFilt != SENSOR_CHIP_H62) &&
(u32SnsChipFilt != SENSOR_CHIP_H65))
{
// H42/H81/H62
gSnsDevAddr = 0x30;
gSnsRegAddrByte = 0x1;
gSnsRegDataByte = 0x1;
sensor_write_register(0x12, 0x80);
sensor_write_register(0x12, 0x80);
s32Tmp = sensor_read_register(0x0A);
s32Tmp = sensor_read_register(0x0A);
s32Id = sensor_read_register(0x0B);
s32Id = ((s32Tmp<<8) |s32Id);
if(s32Id == 0xA062) // H62
{
gSensorChip = SENSOR_CHIP_H62;
DEBUG("H62!\n");
goto RET_TAB;
}
else if(s32Id == 0x0A65) // H65
{
gSensorChip = SENSOR_CHIP_H65;
DEBUG("H65!\n");
goto RET_TAB;
}
// rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_IMX323:
if(u32SnsChipFilt != SENSOR_CHIP_IMX323)
{
gSnsDevAddr = 0x1A;
gSnsRegAddrByte = 0x2;
gSnsRegDataByte = 0x1;
s32Id = sensor_read_register(0x3013);
s32Id = sensor_read_register(0x3013);
s32Id = sensor_read_register(0x3013);
if(s32Id == 0x40)
{
gSensorChip = SENSOR_CHIP_IMX323;
DEBUG("IMX323!\n");
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_F37:
if(u32SnsChipFilt != SENSOR_CHIP_F37)
{
gSnsDevAddr = 0x40;
gSnsRegAddrByte = 0x1;
gSnsRegDataByte = 0x1;
s32Id = sensor_read_register(0x0A);
s32Id = ((s32Id<<8)|(sensor_read_register(0x0B)));
if(s32Id == 0x0F37)
{
gSensorChip = SENSOR_CHIP_F37;
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_IMX291:
case SENSOR_CHIP_IMX307:
if((u32SnsChipFilt != SENSOR_CHIP_IMX291) &&
(u32SnsChipFilt != SENSOR_CHIP_IMX307))
{
gSnsDevAddr = 0x1A;
gSnsRegAddrByte = 0x2;
gSnsRegDataByte = 0x1;
sensor_write_register(0x3003, 0x01);
SysDelay_ms(500);
s32Id = sensor_read_register(0x3008);
s32Id = ((s32Id<<8)|(sensor_read_register(0x301E)));
if(s32Id == 0xA0B2)
{
// IMX291
s32Id = sensor_read_register(0x31dc) & 0x7;
if((s32Id == 0x00)||(s32Id == 0x01))//291和290做到了一起
{
gSensorChip = SENSOR_CHIP_IMX291;
goto RET_TAB;
}
// IMX307
s32Id = sensor_read_register(0x31dc) & 0x6;
if(s32Id == 0x4)
{
gSensorChip = SENSOR_CHIP_IMX307;
goto RET_TAB;
}
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
//SmartSns
case SENSOR_CHIP_SC1235:
case SENSOR_CHIP_SC2235E:
case SENSOR_CHIP_SC2235P:
case SENSOR_CHIP_SC2235:
case SENSOR_CHIP_SC307E:
case SENSOR_CHIP_SC2145H:
case SENSOR_CHIP_SC4236:
case SENSOR_CHIP_SC2145:
case SENSOR_CHIP_AUGE:
case SENSOR_CHIP_SC2335:
case SENSOR_CHIP_SC3035:
if( (u32SnsChipFilt != SENSOR_CHIP_SC1235) &&
(u32SnsChipFilt != SENSOR_CHIP_SC2235E) &&
(u32SnsChipFilt != SENSOR_CHIP_SC2235P) &&
(u32SnsChipFilt != SENSOR_CHIP_SC2235) &&
(u32SnsChipFilt != SENSOR_CHIP_SC307E) &&
(u32SnsChipFilt != SENSOR_CHIP_SC2145H) &&
(u32SnsChipFilt != SENSOR_CHIP_SC4236) &&
(u32SnsChipFilt != SENSOR_CHIP_SC2145) &&
(u32SnsChipFilt != SENSOR_CHIP_AUGE) &&
(u32SnsChipFilt != SENSOR_CHIP_SC3035)&&
(u32SnsChipFilt != SENSOR_CHIP_SC2335))
{
gSnsDevAddr = 0x30;
gSnsRegAddrByte = 0x2;
gSnsRegDataByte = 0x1;
sensor_write_register(0x0103,0x01); // reset all registers
sensor_write_register(0x0103,0x01); // reset all registers
SysDelay_ms(100);
s32Tmp = sensor_read_register(0x3107);
s32Tmp = sensor_read_register(0x3107);
s32Id = (s32Tmp<<8) | sensor_read_register(0x3108);
s32version = sensor_read_register(0x3109);
if(s32Id == 0x1235)
{
gSensorChip = SENSOR_CHIP_SC1235;
DEBUG("SC1235!\n");
goto RET_TAB;
}
else if(s32Id == 0x2232)
{
if(s32version == 0x20)
{
gSensorChip = SENSOR_CHIP_SC2235E;
DEBUG("SC2235E!\n");
}
else // 0x01
{
gSensorChip = SENSOR_CHIP_SC2235P;
DEBUG("SC2235P!\n");
}
goto RET_TAB;
}
else if(s32Id == 0x2235)
{
gSensorChip = SENSOR_CHIP_SC2235;
DEBUG("SC2235!\n");
goto RET_TAB;
}
else if(s32Id == 0x2238)
{
gSensorChip = SENSOR_CHIP_SC307E;
DEBUG("SC307E!\n");
goto RET_TAB;
}
else if(s32Id == 0x1245)
{
gSensorChip = SENSOR_CHIP_SC2145H;
gu16SensorSwitch = sensor_read_register(0x3020);
DEBUG("SC2145H_%c!\n",(gu16SensorSwitch)==2?'A':'B');
goto RET_TAB;
}
else if(s32Id == 0x3235)
{
gSensorChip = SENSOR_CHIP_SC4236;
DEBUG("SC4236!\n");
goto RET_TAB;
}
else if(s32Id == 0x2145)
{
gSensorChip = SENSOR_CHIP_SC2145;
DEBUG("SC2145!\n");
goto RET_TAB;
}
else if(s32Id == 0xCC05)
{
gSensorChip = SENSOR_CHIP_AUGE;
DEBUG("AUGE!\n");
goto RET_TAB;
}
else if(s32Id == 0x3035)
{
gSensorChip = SENSOR_CHIP_SC3035;
DEBUG("SC3035!\n");
goto RET_TAB;
}
else if(s32Id == 0xCB14)
{
gSensorChip = SENSOR_CHIP_SC2335;
DEBUG("SC2335!\n");
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_SP140A:
case SENSOR_CHIP_SP2305:
if((u32SnsChipFilt != SENSOR_CHIP_SP140A)&&(u32SnsChipFilt != SENSOR_CHIP_SP2305))
{
gSnsDevAddr = 0x3C;
gSnsRegAddrByte = 0x1;
gSnsRegDataByte = 0x1;
sensor_write_register(0xfd,0x00);
sensor_write_register(0xfd,0x00);
s32Tmp = sensor_read_register(0x02);
s32Id = sensor_read_register(0x03);
s32Id = ((s32Tmp<<8) |s32Id);
if(s32Id == 0x140A)
{
gSensorChip = SENSOR_CHIP_SP140A;
DEBUG("SC140A!\n");
goto RET_TAB;
}
else if(s32Id == 0x2735)
{
gSensorChip = SENSOR_CHIP_SP2305;
DEBUG("SP2305!\n");
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_MIS2006:
case SENSOR_CHIP_MIS2003:
if((u32SnsChipFilt != SENSOR_CHIP_MIS2006)&&
(u32SnsChipFilt != SENSOR_CHIP_MIS2003))
{
gSnsDevAddr = 0x30;
gSnsRegAddrByte = 0x2;
gSnsRegDataByte = 0x1;
sensor_write_register(0x3006,0x01); // reset all registers
SysDelay_ms(100);
s32Tmp = sensor_read_register(0x3000);
s32Id = sensor_read_register(0x3001);
s32Id = ((s32Tmp<<8) |s32Id);
s32version = sensor_read_register(0x3002);
if(s32Id == 0x2003)
{
gSensorChip = SENSOR_CHIP_MIS2003;
DEBUG("MIS2003 !\n");
goto RET_TAB;
}
else if(s32Id == 0x2006)
{
if(s32version == 0x01)
{
gSensorChip = SENSOR_CHIP_MIS2006;
DEBUG("MIS2006 VER 01!\n");
}
else // 0x01
{
gSensorChip = SENSOR_CHIP_MIS2006;
DEBUG("MIS2006 VER Other!\n");
}
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
case SENSOR_CHIP_OV9732:
if(u32SnsChipFilt != SENSOR_CHIP_OV9732)
{
gSnsDevAddr = 0x36;
gSnsRegAddrByte = 0x2;
gSnsRegDataByte = 0x1;
//sensor_write_register(0x3013,0x01); // reset all registers
//SysDelay_ms(100);
s32Tmp = sensor_read_register(0x300A);
s32Id = sensor_read_register(0x300B);
s32Id = ((s32Tmp<<8) |s32Id);
if(s32Id == 0x9732)
{
gSensorChip = SENSOR_CHIP_OV9732;
DEBUG("OV9732 !\n");
goto RET_TAB;
}
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
}
default:
//rescan
if(gSensorChip != SENSOR_CHIP_UNKNOW)
{
u32SnsChipFilt = gSensorChip;
gSensorChip = SENSOR_CHIP_UNKNOW;
goto START_TAB;
}
gSensorChip = SENSOR_CHIP_UNKNOW;
break;
}
gSensorChip = SENSOR_CHIP_UNKNOW;
RET_TAB:
pstI2CData->dev_addr = gSnsDevAddr;
pstI2CData->addr_byte_num = gSnsRegAddrByte;
pstI2CData->data_byte_num = gSnsRegDataByte;
return gSensorChip;
}
int sensor_get_chip(I2C_DATA_S *pstI2CData)
{
XM_U32 u32Addr;
XM_U8 u8i;
XM_U8 au8Data[4];
// 1. 获取I2C 地址
if(ExtCfg_BaseAddrGet(0, ROM_FUN_SNSI2C, &u32Addr) == XM_SUCCESS)
{
for(u8i=0;u8i<3;u8i++)
{
ExtCfg_Read_V2(1,u32Addr+u8i, &au8Data[u8i]);
}
gSnsDevAddr = au8Data[0];
gSnsRegAddrByte = (au8Data[1]>>4)&0x0F;
gSnsRegDataByte = au8Data[1]&0x0F;
gSensorChip = au8Data[2];
}
else
{
sensor_get_chip_in(pstI2CData);
}
pstI2CData->dev_addr = gSnsDevAddr;
pstI2CData->addr_byte_num = gSnsRegAddrByte;
pstI2CData->data_byte_num = gSnsRegDataByte;
#ifdef DEBUG_ON
DEBUG("sensor_get_chip:\n");
PrintHex(8, gSnsDevAddr); DBG(" ");
PrintHex(8, gSnsRegAddrByte);DBG(" ");
PrintHex(8, gSnsRegDataByte);DBG(" ");
PrintHex(8, gSensorChip);
DBG("\r\n");
#endif
return gSensorChip;
}
void sensor_set_chip(XM_S32 s32SnsChip)
{
gSensorChip = s32SnsChip;
}
XM_U16 gu16ObTemp = 0;
int sensor_get_temp(XM_S16 *ps16Temp)
{
if(ps16Temp == NULL)
return XM_FAILURE;
*ps16Temp = gu16ObTemp;
return XM_SUCCESS;
}
void sensor_set_dnMode(XM_U8 u8Mode)
{
;
}
int sensor_set_encoderinfo(XM_U8 *u8pDta)
{
if(u8pDta == NULL)
return XM_FAILURE;
gAppEncoderinfo = *u8pDta;
return XM_SUCCESS;
}
void sensor_set_fps(XM_U8 channel , XM_U8 frame)
{
return;
}
//u8Mode: 0:Normal 1:XM AHD 2: CVBS
void sensor_set_isp_para(XM_U8 u8Mode)
{
return;
}
XM_S32 sensor_set_reslotionType(PROFILE enResType)
{
return XM_SUCCESS;
}
/*************************************************************************************
输入参数: u8Mode(0:Stop 1:Restart)
*************************************************************************************/
void sensor_restart(XM_U8 u8Mode)
{
XM_MPI_ISP_SetVsyncIntEn(0,0);
switch(gSensorChip)
{
#ifdef SENS_X20_SC2235P
case SENSOR_CHIP_SC2235P:
if(u8Mode != 1)
{
sensor_write_register(0x0103,0x01);
sensor_write_register(0x0100,0x00);
DEBUG("SC2235P stop stream!\n");
}
break;
#endif
default:
break;
}
XM_MPI_ISP_SetVsyncIntEn(0,2);
}