1. 驅動修改, 基於imx291的驅動(imx291_sensor_ctl.c )進行修改, 遵循imx307數據手冊修改寄存器即可。(因爲imx307與imx291型號差距不大,初始化序列可以參考imx291)
2. 按照《sensor調試指南》修改文件,主要集中在sample_comm_vi.c , sample_comm_isp.c
- 下面爲驅動程序分析
原文件爲sample_comm_isp.c
HI_S32 SAMPLE_COMM_ISP_Sensor_Regiter_callback(ISP_DEV IspDev, HI_U32 u32SnsId)
{
ALG_LIB_S stAeLib;
ALG_LIB_S stAwbLib;
const ISP_SNS_OBJ_S* pstSnsObj;
HI_S32 s32Ret = -1;
if (MAX_SENSOR_NUM <= u32SnsId)
{
SAMPLE_PRT("invalid sensor id: %d\n", u32SnsId);
return HI_FAILURE;
}
pstSnsObj = SAMPLE_COMM_ISP_GetSnsObj(u32SnsId);
if (HI_NULL == pstSnsObj)
{
SAMPLE_PRT("sensor %d not exist!\n", u32SnsId);
return HI_FAILURE;
}
跳入SAMPLE_COMM_ISP_GetSnsObj,發現原來是缺少了stSnsImx307Obj;所以我在這裏添加了相應的代碼
switch (enSnsType)
{
case SONY_IMX290_MIPI_2M_30FPS_12BIT:
case SONY_IMX290_MIPI_2M_30FPS_12BIT_WDR2TO1:
return &stSnsImx290Obj;
/*添加的代碼*/
case SONY_IMX307_MIPI_2M_30FPS_12BIT:
return &stSnsImx307Obj;
...
}
該結構體定義在
imx290_cmos.c ; 添加stSnsImx307Obj
ISP_SNS_OBJ_S stSnsImx307Obj =
{
.pfnRegisterCallback = sensor_register_callback,
.pfnUnRegisterCallback = sensor_unregister_callback,
.pfnStandby = imx291_standby,
.pfnRestart = imx291_restart,
.pfnMirrorFlip = HI_NULL,
.pfnWriteReg = imx291_write_register,
.pfnReadReg = imx291_read_register,
.pfnSetBusInfo = imx291_set_bus_info,
.pfnSetInit = sensor_set_init
};
定義在.c文件所有肯定是外部引用,extern , 位置
hi_sns_ctrl.h ; 同理添加 extern ISP_SNS_OBJ_S stSnsImx307Obj
extern ISP_SNS_OBJ_S stSnsMn34220Obj;
extern ISP_SNS_OBJ_S stSnsImx377Obj;
extern ISP_SNS_OBJ_S stSnsImx299Obj;
extern ISP_SNS_OBJ_S stSnsImx477Obj;
extern ISP_SNS_OBJ_S stSnsImx299SlvsObj;
extern ISP_SNS_OBJ_S stSnsImx290Obj;
extern ISP_SNS_OBJ_S stSnsImx327Obj;
extern ISP_SNS_OBJ_S stSnsImx334Obj;
extern ISP_SNS_OBJ_S stSnsOV2718Obj;
extern ISP_SNS_OBJ_S stSnsCmv50000Obj;
extern ISP_SNS_OBJ_S stSnsImx277SlvsObj;
extern ISP_SNS_OBJ_S stSnsImx117Obj;
extern ISP_SNS_OBJ_S stSnsImx290SlaveObj;
extern ISP_SNS_OBJ_S stSnsImx334SlaveObj;
extern ISP_SNS_OBJ_S stSnsImx226Obj;
extern ISP_SNS_OBJ_S stSnsImx335Obj;
extern ISP_SNS_OBJ_S stSnsImx458Obj;
/*添加的代碼*/
extern ISP_SNS_OBJ_S stSnsImx307Obj;