162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/mfd/qcom,spmi-pmic.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Qualcomm SPMI PMICs multi-function device
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: |
1062306a36Sopenharmony_ci  Some Qualcomm PMICs used with the Snapdragon series SoCs are interfaced
1162306a36Sopenharmony_ci  to the chip via the SPMI (System Power Management Interface) bus.
1262306a36Sopenharmony_ci  Support for multiple independent functions are implemented by splitting the
1362306a36Sopenharmony_ci  16-bit SPMI peripheral address space into 256 smaller fixed-size regions, 256 bytes
1462306a36Sopenharmony_ci  each. A function can consume one or more of these fixed-size register regions.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci  The Qualcomm SPMI series includes the PM8941, PM8841, PMA8084, PM8998 and other
1762306a36Sopenharmony_ci  PMICs.  These PMICs use a "QPNP" scheme through SPMI interface.
1862306a36Sopenharmony_ci  QPNP is effectively a partitioning scheme for dividing the SPMI extended
1962306a36Sopenharmony_ci  register space up into logical pieces, and set of fixed register
2062306a36Sopenharmony_ci  locations/definitions within these regions, with some of these regions
2162306a36Sopenharmony_ci  specifically used for interrupt handling.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cimaintainers:
2462306a36Sopenharmony_ci  - Stephen Boyd <sboyd@kernel.org>
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciproperties:
2762306a36Sopenharmony_ci  $nodename:
2862306a36Sopenharmony_ci    oneOf:
2962306a36Sopenharmony_ci      - pattern: '^pmic@.*$'
3062306a36Sopenharmony_ci      - pattern: '^pm(a|s)?[0-9]*@.*$'
3162306a36Sopenharmony_ci        deprecated: true
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci  compatible:
3462306a36Sopenharmony_ci    items:
3562306a36Sopenharmony_ci      - enum:
3662306a36Sopenharmony_ci          - qcom,pm2250
3762306a36Sopenharmony_ci          - qcom,pm6125
3862306a36Sopenharmony_ci          - qcom,pm6150
3962306a36Sopenharmony_ci          - qcom,pm6150l
4062306a36Sopenharmony_ci          - qcom,pm6350
4162306a36Sopenharmony_ci          - qcom,pm660
4262306a36Sopenharmony_ci          - qcom,pm660l
4362306a36Sopenharmony_ci          - qcom,pm7250b
4462306a36Sopenharmony_ci          - qcom,pm7550ba
4562306a36Sopenharmony_ci          - qcom,pm7325
4662306a36Sopenharmony_ci          - qcom,pm8004
4762306a36Sopenharmony_ci          - qcom,pm8005
4862306a36Sopenharmony_ci          - qcom,pm8009
4962306a36Sopenharmony_ci          - qcom,pm8010
5062306a36Sopenharmony_ci          - qcom,pm8019
5162306a36Sopenharmony_ci          - qcom,pm8028
5262306a36Sopenharmony_ci          - qcom,pm8110
5362306a36Sopenharmony_ci          - qcom,pm8150
5462306a36Sopenharmony_ci          - qcom,pm8150b
5562306a36Sopenharmony_ci          - qcom,pm8150c
5662306a36Sopenharmony_ci          - qcom,pm8150l
5762306a36Sopenharmony_ci          - qcom,pm8226
5862306a36Sopenharmony_ci          - qcom,pm8350
5962306a36Sopenharmony_ci          - qcom,pm8350b
6062306a36Sopenharmony_ci          - qcom,pm8350c
6162306a36Sopenharmony_ci          - qcom,pm8550
6262306a36Sopenharmony_ci          - qcom,pm8550b
6362306a36Sopenharmony_ci          - qcom,pm8550ve
6462306a36Sopenharmony_ci          - qcom,pm8550vs
6562306a36Sopenharmony_ci          - qcom,pm8841
6662306a36Sopenharmony_ci          - qcom,pm8909
6762306a36Sopenharmony_ci          - qcom,pm8916
6862306a36Sopenharmony_ci          - qcom,pm8941
6962306a36Sopenharmony_ci          - qcom,pm8950
7062306a36Sopenharmony_ci          - qcom,pm8953
7162306a36Sopenharmony_ci          - qcom,pm8994
7262306a36Sopenharmony_ci          - qcom,pm8998
7362306a36Sopenharmony_ci          - qcom,pma8084
7462306a36Sopenharmony_ci          - qcom,pmc8180
7562306a36Sopenharmony_ci          - qcom,pmc8180c
7662306a36Sopenharmony_ci          - qcom,pmd9635
7762306a36Sopenharmony_ci          - qcom,pmi632
7862306a36Sopenharmony_ci          - qcom,pmi8950
7962306a36Sopenharmony_ci          - qcom,pmi8962
8062306a36Sopenharmony_ci          - qcom,pmi8994
8162306a36Sopenharmony_ci          - qcom,pmi8998
8262306a36Sopenharmony_ci          - qcom,pmk8002
8362306a36Sopenharmony_ci          - qcom,pmk8350
8462306a36Sopenharmony_ci          - qcom,pmk8550
8562306a36Sopenharmony_ci          - qcom,pmm8155au
8662306a36Sopenharmony_ci          - qcom,pmm8654au
8762306a36Sopenharmony_ci          - qcom,pmp8074
8862306a36Sopenharmony_ci          - qcom,pmr735a
8962306a36Sopenharmony_ci          - qcom,pmr735b
9062306a36Sopenharmony_ci          - qcom,pmr735d
9162306a36Sopenharmony_ci          - qcom,pms405
9262306a36Sopenharmony_ci          - qcom,pmx55
9362306a36Sopenharmony_ci          - qcom,pmx65
9462306a36Sopenharmony_ci          - qcom,pmx75
9562306a36Sopenharmony_ci          - qcom,smb2351
9662306a36Sopenharmony_ci      - const: qcom,spmi-pmic
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci  reg:
9962306a36Sopenharmony_ci    minItems: 1
10062306a36Sopenharmony_ci    maxItems: 2
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci  '#address-cells':
10362306a36Sopenharmony_ci    const: 1
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci  '#size-cells':
10662306a36Sopenharmony_ci    const: 0
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  labibb:
10962306a36Sopenharmony_ci    type: object
11062306a36Sopenharmony_ci    $ref: /schemas/regulator/qcom-labibb-regulator.yaml#
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci  regulators:
11362306a36Sopenharmony_ci    type: object
11462306a36Sopenharmony_ci    $ref: /schemas/regulator/qcom,spmi-regulator.yaml#
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci  pwm:
11762306a36Sopenharmony_ci    type: object
11862306a36Sopenharmony_ci    $ref: /schemas/leds/leds-qcom-lpg.yaml#
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cipatternProperties:
12162306a36Sopenharmony_ci  "^adc@[0-9a-f]+$":
12262306a36Sopenharmony_ci    type: object
12362306a36Sopenharmony_ci    oneOf:
12462306a36Sopenharmony_ci      - $ref: /schemas/iio/adc/qcom,spmi-iadc.yaml#
12562306a36Sopenharmony_ci      - $ref: /schemas/iio/adc/qcom,spmi-rradc.yaml#
12662306a36Sopenharmony_ci      - $ref: /schemas/iio/adc/qcom,spmi-vadc.yaml#
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci  "^adc-tm@[0-9a-f]+$":
12962306a36Sopenharmony_ci    type: object
13062306a36Sopenharmony_ci    # ref depends on compatible, see allOf below
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci  "^audio-codec@[0-9a-f]+$":
13362306a36Sopenharmony_ci    type: object
13462306a36Sopenharmony_ci    $ref: /schemas/sound/qcom,pm8916-wcd-analog-codec.yaml#
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci  "^charger@[0-9a-f]+$":
13762306a36Sopenharmony_ci    type: object
13862306a36Sopenharmony_ci    oneOf:
13962306a36Sopenharmony_ci      - $ref: /schemas/power/supply/qcom,pm8941-charger.yaml#
14062306a36Sopenharmony_ci      - $ref: /schemas/power/supply/qcom,pm8941-coincell.yaml#
14162306a36Sopenharmony_ci      - $ref: /schemas/power/supply/qcom,pmi8998-charger.yaml#
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci  "gpio@[0-9a-f]+$":
14462306a36Sopenharmony_ci    type: object
14562306a36Sopenharmony_ci    $ref: /schemas/pinctrl/qcom,pmic-gpio.yaml#
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci  "^led-controller@[0-9a-f]+$":
14862306a36Sopenharmony_ci    type: object
14962306a36Sopenharmony_ci    $ref: /schemas/leds/qcom,spmi-flash-led.yaml#
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci  "^nvram@[0-9a-f]+$":
15262306a36Sopenharmony_ci    type: object
15362306a36Sopenharmony_ci    $ref: /schemas/nvmem/qcom,spmi-sdam.yaml#
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci  "phy@[0-9a-f]+$":
15662306a36Sopenharmony_ci    type: object
15762306a36Sopenharmony_ci    $ref: /schemas/phy/qcom,snps-eusb2-repeater.yaml#
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci  "pon@[0-9a-f]+$":
16062306a36Sopenharmony_ci    type: object
16162306a36Sopenharmony_ci    $ref: /schemas/power/reset/qcom,pon.yaml#
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci  "^rtc@[0-9a-f]+$":
16462306a36Sopenharmony_ci    type: object
16562306a36Sopenharmony_ci    $ref: /schemas/rtc/qcom-pm8xxx-rtc.yaml#
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci  "^temp-alarm@[0-9a-f]+$":
16862306a36Sopenharmony_ci    type: object
16962306a36Sopenharmony_ci    $ref: /schemas/thermal/qcom,spmi-temp-alarm.yaml#
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci  "^usb-detect@[0-9a-f]+$":
17262306a36Sopenharmony_ci    type: object
17362306a36Sopenharmony_ci    $ref: /schemas/extcon/qcom,pm8941-misc.yaml#
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci  "^usb-vbus-regulator@[0-9a-f]+$":
17662306a36Sopenharmony_ci    type: object
17762306a36Sopenharmony_ci    $ref: /schemas/regulator/qcom,usb-vbus-regulator.yaml#
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci  "^vibrator@[0-9a-f]+$":
18062306a36Sopenharmony_ci    type: object
18162306a36Sopenharmony_ci    $ref: /schemas/input/qcom,pm8xxx-vib.yaml#
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci  "^mpps@[0-9a-f]+$":
18462306a36Sopenharmony_ci    type: object
18562306a36Sopenharmony_ci    $ref: /schemas/pinctrl/qcom,pmic-mpp.yaml#
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci  "(.*)?(wled|leds)@[0-9a-f]+$":
18862306a36Sopenharmony_ci    type: object
18962306a36Sopenharmony_ci    $ref: /schemas/leds/backlight/qcom-wled.yaml#
19062306a36Sopenharmony_ci    unevaluatedProperties: false
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_cirequired:
19362306a36Sopenharmony_ci  - compatible
19462306a36Sopenharmony_ci  - reg
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ciallOf:
19762306a36Sopenharmony_ci  - if:
19862306a36Sopenharmony_ci      properties:
19962306a36Sopenharmony_ci        compatible:
20062306a36Sopenharmony_ci          contains:
20162306a36Sopenharmony_ci            enum:
20262306a36Sopenharmony_ci              - qcom,pm8998
20362306a36Sopenharmony_ci    then:
20462306a36Sopenharmony_ci      patternProperties:
20562306a36Sopenharmony_ci        "^adc-tm@[0-9a-f]+$":
20662306a36Sopenharmony_ci          $ref: /schemas/thermal/qcom-spmi-adc-tm-hc.yaml#
20762306a36Sopenharmony_ci    else:
20862306a36Sopenharmony_ci      patternProperties:
20962306a36Sopenharmony_ci        "^adc-tm@[0-9a-f]+$":
21062306a36Sopenharmony_ci          $ref: /schemas/thermal/qcom-spmi-adc-tm5.yaml#
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ciadditionalProperties: false
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ciexamples:
21562306a36Sopenharmony_ci  - |
21662306a36Sopenharmony_ci    #include <dt-bindings/spmi/spmi.h>
21762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
21862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci    spmi@c440000 {
22162306a36Sopenharmony_ci        compatible = "qcom,spmi-pmic-arb";
22262306a36Sopenharmony_ci        reg = <0x0c440000 0x1100>,
22362306a36Sopenharmony_ci              <0x0c600000 0x2000000>,
22462306a36Sopenharmony_ci              <0x0e600000 0x100000>,
22562306a36Sopenharmony_ci              <0x0e700000 0xa0000>,
22662306a36Sopenharmony_ci              <0x0c40a000 0x26000>;
22762306a36Sopenharmony_ci        reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
22862306a36Sopenharmony_ci        interrupt-names = "periph_irq";
22962306a36Sopenharmony_ci        interrupts = <GIC_SPI 481 IRQ_TYPE_LEVEL_HIGH>;
23062306a36Sopenharmony_ci        qcom,ee = <0>;
23162306a36Sopenharmony_ci        qcom,channel = <0>;
23262306a36Sopenharmony_ci        #address-cells = <2>;
23362306a36Sopenharmony_ci        #size-cells = <0>;
23462306a36Sopenharmony_ci        interrupt-controller;
23562306a36Sopenharmony_ci        #interrupt-cells = <4>;
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci        pmi8998_lsid0: pmic@2 {
23862306a36Sopenharmony_ci            compatible = "qcom,pmi8998", "qcom,spmi-pmic";
23962306a36Sopenharmony_ci            reg = <0x2 SPMI_USID>;
24062306a36Sopenharmony_ci            #address-cells = <1>;
24162306a36Sopenharmony_ci            #size-cells = <0>;
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci            pmi8998_gpio: gpio@c000 {
24462306a36Sopenharmony_ci                compatible = "qcom,pmi8998-gpio", "qcom,spmi-gpio";
24562306a36Sopenharmony_ci                reg = <0xc000>;
24662306a36Sopenharmony_ci                gpio-controller;
24762306a36Sopenharmony_ci                gpio-ranges = <&pmi8998_gpio 0 0 14>;
24862306a36Sopenharmony_ci                #gpio-cells = <2>;
24962306a36Sopenharmony_ci                interrupt-controller;
25062306a36Sopenharmony_ci                #interrupt-cells = <2>;
25162306a36Sopenharmony_ci            };
25262306a36Sopenharmony_ci        };
25362306a36Sopenharmony_ci    };
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ci  - |
25662306a36Sopenharmony_ci    #include <dt-bindings/input/input.h>
25762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
25862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
25962306a36Sopenharmony_ci    #include <dt-bindings/iio/qcom,spmi-vadc.h>
26062306a36Sopenharmony_ci    #include <dt-bindings/spmi/spmi.h>
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci    pmic@0 {
26362306a36Sopenharmony_ci        compatible = "qcom,pm6150", "qcom,spmi-pmic";
26462306a36Sopenharmony_ci        reg = <0x0 SPMI_USID>;
26562306a36Sopenharmony_ci        #address-cells = <1>;
26662306a36Sopenharmony_ci        #size-cells = <0>;
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ci        pon@800 {
26962306a36Sopenharmony_ci            compatible = "qcom,pm8998-pon";
27062306a36Sopenharmony_ci            reg = <0x800>;
27162306a36Sopenharmony_ci            mode-bootloader = <0x2>;
27262306a36Sopenharmony_ci            mode-recovery = <0x1>;
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci            pwrkey {
27562306a36Sopenharmony_ci                compatible = "qcom,pm8941-pwrkey";
27662306a36Sopenharmony_ci                interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
27762306a36Sopenharmony_ci                debounce = <15625>;
27862306a36Sopenharmony_ci                bias-pull-up;
27962306a36Sopenharmony_ci                linux,code = <KEY_POWER>;
28062306a36Sopenharmony_ci            };
28162306a36Sopenharmony_ci        };
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci        temp-alarm@2400 {
28462306a36Sopenharmony_ci            compatible = "qcom,spmi-temp-alarm";
28562306a36Sopenharmony_ci            reg = <0x2400>;
28662306a36Sopenharmony_ci            interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
28762306a36Sopenharmony_ci            io-channels = <&pm6150_adc ADC5_DIE_TEMP>;
28862306a36Sopenharmony_ci            io-channel-names = "thermal";
28962306a36Sopenharmony_ci            #thermal-sensor-cells = <0>;
29062306a36Sopenharmony_ci        };
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci        pm6150_adc: adc@3100 {
29362306a36Sopenharmony_ci            compatible = "qcom,spmi-adc5";
29462306a36Sopenharmony_ci            reg = <0x3100>;
29562306a36Sopenharmony_ci            interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
29662306a36Sopenharmony_ci            #address-cells = <1>;
29762306a36Sopenharmony_ci            #size-cells = <0>;
29862306a36Sopenharmony_ci            #io-channel-cells = <1>;
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci            channel@6 {
30162306a36Sopenharmony_ci                reg = <ADC5_DIE_TEMP>;
30262306a36Sopenharmony_ci                label = "die_temp";
30362306a36Sopenharmony_ci            };
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci            channel@4f {
30662306a36Sopenharmony_ci                reg = <ADC5_AMUX_THM3_100K_PU>;
30762306a36Sopenharmony_ci                qcom,ratiometric;
30862306a36Sopenharmony_ci                qcom,hw-settle-time = <200>;
30962306a36Sopenharmony_ci            };
31062306a36Sopenharmony_ci        };
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci        adc-tm@3500 {
31362306a36Sopenharmony_ci            compatible = "qcom,spmi-adc-tm5";
31462306a36Sopenharmony_ci            reg = <0x3500>;
31562306a36Sopenharmony_ci            interrupts = <0x0 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
31662306a36Sopenharmony_ci            #thermal-sensor-cells = <1>;
31762306a36Sopenharmony_ci            #address-cells = <1>;
31862306a36Sopenharmony_ci            #size-cells = <0>;
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci            charger-thermistor@0 {
32162306a36Sopenharmony_ci                reg = <0>;
32262306a36Sopenharmony_ci                io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
32362306a36Sopenharmony_ci                qcom,ratiometric;
32462306a36Sopenharmony_ci                qcom,hw-settle-time-us = <200>;
32562306a36Sopenharmony_ci            };
32662306a36Sopenharmony_ci        };
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci        pm6150_gpio: gpio@c000 {
32962306a36Sopenharmony_ci            compatible = "qcom,pm6150-gpio", "qcom,spmi-gpio";
33062306a36Sopenharmony_ci            reg = <0xc000>;
33162306a36Sopenharmony_ci            gpio-controller;
33262306a36Sopenharmony_ci            gpio-ranges = <&pm6150_gpio 0 0 10>;
33362306a36Sopenharmony_ci            #gpio-cells = <2>;
33462306a36Sopenharmony_ci            interrupt-controller;
33562306a36Sopenharmony_ci            #interrupt-cells = <2>;
33662306a36Sopenharmony_ci        };
33762306a36Sopenharmony_ci    };
338