MTK camera drv]如何实现同Sensor IC不同摸组的Driver和参数的兼容

 

 

如下以 OV5647 为例

假设 OV5647AB OV5647BC 是两个不同模组厂的模组。

 

1:在kd_imgsensor.h 內定义不同的Sensor_ID

#define OV5647AB_SENSOR_ID                        0x5647

#define OV5647BC_SENSOR_ID                        0x5648

 

2ProjectConfig.mk  中加入 OV5647AB OV5647BC sensor 注册。

可以参考如下部分。

CUSTOM_HAL_IMGSENSOR=ov5647AC_raw ov5647BC_raw

CUSTOM_HAL_MAIN_IMGSENSOR=ov5647AC_raw

CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR=ov5647BC_raw

 

CUSTOM_KERNEL_IMGSENSOR=ov5647AC_raw ov5647BC_raw ov7690_yuv

CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR=ov5647BC_raw

CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5647AC_raw

 

3Driver 部分的修改

mediatek\custom\common\kernel\imgsensor 这个目录下之前的 OV5647 分别命名为OV5647AB OV5647BCDriver 里面的函数也做同步修改。

 

4:在 mediatek\custom\common\kernel\imgsensor 目录下的 ov5647AC_Sensor .c ov5647BC_Sensor.c 中的 OV5647GetSensorID_BC 这个函数中做如下修改。

 

*sensorID=((OV5647BC_read_cmos_sensor(0x300A) << 8) | OV5647BC_read_cmos_sensor(0x300B));

sensorID +=1;

在这个函数中再加入判读模组信息的判断。

加入 AC 模组的 MID 也就是模组厂的标志位 的读取可以参考如下说明。具体的地址寄存器可以参考对应的sensor DataSheet  。模组厂的MID可以请模组厂帮忙提供。

static UINT32 OV5647AC_OTP_combination_read(void)

{

       kal_int8 mid = 0x00;

      

    OV5647AC_write_cmos_sensor (0x3D21, 0x01);

    Sleep(50); // 50ms

  

    mid = OV5647AC_read_cmos_sensor (0x3D05); 

    mid &= 0x7F;

       printk("*********************************************MID = %d\n",mid);

    OV5647AC_write_cmos_sensor (0x3D21, 0x00);

    if (2 == mid)

    {

        return TRUE;

    }

    else

    {

        return FALSE;

    }

}

 

然后在OV5647GetSensorID_AC 这个函数中加入如下部分。关键是如果sensor MID 不对的话此时需要将 sensorID 设置为0xFFFFFFFF

if (!OV5647AC_OTP_combination_read())

{

      *sensorID = 0xFFFFFFFF;

      SENSORDB("OV5647ACOpen, MID != 0 \n");

 

      return ERROR_SENSOR_CONNECT_FAIL;

}

 

OV5647GetSensorID_BC 也做类似的修改。

 

5:最后一步判断是否真正的区分了对应模组的参数。

mediatek\custom\common\hal\imgsensor\ov5647AC_raw 或者

mediatek\custom\common\hal\imgsensor\ov5647BC_raw 文件中的

camera_isp_regs_ov5647AC_mt65XX.c 中的 CCM 部分修改成

CCM:{

    {set:{//00

        0x01000000, 0x00000000, 0x01000000, 0x00000000, 0x01000000,

    }},

    {set:{//01

        0x01000000, 0x00000000, 0x01000000, 0x00000000, 0x01000000,

    }},

    {set:{//02

        0x01000000, 0x00000000, 0x01000000, 0x00000000, 0x01000000,

    }}

},

重新build 。确认两颗模组的色彩表现是否不同。如果一个色彩比较暗淡,则修改OK

你可能感兴趣的:(MTK,driver)