一.mt6582平台移植IMX135摄像头
1.mediatek/custom/common/kernel/imgsensor/下创建imx135_mipi_raw
2.将模组厂提供的kernel源码放在imx135_mipi_raw中
3.mediatek/custom/mt6582/hal/imgsensor/下创建imx135_mipi_raw
4.将模组厂提供的hal源码放在imx135_mipi_raw中
5.在imx135_mipi_raw.h中#define IMX135MIPI_WRITE_ID (0x34)
IMX135MIPI_WRITE_ID 这个ID值由datasheet中或者模组厂提供
5.mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h
中
(1)定义sensor id:
#define IMX135_SENSOR_ID 0x0135
(2)定义sensor name:
#define SENSOR_DRVNAME_IMX135_MIPI_RAW "imx135mipiraw"
6.mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h中
(1)声明初始化函数:
UINT32 IMX135_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
(2)ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1]
数组中添加
#if defined(IMX135_MIPI_RAW)
{IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW, IMX135_MIPI_RAW_SensorInit},
#endif
7.mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp中
添加:
#if defined(IMX135_MIPI_RAW)
RAW_INFO(IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW,NULL),
#endif
8.mediatek/config/pro/ProjectConfig.mk中
CUSTOM_HAL_IMGSENSOR=imx135_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=imx135_mipi_raw //后置摄像头
CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw //前置摄像头
CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =imx135_mipi_raw //后置摄像头
CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw //前置摄像头
9.imx135上电时序
mediatek/custom/sanstar82_cwet_kk/kernel/camera/camera/kd_camera_hw.c中
添加:imx135_mipi_raw 的上电时序
(1)解释:
<1> pinSetIdx == 1(代表前置摄像头)
<2>pinSetIdx == 0(代表后置摄像头)
<3>currSensorName(sensor的名字)
<4>CAMERA_POWER_VCAM_D2,CAMERA_POWER_VCAM_A,CAMERA_POWER_VCAM_D,CAMERA_POWER_VCAM_A2(代表sensor的4组核心电源)
上面4组电源的定义在kd_camera_hw.h
<5>hwPowerOn函数中VOL_1800(1.8v),VOL_2800(2.8v),VOL_1000(1.0v)
(2)添加的上电时序代码
/*********************************************************************************************************************************/
0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)(判断当前sensor是不是IMX135)
else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)))
{
//PK_DBG("kdCISModulePowerOn get in--- SENSOR_DRVNAME_IMX135_MIPI_RAW \n");
//PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))
{
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))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1000,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
mdelay(5);
//PDN/STBY pin
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
{
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(10);
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);
//RST pin
if(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(10);
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(1);
}
//disable inactive sensor
if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub
if (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 sensor
if(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
if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
if(mt_set_gpio_out(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
}
}
/*********************************************************************************************************************************/
1.mediatek/custom/common/kernel/imgsensor/下创建imx135_mipi_raw
2.将模组厂提供的kernel源码放在imx135_mipi_raw中
3.mediatek/custom/mt6582/hal/imgsensor/下创建imx135_mipi_raw
4.将模组厂提供的hal源码放在imx135_mipi_raw中
5.在imx135_mipi_raw.h中#define IMX135MIPI_WRITE_ID (0x34)
IMX135MIPI_WRITE_ID 这个ID值由datasheet中或者模组厂提供
5.mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h
中
(1)定义sensor id:
#define IMX135_SENSOR_ID 0x0135
(2)定义sensor name:
#define SENSOR_DRVNAME_IMX135_MIPI_RAW "imx135mipiraw"
6.mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h中
(1)声明初始化函数:
UINT32 IMX135_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
(2)ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1]
数组中添加
#if defined(IMX135_MIPI_RAW)
{IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW, IMX135_MIPI_RAW_SensorInit},
#endif
7.mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp中
添加:
#if defined(IMX135_MIPI_RAW)
RAW_INFO(IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW,NULL),
#endif
8.mediatek/config/pro/ProjectConfig.mk中
CUSTOM_HAL_IMGSENSOR=imx135_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=imx135_mipi_raw //后置摄像头
CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw //前置摄像头
CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =imx135_mipi_raw //后置摄像头
CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw //前置摄像头
9.imx135上电时序
mediatek/custom/sanstar82_cwet_kk/kernel/camera/camera/kd_camera_hw.c中
添加:imx135_mipi_raw 的上电时序
(1)解释:
<1> pinSetIdx == 1(代表前置摄像头)
<2>pinSetIdx == 0(代表后置摄像头)
<3>currSensorName(sensor的名字)
<4>CAMERA_POWER_VCAM_D2,CAMERA_POWER_VCAM_A,CAMERA_POWER_VCAM_D,CAMERA_POWER_VCAM_A2(代表sensor的4组核心电源)
上面4组电源的定义在kd_camera_hw.h
<5>hwPowerOn函数中VOL_1800(1.8v),VOL_2800(2.8v),VOL_1000(1.0v)
(2)添加的上电时序代码
/*********************************************************************************************************************************/
0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)(判断当前sensor是不是IMX135)
else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)))
{
//PK_DBG("kdCISModulePowerOn get in--- SENSOR_DRVNAME_IMX135_MIPI_RAW \n");
//PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))
{
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))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1000,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
mdelay(5);
//PDN/STBY pin
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
{
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(10);
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);
//RST pin
if(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(10);
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(1);
}
//disable inactive sensor
if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub
if (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 sensor
if(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
if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
if(mt_set_gpio_out(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
}
}
/*********************************************************************************************************************************/