高通平台Camera调试(一)【转】

本文转载自:http://www.voidcn.com/blog/Winva/article/p-6044730.html

4.3. Camera 
参考文档: 
1) 80-NA157-22_PRESENTATION- MSM8974-APQ8074-MSM8X26-APQ8084 LINUX CAMERA OVERVIEW.pdf

2) 80-NE717-1_MSM8974-APQ8074-MSM8X26 LINUX CAMERA SOFTWARE DESIGN DOCUMENT.pdf

3) 80-NU323-2_Multimedia Driver Development and Bringup Guide - Camera.pdf

4) 80-NL239-33_LINUX CAMERA DEBUGGING GUIDE.pdf

4.3.1. Camera软件架构 

4.3.2. Kernel驱动 
1) 增加dts配置 
qcom,[email protected] {//back camera 
compatible = “samsung,s5k3m2”; 
reg = <0x5a>; 
qcom,slave-id = <0x5a 0x0000 0x30d2>; 
qcom,csiphy-sd-index = <0>; 
qcom,csid-sd-index = <0>; 
qcom,mount-angle = <90>; 
qcom,sensor-name = “s5k3m2_f13s01k”; 
qcom,actuator-src = <&actuator0>; 
qcom,led-flash-src = <&led_flash0>; 
cam_vdig-supply = <&pm8941_l3>; 
cam_vana-supply = <&pm8941_l17>; 
cam_vio-supply = <&pm8941_lvs2>; 
cam_vaf-supply = <&pm8941_l23>; 
qcom,cam-vreg-name = “cam_vdig”, “cam_vio”, “cam_vana”, 
“cam_vaf”; 
qcom,cam-vreg-type = <0 1 0 0>; 
qcom,cam-vreg-min-voltage = <1225000 0 2850000 3000000>; 
qcom,cam-vreg-max-voltage = <1225000 0 2850000 3000000>; 
qcom,cam-vreg-op-mode = <105000 0 80000 100000>; 
qcom,gpio-no-mux = <0>; 
gpios = <&msmgpio 15 0>, 
<&msmgpio 90 0>; 
qcom,gpio-reset = <1>; 
qcom,gpio-req-tbl-num = <0 1>; 
qcom,gpio-req-tbl-flags = <1 0>; 
qcom,gpio-req-tbl-label = “CAMIF_MCLK”, 
“CAM_RESET1”; 
qcom,gpio-set-tbl-num = <1 1>; 
qcom,gpio-set-tbl-flags = <0 2>; 
qcom,gpio-set-tbl-delay = <1 1000>; 
qcom,csi-lane-assign = <0x4320>; 
qcom,csi-lane-mask = <0x1F>; 
qcom,sensor-position = <0>; 
qcom,sensor-mode = <0>; 
qcom,cci-master = <0>; 
}; 
2) 增加驱动文件 
kernel/drivers/media/platform/msm/camera_v2/sensor 
复制一个原有camera的驱动文件并改名,比如ov8865.c改为s5k3l2.c。打开s5k3l2.c,把里面的ov8865改成s5k3l2, OV8865改为S5K3L2。 
在Makefile里加上obj-$(CONFIG_S5K3L2) += s5k3l2.o 
s5k3l2.c里需要改动的是上电序列,需要根据原理图来配置 
static struct msm_sensor_power_setting s5k3l2_power_setting[] = { 

.seq_type = SENSOR_VREG, 
.seq_val = CAM_VIO, 
.config_val = 0, 
.delay = 1, 
}, 

.seq_type = SENSOR_VREG, 
.seq_val = CAM_VANA, 
.config_val = 0, 
.delay = 1, 
}, 

.seq_type = SENSOR_VREG, 
.seq_val = CAM_VDIG, 
.config_val = 0, 
.delay = 1, 
}, 

.seq_type = SENSOR_VREG, 
.seq_val = CAM_VAF, 
.config_val = 0, 
.delay = 5, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_STANDBY, 
.config_val = GPIO_OUT_LOW, 
.delay = 1, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_RESET, 
.config_val = GPIO_OUT_LOW, 
.delay = 5, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_AF_PWDM, 
.config_val = GPIO_OUT_LOW, 
.delay = 5, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_STANDBY, 
.config_val = GPIO_OUT_HIGH, 
.delay = 5, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_RESET, 
.config_val = GPIO_OUT_HIGH, 
.delay = 10, 
}, 

.seq_type = SENSOR_GPIO, 
.seq_val = SENSOR_GPIO_AF_PWDM, 
.config_val = GPIO_OUT_HIGH, 
.delay = 5, 
}, 

.seq_type = SENSOR_CLK, 
.seq_val = SENSOR_CAM_MCLK, 
.config_val = 24000000, 
.delay = 10, 
}, 

.seq_type = SENSOR_I2C_MUX, 
.seq_val = 0, 
.config_val = 0, 
.delay = 0, 
}, 
}; 
3) 调试 
在文件:kernel/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c 
打开这个宏:#define CONFIG_MSMB_CAMERA_DEBUG 
检查开机时kernel log 
CDBG(“%s: read id: %x expected id %x:\n”, func, chipid, 
slave_info->sensor_id); 
看与camera的i2c通信是否成功。 
4.3.3. user space驱动 
1) 增加代码 
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/ 里增加一个驱动文件夹s5k3l2,里面有两个文件:Android.mk和s5k3l2_lib.c 
一般来说高通会提供驱动,模组厂也会提供相应的驱动。 
把驱动加入进去,编译成so,然后push到手机里。或者整个编译成system.img,刷入手机。

有的时候,我们发现系统里找不到camera应用的图标。这是由于系统第一次启动时,后摄的kernel驱动没有准备好。 
如何解决: 
? Kernel驱动调试好后,重新刷userdata.img。让系统重新初始化。 
? adb shell am start -n com.android.camera/com.android.camera.Camera package和activity的名字需要和手机里的应用匹配,不一定是上面这个名字。 
? 安装其它的camera应用。

2) 调试 
打开camera应用,看看图像预览是否成功。如果不成功,需要调试。 
? 在代码里打开调试开关 
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensors/sensor.c 
#define SLOW SERR 
SLOW(“lib_name %s”, lib_name); 可以看到是否正确库被调用。 
? Lane配置 
qcom,csi-lane-assign = <0x4320>; 这是8974平台的值,其它平台不一样 
qcom,csi-lane-mask = <0x1F>; 0x1F for 4lane, 0x7 for 2 lane, 0x3 for 1 lane 
这个配置每个平台不一样。 
大部分情况下,到这里基本就调通了,可以预览了。如果一直调不调,有可能是模块硬件有问题,需要和模组厂一起跳。

3) 从头创建lib.c文件 在某些情况下,如果不能得到驱动文件,需要根据芯片厂商的数据手册和高通的文档来自己写lib.c 4.3.4. 闪光灯 这是系统图自带闪光灯的配置 qcom,[email protected] { status = “okay”; pm8941_flash0: qcom,flash_0 { qcom,max-current = <1000>; qcom,default-state = “off”; qcom,headroom = <3>; qcom,duration = <1280>; qcom,clamp-curr = <200>; qcom,startup-dly = <3>; qcom,safety-timer; label = “flash”; linux,default-trigger = “flash0_trigger”; qcom,id = <1>; linux,name = “led:flash_0”; qcom,current = <625>; }; 使用时做camera的配置文件里加上就行。 qcom,led-flash-src = <&led_flash0>; 4.3.5. 对焦马达 Kernel里面的驱动都是一样的,主要的改动在user space vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/actuator_libs vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/actuators 4.3.6. Tuning 马达,闪光灯,拍照效果都是要Tuning的。但是需要实验室环境来做。 注意:在马达的内核驱动里加上过多log,可能导致马达不能正常对焦。

时间: 2024-10-13 17:59:35

高通平台Camera调试(一)【转】的相关文章

Android : 高通平台Camera调试

相关平台信息:[SDM845/670] 1.AF调试部分 (1)通过属性控制: --AF Log控制--setprop persist.vendor.camera.logInfoMask 0x8000000 //AF info level log setprop persist.vendor.camera.logVerboseMask 0x8000000 //AF verbose level log --禁用深度焦点指示--setprop persist.vendor.camera.af.dep

高通msm8926 camera调试笔记

前些天在调试一组高通msm8926上的摄像头,之前ov5648+imx135已正常的点亮了,但是后续需要一个mini配置版本的方案,需要兼容ov2685+ov8865,于是先做好调试的前期准备,跟摄像头模组厂要模组spec和芯片的datasheet,先仔细阅读一下ic的datasheet,并仔细查看模组的打样图纸和模组spec,首先要确认的是ic的各路电压是可以正常的供出,一般需要注意的就是DVDD,IOVDD,AVDD,还有STANDBY和RESET,这些管脚的连接要和主板上兼容,确保在硬件上

【转】高通平台android 环境配置编译及开发经验总结

原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析: 1.2 搭建高通平台环境开发环境 高通and

Qualcomm平台camera调试移植入门

1  camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略: 在kernel中实现sensor的底层驱动.但是,对于最核心的sensor端的底层设置.ISP效果相关等代码则是单独进行了抽离,放在了一个 daemon进程中进行管理: 图1 Qualcomm平台camera代码架构简图 由于高通把大部分具体的设置及参数放到了daemon进程中,所以在kernel部分只是进行了V4L2的

在高通平台Android环境下编译内核模块【转】

本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei-he-mo-kuai/ 高通Android环境中Linux内核会作为Android的一部分进行编译,直接使用make即可一次性从头编到尾.而有的平台比如Marvell,内核的编译操作相对比较独立,必须使用标准的内核编译命令进行单独编译.一般来说,用高通的这种方式比较傻瓜化,一步到底的感觉:而用Ma

高通平台MSM8916LCM模块移植(一)-bootloader部分【转】

本文转载自:http://www.mobile-open.com/2016/970947.html 高通平台中的bootloader叫做LK(Little Kernel,对于LCM来说LK部分相当重要,它不仅要负责开机部分的LCD显示任务,还要负责传参给kernel的LCM驱动,指导kernel选择合适的LCM参数. 1.LK中LCM启动流程 注:read_panel_id()和read_panel_id_ddr3()为私有添加,非高通库上代码. 在这个流程图中,需要着重了解的有oem_pane

ALSA声卡驱动的DAPM-基于高通平台

最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么.所以百度了一下,百度结果是与DPAM有关. 一.DAPM简介: DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下.DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成.用户空间的应用程序无需对代码做出修改,也无需重新编译,DAP

高通camera结构【转】

本文转载自:http://www.cnblogs.com/whw19818/p/5853407.html 摄像头基础介绍 一.摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进行处理,最终转换成手机屏幕上能够看到的图像. 数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数字图像信号参数进行优化处理

高通camera基本代码架构【转】

本文转载自:http://blog.sina.com.cn/s/blog_c0de2be70102vyn1.html 1  camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现sensor的底层驱动.但是,对于最核心的sensor端的底层设置.ISP效果相关等代码则是单独进行了抽离,放在了一个 daemon进程中进行管理: 图1 Qualcomm平台camer