快捷搜索:  汽车  科技

高通isp调试的流程(高通平台移植GC2145Camera驱动)

高通isp调试的流程(高通平台移植GC2145Camera驱动)其中包含两个文件:找格科微原厂要,据说也没有,不过根据其他平台改了一份对应msm8909平台的驱动给我。 拿到手的代码如下所示:https://uploader.shimo.im/f/zStVOK53zRIU6XGL.zip?attname=MSM8909_GC2145(1LANE)_Driver.zip&download

文档说明

本文档以SC806-CN-00(MSM8909平台 / Android 7)为例,说明如何移植GC2145 Camera驱动。

不想看分析的,直接跳到 "调试总结" 章节。

原厂驱动

GC2145是格科微公司的一款CMOS摄像头芯片,从资料上看,输出格式是YUV的。

百度走起,https://www.ccm99.com/resource-cat-71-1.html 能看到格科微GC2145的驱动,但是没有对应msm8909平台的。

找格科微原厂要,据说也没有,不过根据其他平台改了一份对应msm8909平台的驱动给我。 拿到手的代码如下所示:

https://uploader.shimo.im/f/zStVOK53zRIU6XGL.zip?attname=MSM8909_GC2145(1LANE)_Driver.zip&download

其中包含两个文件:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(1)

问格科微原厂,两个文件要如何移植,摆放在高通代码哪个路径下,没得到靠谱的答复。

反复通读高通文档,按自己的理解:

gc2145.c 是 kernel驱动部分

gc2145_lib.c 是 vendor驱动部分

相关高通文档:

《80-nu323-2sc_h_multimedia_driver_development_and_bringup_guide_-_camera_(simplified_chinese).pdf》

根据高通架构,在老基线版本上,也就是正在调试的这份源码,YUV摄像头实质上的驱动代码是放在 kernel部分,也就是 gc2145.c里面,包括上电时序、摄像头初始化设置等等。

修改设备树DTS文件

默认的 msm8909-camera-sensor-mtp.dtsi 里面有关camera的定义如下图所示:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(2)

高通isp调试的流程(高通平台移植GC2145Camera驱动)(3)

qcom camera@0 表示后摄, qcom camera@1 表示前摄。

但是,重点来了,作为YUV摄像头,不能套用上面任何一个配置。需要新建一个:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(4)

78 和 0x78 表示是gc2145 I2C从器件地址。 qcom camera@78,这里的78有些资料会提到只要唯一就行,不需要对应实际地址。保险起见,这里还是和从器件地址保持一致。

compatible = "qcom gc2145";

qcom sensor-name = "gc2145";

上面两个属性,需增加gc2145的器件名称,不能仅仅只写 "camera"

cell-index 属性不再需要,可删除。

0xf0 表示是寄存器地址,对应camera的sensor_id。

查看GC2145的手册,见下图:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(5)

高通isp调试的流程(高通平台移植GC2145Camera驱动)(6)

接下来需要逐项核对 vdig / vana / vio / reset / pwdn 管脚的设置,这些管脚和摄像头上电时序相关。

先来看一下SC806模块和摄像头模组之间的连接:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(7)

对应关系:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(8)

上述原理图 DOVDD和DVDD是短接在一起的,因此 cam_vio-supply 和 cam_vdig-supply设置为同一路电压。

PWDN没有管脚,qcom gpio-standby随便指定一个,即使设置错了暂时也没发现有什么问题。

gpios = <&msm_gpio n m>的gpio编号,查看SC806模块内部的原理图。

最后设置如下:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(9)

不理解的地方慢慢理解, 每个设置项具体含义可以查看:

kernel/Documentation/devicetree/bindings/media/video/msm-cci.txt

新增kernel部分驱动

把格科微给的gc2145.c放在以下路径,不做任何修改:

kernel/drivers/media/platform/msm/camera_v2/sensor/gc2145.c

修改相应的makefile文件

make bootimage -j8

打开kernel部分调试信息

高通isp调试的流程(高通平台移植GC2145Camera驱动)(10)

高通isp调试的流程(高通平台移植GC2145Camera驱动)(11)

新增vendor部分驱动

把格科微给的gc2145_lib.c放在以下路径,需要新建一个目录:

vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/gc2145

并新建一个Android.mk文件,可以参考源码里面自带的gc0310文件夹。

高通isp调试的流程(高通平台移植GC2145Camera驱动)(12)

修改 vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/module/sensor_init.c,我们这里写死为 "gc2145"

高通isp调试的流程(高通平台移植GC2145Camera驱动)(13)

gc2145_lib.c代码里面,最重要的两个属性,需要根据实际硬件连接进行设置:

static struct csi_lane_params_t csi_lane_params = { .csi_lane_assign = 0x0004 .csi_lane_mask = 0x18 .csi_if = 1 .csid_core = {0} .csi_PHY_sel = 0 };

.csiphy_params = { .lane_cnt = 1 .settle_cnt = 0x18 // 100ns 0x14 .combo_mode = 1

csi_lane_assign 这个值的理解不太清楚,按照高通文档的说法,需要PHY通道号和sensor的数据通道对应。

高通isp调试的流程(高通平台移植GC2145Camera驱动)(14)

SC806模块内部的原理图接法如下:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(15)

实践证明,以上连接对应关系,应设置 .csi_lane_assign = 0x0004。 理解不太透彻,以后再补充。

手上拿到的各种GC2145的代码,csi_lane_assign 的值一般有如下值: 0x4320 / 0xe4 / 0x0004,遇到问题都试一下吧。

csi_lane_mask 这个 8 位字段用于指示有效和要启用的 MIPI 通道。

SC806是一个PHY硬件连接两个摄像头,高通文档有如下描述:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(16)

高通isp调试的流程(高通平台移植GC2145Camera驱动)(17)

我们这里使用的是Cam1,那么 csi_lane_mask 应设置为 0x18

其他值的说法如下:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(18)

特别要注意的是,SC806是属于两个摄像头共享一个PHY接口,因此 combo_mode 一定要设置为1,否则摄像头无法点亮。

vendor部分以上设置修改完成后,把 msm8909-camera-sensor-mtp.dtsi里面的设置改成一致。

qcom csi-lane-assign = <0x0004>;

qcom csi-lane-mask = <0x18>;

vendor编译方法:

vendor/qcom/proprietary/mm-camera/mm

编译生成两个so文件

out\target\product\la0920\system\vendor\lib\libmmcamera2_sensor_modules.so

out\target\product\la0920\system\vendor\lib\libmmcamera_gc2145.so

把这两个文件拷贝到电脑上。

更新gc2145库文件:

adb root

adb remount

adb push d:\libmmcamera2_sensor_modules.so /system/vendor/lib

adb push d:\libmmcamera_gc2145.so /system/vendor/lib

修改显示角度

点亮之后,角度和镜像不太正确,需要修改上下翻转和镜像设置。

高通isp调试的流程(高通平台移植GC2145Camera驱动)(19)

修改 gc2145.c:

{0x17 0x14} // mirror

改成

{0x17 0x14} // mirror

修改红蓝反色

刚点亮摄像头时,怀着激动的心情打开一看,好像哪里不对劲,如下所示:

高通isp调试的流程(高通平台移植GC2145Camera驱动)(20)

色调似乎偏蓝,一通搜索,这应该算是红蓝反色,修改下寄存器,把输出格式的Cb和Cr交换下。

高通isp调试的流程(高通平台移植GC2145Camera驱动)(21)

修改 gc2145.c

{0x84 0x03} //01

改成

{0x84 0x02} //01

再次打开摄像头,色调正常了。

高通isp调试的流程(高通平台移植GC2145Camera驱动)(22)

调试总结
  1. 找原厂要一份对应的YUV Camera驱动代码,*.c放在kernel部分,*_lib.c放在vendor部分
  2. 修改DTS,需要根据SOC模块和Camera之间连接的原理图 / SOC模块内部的原理图来确定。
  3. kernel部分驱动代码一般不用做任何修改,点亮之后看效果再做调整。
  4. vendor部分核对 csi_lane_params 和 csiphy_params ,这里也需要根据SOC模块和Camera之间连接的原理图 / SOC模块内部的原理图来确定。
patch代码

https://uploader.shimo.im/f/5Usl4YEtKZI7sdS4.rar?attname=gc2145_patch.rar&download

猜您喜欢: