前言

Qocm平台 Android5.1 和 Android8.0 (msm8909)流程基本一致,Android9.0(msm8953)框架变化较大。

而展讯平台Android4.4(SC9820E),框架又有所不同,因此共三份文档。

  1. A-(msm8953 Android9.0)
  2. B-(msm8909 Android5.1/8.0)
  3. C-(SC9820E Android4.4)

本文是 C-(SC9820E Android4.4)

平台特性:

硬件平台:SL8521E

软件平台:Android-4.4

Sensor IC:

主摄:GC5025 5M(500w像素),主摄,最大 2 lane,5M像素

前摄:sp0a09z 0M3(30w像素),前摄,最大 1 lane,2M像素

其他:支持闪光灯,自动对焦,持续对焦,录像功能,HDR

数据格式:RGGB

前言

1 Kernel 部分

1.1 主摄硬件原理图 (Rear Camera SCH)

1.1.1 Rear Cam mipi 布线串联共模电感

1.1.2 Rear cam csi 1 主摄接线

1.1.3 Rear cam rst 脚

1.1.4 Rear cam mclk 时钟脚

1.1.5 Rear cam pwn 脚

1.1.6 Rear cam 获取主摄信息

1.2 主摄设备树配置 (Rear Camera dts cfg)

1.2.1 Rear cam I2C 节点配置

1.2.2 Rear cam mipi 节点配置

1.3 前摄硬件原理图 (Front Camera SCh)

1.3.1 Front cam mipi 布线串联共模电感

1.3.2 Front cam csi 0 前摄接线

1.3.3 Front cam rst 脚

1.3.4 Front cam mclk 脚

1.3.5 Front cam pwn 脚

1.3.6 Front cam 获取前摄信息

1.4 前摄设备树配置 (Front Camera dts cfg)

1.4.1 Front cam I2C 节点配置

1.4.2 Front cam mipi 节点配置

2 vendor 部分

2.1 device 下项目配置 camera

2.2 vendor 添加 lib 和 chromatix 文件

2.3 vendor 引用 lib 驱动入口函数

2.4 AF 驱动 & 修改编译选项

2.5 OTP 驱动 ( eeprom) & 修改编译选项

3 Tips

你再快,也永远有人比你快!Fighting ~~

1 Kernel 部分

1.1 主摄硬件原理图 (Rear Camera SCH)

查阅硬件主板主摄相关接口信息如下:

主摄 gc5025 500w:

1.1.1 Rear Cam mipi 布线串联共模电感

1.1.2 Rear cam csi 1 主摄接线

1.1.3 Rear cam rst 脚

1.1.4 Rear cam mclk 时钟脚

1.1.5 Rear cam pwn 脚

1.1.6 Rear cam 获取主摄信息

1. MIPI – CSI 接线

  1. MCSI1_CLK_P, MCSI1_CLK_P
  2. MCSI1_DATA1_P,MCSI1_DATA1_N
  3. MCSI1_DATA0_P,MCSI1_DATA0_N

2. cam rst复位脚、 cam mclk 时钟脚、csm pwn 脚

  1. gpio45、gpio43、gpio47

3. 供电部分

  1. VDD  IO核心电,1.8V – VDDCAMIO
  2. VDD  IO数字电,1.2V – VDDCAMCORE
  3. VDD  AF马达电,2.8V – VDDCAMMOT
  4. VDD  模拟电,   2.8V – VDDCAMA

1.2 主摄设备树配置 (Rear Camera dts cfg)

dts配置路径:kernel\arch\arm\boot\dts\xxx\xxx_sp9820e-2h10-native.dts

1.2.1 Rear cam I2C 节点配置

Rear Camera 配置节点:

&i2c0 { // 根据camera挂载更改status = "okay";clock-frequency = <400000>;/* Rear Camera */sensor_main: sensor-main@37 {compatible = "sprd,sensor-main";reg = <0x37>;clock-names = "clk_src","sensor_eb","clk_96m","clk_76m8","clk_48m","clk_26m";clocks = <&clk_sensor1>, <&clk_mm_ckg_gates 2>,<&clk_twpll_96m>,<&clk_twpll_76m8>,<&clk_twpll_48m>,<&ext_26m>;vddio-supply = <&vddcamio>;vddcama-supply = <&vddcama>;vddcamd-supply = <&vddcamd>;vddcammot-supply = <&vddcammot>;reset-gpios = <&ap_gpio 45 0>;power-down-gpios = <&ap_gpio 47 0>;host = "dcam0";port {sensor_main_0: endpoint {remote-endpoint = <&phy1_out>;};};};
...
};

1.2.2 Rear cam mipi 节点配置

&mipi_csi_phy1 {status = "okay";sprd,phyid = <1>;sprd,csi = <&csi0>;port {phy1_out: endpoint {remote-endpoint = <&sensor_main_0>;};};
};

1.3 前摄硬件原理图 (Front Camera SCH)

前摄 sp0a09z 03M(30w)像素

1.3.1 Front cam mipi 布线串联共模电感

1.3.2 Front cam csi 0 前摄接线

1.3.3 Front cam rst 脚

1.3.4 Front cam mclk 脚

1.3.5 Front cam pwn 脚

1.3.6 Front cam 获取前摄信息

1. MIPI – CSI0 接线

  1. MCSI0_CLK_P,MCSI0_CLK_N
  2. MCSI0_DATA0_P,MCSI1_DATA0_N

2. cam rst复位脚、 cam mclk 时钟脚、csm pwn 脚

  1. gpio44、gpio42、gpio46

3. 供电部分

  1. VDD  IO核心电1.8V – VDDCAMIO
  2. VDD  模拟电   2.8V – VDDCAMA

1.4 前摄设备树配置 (Front Camera dts cfg)

1.4.1 Front cam I2C 节点配置

&i2c0 { // 根据实际挂载修改status = "okay";clock-frequency = <400000>;
...sensor_sub:sensor-sub@3d {compatible = "sprd,sensor-sub";reg = <0x3d>;clock-names = "clk_src","sensor_eb","clk_96m","clk_76m8","clk_48m","clk_26m";clocks = <&clk_sensor0>, <&clk_mm_ckg_gates 1>,<&clk_twpll_96m>,<&clk_twpll_76m8>,<&clk_twpll_48m>,<&ext_26m>;vddio-supply = <&vddcamio>;vddcama-supply = <&vddcama>;vddcamd-supply = <&vddcamd>;vddcammot-supply = <&vddcammot>;reset-gpios = <&ap_gpio 44 0>;power-down-gpios = <&ap_gpio 46 0>;host = "dcam1";port {sensor_sub_0: endpoint {remote-endpoint = <&phy0_m_out>;};};};
};

1.4.2 Front cam mipi 节点配置

&mipi_csi_phy0_m {status = "okay";sprd,phyid = <2>;sprd,csi = <&csi1>;port {phy0_m_out:endpoint {remote-endpoint = <&sensor_sub_0>;};};
};

2 vendor 部分

2.1 device 下配置项目的 camera

路径: device\xxx\BoardConfig.mk

1.  修改对应的 camera 的对应像素信息配置,根据camera 规格书配置。

#select camera 2M,3M,5M,8M,13M,16M,21MCAMERA_SUPPORT_SIZE := 5M // 代表主摄
FRONT_CAMERA_SUPPORT_SIZE := 0M3 // 代表前摄

关闭对立冲突的宏

FRONT_CAMERA_SUPPORT_SIZE := 0M3
...
TARGET_BOARD_NO_FRONT_SENSOR := false

这两个宏的含义是相反的

如果使用了前摄就需要把 TARGET_BOARD_NO_FRONT_SENSOR 置false。

2. 修改前后摄像头对应的型号

#camera sensor type
CAMERA_SENSOR_TYPE_BACK := "gc5025,gc5035"
CAMERA_SENSOR_TYPE_FRONT := "sp0a09z"

3. 修改对焦功能配置

#select continuous auto focus
+TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus
+TARGET_BOARD_CAMERA_AUTOFOCUS := true

4. 以上信息务必根据实际需要填写

5. 若第一次无法点亮,可以屏蔽AF和FLASH LED功能,优先保证出图后,再调试其他功能。

2.2 vendor 添加 lib 和 chromatix 文件

一般lib和chromatix驱动文件厂家会提供,若不提供。

需要找一个比较相近的sensor,或同一个数据格式、同一个厂商的驱动文件上修改而来。

vendor驱动文件主要分2部分:

  1. lib 驱动参数配置部分和chromatix 效果参数配置部分
  2. 编译选项配置

不同于qcom架构,展讯的cam 驱动中,lib 驱动配置和效果参数配置文件位于同一个目录下。

以gc5025举例,添加lib驱动和chromatix驱动:

lib 驱动

路径:vendor\sprd\modules\libcamera\sensor\sensor_drv\classic\Galaxycore\gc5025\

文件

    sensor_gc5025_mipi_raw.c // 计算曝光等函数sensor_gc5025_mipi_raw.h // 驱动参数配置

chromatix 驱动

路径:vendor\sprd\modules\libcamera\sensor\sensor_drv\classic\Galaxycore\gc5025\parameters

文件:

    isp_nr.hsensor_gc5025_raw_param_cap_0.csensor_gc5025_raw_param_common.csensor_gc5025_raw_param_main.csensor_gc5025_raw_param_prv_0.csensor_gc5025_raw_param_video_0.c
...

2.3 vendor 引用 lib 驱动入口函数

修改路径: vendor/sprd/modules/libcamera/sensor/sensor_cfg.c

注意:主摄和前摄要添加到不同的数组中。

back_sensor_infor_tab[]
front_sensor_infor_tab[]

1. 声明

主摄声明

#ifdef GC5025
extern SENSOR_INFO_T g_sensor_gc5025_mipi_raw_info;
#endif

前摄声明

#ifdef SP2509
extern SENSOR_INFO_T g_sp2509_mipi_raw_info;
#endif

2. 添加进数组中

主摄添加:

const SENSOR_MATCH_T back_sensor_infor_tab[] = {
// gc area
...
#ifdef GC5035{MODULE_SUNNY, "gc5035", &g_gc5035_mipi_raw_info, {&dw9714_drv_entry, 0}, NULL},
#endif
...
};

前摄添加

const SENSOR_MATCH_T front_sensor_infor_tab[] = {
// sp area
...
#ifdef SP2509{MODULE_SUNNY, "sp2509", &g_sp2509_mipi_raw_info, {NULL, 0}, NULL},
#endif
...
};

2.4 AF 驱动 & 修改编译选项

gc5025使用了 dw9714 AF 马达驱动,以此为例添加 dw9714 AF马达驱动:

1. 打开使用 AF 的宏

马达是自动对焦使用的,需要打开相对应的宏

修改路径:vendor\sprd\modules\libcamera\SprdCtrl.mk

代码如:

    #select continuous auto focus 持续对焦宏控TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus 自动对焦宏控TARGET_BOARD_CAMERA_AUTOFOCUS := true

持续对焦控制方式:

TARGET_BOARD_CAMERA_CAF,若为真(true),则定义支持持续对焦的宏
===>
ifeq ($(strip $(TARGET_BOARD_CAMERA_CAF)),true)
LOCAL_CFLAGS += -DCONFIG_CAMERA_CAF
endif

自动对焦控制方式:

TARGET_BOARD_CAMERA_AUTOFOCUS,若不为真(true),则定义不支持自动对焦的宏

定义有点绕,但是控制原理还是和正常一样,这样做有一个好处,就是AF的功能默认就是开启的。

即:

AUTOFOCUS = true,判断条件不成立,无动作,就(默认)支持自动对焦功能。

AUTOFOCUS = false,判断条件成立,定义不支持AF的宏,就不支持自动对焦功能。

ifneq ($(strip $(TARGET_BOARD_CAMERA_AUTOFOCUS)),true)
LOCAL_CFLAGS += -DCONFIG_CAMERA_AUTOFOCUS_NOT_SUPPORT
endif

2 配置对应的AF 的宏

2.1 打开 AF 宏定义

device\prj_name\xxx\BoardConfig.mk

代码如:(这个宏经过追溯代码调用,好像不起作用。。。)

#VCM DRIVER
TARGET_BOARD_AF_VCM_DW9714 := true

2.2 添加AF 索引

路径:vendor\sprd\modules\libcamera\sensor\sensor_cfg.c

代码如:

extern struct sns_af_drv_entry dw9714_drv_entry;#ifdef GC5025{MODULE_SUNNY, "gc5025", &g_sensor_gc5025_mipi_raw_info, {&dw9714_drv_entry, 0}, NULL},
#endif

3 添加AF驱动文件

路径:vendor\sprd\modules\libcamera\sensor\af_drv\dw9714\

2.5 OTP 驱动 ( eeprom) & 修改编译选项

路径: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\

部分cam 不使用eeprom(OTP)驱动,这里以 imx258的OTP驱动添加为例:

1 打开 使用OTP 的宏控开关

路径:vendor\sprd\modules\libcamera\sensor\sensor_cfg.c

代码修改:

extern otp_drv_entry_t imx258_drv_entry;{MODULE_TRULY, "imx258", &g_imx258_mipi_raw_info, {&dw9800_drv_entry, 0}, &imx258_drv_entry},

2 添加 OTP 驱动文件

路径: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\imx258\

驱动文件:

    imx258_otp_drv.cimx258_golden_otp.himx258_otp_drv.h

3 Tips

全刷验证。

你再快,也永远有人比你快!Fighting ~~

Sprd平台添加Camera驱动(SL8521E/SC9820E)相关推荐

  1. 【高通SDM660平台】(1) --- Camera 驱动 Bringup Guide

    [高通SDM660平台]Camera 驱动 Bringup Guide 一.Kernel 代码移植 1. DTS 文件配置 1.1 sdm660.dtsi 1.2 sdm660-camera.dtsi ...

  2. android camera(3)--- 高通平台8916 camera移植

    物联网即将到来的明天,是各个岗位都需要人才的明天,不是别的不重要,是硬件一样重要,系统开发一样重要,驱动开发一样重要,结构MD一样重要...... 注:此文档以在高通8916平台移植OV5648为例, ...

  3. Android Camera驱动开发入门必备知识

    camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说"磨刀不误砍柴工",基本功配置好了,相信你在做camer ...

  4. 展锐平台的camera sensor驱动代码设计解析(2)

    展锐平台的camera sensor驱动代码设计解析(1) 展锐平台的camera sensor驱动代码设计解析(2) 展锐平台的camera sensor驱动代码设计解析(3) Camera驱动的基 ...

  5. linux v4l2 示例程序,linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)...

    在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...

  6. 如何向瑞芯微平台添加驱动

    如何向瑞芯微平台添加驱动 驱动配置 驱动文件放置 配置相应的编译选项 与设备树结合 设备树配置 以avafpga视频驱动为例: 驱动配置 驱动文件放置 为了保证驱动文件能够被系统正确识别编译,需要将驱 ...

  7. 《整理MTK平台的Camera底层驱动流程》

    Data: 2016-04-12 星期二 说明:以下说明均是在android 5.1 ,mt6580平台为例.由于笔记是很久之前写的,到现在已经记不起当初的很多细节.以至于不能很好的总结出来,在这里只 ...

  8. linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)

    在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...

  9. linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析

    点击打开链接 在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最 ...

  10. Webots 机器人仿真平台(十) 添加camera相机

    添加camera相机 1. 添加camera实体 2. 添加camera控制接口代码 3. 运行效果 参考资料 1. 添加camera实体 step1: 在Robot中添加 camera(camera ...

最新文章

  1. Sunrun2016年Q3财务业绩强劲 冲刺全年目标
  2. vscode 调试html页面,基于VSCode调试网页JavaScript代码过程详解
  3. Java中static关键字总结
  4. [C++ rudiment][转]typedef 使用
  5. vue-element-xlsx在线读取Excel数据预览
  6. 信息学奥赛一本通 1164:digit函数
  7. [HTTP] 重定向的302,301
  8. 计算机技能大赛初赛主持稿,职业技能大赛开幕式主持词
  9. 4gl 上传文件_速看!关于浙江移动微法院新版图文上传和签名的使用说明
  10. Python解离散数学
  11. stvd能编译c语言,stvd+stm8s单片机程序编译报错
  12. Gartner技术成熟曲线详解
  13. linux 64位数据库下载地址,Linux 7 平台 64位 DM8(8.1.0.147) 安装文件下载地址
  14. python电化学cv曲线怎么画_Maya创建NURBS曲线:CV曲线工具详解
  15. Linux 配置关掉虚拟防火墙
  16. 残忍的沟里学姐 (数据结构作业)
  17. Greedy:Saruman's Army(POJ 3069)
  18. [转]微服务与Docker
  19. 美国AMC数学竞赛的含金量如何?
  20. 抗疫众生相背后,阿里健康、京东健康担起了什么角色?

热门文章

  1. 《数字图像处理 第三版》(冈萨雷斯)——第十章 图像分割
  2. 【QT】QT网络编程简介
  3. Java实现HTML代码生成PDF文档
  4. .net反编译工具Reflector下载
  5. 重建大师5.0成为首款支持国产麒麟操作系统的自动实景三维建模软件
  6. 集成电路那些事儿:CMOS模拟集成电路版图基础
  7. 我国会计界计算机软件界大规模研究,初级会计电算化第一章练习.doc
  8. QT 播放器之界面布局
  9. 计算机导论dos实验报告,计算机导论实验报告-DOS常用命令的使用.doc
  10. SpringBoot中Session超时原理说明