对于MTK Camera驱动移植一般分为四部分:

1、硬件IO口配置;

2、Camera驱动移植;

3、上电时序;

4、修改i2c控制器;

硬件电路:

1、GPIO配置

打开 mediatek\dct\DrvGen.exe

选择 mediatek\custom\xiaoxi\kernel\dct\dct\codegen.dws 配置文件

设置前后摄像头的CMRST和CMPDN引脚,这是跟上电时序有关;

2、Camera驱动移植(以SP5507+SP2509为例)

(1)将kernel层代码整个目录sp5507_mipi_raw,sp2509_mipi_raw拷贝到mediatek/custom/common/kernel/imgsensor/目录下;
(2)将hal层代码整个目录sp5507_mipi_raw,sp2509_mipi_raw拷贝到mediatek/custom/common/hal/imgsensor/目录下;
         SP5507芯片与VO5670是用一款芯片,所以驱动程序也是同一套,上电时序也是一致;

(3)打开mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h文件, 定义sensor id和sensor name

#define SP5507MIPI_SENSOR_ID                    0x5670  
#define SENSOR_DRVNAME_SP5507MIPI_RAW           "sp5507_mipi_raw"

#define SP2509MIPI_SENSOR_ID                    0x2509
#define SENSOR_DRVNAME_SP2509MIPI_RAW           "sp2509_mipi_raw"

id和name的定义建议跟系统其它数据格式保持一致;

(4)在mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h文件中声明初始化函数;

UINT32 SP5507_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  //该函数为kernel中的初始化函数;

UINT32 SP2509_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  //该函数为kernel中的初始化函数;

在kdSensorList数组中添加:

#if defined(SP5507_MIPI_RAW)    //该宏为驱动目录名大写
    {SP5507MIPI_SENSOR_ID, SENSOR_DRVNAME_SP5507MIPI_RAW, SP5507_MIPI_RAW_SensorInit},
#endif

#if defined(SP2509_MIPI_RAW)  //该宏为驱动目录名大写
    {SP2509MIPI_SENSOR_ID, SENSOR_DRVNAME_SP2509MIPI_RAW, SP2509_MIPI_RAW_SensorInit},
#endif

(5)在mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp文件的SensorList数组中添加
#if defined(SP5507_MIPI_RAW)
    RAW_INFO(SP5507MIPI_SENSOR_ID, SENSOR_DRVNAME_SP5507MIPI_RAW, NULL),
#endif

#if defined(SP2509_MIPI_RAW)
    RAW_INFO(SP2509MIPI_SENSOR_ID, SENSOR_DRVNAME_SP2509MIPI_RAW, NULL),
#endif

代码位置要跟kdSensorList数组中的位置保持一致;

(6) 修改mediatek/config/pro/ProjectConfig.mk配置文件
CUSTOM_HAL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=sp5507_mipi_raw  //后摄像头
CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw   //前摄像头
 
CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =sp5507_mipi_raw  //后摄像头
CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw  //前摄像头

(7)驱动文件的修改

修改kernel层中的XXXXmipiraw_Sensor.h文件中的Sensor ID宏为kd_imgsensor.h中定义的Sensor ID宏:

#define OV5670_SENSOR_ID  SP5507MIPI_SENSOR_ID

与供应商确认i2c读写地址;

再修改hal层中的camera_info_XXXXmipiraw.h中的SENSOR_ID和SENSOR_DRVNAME为kd_imgsensor.h中定义的宏,修改config.ftbl.XXXX_mipi_raw.h中的FTABLE_DEFINITION(SENSOR_DRVNAME_XXXX_MIPI_RAW)的SENSOR_DRVNAME为kd_imgsensor.h中定义的sensor name宏;

(8)修改上电时序

打开mediatek\custom\pro\kernel\camera\camera\kd_camera_hw.c文件

修改kdCISModulePowerOn()函数;

SP5507上电时序

SP2509上电时序

int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name)
{u32 pinSetIdx = 0;//default main sensor#define IDX_PS_CMRST 0    //RST索引
#define IDX_PS_CMPDN 4    //PDN索引#define IDX_PS_MODE 1
#define IDX_PS_ON   2
#define IDX_PS_OFF  3u32 pinSet[2][8] = {//for main sensor   //后摄像头{GPIO_CAMERA_CMRST_PIN,GPIO_CAMERA_CMRST_PIN_M_GPIO,   /* mode */GPIO_OUT_ONE,                   /* ON state */GPIO_OUT_ZERO,                  /* OFF state */GPIO_CAMERA_CMPDN_PIN,GPIO_CAMERA_CMPDN_PIN_M_GPIO,GPIO_OUT_ONE, GPIO_OUT_ZERO,},//for sub sensor   //前摄像头{GPIO_CAMERA_CMRST1_PIN,   //RST引脚GPIO_CAMERA_CMRST1_PIN_M_GPIO,GPIO_OUT_ONE,    //上电电平GPIO_OUT_ZERO,   //下电电平GPIO_CAMERA_CMPDN1_PIN,  //PDN引脚GPIO_CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ONE,    //上电电平GPIO_OUT_ZERO,   //下电电平}};if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){pinSetIdx = 0;searchMainSensor = KAL_TRUE;}else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) {pinSetIdx = 1;searchMainSensor = KAL_FALSE;}PK_DBG("[kdCISModulePowerOn]:pinSetIdx=%d\n",pinSetIdx);//power ONif (On)   //上电时序{PK_DBG("kdCISModulePowerOn -on:currSensorName=%s\n",currSensorName);if (currSensorName && ((0 == strcmp(SENSOR_DRVNAME_SP2509MIPI_RAW,currSensorName)))){{PK_DBG("kdCISModulePowerOn get in---  %s \n",currSensorName);PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);/* SP2509只有两个电源 */                     if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))  //VCAM_IO  先打开DVDDIO电源{PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}          mdelay(1);if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))  //再打开AVDD电源{PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}         mdelay(1);if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]){                                     /* RST和PDN先置为低电平 */ //PDN/STBY pin   if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}//RST pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}mdelay(1);//PDN/STBY pin   //PWD高电平脉冲 持续10msif(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(10);   if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(10);    //RST pin   //然后RST置高电平if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}mdelay(10);    //}//disable inactive sensor   //关闭不使用的摄像头if(pinSetIdx == 0 ) {//disable subif (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensorif(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module}}else {if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensorif(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module}}mdelay(50);}}else if (currSensorName && ((0 == strcmp(SENSOR_DRVNAME_SP5507MIPI_RAW,currSensorName)))){{PK_DBG("kdCISModulePowerOn get in---  %s \n",currSensorName);PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);/* SP5507有三个电源 */                         if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))  //VCAM_IO  先打开DOVDD电源{PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}           if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))  //再打开AVDD电源{PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}           if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name))   //最后打开DVDD电源{PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}         mdelay(1);if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]){ /* 先把RET(SHUTDOWN)和PWDN置为低电平 */                                     //PDN/STBY pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}//RST pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}mdelay(1);//RST pin  if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}mdelay(2);        //PDN/STBY pinif(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(20);   }//disable inactive sensor  //关闭其他摄像头if(pinSetIdx == 0 ) {//disable subif (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensorif(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module}}else {if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensorif(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module}}mdelay(50);}}}//power OFFelse    //下电时序{PK_DBG("kdCISModulePowerOn -off:currSensorName=%s\n",currSensorName);if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_SP2509MIPI_RAW, currSensorName))){PK_DBG("kdCISModulePowerOff, get in---SENSOR_DRVNAME_IMX219_MIPI_RAW \n");if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {//RST pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensormdelay(1);//PDN/STBY pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(1);     }if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {PK_DBG("[CAMERA SENSOR] Fail to OFF analog power:VCAM_A:VOL_2800\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2, mode_name)) {PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}mdelay(1);  //PDN pull downif (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) {if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(1);}    } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_SP5507MIPI_RAW, currSensorName))){PK_DBG("kdCISModulePowerOff, get in---SENSOR_DRVNAME_IMX219_MIPI_RAW \n");if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {//RST pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensormdelay(2);//PDN/STBY pinif(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}mdelay(1);        }if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}       if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {PK_DBG("[CAMERA SENSOR] Fail to OFF analog power:VCAM_A:VOL_2800\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2, mode_name)) {PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");//return -EIO;goto _kdCISModulePowerOn_exit_;}     mdelay(1);         } }return 0;_kdCISModulePowerOn_exit_:return -EIO;
}

根据芯片的上电时序图把大致的上电时序设置好就可以使摄像头工作起来;这里的上电时序没有像协议时序那般严格,只需要大致配置好就可以了;

4、修改i2c控制器
打开mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.c,修改 i2c_register_board_info(SUPPORT_I2C_BUS_NUM, &i2c_devs, 1);中的SUPPORT_I2C_BUS_NUM设置为实际电路使用的i2c控制器

如果开机后,相机无法起来,那就应该查看系统log,判断是否能够获取到Camera的ID,硬件上必须保证I2C能够正常通信;

MTK Camera驱动移植相关推荐

  1. MTK 驱动(63)---MTK TP驱动移植

    MTK TP驱动移植 对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 ...

  2. MTK TP驱动移植

    对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...

  3. Camera5 MTK camera驱动框架介绍

    一.概序: 前文已经介绍了camera驱动部分的内容Camera4 MTK camera驱动结构介绍,这里在回顾下之前的框架图, 这篇主要介绍红框部分的内容: imgsensor起到承上启下的作用,在 ...

  4. MTK6735 Android之Camera驱动移植篇

    MTK6735 Android之Camera驱动移植篇 首先我们需要向sensor原厂拿到我们对应平台型号的驱动hal层和kernel层的代码. 1.拷贝hal层代码到\vendor\mediatek ...

  5. Camera4 MTK camera驱动结构介绍

    一.概述: MTK  camera主要的内容在hal层,现在有hal1/hal3,当下主流的使用的是hal3,驱动主要负责sensor 电源的控制以及sensor相关寄存器的操作,MTK采用设备和驱动 ...

  6. Android MTK Camera驱动代码分析

    一.Camera调用过程:      imgsensor起到承上启下的作用,在系统起来时会创建整个camera驱动运行的环境,其中主要的文件和函数如下框图所示,先设备挂载时会调用注册platform设 ...

  7. MTK LCM驱动移植

    对于LCM驱动移植,一般分为三部曲: 1.硬件IO口配置: 2.确保LCM背光能够正常点亮: 3.LCM驱动移植: 硬件电路: 1.GPIO配置 打开 mediatek\dct\DrvGen.exe ...

  8. MTK平台安卓Q 10.0 camera驱动移植——sensor

    平台MTK676X 安卓:Q/10.0 1. 添加驱动程序文件 将模组厂商提供的驱动程序及调试参数文件拷贝到以下目录.厂商可能会自行客制化,但都是kernel和vendor两处下面,不一定和下面列出的 ...

  9. MT6739 Camera驱动移植文档

    文章目录 把厂商提供的驱动代码拷贝到对应路径 KERNEL层 HAL层 (1) 修改ProjectConfig.mk配置文件 修改与imgsensor相关的配置信息 修改与lens相关的配置信息 修改 ...

最新文章

  1. 怎么发送文件到服务器端,使用HttpClient发送文件流到服务器端
  2. 技术大牛长成记之不要光看热闹
  3. 数据持久层框架 Hibernate
  4. webpack 合并压缩_webpack的运用
  5. 当电信诈骗犯遇上程序员,技术决定成败!
  6. 微信小程序入门二:底部导航tabBar
  7. oracle集,oracle(集合门类)
  8. 最详细的Fast RCNN论文笔记
  9. Lumines! to exploit
  10. 风投的钱都从哪里来?
  11. 如何使用Movavi Slideshow Maker创建幻灯片
  12. ENVI5.4新添加功能简介
  13. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之32---BREW PUSH 服务...
  14. Android文件资源(raw/data/asset)的存取
  15. 推荐《现在,发现你的优势》
  16. 生活之美--需要设计
  17. linux禁用笔记本键盘,禁用笔记本键盘 Linux
  18. HoloLens原理分析和硬件拆解
  19. Codeforces 272C Dima and Staircase 思维 or 线段树
  20. centos打显卡驱动命令_centos7系统,显卡驱动安装教程

热门文章

  1. 软件编程需要记吗?(工作中切记,天外有天,人外有人,务必谦逊低调,谨言慎行,不卑不亢,有礼有节,戒急用忍,与大家共勉!)
  2. 台式计算机中如何安装CPU,台式电脑硬件如何安装
  3. [转]第一次用joomla做网站的一点感悟
  4. carsim中质心加速度_carsim输入、输出常用变量
  5. Python 爬取链家二手房,我在北京买房的经历
  6. html怎么解决gif图放大失真问题
  7. 全球与中国地下用钢纤维市场深度研究分析报告
  8. PS霓虹灯光字体效果一键制作方法
  9. 【读论文04】CVPR2022选读
  10. visiting a friend意念传送点