# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/reset/socionext,uniphier-glue-reset.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Socionext UniPhier peripheral core reset in glue layer

description: |
  Some peripheral core reset belongs to its own glue layer. Before using
  this core reset, it is necessary to control the clocks and resets to
  enable this layer. These clocks and resets should be described in each
  property.

maintainers:
  - Kunihiko Hayashi <hayashi.kunihiko@socionext.com>

properties:
  compatible:
    enum:
      - socionext,uniphier-pro4-usb3-reset
      - socionext,uniphier-pro5-usb3-reset
      - socionext,uniphier-pxs2-usb3-reset
      - socionext,uniphier-ld20-usb3-reset
      - socionext,uniphier-pxs3-usb3-reset
      - socionext,uniphier-nx1-usb3-reset
      - socionext,uniphier-pro4-ahci-reset
      - socionext,uniphier-pxs2-ahci-reset
      - socionext,uniphier-pxs3-ahci-reset

  reg:
    maxItems: 1

  "#reset-cells":
    const: 1

  clocks:
    minItems: 1
    maxItems: 2

  clock-names: true

  resets:
    minItems: 1
    maxItems: 2

  reset-names: true

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - socionext,uniphier-pro4-usb3-reset
              - socionext,uniphier-pro5-usb3-reset
              - socionext,uniphier-pro4-ahci-reset
    then:
      properties:
        clocks:
          minItems: 2
          maxItems: 2
        clock-names:
          items:
            - const: gio
            - const: link
        resets:
          minItems: 2
          maxItems: 2
        reset-names:
          items:
            - const: gio
            - const: link
    else:
      properties:
        clocks:
          maxItems: 1
        clock-names:
          const: link
        resets:
          maxItems: 1
        reset-names:
          const: link

additionalProperties: false

required:
  - compatible
  - reg
  - "#reset-cells"
  - clocks
  - clock-names
  - resets
  - reset-names

examples:
  - |
    usb-glue@65b00000 {
        compatible = "simple-mfd";
        #address-cells = <1>;
        #size-cells = <1>;
        ranges = <0 0x65b00000 0x400>;

        usb_rst: reset@0 {
            compatible = "socionext,uniphier-ld20-usb3-reset";
            reg = <0x0 0x4>;
            #reset-cells = <1>;
            clock-names = "link";
            clocks = <&sys_clk 14>;
            reset-names = "link";
            resets = <&sys_rst 14>;
        };
    };
