硬件环境: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相关:
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_IMGSENSOR = ov8858_mipi_raw s5k3h5_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_MAIN_IMGSENSOR = ov8858_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_SUB_IMGSENSOR = s5k3h5_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_HAL_IMGSENSOR = ov8858_mipi_raw s5k3h5_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_HAL_MAIN_IMGSENSOR = ov8858_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_HAL_SUB_IMGSENSOR = s5k3h5_mipi_raw
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_LENS = ad5820af dw9714af dummy_lens
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_MAIN_LENS = dw9714af
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_SUB_LENS = dummy_lens
- <span style="white-space:pre;"> </span>CUSTOM_HAL_LENS = ad5820af dw9714af dummy_lens
- <span style="white-space:pre;"> </span>CUSTOM_HAL_MAIN_LENS = dw9714af
- <span style="white-space:pre;"> </span>CUSTOM_HAL_SUB_LENS = dummy_lens
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight
- <span style="white-space:pre;"> </span>CUSTOM_HAL_FLASHLIGHT = dummy_flashlight
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_CAM_CAL = dummy_eeprom
- <span style="white-space:pre;"> </span>CUSTOM_KERNEL_EEPROM = dummy_eeprom
- <span style="white-space:pre;"> </span>CUSTOM_HAL_CAM_CAL = dummy_eeprom
- <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/,这是用户空间可以访问到的目录)
(注意保持队形)
- <span style="white-space:pre;"> </span>#define OV8858_SENSOR_ID 0x8858
- #define S5K3H5XA_SENSOR_ID 0x3085
- #define SENSOR_DRVNAME_S5K3H5_MIPI_RAW "s5k3h5mipiraw"
- #define SENSOR_DRVNAME_OV8858_MIPI_RAW "ov8858mipiraw"
(6)在kernel-3.10/drivers/misc/mediatek/imgsensor/src/mt6735/kd_sensorlist.h文件中声明初始化函数;
- <span style="white-space:pre;"> </span>UINT32 OV8858_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
- <span style="white-space:pre;"> </span>UINT32 S5K3H5XA_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
在kdSensorList数组中添加:
- <span style="white-space:pre;"> </span>#if defined(OV8858_MIPI_RAW) //该宏为驱动目录名大写
- <span style="white-space:pre;"> </span>{OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,OV8858_MIPI_RAW_SensorInit},
- <span style="white-space:pre;"> </span>#endif
- <span style="white-space:pre;"> </span>#if defined(S5K3H2YX_MIPI_RAW) //该宏为驱动目录名大写
- <span style="white-space:pre;"> </span>{S5K3H2YX_SENSOR_ID, SENSOR_DRVNAME_S5K3H2YX_MIPI_RAW, S5K3H2YX_MIPI_RAW_SensorInit},
- <span style="white-space:pre;"> </span>#endif
- <span style="white-space:pre;"> </span>#if defined(OV8858_MIPI_RAW)
- RAW_INF(OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,OV8858_MIPI_RAW_SensorInit),
- #endif
- #if defined(S5K3H2YX_MIPI_RAW)
- RAW_INF(S5K3H2YX_SENSOR_ID, SENSOR_DRVNAME_S5K3H2YX_MIPI_RAW, S5K3H2YX_MIPI_RAW_SensorInit),
- #endif
(8)如果有AF时,需要修改vendor/mediatek/proprietary/custom/mt6735/hal/D1/lens/src/lenslist.cpp中lenslist[] (只需修改红色)
- <span style="white-space:pre;"> </span>#if defined(FM50AF)
- {<span style="color:#ff0000;">DUMMY_SENSOR_ID</span>, FM50AF_LENS_ID, "FM50AF", pFM50AF_getDefaultData},
- #endif
文件在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/