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

title: Samsung S2MPG11 Power Management IC regulators

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

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

  The S2MPG11 PMIC provides 12 buck, 1 buck-boost, and 15 LDO regulators.

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

properties:
  buckboost:
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for the buck-boost regulator.

    properties:
      regulator-ramp-delay: false

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

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

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

  # 11 standard LDOs
  "^ldo([3-79]|1[01245])s$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single LDO regulator.

    properties:
      regulator-ramp-delay: false

  # 2 LDOs with possible external control
  "^ldo(8|13)s$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for single LDO regulator.

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

    properties:
      regulator-ramp-delay: false

  # 2 LDOs with ramp support and possible external control
  "^ldo[12]s$":
    type: object
    $ref: regulator.yaml#
    unevaluatedProperties: false
    description:
      Properties for a single LDO regulator.

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

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

$defs:
  s2mpg11-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. The following values generally corresponding to the
          respective on-chip pin are valid:
            - 0 # S2MPG11_EXTCTRL_PWREN - PWREN pin
            - 1 # S2MPG11_EXTCTRL_PWREN_MIF - PWREN_MIF pin
            - 2 # S2MPG11_EXTCTRL_AP_ACTIVE_N - ~AP_ACTIVE_N pin
            - 3 # S2MPG11_EXTCTRL_G3D_EN - G3D_EN pin
            - 4 # S2MPG11_EXTCTRL_G3D_EN2 - G3D_EN & ~AP_ACTIVE_N pins
            - 5 # S2MPG11_EXTCTRL_AOC_VDD - AOC_VDD pin
            - 6 # S2MPG11_EXTCTRL_AOC_RET - AOC_RET pin
            - 7 # S2MPG11_EXTCTRL_UFS_EN - UFS_EN pin
            - 8 # S2MPG11_EXTCTRL_LDO13S_EN - VLDO13S_EN pin

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

      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 4, 6, 7 and 10 can not be controlled externally - above definition
  # allows it and we deny it here. This approach reduces repetition.
  - if:
      anyOf:
        - required: [buck4s]
        - required: [buck6s]
        - required: [buck7s]
        - required: [buck10s]
    then:
      patternProperties:
        "^buck([467]|10)s$":
          properties:
            samsung,ext-control: false

additionalProperties: false
