camera摄像头驱动 高通平台移植GC2145
大家好,今天来为大家分享camera摄像头驱动的一些知识点,和高通平台移植GC2145的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
本文档以SC806-CN-00(MSM8909平台/Android7)为例,说明如何移植GC2145Camera驱动。
不想看分析的,直接跳到"调试总结"章节。
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
问格科微原厂,两个文件要如何移植,摆放在高通代码哪个路径下,没得到靠谱的答复。
反复通读高通文档,按自己的理解:
《80-nu323-2sc_h_multimedia_driver_development_and_bringup_guide_-_camera_(simplified_chinese).pdf》
根据高通架构,在老基线版本上,也就是正在调试的这份源码,YUV摄像头实质上的驱动代码是放在kernel部分,也就是gc2145.c里面,包括上电时序、摄像头初始化设置等等。
默认的msm8909-camera-sensor-mtp.dtsi里面有关camera的定义如下图所示:
qcom,camera@0表示后摄,qcom,camera@1表示前摄。
但是,重点来了,作为YUV摄像头,不能套用上面任何一个配置。需要新建一个:
78和0x78表示是gc2145I2C从器件地址。qcom,camera@78,这里的78有些资料会提到只要唯一就行,不需要对应实际地址。保险起见,这里还是和从器件地址保持一致。
compatible="qcom,gc2145";
qcom,sensor-name="gc2145";
上面两个属性,需增加gc2145的器件名称,不能仅仅只写"camera"
cell-index属性不再需要,可删除。
0xf0表示是寄存器地址,对应camera的sensor_id。
接下来需要逐项核对vdig/vana/vio/reset/pwdn管脚的设置,这些管脚和摄像头上电时序相关。
先来看一下SC806模块和摄像头模组之间的连接:
上述原理图DOVDD和DVDD是短接在一起的,因此cam_vio-supply和cam_vdig-supply设置为同一路电压。
PWDN没有管脚,qcom,gpio-standby随便指定一个,即使设置错了暂时也没发现有什么问题。
gpios=<&msm_gpionm>的gpio编号,查看SC806模块内部的原理图。
不理解的地方慢慢理解,每个设置项具体含义可以查看:
kernel/Documentation/devicetree/bindings/media/video/msm-cci.txt
把格科微给的gc2145.c放在以下路径,不做任何修改:
kernel/drivers/media/platform/msm/camera_v2/sensor/gc2145.c
把格科微给的gc2145_lib.c放在以下路径,需要新建一个目录:
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/gc2145
并新建一个Android.mk文件,可以参考源码里面自带的gc0310文件夹。
修改vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/module/sensor_init.c,我们这里写死为"gc2145"
gc2145_lib.c代码里面,最重要的两个属性,需要根据实际硬件连接进行设置:
staticstructcsi_lane_params_tcsi_lane_params={\\n.csi_lane_assign=0x0004,\\n.csi_lane_mask=0x18,\\n.csi_if=1,\\n.csid_core={0},\\n.csi_phy_sel=0,\\n};
.csiphy_params={\\n.lane_cnt=1,\\n.settle_cnt=0x18,//100ns0x14\\n.combo_mode=1,
csi_lane_assign这个值的理解不太清楚,按照高通文档的说法,需要PHY通道号和sensor的数据通道对应。
SC806模块内部的原理图接法如下:
实践证明,以上连接对应关系,应设置.csi_lane_assign=0x0004。理解不太透彻,以后再补充。
手上拿到的各种GC2145的代码,csi_lane_assign的值一般有如下值:0x4320/0xe4/0x0004,遇到问题都试一下吧。
csi_lane_mask这个8位字段用于指示有效和要启用的MIPI通道。
SC806是一个PHY硬件连接两个摄像头,高通文档有如下描述:
我们这里使用的是Cam1,那么csi_lane_mask应设置为0x18
特别要注意的是,SC806是属于两个摄像头共享一个PHY接口,因此combo_mode一定要设置为1,否则摄像头无法点亮。
vendor部分以上设置修改完成后,把msm8909-camera-sensor-mtp.dtsi里面的设置改成一致。
qcom,csi-lane-assign=<0x0004>;
qcom,csi-lane-mask=<0x18>;
vendor/qcom/proprietary/mm-camera/mm
out\\\\target\\\\product\\\\la0920\\\\system\\\\vendor\\\\lib\\\\libmmcamera2_sensor_modules.so
out\\\\target\\\\product\\\\la0920\\\\system\\\\vendor\\\\lib\\\\libmmcamera_gc2145.so
adbpushd:\\\\libmmcamera2_sensor_modules.so/system/vendor/lib
adbpushd:\\\\libmmcamera_gc2145.so/system/vendor/lib
点亮之后,角度和镜像不太正确,需要修改上下翻转和镜像设置。
刚点亮摄像头时,怀着激动的心情打开一看,好像哪里不对劲,如下所示:
色调似乎偏蓝,一通搜索,这应该算是红蓝反色,修改下寄存器,把输出格式的Cb和Cr交换下。
https://uploader.shimo.im/f/5Usl4YEtKZI7sdS4.rar?attname=gc2145_patch.rar&download
好了,文章到这里就结束啦,如果本次分享的camera摄像头驱动和高通平台移植GC2145问题对您有所帮助,还望关注下本站哦!