高通平台Camera sensor bring up!

Qualcomm Camera sensor bring up!

      • 0. 准确
      • 1. Kernel 底层驱动配置
        • 1.1 dtsi
        • 1.2 pinctrl
      • 2. Chi-Cdk XML 配置
        • 2.1 sensormodule
        • 2.2 sensor
      • 3. CHECK

本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】
—only for sensor probe sucess.

0. 准确

【0】. 不管是哪个平台都要先去看平台camera bring up 的文档,确认需要配置的内容;
【1】. 拿到sensor 的硬件图用来配置sensormodule.xml;
【2】. 拿到sensor的Datasheet,用来配置sensor.xml;
【3】. 拿到项目硬件图用来配置kernel层的dtsi和pinctrl。
【4】. 配置完成后先检查上电是否成功,I2C,sensor初始化。

1. Kernel 底层驱动配置

主芯片GPIO分布

Kernenl层的驱动配置主要是关于sensor的上下电、i2c通讯的配置,高通有专门的dtsi来配置上下电、cci等配置。通过硬件电路图配置相应的引脚。CAM_MCLK、CCI_I2C_SDA/SCL、MIPI_CSI、CAM_ID2这些引脚与CPU芯片中GPIO的连接是多少。
首先查看电路图中相关sensor的引脚分别连接到哪里。

电路图中会写明每个sensor的AVDD、DVDD、IOVDD对应的上电接口。

确认AVDD、DVDD、IOVDD是否存在使能口上电。

1.1 dtsi

主要是实现sensor的上下电、时钟、I2C的硬件连接配置。这部分要拿到相关sensor的硬件图和datasheet以及sensor的xml配置,其实主要是让sensor保证GPIO上电和电压范围和I2C是通的。
首先查看代码库中的配置格式,其次是先表明白AVDD、DVDD、IOVDD的电源的接口是怎么上电的。是否有上电使能口
上电的操作一般分为两种,一种是PMIC供电,另外一种的GPIO供电,根据高通文档说明,两种的定义不太相同。根据硬件图来确定供电口。
SM7250平台中,AVDD是有使能口打开电源的,DVDD和IOVDD是PMIC供电的。所以对于使能口需要在dtsi中单独去定义的。
这部分的定义如下:

camera_vana0_ldo: gpio-regulator@0 {
	compatible = "regulator-fixed";
	reg = <0x00 0x00>;
	regulator-name = "camera_vana0_ldo";
	regulator-min-microvolt = <2800000>;
	regulator-max-microvolt = <2800000>;
	regulator-enable-ramp-delay = <233>;
	enable-active-high;
	gpio = <&tlmm 70 0>;
	pinctrl-names = "default";
	pinctrl-0 = <&cam_sensor_0_vana>;
	vin-supply = <&BOB>;
	};

接下来配置sensor的dtsi,结合sensor的SPEC来确定电压范围,所以定义的dtsi如下:

	qcom,cam-sensor@2 {
		cell-index = <2>;
		compatible = "qcom,cam-sensor";
		reg = <0x02>;
		csiphy-sd-index = <1>;
		sensor-position-roll = <270>;
		sensor-position-pitch = <0>;
		sensor-position-yaw = <0>;
		eeprom-src = <&eeprom_front>;
		cam_vio-supply = <&L7P>;
		cam_vana-supply = <&camera_vana0_ldo>;
		cam_vdig-supply = <&L1P>;
		cam_clk-supply = <&titan_top_gdsc>;
		regulator-names = "cam_vio","cam_vana", "cam_vdig", "cam_clk";
		rgltr-cntrl-support;
		pwm-switch;
		rgltr-min-voltage = <1800000 2800000 1050000 0>;
		rgltr-max-voltage = <1800000 2800000 1050000 0>;
		rgltr-load-current = <0 80000 105000 0>;
		gpio-no-mux = <0>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk1_active
                            &cam_sensor_active_frontt>;
		pinctrl-1 = <&cam_sensor_mclk1_suspend
                             &cam_sensor_suspend_frontt>;
		gpios = <&tlmm 14 0>,
			<&tlmm 29 0>;
		gpio-reset = <1>;
		gpio-req-tbl-num = <0 1>;
		gpio-req-tbl-flags = <1 0>;
		gpio-req-tbl-label = "CAMIF_MCLK2",
				     "CAM_RESET2";
		sensor-mode = <0>;
		//cci-device = <1>;
		cci-master = <0>;
		status = "ok";
		clocks = <&camcc CAM_CC_MCLK1_CLK>;
		clock-names = "cam_clk";
		clock-cntl-level = "turbo";
		clock-rates = <24000000>;
	};

上电完成后,还需要注意的是:cci-master一般只有两个cci-master,但是在7250平台上,有了三个cci-master,这时候,要先在kernel代码库中先去看一下cci-master的地址定义。如果cci-master配置不对,很有可能push了dtbo boot后出现无法开机的情况。
另外,根据习惯,配置完dtsi需要检查是否上电成功,在dtsi配置的过程中,我们的sensor出现了AVDD没有上电成功,但是相机probe成功并且可以打开相机的情况。按照正常情况这是不科学的,而且如果两个以上的相机共用同一个供电口,不好检查问题。因此,dtsi配置完成,首要任务就是检查上电电压是否正确。

1.2 pinctrl

结合dtsi来确定pinctrl是否需要添加。
pinctrl主要是定义GPIO的。如果相应的GPIO没有定义,需要在pinctrl下定义。

2. Chi-Cdk XML 配置

2.1 sensormodule

sensormodule主要是结合sensor的SPEC来填写的。这部分内容主要包括

name
cameraId 2
moduleName
sensorName
eepromName
position
CSIInfo important △△△△

CSIIinfo这部分主要是关系到sensor是否和其他的sensor共用CCI。
在高通文档中,对于sensor的CSI配置有说明,可以去查看文档。

lensinfo
FocalLength
fNumber
minFocusDistance
maxFocusDistance
horizontalViewAngle
verticalViewAngle

2.2 sensor

对于sensor的配置每一个都需要确认。
camximagesensordata.cpp
每个sensor的XML文件中基本包含的信息,在配置过程中要确定一下信息的准确性。

name
slaveinfo
sensorId
regaddrinfo
resolutioninfo
exposureControlInfo
streamonsetting
streamoffsetting
groupholdonsetting
groupholdoffsetting
initsettings
testPatternInfo
colorlevelinfo
opticalblackregionInfo
pixelarrayinfo
delayinfo

3. CHECK

  • dtsi配置完成先去硬件组检查是否每个上电口都已经上电成功;【这一点非常非常重要】
  • 接下来检查CCI-master是否通讯成功;
  • 检查MIPI是否有信号;
  • 检查sensor初始化流程是否有问题:streamon,initsettings,linecount,settleTImeNs etc;
  • push sensor的Bin外,还需要push sensor的so;
    camxsensornode.cpp
    camximagesensordata.cpp
    这里需要注意的一点是sensor对应的so需要同时的push到手机,如果so没有加载到,会使相机预览不正常和信号传输错误。

你可能感兴趣的:(camera,sensor)