# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/amlogic/amlogic,meson-gx-hhi-sysctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Amlogic Meson System Control registers

maintainers:
  - Neil Armstrong <neil.armstrong@linaro.org>

properties:
  compatible:
    items:
      - enum:
          - amlogic,meson-gx-hhi-sysctrl
          - amlogic,meson-gx-ao-sysctrl
          - amlogic,meson-axg-hhi-sysctrl
          - amlogic,meson-axg-ao-sysctrl
      - const: simple-mfd
      - const: syscon

  reg:
    maxItems: 1

  clock-controller:
    type: object

  power-controller:
    $ref: /schemas/power/amlogic,meson-ee-pwrc.yaml

  pinctrl:
    type: object

  phy:
    type: object

allOf:
  - if:
      properties:
        compatible:
          enum:
            - amlogic,meson-gx-hhi-sysctrl
            - amlogic,meson-axg-hhi-sysctrl
    then:
      properties:
        clock-controller:
          $ref: /schemas/clock/amlogic,gxbb-clkc.yaml#

      required:
        - power-controller

  - if:
      properties:
        compatible:
          enum:
            - amlogic,meson-gx-ao-sysctrl
            - amlogic,meson-axg-ao-sysctrl
    then:
      properties:
        clock-controller:
          $ref: /schemas/clock/amlogic,gxbb-aoclkc.yaml#

        power-controller: false
        phy: false

  - if:
      properties:
        compatible:
          enum:
            - amlogic,meson-gx-hhi-sysctrl
    then:
      properties:
        phy: false

  - if:
      properties:
        compatible:
          enum:
            - amlogic,meson-axg-hhi-sysctrl
    then:
      properties:
        phy:
          oneOf:
            - $ref: /schemas/phy/amlogic,g12a-mipi-dphy-analog.yaml
            - $ref: /schemas/phy/amlogic,meson-axg-mipi-pcie-analog.yaml

required:
  - compatible
  - reg
  - clock-controller

additionalProperties: false

examples:
  - |
    bus@c883c000 {
        compatible = "simple-bus";
        reg = <0xc883c000 0x2000>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges = <0x0 0xc883c000 0x2000>;

        sysctrl: system-controller@0 {
            compatible = "amlogic,meson-gx-hhi-sysctrl", "simple-mfd", "syscon";
            reg = <0 0x400>;

            clock-controller {
                compatible = "amlogic,gxbb-clkc";
                #clock-cells = <1>;
                clocks = <&xtal>;
                clock-names = "xtal";
            };

            power-controller {
                compatible = "amlogic,meson-gxbb-pwrc";
                #power-domain-cells = <1>;
                amlogic,ao-sysctrl = <&sysctrl_AO>;

                resets = <&reset_viu>,
                         <&reset_venc>,
                         <&reset_vcbus>,
                         <&reset_bt656>,
                         <&reset_dvin>,
                         <&reset_rdma>,
                         <&reset_venci>,
                         <&reset_vencp>,
                         <&reset_vdac>,
                         <&reset_vdi6>,
                         <&reset_vencl>,
                         <&reset_vid_lock>;
                reset-names = "viu", "venc", "vcbus", "bt656", "dvin",
                              "rdma", "venci", "vencp", "vdac", "vdi6",
                              "vencl", "vid_lock";
                clocks = <&clk_vpu>, <&clk_vapb>;
                clock-names = "vpu", "vapb";
            };
        };
    };

    bus@c8100000 {
        compatible = "simple-bus";
        reg = <0xc8100000 0x100000>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges = <0x0 0xc8100000 0x100000>;

        sysctrl_AO: system-controller@0 {
            compatible = "amlogic,meson-gx-ao-sysctrl", "simple-mfd", "syscon";
            reg = <0 0x100>;

            clock-controller {
                compatible = "amlogic,meson-gxbb-aoclkc", "amlogic,meson-gx-aoclkc";
                #clock-cells = <1>;
                #reset-cells = <1>;
                clocks = <&xtal>, <&clk81>;
                clock-names = "xtal", "mpeg-clk";
            };
        };
    };

  - |
    system-controller@ff63c000 {
        compatible = "amlogic,meson-axg-hhi-sysctrl", "simple-mfd", "syscon";
        reg = <0xff63c000 0x400>;

        clock-controller {
            compatible = "amlogic,axg-clkc";
            #clock-cells = <1>;
            clocks = <&xtal>;
            clock-names = "xtal";
        };

        power-controller {
           compatible = "amlogic,meson-axg-pwrc";
           #power-domain-cells = <1>;
           amlogic,ao-sysctrl = <&sysctrl_AO>;

           resets = <&reset_viu>,
                    <&reset_venc>,
                    <&reset_vcbus>,
                    <&reset_vencl>,
                    <&reset_vid_lock>;
           reset-names = "viu", "venc", "vcbus", "vencl", "vid_lock";
           clocks = <&clk_vpu>, <&clk_vapb>;
           clock-names = "vpu", "vapb";
        };

        phy {
           compatible = "amlogic,axg-mipi-pcie-analog-phy";
           #phy-cells = <0>;
        };
    };
