本文转载自: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调试(一)【转】的更多相关文章

  1. Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt

    高通相关网址:Createpoint: https://createpoint.qti.qualcomm.com(可下载文档,Release Note等)Chipcode: https://chipc ...

  2. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

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

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  4. Qualcomm平台camera调试移植入门

    1  camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...

  5. 高通平台的bootloader过程【转】

    ====================基本知识=======================LK是(L)ittle (K)ernel的缩写.高通平台android普遍采用LK作为其bootloade ...

  6. 高通平台msm8909 LK 实现LCD 兼容

    前段时间小米出现红米note2 换屏门,现在我们公司也要上演了:有两个供应商提供不同IC 的LCD panel. 软件区分的办法是读取LCD IC 的ID 寄存器,下面解析高通平台LK中LCD兼容的过 ...

  7. 高通平台Bootloader启动流程【转】

    本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...

  8. [修改高通平台WIFI MAC 地址] & [adb over wifi]

    [修改高通平台WIFI MAC 地址]fccmd --helpfccmd startfccmd getwifimacfccmd setwifimac 74:AC:5F:F5:D7:40 [adb ov ...

  9. Android : 高通平台的HVX简介及调试

    一.HVX简介 HVX(“Hexagon矢量扩展”,Hexagon-六边形.Vector-矢量.Extensions-扩展)是Hexagon 680 DSP的典型特性,能够在执行图像处理应用中的计算负 ...

随机推荐

  1. 悼念512汶川大地震遇难同胞——选拔志愿者 HDU 2188 博弈论 巴什博奕

    悼念512汶川大地震遇难同胞--选拔志愿者 HDU 2188 博弈论 巴什博奕 题意 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队 ...

  2. Java中的sort

    Java中对集合排序有两种方式 Comparable和Comparator public static <T> void sort(List<T> list); 将集合中的数据 ...

  3. 最长公共子序列(LCS) Easy

    A subsequence of a given sequence is the given sequence with some elements (possible none) left out. ...

  4. 最长上升子序列(LIS) Medium2

    JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which are located in two ...

  5. 搜索专题: HDU1242 Rescue

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. 给Repeater增加button事件,并绑定值

    ASPX页面: 增加两个事件,及传值. 1<asp:Repeater ID="rptList" OnItemDataBound="rptList_ItemDataB ...

  7. HTML面试问题收集(1)

    1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaScr ...

  8. Vue实现二级菜单的显示与隐藏

    <html> <head> <title>Vue实现二级菜单的显示与隐藏</title> <script src="vue.js&quo ...

  9. Thinking in Annotation

    Thinking in Java这本书很久前就购买了,打算有时间看一下,因为自己的时间被自己安排的紧张,也没时间看书.黄师傅上次课程讲到了注解的使用和反射的使用,今天打算学习一下注解.该文章参考Thi ...

  10. Comet OJ - Contest #5 D 迫真小游戏 (堆+set)

    迫真小游戏 已经提交 已经通过 时间限制:2000ms 内存限制:256MB 73.98% 提交人数:196 通过人数:145 题目描述 H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏. H君玩的 ...