高通平台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,camera@5a {//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,leds@d300 { 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,可能导致马达不能正常对焦。
高通平台Camera调试(一)【转】的更多相关文章
- Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt
高通相关网址:Createpoint: https://createpoint.qti.qualcomm.com(可下载文档,Release Note等)Chipcode: https://chipc ...
- 高通平台 lcd driver 调试小结
一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2 开发环境 And ...
- 【转】高通平台android 环境配置编译及开发经验总结
原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- Qualcomm平台camera调试移植入门
1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...
- 高通平台的bootloader过程【转】
====================基本知识=======================LK是(L)ittle (K)ernel的缩写.高通平台android普遍采用LK作为其bootloade ...
- 高通平台msm8909 LK 实现LCD 兼容
前段时间小米出现红米note2 换屏门,现在我们公司也要上演了:有两个供应商提供不同IC 的LCD panel. 软件区分的办法是读取LCD IC 的ID 寄存器,下面解析高通平台LK中LCD兼容的过 ...
- 高通平台Bootloader启动流程【转】
本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...
- [修改高通平台WIFI MAC 地址] & [adb over wifi]
[修改高通平台WIFI MAC 地址]fccmd --helpfccmd startfccmd getwifimacfccmd setwifimac 74:AC:5F:F5:D7:40 [adb ov ...
- Android : 高通平台的HVX简介及调试
一.HVX简介 HVX(“Hexagon矢量扩展”,Hexagon-六边形.Vector-矢量.Extensions-扩展)是Hexagon 680 DSP的典型特性,能够在执行图像处理应用中的计算负 ...
随机推荐
- int快读
昨天偶然间看到CJ_tony的快读,所以便决定学习一下. 这个快读的原理就是:读入单个字符要比读入读入数字快,先读入字符,然后再转化成数字.(原理的话大学再研究) 代码: #include<io ...
- HDU1181 题解(Floyd最短路)
题面: 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- w3c之js学习总结
①JavaScript:改变 HTML 内容 <p id="demo">JavaScript 能改变 HTML 元素的内容.</p> <script& ...
- 权限控制(vue)
权限控制(vue) 经常会遇到,角色权限控制问题,若是页面控制,倒好说,可如果是当前页面部分可见不可见,这就有些麻烦,如果加上条件就更加苛刻.之前只是简单的v-if进行控制,如今想试试指令(网上一直有 ...
- 分布式事务——幂等设计(rocketmq案例)
幂等指的就是执行多次和执行一次的效果相同,主要是为了防止数据重复消费.MQ中为了保证消息的可靠性,生产者发送消息失败(例如网络超时)会触发 "重试机制",它不是生产者重试而是MQ自 ...
- Windows系统如何安装Redis
转自 http://blog.csdn.net/lamp_yang_3533/article/details/52024744 一.Redis的下载地址 Redis官方并没有提供Redis的windo ...
- k3 cloud付款单提示余额不足,科目余额表中余额为正,银行存款流水账中未负数
对比科目余额表中的科目明细账和银行存款流水账,发现科目余额表不全,这说明有部分凭证没做,付款的时候验证的主要以银行流水账为主(主要来自现金流量表),这时候需要调整出纳部分和总账部分
- PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)
安装步骤 在开始安装之前,我要说明一下,这个Ubuntu18.04系统的安装,使用的连接线(就是服务器和电脑显示器的连接线)必须两头都是VGA连接线,不能使用VGA转HDMI连接线,也不能用DVI转D ...
- Listview使用
ListView控件比前面几种控件要复杂一些,通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本.ListView控件是由ColumnHeader和ListItem对象所组成的,其 ...
- web框架-(四)Django进阶之数据库对象关系映射
Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...