MTK camera bring up

MTK camera bring up
plaform: mt6739
camera_rear_front: sp0a09mipi_sensor

一DWS配置
根据硬件连接对照HW interface部分配置cam各pin
example

二config配置文件
Configure camera sensor hal driver in ProjectConfigmk
Add camera sensor kernel driver project config project_defconfig

三Kernel层添加驱动文件上电时序与头文件相关定义
添加驱动文件
1Add camera sensor kernel driver code to the corresponding pathkernel层路径
2添加Makefile
添加上下电时序
添加头文件相关定义
1kd_imgsensorh
2kd_sensorlisth

四Hal层添加效果驱动文件sensorlist文件中的定义与相关头文件定义
添加效果驱动文件
添加sensorlist文件中的定义
添加头文件相关定义
--------------------- 

参考https://blog.csdn.net/liaokesen168/article/details/78908876 

一DWS配置
Z:\alps\vendor\mediatek\proprietary\scripts\dct\DrvGen.exe分别打开
Z:\alps\kernel-4.4\drivers\misc\mediatek\dws\mt6739\kaios31_256.dws
Z:\alps\vendor\mediatek\proprietary\bootable\bootloader\lk\target\kaios31_256\dct\dct\codegen.dws
Z:\alps\vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\kaios31_256\dct\dct\codegen.dws
根据原理图和GPIO_Application_Spec 配置 CAM_PDN0 CMMCLK0 SCL2 SDA2 

二config配置文件
Z:\alps\device\mediatek\kaios31_256\ProjectConfig.mk
CUSTOM_HAL_IMGSENSOR = sp0a09_mipi_raw sp0a09_mipi_raw_main
CUSTOM_HAL_LENS = dummy_lens
CUSTOM_HAL_MAIN_IMGSENSOR = sp0a09_mipi_raw_main
CUSTOM_HAL_SENSORS = sensor
CUSTOM_HAL_SUB_IMGSENSOR = sp0a09_mipi_raw
CUSTOM_KERNEL_IMGSENSOR = sp0a09_mipi_raw sp0a09_mipi_raw_main
CUSTOM_KERNEL_LENS = dummy_lens
CUSTOM_KERNEL_MAIN_IMGSENSOR = sp0a09_mipi_raw_main
CUSTOM_KERNEL_SUB_IMGSENSOR = sp0a09_mipi_raw
CUSTOM_KERNEL_SUB_LENS = dummy_lens

MTK_MTKLOGGER_SUPPORT = yes        (打开log开关便于调试)
MTK_LOG_SUPPORT_MOBILE_LOG = yes
MTK_LOG_CUSTOMER_SUPPORT = yes
MTK_NETWORK_LOG_SUPPORT = yes
MTK_TELEPHONY_CONN_LOG_CTRL_SUPPORT = yes


Z:\alps\kernel-4.4\arch\arm\configs\kaios31_256_debug_defconfig
CONFIG_CUSTOM_KERNEL_IMGSENSOR="sp0a09_mipi_raw sp0a09_mipi_raw_main"
CONFIG_MTK_IMGSENSOR=y

Z:\alps\kernel-4.4\arch\arm\configs\kaios31_256_defconfig
CONFIG_CUSTOM_KERNEL_IMGSENSOR="sp0a09_mipi_raw sp0a09_mipi_raw_main"
CONFIG_MTK_IMGSENSOR=y


三Kernel层添加驱动文件上电时序与头文件相关定义
添加驱动文件
Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\common\v1\sp0a09_mipi_raw\
Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\common\v1\sp0a09_mipi_raw_main\
sp0a09_mipi_raw_main\sp0a09mipi_Sensor_main.c与sp0a09_mipi_raw\sp0a09mipi_Sensor.c不同之处如下:
#include "sp0a09mipi_Sensor_main.h" <=>#include "sp0a09mipi_Sensor.h"
#define MSENSOR_HV_MIRROR <=> #define SENSOR_NO_MIRROR
static imgsensor_info_struct imgsensor_info = {
.sensor_id = SP0A09MIPI_SENSOR_ID_MAIN,     <=>   .sensor_id = SP0A09MIPI_SENSOR_ID,
.sensor_output_dataformat = SENSOR_OUTPUT_FORMAT_RAW_R,//sensor output first pixel color  <=>.sensor_output_dataformat = SENSOR_OUTPUT_FORMAT_RAW_B,
    ...
    }
    
static imgsensor_struct imgsensor = {
    .mirror =IMAGE_HV_MIRROR,  <=>   .mirror =IMAGE_NO_MIRROR,
}
static kal_uint32 return_sensor_id(void)
{
    write_cmos_sensor(0xfd, 0x00);
    return (((read_cmos_sensor(0xa0) << 8) | read_cmos_sensor(0xb0))+1);  <=>      return ((read_cmos_sensor(0xa0) << 8) | read_cmos_sensor(0xb0));
}
static void set_mirror_flip(kal_uint8 image_mirror)
{
        switch (image_mirror) {
            case IMAGE_HV_MIRROR:                        <=>        case IMAGE_NO_MIRROR:
            write_cmos_sensor(0x31,0x06);                <=>        write_cmos_sensor(0x31,0x00);
            break;
        }
}

extern int cam_idx;

注意这里给出cam_idx的出处,以及定义的意义,如下:
/*
Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\common\v1\imgsensor.c
int cam_idx;  //add for main and sub same ic
static inline int imgsensor_check_is_alive(struct IMGSENSOR_SENSOR *psensor)
{
    cam_idx = psensor_inst->sensor_idx; //add for main and sub same ic
}
*/
static kal_uint32 get_imgsensor_id(UINT32 *sensor_id)
{
    kal_uint8 i = 0;
    kal_uint8 retry = 20;//2;
    printk("%s is come in\n",__func__);
#if 1
    if ( cam_idx != 0) // 0:main 1 :sub                 <=>             if ( cam_idx != 1) // 0:main 1 :sub 
    {
        *sensor_id =0xffffffff;
        return ERROR_SENSOR_CONNECT_FAIL;     
    }
#endif
}

UINT32 SP0A09MIPI_RAW_MAIN_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc)  <=>   UINT32 SP0A09MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc)
    
添加上电时序
Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\mt6739\camera_hw\imgsensor_cfg_table.c
#if defined(SP0A09_MIPI_RAW)
        {
            SENSOR_DRVNAME_SP0A09_MIPI_RAW_39,
            {
                {SensorMCLK, Vol_High, 0},
                {PDN, Vol_High, 0, Vol_High},
                {RST, Vol_Low, 0, Vol_Low},
                {AVDD, Vol_2800, 1},
                {DVDD, Vol_1800, 2},
                {DOVDD, Vol_1800, 2},
                {AFVDD, Vol_2800, 5},
                {PDN, Vol_Low, 2},
                {RST, Vol_High, 10}
            },
        },
#endif
#if defined(SP0A09_MIPI_RAW_MAIN)
        {
            SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN,
            {
                {SensorMCLK, Vol_High, 0},
                {PDN, Vol_High, 0, Vol_High},
                {RST, Vol_Low, 0, Vol_Low},
                {AVDD, Vol_2800, 1},
                {DVDD, Vol_1800, 2},
                {DOVDD, Vol_1800, 2},
                {AFVDD, Vol_2800, 5},
                {PDN, Vol_Low, 2},
                {RST, Vol_High, 10}
            },
        },
#endif
添加头文件相关定义
Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\inc\kd_imgsensor.h
#define SP0A09MIPI_SENSOR_ID                    0x0a09
#define SP0A09MIPI_SENSOR_ID_MAIN                    0x0a0a
#define SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN          "sp0a09_mipi_raw_main"
#define SENSOR_DRVNAME_SP0A09_MIPI_RAW_39          "sp0a09_mipi_raw"

Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\common\v1\imgsensor_sensor_list.c
#if defined(SP0A09_MIPI_RAW)
       {SP0A09MIPI_SENSOR_ID, SENSOR_DRVNAME_SP0A09_MIPI_RAW_39,SP0A09MIPI_RAW_SensorInit},
#endif
#if defined(SP0A09_MIPI_RAW_MAIN)
       {SP0A09MIPI_SENSOR_ID_MAIN, SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN,SP0A09MIPI_RAW_MAIN_SensorInit},
#endif

Z:\alps\kernel-4.4\drivers\misc\mediatek\imgsensor\src\common\v1\imgsensor_sensor_list.h
UINT32 SP0A09MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 SP0A09MIPI_RAW_MAIN_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);

四Hal层添加效果驱动文件sensorlist文件中的定义与相关头文件定义
添加效果驱动文件
Z:\alps\vendor\mediatek\proprietary\custom\mt6739\hal\imgsensor\sp0a09_mipi_raw\
Z:\alps\vendor\mediatek\proprietary\custom\mt6739\hal\imgsensor\sp0a09_mipi_raw_main\
sp0a09_mipi_raw\camera_info_sp0a09_mipi_raw_main.h与sp0a09_mipi_raw_main\camera_info_sp0a09_mipi_raw_main.h下文件的区别如下:
#define SENSOR_ID                           SP0A09MIPI_SENSOR_ID_MAIN                        <=> SP0A09MIPI_SENSOR_ID
#define SENSOR_DRVNAME                      SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN           <=> SENSOR_DRVNAME_SP0A09_MIPI_RAW_39
#define INCLUDE_FILENAME_ISP_REGS_PARAM     "camera_isp_regs_sp0a09_mipi_raw_main.h"         <=> "camera_isp_regs_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_ISP_PCA_PARAM      "camera_isp_pca_sp0a09_mipi_raw_main.h"          <=> "camera_isp_pca_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_ISP_LSC_PARAM      "camera_isp_lsc_sp0a09_mipi_raw_main.h"          <=> "camera_isp_lsc_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_TSF_PARA           "camera_tsf_para_sp0a09_mipi_raw_main.h"         <=> "camera_tsf_para_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_TSF_DATA           "camera_tsf_data_sp0a09_mipi_raw_main.h"         <=> "camera_tsf_data_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_FLASH_AWB_PARA     "camera_flash_awb_para_sp0a09_mipi_raw_main.h"   <=> "camera_flash_awb_para_sp0a09_mipi_raw.h"
#define INCLUDE_FILENAME_FEATURE_PARA       "camera_feature_para_sp0a09_mipi_raw_main.h"     <=> "camera_feature_para_sp0a09_mipi_raw.h"

sp0a09_mipi_raw\camera_flicker_para_sp0a09_mipi_raw_main.cpp与sp0a09_mipi_raw_main\camera_flicker_para_sp0a09_mipi_raw_main.cpp下文件的区别如下:
#include "camera_AE_PLineTable_sp0a09_mipi_raw_main.h"    <=>     #include "camera_AE_PLineTable_sp0a09_mipi_raw.h"
#include "camera_info_sp0a09_mipi_raw_main.h"             <=>     #include "camera_info_sp0a09_mipi_raw.h"

sp0a09_mipi_raw\camera_tuning_para_sp0a09_mipi_raw_main.cpp与sp0a09_mipi_raw_main\camera_tuning_para_sp0a09_mipi_raw_main.cpp下文件的区别如下:
#include "camera_AE_PLineTable_sp0a09_mipi_raw_main.h"    <=>     #include "camera_AE_PLineTable_sp0a09_mipi_raw.h"                                          
#include "camera_info_sp0a09_mipi_raw_main.h"             <=>     #include "camera_info_sp0a09_mipi_raw.h"  
添加sensorlist文件中的定义
Z:\alps\vendor\mediatek\proprietary\custom\mt6739\hal\imgsensor_src\sensorlist.cpp
#if defined(SP0A09_MIPI_RAW)
    RAW_INFO(SP0A09MIPI_SENSOR_ID, SENSOR_DRVNAME_SP0A09_MIPI_RAW_39,NULL),
#endif
#if defined(SP0A09_MIPI_RAW_MAIN)
    RAW_INFO(SP0A09MIPI_SENSOR_ID_MAIN, SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN,NULL),
#endif
添加头文件相关定义
Z:\alps\device\mediatek\common\kernel-headers\kd_imgsensor.h
#define SP0A09MIPI_SENSOR_ID                    0x0a09
#define SP0A09MIPI_SENSOR_ID_MAIN                    0x0a0a
#define SENSOR_DRVNAME_SP0A09_MIPI_RAW_39          "sp0a09_mipi_raw"
#define SENSOR_DRVNAME_SP0A09_MIPI_RAW_39_MAIN          "sp0a09_mipi_raw_main"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zeropoint127

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

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

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

打赏作者

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

抵扣说明:

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

余额充值