关于dtsi的配置:
Dts——device tree source(设备数源码)是一种用来描述硬件的数据结构,不同的硬件设备,其配置都是不一样的
Device tree 是由一系列被命名的节点和属性组成,而节点本身可包含子节点。所谓属性,其实就是成对出现的name和value。
Device tree的基本单元是node。这些node被组织成树状结构,除了root node, 每个node都只有一个parent。一个device tree文件中只能有一个root node。每个node中包含了若干的property/value来描述node的一些特性。
/ { "/" 表示root结点,该结点下有两个子结点node1和node2
node1 { 结点"node1"下又含有子结点,本例中为"child-node1" 和 "child-node2",各结点都有一系列属性
a-string-property = "Astring";属性是字符串
a-string-list-property = "firststring", "second string";字符串数组
a-byte-data-property = [0x01 0x23 0x340x56];二进制数组
child-node1 {
first-child-property;
second-child-property = <1>;Cells(由u32整数组成)
a-string-property = "Hello,world";
};
child-node2 {
};
};
几种常用的配电模式
①:pmic直接供电,这种较为简单,直接使用即可:如下这种就是直接使用pmic的
②:内部ldo供电,也可以直接使用——挂在spmi总线上,由写寄存器控制
内部ldo就是pmic的一个管脚,用来控制电压的输出;
例如:这里引用了pm6150l_gpios这个节点,但这个节点原生就有,gpio口为3
③:外部ldo供电,需要自己定义节点,再引用这个节点,例如如下这种AF的供电方式
qcom,cam-sensor0 {
cell-index = <0>;
compatible = "qcom,cam-sensor";
csiphy-sd-index = <0>;
sensor-position-roll = <90>;
sensor-position-pitch = <0>;
sensor-position-yaw = <180>;
actuator-src = <&actuator_main>; //马达的节点
led-flash-src = <&led_flash_rear>; //闪光灯的节点
&cam_cci0{
qcom,cam-res-mgr {
compatible = "qcom,cam-res-mgr";
status = "ok";
};
actuator_main: qcom,actuator@0 { //在这里定义了这个actuator_main节点
cell-index = <0>;
reg = <0x0>;
compatible = "qcom,actuator";
cci-master = <0>;
cam_vaf-supply = <&camera_bengal_af>; //引用了真正的af供电管脚—camera_bengal_af
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2800000>;
rgltr-max-voltage = <2800000>;
rgltr-load-current = <100000>;
};
camera_bengal_af: gpio-regulator { //定义cam_bengal_af管脚也是在cam_cci0下面
compatible = "regulator-fixed";
regulator-name = "camera_bengal_af";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <233>;
enable-active-high;
gpio = <&tlmm 25 0>; //这里配置了它的gpio口为25
pinctrl-names = "default";
pinctrl-0 = <&camera_bengal_af_default>; //最终通过pinctrl去控制
};
&tlmm{
camera_bengal_af_default: camera_bengal_af_default {
mux {
pins = "gpio25";
function = "gpio";
};
config {
pins = "gpio25";
bias-disable;
drive-strength = <2>; //驱动能力
};
};
}
注:vreg供电——例如,挂在WL2864C芯片上,然后这个芯片又是挂在bb端(SM-4250-1-NSP752-TR-001-AA)上的,原理跟外部ldo控制一样
④:引入custom模式的配置
- 平台提供了两个custom接口:
- 分别是custom1、custom2,如果不够的话,则需要自己添加
- camx代码在cam_sensor_util.c
它是平台提供给我们自己自由使用的,具体的配置方法如下:
MIPI通路配置
看一下硬件原理图
以改颗camera为例data0连接的是line0,data1连接的是line1,data2连接的是line2,data3连接的是line3,所以其在驱动中配置的就是0x3210
这里需要注意的是2m的MIPI配置,因为一个csi只能连接一个camera,csi0、csi1、csi2,总共有3个,而我们这里是4摄,所有必然有两个camera需要共用一个csi,2m的camera mipi传输数据有限,所有可以共用。mipi传输数据能力的决定因素之一就是lane数,还有一个就是传输的速度的能力。
其中:
比如,如果 MIPI DDR 时钟值 (sensor MIPI 的时钟 lane 频率) 为 300Mhz, 同时sensor使用 4 个 lane (一组差分信号属于一个lane)传输数据, 每一个 lane 的数据率是 300*2 = 600Mhz. 因此, 总数据
率为 600*4= 2400Mhz. 对于 10bit 的 bayer sensor, op_pixel_clk 值可设置为 2400/10 = 240Mhz.这些值可以从 sensor 的寄存器设置中计算出来。
D0连接的是bb端的line2,所以就是0x2(BB端的line3可以当做clk使用)
举例如下
sensor端
bb端
这里有张表格,laneAssign就是根据这种对应关系来进行匹配的:
Sensor端 | Line3 | Lin2 | Line1 | Line0 |
全部连接 | 3 | 2 | 1 | 0 |
Sensor端line0对应bb端的line2 | 0 | 0 | 0 | 2 |
Sensor端line0对应bb端的line3
| 0 | 0 | 0 | 3 |
Sensor端line0,line1对应bb端的line0、line1
| 0 | 0 | 1 | 0 |
Sensor端line0,line1对应bb端的line3、line4
| 0 | 0 | 4 | 3 |
附:mipi switch 芯片配置
目的是通过bb端将单个mipi通路能转成多路mipi通路,与combomode功能一样:加一个gpio(拉高或拉低)——相当于custom模式的配法