Configuration
device/mediatekprojects/“ProjectName”/ ProjectConfig.mk
1
2
3
4
5... CUSTOM_HAL_LENS = AK7371AF CUSTOM_KERNEL_LENS = AK7371AF ...
Kernel
kernel-4.14driversmiscmediatekdwsmt6853k6853v1_64.dws
1
2
3
4
5
6
7
8... <device26> <varName>CAMERA_MAIN_AF</varName> <channel>I2C_CHANNEL_8</channel> <address>0x72</address> </device26> ...
kernel-4.14archarm64bootdtsmediatekmt6359.dtsi
1
2
3
4
5
6
7mt_pmic_vtp_ldo_reg: ldo2 { regulator-compatible = "LDO2"; regulator-name = "VTP"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <3600000>; };
kernel-4.14archarm64bootdtsmediatekcust_mt6853_camera.dtsi
1
2
3
4... vcamaf-supply = <&mt_pmic_vtp_ldo_reg> ...
kernel-4.14driversmiscmediateklensmaincommonak7371af
1
2添加驱动ak7371af
kernel-4.14driversmiscmediateklensKconfig
1
2
3
4
5
6
7
8
9
10
11... config MTK_LENS_AK7371AF_SUPPORT bool "AK7371AF Lens Driver" default n help AK7371AF Lens Driver This config is used to enable the corresponding lens driver for the camera sensor module Set as y if the driver is used in this project ...
kernel-4.14driversmiscmediateklensmainMakefile
1
2
3
4
5
6... MAIN_CFILES += common/ak7371af/AK7371AF.c ... obj-y += common/ak7371af/ ...
kernel-4.14driversmiscmediateklensmaininclens_list.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//define 用于区分不同camera模组使用相同af driver #define AK7371AF_SetI2Cclient AK7371AF_SetI2Cclient_Main #define AK7371AF_Ioctl AK7371AF_Ioctl_Main #define AK7371AF_Release AK7371AF_Release_Main #define AK7371AF_PowerDown AK7371AF_PowerDown_Main #define AK7371AF_GetFileName AK7371AF_GetFileName_Main //添加af driver的函数接口 extern int AK7371AF_SetI2Cclient(struct i2c_client *pstAF_I2Cclient, spinlock_t *pAF_SpinLock, int *pAF_Opened); extern long AK7371AF_Ioctl(struct file *a_pstFile, unsigned int a_u4Command, unsigned long a_u4Param); extern int AK7371AF_Release(struct inode *a_pstInode, struct file *a_pstFile); extern int AK7371AF_PowerDown(struct i2c_client *pstAF_I2Cclient, int *pAF_Opened); extern int AK7371AF_GetFileName(unsigned char *pFileName);
kernel-4.14driversmiscmediateklensmaininclens_info.h
1
2
3/* AFDRV_XXXX be the same as AF_DRVNAME in (*af).c */ #define AFDRV_AK7371AF "AK7371AF"
af上电有两种方式,一种是在camera sensor上电时在sensor上电时序中加上af上电,还有一种就是下面这种在af字符设备驱动中上电
kernel-4.14driversmiscmediateklensmainmain_lens.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28static struct stAF_DrvList g_stAF_DrvList[MAX_NUM_OF_LENS] = { ... {1, AFDRV_AK7371AF, AK7371AF_SetI2Cclient, AK7371AF_Ioctl, AK7371AF_Release, AK7371AF_GetFileName, NULL}, ... }; ... void AFRegulatorCtrl(int Stage) { .... if (Stage == 0) { ... regVCAMAF = regulator_get_regVCAMAF(); ... } else if (Stage == 1/*上电*/) { ... Status = regulator_set_voltage(regVCAMAF, 2800000, 2800000); ... } ... } ... void AF_PowerDown(void) { ... AK7371AF_PowerDown(g_pstAF_I2Cclient, &g_s4AF_Opened); ... }
HAL
alps/vendor/mediatek/proprietary/custom/[$Platform]/hal/inc/camera_custom_lens.h
1
2
3
4... #define AK7371AF_LENS_ID 0x7371 ...
alps/vendor/mediatek/proprietary/custom/[$Platform]/hal/lens/src/lenslist.cpp
1
2
3
4
5
6
7
8
9
10... MSDK_LENS_INIT_FUNCTION_STRUCT LensList_main[MAX_NUM_OF_SUPPORT_LENS] = { ... #ifdefined(AK7371AF) {S5KGM1ST_SENSOR_ID, AK7371AF_LENS_ID, "AK7371AF", pAK7371AF_getDefaultData}, ... } ...
最后
以上就是大胆康乃馨最近收集整理的关于MTK AF driver porting的全部内容,更多相关MTK内容请搜索靠谱客的其他文章。
发表评论 取消回复