mtk8175添加一款camera(GC5035)流程

news2024/11/16 23:29:48

说明:

在MTK平台添加一款新的Camera IC 需要如下三个步骤:

  1. device目录下面添加相关宏定义。

  2. kernel目录下面添加dts配置,即硬件管脚、时钟、电源、I2C等的配置和 添加相关的驱动。

  3. vendor 目录下面添加相关的效果文件。

下面是自己在MTK8175 kernel-4.14 android9.0中添加GC5035的记录,供参考

1.device目录
在这里插入图片描述
在这里插入图片描述

2.kernel目录

diff --git a/kernel-4.14/arch/arm/boot/dts/xxx.dts b/kernel-4.14/arch/arm/boot/dts/xxx.dts
index 920957710c..2435094cb0 100644
--- a/kernel-4.14/arch/arm/boot/dts/xxx.dts
+++ b/kernel-4.14/arch/arm/boot/dts/xxx.dts
@@ -255,9 +255,9 @@ ROOT_NODE {
        clock-frequency = <100000>;
        status = "okay";
 
-       kd_camera_hw1@20 {
+       kd_camera_hw1@6e {
                compatible = "mediatek,camera_main";
-               reg = <0x3c>;
+               reg = <0x6e>;
        };
 };
 
@@ -299,9 +299,9 @@ ROOT_NODE {
        vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;       /* DOVDD */
 
        /* sub cam power supply */
-       vcama_sub-supply = <&mt_pmic_vcama_ldo_reg>;         /* AVDD */
-       vcamd_sub-supply = <&mt_pmic_vcamd_ldo_reg>;         /* DVDD */
-       vcamio_sub-supply = <&mt_pmic_vcamio_ldo_reg>;       /* DOVDD */
+       //vcama_sub-supply = <&mt_pmic_vcama_ldo_reg>;         /* AVDD */
+       //vcamd_sub-supply = <&mt_pmic_vcamd_ldo_reg>;         /* DVDD */
+       //vcamio_sub-supply = <&mt_pmic_vcamio_ldo_reg>;       /* DOVDD */
 
        pinctrl-names = "default",
                        "cam0_rst0", "cam0_rst1", "cam0_pnd0", "cam0_pnd1",
@@ -527,7 +527,7 @@ ROOT_NODE {
 
        camera_pins_cam0_rst0: cam0@0 {
                pins_cmd_dat {
-                       pinmux = <MT8168_PIN_2_GPIO2__FUNC_GPIO2>;
+                       pinmux = <MT8168_PIN_16_GPIO16__FUNC_GPIO16>;
                        slew-rate = <1>; /*direction 0:in, 1:out*/
                        output-low;
                };
@@ -535,7 +535,7 @@ ROOT_NODE {
 
        camera_pins_cam0_rst1: cam0@1 {
                pins_cmd_dat {
-                       pinmux = <MT8168_PIN_2_GPIO2__FUNC_GPIO2>;
+                       pinmux = <MT8168_PIN_16_GPIO16__FUNC_GPIO16>;
                        slew-rate = <1>;
                        output-high;
                };
@@ -543,7 +543,7 @@ ROOT_NODE {
 
        camera_pins_cam0_pnd0: cam0@2 {
                pins_cmd_dat {
-                       pinmux = <MT8168_PIN_3_GPIO3__FUNC_GPIO3>;
+                       pinmux = <MT8168_PIN_17_GPIO17__FUNC_GPIO17>;
                        slew-rate = <1>;
                        output-low;
                };
@@ -551,7 +551,7 @@ ROOT_NODE {
 
        camera_pins_cam0_pnd1: cam0@3 {
                pins_cmd_dat {
-                       pinmux = <MT8168_PIN_3_GPIO3__FUNC_GPIO3>;
+                       pinmux = <MT8168_PIN_17_GPIO17__FUNC_GPIO17>;
                        slew-rate = <1>;
                        output-high;
                };
diff --git a/kernel-4.14/arch/arm/configs/xxx_debug_defconfig b/kernel-4.14/arch/arm/configs/xxx_debug_defconfig
index ebd6959eb2..93f0efd24a 100644
--- a/kernel-4.14/arch/arm/configs/xxx_debug_defconfig
+++ b/kernel-4.14/arch/arm/configs/xxx_debug_defconfig
@@ -103,7 +103,7 @@ CONFIG_MTK_PMIC_WRAP_HAL=y
 CONFIG_MTK_STATIC_POWER=y
 CONFIG_MTK_UNIFY_POWER=y
 CONFIG_MTK_CM_MGR=y
-CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc2375_mipi_raw sp2509_mipi_raw"
+CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc5035_mipi_raw sp2509_mipi_raw"
 CONFIG_MTK_CMDQ=y
 CONFIG_MTK_IMGSENSOR=y
 CONFIG_MTK_LCM=y
diff --git a/kernel-4.14/arch/arm/configs/insight10s_defconfig b/kernel-4.14/arch/arm/configs/insight10s_defconfig
index 3d1566de19..d68524f835 100644
--- a/kernel-4.14/arch/arm/configs/insight10s_defconfig
+++ b/kernel-4.14/arch/arm/configs/insight10s_defconfig
@@ -101,7 +101,7 @@ CONFIG_MTK_PMIC_WRAP_HAL=y
 CONFIG_MTK_STATIC_POWER=y
 CONFIG_MTK_UNIFY_POWER=y
 CONFIG_MTK_CM_MGR=y
-CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc2375_mipi_raw sp2509_mipi_raw"
+CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc5035_mipi_raw sp2509_mipi_raw"
 CONFIG_MTK_CMDQ=y
 CONFIG_MTK_IMGSENSOR=y
 CONFIG_MTK_LCM=y
diff --git a/kernel-4.14/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h b/kernel-4.14/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
index 45c1299792..14937cb94d 100644
--- a/kernel-4.14/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
+++ b/kernel-4.14/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
@@ -288,6 +288,7 @@
 #define GC0310_SENSOR_ID                        0xa310
 #define GC0313MIPI_YUV_SENSOR_ID                0xD0
 #define GC0312_SENSOR_ID                        0xb310
+#define GC5035_SENSOR_ID                    0x5035
 /*SP*/
 #define SP0A19_YUV_SENSOR_ID                    0xA6
 #define SP2518_YUV_SENSOR_ID                    0x53
@@ -471,6 +472,7 @@
 #define SENSOR_DRVNAME_GC0310_YUV               "gc0310_yuv"
 #define SENSOR_DRVNAME_GC0312_YUV               "gc0312_yuv"
 #define SENSOR_DRVNAME_GC0313MIPI_YUV           "gc0313_mipi_yuv"
+#define SENSOR_DRVNAME_GC5035_MIPI_RAW           "gc5035_mipi_raw"
 /*SP*/
 #define SENSOR_DRVNAME_SP0A19_YUV               "sp0a19_yuv"
 #define SENSOR_DRVNAME_SP2518_YUV               "sp2518_yuv"
diff --git a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c
index 38f84ce412..e28665a880 100644
--- a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c
+++ b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c
@@ -444,6 +444,9 @@ struct IMGSENSOR_SENSOR_LIST
 #endif
 #if defined(GC0310_YUV)
 {GC0310_SENSOR_ID, SENSOR_DRVNAME_GC0310_YUV, GC0310_YUV_SensorInit},
+#endif
+#if defined(GC5035_MIPI_RAW)
+{GC5035_SENSOR_ID, SENSOR_DRVNAME_GC5035_MIPI_RAW, GC5035_MIPI_RAW_SensorInit},
 #endif
        /*SP*/
 #if defined(SP2509_MIPI_RAW)
diff --git a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h
index 618dc1e22b..ba4e8742a6 100644
--- a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h
+++ b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h
@@ -149,7 +149,9 @@ UINT32 GC0330_YUV_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
 UINT32 GC0329_YUV_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
 UINT32 GC0313MIPI_YUV_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
 UINT32 GC0310_YUV_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
+UINT32 GC5035_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
 UINT32 IMX215_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
+
 /*SP*/
 UINT32 SP0A19_YUV_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
 UINT32 SP2509_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
diff --git a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt8168/camera_hw/imgsensor_cfg_table.c b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt8168/camera_hw/imgsensor_cfg_table.c
index c3d0e1035c..0001d78ef8 100644
--- a/kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt8168/camera_hw/imgsensor_cfg_table.c
+++ b/kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt8168/camera_hw/imgsensor_cfg_table.c
@@ -145,6 +145,21 @@ struct IMGSENSOR_HW_POWER_SEQ platform_power_sequence[] = {
 /* Legacy design */
 struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[] = {
 /* GC */
+#if defined(GC5035_MIPI_RAW)
+       {
+               SENSOR_DRVNAME_GC5035_MIPI_RAW,
+               {
+                       {SensorMCLK, Vol_High, 0},
+                       {PDN, Vol_Low,0},
+                       {RST, Vol_Low, 0},
+                       {DOVDD, Vol_1800, 1},
+                       {DVDD, Vol_1200, 5},
+                       {AVDD, Vol_2800, 5},
+                       {PDN, Vol_High, 5},
+                       {RST, Vol_High, 5}
+               },
+       },
+#endif
 #if defined(GC2385MIPI_RAW_CHXT_REAR)
        {
                SENSOR_DRVNAME_GC2385MIPI_RAW_CHXT_REAR,

3.vendor目录

在这里插入图片描述

4.上述kernel和vendor添加的文件目录有
在这里插入图片描述
按照上述的修改,添加文件需找FAE提供。或者找个相近的替换先调通整个流程。
这样修改后全编译后,使用自带的camera2即可打开camera预览。

调试时可使用:
adb查看是否读到id
cat /proc/driver/camera_info
调试vendor下面代码时可打开日志
文件位置vendor/mediatek/proprietary/hardware/mtkcam/legacy/include/mtkcam/Log.h
把 1改成 4即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Java8的forEach()中使用break/continue

今天在开发中&#xff0c;使用forEach()来遍历元素执行业务操作&#xff0c;发现如果判断不符合某个条件时就要continue&#xff0c;不能继续向后执行了。但是在forEach()中不能使用for循环中的continue和break&#xff0c;那改如何退出呢&#xff1f; 答案是&#xff1a;使用…

利用open_cv在图像上进行点标记,文字注记,画圆、多边形、椭圆

&#xff08;1&#xff09;CV2中的绘图函数&#xff1a; cv2.line() 绘制线条cv2.circle() 绘制圆cv2.rectangle() 绘制矩形cv2.ellipse() 绘制椭圆cv2.putText() 添加注记 &#xff08;2&#xff09;注释 img表示需要绘制的图像color表示线条的颜色&#xff0c;采用颜色矩阵…

Python基础学习第一天:关于Python的简单介绍

前言 最近一批批大一新生都要开始踏入校园了&#xff0c;计算机专业 emmm…如果有需要学习python的&#xff0c;尤其是还没开学的&#xff0c;确实可以开始找找资料看看python了&#xff0c;如果是自己本来就对python感兴趣&#xff0c;更应该需要看看了&#xff0c;毕竟学校到…

【五】sql 语言 -- 概览

SQL 语言概述SQL 语言提出和发展SQL 语言的功能概述利用 SQL 语言建立数据库学生选课数据库 SCT1. 定义数据库和表 SQL-DDL创建数据库的语句—Create Database创建关系/表的语句—Create Table 2. 向表中追加元组 SQL-DML 利用 SQL 语言进行简单查询单表查询 - SELECT-FROM-WHE…

工地安全帽识别闸机联动开关 yolov7

工地安全帽识别闸机联动开关系统通过yolov7系列网络模型深度学习算法&#xff0c;工地安全帽识别闸机联动开关算法对施工人员的人脸、安全帽和反光衣进行识别&#xff0c;判断是否符合安全要求。只有当人脸识别成功且安全帽、反光衣齐全时&#xff0c;闸机才会打开允许施工人员…

FFmpeg支持多线程编码并保存mp4文件示例

之前介绍的示例&#xff1a; (1).https://blog.csdn.net/fengbingchun/article/details/132129988 中对编码后数据保存成mp4 (2).https://blog.csdn.net/fengbingchun/article/details/132128885 中通过AVIOContext实现从内存读取数据 (3).https://blog.csdn.net/fengbingchun/…

基于XGBoots预测A股大盘《上证指数》(代码+数据+一键可运行)

对AI炒股感兴趣的小伙伴可加WX&#xff1a;caihaihua057200&#xff08;备注&#xff1a;学校/公司名字方向&#xff09; 另外我还有些AI的应用可以一起研究&#xff08;我一直开源代码&#xff09; 1、引言 在这期内容中&#xff0c;我们回到AI预测股票&#xff0c;转而探索…

知识图谱实战应用25-基于py2neo的超市商品的图谱构建与商品推荐系统的实现

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用25-基于py2neo的超市商品的图谱构建与商品推荐系统的实现,本篇文章,我将指导大家如何使用py2neo和Neo4j构建一个实用的超市商品知识图谱和推荐系统。该系统可以帮助用户快速找到感兴趣的商品,并提供个性化的推荐服务…

【mysql】MySQL服务无法启动 NET HELPMSG 3534

MySQL服务无法启动 NET HELPMSG 3534 错误描述寻找原因解决方法 错误描述 mysql版本&#xff1a;8.1.0 mysql安装成功之后&#xff0c;使用net start mysql来启动mysql&#xff0c;然后出现了报错 MySQL服务无法启动 NET HELPMSG 3534 寻找原因 1、在cmd中&#xff0c;进入…

【论文笔记】最近看的时空数据挖掘综述整理8.27

Deep Learning for Spatio-Temporal Data Mining: A Survey 被引用次数&#xff1a;392 [Submitted on 11 Jun 2019 (v1), last revised 24 Jun 2019 (this version, v2)] 主要内容&#xff1a; 该论文是一篇关于深度学习在时空数据挖掘中的应用的综述。论文首先介绍了时空数…

css background实现四角边框

2023.8.27今天我学习了如何使用css制作一个四角边框&#xff0c;效果如下&#xff1a; .style{background: linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) right top,linear-gradient(#33cdfa, #…

阿里云 Serverless 应用引擎 2.0,正式公测!

阿里云 Serverless 应用引擎 SAE2.0 正式公测上线&#xff01;全面升级后的 SAE2.0 具备极简体验、标准开放、极致弹性三大优势&#xff0c;应用冷启动全面提效&#xff0c;秒级完成创建发布应用&#xff0c;应用成本下降 40% 以上。 此外&#xff0c;阿里云还带来容器服务 Se…

【Python】基于Python的电话簿(Phonebook project)设计(代码详解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【农业生产模拟】WOFOST模型与PCSE模型实践

实现作物产量的准确估算对于农田生态系统响应全球变化、可持续发展、科学粮食政策制定、粮食安全维护都至关重要。传统的经验模型、光能利用率模型等估产模型原理简单&#xff0c;数据容易获取&#xff0c;但是作物生长发育非常复杂&#xff0c;中间涉及众多生理生化过程&#…

Yandex SEO和Google SEO有啥区别?5000字说必须要了解的一些事儿

最近筋斗云SEO服务有做一些俄罗斯市场的SEO&#xff0c;而做俄罗斯的SEO相当于就是要做Yandex的SEO。对比Google的SEO优化&#xff0c;其实有比较多的区别&#xff0c;但总体算法、逻辑等等都大致相似。本文从Linus自己的研究和搜集的公开信息&#xff0c;对比一下Google和Yand…

校园安全Ai视频分析预警算法

校园安全Ai视频分析预警算法通过yolov5python深度学习算法网络模型&#xff0c;校园安全Ai视频分析预警算法对学生的行为进行智能监测和预警如识别学生打架斗殴、抽烟、翻墙、倒地以及异常聚集等行为&#xff0c;及时发出预警通知。YOLO的结构非常简单&#xff0c;就是单纯的卷…

Python框架【模板继承 、继承模板实战、类视图 、类视图的好处 、类视图使用场景、基于调度方法的类视图】(四)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMIZER

文章目录 前言PIECEWISE_JERK_PATH_OPTIMIZER功能简介PIECEWISE_JERK_PATH_OPTIMIZER相关配置PIECEWISE_JERK_PATH_OPTIMIZER总体流程OptimizePathpiecewise_jerk_problem二次规划问题标准形式定义优化变量定义目标函数设计约束OptimizeFormulateProblem计算QP系数矩阵Calculat…

MERN Stack 教程

This tutorial will show you how to build a full-stack MERN application—in this case, an employee database—with the most current tools available. Before you begin, make sure that you are familiar with Node.js and React.js basics and have Node and Create R…

数据结构队列的实现

本章介绍数据结构队列的内容&#xff0c;我们会从队列的定义以及使用和OJ题来了解队列&#xff0c;话不多说&#xff0c;我们来实现吧 队列 1。队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;…