MTK平台Sub Camera支持AF功能
2015-01-30 11:50
706 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">以 </span><span style="background-color: rgb(255, 255, 255); font-family: 'Times New Roman';">fm50afsub</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> (前摄OV5648的AF)</span><span style="background-color: rgb(255, 255, 255); font-family: 宋体;">和 </span><span style="background-color: rgb(255, 255, 255); font-family: 'Times New Roman';">fm50af(后摄OV8858的AF) </span><span style="background-color: rgb(255, 255, 255); font-family: 宋体;">兼容为例,兼容时保持 </span><span style="background-color: rgb(255, 255, 255); font-family: 'Times New Roman';">fm50af driver</span><span style="background-color: rgb(255, 255, 255); font-family: 宋体;">不变,</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">添加</span><span style="background-color: rgb(255, 255, 255); font-family: 'Times New Roman';">fm50afsub</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> lens driver</span>
1:首先修改配置projectConfig.mk,把sub camera使用的lens driver配置进去
例如sub camera使用lens driver为fm50afsub
CUSTOM_HAL_LENS = fm50af fm50afsub dummy_lens //dummy_lens一定要
CUSTOM_HAL_MAIN_BACKUP_LENS =
CUSTOM_HAL_MAIN_LENS = fm50af
CUSTOM_HAL_SUB_BACKUP_LENS =
CUSTOM_HAL_SUB_LENS = fm50afsub
CUSTOM_KERNEL_LENS = fm50af fm50afsub dummy_lens
CUSTOM_KERNEL_MAIN_BACKUP_LENS =
CUSTOM_KERNEL_MAIN_LENS = fm50af
CUSTOM_KERNEL_SUB_BACKUP_LENS =
CUSTOM_KERNEL_SUB_LENS = fm50afsub
2:修改lenslist.cpp 文件,在其中把sub camera sensor id 和lens driver关联起来
MSDK_LENS_INIT_FUNCTION_STRUCT LensList[MAX_NUM_OF_SUPPORT_LENS] = { {DUMMY_SENSOR_ID, DUMMY_LENS_ID, "Dummy", pDummy_getDefaultData}, #if defined(SENSORDRIVE) {DUMMY_SENSOR_ID, SENSOR_DRIVE_LENS_ID, "kd_camera_hw", pSensorDrive_getDefaultData}, // for backup lens, need assign correct SensorID //{OV5642_SENSOR_ID, SENSOR_DRIVE_LENS_ID, "kd_camera_hw", pSensorDrive_getDefaultData}, #endif #if defined(OV8825AF) {OV8825_SENSOR_ID, OV8825AF_LENS_ID, "OV8825AF", pOV8825AF_getDefaultData}, #endif #if defined(AD5823AF) {AR0833_SENSOR_ID, AD5823AF_LENS_ID, "AD5823AF", pAD5823AF_getDefaultData}, #endif #if defined(FM50AF)||defined(FM50AF_OV8858_HV1A_715_LG)||defined(FM50AF_GS8604_HT1_107A_LG) {DUMMY_SENSOR_ID, FM50AF_LENS_ID, "FM50AF", pFM50AF_getDefaultData}, #endif #if defined(FM50AFSUB) {DUMMY_SENSOR_ID, FM50AFSUB_LENS_ID, "FM50AFSUB", pFM50AFSUB_getDefaultData}, #endif // for new added lens, need assign correct SensorID #if defined(MT9P017AF) {MT9P017MIPI_SENSOR_ID, MT9P017AF_LENS_ID, "MT9P017AF", pMT9P017AF_getDefaultData}, #endif };
第一个ID即Sensor ID,配制成DUMMY_SENSOR_ID表示这个lens driver不会只配给某个sensor
第二个Lens ID是lens driver的唯一标识,在如下文件中配置
#define MAX_NUM_OF_SUPPORT_LENS 16 #define DUMMY_SENSOR_ID 0xFFFF /* LENS ID */ #define DUMMY_LENS_ID 0xFFFF #define FM50AF_LENS_ID 0x0001 #define MT9P017AF_LENS_ID 0x0002 #define SENSOR_DRIVE_LENS_ID 0x1000 #define OV8825AF_LENS_ID 0x0003 #define BU6429AF_LENS_ID 0x0004 #define BU6424AF_LENS_ID 0x0005 #define FM50AFSUB_LENS_ID 0x0006//add by ccl #define AD5823AF_LENS_ID 0x5823 #define DW9718AF_LENS_ID 0x9718
第三个参数是Lens driver name 会生成一个设备驱动节点 如/dev/FM50AFSUB
第四个参数是指向AF tuning参数文件中的一个函数指针
3:修改文件
alps\mediatek\platform\mt65xx\hardware\camera\core\featureio\drv\lens\mcu_drv.cpp
中的lensSearch 函数
// force assign LensIdx if SensorId != DUMMY_SENSOR_ID (to support backup lens/new lens driver) for (i=0; i<MAX_NUM_OF_SUPPORT_LENS; i++) { if ((MCUDrv::m_LensInitFunc[i].SensorId == a_u4CurrSensorId) && (a_u4CurrSensorId!=0xFFFF) && (a_u4CurrSensorId!=0x0)) { MCUDrv::m_u4CurrLensIdx = i; MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx); break; } } } else //sub or main2 case { //ccl add for (i=0; i<MAX_NUM_OF_SUPPORT_LENS; i++) { if ((MCUDrv::m_LensInitFunc[i].LensId == DUMMY_LENS_ID) || (MCUDrv::m_LensInitFunc[i].LensId == SENSOR_DRIVE_LENS_ID) || (MCUDrv::m_LensInitFunc[i].LensId == FM50AFSUB_LENS_ID) ) { MCUDrv::m_u4CurrLensIdx = i; } }// for (i=0; i<MAX_NUM_OF_SUPPORT_LENS; i++) { if ((MCUDrv::m_LensInitFunc[i].SensorId == a_u4CurrSensorId) && (a_u4CurrSensorId!=0xFFFF) && (a_u4CurrSensorId!=0x0)) { MCUDrv::m_u4CurrLensIdx = i; MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx); break; } }
4:需要修改文件 alps\mediatek\platform\mt6592\kernel\core\mt_dev.c
修改后如下
//添加了一部分代码,注意字符串变化 // /*=======================================================================*/ /* Lens actuator */ /*=======================================================================*/ static struct platform_device actuator_dev = { .name = "lens_actuator", .id = -1, }; static struct platform_device actuator_dev1 = { .name = "lens_actuator1", .id = -1, }; // //======================================================================= // Lens motor //======================================================================= #if 1 //defined(CONFIG_ACTUATOR) retval = platform_device_register(&actuator_dev); if (retval != 0){ return retval; } retval = platform_device_register(&actuator_dev1); if (retval != 0){ return retval; } #endif
5:添加文件 alps\mediatek\custom\common\kernel\lens\fm50afsub\FM50AFSUB.c 和.h文件 (可以拷贝一份FM50AF.c,FM50AF.h,把所有的FM50AF换成FM50AFSUB)
修改以下几点
a):static struct i2c_board_info __initdata kd_lens_dev={ I2C_BOARD_INFO("FM50AFSUB", 0x19)}; //0x18 --> 0x19 b):#define FM50AFSUB_VCM_WRITE_ID 0x18// 改成正确的i2c write id,如果是内置的vcm ic,写成ov5648 sensor的write id,如果是外置的 vcm ic,按VCM ic的DataSheet 写 c):修改函数 Register_FM50AFSUB_CharDrv actuator_class = class_create(THIS_MODULE, "actuatordrv1"); // actuatordrv --> actuatordrv1 d):修改函数 FM50AFSUB_i2c_probe /* Kirby: add new-style driver { */ g_pstFM50AFSUB_I2Cclient = client; g_pstFM50AFSUB_I2Cclient->addr = FM50AFSUB_VCM_WRITE_ID; // add g_pstFM50AFSUB_I2Cclient->addr = g_pstFM50AFSUB_I2Cclient->addr >> 1; //打开代码 //Register char driver i4RetValue = Register_FM50AFSUB_CharDrv(); e):g_stFM50AFSUB_Driver 变量的修改 // platform structure static struct platform_driver g_stFM50AFSUB_Driver = { .probe = FM50AFSUB_probe, .remove = FM50AFSUB_remove, .suspend = FM50AFSUB_suspend, .resume = FM50AFSUB_resume, .driver = { .name = "lens_actuator1", // 这儿把 “lens_actuator” 改成 “lens_actuator1”,这里需要保持和文件mt_devs.c增加的 name一致 .owner = THIS_MODULE, } };
6.修改文件权限,如下:
chown system camera /dev/camera-sysram chown system camera /dev/camera-isp chown system camera /dev/camera-pipemgr chown system camera /dev/kd_camera_hw chown system camera /dev/kd_camera_flashlight chown system camera /dev/kd_camera_hw_bus2 chown system camera /dev/FM50AF chown system camera /dev/FM50AFSUB chown system camera /dev/DW9718AF chown system camera /dev/OV8825AF chown system camera /dev/CAM_CAL_DRV
7.最后确认下config.ftbl.xxx.h文件,如下图屏蔽掉的那段,5648默认是打开的,即5648当前摄时是默认不开自动对焦的,所以这段要屏蔽。
FTABLE_SCENE_DEP() //========================================================================== #if 1 /*if(facing == 1) //front sensor { // Focus Mode FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES( KEY_AS_(MtkCameraParameters::KEY_FOCUS_MODE), SCENE_AS_DEFAULT_SCENE( ITEM_AS_DEFAULT_(MtkCameraParameters::FOCUS_MODE_INFINITY), ITEM_AS_VALUES_( MtkCameraParameters::FOCUS_MODE_INFINITY, ) ), ) } else {*/ // Focus Mode FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES( KEY_AS_(MtkCameraParameters::KEY_FOCUS_MODE), SCENE_AS_DEFAULT_SCENE( ITEM_AS_DEFAULT_(MtkCameraParameters::FOCUS_MODE_AUTO), ITEM_AS_VALUES_( MtkCameraParameters::FOCUS_MODE_AUTO, MtkCameraParameters::FOCUS_MODE_MACRO, MtkCameraParameters::FOCUS_MODE_INFINITY, MtkCameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE, MtkCameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO, "manual", "fullscan", ) ), //...................................................................... ) //} #endif
相关文章推荐
- MTK平台相关功能支持
- MTK 实现CAMERA 自动拍照的功能代码
- Android 调用平台功能 - 启动浏览器 支持file://
- Graphics->BitmapDecode 介绍Android 平台对图像的解码功能,Android平台支持PNG, JPEG图像格式,并可以支持 gif动画。
- MTK 平台上如何给 camera 添加一种 preview size
- 2416平台,u-boot-1.3.4支持U盘功能问题总结
- MTK平台发展及各芯片功能介绍
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-8摄像头功能调试支持
- Android 调用平台功能 - 启动浏览器 支持file://
- 2416平台,u-boot-1.3.4支持U盘功能问题总结
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-6蓝牙功能调试支持
- 信息系统开发平台OpenExpressApp - 支持日志功能
- 【转】 mtk平台camera流程原理(转+改)
- mtk平台camera调试,读到的ID值为65535??
- MTK芯片型号和对应支持功能
- ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!
- MTK平台上有关LCD,Audio参数,Camera参数的使用
- Android2.2平台上支持多camera(二)
- 2416平台,u-boot-1.3.4支持U盘功能问题总结 .
- UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-7GPS功能调试支持