admin 发表于 2015-4-12 13:53:04

MTK平台camera AF马达驱动调试流程分析

《CameraAF分析》
一、AFkernel代码分析:
涉及文件主要有:
mediatek/config/mt6592/init.rc
mediatek/config/huaqin92_wet_b2a_tdd/at808p/ProjectConfig.mk
mediatek/platform/mt6592/kernel/core/mt_devs.c
mediatek /custom/huaqin_bsp/at808p/base/kernel/lens/ov8865af/OV8865AF.c
mediatek/custom/common/kernel/lens/inc/OV8865AF.h

a)       mediatek/config/mt6592/init.rc
作用是来修改文件的权限和将该文件的拥有者改为system用户,添加如下部分:

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]chmod 0660 /dev/OV8865AF
[*]chown system camera /dev/OV8865AF




b)       mediatek/config/huaqin92_wet_b2a_tdd/at808p/ProjectConfig.mk
修改部分如下图:
见附件11图片

c)       mediatek/platform/mt6592/kernel/core/mt_devs.c
这个文件时用来注册平台设备的。
在mt_board_init函数中添加

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]2197 #if 1 //defined(CONFIG_ACTUATOR)
[*]2198    retval = platform_device_register(&actuator_dev);
[*]2199    if (retval != 0){
[*]2200      return retval;
[*]2201    }
[*]2202    retval = platform_device_register(&actuator_dev1);
[*]2203    if (retval != 0){
[*]2204      return retval;
[*]2205    }
[*]2206 #endif





view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]1533 staticstruct platform_device actuator_dev1 = {
[*]1534   .name         = "lens_actuator1",
[*]1535   .id      = -1,
[*]1536 };





其中name “lens_actuator1”是用来和我们驱动文件中的name进行匹配的。
d)       mediatek/custom/huaqin_bsp/at808p/base/kernel/lens/ov8865af/OV8865AF.c
重要说道驱动文件了,这个文件的头文件是:
mediatek/custom/common/kernel/lens/inc/OV8865AF.h
主要完成一下任务:
1.   module_init(OV8865AF_i2C_init);——启动方式,也就是开机启动kernel后一段加载;
2.   i2c_register_board_info(LENS_I2C_BUSNUM,&kd_lens_dev, 1);;——挂载到I2C总线上;
3.   platform_driver_register(&g_stOV8865AF_Driver);——注册平台驱动;

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]491 static structplatform_driver g_stOV8865AF_Driver = {
[*]492   .probe   = OV8865AF_probe,
[*]493   .remove = OV8865AF_remove,
[*]494   .suspend   = OV8865AF_suspend,
[*]495   .resume = OV8865AF_resume,
[*]496   .driver    = {
[*]497         .name= "lens_actuator1",
[*]498         .owner = THIS_MODULE,
[*]499   }
[*]500 };




4.    然后进入OV8865AF_probe,加载i2c驱动:

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]469 static intOV8865AF_probe(struct platform_device *pdev)
[*]470 {
[*]471   returni2c_add_driver(&OV8865AF_i2c_driver);
[*]472 }
[*]423 struct i2c_driver OV8865AF_i2c_driver= {
[*]424    .probe = OV8865AF_i2c_probe,
[*]425    .remove = OV8865AF_i2c_remove,
[*]426    .driver.name = OV8865AF_DRVNAME,
[*]427    .id_table = OV8865AF_i2c_id,
[*]428 };





5.   再就是OV8865AF_i2c_probe,就是注册字符驱动,以此就连接到我们的&g_stOV8865AF_fops,给上层提供Ioctl接口;


二、AFHAL层分析:
HAL层涉及的文件:
mediatek/custom/common/hal/inc/camera_custom_lens.h
mediatek/custom/huaqin92_wet_b2a_tdd/hal/lens/src/lenslist.cpp
mediatek/custom/huaqin_bsp/at808p/base/hal/lens/ov8865af/lens_para_OV8865AF.cpp

a)       mediatek/custom/huaqin92_wet_b2a_tdd/hal/lens/src/lenslist.cpp
添加LensList:

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]70 #if defined(OV8865AF)
[*]71{OV8865_SENSOR_ID, OV8865AF_LENS_ID,"OV8865AF", pOV8865AF_getDefaultData},
[*]72 #endif



OV8865AF_LENS_ID 在camera_custom_lens.h加以定义,

view plaincopyprint?https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]如:#define OV8865AF_LENS_ID                     0x0009



OV8865_SENSOR_ID 是kernel层定义的:
mediatek/custom/common /kernel/imgsensor/inc/kd_imgsensor.h
是跟我们的camera驱动进行匹配的。
pOV8865AF_getDefaultData是在lens_para_OV8865AF.cpp中完成的。


页: [1]
查看完整版本: MTK平台camera AF马达驱动调试流程分析