高通Android Cam-x Actuator Bring up
高通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的更多相关文章
- 高通Android平台硬件调试之Camera篇
之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- 高通Android display分析【转】
本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...
- 高通(QCOM)sensor bring up
高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...
- 高通android开发摘要
一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...
- 高通Android camera运行流程【转】
本文转载自:http://blog.csdn.net/unicornkylin/article/details/13293295 1.总体架构 Android Camera 框架从整体上看是一个 cl ...
- 高通android开发缩写
1.TLMM MSM TLMM pinmux controller,Qualcomm MSM integrates a GPIO and Pin mux/config hardware, (TOP L ...
- 高通 android平台LCD驱动分析
目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...
- 【转】高通平台android 环境配置编译及开发经验总结
原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- 在高通平台Android环境下编译内核模块【转】
本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei ...
随机推荐
- 实验8 #第8章 Verilog有限状态机设计-3 #Verilog #Quartus #modelsim
3. 状态机A/D采样控制电路 3.1 目标:用状态机控制ADC0809实现数据采集. 3.2 ADC0809简介 (1)ADC0809是8位A/D转换器,片内有8路模拟开关,可控制8个 模拟量中 的 ...
- surging版本有哪些?
surging 一直在升级开发各个版本,以下是各个版本的费用,有需要可以联系或者可以聘请我为架构师,技术顾问,后期会升级多语言版本,推广至海外. 基于surging 的物联网技术架构 平台版本:
- k8s-nginx实战部署1
目录 yaml 资源清单 run_deploy.sh .gitlab-ci.yml yaml 资源清单 deploy.yaml apiVersion: v1 kind: ConfigMap metad ...
- 1.简单的C语言程序
简单的C语言程序 什么是计算机程序? 什么是计算机语言? 所谓程序,就是一组计算机能识别和执行的指令. 什么是计算机语言? 机器语言(0,1 '低级语言'),汇编语言(符号化 '低级语言'),高级语言 ...
- 【项目学习】Anchor:一种提供稳定币存款低波动收益率的去中心化的储蓄协议
简介 基于稳定币的获利产品. 贷方人放出稳定币以供借款.借方通过抵押资产(base asset)的方式,以低于协议定义的借贷比率借入稳定币.Anchor 协议使用抵押资产进行质押以获得奖励,然后将质押 ...
- fastposter v2.8.4 发布 电商海报生成器
fastposter v2.8.4 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.贰维海报,图片海报,分享海报贰维码推 ...
- 网络拓扑—FTP服务搭建
目录 FTP服务搭建 网络拓扑 配置网络 FTP PC 安装FTP服务 配置FTP服务 FTP用户配置-1 PC机访问FTP站点 IE浏览器访问 终端访问 FTP用户配置-2 PC机访问ftp站点 I ...
- Dapr 与 .NET Aspire 结合使用获得无与伦比的本地开发体验
Dapr 提供了一组构建块,用于抽象分布式系统中常用的概念.这包括服务.缓存.工作流.复原能力.机密管理等之间的安全同步和异步通信.不必自己实现这些功能,可以消除样板,降低复杂性,并允许您专注于开发业 ...
- 🐬记一次MySQL执行修改语句超时问题
异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was di ...
- 『手撕Vue-CLI』拉取版本号
开篇 在上一篇文章中,给 nue-cli 添加了与用户终端交互的功能,这一次来实现一个拉取版本号的功能. 这个功能的背景是,有时候我们在使用脚手架的时候,不同版本的脚手架可能会有不同的功能,所以用户有 ...