MTK配置摄像头聚焦马达(AF)

1.如果你的项目是基于已完成的项目衍生的分支,只需要在lenlist.cpp添加引用就好了

(我摄像头用的OV8865,AF为dw9714,你们看具体情况)

vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/lens/src/lenslist.cpp

MSDK_LENS_INIT_FUNCTION_STRUCT LensList_main[MAX_NUM_OF_SUPPORT_LENS] =
 {
     {DUMMY_SENSOR_ID, DUMMY_MODULE_ID, DUMMY_LENS_ID, "Dummy", pDummy_getDefaultData},
+    {OV8865_SENSOR_ID, DUMMY_MODULE_ID, DW9714AF_LENS_ID, "DW9714AF", pDW9714AF_getDefaultData},
     {GC5035_SENSOR_ID, DUMMY_MODULE_ID, DW9714AF_LENS_ID, "DW9714AF", pDW9714AF_getDefaultData},
    

2.如果项目中没有这个AF驱动,就要自己添加了(CN3927为例)

Makefile文件添加调用路径

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/lens/main/Makefile

 MAIN_CFILES  += common/fp5510e2af/FP5510E2AF.c
+MAIN_CFILES  += common/cn3927af/cn3927af.c      //路径与驱动那边保持一致
 MAIN_CFILES  += common/bu6424af/BU6424AF.c

 obj-y  += common/fp5510e2af/
+obj-y  += common/cn3927af/          //路径与驱动那边保持一致
 obj-y  += common/bu6424af/

添加对应的af驱动

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/lens/main/common/cn3927af/

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/lens/main/inc/lens_info.h

 /* AFDRV_XXXX be the same as AF_DRVNAME in (*af).c */
+#define AFDRV_CN3927AF "CN3927AF"
 #define AFDRV_AD5820AF "AD5820AF"

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/lens/main/inc/lens_list.h

仿照其他的AF定义仿写就行

+#define CN3927AF_SetI2Cclient CN3927AF_SetI2Cclient_Main
+#define CN3927AF_Ioctl CN3927AF_Ioctl_Main
+#define CN3927AF_Release CN3927AF_Release_Main
+#define CN3927AF_GetFileName CN3927AF_GetFileName_Main
+extern int CN3927AF_SetI2Cclient(struct i2c_client *pstAF_I2Cclient,spinlock_t *pAF_SpinLock, int *pAF_Opened);
+extern long CN3927AF_Ioctl(struct file *a_pstFile, unsigned int a_u4Command,unsigned long a_u4Param);
+extern int CN3927AF_Release(struct inode *a_pstInode, struct file *a_pstFile);
+extern int CN3927AF_GetFileName(unsigned char *pFileName);

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/lens/main/main_lens.c

{1, AFDRV_WV511AAF, WV511AAF_SetI2Cclient, WV511AAF_Ioctl,
      WV511AAF_Release, WV511AAF_GetFileName, NULL},

+     {1, AFDRV_CN3927AF, CN3927AF_SetI2Cclient, CN3927AF_Ioctl,
+     CN3927AF_Release, CN3927AF_GetFileName, NULL},

kernel添加完成,vendor是配置驱动效果的

vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/inc/camera_custom_lens.h

#define AK7348AF_LENS_ID                     0x7348
 #define AK7371AF_LENS_ID                    0x7371
+#define  CN3927AF_LENS_ID                 0x3927         //添加id,设备都是根据唯一的id进行匹配的

聚焦效果文件配置(厂家都不一样,我就不给了,在这里添加就好)

vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/lens/cn3927af/

回到最初的地方,在sensorlist中添加

vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/lens/src/lenslist.cpp

+extern PFUNC_GETLENSDEFAULT pCN3927AF_getDefaultData;     //这里加上下面才能调用
 extern PFUNC_GETLENSDEFAULT pAK7371AF_getDefaultData;
 extern PFUNC_GETLENSDEFAULT pDW9718SAF_getDefaultData;

MSDK_LENS_INIT_FUNCTION_STRUCT LensList_main[MAX_NUM_OF_SUPPORT_LENS] =
 {
     {DUMMY_SENSOR_ID, DUMMY_MODULE_ID, DUMMY_LENS_ID, "Dummy", pDummy_getDefaultData},
+    {OV8865_SENSOR_ID, DUMMY_MODULE_ID, CN3927AF_LENS_ID, "CN3927AF", pCN3927AF_getDefaultData},        
     {GC5035_SENSOR_ID, DUMMY_MODULE_ID, DW9714AF_LENS_ID, "DW9714AF", pDW9714AF_getDefaultData},

3.第二种情况还是那些基本配置都配置好了,只是添加新的AF驱动

第三种情况适用于,啥都没,你一添加AF,就会导致摄像头没有画面,然后卡死退出

给工厂测试里面添加对角

packages/apps/FactoryMode/src/com/mediatek/factorymode/camera/CameraTest.java

                 mCamera.startPreview();
+               mCamera.cancelAutoFocus();
                 mFlag = true;

添加权限 !!!

device/mediatek/$(MTK_PLATFORM)/init.$(MTK_PLATFORM).rc

+    #Camera
+    
+    chmod 0660 /dev/camera-sysram
+    chmod 0660 /dev/camera-mem
+    chmod 0660 /dev/camera-isp
+    chmod 0660 /dev/camera-tsf
+    chmod 0660 /dev/camera-dpe
+    chmod 0660 /dev/camera-fdvt
+    chmod 0660 /dev/camera-pipemgr
+    chmod 0660 /dev/kd_camera_hw
+    chmod 0660 /dev/flashlight
+    chmod 0660 /dev/kd_camera_hw_bus2
+    chmod 0660 /dev/FM50AF
+    chmod 0660 /dev/CAM_CAL_DRV
+
+    chown system camera /dev/camera-sysram
+    chown system camera /dev/camera-mem
+    chown system camera /dev/camera-isp
+    chown system camera /dev/camera-dpe
+    chown system camera /dev/camera-tsf
+    chown system camera /dev/camera-fdvt
+    chown system camera /dev/camera-pipemgr
+    chown system camera /dev/kd_camera_hw
+    chown system camera /dev/flashlight
+    chown system camera /dev/kd_camera_hw_bus2
+   chown system camera /dev/FM50AF
+    chown system camera /dev/CAM_CAL_DRV
+
+    #CCU
+    chmod 0666 /dev/ccu
+    chown system camera /dev/ccu

device/mediateksample/$(yourprojectname)/ProjectConfig.mk

MTK_CAM_EIS_SUPPORT = no

MTK_CAM_HDR_SUPPORT = no

MTK_CAM_MFB_SUPPORT = 0

MTK_CAM_ZSDHDR_SUPPORT = no
MTK_CAM_ZSDMFB_SUPPORT = no

MTK_EMCAMERA_APP = no

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/cust_$(MTK_PLATFORM)_camera.dtsi

走的pmic,2.8V供电

+&camera_af_hw_node {
+        camaf_m1_pmic-supply = <&mt_pmic_vldo28_ldo_reg>;
+        status = "okay";
+    };

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/$(MTK_PLATFORM).dts

camera_af_hw_node: camera_af_hw_node {
         compatible = "mediatek,camera_af_lens";      //af驱动节点,与main_lens.c文件里面对应
     };

参考之前配置摄像头章节,配置摄像头上电部分

$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/$(MTK_PLATFORM)/camera_hw/imgsensor_cfg_table.c

IMGSENSOR_SENSOR_IDX_MAIN,          //主摄的供电配置
        IMGSENSOR_I2C_DEV_0,
        {
            {IMGSENSOR_HW_ID_MCLK, IMGSENSOR_HW_PIN_MCLK},
            {IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_AVDD},
            {IMGSENSOR_HW_ID_REGULATOR, IMGSENSOR_HW_PIN_DOVDD},
            {IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_DVDD},
            {IMGSENSOR_HW_ID_REGULATOR, IMGSENSOR_HW_PIN_AFVDD},                                       //af供电,REGULATOR是pmic供电,gpio是接口供电
            {IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_PDN},
            {IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_RST},
            {IMGSENSOR_HW_ID_NONE, IMGSENSOR_HW_PIN_NONE},
        },

#if defined(OV8865_MIPI_RAW)
    {
        SENSOR_DRVNAME_OV8865_MIPI_RAW,
        {
            {SensorMCLK, Vol_High, 0},
            {PDN, Vol_Low, 5},
            {RST, Vol_Low, 5},
            {DOVDD, Vol_1800, 5},
            {AVDD, Vol_2800, 5},
            {DVDD, Vol_1200, 5},
            {AFVDD, Vol_2800, 5},      //这里af上电设置,如果是0改为5
            {PDN, Vol_High, 5},
            {RST, Vol_High, 5}
        },
    },
#endif
 

如果这是新的AF驱动,仿照第二种情况,不是就看第一种情况直接调用

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值