MTK Camera(OV13850) 驱动移植

Posted dxmcu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MTK Camera(OV13850) 驱动移植相关的知识,希望对你有一定的参考价值。

一、驱动源码包结构

拿到的驱动源码包解压后得到hal和kernel两个目录文件,源码目录结构如下所示

13850-6592-driver-10-28.7z

|--hal

|  |--camera_AE_PLineTable_ov13850mipiraw.h

|  |--camera_calibration_cam_cal.cpp

|  |--camera_flicker_para_ov13850mipiraw.cpp

|  |--camera_info_ov13850mipiraw.h

|  |--camera_isp_lsc_ov13850mipiraw.h

|  |--camera_isp_pca_ov13850mipiraw.h

|  |--camera_isp_regs_ov13850mipiraw.h

|  |--camera_tsf_data_ov13850mipiraw.h

|  |--camera_tsf_para_ov13850mipiraw.h

|  |--camera_tuning_para_ov13850mipiraw.cpp

|  |--config.ftbl.ov13850_mipi_raw.h

|--kernel

|  |--ov13850mipiraw_Camera_Sensor_para.h

|  |--ov13850mipiraw_CameraCustomized.h

|  |--ov13850mipiraw_Sensor.c

|  |--ov13850mipiraw_Sensor.h

二、ov13850驱动移植记录

1、kernel

Sensor:

  • 在mediatek\\custom\\common\\kernel\\imgsensor\\目录下增加ov13850_mipi_raw文件夹,把驱动源码kernel目录中所有文件copy进来。
  • 修改mediatek\\custom\\common\\kernel\\imgsensor\\inc\\kd_imgsensor.h文件,增加ov13850 SENSOR_ID和SENSOR_DRVNAME定义
[cpp]  view plain  copy
  1. #define OV13850_SENSOR_ID             0xD850  
  2. #define SENSOR_DRVNAME_OV13850_MIPI_RAW   "ov13850mipiraw"  
  • 修改mediatek\\custom\\common\\kernel\\imgsensor\\src\\kd_sensorlist.h

增加OV13850_MIPI_RAW_SensorInit函数声明

[cpp]  view plain  copy
  1. UINT32 OV13850_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  

在kdSensorList数组中增加OV13850配置

[cpp]  view plain  copy
  1. ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =  
  2.   
  3. ...  
  4. #if defined(OV13850_MIPI_RAW)  
  5.     OV13850_SENSOR_ID, SENSOR_DRVNAME_OV13850_MIPI_RAW, OV13850_MIPI_RAW_SensorInit,   
  6. #endif  
  7. ...  
  8.   
  • 在mediatek\\custom\\wind92_wet_tdd\\kernel\\camera\\camera\\kd_camera_hw.c里,增加对OV13850的供电配置,参考OV12830和datasheet。由于OV12830和OV13850供电配置一样,所以copy12830,更改下名字即可。
[cpp]  view plain  copy
  1. int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name)  
  2.   
  3. //...  
  4. else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV13850_MIPI_RAW,currSensorName)))  
  5.   
  6.     printk("MYCAT kdCISModulePowerOn  SENSOR_DRVNAME_OV13850_MIPI_RAW \\n");  
  7.     printk("MYCAT OV13850_RAW idx:%d \\n",SensorIdx);  
  8.     #ifdef  __MAINSENSOR_USE_LDO_1_2V__  
  9.   
  10.     if (mt_set_gpio_pull_enable(CAMERA_POWER_VCAM_D_LDO_PIN, GPIO_PULL_DISABLE))    PK_DBG("[CAMERA SENSOR] CAMERA_POWER_VCAM_D_LDO_PIN pull failed! \\n");   
  11.     if (mt_set_gpio_mode(CAMERA_POWER_VCAM_D_LDO_PIN, GPIO_MODE_00))PK_DBG("[CAMERA SENSOR] CAMERA_POWER_VCAM_D_LDO_PIN mode failed! \\n");  
  12.     if (mt_set_gpio_dir(CAMERA_POWER_VCAM_D_LDO_PIN,GPIO_DIR_OUT)) PK_DBG("[CAMERA SENSOR] CAMERA_POWER_VCAM_D_LDO_PIN dir failed! \\n");  
  13.     if (mt_set_gpio_out(CAMERA_POWER_VCAM_D_LDO_PIN,GPIO_OUT_ONE)) PK_DBG("[CAMERA SENSOR] CAMERA_POWER_VCAM_D_LDO_PIN out failed! \\n");  
  14.               
  15.     #else  
  16.                   
  17.     // printk("MYCAT S5KH2_RAW POWER ON LDO D\\n");  
  18.     if (TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name))  
  19.       
  20.         PK_DBG("[CAMERA SENSOR] Fail to enable digital power\\n");  
  21.         //return -EIO;  
  22.         goto _kdCISModulePowerOn_exit_;  
  23.       
  24.   
  25.   
  26.     #endif  
  27.       
  28.     //printk("MYCAT S5KH2_RAW POWER ON LDO A\\n");  
  29.       
  30.     if (TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))  
  31.       
  32. <span style="white-space:pre">    </span>   PK_DBG("[CAMERA SENSOR] Fail to enable analog power\\n");  
  33.         //return -EIO;  
  34.         goto _kdCISModulePowerOn_exit_;  
  35.       
  36.       
  37.     //printk("MYCAT S5KH2_RAW POWER ON LDO D2\\n");  
  38.       
  39.     if (TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))  
  40.       
  41.         PK_DBG("[CAMERA SENSOR] Fail to enable digital power\\n");  
  42.         //return -EIO;  
  43.         goto _kdCISModulePowerOn_exit_;  
  44.       
  45.     //printk("MYCAT S5KH2_RAW POWER ON LDO A2\\n");  
  46.     if (TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name))  
  47.       
  48.         PK_DBG("[CAMERA SENSOR] Fail to enable analog power\\n");  
  49.         //return -EIO;  
  50.         goto _kdCISModulePowerOn_exit_;  
  51.       
  52.     msleep(5);  
  53.       
  54.     //disable inactive sensor  
  55.     if (pinSetIdx == 0 || pinSetIdx == 2)   
  56.     //disable sub  
  57.     <span style="white-space:pre">    </span>if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST])   
  58.           
  59.             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");  
  60.             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");  
  61.             if (mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT))PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \\n");  
  62.             if (mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT))PK_DBG("[CAMERA LENS] set gpio dir failed!! \\n");  
  63.             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  
  64.             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  
  65.           
  66.       
  67.     else   
  68.       
  69.         if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST])   
  70.           
  71.             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");  
  72.             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");  
  73.             if (mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT))PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \\n");  
  74.             if (mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT))PK_DBG("[CAMERA LENS] set gpio dir failed!! \\n");  
  75.             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 sensor  
  76.             if (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  
  77.           
  78.         if (GPIO_CAMERA_INVALID != pinSet[2][IDX_PS_CMRST])   
  79.           
  80.                                   
  81.           
  82.       
  83.     //PDN/STBY pin  
  84.     if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])  
  85.       
  86.         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");  
  87.         if (mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \\n");  
  88.         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");  
  89.         //PDN pin  
  90.         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");  
  91.         if (mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT))PK_DBG("[CAMERA LENS] set gpio dir failed!! \\n");  
  92.         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");  
  93.         msleep(1);  
  94.         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");  
  95.         msleep(1);  
  96.         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");  
  97.         msleep(1);  
  98.         printk("OV13850 PWN RST\\n");  
  99.       
  100.      
  101. //...  

Lens:

  • 在mediatek\\custom\\common\\kernel\\lens\\目录下参照ov12830af,增加ov13850af 目录和驱动源码OV13850AF.c。
  • mediatek\\custom\\common\\kernel\\lens\\inc\\目录下参照ov12830af,增加ov13850af目录和OV13850AF.h头文件

2、HAL

Sensor:

  • 在mediatek\\custom\\mt6592\\hal\\imgsensor\\目录下增加ov13850_mipi_raw文件夹,将OV13850驱动源码包中的hal下文件,copy到该文件夹下。
  • 修改mediatek\\custom\\common\\hal\\imgsensor\\src\\sensorlist.cpp增加OV13850的SensorList描述项。
[cpp]  view plain  copy
  1. MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =  
  2.   
  3.     ...  
  4.     #if defined(OV13850_MIPI_RAW)  
  5.         RAW_INFO(OV13850_SENSOR_ID, SENSOR_DRVNAME_OV13850_MIPI_RAW,NULL),  
  6.     #endif  
  7.     ...  
  8.   

Lens:

  • 在mediatek\\custom\\common\\hal\\lens\\下,增加ov13850af目录,参照ov12830增加lens_para_OV13850AF.cpp
  • 修改mediatek\\custom\\out\\wind92_wet_tdd\\hal\\lens\\src\\Lenslist.cpp在LensList数组项里增加OV13850AF描述项。
[cpp]  view plain  copy
  1. #if defined(OV13850AF)  
  2. extern PFUNC_GETLENSDEFAULT pOV13850AF_getDefaultData;  
  3. #endif  

MSDK_LENS_INIT_FUNCTION_STRUCT LensList[MAX_NUM_OF_SUPPORT_LENS] =

[cpp]  view plain  copy
  1.   
  2.     ...  
  3.     #if defined(OV13850AF)  
  4.         OV13850_SENSOR_ID, OV13850AF_LENS_ID, "OV13850AF", pOV13850AF_getDefaultData,  
  5.     #endif  
  6.     ...  
  7.   

  • 修改camera_custom_lens.h,增加OV13850_LENS_ID,这里根据序号累加。
[cpp]  view plain  copy
  1. #define OV13850AF_LENS_ID                    0x0008  

3、修改ProductConfig.mk

[plain]  view plain  copy
  1. CUSTOM_HAL_IMGSENSOR= ov13850_mipi_raw ov5648_mipi_raw  
  2. CUSTOM_HAL_LENS= ov13850af  dummy_lens  
  3. CUSTOM_HAL_MAIN_IMGSENSOR= ov13850_mipi_raw  
  4. CUSTOM_HAL_MAIN_LENS= ov13850af  
  5. CUSTOM_KERNEL_IMGSENSOR= ov13850_mipi_raw ov5648_mipi_raw  
  6. CUSTOM_KERNEL_LENS= ov13850af dummy_lens  
  7. CUSTOM_KERNEL_MAIN_IMGSENSOR= ov13850_mipi_raw  
  8. CUSTOM_KERNEL_MAIN_LENS= ov13850af  

4、最后要修改init.rc 更改OV13850AF设备文件的权限,否则在open的时候会失败。

以上是关于MTK Camera(OV13850) 驱动移植的主要内容,如果未能解决你的问题,请参考以下文章

Camera | 1.Camera基础知识

瑞芯微 | 摄像头ov13850移植笔记

MTK Camera驱动移植

MTK Camera驱动移植

MTK 前后使用相同类型的Camera

MTK 前后使用相同类型的Camera