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驱动,仿照第二种情况,不是就看第一种情况直接调用