162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/iio/adc/qcom,spmi-vadc.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Qualcomm's SPMI PMIC ADC
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Andy Gross <agross@kernel.org>
1162306a36Sopenharmony_ci  - Bjorn Andersson <bjorn.andersson@linaro.org>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  SPMI PMIC voltage ADC (VADC) provides interface to clients to read
1562306a36Sopenharmony_ci  voltage. The VADC is a 15-bit sigma-delta ADC.
1662306a36Sopenharmony_ci  SPMI PMIC5/PMIC7 voltage ADC (ADC) provides interface to clients to read
1762306a36Sopenharmony_ci  voltage. The VADC is a 16-bit sigma-delta ADC.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciproperties:
2062306a36Sopenharmony_ci  compatible:
2162306a36Sopenharmony_ci    oneOf:
2262306a36Sopenharmony_ci      - items:
2362306a36Sopenharmony_ci          - const: qcom,pms405-adc
2462306a36Sopenharmony_ci          - const: qcom,spmi-adc-rev2
2562306a36Sopenharmony_ci      - enum:
2662306a36Sopenharmony_ci          - qcom,spmi-vadc
2762306a36Sopenharmony_ci          - qcom,spmi-adc5
2862306a36Sopenharmony_ci          - qcom,spmi-adc-rev2
2962306a36Sopenharmony_ci          - qcom,spmi-adc7
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  reg:
3262306a36Sopenharmony_ci    description: VADC base address in the SPMI PMIC register map
3362306a36Sopenharmony_ci    maxItems: 1
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  '#address-cells':
3662306a36Sopenharmony_ci    const: 1
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci  '#size-cells':
3962306a36Sopenharmony_ci    const: 0
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  '#io-channel-cells':
4262306a36Sopenharmony_ci    const: 1
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  interrupts:
4562306a36Sopenharmony_ci    maxItems: 1
4662306a36Sopenharmony_ci    description:
4762306a36Sopenharmony_ci      End of conversion interrupt.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cirequired:
5062306a36Sopenharmony_ci  - compatible
5162306a36Sopenharmony_ci  - reg
5262306a36Sopenharmony_ci  - '#address-cells'
5362306a36Sopenharmony_ci  - '#size-cells'
5462306a36Sopenharmony_ci  - '#io-channel-cells'
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cipatternProperties:
5762306a36Sopenharmony_ci  "^channel@[0-9a-f]+$":
5862306a36Sopenharmony_ci    type: object
5962306a36Sopenharmony_ci    additionalProperties: false
6062306a36Sopenharmony_ci    description: |
6162306a36Sopenharmony_ci      Represents the external channels which are connected to the ADC.
6262306a36Sopenharmony_ci      For compatible property "qcom,spmi-vadc" following channels, also known as
6362306a36Sopenharmony_ci      reference point channels, are used for result calibration and their channel
6462306a36Sopenharmony_ci      configuration nodes should be defined:
6562306a36Sopenharmony_ci      VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV,
6662306a36Sopenharmony_ci      VADC_GND_REF and VADC_VDD_VADC.
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci    properties:
6962306a36Sopenharmony_ci      reg:
7062306a36Sopenharmony_ci        maxItems: 1
7162306a36Sopenharmony_ci        description: |
7262306a36Sopenharmony_ci          ADC channel number.
7362306a36Sopenharmony_ci          See include/dt-bindings/iio/qcom,spmi-vadc.h
7462306a36Sopenharmony_ci          For PMIC7 ADC, the channel numbers are specified separately per PMIC
7562306a36Sopenharmony_ci          in the PMIC-specific files in include/dt-bindings/iio/.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci      label:
7862306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/string
7962306a36Sopenharmony_ci        description: |
8062306a36Sopenharmony_ci            ADC input of the platform as seen in the schematics.
8162306a36Sopenharmony_ci            For thermistor inputs connected to generic AMUX or GPIO inputs
8262306a36Sopenharmony_ci            these can vary across platform for the same pins. Hence select
8362306a36Sopenharmony_ci            the platform schematics name for this channel.
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci      qcom,decimation:
8662306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
8762306a36Sopenharmony_ci        description: |
8862306a36Sopenharmony_ci            This parameter is used to decrease ADC sampling rate.
8962306a36Sopenharmony_ci            Quicker measurements can be made by reducing decimation ratio.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci      qcom,pre-scaling:
9262306a36Sopenharmony_ci        description: |
9362306a36Sopenharmony_ci            Used for scaling the channel input signal before the signal is
9462306a36Sopenharmony_ci            fed to VADC. The configuration for this node is to know the
9562306a36Sopenharmony_ci            pre-determined ratio and use it for post scaling. It is a pair of
9662306a36Sopenharmony_ci            integers, denoting the numerator and denominator of the fraction by which
9762306a36Sopenharmony_ci            input signal is multiplied. For example, <1 3> indicates the signal is scaled
9862306a36Sopenharmony_ci            down to 1/3 of its value before ADC measurement.
9962306a36Sopenharmony_ci            If property is not found default value depending on chip will be used.
10062306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32-array
10162306a36Sopenharmony_ci        oneOf:
10262306a36Sopenharmony_ci          - items:
10362306a36Sopenharmony_ci              - const: 1
10462306a36Sopenharmony_ci              - enum: [ 1, 3, 4, 6, 20, 8, 10, 16 ]
10562306a36Sopenharmony_ci          - items:
10662306a36Sopenharmony_ci              - const: 10
10762306a36Sopenharmony_ci              - const: 81
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci      qcom,ratiometric:
11062306a36Sopenharmony_ci        description: |
11162306a36Sopenharmony_ci            Channel calibration type.
11262306a36Sopenharmony_ci            - For compatible property "qcom,spmi-vadc", if this property is
11362306a36Sopenharmony_ci              specified VADC will use the VDD reference (1.8V) and GND for
11462306a36Sopenharmony_ci              channel calibration. If property is not found, channel will be
11562306a36Sopenharmony_ci              calibrated with 0.625V and 1.25V reference channels, also
11662306a36Sopenharmony_ci              known as absolute calibration.
11762306a36Sopenharmony_ci            - For compatible property "qcom,spmi-adc5", "qcom,spmi-adc7" and
11862306a36Sopenharmony_ci              "qcom,spmi-adc-rev2", if this property is specified VADC will use
11962306a36Sopenharmony_ci              the VDD reference (1.875V) and GND for channel calibration. If
12062306a36Sopenharmony_ci              property is not found, channel will be calibrated with 0V and 1.25V
12162306a36Sopenharmony_ci              reference channels, also known as absolute calibration.
12262306a36Sopenharmony_ci        type: boolean
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci      qcom,hw-settle-time:
12562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
12662306a36Sopenharmony_ci        description: |
12762306a36Sopenharmony_ci            Time between AMUX getting configured and the ADC starting
12862306a36Sopenharmony_ci            conversion. The 'hw_settle_time' is an index used from valid values
12962306a36Sopenharmony_ci            and programmed in hardware to achieve the hardware settling delay.
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci      qcom,avg-samples:
13262306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
13362306a36Sopenharmony_ci        description: |
13462306a36Sopenharmony_ci            Number of samples to be used for measurement.
13562306a36Sopenharmony_ci            Averaging provides the option to obtain a single measurement
13662306a36Sopenharmony_ci            from the ADC that is an average of multiple samples. The value
13762306a36Sopenharmony_ci            selected is 2^(value).
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci    required:
14062306a36Sopenharmony_ci      - reg
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ciallOf:
14362306a36Sopenharmony_ci  - if:
14462306a36Sopenharmony_ci      properties:
14562306a36Sopenharmony_ci        compatible:
14662306a36Sopenharmony_ci          contains:
14762306a36Sopenharmony_ci            const: qcom,spmi-vadc
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci    then:
15062306a36Sopenharmony_ci      patternProperties:
15162306a36Sopenharmony_ci        "^channel@[0-9a-f]+$":
15262306a36Sopenharmony_ci          properties:
15362306a36Sopenharmony_ci            qcom,decimation:
15462306a36Sopenharmony_ci              enum: [ 512, 1024, 2048, 4096 ]
15562306a36Sopenharmony_ci              default: 512
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci            qcom,hw-settle-time:
15862306a36Sopenharmony_ci              enum: [ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
15962306a36Sopenharmony_ci                      4, 6, 8, 10 ]
16062306a36Sopenharmony_ci              default: 0
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci            qcom,avg-samples:
16362306a36Sopenharmony_ci              enum: [ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
16462306a36Sopenharmony_ci              default: 1
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci  - if:
16762306a36Sopenharmony_ci      properties:
16862306a36Sopenharmony_ci        compatible:
16962306a36Sopenharmony_ci          contains:
17062306a36Sopenharmony_ci            const: qcom,spmi-adc-rev2
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci    then:
17362306a36Sopenharmony_ci      patternProperties:
17462306a36Sopenharmony_ci        "^channel@[0-9a-f]+$":
17562306a36Sopenharmony_ci          properties:
17662306a36Sopenharmony_ci            qcom,decimation:
17762306a36Sopenharmony_ci              enum: [ 256, 512, 1024 ]
17862306a36Sopenharmony_ci              default: 1024
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci            qcom,hw-settle-time:
18162306a36Sopenharmony_ci              enum: [ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
18262306a36Sopenharmony_ci                      4, 6, 8, 10 ]
18362306a36Sopenharmony_ci              default: 0
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci            qcom,avg-samples:
18662306a36Sopenharmony_ci              enum: [ 1, 2, 4, 8, 16 ]
18762306a36Sopenharmony_ci              default: 1
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci  - if:
19062306a36Sopenharmony_ci      properties:
19162306a36Sopenharmony_ci        compatible:
19262306a36Sopenharmony_ci          contains:
19362306a36Sopenharmony_ci            const: qcom,spmi-adc5
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci    then:
19662306a36Sopenharmony_ci      patternProperties:
19762306a36Sopenharmony_ci        "^channel@[0-9a-f]+$":
19862306a36Sopenharmony_ci          properties:
19962306a36Sopenharmony_ci            qcom,decimation:
20062306a36Sopenharmony_ci              enum: [ 250, 420, 840 ]
20162306a36Sopenharmony_ci              default: 840
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci            qcom,hw-settle-time:
20462306a36Sopenharmony_ci              enum: [ 15, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
20562306a36Sopenharmony_ci                      4, 6, 8, 10, 16, 32, 64, 128 ]
20662306a36Sopenharmony_ci              default: 15
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci            qcom,avg-samples:
20962306a36Sopenharmony_ci              enum: [ 1, 2, 4, 8, 16 ]
21062306a36Sopenharmony_ci              default: 1
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci  - if:
21362306a36Sopenharmony_ci      properties:
21462306a36Sopenharmony_ci        compatible:
21562306a36Sopenharmony_ci          contains:
21662306a36Sopenharmony_ci            const: qcom,spmi-adc7
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci    then:
21962306a36Sopenharmony_ci      patternProperties:
22062306a36Sopenharmony_ci        "^channel@[0-9a-f]+$":
22162306a36Sopenharmony_ci          properties:
22262306a36Sopenharmony_ci            qcom,decimation:
22362306a36Sopenharmony_ci              enum: [ 85, 340, 1360 ]
22462306a36Sopenharmony_ci              default: 1360
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci            qcom,hw-settle-time:
22762306a36Sopenharmony_ci              enum: [ 15, 100, 200, 300, 400, 500, 600, 700, 1000, 2000, 4000,
22862306a36Sopenharmony_ci                      8000, 16000, 32000, 64000, 128000 ]
22962306a36Sopenharmony_ci              default: 15
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci            qcom,avg-samples:
23262306a36Sopenharmony_ci              enum: [ 1, 2, 4, 8, 16 ]
23362306a36Sopenharmony_ci              default: 1
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ciadditionalProperties: false
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ciexamples:
23862306a36Sopenharmony_ci  - |
23962306a36Sopenharmony_ci    spmi {
24062306a36Sopenharmony_ci        #address-cells = <1>;
24162306a36Sopenharmony_ci        #size-cells = <0>;
24262306a36Sopenharmony_ci        /* VADC node */
24362306a36Sopenharmony_ci        pmic_vadc: adc@3100 {
24462306a36Sopenharmony_ci            compatible = "qcom,spmi-vadc";
24562306a36Sopenharmony_ci            reg = <0x3100>;
24662306a36Sopenharmony_ci            interrupts = <0x0 0x31 0x0 0x1>;
24762306a36Sopenharmony_ci            #address-cells = <1>;
24862306a36Sopenharmony_ci            #size-cells = <0>;
24962306a36Sopenharmony_ci            #io-channel-cells = <1>;
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci            /* Channel node */
25262306a36Sopenharmony_ci            channel@39 {
25362306a36Sopenharmony_ci                reg = <0x39>;
25462306a36Sopenharmony_ci                qcom,decimation = <512>;
25562306a36Sopenharmony_ci                qcom,ratiometric;
25662306a36Sopenharmony_ci                qcom,hw-settle-time = <200>;
25762306a36Sopenharmony_ci                qcom,avg-samples = <1>;
25862306a36Sopenharmony_ci                qcom,pre-scaling = <1 3>;
25962306a36Sopenharmony_ci            };
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci            channel@9 {
26262306a36Sopenharmony_ci                reg = <0x9>;
26362306a36Sopenharmony_ci            };
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci            channel@a {
26662306a36Sopenharmony_ci                reg = <0xa>;
26762306a36Sopenharmony_ci            };
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci            channel@e {
27062306a36Sopenharmony_ci                reg = <0xe>;
27162306a36Sopenharmony_ci            };
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci            channel@f {
27462306a36Sopenharmony_ci                reg = <0xf>;
27562306a36Sopenharmony_ci            };
27662306a36Sopenharmony_ci        };
27762306a36Sopenharmony_ci    };
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci  - |
28062306a36Sopenharmony_ci    #include <dt-bindings/iio/qcom,spmi-adc7-pmk8350.h>
28162306a36Sopenharmony_ci    #include <dt-bindings/iio/qcom,spmi-adc7-pm8350.h>
28262306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci    spmi {
28562306a36Sopenharmony_ci        #address-cells = <1>;
28662306a36Sopenharmony_ci        #size-cells = <0>;
28762306a36Sopenharmony_ci        adc@3100 {
28862306a36Sopenharmony_ci            reg = <0x3100>;
28962306a36Sopenharmony_ci            compatible = "qcom,spmi-adc7";
29062306a36Sopenharmony_ci            #address-cells = <1>;
29162306a36Sopenharmony_ci            #size-cells = <0>;
29262306a36Sopenharmony_ci            #io-channel-cells = <1>;
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci            /* Other properties are omitted */
29562306a36Sopenharmony_ci            channel@44 {
29662306a36Sopenharmony_ci                reg = <PMK8350_ADC7_AMUX_THM1_100K_PU>;
29762306a36Sopenharmony_ci                qcom,ratiometric;
29862306a36Sopenharmony_ci                qcom,hw-settle-time = <200>;
29962306a36Sopenharmony_ci                label = "xo_therm";
30062306a36Sopenharmony_ci            };
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci            channel@47 {
30362306a36Sopenharmony_ci                reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
30462306a36Sopenharmony_ci                qcom,ratiometric;
30562306a36Sopenharmony_ci                qcom,hw-settle-time = <200>;
30662306a36Sopenharmony_ci                label = "conn_therm";
30762306a36Sopenharmony_ci            };
30862306a36Sopenharmony_ci        };
30962306a36Sopenharmony_ci    };
310