高通Android Camera Bring Up Actuator

reference:https://blog.csdn.net/mr_zjc/article/details/105736925

介绍

自动对焦功能需要靠马达带动镜片移动来实现,在拍照时候仔细听能听到对焦马达发出的咔咔声。因此,在Camera sensor bring up以后,就需要关注这个部分的控制。

这篇文章主要介绍在高通平台的CamX框架里面,如何去点亮摄像头马达,需要修改哪些相关的文件。

mm-camera 也是类似的。

大体浏览

先来个整体的浏览,看下涉及到需要修改哪些目录下的文件。要让马达运转起来,我们需要修改的基本就是下面4个目录下的相关文件。

目录 意义
vendor/qcom/proprietary/chi-cdk/oem/qcom/actuator 各种型号的马达配置文件目录
vendor/qcom/proprietary/chi-cdk/oem/qcom/module Camera sensor配置文件目录
vendor/qcom/proprietary/chi-cdk/tools/buildbins 各个Camera sensor编译配置的文件目录
vendor/qcom/proprietary/camera-devicetree dtsi文件相关,主要配置Camera sensor上电时序等信息

修改文件内容详细分析

例如,某个sensor是s5k3p9sx、马达型号是dw9763。

actuator配置

路径:vendor/qcom/proprietary/chi-cdk/oem/qcom/actuator

这个目录下,是各个型号的马达配置文件,高通源码里面已经有一些比较常见的马达型号的配置文件,我们可以进行参考。

vendor/qcom/proprietary/chi-cdk/oem/qcom/actuator$ ls
ak7371_actuator.xml dw9714v_actuator.xml dw9763b_actuator.xml gt9764_actuator.xml lc898217xc_actuator.xml
ak7374_actuator.xml dw9718s_actuator.xml dw9767_actuator.xml gt9772_actuator.xml
bu64297gwz_actuator.xml dw9763_actuator.xml dw9800_actuator.xml

我们随便打开个xml的文件:cat dw9763_actuator.xml

<?xml version="1.0" encoding="utf-8" ?>
<!--========================================================================-->
<!-- Copyright (c) 2017-2018 Qualcomm Technologies, Inc. -->
<!-- All Rights Reserved. -->
<!-- Confidential and Proprietary - Qualcomm Technologies, Inc. -->
<!--========================================================================-->
<actuatorDriver
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../api/sensor/camxactuatordriver.xsd">
<module_version major_revision="1" minor_revision="0" incr_revision="0"/> <!--Actuator slave information -->
<slaveInfo>
<!--Name of the actuator -->
<actuatorName>dw9763</actuatorName>
<!--8-bit or 10-bit write slave address -->
<slaveAddress>0x18</slaveAddress>
<!--I2C frequency mode of slave
Supported modes are: STANDARD (100 KHz), FAST (400 KHz), FAST_PLUS (1 MHz), CUSTOM (Custom frequency in DTSI) -->
<i2cFrequencyMode>FAST</i2cFrequencyMode>
<!--Actuator type
Supported types are: VCM, BIVCM -->
<actuatorType>VCM</actuatorType>
<!--Data width in bits -->
<dataBitWidth>10</dataBitWidth>
<!--Sequence of power configuration type and configuration value required to control power to the device -->
<powerUpSequence>
<!--Power setting configuration
Contains: configType, configValue and delay in milli seconds -->
<powerSetting>
<!--Power configuration type
Supported types are: MCLK, VANA, VDIG, VIO, VAF, RESET, STANDBY -->
<configType>VAF</configType>
<!--Configuration value for the type of configuration -->
<configValue>0</configValue>
<!--Delay in milli seconds -->
<delayMs>1</delayMs>
</powerSetting>
</powerUpSequence>
<!--Sequence of power configuration type and configuration value required to control power to the device -->
<powerDownSequence>
<!--Power setting configuration
Contains: configType, configValue and delay in milli seconds -->
<powerSetting>
<!--Power configuration type
Supported types are: MCLK, VANA, VDIG, VIO, VAF, RESET, STANDBY -->
<configType>VAF</configType>
<!--Configuration value for the type of configuration -->
<configValue>0</configValue>
<!--Delay in milli seconds -->
<delayMs>1</delayMs>
</powerSetting>
</powerDownSequence>
</slaveInfo>
<!--Sequence of register configuration -->
<registerConfig>
<!--Actuator register configuration -->
<registerParam>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">2</regDataType>
<!--Register address that is accessed -->
<registerAddr>0x03</registerAddr>
<!--Register data to be programmed -->
<registerData>0</registerData>
<!--Actuator operations
Supported operations are: WRITE_HW_DAMP, WRITE_DAC, WRITE, WRITE_DIR_REG, POLL, READ_WRITE -->
<operation>WRITE_DAC_VALUE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
<!--Hardware mask -->
<hwMask>0</hwMask>
<!--Number of bits to shift for HW -->
<hwShift>0</hwShift>
<!--Number of bits to shift for data -->
<dataShift>0</dataShift>
</registerParam>
</registerConfig>
<!--Sequence of register settings to configure the device -->
<initSettings>
<!--Register setting configuration
Contains: register address, register data, register address type, register data type, operation and delay in micro seconds -->
<regSetting>
<!--Register address that is accessed -->
<registerAddr>0x02</registerAddr>
<!--If operation is WRITE, registerData is the data value to be written into the specified register address
If operation is READ, registerData is the number of bytes to be read from the specified register address -->
<registerData>0x02</registerData>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">1</regDataType>
<!--Type of the operation
Valid values are: WRITE, READ, POLL -->
<operation>WRITE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
</regSetting>
<!--Register setting configuration
Contains: register address, register data, register address type, register data type, operation and delay in micro seconds -->
<regSetting>
<!--Register address that is accessed -->
<registerAddr>0x02</registerAddr>
<!--If operation is WRITE, registerData is the data value to be written into the specified register address
If operation is READ, registerData is the number of bytes to be read from the specified register address -->
<registerData>0x02</registerData>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">1</regDataType>
<!--Type of the operation
Valid values are: WRITE, READ, POLL -->
<operation>WRITE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
</regSetting>
<!--Register setting configuration
Contains: register address, register data, register address type, register data type, operation and delay in micro seconds -->
<regSetting>
<!--Register address that is accessed -->
<registerAddr>0x06</registerAddr>
<!--If operation is WRITE, registerData is the data value to be written into the specified register address
If operation is READ, registerData is the number of bytes to be read from the specified register address -->
<registerData>0x41</registerData>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">1</regDataType>
<!--Type of the operation
Valid values are: WRITE, READ, POLL -->
<operation>WRITE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
</regSetting>
<!--Register setting configuration
Contains: register address, register data, register address type, register data type, operation and delay in micro seconds -->
<regSetting>
<!--Register address that is accessed -->
<registerAddr>0x07</registerAddr>
<!--If operation is WRITE, registerData is the data value to be written into the specified register address
If operation is READ, registerData is the number of bytes to be read from the specified register address -->
<registerData>0x3F</registerData>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">1</regDataType>
<!--Type of the operation
Valid values are: WRITE, READ, POLL -->
<operation>WRITE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
</regSetting>
<!--Register setting configuration
Contains: register address, register data, register address type, register data type, operation and delay in micro seconds -->
<regSetting>
<!--Register address that is accessed -->
<registerAddr>0x08</registerAddr>
<!--If operation is WRITE, registerData is the data value to be written into the specified register address
If operation is READ, registerData is the number of bytes to be read from the specified register address -->
<registerData>0x00</registerData>
<!--Register address / data size in bytes -->
<regAddrType range="[1,4]">1</regAddrType>
<!--Register address / data size in bytes -->
<regDataType range="[1,4]">1</regDataType>
<!--Type of the operation
Valid values are: WRITE, READ, POLL -->
<operation>WRITE</operation>
<!--Delay in micro seconds -->
<delayUs>0</delayUs>
</regSetting>
</initSettings>
<!--Actuator tuning parameters -->
<tunedParams>
<!--Initial DAC code -->
<initialCode>180</initialCode>
<!--Actuator region parameters for all regions -->
<regionParams>
<!--Actuator region parameters -->
<region>
<!--Macro step boundary. In Near / forward direction -->
<macroStepBoundary>400</macroStepBoundary>
<!--Infinity step boundary. In Far / backward direction -->
<infinityStepBoundary>0</infinityStepBoundary>
<!--Code per step -->
<codePerStep>1</codePerStep>
<!--Q Value to convert float / double to integer format -->
<qValue>128</qValue>
</region>
</regionParams>
<!--Actuator scenario ringing and damping information
Damping parameters in forward / near direction -->
<forwardDamping>
<!--Actuator ringing scenario value -->
<ringingScenario>400</ringingScenario>
<!--Actuator damping parameters for all scenarios -->
<scenarioDampingParams>
<!--Actuator damping parameters for all regions -->
<scenario>
<!--Actuator damping parameters -->
<region>
<!--Actuator damping step -->
<dampingStep>0x3FF</dampingStep>
<!--Actuator damping delay in micro seconds that must be applied after programming damping step -->
<dampingDelayUs>1000</dampingDelayUs>
<!--Actuator HW parameters -->
<hwParams>0x0</hwParams>
</region>
</scenario>
</scenarioDampingParams>
</forwardDamping>
<!--Actuator scenario ringing and damping information
Damping parameters in backward / far direction -->
<backwardDamping>
<!--Actuator ringing scenario value -->
<ringingScenario>400</ringingScenario>
<!--Actuator damping parameters for all scenarios -->
<scenarioDampingParams>
<!--Actuator damping parameters for all regions -->
<scenario>
<!--Actuator damping parameters -->
<region>
<!--Actuator damping step -->
<dampingStep>0x3FF</dampingStep>
<!--Actuator damping delay in micro seconds that must be applied after programming damping step -->
<dampingDelayUs>1000</dampingDelayUs>
<!--Actuator HW parameters -->
<hwParams>0x0</hwParams>
</region>
</scenario>
</scenarioDampingParams>
</backwardDamping>
</tunedParams>
</actuatorDriver>

基本上,用到的Camera sensor的xml,需要根据实际情况进行配置:

  • 如果xml不存在,那么需要在vendor/qcom/proprietary/chi-cdk/oem/qcom/actuator添加个一个xml的文件。模组厂会给我们提供关于该颗sensor的相关文档,我们需要获取的马达相关信息,也能从提供的文档中找到。

  • 如果sersor 用的马达型号对应的xml已经有了,那基于初始配置就可以了。

根据实际硬件情况,只需要做少量的改动即可(甚至不需要)。

常见的改动有:

  • slaveAddress :i2c设备地址。
  • i2cFrequencyMode:i2c速率。
  • 上下电时序需要根据数据手册进行修改;powerSetting
...
</powerSetting> <powerSetting>
<configType>MCLK</configType>
<configValue>24000000</configValue>
<delayMs>1</delayMs>
</powerSetting> <powerSetting>
...

camera sensor配置

路径:vendor/qcom/proprietary/chi-cdk/oem/qcom/module

这个目录下,就是关于camera sensor的配置文件了,关于某颗sensor的的详细信息,是在这边进行创建添加的。

vendor/qcom/proprietary/chi-cdk/oem/qcom/module$ ls
altek1_imx577_module.xml liteon_ov9282_master_module.xml sunny_imx481_module.xml
altek2_imx577_module.xml liteon_ov9282_slave_module.xml sunny_imx519_module_talos.xml
...

同样地,随便打开一个module配置:cat truly_s5k3p9sx_module.xml

<?xml version="1.0" encoding="utf-8" ?>
<!--========================================================================-->
<!-- Copyright (c) 2018 Qualcomm Technologies, Inc. -->
<!-- All Rights Reserved. -->
<!-- Confidential and Proprietary - Qualcomm Technologies, Inc. -->
<!--========================================================================-->
<cameraModuleData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="..\..\cdk\sensor\camxmoduleconfig.xsd">
<module_version major_revision="1" minor_revision="0" incr_revision="0"/>
<!--Module group can contain either 1 module or 2 modules
Dual camera, stereo camera use cases contain 2 modules in the group -->
<moduleGroup>
<!--Module configuration -->
<moduleConfiguration description="Module configuration">
<!--CameraId is the id to which DTSI node is mapped.
Typically CameraId is the slot Id for non combo mode. -->
<cameraId>0</cameraId>
<!--Name of the module integrator -->
<moduleName>truly</moduleName>
<!--Name of the sensor in the image sensor module -->
<sensorName>s5k3p9sx</sensorName>
<!--Actuator name in the image sensor module
This is an optional element. Skip this element if actuator is not present -->
<actuatorName>dw9763</actuatorName>
<oisName></oisName>
<!--EEPROM name in the image sensor module
This is an optional element. Skip this element if EEPROM is not present -->
<!--eepromName>truly_gt24c64</eepromName-->
<!--Flash name is used to used to open binary.
Binary name is of form flashName_flash.bin Ex:- pmic_flash.bin -->
<flashName>pmic</flashName>
<!--Chromatix name is used to used to open binary.
Binary name is of the form sensor_model_chromatix.bin -->
<chromatixName>default</chromatixName>
<!--Position of the sensor module.
Valid values are: REAR, FRONT, REAR_AUX, FRONT_AUX, EXTERNAL -->
<position>REAR</position>
<!--CSI Information -->
<CSIInfo description="CSI Information">
<laneAssign>0x3210</laneAssign>
<isComboMode>0</isComboMode>
</CSIInfo>
<!--Lens information -->
<lensInfo description="Lens Information">
<!--Focal length of the lens in millimeters. -->
<focalLength>3.65</focalLength>
<!--F-Number of the optical system. -->
<fNumber>1.85</fNumber>
<!--Minimum focus distance in meters. -->
<minFocusDistance>0.1</minFocusDistance>
<!--Total focus distance in meters. -->
<maxFocusDistance>1.9</maxFocusDistance>
<!--Horizontal view angle in degrees. -->
<horizontalViewAngle>61.5</horizontalViewAngle>
<!--Vertical view angle in degrees. -->
<verticalViewAngle>46.05</verticalViewAngle>
<!--Maximum Roll Degree. Valid values are: 0 to 359 -->
<maxRollDegree>360</maxRollDegree>
<!--Maximum Pitch Degree. Valid values are: 0, 90, 180, 270 -->
<maxPitchDegree>360</maxPitchDegree>
<!--Maximum Yaw Degree. Valid values are: 0 to 359 -->
<maxYawDegree>360</maxYawDegree>
</lensInfo>
<!--pdafName>s5k3p9sx_pdaf</pdafName-->
</moduleConfiguration>
</moduleGroup>
</cameraModuleData>

如果是厂商会提供这样的配置,那是最好,基本上不用怎么修改,但如果是自己弄的话,就需要注意以下部分:

  • actuatorName:马达名称(例如dw9763),这个部分要和上面的actuator配置中的actuatorName匹配
  • cameraId:要和设备树匹配。
  • position:前后摄像头等
  • 上下电时序需要根据数据手册进行修改;powerSetting(同上)

编译系统

上面的2个配置已经配好了,但是需要在这里进行编辑才能够最终生效。

yaml文件

路径: vendor/qcom/proprietary/chi-cdk/tools/buildbins

vendor/qcom/proprietary/chi-cdk/tools/buildbins$ ls
buildbins_bengal.yaml buildbins_lito.yaml buildbins_sm6150.yaml linux64 win32
buildbins_kona.yaml buildbins.py buildbins.yaml NOTICE yaml

在Camx架构中,各个功能模块(每颗sensor的module和turning等模块),都可以编译成各自独立的so文件。

修改某个模块的内容后,我们可以切到chi-cdk目录下,进行mm编译,编译生成的对应so文件在vendor/lib*/目录下。

我们打开其中一个yaml文件,看下里面的内容:

sensor_drivers:
- com.qti.sensormodule.truly_s5k3p9sx:
- sensor/default/s5k3p9sx/s5k3p9sx_sensor.xml
- sensor/default/s5k3p9sx/s5k3p9sx_pdaf.xml # 新增
- module/truly_s5k3p9sx_module.xml
- actuator/default/dw9763_actuator.xml # 新增
- flash/back_sensor_flash.xml ...

mk文件

路径:vendor/qcom/proprietary/common/config/device-vendor.mk

确保对应的camera-sensor以及actuator编译进:

...
MM_CAMERA += com.qti.sensor.s5k3p9sx
...
MM_CAMERA += com.qti.actuator.dw9763

设备树

在驱动框架、编译系统都准备就绪以后,就要实际结合硬件来进行修改了,这部分的工作主要以配置引脚等属性为主。

路径:vendor/qcom/proprietary/devicetree-4.19/qcom/camera

根据版本不同,目录略有差异,但类似,例如vendor/qcom/proprietary/camera-devicetree

camera-devicetree 这边的dtsi文件,配置的就是和camera上电相关的内容了, 修改了该目录下的文件后,我们需要编译dtbo.img文件来烧录更新修改(保险起见,连同boot.img成对烧录)。

vendor/qcom/proprietary/camera-devicetree$ ls
bengal-camera.dtsi kona-camera-sensor-mtp.dtsi lito-camera.dtsi
bengal-camera-sensor-idp.dtsi kona-camera-sensor-qrd.dtsi lito-camera-sensor-cdp.dtsi

camera.dtsi

我们打开需要编译的dtsi文件,看下里面的内容:

/*
* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
&soc {
led_flash_rear: qcom,camera-flash@0 {
cell-index = <0>;
reg = <0x00 0x00>;
compatible = "qcom,camera-flash";
flash-source = <&pmi8998_flash0 &pmi8998_flash1>;
torch-source = <&pmi8998_torch0 &pmi8998_torch1>;
switch-source = <&pmi8998_switch0>;
status = "ok";
};
led_flash_rear_aux: qcom,camera-flash@1 {
cell-index = <1>;
reg = <0x01 0x00>;
compatible = "qcom,camera-flash";
flash-source = <&pmi8998_flash0 &pmi8998_flash1>;
torch-source = <&pmi8998_torch0 &pmi8998_torch1>;
switch-source = <&pmi8998_switch0>;
status = "ok";
};
led_flash_front: qcom,camera-flash@2 {
cell-index = <2>;
reg = <0x02 0x00>;
compatible = "qcom,camera-flash";
flash-source = <&pmi8998_flash2>;
torch-source = <&pmi8998_torch2>;
switch-source = <&pmi8998_switch1>;
status = "ok";
};
led_flash_iris: qcom,camera-flash@3 {
cell-index = <3>;
reg = <0x03 0x00>;
compatible = "qcom,camera-flash";
flash-source = <&pmi8998_flash2>;
torch-source = <&pmi8998_torch2>;
switch-source = <&pmi8998_switch2>;
status = "ok";
};
actuator_regulator: gpio-regulator@0 {
compatible = "regulator-fixed";
reg = <0x00 0x00>;
regulator-name = "actuator_regulator";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <100>;
enable-active-high;
gpio = <&tlmm 93 0>; /* 马达对应的 pin*/
vin-supply = <&pmi8998_bob>;
};
camera_rear_ldo: gpio-regulator@1 {
compatible = "regulator-fixed";
reg = <0x01 0x00>;
regulator-name = "camera_rear_ldo";
//regulator-min-microvolt = <1050000>;
//regulator-max-microvolt = <1050000>;
regulator-enable-ramp-delay = <135>;
enable-active-high;
gpio = <&pm8998_gpios 12 0>;
pinctrl-names = "default";
pinctrl-0 = <&camera_rear_dvdd_en_default>;
//vin-supply = <&pm8998_s3>;
};
camera_ldo: gpio-regulator@2 {
compatible = "regulator-fixed";
reg = <0x02 0x00>;
regulator-name = "camera_ldo";
//regulator-min-microvolt = <1050000>;
//regulator-max-microvolt = <1050000>;
regulator-enable-ramp-delay = <233>;
enable-active-high;
gpio = <&pm8998_gpios 9 0>;
pinctrl-names = "default";
pinctrl-0 = <&camera_dvdd_en_default>;
//vin-supply = <&pm8998_s3>;
};
}; &cam_cci {
qcom,cam-res-mgr {
compatible = "qcom,cam-res-mgr";
status = "ok";
}; actuator_rear: qcom,actuator@0 {
cell-index = <0>;
reg = <0x0>;
compatible = "qcom,actuator";
cci-master = <0>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2800000>;
rgltr-max-voltage = <2800000>;
rgltr-load-current = <0>;
}; actuator_rear_aux: qcom,actuator@1 {
cell-index = <1>;
reg = <0x1>;
compatible = "qcom,actuator";
cci-master = <1>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2800000>;
rgltr-max-voltage = <2800000>;
rgltr-load-current = <0>;
}; actuator_front: qcom,actuator@2 {
cell-index = <2>;
reg = <0x2>;
compatible = "qcom,actuator";
cci-master = <1>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2800000>;
rgltr-max-voltage = <2800000>;
rgltr-load-current = <0>;
}; ois_rear: qcom,ois@0 {
cell-index = <0>;
reg = <0x0>;
compatible = "qcom,ois";
cci-master = <0>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2800000>;
rgltr-max-voltage = <2800000>;
rgltr-load-current = <0>;
status = "ok";
}; eeprom_rear: qcom,eeprom@0 {
cell-index = <0>;
reg = <0>;
compatible = "qcom,eeprom";
cam_vio-supply = <&pm8998_lvs1>;
cam_vana-supply = <&pmi8998_bob>;
cam_vdig-supply = <&camera_rear_ldo>;
cam_clk-supply = <&titan_top_gdsc>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <0 3312000 1050000 0 2800000>;
rgltr-max-voltage = <0 3600000 1050000 0 2800000>;
rgltr-load-current = <0 80000 105000 0 0>;
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 13 0>,
<&tlmm 80 0>,
<&tlmm 79 0>;
gpio-reset = <1>;
gpio-vana = <2>;
gpio-req-tbl-num = <0 1 2>;
gpio-req-tbl-flags = <1 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK0",
"CAM_RESET0",
"CAM_VANA0";
sensor-position = <0>;
sensor-mode = <0>;
cci-master = <0>;
status = "ok";
clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
clock-rates = <24000000>;
}; eeprom_rear_aux: qcom,eeprom@1 {
cell-index = <1>;
reg = <0x1>;
compatible = "qcom,eeprom";
cam_vdig-supply = <&camera_ldo>;
cam_vio-supply = <&pm8998_lvs1>;
cam_vana-supply = <&pmi8998_bob>;
cam_clk-supply = <&titan_top_gdsc>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vdig", "cam_vio", "cam_vana",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <1050000 0 3312000 0 2800000>;
rgltr-max-voltage = <1050000 0 3600000 0 2800000>;
rgltr-load-current = <105000 0 80000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk2_active
&cam_sensor_rear2_active>;
pinctrl-1 = <&cam_sensor_mclk2_suspend
&cam_sensor_rear2_suspend>;
gpios = <&tlmm 15 0>,
<&tlmm 9 0>,
<&tlmm 8 0>;
gpio-reset = <1>;
gpio-vana = <2>;
gpio-req-tbl-num = <0 1 2>;
gpio-req-tbl-flags = <1 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK1",
"CAM_RESET1",
"CAM_VANA1";
sensor-position = <0>;
sensor-mode = <0>;
cci-master = <1>;
status = "ok";
clocks = <&clock_camcc CAM_CC_MCLK2_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
clock-rates = <24000000>;
}; eeprom_front: qcom,eeprom@2 {
cell-index = <2>;
reg = <0x2>;
compatible = "qcom,eeprom";
cam_vio-supply = <&pm8998_lvs1>;
cam_vana-supply = <&pmi8998_bob>;
cam_vdig-supply = <&camera_ldo>;
cam_clk-supply = <&titan_top_gdsc>;
cam_vaf-supply = <&actuator_regulator>;
regulator-names = "cam_vio", "cam_vana", "cam_vdig",
"cam_clk", "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <0 3312000 1050000 0 2800000>;
rgltr-max-voltage = <0 3600000 1050000 0 2800000>;
rgltr-load-current = <0 80000 105000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_active
&cam_sensor_front_active>;
pinctrl-1 = <&cam_sensor_mclk1_suspend
&cam_sensor_front_suspend>;
gpios = <&tlmm 14 0>,
<&tlmm 28 0>,
<&tlmm 8 0>;
gpio-reset = <1>;
gpio-vana = <2>;
gpio-req-tbl-num = <0 1 2>;
gpio-req-tbl-flags = <1 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK2",
"CAM_RESET2",
"CAM_VANA2";
sensor-position = <1>;
sensor-mode = <0>;
cci-master = <1>;
status = "ok";
clocks = <&clock_camcc CAM_CC_MCLK1_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
clock-rates = <24000000>;
}; qcom,cam-sensor@0 { // 后置摄像头
cell-index = <0>;
compatible = "qcom,cam-sensor";
reg = <0x0>;
csiphy-sd-index = <0>;
sensor-position-roll = <270>;
sensor-position-pitch = <0>;
sensor-position-yaw = <180>;
/* 如果用到了闪光灯、马达;则需要对应有关的节点。*/
led-flash-src = <&led_flash_rear>;
actuator-src = <&actuator_rear>;
//ois-src = <&ois_rear>;
//eeprom-src = <&eeprom_rear>;
cam_vio-supply = <&pm8998_lvs1>;
//cam_vana-supply = <&camera_vana_ldo>;
cam_vdig-supply = <&camera_rear_ldo>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vio","cam_vdig", "cam_clk";
rgltr-cntrl-support;
rgltr-min-voltage = <0 1050000 0>;
rgltr-max-voltage = <0 1050000 0>;
rgltr-load-current = <0 105000 0>;
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 13 0>,
<&tlmm 9 0>,
<&tlmm 26 0>,
<&tlmm 8 0>;
gpio-reset = <1>;
gpio-standby = <2>;
gpio-custom1 = <3>; //vana
gpio-req-tbl-num = <0 1 2 3>;
gpio-req-tbl-flags = <1 0 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK0",
"CAM_RESET0",
"CAM_STANDBY0",
"CAM_CUSTOM1";
sensor-mode = <0>;
cci-master = <0>;
status = "ok";
clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
clock-rates = <24000000>;
}; qcom,cam-sensor@1 { // 前置摄像头
cell-index = <1>;
compatible = "qcom,cam-sensor";
reg = <0x1>;
csiphy-sd-index = <1>;
sensor-position-roll = <270>;
sensor-position-pitch = <0>;
sensor-position-yaw = <0>;
/* 如果用到了闪光灯、马达;则需要对应有关的节点。*/
//actuator-src = <&actuator_front>;
led-flash-src = <&led_flash_front>;
//eeprom-src = <&eeprom_front>;
cam_vdig-supply = <&camera_ldo>;
cam_vio-supply = <&pm8998_lvs1>;
//cam_vana-supply = <&camera_vana_ldo>;
cam_clk-supply = <&titan_top_gdsc>;
regulator-names = "cam_vdig", "cam_vio", "cam_clk";
rgltr-cntrl-support;
rgltr-min-voltage = <1050000 0 0>;
rgltr-max-voltage = <1050000 0 0>;
rgltr-load-current = <105000 0 0>;
gpio-no-mux = <0>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk1_active
&cam_sensor_front_active>;
pinctrl-1 = <&cam_sensor_mclk1_suspend
&cam_sensor_front_suspend>;
gpios = <&tlmm 14 0>,
<&tlmm 7 0>,
<&tlmm 40 0>,
<&tlmm 84 0>;
gpio-reset = <1>;
gpio-standby = <2>;
gpio-custom1 = <3>; //vana
gpio-req-tbl-num = <0 1 2 3>;
gpio-req-tbl-flags = <1 0 0 0>;
gpio-req-tbl-label = "CAMIF_MCLK1",
"CAM_RESET1",
"CAM_STANDBY1",
"CAM_CUSTOM1";
sensor-mode = <0>;
cci-master = <1>;
status = "ok";
clocks = <&clock_camcc CAM_CC_MCLK1_CLK>;
clock-names = "cam_clk";
clock-cntl-level = "turbo";
clock-rates = <24000000>;
}; //...
};

高通Android Cam-x Actuator Bring up的更多相关文章

  1. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  2. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  3. 高通Android display分析【转】

    本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...

  4. 高通(QCOM)sensor bring up

    高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...

  5. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

  6. 高通Android camera运行流程【转】

    本文转载自:http://blog.csdn.net/unicornkylin/article/details/13293295 1.总体架构 Android Camera 框架从整体上看是一个 cl ...

  7. 高通android开发缩写

    1.TLMM MSM TLMM pinmux controller,Qualcomm MSM integrates a GPIO and Pin mux/config hardware, (TOP L ...

  8. 高通 android平台LCD驱动分析

    目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...

  9. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  10. 在高通平台Android环境下编译内核模块【转】

    本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei ...

随机推荐

  1. .Net 8.0 下的新RPC,IceRPC之"请求"生命线意义非凡

    作者引言 很高兴啊,我们来到了IceRPC之"请求"生命线意义非凡,号称"死亡时间"的追命线,颤抖吧! "请求"生命线之意义非凡 本文将深入 ...

  2. AI实战 | 手把手带你打造智能待办助手

    背景 大家好,我是努力的小雨.今天我想分享一下搭建待办助手的经历.起初,我并没有什么特别的创意点子.但在4月16日的百度Create大会上,我看到了小度的大模型加持使得其变得更加智能.我被一场示例所震 ...

  3. 错误记录——mysql5.7连接失败,服务无法启动

    起因: 上周安装完mysql后,成功新建了数据库,一切都是正常的,于是就先搁置一旁.今天周一过来,却突然发现无法连接mysql了. 过程: 第一反应是服务没有启动,毕竟重启了电脑,说不定是服务没有自动 ...

  4. JS对Cookie的应用--JavaScript实例集锦(初学)

    一个网站上的cookie信息可以实现下次自动登录,记录你的历史等等 可以在火狐浏览器查看本地代码的cookie信息: 打开火狐浏览器--点击右键--查看页面信息--安全--查看cookie <! ...

  5. leaflet利用hotline实现河流差值渲染热力图

    实现效果(这里做了1条主河道和5个支流): 核心代码使用了Leaflet.hotline插件,github下载地址链接 详情见我之前整理的一篇文章介绍河流热力图 核心代码逻辑: // 处理河流数据以及 ...

  6. PPO近端策略优化玩cartpole游戏

    这个难度有些大,有两个policy,一个负责更新策略,另一个负责提供数据,实际这两个policy是一个东西,用policy1跑出一组数据给新的policy2训练,然后policy2跑数据给新的poli ...

  7. 单体项目使用Spring Security实现登陆认证授权

    前端可以根据权限信息控制菜单和页面展示,操作按钮的显示.但这并不够,如果有人拿到了接口,绕过了页面直接操作数据,这是很危险的.所以我们需要在后端也加入权限控制,只有拥有操作权限,该接口才能被授权访问. ...

  8. rbenv:Ruby 多版本管理利器

    在 Ruby 开发的世界中,经常需要面对不同项目使用不同 Ruby 版本的情况.这时,一个高效.灵活且易于使用的 Ruby 版本管理工具就显得尤为重要. rbenv 正是这样一个工具,它允许开发者在同 ...

  9. go 从入门到了解

    一,GO的安装与配置 官网:https://golang.org/dl/ 镜像:https://golang.google.cn/dl/ 1,GOPATH GOPATH在windows上的默认值:%U ...

  10. Android 13 - Media框架(15)- OpenMax(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容. 1.相关路径 以 ...