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

title: Cirrus Logic EP93xx Platforms System Controller

maintainers:
  - Alexander Sverdlin <alexander.sverdlin@gmail.com>
  - Nikita Shubin <nikita.shubin@maquefel.me>

description: |
  Central resources are controlled by a set of software-locked registers,
  which can be used to prevent accidental accesses. Syscon generates
  the various bus and peripheral clocks and controls the system startup
  configuration.

  The System Controller (Syscon) provides:
  - Clock control
  - Power management
  - System configuration management

  Syscon registers are common for all EP93xx SoC's, through some actual peripheral
  may be missing depending on actual SoC model.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - cirrus,ep9302-syscon
              - cirrus,ep9307-syscon
              - cirrus,ep9312-syscon
              - cirrus,ep9315-syscon
          - const: cirrus,ep9301-syscon
          - const: syscon
      - items:
          - const: cirrus,ep9301-syscon
          - const: syscon

  reg:
    maxItems: 1

  "#clock-cells":
    const: 1

  clocks:
    items:
      - description: reference clock

patternProperties:
  '^pins-':
    type: object
    description: pin node
    $ref: /schemas/pinctrl/pinmux-node.yaml

    properties:
      function:
        enum: [ spi, ac97, i2s, pwm, keypad, pata, lcd, gpio ]

      groups:
        enum: [ ssp, ac97, i2s_on_ssp, i2s_on_ac97, pwm1, gpio1agrp,
                gpio2agrp, gpio3agrp, gpio4agrp, gpio6agrp, gpio7agrp,
                rasteronsdram0grp, rasteronsdram3grp, keypadgrp, idegrp ]

    required:
      - function
      - groups

    unevaluatedProperties: false

required:
  - compatible
  - reg
  - "#clock-cells"
  - clocks

additionalProperties: false

examples:
  - |
    syscon@80930000 {
      compatible = "cirrus,ep9301-syscon", "syscon";
      reg = <0x80930000 0x1000>;

      #clock-cells = <1>;
      clocks = <&xtali>;

      spi_default_pins: pins-spi {
        function = "spi";
        groups = "ssp";
      };
    };
