162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright 2020 Analog Devices Inc.
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/iio/dac/adi,ad3552r.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Analog Devices AD2552R DAC device driver
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Nuno Sá <nuno.sa@analog.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  Bindings for the Analog Devices AD3552R DAC device and similar.
1562306a36Sopenharmony_ci  Datasheet can be found here:
1662306a36Sopenharmony_ci    https://www.analog.com/media/en/technical-documentation/data-sheets/ad3542r.pdf
1762306a36Sopenharmony_ci    https://www.analog.com/media/en/technical-documentation/data-sheets/ad3552r.pdf
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciproperties:
2062306a36Sopenharmony_ci  compatible:
2162306a36Sopenharmony_ci    enum:
2262306a36Sopenharmony_ci      - adi,ad3542r
2362306a36Sopenharmony_ci      - adi,ad3552r
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci  reg:
2662306a36Sopenharmony_ci    maxItems: 1
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  spi-max-frequency:
2962306a36Sopenharmony_ci    maximum: 30000000
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  reset-gpios:
3262306a36Sopenharmony_ci    maxItems: 1
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  ldac-gpios:
3562306a36Sopenharmony_ci    description: |
3662306a36Sopenharmony_ci      LDAC pin to be used as a hardware trigger to update the DAC channels.
3762306a36Sopenharmony_ci    maxItems: 1
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  vref-supply:
4062306a36Sopenharmony_ci    description:
4162306a36Sopenharmony_ci      The regulator to use as an external reference. If it does not exists the
4262306a36Sopenharmony_ci      internal reference will be used. External reference must be 2.5V
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  adi,vref-out-en:
4562306a36Sopenharmony_ci    description: Vref I/O driven by internal vref to 2.5V. If not set, Vref pin
4662306a36Sopenharmony_ci      will be floating.
4762306a36Sopenharmony_ci    type: boolean
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci  adi,sdo-drive-strength:
5062306a36Sopenharmony_ci    description: |
5162306a36Sopenharmony_ci      Configure SDIO0 and SDIO1 strength levels:
5262306a36Sopenharmony_ci        - 0: low SDO drive strength.
5362306a36Sopenharmony_ci        - 1: medium low SDO drive strength.
5462306a36Sopenharmony_ci        - 2: medium high SDO drive strength.
5562306a36Sopenharmony_ci        - 3: high SDO drive strength
5662306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
5762306a36Sopenharmony_ci    enum: [0, 1, 2, 3]
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci  '#address-cells':
6062306a36Sopenharmony_ci    const: 1
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  '#size-cells':
6362306a36Sopenharmony_ci    const: 0
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cipatternProperties:
6662306a36Sopenharmony_ci  "^channel@([0-1])$":
6762306a36Sopenharmony_ci    type: object
6862306a36Sopenharmony_ci    description: Configurations of the DAC Channels
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci    additionalProperties: false
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci    properties:
7362306a36Sopenharmony_ci      reg:
7462306a36Sopenharmony_ci        description: Channel number
7562306a36Sopenharmony_ci        enum: [0, 1]
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci      adi,output-range-microvolt: true
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci      custom-output-range-config:
8062306a36Sopenharmony_ci        type: object
8162306a36Sopenharmony_ci        additionalProperties: false
8262306a36Sopenharmony_ci        description: Configuration of custom range when
8362306a36Sopenharmony_ci          adi,output-range-microvolt is not present.
8462306a36Sopenharmony_ci          The formulas for calculation the output voltages are
8562306a36Sopenharmony_ci            Vout_fs = 2.5 + [(GainN + Offset/1024) * 2.5 * Rfbx * 1.03]
8662306a36Sopenharmony_ci            Vout_zs = 2.5 - [(GainP + Offset/1024) * 2.5 * Rfbx * 1.03]
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci        properties:
8962306a36Sopenharmony_ci          adi,gain-offset:
9062306a36Sopenharmony_ci            description: Gain offset used in the above formula
9162306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/int32
9262306a36Sopenharmony_ci            maximum: 511
9362306a36Sopenharmony_ci            minimum: -511
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci          adi,gain-scaling-p-inv-log2:
9662306a36Sopenharmony_ci            description: GainP = 1 / ( 2 ^ adi,gain-scaling-p-inv-log2)
9762306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32
9862306a36Sopenharmony_ci            enum: [0, 1, 2, 3]
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci          adi,gain-scaling-n-inv-log2:
10162306a36Sopenharmony_ci            description: GainN = 1 / ( 2 ^ adi,gain-scaling-n-inv-log2)
10262306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32
10362306a36Sopenharmony_ci            enum: [0, 1, 2, 3]
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci          adi,rfb-ohms:
10662306a36Sopenharmony_ci            description: Feedback Resistor
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci        required:
10962306a36Sopenharmony_ci          - adi,gain-offset
11062306a36Sopenharmony_ci          - adi,gain-scaling-p-inv-log2
11162306a36Sopenharmony_ci          - adi,gain-scaling-n-inv-log2
11262306a36Sopenharmony_ci          - adi,rfb-ohms
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci    required:
11562306a36Sopenharmony_ci      - reg
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci    oneOf:
11862306a36Sopenharmony_ci      # If adi,output-range-microvolt is missing,
11962306a36Sopenharmony_ci      # custom-output-range-config must be used
12062306a36Sopenharmony_ci      - required:
12162306a36Sopenharmony_ci          - adi,output-range-microvolt
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci      - required:
12462306a36Sopenharmony_ci          - custom-output-range-config
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciallOf:
12762306a36Sopenharmony_ci  - if:
12862306a36Sopenharmony_ci      properties:
12962306a36Sopenharmony_ci        compatible:
13062306a36Sopenharmony_ci          contains:
13162306a36Sopenharmony_ci            const: adi,ad3542r
13262306a36Sopenharmony_ci    then:
13362306a36Sopenharmony_ci      patternProperties:
13462306a36Sopenharmony_ci        "^channel@([0-1])$":
13562306a36Sopenharmony_ci          type: object
13662306a36Sopenharmony_ci          properties:
13762306a36Sopenharmony_ci            adi,output-range-microvolt:
13862306a36Sopenharmony_ci              description: |
13962306a36Sopenharmony_ci                Voltage output range of the channel as <minimum, maximum>
14062306a36Sopenharmony_ci                Required connections:
14162306a36Sopenharmony_ci                  Rfb1x for: 0 to 2.5 V; 0 to 3V; 0 to 5 V;
14262306a36Sopenharmony_ci                  Rfb2x for: 0 to 10 V; 2.5 to 7.5V; -5 to 5 V;
14362306a36Sopenharmony_ci              oneOf:
14462306a36Sopenharmony_ci                - items:
14562306a36Sopenharmony_ci                    - const: 0
14662306a36Sopenharmony_ci                    - enum: [2500000, 3000000, 5000000, 10000000]
14762306a36Sopenharmony_ci                - items:
14862306a36Sopenharmony_ci                    - const: -2500000
14962306a36Sopenharmony_ci                    - const: 7500000
15062306a36Sopenharmony_ci                - items:
15162306a36Sopenharmony_ci                    - const: -5000000
15262306a36Sopenharmony_ci                    - const: 5000000
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci          required:
15562306a36Sopenharmony_ci            - adi,output-range-microvolt
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci  - if:
15862306a36Sopenharmony_ci      properties:
15962306a36Sopenharmony_ci        compatible:
16062306a36Sopenharmony_ci          contains:
16162306a36Sopenharmony_ci            const: adi,ad3552r
16262306a36Sopenharmony_ci    then:
16362306a36Sopenharmony_ci      patternProperties:
16462306a36Sopenharmony_ci        "^channel@([0-1])$":
16562306a36Sopenharmony_ci          type: object
16662306a36Sopenharmony_ci          properties:
16762306a36Sopenharmony_ci            adi,output-range-microvolt:
16862306a36Sopenharmony_ci              description: |
16962306a36Sopenharmony_ci                Voltage output range of the channel as <minimum, maximum>
17062306a36Sopenharmony_ci                Required connections:
17162306a36Sopenharmony_ci                  Rfb1x for: 0 to 2.5 V; 0 to 5 V;
17262306a36Sopenharmony_ci                  Rfb2x for: 0 to 10 V; -5 to 5 V;
17362306a36Sopenharmony_ci                  Rfb4x for: -10 to 10V
17462306a36Sopenharmony_ci              oneOf:
17562306a36Sopenharmony_ci                - items:
17662306a36Sopenharmony_ci                    - const: 0
17762306a36Sopenharmony_ci                    - enum: [2500000, 5000000, 10000000]
17862306a36Sopenharmony_ci                - items:
17962306a36Sopenharmony_ci                    - const: -5000000
18062306a36Sopenharmony_ci                    - const: 5000000
18162306a36Sopenharmony_ci                - items:
18262306a36Sopenharmony_ci                    - const: -10000000
18362306a36Sopenharmony_ci                    - const: 10000000
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_cirequired:
18662306a36Sopenharmony_ci  - compatible
18762306a36Sopenharmony_ci  - reg
18862306a36Sopenharmony_ci  - spi-max-frequency
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ciadditionalProperties: false
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ciexamples:
19362306a36Sopenharmony_ci  - |
19462306a36Sopenharmony_ci    spi {
19562306a36Sopenharmony_ci        #address-cells = <1>;
19662306a36Sopenharmony_ci        #size-cells = <0>;
19762306a36Sopenharmony_ci        ad3552r@0 {
19862306a36Sopenharmony_ci            compatible = "adi,ad3552r";
19962306a36Sopenharmony_ci            reg = <0>;
20062306a36Sopenharmony_ci            spi-max-frequency = <20000000>;
20162306a36Sopenharmony_ci            #address-cells = <1>;
20262306a36Sopenharmony_ci            #size-cells = <0>;
20362306a36Sopenharmony_ci            channel@0 {
20462306a36Sopenharmony_ci                reg = <0>;
20562306a36Sopenharmony_ci                adi,output-range-microvolt = <0 10000000>;
20662306a36Sopenharmony_ci            };
20762306a36Sopenharmony_ci            channel@1 {
20862306a36Sopenharmony_ci                reg = <1>;
20962306a36Sopenharmony_ci                custom-output-range-config {
21062306a36Sopenharmony_ci                    adi,gain-offset = <5>;
21162306a36Sopenharmony_ci                    adi,gain-scaling-p-inv-log2 = <1>;
21262306a36Sopenharmony_ci                    adi,gain-scaling-n-inv-log2 = <2>;
21362306a36Sopenharmony_ci                    adi,rfb-ohms = <1>;
21462306a36Sopenharmony_ci                };
21562306a36Sopenharmony_ci            };
21662306a36Sopenharmony_ci        };
21762306a36Sopenharmony_ci    };
21862306a36Sopenharmony_ci...
219