• Camera/Lens流程(1)——点亮


    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (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
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    (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
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意: 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    (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中的顺序一致
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意: 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
    
    • 1

    (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
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    以下的步骤是第一次添加新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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    添加如下代码:

    //kernel-4.19/drivers/misc/mediatek/lens/mtk/main/Makefile
    
    mainaf-y  += common/dw9714af/DW9714AF.o
    
    • 1
    • 2
    • 3

    添加如下代码:

    //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},
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    添加如下代码:

    //kernel-4.19/drivers/misc/mediatek/lens/mtk/main/inc/lens_info.h
    
    #define AFDRV_DW9714AF "DW9714AF"
    
    • 1
    • 2
    • 3

    添加如下代码:

    //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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (5)添加lens效果

    添加如下代码:

    //vendor/mediatek/proprietary/custom/mtxxxx/hal/inc
    
    #define DW9714AF_LENS_ID                     0x9714
    
    • 1
    • 2
    • 3

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

  • 相关阅读:
    开源报表工具Limereport交叉编译及使用
    (附源码)计算机毕业设计SSM基于框架的旅游管理系统
    二、网络编程
    [量化投资-学习笔记017]Python+TDengine从零开始搭建量化分析平台-异常处理
    vulfocus——骑士cms任意代码执行(CVE-2020-35339)
    漏洞分析:MS14-058(CVE-2014-4113)
    .net 温故知新:【7】IOC控制反转,DI依赖注入
    sklearn 笔记 TSNE
    金仓数据库兼容Oracle exp/imp的导出导入工具手册(4. 功能与实践 )
    基于Python的书籍数据采集与可视化分析系统
  • 原文地址:https://blog.csdn.net/dongxianfei/article/details/127321055