317 lines
8.5 KiB
YAML
317 lines
8.5 KiB
YAML
|
# SPDX-License-Identifier: GPL-2.0-only
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/mfd/qcom,spmi-pmic.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: Qualcomm SPMI PMICs multi-function device
|
||
|
|
||
|
description: |
|
||
|
Some Qualcomm PMICs used with the Snapdragon series SoCs are interfaced
|
||
|
to the chip via the SPMI (System Power Management Interface) bus.
|
||
|
Support for multiple independent functions are implemented by splitting the
|
||
|
16-bit SPMI peripheral address space into 256 smaller fixed-size regions, 256 bytes
|
||
|
each. A function can consume one or more of these fixed-size register regions.
|
||
|
|
||
|
The Qualcomm SPMI series includes the PM8941, PM8841, PMA8084, PM8998 and other
|
||
|
PMICs. These PMICs use a "QPNP" scheme through SPMI interface.
|
||
|
QPNP is effectively a partitioning scheme for dividing the SPMI extended
|
||
|
register space up into logical pieces, and set of fixed register
|
||
|
locations/definitions within these regions, with some of these regions
|
||
|
specifically used for interrupt handling.
|
||
|
|
||
|
maintainers:
|
||
|
- Stephen Boyd <sboyd@kernel.org>
|
||
|
|
||
|
properties:
|
||
|
$nodename:
|
||
|
oneOf:
|
||
|
- pattern: '^pmic@.*$'
|
||
|
- pattern: '^pm(a|s)?[0-9]*@.*$'
|
||
|
deprecated: true
|
||
|
|
||
|
compatible:
|
||
|
items:
|
||
|
- enum:
|
||
|
- qcom,pm6125
|
||
|
- qcom,pm6150
|
||
|
- qcom,pm6150l
|
||
|
- qcom,pm6350
|
||
|
- qcom,pm660
|
||
|
- qcom,pm660l
|
||
|
- qcom,pm7250b
|
||
|
- qcom,pm7325
|
||
|
- qcom,pm8004
|
||
|
- qcom,pm8005
|
||
|
- qcom,pm8009
|
||
|
- qcom,pm8010
|
||
|
- qcom,pm8019
|
||
|
- qcom,pm8028
|
||
|
- qcom,pm8110
|
||
|
- qcom,pm8150
|
||
|
- qcom,pm8150b
|
||
|
- qcom,pm8150c
|
||
|
- qcom,pm8150l
|
||
|
- qcom,pm8226
|
||
|
- qcom,pm8350
|
||
|
- qcom,pm8350b
|
||
|
- qcom,pm8350c
|
||
|
- qcom,pm8550
|
||
|
- qcom,pm8550b
|
||
|
- qcom,pm8550ve
|
||
|
- qcom,pm8550vs
|
||
|
- qcom,pm8841
|
||
|
- qcom,pm8909
|
||
|
- qcom,pm8916
|
||
|
- qcom,pm8941
|
||
|
- qcom,pm8950
|
||
|
- qcom,pm8953
|
||
|
- qcom,pm8994
|
||
|
- qcom,pm8998
|
||
|
- qcom,pma8084
|
||
|
- qcom,pmd9635
|
||
|
- qcom,pmi8950
|
||
|
- qcom,pmi8962
|
||
|
- qcom,pmi8994
|
||
|
- qcom,pmi8998
|
||
|
- qcom,pmk8002
|
||
|
- qcom,pmk8350
|
||
|
- qcom,pmk8550
|
||
|
- qcom,pmm8155au
|
||
|
- qcom,pmp8074
|
||
|
- qcom,pmr735a
|
||
|
- qcom,pmr735b
|
||
|
- qcom,pmr735d
|
||
|
- qcom,pms405
|
||
|
- qcom,pmx55
|
||
|
- qcom,pmx65
|
||
|
- qcom,smb2351
|
||
|
- const: qcom,spmi-pmic
|
||
|
|
||
|
reg:
|
||
|
minItems: 1
|
||
|
maxItems: 2
|
||
|
|
||
|
'#address-cells':
|
||
|
const: 1
|
||
|
|
||
|
'#size-cells':
|
||
|
const: 0
|
||
|
|
||
|
labibb:
|
||
|
type: object
|
||
|
$ref: /schemas/regulator/qcom-labibb-regulator.yaml#
|
||
|
|
||
|
regulators:
|
||
|
type: object
|
||
|
$ref: /schemas/regulator/qcom,spmi-regulator.yaml#
|
||
|
|
||
|
pwm:
|
||
|
type: object
|
||
|
$ref: /schemas/leds/leds-qcom-lpg.yaml#
|
||
|
|
||
|
patternProperties:
|
||
|
"^adc@[0-9a-f]+$":
|
||
|
type: object
|
||
|
oneOf:
|
||
|
- $ref: /schemas/iio/adc/qcom,spmi-iadc.yaml#
|
||
|
- $ref: /schemas/iio/adc/qcom,spmi-vadc.yaml#
|
||
|
|
||
|
"^adc-tm@[0-9a-f]+$":
|
||
|
type: object
|
||
|
# ref depends on compatible, see allOf below
|
||
|
|
||
|
"^audio-codec@[0-9a-f]+$":
|
||
|
type: object
|
||
|
additionalProperties: true # FIXME qcom,pm8916-wcd-analog-codec binding not converted yet
|
||
|
|
||
|
"^charger@[0-9a-f]+$":
|
||
|
type: object
|
||
|
oneOf:
|
||
|
- $ref: /schemas/power/supply/qcom,pm8941-charger.yaml#
|
||
|
- $ref: /schemas/power/supply/qcom,pm8941-coincell.yaml#
|
||
|
|
||
|
"gpio@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/pinctrl/qcom,pmic-gpio.yaml#
|
||
|
|
||
|
"pon@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/power/reset/qcom,pon.yaml#
|
||
|
|
||
|
"^rtc@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/rtc/qcom-pm8xxx-rtc.yaml#
|
||
|
|
||
|
"^temp-alarm@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/thermal/qcom,spmi-temp-alarm.yaml#
|
||
|
|
||
|
"^usb-detect@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/extcon/qcom,pm8941-misc.yaml#
|
||
|
|
||
|
"^usb-vbus-regulator@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/regulator/qcom,usb-vbus-regulator.yaml#
|
||
|
|
||
|
"^vibrator@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/input/qcom,pm8xxx-vib.yaml#
|
||
|
|
||
|
"^mpps@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/pinctrl/qcom,pmic-mpp.yaml#
|
||
|
|
||
|
"(.*)?(wled|leds)@[0-9a-f]+$":
|
||
|
type: object
|
||
|
$ref: /schemas/leds/backlight/qcom-wled.yaml#
|
||
|
unevaluatedProperties: false
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- reg
|
||
|
|
||
|
allOf:
|
||
|
- if:
|
||
|
properties:
|
||
|
compatible:
|
||
|
contains:
|
||
|
enum:
|
||
|
- qcom,pm8998
|
||
|
then:
|
||
|
patternProperties:
|
||
|
"^adc-tm@[0-9a-f]+$":
|
||
|
$ref: /schemas/thermal/qcom-spmi-adc-tm-hc.yaml#
|
||
|
else:
|
||
|
patternProperties:
|
||
|
"^adc-tm@[0-9a-f]+$":
|
||
|
$ref: /schemas/thermal/qcom-spmi-adc-tm5.yaml#
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
examples:
|
||
|
- |
|
||
|
#include <dt-bindings/spmi/spmi.h>
|
||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||
|
|
||
|
spmi@c440000 {
|
||
|
compatible = "qcom,spmi-pmic-arb";
|
||
|
reg = <0x0c440000 0x1100>,
|
||
|
<0x0c600000 0x2000000>,
|
||
|
<0x0e600000 0x100000>,
|
||
|
<0x0e700000 0xa0000>,
|
||
|
<0x0c40a000 0x26000>;
|
||
|
reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
|
||
|
interrupt-names = "periph_irq";
|
||
|
interrupts = <GIC_SPI 481 IRQ_TYPE_LEVEL_HIGH>;
|
||
|
qcom,ee = <0>;
|
||
|
qcom,channel = <0>;
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <0>;
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <4>;
|
||
|
|
||
|
pmi8998_lsid0: pmic@2 {
|
||
|
compatible = "qcom,pmi8998", "qcom,spmi-pmic";
|
||
|
reg = <0x2 SPMI_USID>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
|
||
|
pmi8998_gpio: gpio@c000 {
|
||
|
compatible = "qcom,pmi8998-gpio", "qcom,spmi-gpio";
|
||
|
reg = <0xc000>;
|
||
|
gpio-controller;
|
||
|
gpio-ranges = <&pmi8998_gpio 0 0 14>;
|
||
|
#gpio-cells = <2>;
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <2>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
- |
|
||
|
#include <dt-bindings/input/input.h>
|
||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||
|
#include <dt-bindings/iio/qcom,spmi-vadc.h>
|
||
|
#include <dt-bindings/spmi/spmi.h>
|
||
|
|
||
|
pmic@0 {
|
||
|
compatible = "qcom,pm6150", "qcom,spmi-pmic";
|
||
|
reg = <0x0 SPMI_USID>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
|
||
|
pon@800 {
|
||
|
compatible = "qcom,pm8998-pon";
|
||
|
reg = <0x800>;
|
||
|
mode-bootloader = <0x2>;
|
||
|
mode-recovery = <0x1>;
|
||
|
|
||
|
pwrkey {
|
||
|
compatible = "qcom,pm8941-pwrkey";
|
||
|
interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
|
||
|
debounce = <15625>;
|
||
|
bias-pull-up;
|
||
|
linux,code = <KEY_POWER>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
temp-alarm@2400 {
|
||
|
compatible = "qcom,spmi-temp-alarm";
|
||
|
reg = <0x2400>;
|
||
|
interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
|
||
|
io-channels = <&pm6150_adc ADC5_DIE_TEMP>;
|
||
|
io-channel-names = "thermal";
|
||
|
#thermal-sensor-cells = <0>;
|
||
|
};
|
||
|
|
||
|
pm6150_adc: adc@3100 {
|
||
|
compatible = "qcom,spmi-adc5";
|
||
|
reg = <0x3100>;
|
||
|
interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
#io-channel-cells = <1>;
|
||
|
|
||
|
adc-chan@6 {
|
||
|
reg = <ADC5_DIE_TEMP>;
|
||
|
label = "die_temp";
|
||
|
};
|
||
|
|
||
|
adc-chan@4f {
|
||
|
reg = <ADC5_AMUX_THM3_100K_PU>;
|
||
|
qcom,ratiometric;
|
||
|
qcom,hw-settle-time = <200>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
adc-tm@3500 {
|
||
|
compatible = "qcom,spmi-adc-tm5";
|
||
|
reg = <0x3500>;
|
||
|
interrupts = <0x0 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
|
||
|
#thermal-sensor-cells = <1>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
|
||
|
charger-thermistor@0 {
|
||
|
reg = <0>;
|
||
|
io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
|
||
|
qcom,ratiometric;
|
||
|
qcom,hw-settle-time-us = <200>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
pm6150_gpio: gpio@c000 {
|
||
|
compatible = "qcom,pm6150-gpio", "qcom,spmi-gpio";
|
||
|
reg = <0xc000>;
|
||
|
gpio-controller;
|
||
|
gpio-ranges = <&pm6150_gpio 0 0 10>;
|
||
|
#gpio-cells = <2>;
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <2>;
|
||
|
};
|
||
|
};
|