和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一 、ProjectConfig.mk文件配置
二、defconfig文件修改
三、kernel层驱动代码
四、hal层驱动代码
五、kernel层摄像头文件夹
六、hal层摄像头文件夹
七、sensor上下电代码

这里记录添加一个新的sensor需要注意的文件,以mt6779为例。

一 、ProjectConfig.mk文件配置

//device/mediatek/mt6779/ProjectConfig.mk

//sensorCUSTOM_HAL_IMGSENSOR = gc8034_mipi_raw hi846_mipi_raw gc5035_mipi_raw sc500cs_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR =gc8034_mipi_raw hi846_mipi_raw
CUSTOM_HAL_SUB_IMGSENSOR = gc5035_mipi_raw sc500cs_mipi_rawCUSTOM_KERNEL_IMGSENSOR = gc8034_mipi_raw hi846_mipi_raw gc5035_mipi_raw sc500cs_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR = gc8034_mipi_raw hi846_mipi_raw
CUSTOM_KERNEL_SUB_IMGSENSOR = gc5035_mipi_raw sc500cs_mipi_raw//lensCUSTOM_HAL_LENS = fp5510e2af dummy_lens
CUSTOM_HAL_MAIN_LENS = fp5510e2af
CUSTOM_HAL_SUB_LENS = dummy_lensCUSTOM_KERNEL_LENS = fp5510e2af dummy_lens
CUSTOM_KERNEL_MAIN_LENS = fp5510e2af
CUSTOM_KERNEL_SUB_LENS = dummy_lens//flashlight:支持flashlight则设置为constant_flashlight,不支持设置为 dummy_flashlightCUSTOM_HAL_FLASHLIGHT = dummy_flashlight
CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight

二、defconfig文件修改

//kernel-4.19/arch/arm64/configs/
//k79v1_64_defconfig 和 k79v1_64_debug_defconfig

CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc8034_mipi_raw hi846_mipi_raw gc5035_mipi_raw sc500cs_mipi_raw"

三、kernel层驱动代码

添加新的camera sensor ID定义,sensor ID 来自于对应的 datasheet

//device/mediatek/common/kernel-headers/kd_imgsensor.h

#define GC8034_SENSOR_ID      0x8044#define SENSOR_DRVNAME_GC8034_MIPI_RAW "gc8034_mipi_raw"#define SC500CS_SENSOR_ID     0xEE27#define SENSOR_DRVNAME_SC500CS_MIPI_RAW          "sc500cs_mipi_raw"//kernel-4.19/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h#define GC8034_SENSOR_ID     0x8044#define SENSOR_DRVNAME_GC8034_MIPI_RAW          "gc8034_mipi_raw"#define SC500CS_SENSOR_ID    0xEE27#define SENSOR_DRVNAME_SC500CS_MIPI_RAW          "sc500cs_mipi_raw"

//kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1(v1_1)/imgsensor_sensor_list.h

extern struct IMGSENSOR_INIT_FUNC_LIST kdSensorList[];UINT32 GC8034_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);/*第一个参数对应 Camera Snesor ID第二个参数对应 Camera Sensor name第三个参数对应 Camera Sensor init Function
*///kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1(v1_1)/imgsensor_sensor_list.cstruct IMGSENSOR_INIT_FUNC_LIST kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR] = {//...#if defined(GC8034_MIPI_RAW){GC8034_SENSOR_ID,SENSOR_DRVNAME_GC8034_MIPI_RAW,GC8034_MIPI_RAW_SensorInit},#endif}//kernel-4.19/drivers/misc/mediatek/imgsensor/src/mt6779/gc8034_mipi_raw/gc8034mipi_Sensor.cUINT32 GC8034_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc){/* Check Sensor status here */if (pfFunc != NULL)*pfFunc = &sensor_func;return ERROR_NONE;}

四、hal层驱动代码

在hal层的sensor列表添加新的sensor

//vendor/mediatek/proprietary/custom/mt6739/hal/imgsensor_src/sensorlist.cpp

MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] ={//...#if defined(GC8034_MIPI_RAW)RAW_INFO_M(GC8034_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_GC8034_MIPI_RAW,NULL),#endif#if defined(SC500CS_MIPI_RAW)RAW_INFO_M(SC500CS_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_SC500CS_MIPI_RAW, NULL),#endif}

注意:sensorlist.cpp 中的SensorList[] 与 kd_sensorlist.h 中的kdSensorList[]的sensor 顺序必须一致,否则 user space 和 kernel space 在通过 ioctl 传递命令 id 时会对应错误。

五、kernel层摄像头文件夹

(A)lens文件路径:kernel-4.19/drivers/misc/mediatek/lens/

(B)flashlight文件路径:kernel-4.19/drivers/misc/mediatek/flashlight/

(C)imgsensor文件路径:

把厂商提供的包含前摄像头驱动文件夹 sc500cs_mipi_raw 和后摄像头驱动文件夹 gc8034_mipi_raw 拷贝到对应目录下,这两个文件夹里存放着厂商写好的前后摄像头驱动代码。

//kernel-4.19/drivers/misc/mediatek/imgsensor/src/mt6779/gc8034_mipi_raw
gc8034mipi_Sensor.h
gc8034mipi_Sensor.cMakefile//kernel-4.19/drivers/misc/mediatek/imgsensor/src/mt6779/sc500cs_mipi_raw
sc500csmipiraw_Sensor.h
sc500csmipiraw_Sensor.cMakefile

六、hal层摄像头文件夹

(A)lens文件路径:/vendor/mediatek/proprietary/custom/mt6779/hal/lens/

(B)flashlight文件路径:/vendor/mediatek/proprietary/custom/mt6779/hal/flashlight/

(C)imgsensor文件路径:/vendor/mediatek/proprietary/custom/mt6779/hal/imgsensor/

(D)metadata文件路径:/vendor/mediatek/proprietary/custom/mt6779/hal/imgsensor_metadata/

七、sensor上下电代码

//该文件配置sensor的上下电
//kernel-4.19/dirvers/misc/mediateck/imgsensor/src/mt6739/camera_hw/imgsensor_cfg_table.c

struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[] = {//.../*第一个参数对应 PowerType第二个参数对应 Voltage第三个参数对应 Delay Time in msDVDD/DOVDD/AVDD/AFVDD 的电压支持情况可以参考 specific pmic datasheet 进行设置*/#if defined(GC8034_MIPI_RAW){SENSOR_DRVNAME_GC8034_MIPI_RAW,{{PDN, Vol_Low, 0},{RST, Vol_Low, 1},{DOVDD, Vol_1800, 1},{DVDD, Vol_1200, 1},{AVDD, Vol_2800, 1},{SensorMCLK, Vol_High, 2},{PDN, Vol_High, 0},{RST, Vol_High, 2}},},#endif#if defined(SC500CS_MIPI_RAW){SENSOR_DRVNAME_SC500CS_MIPI_RAW,{{PDN, Vol_Low, 0},{RST, Vol_Low, 1},{DOVDD, Vol_1800, 1},{DVDD, Vol_1200, 1},{AVDD, Vol_2800, 1},{SensorMCLK, Vol_High, 2},{PDN, Vol_High, 0},{RST, Vol_High, 2}},},#endif}struct IMGSENSOR_HW_CFG imgsensor_custom_config[] = {{IMGSENSOR_SENSOR_IDX_MAIN,IMGSENSOR_I2C_DEV_0,{{IMGSENSOR_HW_PIN_MCLK,  IMGSENSOR_HW_ID_MCLK},{IMGSENSOR_HW_PIN_AVDD,  IMGSENSOR_HW_ID_GPIO},//GPIO上电逻辑{IMGSENSOR_HW_PIN_DOVDD, IMGSENSOR_HW_ID_REGULATOR},{IMGSENSOR_HW_PIN_DVDD,  IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_PDN,   IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_RST,   IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_NONE,  IMGSENSOR_HW_ID_NONE},},},{IMGSENSOR_SENSOR_IDX_SUB,IMGSENSOR_I2C_DEV_1,{{IMGSENSOR_HW_PIN_MCLK,  IMGSENSOR_HW_ID_MCLK},{IMGSENSOR_HW_PIN_AVDD,  IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_DOVDD, IMGSENSOR_HW_ID_REGULATOR},{IMGSENSOR_HW_PIN_DVDD,  IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_PDN,   IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_RST,   IMGSENSOR_HW_ID_GPIO},{IMGSENSOR_HW_PIN_NONE, IMGSENSOR_HW_ID_NONE},},},}struct IMGSENSOR_HW_POWER_SEQ platform_power_sequence[] = {#ifdef MIPI_SWITCH{IMGSENSOR_TOSTRING(IMGSENSOR_SENSOR_IDX_SUB),{{IMGSENSOR_HW_PIN_MIPI_SWITCH_EN,IMGSENSOR_HW_PIN_STATE_LEVEL_0,0,IMGSENSOR_HW_PIN_STATE_LEVEL_HIGH,0},{IMGSENSOR_HW_PIN_MIPI_SWITCH_SEL,IMGSENSOR_HW_PIN_STATE_LEVEL_HIGH,0,IMGSENSOR_HW_PIN_STATE_LEVEL_0,0},}},#endif

//kernel-4.19/drivers/misc/mediatek/imgsensor/src/mt6761/camera_hw/regulator/regulator.c

enum REGULATOR_VOLTAGE {REGULATOR_VOLTAGE_0    = 0,REGULATOR_VOLTAGE_1000 = 1000000,REGULATOR_VOLTAGE_1100 = 1100000,REGULATOR_VOLTAGE_1200 = 1200000,REGULATOR_VOLTAGE_1210 = 1210000,REGULATOR_VOLTAGE_1220 = 1220000,REGULATOR_VOLTAGE_1500 = 1500000,REGULATOR_VOLTAGE_1800 = 1800000,REGULATOR_VOLTAGE_2500 = 2500000,REGULATOR_VOLTAGE_2800 = 2800000,REGULATOR_VOLTAGE_2900 = 2900000,};enum REGULATOR_TYPE {REGULATOR_TYPE_VCAMA,REGULATOR_TYPE_VCAMD,REGULATOR_TYPE_VCAMIO,REGULATOR_TYPE_MAX_NUM};static const int regulator_voltage[] = {REGULATOR_VOLTAGE_0,REGULATOR_VOLTAGE_1000,REGULATOR_VOLTAGE_1100,REGULATOR_VOLTAGE_1200,REGULATOR_VOLTAGE_1210,REGULATOR_VOLTAGE_1220,REGULATOR_VOLTAGE_1500,REGULATOR_VOLTAGE_1800,REGULATOR_VOLTAGE_2500,REGULATOR_VOLTAGE_2800,REGULATOR_VOLTAGE_2900,};struct REGULATOR_CTRL regulator_control[REGULATOR_TYPE_MAX_NUM] = {{"vcama"},{"vcamd"},{"vcamio"},};//然后通过regulator_init,regulator_set函数进行电压设置static struct IMGSENSOR_HW_DEVICE device = {.id        = IMGSENSOR_HW_ID_REGULATOR,.pinstance = (void *)&reg_instance,.init      = regulator_init,.set       = regulator_set,.release   = regulator_release,.dump      = regulator_dump};enum IMGSENSOR_RETURN imgsensor_hw_regulator_open(struct IMGSENSOR_HW_DEVICE **pdevice){*pdevice = &device;return IMGSENSOR_RETURN_SUCCESS;}

GPIO上电逻辑:主要配置GPIO的上电逻辑,把camera的上电管脚与平台管脚相关联
code:kernel-4.19/arch/arm64/boot/dts/mediatek/k79v1_64.dts

原文链接:https://blog.csdn.net/dongxianfei/article/details/121081576

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点击阅读原文,为大佬点赞!

MTK Camera Senor Bring up 复盘总结相关推荐

  1. MTK camera flashlight bring up

    MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...

  2. MTK Camera 基础知识

    文章目录 数字成像系统流程综述 曝光 对焦马达 镜头(lens) MIPI数据与RAW数据的转换(未完待续) ISP的主要内容和Bayer Raw的处理 RGB.YUV和YCbCr三种颜色空间 补充 ...

  3. mtk camera 移植步骤

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

  4. Camera4 MTK camera驱动结构介绍

    一.概述: MTK  camera主要的内容在hal层,现在有hal1/hal3,当下主流的使用的是hal3,驱动主要负责sensor 电源的控制以及sensor相关寄存器的操作,MTK采用设备和驱动 ...

  5. Mtk Camera中Hal1/Hal3的Picture size和Preview size配置

    在进行camera系统开发时,总会碰到产品需要,需要一个添加一个多少多少M的照片大小,比如产品经理说我们也要添加一个1:1,添加一个18:9的照片大小.这个情况很常见了,所以这篇文章总结一下平常工作中 ...

  6. MTK平台开机初始化时 camera驱动流程|MTK camera调试常见几十种问题处理方法

    转载:https://www.jianshu.com/p/75ab1d82bbd3 mtk的驱动多是以模块加载的方式(module_init():module_exit():)加载到内核中去的:正因为 ...

  7. android mtk camera startpreview,android8.1 mtk camera hal各种操作流程

    最近一年,一直在做android上的视频编解码和录相.以及camera hal和系统框架这一块.随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处.偏偏网上相关的资料却是极少 ...

  8. MTK Camera驱动移植

    对于MTK Camera驱动移植一般分为四部分: 1.硬件IO口配置: 2.Camera驱动移植: 3.上电时序: 4.修改i2c控制器: 硬件电路: 1.GPIO配置 打开 mediatek\dct ...

  9. MTK 平台CTP bring up

    MTK 平台CTP bring up 记录MTK平台 CTP bring up的过程 一.TP的基础原理 二.bring up步骤 1.找到代码目录: 2.需要修改的地方一般为makefile,dts ...

最新文章

  1. mono for android 使用Tab 控件
  2. 线程的控制(创建、等待、终止)、分离线程
  3. 新手silverlight练习--五子棋( 二 )
  4. MySQL_多表链接查询
  5. Linux下安装wechat
  6. 【教程】python递归三部曲(基于turtle实现可视化)-一、谢尔宾斯基三角形
  7. OMNeT 例程 Tictoc18 学习笔记
  8. cdc comms interface驱动
  9. 解决在RHEL/CentOS7.4以上版本无法使用AFD(Oracle ASMFD)特性
  10. Miller_Rabin 米勒拉宾概率筛【模板】
  11. html5学习计划,关于学习计划模板汇编5篇
  12. explain的用法
  13. oeasy教您玩转linux010203显示logo
  14. 【Linux】 常用命令
  15. mysql association_Mybatis的一对多(collection)和一对一(association)查询
  16. JAVA高并发程序设计(葛一鸣著)读书笔记
  17. linux处理僵尸进程
  18. SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛-白色相簿
  19. 网络购书挑战书业传统营销模式
  20. skiplist - 跳表

热门文章

  1. 推荐一个开源数据同步神器,支持多种数据源和预警功能!
  2. Spring自动装配Map,List等集合
  3. HTML中的点缀--伪类
  4. Pcdmis海克斯康三坐标脱机软件2013至2021 CAD++全功能
  5. 安徽理工大学计算机专业等级,许光宇 - 安徽理工大学 - 计算机科学与工程学院...
  6. 扫雷游戏分析实现(完整代码)
  7. 莽荒纪计算机游戏,莽荒纪电脑版
  8. Eclipse SWT StyleTextProgressBar(八)
  9. Linux下如何清空Redis缓存
  10. 无人机上的光流定位通常适用于_现下大热的无人机机载激光雷达,究竟由哪些核心部件组成...