CAMERA DTSI信息

提示:高通平台 qcom camera dtsi

目录

前言

一、CCI介绍

二、CAMERA DTSI

1.AF 部分

2.SENSOR部分

3.OTP部分

4.FLASH部分

5.MIPI部分

6.ISP VFE JPEG部分

总结



前言

       本文介绍camera dtsi配置相关内容。

       参考平台:qcom sdm660


一、CCI介绍

高通平台camera 也是一个I2C设备,但其封装了一个相机控制接口,成为CCI(Camera Control Interface)。

CCI与I2C基本一致,是一个双线、双向、半双工、串行接口。

CCI可支持的clk速率(Hz)有四种:100K 400K 定制 和1M

一般高通平台一路CCI会配置两组I2C 可通过cci-master<0/1>选择不同的I2C。例如:sdm660-camera.dtsi

gpios = <&tlmm 36 0>,<&tlmm 37 0>,<&tlmm 38 0>,<&tlmm 39 0>;

有时我们可以根据硬件原理图上的camera i2c 对应的gpio号,找到平台代码上对应的CCI,添加调试的camera的硬件信息配置。

        cci: qcom,cci@ca0c000 {
                cell-index = <0>;
                compatible = "qcom,cci";
                reg = <0xca0c000 0x4000>;
                #address-cells = <1>;
                #size-cells = <0>;
                reg-names = "cci";
                interrupts = <0 295 0>;
                interrupt-names = "cci";
                status = "ok";
                mmagic-supply = <&gdsc_bimc_smmu>;
                gdscr-supply = <&gdsc_camss_top>;
                qcom,cam-vreg-name = "mmagic", "gdscr";
                clocks = <&clock_rpmcc RPM_SMD_MMSSNOC_AXI_CLK>,
                        <&clock_mmss MMSS_MNOC_AHB_CLK>,
                        <&clock_mmss MMSS_BIMC_SMMU_AHB_CLK>,
                        <&clock_mmss MMSS_BIMC_SMMU_AXI_CLK>,
                        <&clock_mmss MMSS_CAMSS_AHB_CLK>,
                        <&clock_mmss MMSS_CAMSS_TOP_AHB_CLK>,
                        <&clock_mmss CCI_CLK_SRC>,
                        <&clock_mmss MMSS_CAMSS_CCI_AHB_CLK>,
                        <&clock_mmss MMSS_CAMSS_CCI_CLK>;
                clock-names = "mmssnoc_axi", "mnoc_ahb", "smmu_ahb", "smmu_axi",
                        "camss_ahb_clk", "camss_top_ahb_clk",
                        "cci_src_clk", "cci_ahb_clk", "camss_cci_clk";
                qcom,clock-rates = <0 0 0 0 0 0 19200000 0 0>,
                        <0 0 0 0 0 0 37500000 0 0>;
                pinctrl-names = "cci_default", "cci_suspend";
                        pinctrl-0 = <&cci0_active &cci1_active>;
                        pinctrl-1 = <&cci0_suspend &cci1_suspend>;
                gpios = <&tlmm 36 0>,
                        <&tlmm 37 0>,
                        <&tlmm 38 0>,
                        <&tlmm 39 0>;
                qcom,gpio-tbl-num = <0 1 2 3>;
                qcom,gpio-tbl-flags = <1 1 1 1>;
                qcom,gpio-tbl-label = "CCI_I2C_DATA0",
                                      "CCI_I2C_CLK0",
                                      "CCI_I2C_DATA1",
                                      "CCI_I2C_CLK1";
                i2c_freq_100Khz: qcom,i2c_standard_mode {
                        status = "disabled";
                };
                i2c_freq_400Khz: qcom,i2c_fast_mode {
                        status = "disabled";
                };
                i2c_freq_custom: qcom,i2c_custom_mode {
                        status = "disabled";
                };
                i2c_freq_1Mhz: qcom,i2c_fast_plus_mode {
                        status = "disabled";
                };
        };

二、CAMERA DTSI


1.AF 部分

如下(示例):sdm660-camera-sensor-qrd.dtsi

&soc {//regulator/fixed.c 通常用来定义电压固定的regulator,或者定义由某个gpio开关控制的regulator
    cam_vaf_gpio_regulator:cam_vaf_fixed_regulator {//AF电源配置的节点名
        compatible = "regulator-fixed";//driver/regulator/fixed.c驱动probe使用
        regulator-name = "cam_vaf_gpio_regulator";
        regulator-min-microvolt = <2800000>;
        regulator-max-microvolt = <2800000>;
        enable-active-high;
        gpio = <&pm660l_gpios 5 0>;//使用pmic芯片的gpio5来使能该电源
        pinctrl-names = "default";
        pinctrl-0 = <&cam_sensor_eldo5_default>;
        vin-supply = <&pm660l_bob>;
    };
}

&cci {
    actuator0: qcom,actuator@0 {//一般@0对应camera sensor index 0
        cell-index = <0>;//也对应vendor下sensor xml配置中的sensor ID 0,表示是sensor id0的AF
        reg = <0x0>;
        compatible = "qcom,actuator";//用于平台msm_actuator.c驱动probe匹配
        qcom,cci-master = <0>;//使用CCI master 0也就是上述提到的CCI_I2C_DATA0和CCI_I2C_CLK0
        cam_vaf-supply = <&cam_vaf_gpio_regulator>;//AF的电源配置,使用regulator-fixed
        qcom,cam-vreg-name = "cam_vaf";
        qcom,cam-vreg-min-voltage = <2800000>;
        qcom,cam-vreg-max-voltage = <2800000>;
        qcom,cam-vreg-op-mode = <0>;
    };
};

2.SENSOR部分

如下(示例):sdm660-camera-sensor-qrd.dtsi

&cci {
    qcom,camera@0 {
        cell-index = <0>;//对应snesor ID 0
        compatible = "qcom,camera";//msm_sensor_driver.c probe匹配
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;//选择cphy0,对应/dev/subdev*中的第0路csi
        qcom,csid-sd-index = <0>;//同上也对应原理图中的csi0
        qcom,mount-angle = <90>;//sensor的摆放角度,与出图方向有关
        qcom,led-flash-src = <&led_flash0>;//闪光灯配置
        qcom,actuator-src = <&actuator0>;//AF配置
        //qcom,ois-src = <&ois0>;//光学防抖
        //qcom,eeprom-src = <&eeprom0>;//otp
        cam_vio-supply = <&pm660_l11>;//IOVDD 1.8v
        cam_vana-supply = <&cam_avdd_gpio_regulator>;//AVDD 2.8V
        cam_vdig-supply = <&cam_rear_dvdd_gpio_regulator>;//DVDD 1~1.2V
        cam_vaf-supply = <&cam_vaf_gpio_regulator>;//AF供电2.8V
        qcom,cam-vreg-name = "cam_vio", "cam_vana", "cam_vdig","cam_vaf";
        qcom,cam-vreg-min-voltage = <1780000 0 0 2800000>;
        qcom,cam-vreg-max-voltage = <1950000 0 0 2800000>;
        qcom,cam-vreg-op-mode = <105000 0 0 100000>;
        qcom,gpio-no-mux = <0>;
        pinctrl-names = "cam_default", "cam_suspend";
        pinctrl-0 = <&cam_sensor_mclk0_active
                 &cam_sensor_rear_active>;
        pinctrl-1 = <&cam_sensor_mclk0_suspend
                 &cam_sensor_rear_suspend>;
        gpios = <&tlmm 32 0>,
            <&tlmm 47 0>;
        qcom,gpio-reset = <1>;//reset gpio 47
        qcom,gpio-req-tbl-num = <0 1>;
        qcom,gpio-req-tbl-flags = <1 0>;
        qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
                    "CAM_RESET0";//这里可配置自定义gpio,在gpios中添加即可
        qcom,sensor-position = <0>;//区分前后摄
        qcom,sensor-mode = <0>;//区分前后摄
        qcom,cci-master = <0>;//选择CCI MASTER 0
        status = "ok";
        clocks = <&clock_mmss MCLK0_CLK_SRC>,
                <&clock_mmss MMSS_CAMSS_MCLK0_CLK>;
        clock-names = "cam_src_clk", "cam_clk";
        qcom,clock-rates = <24000000 0>;//与要求的MCLK速率一致
    };
};

3.OTP部分

与SENSOR部分基本一致,跳过


4.FLASH部分

如下(示例):sdm660-camera-sensor-qrd.dtsi

&soc {//使用的是pmic芯片驱动的led闪光灯
	led_flash0: qcom,camera-flash@0 {
		cell-index = <0>;//与sensor ID 0一致
		compatible = "qcom,camera-flash";//msm flash驱动probe使用
		qcom,flash-source = <&pm660l_flash0 &pm660l_flash1>;//闪光灯的pmic电源配置节点
		qcom,torch-source = <&pm660l_torch0 &pm660l_torch1>;//手电筒模式
		qcom,switch-source = <&pm660l_switch0>;
		status = "ok";
	};
};

如下(示例):pm660l.dtsi

关于pmic led的相关部分,后续补充。 pmic flash的电流,持续时间,还有电压相关的可在此改动

	pm660l_3: qcom,pm660l@3 {
		compatible ="qcom,spmi-pmic";
		reg = <0x3 SPMI_USID>;
		#address-cells = <2>;
		#size-cells = <0>;

		flash_led: qcom,leds@d300 {
			compatible = "qcom,qpnp-flash-led-v2";
			reg = <0xd300 0x100>;
			label = "flash";
            ... ...

			pm660l_flash0: qcom,flash_0 {
            ... ...
			};

            ... ...
		};
    };

5.MIPI部分

如下(示例):sdm660-camera.dtsi

省略的都是clk相关的配置。

可以看出这个平台有3个csiphy模块,和4个csid模块。注:csi(camera serial interface)

CSIPHY:处理mipi接收器的物理层,每个CSIPHY模块都可以连接一个单独的摄像头传感器。连接的具体sensorID主要看cell-index的值。

CSID:处理MIPI接收器的协议和应用层。每个CSID都可以解码来自任何CSIPHY的数据流。通过对应的cell-index的值配置具体的camera sensor。

&soc {
	qcom,csiphy@c824000 {
		cell-index = <0>;
		compatible = "qcom,csiphy-v3.5", "qcom,csiphy";
		reg = <0xc824000 0x1000>,
				<0xca00120 0x4>;
		reg-names = "csiphy", "csiphy_clk_mux";
        ... ...
		status = "ok";
	};

	qcom,csiphy@c825000 {
		cell-index = <1>;
		compatible = "qcom,csiphy-v3.5", "qcom,csiphy";
		reg = <0xc825000 0x1000>,
				<0xca00124 0x4>;
		reg-names = "csiphy", "csiphy_clk_mux";
        ... ...
		status = "ok";
	};

	qcom,csiphy@c826000 {
		cell-index = <2>;
		compatible = "qcom,csiphy-v3.5", "qcom,csiphy";
		reg = <0xc826000 0x1000>,
				<0xca00128 0x4>;
		reg-names = "csiphy", "csiphy_clk_mux";
        ... ...
		status = "ok";
	};

	qcom,csid@ca30000  {
		cell-index = <0>;
		compatible = "qcom,csid-v5.0", "qcom,csid";
		reg = <0xca30000 0x400>;
		reg-names = "csid";
        ... ...
		status = "ok";
	};

	qcom,csid@ca30400 {
		cell-index = <1>;
		compatible = "qcom,csid-v5.0", "qcom,csid";
		reg = <0xca30400 0x400>;
		reg-names = "csid";
        ... ...
		status = "ok";
	};

	qcom,csid@ca30800 {
		cell-index = <2>;
		compatible = "qcom,csid-v5.0", "qcom,csid";
		reg = <0xca30800 0x400>;
		reg-names = "csid";
        ... ...
		status = "ok";
	};

	qcom,csid@ca30c00 {
		cell-index = <3>;
		compatible = "qcom,csid-v5.0", "qcom,csid";
		reg = <0xca30c00 0x400>;
		reg-names = "csid";
        ... ...
		status = "ok";
	};
};

6.ISP VFE JPEG部分

暂时没太关注,后续接触到会补充

总结

整个camera模块的dtsi配置主要集中在两个文件中

一个是sdm660-camera-sensor-xxx.dtsi,比较偏向于具体器件的配置,比如AF,flash,sensor,OTP等

另一个是sdm660-camera.dtsi,主要在于CAMERA平台相关的模块配置,像CSID, ISP, CCI, csiphy等

平时驱动修改最多的集中于器件这块

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值