MT8788 Android11 imx214_mipi_raw camera移植


移植环境: 
    MT8788 Android11 imx214_mipi_raw
移植条件:  
    1显示触摸正常
移植资料:  
    1硬件原理图 2调试原始资料

一  : camera 硬件分析
后摄
1.使用CAM_RST0,对应GPIO-101,用来复位摄像头,低电平有效,初始化配置为输出高电平,复位时序时序通常是: 高 –> 低 –> 高,根据硬件需要加一定的延时
2.使用I2C-2,SCL2对应GPIO-103,SDA2对应GPIO-104,用于内核与camera-ic的通信。
3.使用CAM_PDN0(省电模式),对应GPIO-97,PDN的作用是camera工作模式的切换,高电平有效,高电平是进入省电模式,一切对camera的操作都是无效的,包括复位。所以在复位前一定要将PDN引脚设为正常工作模式(低电平),否则复位无效。
4.使用CMMCLK0,对应GPIO0-99,MCLK(MasterClock)时钟用于分频给其他的CLK使用。
5.RCN/RCP、RDN/RDP为mipi接口,一对mipi差分时钟引脚RCN/RCP,四对mipi差分数据引脚RDNx/RDPx,这里有四个数据通道
6.VCAMA——AVDD,为模拟电源,主要给感光区和ADC供电。
7.VCAMD——DVDD,数字电源,主要给ISP供电。
8.VCAM_IO——VDDIO,数字IO电源,给I2C和DVP供电
9.VCAM_AF——对camera自动对焦马达的供电
前摄
1.复位脚使用CAM_RST1,对应GPIO-102,低电平有效,初始化配置为输出高电平。
2.I2C1/I2c2选择,此处使用I2C2,与后摄一样,在使用时只会有一个摄像头进行工作通信,所以可以共用一个I2C,SCL2对应GPIO-103,SDA2对应GPIO-104。
3.使用CAM_PDN1——对应GPIO-98。
4.CMMCLK0/CMMCLK1,使用CMMCLK-1。
5.一组mipi差分时钟引脚,RCN_A/RCP_A、四组差分数据引脚RDNx_A/RDPx_A。
6.电源与主摄一致

二 : 配置pin信息
1.配置DWS文件
DrvGen工具位置:vendor\mediatek\proprietary\tools\dct\DrvGen.exe
lk的DWS文件位置:
vendor\mediatek\proprietary\bootable\bootloader\lk\target\tb8788p1_64_bsp\dct\dct\codegen.dws
kernel的dws文件位置
kernel-4.14\drivers\misc\mediatek\dws\mt6771\tb8788p1_64_bsp.dws<b style="background-color: rgba(0, 0, 0, 0); color: rgb(0, 0, 0); font-family: &quot;Microsoft YaHei&quot;, STXihei;"><font size="2">   </font></b>

camera power :

GPIO:
I2C:
(注意)前摄和后摄挂载在同一个I2C上,但是其device address不能一样,address为七位,所以大小不能超过0x7f,此处因为该i2c地址在代码中并未使用,故只需配置一个合法的地址即可。

2.配置camera dts
位置 : \kernel-4.14\arch\arm64\boot\dts\mediatek\tb8788p1_64_bsp.dts
内容 : 本次无需修改

三 : 驱动移植
1.移植驱动文件
将camera驱动文件夹imx214_mipi_raw添加到以下目录中 : 
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\

2.效果文件可以同目录选择复制已有的、型号类似的camera效果文件,使用Linux命令批量更改得来
按上述方法分别配置以下三个效果文件 如: “imx386_mipi_raw”并重新命名为“imx214_mipi_raw” 和“imx214sub_mipi_raw”;
vendor\mediatek\proprietary\custom\mt6771\hal\imgsensor_metadata\
vendor\mediatek\proprietary\custom\mt6771\hal\imgsensor\ver1\
vendor\mediatek\proprietary\custom\mt6771\hal\sendepfeature\

3.配置文件的修改
1.sensorlist.cpp 添加
目录:\vendor\mediatek\proprietary\custom\tb8788p1_64_bsp\hal\imgsensor_src\sensorlist.cpp
内容:
#if defined(IMX214_MIPI_RAW)
    RAW_INFO_M(IMX214_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_IMX214_MIPI_RAW, CAM_CALGetCalData),
#endif
#if defined(IMX214SUB_MIPI_RAW)
    RAW_INFO_M(IMX214SUB_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_IMX214SUB_MIPI_RAW, CAM_CALGetCalData),
#endif
 
2.lenslist.cpp文件添加 自动对焦文件

目录:\vendor\mediatek\proprietary\custom\mt6771\hal\lens\src\lenslist.cpp
内容:
extern PFUNC_GETLENSDEFAULT pDW9714AF_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},
添加:
    {IMX214_SENSOR_ID, DUMMY_MODULE_ID, DW9714AF_LENS_ID,  "DW9714AF",   pDW9714AF_getDefaultData},
    {IMX214SUB_SENSOR_ID, DUMMY_MODULE_ID, DW9714AF_LENS_ID,  "DW9714AF",   pDW9714AF_getDefaultData},
}
MSDK_LENS_INIT_FUNCTION_STRUCT LensList_sub[MAX_NUM_OF_SUPPORT_LENS] =
{   {DUMMY_SENSOR_ID, DUMMY_MODULE_ID, DUMMY_LENS_ID, "Dummy",pDummy_getDefaultData},
添加:
     {IMX214_SENSOR_ID,  DUMMY_MODULE_ID, DW9714AF_LENS_ID,   "DW9714AF",    pDW9714AF_getDefaultData},
     {IMX214SUB_SENSOR_ID,  DUMMY_MODULE_ID, DW9714AF_LENS_ID,   "DW9714AF",    pDW9714AF_getDefaultData},
};

3.配置MTK_SENSOR_INFO_SENSITIVITY_RANGE,复制一份其它的文件修改名字(注意:这个文件不能漏。不然不生成摄像头app)
目录:
\vendor\mediatek\proprietary\custom\common\hal\imgsensor_metadata\sensor\imx214sub_mipi_raw\config_static_metadata.sensor.imx214submipiraw.h
内容:
    CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_SENSITIVITY_RANGE)
       CONFIG_ENTRY_VALUE(100, MINT32)
       CONFIG_ENTRY_VALUE(1600, MINT32)
       CONFIG_METADATA_END()

4.修改device层kd_imgsensor.h文件
目录:\device\mediatek\common\kernel-headers\kd_imgsensor.h
内容:
#define IMX214_SENSOR_ID 0x0214
#define IMX214SUB_SENSOR_ID 0x0216

5.修改ProjectConfig.mk文件
目录:\device\mediateksample\tb8788p1_64_bsp\ProjectConfig.mk
内容:   " 注意HAL层  与  kernel层  "  LENS: 自动调焦镜头 imgsensor:摄像头
HAL:
    CUSTOM_HAL_IMGSENSOR = imx214_mipi_raw imx214sub_mipi_raw
    CUSTOM_HAL_LENS = dw9714af dw9714af
    CUSTOM_HAL_MAIN_BACKUP_LENS = dw9714af
    CUSTOM_HAL_MAIN_IMGSENSOR = imx214_mipi_raw
    CUSTOM_HAL_MAIN_LENS = dw9714af
    CUSTOM_HAL_SUB_BACKUP_LENS = dw9714af
    CUSTOM_HAL_SUB_IMGSENSOR =imx214sub_mipi_raw
    CUSTOM_HAL_SUB_LENS = dw9714af
Kernel:
    CUSTOM_KERNEL_IMGSENSOR = imx214_mipi_raw imx214sub_mipi_raw
    CUSTOM_KERNEL_LENS = dw9714af dw9714af
    CUSTOM_KERNEL_MAIN_BACKUP_LENS = dw9714af
    CUSTOM_KERNEL_MAIN_IMGSENSOR =imx214_mipi_raw
    CUSTOM_KERNEL_MAIN_LENS = dw9714af
    CUSTOM_KERNEL_SUB_BACKUP_LENS = dw9714af
    CUSTOM_KERNEL_SUB_IMGSENSOR = imx214sub_mipi_raw
    CUSTOM_KERNEL_SUB_LENS = dw9714af

kernel配置修改
6.tb8788p1_64_bsp_defconfig 文件修改
目录: 两个都修改
\kernel-4.14\arch\arm64\configs\tb8788p1_64_bsp_deconfig 
\kernel-4.14\arch\arm64\configs\tb8788p1_64_bsp_debug_defconfig
内容:
    在kernel中添加的文件夹名,注意要与ProjectConfig.mk的CUSTOM_HAL_IMGSENSOR,CUSTOM_KERNEL_IMGSENSOR 一致,否则编译会报错,主副前摄都要添加。
     CONFIG_CUSTOM_KERNEL_IMGSENSOR="imx214_mipi_raw imx214sub_mipi_raw"

7.修改kernel层kd_imgsensor.h文件
目录:\kernel-4.14\drivers\misc\mediatek\imgsensor\inc\kd_imgsensor.h
内容:
    #define IMX214_SENSOR_ID                        0x0214
    #define IMX214SUB_SENSOR_ID                     0x0216
    
    #define SENSOR_DRVNAME_IMX214_MIPI_RAW         "imx214_mipi_raw"
    #define SENSOR_DRVNAME_IMX214SUB_MIPI_RAW       "imx214sub_mipi_raw"

8.imgsensor_cfg_table.c  配置上电时序
目录:\kernel-4.14\drivers\misc\mediatek\imgsensor\src\mt6771\camera_project\tb8788p1_64_bsp\camera_hw\imgsensor_cfg_table.c 
内容:
    //在sensor_power_sequence[]添加上电电压和时序设置
#if defined(IMX214_MIPI_RAW)
    {
        SENSOR_DRVNAME_IMX214_MIPI_RAW,
        {
            {SensorMCLK, Vol_High, 0},
            {AVDD, Vol_2800, 0},
            {DOVDD, Vol_1800, 0},
            {DVDD, Vol_1000, 0},
            {AFVDD, Vol_2800, 1},
            {PDN, Vol_Low, 0},
            {PDN, Vol_High, 0},
            {RST, Vol_Low, 0},
            {RST, Vol_High, 1}
        },
   },
#endif
#if defined(IMX214SUB_MIPI_RAW)
    {
        SENSOR_DRVNAME_IMX214SUB_MIPI_RAW,
        {
            {SensorMCLK, Vol_High, 0},
            {AVDD, Vol_2800, 0},
            {DOVDD, Vol_1800, 0},
            {DVDD, Vol_1000, 0},
            {AFVDD, Vol_2800, 1},
            {PDN, Vol_Low, 1},
             {PDN, Vol_High, 5},
            {RST, Vol_Low, 1},
            {RST, Vol_High, 10}
        },
   },
#endif

9.imgsensor_sensor_list.c 加入列表
目录:\kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imgsensor_sensor_list.c
内容:
#if defined(IMX214_MIPI_RAW)
{IMX214_SENSOR_ID,SENSOR_DRVNAME_IMX214_MIPI_RAW, IMX214_MIPI_RAW_SensorInit},
#endif
#if defined(IMX214SUB_MIPI_RAW)
{IMX214SUB_SENSOR_ID,SENSOR_DRVNAME_IMX214SUB_MIPI_RAW, IMX214SUB_MIPI_RAW_SensorInit},
#endif

10.imgsensor_sensor_list.h 新的传感器驱动程序声明
目录:\kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imgsensor_sensor_list.h 
内容:
UINT32 IMX214_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
UINT32 IMX214SUB_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeropoint127

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值