当前位置: 首页 > 工具软件 > Lens > 使用案例 >

Camera/Lens流程(一)——点亮

乜裕
2023-12-01

1、Camera点亮

(1)驱动文件夹创建

在 kernel-4.19/drivers/misc/mediatek/imgsensor/src/mtxxxx/中创建驱动文件夹,文件夹命名规则:IC名_接口类型_数据类型(如 s5k3l8_mipi_raw)。
把Camera驱动代码放入到该文件夹内,接着创建Makefile,在Makefile中添加 obj-y += s5k3l8mipiraw_Sensor.o。

(2)在kd_imgsensor.h添加信息

//在kernel-4.19/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h 中添加Sensor ID 和 设备名

#define S5K3L8_SENSOR_ID				0x30C8 // 查看datasheet

#define SENSOR_DRVNAME_S5K3L8_MIPI_RAW				"s5k3l8mipiraw"

(3)在imgsensor_sensor_list.c和imgsensor_sensor_list.h添加信息

//在/kernel-4.19/drivers/misc/mediatek/imgsensor/src/mtxxxx/中添加如下代码

UINT32 S5K3L8_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); // 声明Camera初始化函数,该函数是在该Camera驱动代码中

ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR + 1] = {

	#if defined(S5K3L8_MIPI_RAW) // kdSensorList 是有长度限制的,所以要用此方式添加
		{S5K3L8_SENSOR_ID, SENSOR_DRVNAME_S5K3L8_MIPI_RAW, S5K3L8_MIPI_RAW_SensorInit},
	#endif
};

(4)添加上电时序

在imgsensor_cfg_table.c文件中添加该Camera上电时序,上电时序需要参考该Camera模组的DateSheet。

// kernel-4.19/drivers/misc/mediatek/imgsensor/src/mtxxxx/camera_hw/imgsensor_cfg_table.c

PowerUp PowerOnList = {

#if defined(S5K3L8_MIPI_RAW)
{SENSOR_DRVNAME_S5K3L8_MIPI_RAW,
{
	{SensorMCLK, Vol_High, 0},
	{DOVDD, Vol_1800, 0},
	{AVDD, Vol_2800, 0},
	{DVDD, Vol_1200, 0},
	{AFVDD, Vol_2800, 5},
	{PDN, Vol_Low, 4},
	{PDN, Vol_High, 0},
	{RST, Vol_Low, 1},
	{RST, Vol_High, 0},
	},
},
#endif

(5)device目录下的配置

device/mediatek/common/kernel-headers/kd_imgsensor.h和 kernel 的 kd_imgsensor.h 文件一致。

(6)Hal的sensorlist配置

//vendor/mediatek/proprietary/custom/mtxxxx/hal/imgsensor_src/sensorlist.cpp

MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] = {

	#if defined(S5K3L8_MIPI_RAW) // SensorList 是有长度限制的,所以要用此方式添加
		RAW_INFO(S5K3L8_SENSOR_ID, SENSOR_DRVNAME_S5K3L8_MIPI_RAW, NULL), //最后一个NULL表示没有配置OT
	#endif
};

注意: sensorlist.cpp中写的Camera顺序要和imgsensor_sensor_list.c中的一致,否则效果代码有可能会跑错。

(7)效果文件添加

在 vendor/mediatek/proprietary/custom/mtxxxx/hal/imgsensor/ 创建该Camera的文件夹,名字必须与kernel代码文件夹一致,接着在文件夹内放入相机效果参数文件。

(8)metadata添加

在 vendor/mediatek/proprietary/custom/mtxxxx/hal/imgsensor_metadata/创建该Camera的文件夹,名字必须与kernel代码文件夹一致

(9)ProjectConfig.mk添加配置信息

在ProjectConfig.mk 文件中搜索 imgsensor 关键字,接着添加要点亮的Camera字符串,如下

CUSTOM_HAL_IMGSENSOR = s5k3l8_mipi_raw gc5025_mipi_raw gc0310_mipi_yuv
//填写顺序:后摄 后摄 前摄 前摄 副后摄(放最后)
CUSTOM_HAL_MAIN_IMGSENSOR = s5k3l8_mipi_raw gc0310_mipi_yuv
CUSTOM_HAL_SUB_IMGSENSOR = gc5025_mipi_raw

CUSTOM_KERNEL_IMGSENSOR = s5k3l8_mipi_raw gc5025_mipi_raw gc0310_mipi_yuv //顺序必须一致
CUSTOM_KERNEL_MAIN_IMGSENSOR = s5k3l8_mipi_raw gc0310_mipi_yuv
CUSTOM_KERNEL_SUB_IMGSENSOR = gc5025_mipi_raw

注意: 该字符串要与驱动代码文件夹名字一致。

(10)kernel中添加配置信息

在k62v1_64_bsp_debug_defconfig和k62v1_64_bsp_defconfig相关project中添加配置信息,在文件中搜索CONFIG_CUSTOM_KERNEL_IMGSENSOR关键字,添加要点亮的Camera字符串。

CONFIG_CUSTOM_KERNEL_IMGSENSOR="s5k3l8_mipi_raw gc5025_mipi_raw gc0310_mipi_yuv" //顺序必须与ProjectConfig.mk中的顺序一致

2、Lens配置

点亮后摄的一般都需要配置lens,分别也有已经添加过的 和 未添加过的,已添加过的只需要执行(1)~(3)步,未添加过的需全部执行以下步骤。

这里以配置dw9714af为例,具体是需配置哪个lens由该Camera的硬件决定。

(1)ProjectConfig.mk添加配置信息

在ProjectConfig.mk 文件中搜索 lens 关键字,接着添加需要配置的lens,如下:

CUSTOM_HAL_LENS = dw9714af dummy_lens
CUSTOM_HAL_MAIN_LENS = dw9714af

CUSTOM_KERNEL_LENS = dw9714af dummy_lens
CUSTOM_KERNEL_MAIN_LENS = dw9714af

注意: dw9714af 该字符串必须与/kernel-4.19/drivers/misc/mediatek/lens/mtk/main/common/文件夹中 dw9714af 的文件夹名字相同。

(2)kernel中添加配置信息

在k62v1_64_bsp_debug_defconfig和k62v1_64_bsp_defconfig相关project中添加配置信息。

CONFIG_MTK_LENS=y

(3)lenslist.cpp添加信息

//vendor/mediatek/proprietary/custom/mt6765/hal/lens/src/lenslist.cpp

extern PFUNC_GETLENSDEFAULT pDW9714AF_getDefaultData;

MSDK_LENS_INIT_FUNCTION_STRUCT LensList_main[MAX_NUM_OF_SUPPORT_LENS] = {

	#if defined(DW9714AF) // 配置的lens型号下
		#if defined(S5K3L8_MIPI_RAW) // 添加需要使能对焦功能的Camera型号
			{S5K3L8_SENSOR_ID,  DUMMY_MODULE_ID, DW9714AF_LENS_ID,  "DW9714AF",   pDW9714AF_getDefaultData},
		#endif
	#endif
};

以下的步骤是第一次添加新lens的步骤。

(4)添加Lens驱动

在kernel-4.19/drivers/misc/mediatek/lens/mtk/main/common/ 文件夹中创建 fm50af 文件夹。

在 dw9714af 文件夹内放入 DW9714AF.cMakefile 文件,Makefile中 写入 obj-y += DW9714AF.o

添加如下代码:

//kernel-4.19/drivers/misc/mediatek/lens/Kconfig

		config MTK_LENS_DW9714AF_SUPPORT
		tristate "DW9714AF Lens Driver"
    	depends on MTK_LENS
		help
	  	DW9714AF 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.19/drivers/misc/mediatek/lens/mtk/main/Makefile

mainaf-y  += common/dw9714af/DW9714AF.o

添加如下代码:

//kernel-4.19/drivers/misc/mediatek/lens/mtk/main/main_lens.c

static struct stAF_DrvList g_stAF_DrvList[MAX_NUM_OF_LENS] = {

	{1, AFDRV_DW9714AF, DW9714AF_SetI2Cclient, DW9714AF_Ioctl,
	 DW9714AF_Release, DW9714AF_GetFileName, NULL},
};

添加如下代码:

//kernel-4.19/drivers/misc/mediatek/lens/mtk/main/inc/lens_info.h

#define AFDRV_DW9714AF "DW9714AF"

添加如下代码:

//kernel-4.19/drivers/misc/mediatek/lens/mtk/main/inc/lens_list.h

#define DW9714AF_SetI2Cclient DW9714AF_SetI2Cclient_Main
#define DW9714AF_Ioctl DW9714AF_Ioctl_Main
#define DW9714AF_Release DW9714AF_Release_Main
#define DW9714AF_GetFileName DW9714AF_GetFileName_Main
extern int DW9714AF_SetI2Cclient(struct i2c_client *pstAF_I2Cclient,
				 spinlock_t *pAF_SpinLock, int *pAF_Opened);
extern long DW9714AF_Ioctl(struct file *a_pstFile, unsigned int a_u4Command,
			   unsigned long a_u4Param);
extern int DW9714AF_Release(struct inode *a_pstInode, struct file *a_pstFile);
extern int DW9714AF_GetFileName(unsigned char *pFileName);

(5)添加lens效果

添加如下代码:

//vendor/mediatek/proprietary/custom/mtxxxx/hal/inc

#define DW9714AF_LENS_ID                     0x9714

在vendor/mediatek/proprietary/custom/mtxxxx/hal/lens/ 文件夹内放入该lens的效果代码。
文件夹名字必须与kernel中驱动代码文件夹名字一致,如果没有则复制其他lens的效果代码,并修改文件名字和效果文件内的名字。

 类似资料: