一.准备工作
a.文件准备
1)驱动代码
2)模组规格书
3)datasheet文件
4)硬件原理图
5)接口文件
b.信息查找
模组规格书:sensorname、视场角、景深、光圈、I2C地址、厂商
datasheet文件:上电时序,sensor id
硬件原理图:连接情况,如laneassign的计算
接口文件:pin脚链接
注意:确保用到的pin脚都已经被释放
二.配置文件路径
1.platform/vendor/qcom/proprietary/chi-cdk
1.1 api/sensor/camxsensorcommon.xsd //添加自定义使用的gpio口
1.2 config/product.mk //添加sensor需要生成的文件
1.3 oem/Android.mk //将驱动文件路径下的.mk添加进来
1.4 oem/qcom/module/sensorname_module.xml //根据硬件原理图获取到的laneassign修改填写;
sensorname和modulename最好保持一致,视场角和景深根据规格书填写修改
cameraid根据core/chiframework/chxextensionmodule.cpp中查看**num**
驱动文件:
1.5 oem/qcom/sensor/sensorname/build/android/Android.mk
1.6 oem/qcom/sensor/sensorname/build/linuxembeded/CMakeLists.txt
1.7 oem/qcom/sensor/sensorname/sensor_name.cpp
1.8 oem/qcom/sensor/sensorname/sensorname_sensor.xml //I2C地址、上电时序
1.9 oem/qcom/tuning/sensorname/效果文件
1.10 tools/buildbins/buildbins_bengal.yaml //将1.4和1.8路径qcom之后部分添加进来
2.platform/vendor/qcom/proprietary/devicetree-4.19
2.1 qcom/bengan-pinctrl.dtsi //函数中填写需要使用到的gpio口
3.platform/vendor/qcom/proprietary/camera-devicetree
3.1 bengal-camera-sensor-qrd.dtsi //调用2.1中的函数和使用到的gpio口
4.platform/vendor/opensource/camera-kernel
4.1 drivers/cam_sensor_module/cam_sensor_utils/cam_sensor_cmn_header.h //添加用到的电压gpio口
4.2 drivers/cam_sensor_module/cam_sensor_utils/cam_sensor_util.c
dtsi上电文件关键参数详解
在bengal-camera-sensor-qrd.dtsi 文件中可以看到&cam_cci0和&cam_cci1两个函数,到底怎么确认配置在那个函数里面;在同目录下bengal-camera.dtsi中找到cam_cci0和cam_cci1并查看CCI_I2C_CLK和CCI_I2C_DATA对应的gpio口,看是否和接口文件一样;例如接口文件中camera0的CCI_I2C_CLK0和CCI_I2C_DATA0对应的gpio口分别是23,24,在bengal-camera.dtsi中CCI_I2C_CLK0和CCI_I2C_DATA0对应的gpio口也是23,24,并处于cci0里面;那么camera0就应该配置在bengal-camera-sensor-qrd.dtsi的cci0函数中。
qcom,cam-sensor@2 { //此处num和1.4中保持一致
cell-index = <2>; //此处num和1.4中保持一致
compatible = "qcom,cam-sensor";
reg = <0x2>; //此处num和1.4中保持一致
csiphy-sd-index = <0>;
sensor-position-roll = <90>;
sensor-position-pitch = <0>;
sensor-position-yaw = <180>;
cam_clk-supply = <&cam_cc_titan_top_gdsc>;
regulator-names =
"cam_clk";
rgltr-cntrl-support;
rgltr-min-voltage = <0>;
rgltr-max-voltage = <0>;
rgltr-load-current = <0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk4_active //2.1中的函数
&cam_sensor_active_rear_aux>;
pinctrl-1 = <&cam_sensor_mclk4_suspend
&cam_sensor_suspend_rear_aux>;
gpios = <&tlmm 33 0>, //用到和gpio口
<&tlmm 38 0>,
<&tlmm 93 0>,
<&tlmm 50 0>,
<&tlmm 45 0>;
gpio-standby = <1>;
gpio-vio = <2>;
gpio-vana = <3>;
gpio-vdig = <4>;
gpio-req-tbl-num = <0 1 2 3 4>;
gpio-req-tbl-flags = <1 0 0 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK4",//和上面gpios一一对应
"CAM_STANDBY",
"CAM_CUSTOM_GPIO_VIO",
"CAM_CUSTOM_GPIO_VANA",
"CAM_CUSTOM_GPIO_VDIG";
sensor-mode = <0>;
cci-master = <1>;
clocks = <&camcc CAM_CC_MCLK4_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
status = "ok";
clock-rates = <24000000>;