blob: fa93918df2e4b7728da0be9a90cc66b57663baa1 [file] [log] [blame]
/* Copyright (c) 2015-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.
*/
#include <dt-bindings/msm/power-on.h>
#include <dt-bindings/spmi/spmi.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
&spmi_bus {
qcom,pmi8950@2 {
compatible ="qcom,spmi-pmic";
reg = <0x2 SPMI_USID>;
#address-cells = <1>;
#size-cells = <1>;
pmi8950_revid: qcom,revid@100 {
compatible = "qcom,qpnp-revid";
reg = <0x100 0x100>;
};
qcom,power-on@800 {
compatible = "qcom,qpnp-power-on";
reg = <0x800 0x100>;
qcom,secondary-pon-reset;
qcom,hard-reset-poweroff-type =
<PON_POWER_OFF_SHUTDOWN>;
pon_perph_reg: qcom,pon_perph_reg {
regulator-name = "pon_spare_reg";
qcom,pon-spare-reg-addr = <0x8c>;
qcom,pon-spare-reg-bit = <1>;
};
};
pmi8950_vadc: vadc@3100 {
compatible = "qcom,qpnp-vadc";
reg = <0x3100 0x100>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <0x2 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "eoc-int-en-set";
qcom,adc-bit-resolution = <15>;
qcom,adc-vdd-reference = <1800>;
qcom,vadc-poll-eoc;
#thermal-sensor-cells = <1>;
chan@0 {
label = "usbin";
reg = <0>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <4>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@1 {
label = "dcin";
reg = <1>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <4>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@3 {
label = "vchg_sns";
reg = <3>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <1>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@9 {
label = "ref_625mv";
reg = <9>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <0>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@a {
label = "ref_1250v";
reg = <0xa>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <0>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@d {
label = "chg_temp";
reg = <0xd>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <0>;
qcom,calibration-type = "absolute";
qcom,scale-function = <16>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
qcom,vadc-thermal-node;
};
chan@43 {
label = "usb_dp";
reg = <0x43>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <1>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
chan@44 {
label = "usb_dm";
reg = <0x44>;
qcom,decimation = <0>;
qcom,pre-div-channel-scaling = <1>;
qcom,calibration-type = "absolute";
qcom,scale-function = <0>;
qcom,hw-settle-time = <0>;
qcom,fast-avg-setup = <0>;
};
};
pmi8950_gpios: gpios {
compatible = "qcom,spmi-gpio";
reg = <0xc000 0x200>;
interrupts = <0x2 0xc0 0 IRQ_TYPE_NONE>,
<0x2 0xc1 0 IRQ_TYPE_NONE>;
interrupt-names = "pmi8950_gpio1", "pmi8950_gpio2";
gpio-controller;
#gpio-cells = <2>;
};
pmi8950_mpps: mpps {
compatible = "qcom,spmi-mpp";
reg = <0xa000 0x400>;
interrupts = <0x2 0xa0 0 IRQ_TYPE_NONE>,
<0x2 0xa1 0 IRQ_TYPE_NONE>,
<0x2 0xa2 0 IRQ_TYPE_NONE>,
<0x2 0xa3 0 IRQ_TYPE_NONE>;
interrupt-names = "pmi8950_mpp1", "pmi8950_mpp2",
"pmi8950_mpp3", "pmi8950_mpp4";
gpio-controller;
#gpio-cells = <2>;
};
qpnp_smbcharger: qcom,qpnp-smbcharger {
compatible = "qcom,qpnp-smbcharger";
#address-cells = <1>;
#size-cells = <1>;
qcom,iterm-ma = <100>;
qcom,float-voltage-mv = <4200>;
qcom,resume-delta-mv = <200>;
qcom,chg-inhibit-fg;
qcom,rparasitic-uohm = <100000>;
qcom,bms-psy-name = "bms";
qcom,thermal-mitigation = <1500 700 600 0>;
qcom,parallel-usb-min-current-ma = <1400>;
qcom,parallel-usb-9v-min-current-ma = <900>;
qcom,parallel-allowed-lowering-ma = <500>;
qcom,pmic-revid = <&pmi8950_revid>;
qcom,force-aicl-rerun;
qcom,aicl-rerun-period-s = <180>;
qcom,autoadjust-vfloat;
dpdm-supply = <&qusb_phy>;
qcom,chgr@1000 {
reg = <0x1000 0x100>;
interrupts = <0x2 0x10 0x0 IRQ_TYPE_NONE>,
<0x2 0x10 0x1 IRQ_TYPE_NONE>,
<0x2 0x10 0x2 IRQ_TYPE_NONE>,
<0x2 0x10 0x3 IRQ_TYPE_NONE>,
<0x2 0x10 0x4 IRQ_TYPE_NONE>,
<0x2 0x10 0x5 IRQ_TYPE_NONE>,
<0x2 0x10 0x6 IRQ_TYPE_NONE>,
<0x2 0x10 0x7 IRQ_TYPE_NONE>;
interrupt-names = "chg-error",
"chg-inhibit",
"chg-prechg-sft",
"chg-complete-chg-sft",
"chg-p2f-thr",
"chg-rechg-thr",
"chg-taper-thr",
"chg-tcc-thr";
};
qcom,otg@1100 {
reg = <0x1100 0x100>;
interrupts = <0x2 0x11 0x0 IRQ_TYPE_NONE>,
<0x2 0x11 0x1 IRQ_TYPE_NONE>,
<0x2 0x11 0x3 IRQ_TYPE_NONE>;
interrupt-names = "otg-fail",
"otg-oc",
"usbid-change";
};
qcom,bat-if@1200 {
reg = <0x1200 0x100>;
interrupts = <0x2 0x12 0x0 IRQ_TYPE_NONE>,
<0x2 0x12 0x1 IRQ_TYPE_NONE>,
<0x2 0x12 0x2 IRQ_TYPE_NONE>,
<0x2 0x12 0x3 IRQ_TYPE_NONE>,
<0x2 0x12 0x4 IRQ_TYPE_NONE>,
<0x2 0x12 0x5 IRQ_TYPE_NONE>,
<0x2 0x12 0x6 IRQ_TYPE_NONE>,
<0x2 0x12 0x7 IRQ_TYPE_NONE>;
interrupt-names = "batt-hot",
"batt-warm",
"batt-cold",
"batt-cool",
"batt-ov",
"batt-low",
"batt-missing",
"batt-term-missing";
};
qcom,usb-chgpth@1300 {
reg = <0x1300 0x100>;
interrupts = <0x2 0x13 0x0 IRQ_TYPE_NONE>,
<0x2 0x13 0x1 IRQ_TYPE_NONE>,
<0x2 0x13 0x2 IRQ_TYPE_NONE>,
<0x2 0x13 0x5 IRQ_TYPE_NONE>;
interrupt-names = "usbin-uv",
"usbin-ov",
"usbin-src-det",
"aicl-done";
};
qcom,dc-chgpth@1400 {
reg = <0x1400 0x100>;
interrupts = <0x2 0x14 0x0 IRQ_TYPE_NONE>,
<0x2 0x14 0x1 IRQ_TYPE_NONE>;
interrupt-names = "dcin-uv",
"dcin-ov";
};
qcom,chgr-misc@1600 {
reg = <0x1600 0x100>;
interrupts = <0x2 0x16 0x0 IRQ_TYPE_NONE>,
<0x2 0x16 0x1 IRQ_TYPE_NONE>,
<0x2 0x16 0x2 IRQ_TYPE_NONE>,
<0x2 0x16 0x3 IRQ_TYPE_NONE>,
<0x2 0x16 0x4 IRQ_TYPE_NONE>,
<0x2 0x16 0x5 IRQ_TYPE_NONE>;
interrupt-names = "power-ok",
"temp-shutdown",
"wdog-timeout",
"flash-fail",
"otst2",
"otst3";
};
smbcharger_charger_otg: qcom,smbcharger-boost-otg {
regulator-name = "smbcharger_charger_otg";
};
};
qpnp_fg: qcom,fg {
compatible = "qcom,qpnp-fg";
#address-cells = <1>;
#size-cells = <1>;
qcom,resume-soc = <95>;
status = "okay";
qcom,bcl-lm-threshold-ma = <127>;
qcom,bcl-mh-threshold-ma = <405>;
qcom,fg-iterm-ma = <150>;
qcom,fg-chg-iterm-ma = <100>;
qcom,pmic-revid = <&pmi8950_revid>;
qcom,fg-cutoff-voltage-mv = <3500>;
qcom,cycle-counter-en;
qcom,capacity-learning-on;
qcom,fg-soc@4000 {
status = "okay";
reg = <0x4000 0x100>;
interrupts = <0x2 0x40 0x0 IRQ_TYPE_NONE>,
<0x2 0x40 0x1 IRQ_TYPE_NONE>,
<0x2 0x40 0x2 IRQ_TYPE_NONE>,
<0x2 0x40 0x3 IRQ_TYPE_NONE>,
<0x2 0x40 0x4 IRQ_TYPE_NONE>,
<0x2 0x40 0x5 IRQ_TYPE_NONE>,
<0x2 0x40 0x6 IRQ_TYPE_NONE>;
interrupt-names = "high-soc",
"low-soc",
"full-soc",
"empty-soc",
"delta-soc",
"first-est-done",
"update-soc";
};
qcom,fg-batt@4100 {
reg = <0x4100 0x100>;
interrupts = <0x2 0x41 0x0 IRQ_TYPE_NONE>,
<0x2 0x41 0x1 IRQ_TYPE_NONE>,
<0x2 0x41 0x2 IRQ_TYPE_NONE>,
<0x2 0x41 0x3 IRQ_TYPE_NONE>,
<0x2 0x41 0x4 IRQ_TYPE_NONE>,
<0x2 0x41 0x5 IRQ_TYPE_NONE>,
<0x2 0x41 0x6 IRQ_TYPE_NONE>,
<0x2 0x41 0x7 IRQ_TYPE_NONE>;
interrupt-names = "soft-cold",
"soft-hot",
"vbatt-low",
"batt-ided",
"batt-id-req",
"batt-unknown",
"batt-missing",
"batt-match";
};
qcom,revid-tp-rev@1f1 {
reg = <0x1f1 0x1>;
};
qcom,fg-memif@4400 {
status = "okay";
reg = <0x4400 0x100>;
interrupts = <0x2 0x44 0x0 IRQ_TYPE_NONE>,
<0x2 0x44 0x2 IRQ_TYPE_NONE>;
interrupt-names = "mem-avail",
"data-rcvry-sug";
};
};
bcl@4200 {
compatible = "qcom,msm-bcl";
reg = <0x4200 0xFF 0x88E 0x2>;
reg-names = "fg_user_adc", "pon_spare";
interrupts = <0x2 0x42 0x0 IRQ_TYPE_NONE>,
<0x2 0x42 0x1 IRQ_TYPE_NONE>;
interrupt-names = "bcl-high-ibat-int",
"bcl-low-vbat-int";
qcom,vbat-scaling-factor = <39000>;
qcom,vbat-gain-numerator = <1>;
qcom,vbat-gain-denominator = <128>;
qcom,vbat-polling-delay-ms = <100>;
qcom,ibat-scaling-factor = <39000>;
qcom,ibat-gain-numerator = <1>;
qcom,ibat-gain-denominator = <128>;
qcom,ibat-offset-numerator = <1200>;
qcom,ibat-offset-denominator = <1>;
qcom,ibat-polling-delay-ms = <100>;
qcom,inhibit-derating-ua = <550000>;
};
qcom,leds@a100 {
compatible = "qcom,leds-qpnp";
reg = <0xa100 0x100>;
label = "mpp";
};
};
qcom,pmi8950@3 {
compatible ="qcom,spmi-pmic";
reg = <0x3 SPMI_USID>;
#address-cells = <1>;
#size-cells = <1>;
pmi8950_pwm: pwm@b000 {
status = "disabled";
compatible = "qcom,qpnp-pwm";
reg = <0xb000 0x100>;
reg-names = "qpnp-lpg-channel-base";
qcom,channel-id = <0>;
qcom,supported-sizes = <6>, <9>;
#pwm-cells = <2>;
};
labibb: qpnp-labibb-regulator {
status = "disabled";
compatible = "qcom,qpnp-labibb-regulator";
#address-cells = <1>;
#size-cells = <1>;
qcom,pmic-revid = <&pmi8950_revid>;
qcom,qpnp-labibb-mode = "lcd";
ibb_regulator: qcom,ibb@dc00 {
reg = <0xdc00 0x100>;
reg-names = "ibb_reg";
regulator-name = "ibb_reg";
regulator-min-microvolt = <4600000>;
regulator-max-microvolt = <6000000>;
qcom,qpnp-ibb-min-voltage = <1400000>;
qcom,qpnp-ibb-step-size = <100000>;
qcom,qpnp-ibb-slew-rate = <2000000>;
qcom,qpnp-ibb-use-default-voltage;
qcom,qpnp-ibb-init-voltage = <5500000>;
qcom,qpnp-ibb-init-amoled-voltage = <4000000>;
qcom,qpnp-ibb-init-lcd-voltage = <5500000>;
qcom,qpnp-ibb-soft-start = <1000>;
qcom,qpnp-ibb-discharge-resistor = <32>;
qcom,qpnp-ibb-lab-pwrup-delay = <8000>;
qcom,qpnp-ibb-lab-pwrdn-delay = <8000>;
qcom,qpnp-ibb-en-discharge;
qcom,qpnp-ibb-full-pull-down;
qcom,qpnp-ibb-pull-down-enable;
qcom,qpnp-ibb-switching-clock-frequency =
<1480>;
qcom,qpnp-ibb-limit-maximum-current = <1550>;
qcom,qpnp-ibb-debounce-cycle = <16>;
qcom,qpnp-ibb-limit-max-current-enable;
qcom,qpnp-ibb-ps-enable;
};
lab_regulator: qcom,lab@de00 {
reg = <0xde00 0x100>;
reg-names = "lab";
regulator-name = "lab_reg";
regulator-min-microvolt = <4600000>;
regulator-max-microvolt = <6000000>;
qcom,qpnp-lab-min-voltage = <4600000>;
qcom,qpnp-lab-step-size = <100000>;
qcom,qpnp-lab-slew-rate = <5000>;
qcom,qpnp-lab-use-default-voltage;
qcom,qpnp-lab-init-voltage = <5500000>;
qcom,qpnp-lab-init-amoled-voltage = <4600000>;
qcom,qpnp-lab-init-lcd-voltage = <5500000>;
qcom,qpnp-lab-soft-start = <800>;
qcom,qpnp-lab-full-pull-down;
qcom,qpnp-lab-pull-down-enable;
qcom,qpnp-lab-switching-clock-frequency =
<1600>;
qcom,qpnp-lab-limit-maximum-current = <800>;
qcom,qpnp-lab-limit-max-current-enable;
qcom,qpnp-lab-ps-threshold = <40>;
qcom,qpnp-lab-ps-enable;
qcom,qpnp-lab-nfet-size = <100>;
qcom,qpnp-lab-pfet-size = <100>;
qcom,qpnp-lab-max-precharge-time = <500>;
};
};
wled: qcom,leds@d800 {
compatible = "qcom,qpnp-wled";
reg = <0xd800 0x100>,
<0xd900 0x100>,
<0xdc00 0x100>,
<0xde00 0x100>;
reg-names = "qpnp-wled-ctrl-base",
"qpnp-wled-sink-base",
"qpnp-wled-ibb-base",
"qpnp-wled-lab-base";
interrupts = <0x3 0xd8 0x2 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "sc-irq";
status = "okay";
linux,name = "wled";
linux,default-trigger = "bkl-trigger";
qcom,fdbk-output = "auto";
qcom,vref-mv = <350>;
qcom,switch-freq-khz = <800>;
qcom,ovp-mv = <29500>;
qcom,ilim-ma = <980>;
qcom,boost-duty-ns = <26>;
qcom,mod-freq-khz = <9600>;
qcom,dim-mode = "hybrid";
qcom,dim-method = "linear";
qcom,hyb-thres = <625>;
qcom,sync-dly-us = <800>;
qcom,fs-curr-ua = <20000>;
qcom,led-strings-list = [00 01];
qcom,en-ext-pfet-sc-pro;
qcom,pmic-revid = <&pmi8950_revid>;
qcom,cons-sync-write-delay-us = <1000>;
};
flash_led: qcom,leds@d300 {
compatible = "qcom,qpnp-flash-led";
status = "okay";
reg = <0xd300 0x100>;
label = "flash";
qcom,headroom = <500>;
qcom,startup-dly = <128>;
qcom,clamp-curr = <200>;
qcom,pmic-charger-support;
qcom,self-check-enabled;
qcom,thermal-derate-enabled;
qcom,thermal-derate-threshold = <100>;
qcom,thermal-derate-rate = "5_PERCENT";
qcom,current-ramp-enabled;
qcom,ramp_up_step = "6P7_US";
qcom,ramp_dn_step = "6P7_US";
qcom,vph-pwr-droop-enabled;
qcom,vph-pwr-droop-threshold = <3000>;
qcom,vph-pwr-droop-debounce-time = <10>;
qcom,headroom-sense-ch0-enabled;
qcom,headroom-sense-ch1-enabled;
qcom,pmic-revid = <&pmi8950_revid>;
pmi8950_flash0: qcom,flash_0 {
label = "flash";
qcom,led-name = "led:flash_0";
qcom,default-led-trigger =
"flash0_trigger";
qcom,max-current = <1000>;
qcom,duration = <1280>;
qcom,id = <0>;
qcom,current = <625>;
};
pmi8950_flash1: qcom,flash_1 {
label = "flash";
qcom,led-name = "led:flash_1";
qcom,default-led-trigger =
"flash1_trigger";
qcom,max-current = <1000>;
qcom,duration = <1280>;
qcom,id = <1>;
qcom,current = <625>;
};
pmi8950_torch0: qcom,torch_0 {
label = "torch";
qcom,led-name = "led:torch_0";
qcom,default-led-trigger =
"torch0_trigger";
qcom,max-current = <200>;
qcom,id = <0>;
qcom,current = <120>;
};
pmi8950_torch1: qcom,torch_1 {
label = "torch";
qcom,led-name = "led:torch_1";
qcom,default-led-trigger =
"torch1_trigger";
qcom,max-current = <200>;
qcom,id = <1>;
qcom,current = <120>;
};
pmi8950_switch: qcom,switch {
label = "switch";
qcom,led-name = "led:switch";
qcom,default-led-trigger =
"switch_trigger";
qcom,max-current = <1000>;
qcom,duration = <1280>;
qcom,id = <2>;
qcom,current = <625>;
reg0 {
regulator-name = "pon_spare_reg";
};
};
};
pmi_haptic: qcom,haptics@c000 {
compatible = "qcom,qpnp-haptics";
reg = <0xc000 0x100>;
interrupts = <0x3 0xc0 0x0 IRQ_TYPE_EDGE_BOTH>,
<0x3 0xc0 0x1 IRQ_TYPE_EDGE_BOTH>;
interrupt-names = "hap-sc-irq", "hap-play-irq";
qcom,pmic-revid = <&pmi8950_revid>;
vcc_pon-supply = <&pon_perph_reg>;
qcom,int-pwm-freq-khz = <505>;
qcom,play-mode = "direct";
qcom,wave-play-rate-us = <5263>;
qcom,actuator-type = <0>;
qcom,wave-shape = "square";
qcom,vmax-mv = <2000>;
qcom,ilim-ma = <800>;
qcom,sc-deb-cycles = <8>;
qcom,en-brake;
qcom,brake-pattern = <0x3 0x3 0x0 0x0>;
qcom,wave-samples = <0x3e 0x3e 0x3e 0x3e 0x3e
0x3e 0x3e 0x3e>;
qcom,wave-rep-cnt = <1>;
qcom,wave-samp-rep-cnt = <1>;
};
};
};
&thermal_zones {
chg-temp-adc {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&pmi8950_vadc 0xd>;
thermal-governor = "user_space";
trips {
active-config0 {
temperature = <65000>;
hysteresis = <1000>;
type = "passive";
};
};
};
};
&soc {
led_flash0: qcom,camera-flash {
cell-index = <0>;
compatible = "qcom,camera-flash";
qcom,flash-type = <1>;
qcom,flash-source = <&pmi8950_flash0 &pmi8950_flash1>;
qcom,torch-source = <&pmi8950_torch0 &pmi8950_torch1>;
qcom,switch-source = <&pmi8950_switch>;
};
};