Qualcomm平臺camera bringup(三)

qccqo發表於2020-11-30

關於dtsi的配置:

Dts——device tree source(裝置數原始碼)是一種用來描述硬體的資料結構,不同的硬體裝置,其配置都是不一樣

Device tree 由一系列被命名的節點和屬性組成,而節點本身可包含子節點。所謂屬性,其實就是成對出現的namevalue

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介面:
  • 分別是custom1custom2,如果不夠的話,則需要自己新增
  • camx程式碼在cam_sensor_util.c

它是平臺提供給我們自己自由使用的,具體的配置方法如下:

 

MIPI通路配置

看一下硬體原理圖

以改顆camera為例data0連線的是line0data1連線的是line1data2連線的是line2data3連線的是line3,所以其在驅動中配置的就是0x3210

這裡需要注意的是2mMIPI配置,因為一個csi只能連線一個cameracsi0csi1csi2,總共有3個,而我們這裡是4攝,所有必然有兩個camera需要共用一個csi2mcamera mipi傳輸資料有限,所有可以共用。mipi傳輸資料能力的決定因素之一就是lane數,還有一個就是傳輸的速度的能力。

其中:

1 lane 的話最大支援 2M
2lane 的話最大可以支援到8M
4lane 的話就更大了

       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

Sensorline0對應bb端的line2

0

0

0

2

Sensorline0對應bb端的line3

 

0

0

0

3

Sensorline0line1對應bb端的line0line1

 

0

0

1

0

Sensorline0line1對應bb端的line3line4

 

0

0

4

3

附:mipi switch 晶片配置

    目的是通過bb端將單個mipi通路能轉成多路mipi通路,與combomode功能一樣:加一個gpio(拉高或拉低)——相當於custom模式的配法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章