qcom,duration-ms = <1280>;
qcom,ires-ua = <12500>;
qcom,hdrm-voltage-mv = <325>;
qcom,hdrm-vol-hi-lo-win-mv = <100>;
};
pm660l_flash2: qcom,flash_2 {
label = "flash";
qcom,led-name = "led:flash_2";
qcom,max-current = <750>;
qcom,default-led-trigger = "flash2_trigger";
qcom,id = <2>;
qcom,current-ma = <500>;
qcom,duration-ms = <1280>;
qcom,ires-ua = <12500>;
qcom,hdrm-voltage-mv = <325>;
qcom,hdrm-vol-hi-lo-win-mv = <100>;
};
pm660l_torch0: qcom,torch_0 {
label = "torch";
qcom,led-name = "led:torch_0";
qcom,max-current = <500>;
qcom,default-led-trigger = "torch0_trigger";
qcom,id = <0>;
qcom,current-ma = <300>;
qcom,ires-ua = <12500>;
qcom,hdrm-voltage-mv = <325>;
qcom,hdrm-vol-hi-lo-win-mv = <100>;
};
......
pm660l_switch0: qcom,led_switch_0 {
label = "switch";
qcom,led-name = "led:switch_0";
qcom,led-mask = <3>;
qcom,default-led-trigger = "switch0_trigger";
};
};
1.3.4 Camera 马达DTS配置
&cci {
actuator0: qcom,actuator@0 {
cell-index = <0>;
reg = <0x0>;
compatible = “qcom,actuator”;
qcom,cci-master = <0>; // 马达使用的 i2c master , I2C 0
cam_vaf-supply = <&cam_vaf_gpio_regulator>; // 马达供电
qcom,cam-vreg-name = “cam_vaf”;
qcom,cam-vreg-min-voltage = <3300000>;
qcom,cam-vreg-max-voltage = <3600000>;
qcom,cam-vreg-op-mode = <100000>;
};
actuator1: qcom,actuator@1 {
cell-index = <1>;
reg = <0x1>;
compatible = "qcom,actuator";
qcom,cci-master = <1>; // 马达使用的 i2c master , I2C 1
cam_vaf-supply = <&cam_vaf_gpio_regulator>;
qcom,cam-vreg-name = "cam_vaf";
qcom,cam-vreg-min-voltage = <3300000>;
qcom,cam-vreg-max-voltage = <3600000>;
qcom,cam-vreg-op-mode = <100000>;
};
1.3.5 Camera 光学防抖 OSI DTS配置
ois0: qcom,ois@0 {
cell-index = <0>;
reg = <0x0>;
compatible = “qcom,ois”;
qcom,cci-master = <0>; // 使用 I2C 0
gpios = <&tlmm 50 0>; // GPIO 50
qcom,gpio-vaf = <0>;
qcom,gpio-req-tbl-num = <0>;
qcom,gpio-req-tbl-flags = <0>;
qcom,gpio-req-tbl-label = “CAM_VAF”;
pinctrl-names = “cam_default”, “cam_suspend”;
pinctrl-0 = <&cam_actuator_vaf_active>;
pinctrl-1 = <&cam_actuator_vaf_suspend>;
status = “disabled”;
};
1.3.6 Camera eeprom DTS配置
eeprom0: qcom,eeprom@0 {
cell-index = <0>;
reg = <0>;
compatible = “qcom,eeprom”;
cam_vio-supply = <&pm660_l11>;
cam_vana-supply = <&cam_avdd_gpio_regulator>;
cam_vdig-supply = <&cam_rear_dvdd_gpio_regulator>;
cam_vaf-supply = <&pm660l_l8>;
qcom,cam-vreg-name = “cam_vio”, “cam_vana”, “cam_vdig”, “cam_vaf”;
qcom,cam-vreg-min-voltage = <1780000 0 0 2800000>;
qcom,cam-vreg-max-voltage = <1950000 0 0 3400000>;
qcom,cam-vreg-op-mode = <105000 0 0 100000>;
qcom,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 32 0>, <&tlmm 46 0>;
qcom,gpio-reset = <1>;
qcom,gpio-req-tbl-num = <0 1>;
qcom,gpio-req-tbl-flags = <1 0>;
qcom,gpio-req-tbl-label = “CAMIF_MCLK0”, “CAM_RESET0”;
qcom,sensor-position = <0>;
qcom,sensor-mode = <0>;
qcom,cci-master = <0>;
status = “ok”;
clocks = <&clock_mmss MCLK0_CLK_SRC>, <&clock_mmss MMSS_CAMSS_MCLK0_CLK>;
clock-names = “cam_src_clk”, “cam_clk”;
qcom,clock-rates = <24000000 0>;
};
1.3.7 Camera PM660L GPIO DTS配置
前面我们使用到了两个 PM660L 的GPIO:
`gpio = <&pm660l_gpios 3 0>;`
`gpio = <&pm660l_gpios 4 0>;`
不同于 CPU的gpio ,其需要作单独配置,如下:
@\kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi
&pm660l_gpios {
gpio@c300 { /* GPIO4 -CAMERA SENSOR 0 VDIG*/
qcom,mode = <1>; /* Output /
qcom,pull = <5>; / No Pull /
qcom,vin-sel = <0>; / VIN1 GPIO_LV /
qcom,src-sel = <0>; / GPIO /
qcom,invert = <0>; / Invert /
qcom,master-en = <1>; / Enable GPIO */
status = “ok”;
};
gpio@c200 { /* GPIO3 -CAMERA SENSOR 2 VDIG*/
qcom,mode = <1>; /* Output */
qcom,pull = <5>; /* No Pull */
qcom,vin-sel = <0>; /* VIN1 GPIO_LV */
qcom,src-sel = <0>; /* GPIO */
qcom,invert = <0>; /* Invert */
qcom,master-en = <1>; /* Enable GPIO */
status = "ok";
};
};
1.4 sdm660-pinctrl.dtsi
在前面 中,有需要用到的gpio,出于电源管理的需求,需要在 pinctrl 中配置其active 和 suspend 对应的配置:
例如,GPIO 32 和 GPIO 46 以及 GPIO 50
在前边代码中,使用配置如下:
gpio 50:
pinctrl-names = “cam_default”, “cam_suspend”;
pinctrl-0 = <&cam_actuator_vaf_active>;
pinctrl-1 = <&cam_actuator_vaf_suspend>;
GPIO 32 、GPIO 46:
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 32 0>, <&tlmm 46 0>;
@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-pinctrl.dtsi
cam_actuator_vaf_active: cam_actuator_vaf_active {
/* ACTUATOR POWER /
mux {
pins = “gpio50”;
function = “gpio”;
};
config {
pins = “gpio50”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_actuator_vaf_suspend: cam_actuator_vaf_suspend {
/ ACTUATOR POWER /
mux {
pins = “gpio50”;
function = “gpio”;
};
config {
pins = “gpio50”;
bias-pull-down; / PULL DOWN /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk0_active: cam_sensor_mclk0_active {
/ MCLK0 /
mux {
/ CLK /
pins = “gpio32”;
function = “cam_mclk”;
};
config {
pins = “gpio32”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk0_suspend: cam_sensor_mclk0_suspend {
/ MCLK0 /
mux {
/ CLK /
pins = “gpio32”;
function = “cam_mclk”;
};
config {
pins = “gpio32”;
bias-pull-down; / PULL DOWN /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_rear_active: cam_sensor_rear_active {
/ RESET, STANDBY /
mux {
pins = “gpio46”;
function = “gpio”;
};
config {
pins = “gpio46”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_rear_suspend: cam_sensor_rear_suspend {
/ RESET, STANDBY /
mux {
pins = “gpio46”;
function = “gpio”;
};
config {
pins = “gpio46”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk1_active: cam_sensor_mclk1_active {
/ MCLK1 /
mux {
/ CLK /
pins = “gpio33”;
function = “cam_mclk”;
};
config {
pins = “gpio33”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk1_suspend: cam_sensor_mclk1_suspend {
/ MCLK1 /
mux {
/ CLK /
pins = “gpio33”;
function = “cam_mclk”;
};
config {
pins = “gpio33”;
bias-pull-down; / PULL DOWN /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_rear2_active: cam_sensor_rear2_active {
/ RESET, STANDBY /
mux {
pins = “gpio48”;
function = “gpio”;
};
config {
pins = “gpio48”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_rear2_suspend: cam_sensor_rear2_suspend {
/ RESET, STANDBY /
mux {
pins = “gpio48”;
function = “gpio”;
};
config {
pins = “gpio48”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk2_active: cam_sensor_mclk2_active {
/ MCLK1 /
mux {
/ CLK /
pins = “gpio34”;
function = “cam_mclk”;
};
config {
pins = “gpio34”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_mclk2_suspend: cam_sensor_mclk2_suspend {
/ MCLK1 /
mux {
/ CLK /
pins = “gpio34”;
function = “cam_mclk”;
};
config {
pins = “gpio34”;
bias-pull-down; / PULL DOWN /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_front_active: cam_sensor_front_active {
/ RESET VANA*/
mux {
pins = “gpio47”;
function = “gpio”;
};
config {
pins = “gpio47”;
bias-disable; /* No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_front_suspend: cam_sensor_front_suspend {
/ RESET /
mux {
pins = “gpio47”;
function = “gpio”;
};
config {
pins = “gpio47”;
bias-disable; / No PULL /
drive-strength = <2>; / 2 MA /
};
};
cam_sensor_