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

title: Maxim MAX8998, National/TI LP3974 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

description:
  The Maxim MAX8998 is a Power Management IC which includes voltage/current
  regulators, real time clock, battery charging controller and several other
  sub-blocks. It is interfaced using an I2C interface. Each sub-block is
  addressed by the host system using different i2c slave address.

properties:
  compatible:
    enum:
      - maxim,max8998
      - national,lp3974
      - ti,lp3974

  reg:
    maxItems: 1

  interrupts:
    minItems: 1
    items:
      - description: Main interrupt
      - description: Power-on/-off interrupt

  max8998,pmic-buck1-dvs-gpios:
    maxItems: 2
    description:
      Two host gpios used for buck1 DVS.

  max8998,pmic-buck2-dvs-gpio:
    maxItems: 1
    description:
      Host gpio used for buck2 DVS.

  max8998,pmic-buck1-default-dvs-idx:
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1, 2, 3]
    default: 0
    description:
      Default voltage setting selected from the possible 4 options selectable
      by the DVS gpios.

  max8998,pmic-buck2-default-dvs-idx:
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1]
    default: 0
    description:
      Default voltage setting selected from the possible 2 options selectable
      by the DVS GPIOs.

  max8998,pmic-buck-voltage-lock:
    type: boolean
    description:
      If present, disallows changing of preprogrammed buck DVS voltages.

  max8998,pmic-buck1-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    maxItems: 4
    description:
      Four voltage values in microvolts for buck1 regulator that can be
      selected using DVS GPIO.

  max8998,pmic-buck2-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    maxItems: 2
    description:
      Two voltage values in microvolts for buck2 regulator that can be
      selected using DVS GPIO.

  regulators:
    type: object
    additionalProperties: false

    properties:
      CHARGER:
        type: object
        $ref: /schemas/regulator/regulator.yaml#
        unevaluatedProperties: false
        description:
          CHARGER is main battery charger current control, wrongly represented
          as regulator.

        properties:
          regulator-min-microamp:
            minimum: 90000
            maximum: 800000

          regulator-max-microamp:
            minimum: 90000
            maximum: 800000

          regulator-min-microvolt: false
          regulator-max-microvolt: false

        required:
          - regulator-name

    patternProperties:
      "^(LDO([2-9]|1[0-7])|BUCK[1-4])$":
        type: object
        $ref: /schemas/regulator/regulator.yaml#
        unevaluatedProperties: false

        required:
          - regulator-name

      "^(EN32KHz-AP|EN32KHz-CP|ENVICHG|ESAFEOUT[12])$":
        type: object
        $ref: /schemas/regulator/regulator.yaml#
        unevaluatedProperties: false
        description: |
          EN32KHz-AP and EN32KHz-CP are 32768 Hz clocks, wrongly represented as
          regulators.
          ENVICHG is a Battery Charging Current Monitor Output.

        properties:
          regulator-min-microvolt: false
          regulator-max-microvolt: false

        required:
          - regulator-name

dependencies:
  max8998,pmic-buck1-dvs-gpios: [ "max8998,pmic-buck1-dvs-voltage" ]
  max8998,pmic-buck2-dvs-gpio: [ "max8998,pmic-buck2-dvs-voltage" ]

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

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

        pmic@66 {
            compatible = "national,lp3974";
            reg = <0x66>;
            interrupts-extended = <&gpx0 7 IRQ_TYPE_LEVEL_LOW>,
                                  <&gpx2 7 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&lp3974_irq>;

            max8998,pmic-buck1-default-dvs-idx = <0>;
            max8998,pmic-buck1-dvs-gpios = <&gpx0 5 GPIO_ACTIVE_HIGH>,
                                           <&gpx0 6 GPIO_ACTIVE_HIGH>;
            max8998,pmic-buck1-dvs-voltage = <1100000>, <1000000>,
                                             <1100000>, <1000000>;
            max8998,pmic-buck2-default-dvs-idx = <0>;
            max8998,pmic-buck2-dvs-gpio = <&gpe2 0 GPIO_ACTIVE_HIGH>;
            max8998,pmic-buck2-dvs-voltage = <1200000>, <1100000>;

            regulators {
                LDO2 {
                    regulator-name = "VALIVE_1.2V";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                    regulator-always-on;
                };

                LDO3 {
                    regulator-name = "VUSB+MIPI_1.1V";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                };

                LDO4 {
                    regulator-name = "VADC_3.3V";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                };

                LDO5 {
                    regulator-name = "VTF_2.8V";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                };

                LDO6 {
                    regulator-name = "LDO6";
                    regulator-min-microvolt = <2000000>;
                    regulator-max-microvolt = <2000000>;
                };

                LDO7 {
                    regulator-name = "VLCD+VMIPI_1.8V";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                };

                LDO8 {
                    regulator-name = "VUSB+VDAC_3.3V";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };

                LDO9 {
                    regulator-name = "VCC_2.8V";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                    regulator-always-on;
                };

                LDO10 {
                    regulator-name = "VPLL_1.1V";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                LDO11 {
                    regulator-name = "CAM_AF_3.3V";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                };

                LDO12 {
                    regulator-name = "PS_2.8V";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                };

                LDO13 {
                    regulator-name = "VHIC_1.2V";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                };

                LDO14 {
                    regulator-name = "CAM_I_HOST_1.8V";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                };

                LDO15 {
                    regulator-name = "CAM_S_DIG+FM33_CORE_1.2V";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                };

                LDO16 {
                    regulator-name = "CAM_S_ANA_2.8V";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                };

                LDO17 {
                    regulator-name = "VCC_3.0V_LCD";
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3000000>;
                };

                BUCK1 {
                    regulator-name = "VINT_1.1V";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                BUCK2 {
                    regulator-name = "VG3D_1.1V";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-boot-on;
                };

                BUCK3 {
                    regulator-name = "VCC_1.8V";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-always-on;
                };

                BUCK4 {
                    regulator-name = "VMEM_1.2V";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                    regulator-always-on;
                };

                EN32KHz-AP {
                    regulator-name = "32KHz AP";
                    regulator-always-on;
                };

                EN32KHz-CP {
                    regulator-name = "32KHz CP";
                };

                ENVICHG {
                    regulator-name = "VICHG";
                };

                ESAFEOUT1 {
                    regulator-name = "SAFEOUT1";
                };

                ESAFEOUT2 {
                    regulator-name = "SAFEOUT2";
                    regulator-boot-on;
                };
            };
        };
    };
