mt6853 android11 imx214 main sub main2 camera移植

mt6853 android11 imx214 main sub main2 camera移植
开发环境:
mt6853   android11
原理图
原理图解析:
根据原理图可知,前摄、后摄、副后摄包含了一组差分信号时钟线和四组差分信号数据线
前摄、后摄、副后摄的供电这块CAMA、CAMD是由外部供电,需要控制对应的EN pin脚,CAMIO、CAMAF由pmu供电

移植:
一、配置dws
kernel-4.14\drivers\misc\mediatek\dws\mt6853\k6853v1_64_6360.dws
vendor/mediatek/proprietary/bootable/bootloader/lk/target/k6853v1_64_6360/dct/dct/codegen.dws
gpio部分:
分别配置前摄、后摄、副后摄的 RST、PDN、MCLK、SCL、SDA、CAMA_EN、CAMD_EN
IIC部分:
注意:配置好IIC 通道,IIC地址由驱动里面配置、此处使用默认地址即可
pmic部分:
Select PMIC 对应的是PMIC_MT6359PMUMP,由于有三个摄像头,所以需要配置对应的三个AppName
GPIO、IIC、PMIC的配置在cust.dtsi中有对应生成
out\target\product\k6853v1_64_6360\obj\KERNEL_OBJ\arch\arm64\boot\dts\k6853v1_64_6360\cust.dtsi
&i2c2 {
        #address-cells = <1>;
        #size-cells = <0>;
        clock-frequency = <400000>;
        mediatek,use-open-drain;
        camera_main_mtk:camera_main@1a {
                compatible = "mediatek,camera_main";
                reg = <0x1a>;
                status = "okay";
        };

        camera_main_af_mtk:camera_main_af@0c {
                compatible = "mediatek,camera_main_af";
                reg = <0x0c>;
                status = "okay";
        };

};
.......
&mt_pmic_vcamio_ldo_reg {
        regulator-name = "vcamio";
        regulator-default-on = <1>; /* 0:skip, 1: off, 2:on */
        status = "okay";
};

&kd_camera_hw1 {
        vcamaf_main2-supply = <&mt_pmic_vcamio_ldo_reg>;
        vcamaf-supply = <&mt_pmic_vcamio_ldo_reg>;
        vcamaf_sub-supply = <&mt_pmic_vcamio_ldo_reg>;
        status = "okay";
};
二、配置dts
kernel-4.14\arch\arm64\boot\dts\mediatek\cust_mt6853_camera.dtsi
&kd_camera_hw1 {
        pinctrl-names = "default",
                        "cam0_rst0", "cam0_rst1",
                        "cam0_pnd0", "cam0_pnd1",
                        "cam0_ldo_vcamd_0", "cam0_ldo_vcamd_1",
                        "cam0_ldo_vcama_0", "cam0_ldo_vcama_1",
                        "cam0_mclk_off",
                        "cam0_mclk_2mA", "cam0_mclk_4mA",
                        "cam0_mclk_6mA", "cam0_mclk_8mA",
                        "cam1_rst0", "cam1_rst1",
                        "cam1_pnd0", "cam1_pnd1",
                        "cam1_ldo_vcamd_0", "cam1_ldo_vcamd_1",
                        "cam1_ldo_vcama_0", "cam1_ldo_vcama_1",
                        "cam1_mclk_off",
                        "cam1_mclk_2mA", "cam1_mclk_4mA",
                        "cam1_mclk_6mA", "cam1_mclk_8mA",
                        "cam2_rst0", "cam2_rst1",
                        "cam2_pnd0", "cam2_pnd1",
                        "cam2_ldo_vcamd_0", "cam2_ldo_vcamd_1",
                        "cam2_ldo_vcama_0", "cam2_ldo_vcama_1",
                        "cam2_mclk_off",
                        "cam2_mclk_2mA", "cam2_mclk_4mA",
                        "cam2_mclk_6mA", "cam2_mclk_8mA";
        pinctrl-0 = <&camera_pins_default>;
        pinctrl-1 = <&camera_pins_cam0_rst_0>;
        pinctrl-2 = <&camera_pins_cam0_rst_1>;
        pinctrl-3 = <&camera_pins_cam0_pnd_0>;
        pinctrl-4 = <&camera_pins_cam0_pnd_1>;
        pinctrl-5 = <&camera_pins_cam0_vcamd_0>;
        pinctrl-6 = <&camera_pins_cam0_vcamd_1>;
        pinctrl-7 = <&camera_pins_cam0_vcama_0>;
        pinctrl-8 = <&camera_pins_cam0_vcama_1>;
        pinctrl-9 = <&camera_pins_cam0_mclk_off>;
        pinctrl-10 = <&camera_pins_cam0_mclk_2ma>;
        pinctrl-11 = <&camera_pins_cam0_mclk_4ma>;
        pinctrl-12 = <&camera_pins_cam0_mclk_6ma>;
        pinctrl-13 = <&camera_pins_cam0_mclk_8ma>;
        pinctrl-14 = <&camera_pins_cam1_rst_0>;
        pinctrl-15 = <&camera_pins_cam1_rst_1>;
        pinctrl-16 = <&camera_pins_cam1_pnd_0>;
        pinctrl-17 = <&camera_pins_cam1_pnd_1>;
        pinctrl-18 = <&camera_pins_cam1_vcamd_0>;
        pinctrl-19 = <&camera_pins_cam1_vcamd_1>;
        pinctrl-20 = <&camera_pins_cam1_vcama_0>;
        pinctrl-21 = <&camera_pins_cam1_vcama_1>;
        pinctrl-22 = <&camera_pins_cam1_mclk_off>;
        pinctrl-23 = <&camera_pins_cam1_mclk_2ma>;
        pinctrl-24 = <&camera_pins_cam1_mclk_4ma>;
        pinctrl-25 = <&camera_pins_cam1_mclk_6ma>;
        pinctrl-26 = <&camera_pins_cam1_mclk_8ma>;
        pinctrl-27 = <&camera_pins_cam2_rst_0>;
        pinctrl-28 = <&camera_pins_cam2_rst_1>;
        pinctrl-29 = <&camera_pins_cam2_pnd_0>;
        pinctrl-30 = <&camera_pins_cam2_pnd_1>;
        pinctrl-31 = <&camera_pins_cam2_vcamd_0>;
        pinctrl-32 = <&camera_pins_cam2_vcamd_1>;
        pinctrl-33 = <&camera_pins_cam2_vcama_0>;
        pinctrl-34 = <&camera_pins_cam2_vcama_1>;
        pinctrl-35 = <&camera_pins_cam2_mclk_off>;
        pinctrl-36 = <&camera_pins_cam2_mclk_2ma>;
        pinctrl-37 = <&camera_pins_cam2_mclk_4ma>;
        pinctrl-38 = <&camera_pins_cam2_mclk_6ma>;
        pinctrl-39 = <&camera_pins_cam2_mclk_8ma>;
        cam0_vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;
        cam1_vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;
        cam2_vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;
        cam0_enable_sensor = "imx214_mipi_raw";
        cam1_enable_sensor = "imx214sub_mipi_raw";
        cam2_enable_sensor = "imx214main2_mipi_raw";
        status = "okay";
};
/* CAMERA GPIO end */
三、工程配置中定义imgsensor
device\mediateksample\k6853v1_64_6360\ProjectConfig.mk
CUSTOM_HAL_IMGSENSOR = imx214_mipi_raw imx214sub_mipi_raw imx214main2_mipi_raw
CUSTOM_HAL_MAIN2_IMGSENSOR = imx214main2_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR = imx214_mipi_raw
CUSTOM_HAL_SUB_IMGSENSOR = imx214sub_mipi_raw
CUSTOM_KERNEL_IMGSENSOR = imx214_mipi_raw imx214sub_mipi_raw imx214main2_mipi_raw
CUSTOM_KERNEL_MAIN2_IMGSENSOR = imx214main2_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR = imx214_mipi_raw
CUSTOM_KERNEL_SUB_IMGSENSOR = imx214sub_mipi_raw
kernel-4.14\arch\arm64\configs\k6853v1_64_6360_defconfig
kernel-4.14\arch\arm64\configs\k6853v1_64_6360_debug_defconfig
CONFIG_CUSTOM_KERNEL_IMGSENSOR="imx214_mipi_raw imx214sub_mipi_raw imx214main2_mipi_raw"
四、kernel中的配置
添加驱动
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imx214_mipi_raw
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imx214sub_mipi_raw
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imx214main2_mipi_raw
static struct imgsensor_info_struct imgsensor_info = {
        .sensor_id = IMX214_SENSOR_ID, //sensor_id 名字不能一样 定义的ID可以分别+1
配置sensor_list
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);//声明SensorInit
UINT32 IMX214SUB_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT  **pfFunc);
UINT32 IMX214MAIN2_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT  **pfFunc);
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imgsensor_sensor_list.c
#if defined(IMX219_MIPI_RAW)
{IMX219_SENSOR_ID, SENSOR_DRVNAME_IMX219_MIPI_RAW, IMX219_MIPI_RAW_SensorInit},
#endif
#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
#if defined(IMX214MAIN2_MIPI_RAW)
{IMX214MAIN2_SENSOR_ID, SENSOR_DRVNAME_IMX214MAIN2_MIPI_RAW, IMX214MAIN2_MIPI_RAW_SensorInit},
#endif
定义SENSOR_ID和SENSOR_DRVNAME
kernel-4.14\drivers\misc\mediatek\imgsensor\inc\kd_imgsensor.h
#define IMX214_SENSOR_ID                        0x0214
#define IMX214SUB_SENSOR_ID                     0x0216
#define IMX214MAIN2_SENSOR_ID                   0x0218
添加上电时序
kernel-4.14\drivers\misc\mediatek\imgsensor\src\common\v1_1\imgsensor_pwr_seq.c
struct IMGSENSOR_HW_POWER_SEQ 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
.....
}
五、vendor中的配置
配置MCLK
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor_src\cfg_setting_imgsensor.cpp
static CUSTOM_CFG gCustomCfg[] = {
    {
        .sensorIdx     = IMGSENSOR_SENSOR_IDX_MAIN,
        .mclk          = CUSTOM_CFG_MCLK_1, //MCLK0 与原理图对应
        .port          = CUSTOM_CFG_CSI_PORT_1,
        .dir           = CUSTOM_CFG_DIR_REAR,
        .bitOrder      = CUSTOM_CFG_BITORDER_9_2,
        .orientation   = 90,
        .horizontalFov = 67,
        .verticalFov   = 49
    },
    {
        .sensorIdx     = IMGSENSOR_SENSOR_IDX_SUB,
        .mclk          = CUSTOM_CFG_MCLK_4, //MCLK3
        .port          = CUSTOM_CFG_CSI_PORT_3, 
        .dir           = CUSTOM_CFG_DIR_FRONT,
        .bitOrder      = CUSTOM_CFG_BITORDER_9_2,
        .orientation   = 270,
        .horizontalFov = 63,
        .verticalFov   = 40,
        .secure        = CUSTOM_CFG_SECURE_M0
    },
    {
        .sensorIdx     = IMGSENSOR_SENSOR_IDX_MAIN2,
        .mclk          = CUSTOM_CFG_MCLK_2,  //MCLK1
        .port          = CUSTOM_CFG_CSI_PORT_2,
        .dir           = CUSTOM_CFG_DIR_REAR,
        .bitOrder      = CUSTOM_CFG_BITORDER_9_2,
        .orientation   = 90,
        .horizontalFov = 75,
        .verticalFov   = 60
    },
配置自动对焦
vendor\mediatek\proprietary\custom\mt6853\hal\lens\src\lenslist.cpp
//由于摄像头都是214,所以使用同一个LENS
配置sensorlist
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor_src\sensorlist.cpp /*sensorlist中的放置位置必须与kernel 中的 sensorlist中保持一致*/
配置效果
vendor\mediatek\proprietary\custom\common\hal\imgsensor_metadata\sensor\imx214_mipi_raw\    /*这个路径下的效果必须要有配置,不然摄像头不亮*/
vendor\mediatek\proprietary\custom\common\hal\imgsensor_metadata\sensor\imx214main2_mipi_raw\
vendor\mediatek\proprietary\custom\common\hal\imgsensor_metadata\sensor\imx214sub_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\sendepfeature\imx214_mipi_raw\config.ftbl.imx214_mipi_raw.h
vendor\mediatek\proprietary\custom\mt6853\hal\sendepfeature\imx214main2_mipi_raw\config.ftbl.imx214main2_mipi_raw.h
vendor\mediatek\proprietary\custom\mt6853\hal\sendepfeature\imx214sub_mipi_raw\config.ftbl.imx214sub_mipi_raw.h
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor_metadata\imx214_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor_metadata\imx214main2_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor_metadata\imx214sub_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor\ver1\imx214sub_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor\ver1\imx214main2_mipi_raw\
vendor\mediatek\proprietary\custom\mt6853\hal\imgsensor\ver1\imx214_mipi_raw\
六、device中的配置
device\mediatek\common\kernel-headers\kd_imgsensor.h /*与kernel中kd_imgsensor.h里面的放置保持一致*/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zeropoint127

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

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

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

打赏作者

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

抵扣说明:

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

余额充值