MTK CAMERA Development

硬件环境:MTK6735 & 触摸屏是GT9271

软件环境:Linux内核3.10 & 安卓5.1


1、GPIO配置

(1)打开kernel-3.10/tools/dct/DrvGen.exe 

(2)修改kernel-3.10/drivers/misc/mediatek/mach/mt6735/${project}/dct/dct/codegen.dws

(3)配置两个摄像头的reset和powerdown的管脚。




2、camera移植

(1)修改<kernel>/arch/arm/configs/<project>_debug_defconfig 中添加

CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov8858_mipi_raw  s5k3h5_mipi_raw"

修改device/rq/<project>/ProjectConfig.mk或device/mediatek/<project>/ProjectConfig.mk

imgsensor相关:

[plain]  view plain  copy
  1. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_IMGSENSOR = ov8858_mipi_raw s5k3h5_mipi_raw  
  2. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_MAIN_IMGSENSOR = ov8858_mipi_raw  
  3. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_SUB_IMGSENSOR = s5k3h5_mipi_raw  
  4.   
  5. <span style="white-space:pre;"> </span>CUSTOM_HAL_IMGSENSOR = ov8858_mipi_raw s5k3h5_mipi_raw  
  6. <span style="white-space:pre;"> </span>CUSTOM_HAL_MAIN_IMGSENSOR = ov8858_mipi_raw  
  7. <span style="white-space:pre;"> </span>CUSTOM_HAL_SUB_IMGSENSOR = s5k3h5_mipi_raw  
lens相关:(没有自动对焦AF或刚开始port sensor(移植)测试时,则配置成傻瓜dummy_lens)

[plain]  view plain  copy
  1. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_LENS = ad5820af dw9714af dummy_lens  
  2. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_MAIN_LENS = dw9714af  
  3. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_SUB_LENS = dummy_lens  
  4.   
  5. <span style="white-space:pre;"> </span>CUSTOM_HAL_LENS = ad5820af dw9714af dummy_lens  
  6. <span style="white-space:pre;"> </span>CUSTOM_HAL_MAIN_LENS = dw9714af  
  7. <span style="white-space:pre;"> </span>CUSTOM_HAL_SUB_LENS = dummy_lens  
flashlight相关:(port sensor初期可设置为dummy_flashlight)

[plain]  view plain  copy
  1. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight  
  2. <span style="white-space:pre;"> </span>CUSTOM_HAL_FLASHLIGHT = dummy_flashlight  
OTP (One Time Programmable) 相关:(仅RAW sensor使用)
[plain]  view plain  copy
  1. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_CAM_CAL = dummy_eeprom  
  2. <span style="white-space:pre;"> </span>CUSTOM_KERNEL_EEPROM = dummy_eeprom  
  3.   
  4. <span style="white-space:pre;"> </span>CUSTOM_HAL_CAM_CAL = dummy_eeprom  
  5. <span style="white-space:pre;"> </span>CUSTOM_HAL_EEPROM = dummy_eeprom  


(2)把kernel层的代码ov8858_mipi_raw和s5k3h5_mipi_raw文件夹拷贝到

kernel-3.10/drivers/misc/mediatek/imgsensor/src/mt6735/下在(注意文件夹名字的格式)

(3)将hal层代码整个目录ov8858_mipi_raw  s5k3h5_mipi_raw拷贝到vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor/目录下;

(4)修改kernel-3.10/drivers/misc/mediatek/imgsensor/src/mt6735/Makefile

(5)打开kernel-3.10/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h文件, 定义sensor id和sensor name

(并且inc下所有的文件必须拷贝到vendor/mediatek/proprietary/custom/kernel/imgsensor/inc/,这是用户空间可以访问到的目录)

(注意保持队形)

[plain]  view plain  copy
  1. <span style="white-space:pre;"> </span>#define OV8858_SENSOR_ID                        0x8858  
  2.     #define S5K3H5XA_SENSOR_ID                      0x3085  
  3.         #define SENSOR_DRVNAME_S5K3H5_MIPI_RAW         "s5k3h5mipiraw"  
  4.     #define SENSOR_DRVNAME_OV8858_MIPI_RAW          "ov8858mipiraw"  

(6)在kernel-3.10/drivers/misc/mediatek/imgsensor/src/mt6735/kd_sensorlist.h文件中声明初始化函数;

[cpp]  view plain  copy
  1. <span style="white-space:pre;"> </span>UINT32 OV8858_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  
[cpp]  view plain  copy
  1. <span style="white-space:pre;"> </span>UINT32 S5K3H5XA_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  
 
 

 
  
 如果是YUV sensor,则需要把MIPI_RAW改成YUV 
  
 

在kdSensorList数组中添加:

[cpp]  view plain  copy
  1. <span style="white-space:pre;"> </span>#if defined(OV8858_MIPI_RAW)    //该宏为驱动目录名大写  
  2.     <span style="white-space:pre;">     </span>{OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,OV8858_MIPI_RAW_SensorInit},  
  3. <span style="white-space:pre;"> </span>#endif  
  4. <span style="white-space:pre;"> </span>#if defined(S5K3H2YX_MIPI_RAW)  //该宏为驱动目录名大写  
  5.     <span style="white-space:pre;">     </span>{S5K3H2YX_SENSOR_ID, SENSOR_DRVNAME_S5K3H2YX_MIPI_RAW, S5K3H2YX_MIPI_RAW_SensorInit},  
  6. <span style="white-space:pre;"> </span>#endif  
(7) kernel-3.10/drivers/misc/mediatek/imgsensor/src/sensorlist.cpp文件的SensorList数组中添加

[cpp]  view plain  copy
  1. <span style="white-space:pre;"> </span>#if defined(OV8858_MIPI_RAW)     
  2.             RAW_INF(OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,OV8858_MIPI_RAW_SensorInit),  
  3.     #endif  
  4.     #if defined(S5K3H2YX_MIPI_RAW)   
  5.             RAW_INF(S5K3H2YX_SENSOR_ID, SENSOR_DRVNAME_S5K3H2YX_MIPI_RAW, S5K3H2YX_MIPI_RAW_SensorInit),  
  6.     #endif  

(8)如果有AF时,需要修改vendor/mediatek/proprietary/custom/mt6735/hal/D1/lens/src/lenslist.cpp中lenslist[] (只需修改红色)

[cpp]  view plain  copy
  1. <span style="white-space:pre;"> </span>#if defined(FM50AF)  
  2.                 {<span style="color:#ff0000;">DUMMY_SENSOR_ID</span>, FM50AF_LENS_ID, "FM50AF", pFM50AF_getDefaultData},  
  3.         #endif  
(9)修改上电时序

文件在kernel-3.10/drivers/misc/mediatek/mach/mt6735/rq6735_35gt_b_l1/camera/camera/kd_camera_hw.c

电源部分: VCAM_D就是DVDD数字供电,主要给ISP供电,如果是RAWDATA格式的sensor其ISP是在BB端,所以将其引脚将其NC;

VCAM_IO就是VDDIO数字IO电源主要给I2C部分供电;即DOVDD

VCAM_A就是AVDD模拟供电,主要给感光区和ADC部分供电;

VCAM_AF是对Camera自动对焦马达的供电 ,一半是最后给电

引脚部分: Reset引脚和powerdown引脚

其中XSHUTDN是通过下拉电阻实现置低的reset

根据datasheet上电时序:VCAM_A-》VCAM_IO-》PDN高-》VCAM_D-》RST高-》VCAM_AFO-》PDN高-》RST高

注意:这部分的驱动都有两套路径,此处列出的都是platform路径下的,但是project完整路径下如果也有,project路径下的优先权更高:

kernel-3.10/drivers/misc/mediatek/mach/mt6735/<project>/imgsensor/

vendor/mediatek/proprietary/custom/<project>/hal/D1/imgsensor/

猜你喜欢

转载自blog.csdn.net/ds1130071727/article/details/80223198
MTK