# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/maxim,max5970.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Regulator for MAX5970 Smart Switch from Maxim Integrated

maintainers:
  - Patrick Rudolph <patrick.rudolph@9elements.com>

description: |
  The smart switch provides no output regulation, but independent fault protection
  and voltage and current sensing.
  Programming is done through I2C bus.

  Datasheets:
    https://datasheets.maximintegrated.com/en/ds/MAX5970.pdf
    https://datasheets.maximintegrated.com/en/ds/MAX5978.pdf

properties:
  compatible:
    enum:
      - maxim,max5970
      - maxim,max5978

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  leds:
    type: object
    description:
      Properties for four LEDS.

    properties:
      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

    patternProperties:
      "^led@[0-3]$":
        $ref: /schemas/leds/common.yaml#
        unevaluatedProperties: false
        type: object

        properties:
          reg:
            maximum: 3

    additionalProperties: false

  vss1-supply:
    description: Supply of the first channel.

  vss2-supply:
    description: Supply of the second channel.

  regulators:
    type: object
    description:
      Properties for both hot swap control/switch.

    patternProperties:
      "^sw[0-1]$":
        $ref: /schemas/regulator/regulator.yaml#
        type: object
        properties:
          shunt-resistor-micro-ohms:
            description: |
              The value of current sense resistor in microohms.

        required:
          - shunt-resistor-micro-ohms

        unevaluatedProperties: false

    additionalProperties: false

required:
  - compatible
  - reg
  - regulators
  - vss1-supply

allOf:
  - if:
      properties:
        compatible:
          enum:
            - maxim,max5970
    then:
      required:
        - vss2-supply

additionalProperties: false

examples:
  - |
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        regulator@3a {
            compatible = "maxim,max5978";
            reg = <0x3a>;
            vss1-supply = <&p3v3>;

            regulators {
                sw0_ref_0: sw0 {
                    shunt-resistor-micro-ohms = <12000>;
                };
            };

            leds {
                #address-cells = <1>;
                #size-cells = <0>;
                led@0 {
                    reg = <0>;
                    label = "led0";
                    default-state = "on";
                };
                led@1 {
                    reg = <1>;
                    label = "led1";
                    default-state = "on";
                };
            };
        };
    };

  - |
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        regulator@3a {
            compatible = "maxim,max5970";
            reg = <0x3a>;
            vss1-supply = <&p3v3>;
            vss2-supply = <&p5v>;

            regulators {
                sw0_ref_1: sw0 {
                    shunt-resistor-micro-ohms = <12000>;
                };
                sw1_ref_1: sw1 {
                    shunt-resistor-micro-ohms = <10000>;
                };
            };
        };
    };
...
