高通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 ...
随机推荐
- vue关于this.$refs.tabs.refreshs()刷新组件,缓存
当更改了用户信息后,需要刷新页面或者组件. 1.当前组件刷新.定义一个请求用户信息的方法,在需要时调用: sessionStorage.setItem('userInfo',JSON.stringif ...
- python交教程4:文件操作
文件操作流程 人类操作一个word流程: 1.找到文件.双击打开 2. 读或修改 3. 保存&关闭 ⽤python操作⽂件也差不多: 只读模式 创建模式 追加模式 遍历文件 图片视频- ...
- 程序员天天 CURD,怎么才能成长,职业发展的思考(3)
公司赚钱流程中,你在哪一个环节 思考你在哪一个环节 在一家提供互联网产品或服务的公司中,开发出产品或提供服务,卖产品卖服务给客户,赚取金钱获得利润,有了利润这家公司就能给员工发工资,公司才能存活下去, ...
- 前端使用 Konva 实现可视化设计器(10)- 对齐线
请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ github源码 gitee源码 示例地址 不知不觉来到第 10 章了,感觉接近尾声了... 对齐线 ...
- .NET 代理模式(一)基本概念
代理模式 代理模式,它是一种结构型的设计模式. 让你能够提供对象的替代品或其占位符. 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理. 简单理解就是 客户端不会直接与实际实现类 ...
- 🔥 Java Solon v2.7.6 发布
Java Solon 是什么框架? Java "新的"应用开发框架.开放原子开源基金会,孵化项目.从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态. 追求: 更 ...
- Typora导出html图片转base64
Typora 导出html图片转base64 Typora 中图片使用绝对路径 图片路径不要使用中文,否则可能会不成功 打包 jar ,jar放在到出 html 同级目录下 必须要有 jdk 环境 一 ...
- 重温 ShardingSphere 分布策略
ShardingSphere--分片及策略:https://blog.csdn.net/weixin_38910645/article/details/107538848 Sharding-JDBC: ...
- 慢查询SQL优化
记一次慢查询的SQL优化 测试表结构 MariaDB [shoppings]> desc login_userinfo; +------------+-------------+------+- ...
- Jenkins获取gitlab源代码
Jenkins获取gitlab源代码 Jenkins权限获取 在日常工作做由于Jenkins启动用户是Jenkins,在执行脚本时系统命令是无法让Jenkins执行的,如果需要Jenkins权限有两种 ...