以S5K3L1为例:
qcom,camera@6e {
compatible = “qcom,s5k3l1yx”; //跟驱动文件中的名称匹配
reg = <0x6e 0x0>; //0x6e:I2C设备的地址
qcom,slave-id = <0x6e 0x0 0x3121>; //(slave id – 0x6e, chip id address – 0x0, chip id – 0x3121)
qcom,csiphy-sd-index = <0>; //(Use CSIPHY subdev 0)
qcom,csid-sd-index = <0>; // (Use CSID subdev 0)
qcom,flash-src-index = <&led_flash0>; (Use LED flash subdev 0)
qcom,mount-angle = <90>; (mount angle 90 degree,摄像头安装角度,后置一般为90,前置一般为270)
qcom,sensor-name = “s5k3l1yx”; (sensor name)
cam_vdig-supply = <&pm8941_l3>; (Use L3 for VDIG,数字电压DVDD)
cam_vana-supply = <&pm8941_l17>; (Use L17 for VANA,模拟电压AVDD)
cam_vio-supply = <&pm8941_lvs3>; (Use LVS3 for VIO,I2C的电压IOVDD)
cam_vaf-supply = <&pm8941_l23>; (Use L23 for VAF,AF电压)
qcom,cam-vreg-name = “cam_vdig”, “cam_vio”, “cam_vana”, “cam_vaf”; //跟以上四路电压一一对应
qcom,cam-vreg-type = <0 1 0 0>; (0 – LDO, 1 – LVS)
qcom,cam-vreg-min-voltage = <1225000 0 2850000 3000000>; (min voltage,最小电压范围1.225V~3V)
qcom,cam-vreg-max-voltage = <1225000 0 2850000 3000000>; (max voltage,最大电压范围1.225~3V)
qcom,cam-vreg-op-mode = <105000 0 80000 100000>; (Optimum mode,最佳模式)
qcom,gpio-no-mux = <0>;
gpios = <&msmgpio 15 0>, <&msmgpio 90 0>; //GPIO15初始值为0,GPIO90初始值为0
qcom,gpio-reset = <1>; (Use gpio pin 90 for reset)
qcom,gpio-req-tbl-num = <0 1>; (0 – pin 15, 1 – pin 90)
qcom,gpio-req-tbl-flags = <1 0>; (0 – output gpio, 1 – input gpio)
qcom,gpio-req-tbl-label = “CAMIF_MCLK”, “CAM_RESET1”; (gpio name,mclk pin and reset1 pin)
qcom,gpio-set-tbl-num = <1 1>; (1 – pin 90, 1--pin15 初始值)
qcom,gpio-set-tbl-flags = <0 2>; (0 – GPIOF_OUT_INIT_LOW, 2 - GPIOF_OUT_INIT_HIGH)
qcom,gpio-set-tbl-delay = <1000 30000>; (delay in micro sec)
qcom,csi-lane-assign = <0x4320>; (Use 0x4320 for CSI lane assign)
qcom,csi-lane-mask = <0x1F>; (Use 0x1F for lane mask)
qcom,sensor-position = <0>; (0 – back camera, 1 – front camera)
qcom,sensor-mode = <1>; (1 – 2D, 3 – 3D)
qcom,cci-master = <0>; (0 – Master 0, 1 – Master 1)
status = “ok”; (该配置处于活动状态)
};
高通平台摄像头配置(正常可以配置3颗,0、1、2):
kernel\msm-4.9\arch\arm64\boot\dts\GM620S\msm8953-camera-sensor-mtp.dtsi
qcom,camera@0 { //camera 0摄像头配置
cell-index = <0>; //第0颗摄像
compatible = "qcom,camera"; //msm_sensor.c中的name匹配
reg = <0x0>;
qcom,csiphy-sd-index = <0>;//(Use CSIPHY subdev 0)
qcom,csid-sd-index = <0>; // (Use CSID subdev 0)
qcom,mount-angle = <270>; //安装角度为270度
qcom,led-flash-src = <&led_flash0>; //使用led_flash0作为闪光灯
qcom,eeprom-src = <&eeprom0>; //使用eeprom0
qcom,actuator-src = <&actuator0>; //使用actuator0作为lens
cam_vio-supply = <&pm8953_l6>; //使用PMIC的LDO6作为IOVDD
cam_vdig-supply = <&pm8953_l2>; //使用PMIC的LDO2作为DVDD
cam_vaf-supply = <&pm8953_l17>; //使用PMIC的LDO17作为AFVDD
cam_vana-supply = <&pm8953_l22>; //使用PMIC的LDO22作为AVDD
qcom,cam-vreg-name = "cam_vio", "cam_vdig","cam_vana", "cam_vaf"; //各路电压的上电顺序
qcom,cam-vreg-min-voltage = <0 1200000 2800000 2850000>; //最小电压范围
qcom,cam-vreg-max-voltage = <0 1200000 2800000 2850000>; //最大电压范围
qcom,cam-vreg-op-mode = <0 105000 80000 100000>; //最佳匹配范围
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_default
&cam_sensor_rear_default
&cam_sensor_rear_vana>;
pinctrl-1 = <&cam_sensor_mclk0_sleep &cam_sensor_rear_sleep
&cam_sensor_rear_vana_sleep>;
gpios = <&tlmm 26 0>, //mclk pin GPIO26
<&tlmm 40 0>, // reset pin GPIO40
<&tlmm 39 0>, // te or standby pin gpio39
<&tlmm 134 0>; //avdd enable ldo pin gpio134
qcom,gpio-reset = <1>;
qcom,gpio-standby = <2>;
qcom,gpio-vana = <3>;
qcom,gpio-req-tbl-num = <0 1 2 3>; // mclk、reset、 te、 ldo enabel pin
qcom,gpio-req-tbl-flags = <1 0 0 0>; // mclk、reset、 te、 ldo enabel pin四个管脚默认输出
qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
"CAM_RESET0",
"CAM_STANDBY0",
"CAM_VANA";
qcom,sensor-position = <0>; (0 – back camera, 1 – front camera)
qcom,sensor-mode = <0>; (1 – 2D, 3 – 3D)
qcom,cci-master = <0>; (0 – Master 0, 1 – Master 1)
status = "ok";
clocks = <&clock_gcc clk_mclk0_clk_src>,
<&clock_gcc clk_gcc_camss_mclk0_clk>;
clock-names = "cam_src_clk", "cam_clk";
qcom,clock-rates = <24000000 0>; //24MHZ
};
/* mipi camera config */
qcom,camera@0 { /* mclk0=gpio26; reset pin=GPIO40; dvdd && AVDD =GPIO0 */
cell-index = <0>;
compatible = "qcom,camera";
reg = <0x0>;
qcom,csiphy-sd-index = <0>;
qcom,csid-sd-index = <0>;
qcom,mount-angle = <270>; /* fornt camera 270*/
/*qcom,mount-angle = <90>;*/
/*qcom,led-flash-src = <&led_flash0>;
qcom,eeprom-src = <&eeprom0>;
qcom,actuator-src = <&actuator0>;*/ //后视镜项目中没有使用
cam_vio-supply = <&pm8953_l6>; //IOVDD LDO6
/*cam_vdig-supply = <&pm8953_l2>; //DVDD和AVDD没有使用LDO供电,直接使用GPIO使能5V输出供电
cam_vana-supply = <&pm8953_l22>;*/
qcom,cam-vreg-name = "cam_vio"; /*, "cam_vdig","cam_vana";*/
qcom,cam-vreg-min-voltage = <0 1200000 2800000 2850000>;
qcom,cam-vreg-max-voltage = <0 1200000 2800000 2850000>;
qcom,cam-vreg-op-mode = <0 105000 80000 100000>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_default
&cam_sensor_rear_default>;
/*&cam_sensor_rear_vana*/ //AVDD使能够的PIN没有使用
pinctrl-1 = <&cam_sensor_mclk0_sleep &cam_sensor_rear_sleep
&cam_sensor_rear_vana_sleep>;
gpios = <&tlmm 26 0>, /*mclk0*/
<&tlmm 40 0>, /*reset pin*/
/*<&tlmm 39 0>,*/ /*pdn*/
/*<&tlmm 134 0>;*/ /*chanage to GPIO0*/
<&tlmm 0 0>; /*gpio0 enable dvdd && AVDD*/
qcom,gpio-reset = <1>;
qcom,gpio-standby = <2>;
/*qcom,gpio-vana = <3>;*/ //AVDD使能pin没有使用
qcom,gpio-enVDD = <3>;
qcom,gpio-req-tbl-num = <0 1 2>;
qcom,gpio-req-tbl-flags = <1 0 0>;
qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
"CAM_RESET0",
/*"CAM_STANDBY0",*/ /*PDN PIN*/
"CAM_VANA"; //当作gpio0 enable dvdd && AVDD使用
qcom,sensor-position = <0>; (0 – back camera, 1 – front camera)
qcom,sensor-mode = <0>; (1 – 2D, 3 – 3D)
qcom,cci-master = <0>; (0 – Master 0, 1 – Master 1)
status = "ok";
clocks = <&clock_gcc clk_mclk0_clk_src>,
<&clock_gcc clk_gcc_camss_mclk0_clk>;
clock-names = "cam_src_clk", "cam_clk";
qcom,clock-rates = <24000000 0>; //24MHZ时钟
};
1和2摄像头按照以上分析配置即可,一定要结合模组规格书、sensor IC手册以及电路原理图进行配置:
qcom,camera@1 {
cell-index = <1>;
compatible = "qcom,camera";
reg = <0x1>;
qcom,csiphy-sd-index = <1>;
qcom,csid-sd-index = <1>;
qcom,mount-angle = <90>;
qcom,led-flash-src = <&led_flash0>;
qcom,eeprom-src = <&eeprom2>;
qcom,actuator-src = <&actuator1>;
cam_vio-supply = <&pm8953_l6>;
cam_vdig-supply = <&pm8953_l2>;
cam_vana-supply = <&pm8953_l22>;
cam_vaf-supply = <&pm8953_l17>;
qcom,cam-vreg-name = "cam_vio", "cam_vdig","cam_vana","cam_vaf";
qcom,cam-vreg-min-voltage = <0 1200000 2800000 2850000>;
qcom,cam-vreg-max-voltage = <0 1200000 2800000 2850000>;
qcom,cam-vreg-op-mode = <0 105000 80000 100000>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk2_default
&cam_sensor_front_default
&cam_sensor_rear_vana2>;
pinctrl-1 = <&cam_sensor_mclk2_sleep
&cam_sensor_front_sleep
&cam_sensor_rear_vana_sleep2>;
gpios = <&tlmm 28 0>,
<&tlmm 131 0>,
<&tlmm 132 0>,
<&tlmm 141 0>;
qcom,gpio-reset = <1>;
qcom,gpio-standby = <2>;
qcom,gpio-vana = <3>;
qcom,gpio-req-tbl-num = <0 1 2 3>;
qcom,gpio-req-tbl-flags = <1 0 0 0>;
qcom,gpio-req-tbl-label = "CAMIF_MCLK1",
"CAM_RESET1",
"CAM_STANDBY1",
"CAM_VANA1";
qcom,sensor-position = <0>;
qcom,sensor-mode = <0>;
qcom,cci-master = <0>;
status = "ok";
clocks = <&clock_gcc clk_mclk2_clk_src>,
<&clock_gcc clk_gcc_camss_mclk2_clk>;
clock-names = "cam_src_clk", "cam_clk";
qcom,clock-rates = <24000000 0>;
};
qcom,camera@2 {
cell-index = <2>;
compatible = "qcom,camera";
reg = <0x02>;
qcom,csiphy-sd-index = <2>;
qcom,csid-sd-index = <1>;
qcom,mount-angle = <90>;
cam_vdig-supply = <&pm8953_l23>;
cam_vio-supply = <&pm8953_l6>;
cam_vana-supply = <&pm8953_l22>;
qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana";
qcom,cam-vreg-min-voltage = <1200000 0 2800000 >;
qcom,cam-vreg-max-voltage = <1200000 0 2800000 >;
qcom,cam-vreg-op-mode = <105000 0 80000 >;
qcom,gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_default
&cam_sensor_front1_default>;
pinctrl-1 = <&cam_sensor_mclk1_sleep
&cam_sensor_front1_sleep>;
gpios = <&tlmm 27 0>,
<&tlmm 129 0>,
<&tlmm 130 0>;
qcom,gpio-reset = <1>;
qcom,gpio-standby = <2>;
qcom,gpio-req-tbl-num = <0 1 2>;
qcom,gpio-req-tbl-flags = <1 0 0>;
qcom,gpio-req-tbl-label = "CAMIF_MCLK2",
"CAM_RESET2",
"CAM_STANDBY2";
qcom,sensor-position = <1>;
qcom,sensor-mode = <0>;
qcom,cci-master = <1>;
status = "ok";
clocks = <&clock_gcc clk_mclk1_clk_src>,
<&clock_gcc clk_gcc_camss_mclk1_clk>;
clock-names = "cam_src_clk", "cam_clk";
qcom,clock-rates = <24000000 0>;
};