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

title: Samsung S2MPG10 Power Management IC regulators

maintainers:
  - André Draszik <andre.draszik@linaro.org>

description: |
  This is part of the device tree bindings for the S2MG10 Power Management IC
  (PMIC).

  The S2MPG10 PMIC provides 10 buck and 31 LDO regulators.

  See also Documentation/devicetree/bindings/mfd/samsung,s2mps11.yaml for
  additional information and example.

properties:
  # 1 LDO with possible (but limited) external control
  ldo20m:
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single LDO regulator.

    allOf:
      - $ref: "#/$defs/s2mpg10-ext-control"

    properties:
      regulator-ramp-delay: false

      samsung,ext-control:
        minimum: 11

patternProperties:
  # 10 bucks
  "^buck([1-9]|10)m$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single buck regulator.

    allOf:
      - $ref: "#/$defs/s2mpg10-ext-control"

    properties:
      regulator-ramp-delay:
        enum: [6250, 12500, 25000]
        default: 6250

      samsung,ext-control:
        maximum: 10

  # 12 standard LDOs
  "^ldo(2[1-9]?|3[0-1])m$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for single LDO regulator.

    properties:
      regulator-ramp-delay: false

  # 12 LDOs with possible external control
  "^ldo([3-689]|1[046-9])m$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single LDO regulator.

    allOf:
      - $ref: "#/$defs/s2mpg10-ext-control"

    properties:
      regulator-ramp-delay: false

      samsung,ext-control:
        maximum: 10

  # 6 LDOs with ramp support, 5 out of those with possible external control
  "^ldo(1[1235]?|7)m$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single LDO regulator.

    allOf:
      - $ref: "#/$defs/s2mpg10-ext-control"

    properties:
      regulator-ramp-delay:
        enum: [6250, 12500]
        default: 6250

      samsung,ext-control:
        maximum: 10

$defs:
  s2mpg10-ext-control:
    properties:
      samsung,ext-control:
        description: |
          These rails can be controlled via one of several possible external
          (hardware) signals. If so, this property configures the signal the PMIC
          should monitor. For S2MPG10 rails where external control is possible other
          than ldo20m, the following values generally corresponding to the
          respective on-chip pin are valid:
            - 0 # S2MPG10_EXTCTRL_PWREN - PWREN pin
            - 1 # S2MPG10_EXTCTRL_PWREN_MIF - PWREN_MIF pin
            - 2 # S2MPG10_EXTCTRL_AP_ACTIVE_N - ~AP_ACTIVE_N pin
            - 3 # S2MPG10_EXTCTRL_CPUCL1_EN - CPUCL1_EN pin
            - 4 # S2MPG10_EXTCTRL_CPUCL1_EN2 - CPUCL1_EN & PWREN pins
            - 5 # S2MPG10_EXTCTRL_CPUCL2_EN - CPUCL2_EN pin
            - 6 # S2MPG10_EXTCTRL_CPUCL2_EN2 - CPUCL2_E2 & PWREN pins
            - 7 # S2MPG10_EXTCTRL_TPU_EN - TPU_EN pin
            - 8 # S2MPG10_EXTCTRL_TPU_EN2 - TPU_EN & ~AP_ACTIVE_N pins
            - 9 # S2MPG10_EXTCTRL_TCXO_ON - TCXO_ON pin
            - 10 # S2MPG10_EXTCTRL_TCXO_ON2 - TCXO_ON & ~AP_ACTIVE_N pins

          For S2MPG10 ldo20m, the following values are valid
            - 11 # S2MPG10_EXTCTRL_LDO20M_EN2 - VLDO20M_EN & LDO20M_SFR
            - 12 # S2MPG10_EXTCTRL_LDO20M_EN - VLDO20M_EN pin

        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 12

      enable-gpios:
        description:
          For rails where external control is done via a GPIO, this optional
          property describes the GPIO line used.

    dependentRequired:
      enable-gpios: [ "samsung,ext-control" ]

allOf:
  # Bucks 8, 9, and LDO 1 can not be controlled externally - above definition
  # allows it and we deny it here. This approach reduces repetition.
  - if:
      anyOf:
        - required: [buck8m]
        - required: [buck9m]
        - required: [ldo1m]
    then:
      patternProperties:
        "^(buck[8-9]|ldo1)m$":
          properties:
            samsung,ext-control: false

additionalProperties: false
