MTK AF driver porting

该博客详细介绍了MTK平台中针对AK7371AF镜头的硬件配置,包括在kernel-4.14中的驱动代码、设备树配置以及HAL层的相关设置。内容涉及镜头驱动的编译、AF上电方式、镜头ID定义以及驱动接口函数。通过这些配置,实现了镜头驱动与传感器模块的协同工作。
摘要由CSDN通过智能技术生成

Configuration

device/mediatekprojects/“ProjectName”/ ProjectConfig.mk

...
CUSTOM_HAL_LENS = AK7371AF
CUSTOM_KERNEL_LENS = AK7371AF
...

Kernel

kernel-4.14\drivers\misc\mediatek\dws\mt6853\k6853v1_64.dws

...
<device26>
    <varName>CAMERA_MAIN_AF</varName>
    <channel>I2C_CHANNEL_8</channel>
    <address>0x72</address>
</device26>
...

kernel-4.14\arch\arm64\boot\dts\mediatek\mt6359.dtsi

mt_pmic_vtp_ldo_reg: ldo2 {
	regulator-compatible = "LDO2";
	regulator-name = "VTP";
	regulator-min-microvolt = <1200000>;
	regulator-max-microvolt = <3600000>;
};

kernel-4.14\arch\arm64\boot\dts\mediatek\cust_mt6853_camera.dtsi

...
vcamaf-supply = <&mt_pmic_vtp_ldo_reg>
...

kernel-4.14\drivers\misc\mediatek\lens\main\common\ak7371af

添加驱动ak7371af

kernel-4.14\drivers\misc\mediatek\lens\Kconfig

...
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.14\drivers\misc\mediatek\lens\main\Makefile

...
MAIN_CFILES  += common/ak7371af/AK7371AF.c
...
obj-y  += common/ak7371af/
...

kernel-4.14\drivers\misc\mediatek\lens\main\inc\lens_list.h

//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.14\drivers\misc\mediatek\lens\main\inc\lens_info.h

/* AFDRV_XXXX be the same as AF_DRVNAME in (*af).c */
#define AFDRV_AK7371AF "AK7371AF"

af上电有两种方式,一种是在camera sensor上电时在sensor上电时序中加上af上电,还有一种就是下面这种在af字符设备驱动中上电
kernel-4.14\drivers\misc\mediatek\lens\main\main_lens.c

static 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

...
#define AK7371AF_LENS_ID        0x7371
...

alps/vendor/mediatek/proprietary/custom/[$Platform]/hal/lens/src/lenslist.cpp

...
MSDK_LENS_INIT_FUNCTION_STRUCT LensList_main[MAX_NUM_OF_SUPPORT_LENS] =
{
    ...
    #ifdefined(AK7371AF)
        {S5KGM1ST_SENSOR_ID, AK7371AF_LENS_ID, "AK7371AF", pAK7371AF_getDefaultData},
    ...
}
...

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将Realtek蓝牙USB驱动程序移植到其他设备需要进行一些步骤和准备工作。首先,我们需要了解目标设备的硬件架构和操作系统。然后,我们需要获取Realtek蓝牙USB驱动程序的源代码和相关文档。接下来,我们可以按照以下步骤来进行移植: 1. 编译环境的设置:为了编译驱动程序,我们需要配置适当的编译环境,例如交叉编译工具链和相关的库和头文件。这将确保我们能够正确地编译驱动程序。 2. 理解目标设备的内核:我们需要了解目标设备的内核的版本和配置。这将帮助我们确定驱动程序是否与目标设备的内核兼容,并且它所需的功能和配置是否可用。 3. 移植驱动程序:我们可以采取以下步骤来移植驱动程序到目标设备上: - 修改驱动程序的Makefile和配置文件,以适应目标设备的内核配置和硬件特性。 - 根据目标设备的硬件特性,修改驱动程序的代码,以确保其与目标设备的硬件兼容。 - 如果需要,将驱动程序与目标设备的内核源代码进行整合,以确保其正确地与内核交互。 - 进行编译和构建,生成目标设备上可执行的驱动程序文件。 4. 测试和调试:完成移植后,我们需要对驱动程序进行测试和调试,以确保其在目标设备上正常工作。我们可以使用调试工具和设备的日志记录功能来分析和修复可能出现的问题。 总结起来,移植Realtek蓝牙USB驱动程序到其他设备需要进行一系列的步骤,包括编译环境的设置、目标设备的内核配置和硬件分析、代码的修改和整合、以及测试和调试。这样,我们就可以将Realtek蓝牙USB驱动程序成功地移植到其他设备上,并使其正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值