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

title: Spreadtrum SC9860 clock

maintainers:
  - Orson Zhai <orsonzhai@gmail.com>
  - Baolin Wang <baolin.wang7@gmail.com>
  - Chunyan Zhang <zhang.lyra@gmail.com>

properties:
  compatible:
    enum:
      - sprd,sc9860-agcp-gate
      - sprd,sc9860-aonsecure-clk
      - sprd,sc9860-aon-gate
      - sprd,sc9860-aon-prediv
      - sprd,sc9860-apahb-gate
      - sprd,sc9860-apapb-gate
      - sprd,sc9860-ap-clk
      - sprd,sc9860-cam-clk
      - sprd,sc9860-cam-gate
      - sprd,sc9860-disp-clk
      - sprd,sc9860-disp-gate
      - sprd,sc9860-gpu-clk
      - sprd,sc9860-pll
      - sprd,sc9860-pmu-gate
      - sprd,sc9860-vsp-clk
      - sprd,sc9860-vsp-gate

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 3

  '#clock-cells':
    const: 1

  sprd,syscon:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to the syscon which is in the same address area with the
      clock, and so we can get regmap for the clocks from the syscon device

required:
  - compatible
  - clocks
  - '#clock-cells'

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - sprd,sc9860-agcp-gate
              - sprd,sc9860-aon-gate
              - sprd,sc9860-apahb-gate
              - sprd,sc9860-apapb-gate
              - sprd,sc9860-cam-gate
              - sprd,sc9860-disp-gate
              - sprd,sc9860-gpu-clk
              - sprd,sc9860-pll
              - sprd,sc9860-pmu-gate
              - sprd,sc9860-vsp-gate
    then:
      properties:
        clocks:
          maxItems: 1
  - if:
      properties:
        compatible:
          contains:
            enum:
              - sprd,sc9860-aonsecure-clk
              - sprd,sc9860-cam-clk
              - sprd,sc9860-disp-clk
              - sprd,sc9860-vsp-clk
    then:
      properties:
        clocks:
          minItems: 2
          maxItems: 2
  - if:
      properties:
        compatible:
          contains:
            enum:
              - sprd,sc9860-aon-prediv
              - sprd,sc9860-ap-clk
    then:
      properties:
        clocks:
          minItems: 3
  - if:
      properties:
        compatible:
          contains:
            enum:
              - sprd,sc9860-aonsecure-clk
              - sprd,sc9860-aon-prediv
              - sprd,sc9860-ap-clk
              - sprd,sc9860-cam-clk
              - sprd,sc9860-disp-clk
              - sprd,sc9860-gpu-clk
              - sprd,sc9860-vsp-clk
    then:
      required:
        - reg
      properties:
        sprd,syscon: false
  - if:
      properties:
        compatible:
          contains:
            enum:
              - sprd,sc9860-agcp-gate
              - sprd,sc9860-aon-gate
              - sprd,sc9860-apahb-gate
              - sprd,sc9860-apapb-gate
              - sprd,sc9860-cam-gate
              - sprd,sc9860-disp-gate
              - sprd,sc9860-pll
              - sprd,sc9860-pmu-gate
              - sprd,sc9860-vsp-gate
    then:
      required:
        - sprd,syscon
      properties:
        reg: false

additionalProperties: false

examples:
  - |
    soc {
      #address-cells = <2>;
      #size-cells = <2>;

      pmu-gate {
        compatible = "sprd,sc9860-pmu-gate";
        clocks = <&ext_26m>;
        #clock-cells = <1>;
        sprd,syscon = <&pmu_regs>;
      };

      clock-controller@20000000 {
        compatible = "sprd,sc9860-ap-clk";
        reg = <0 0x20000000 0 0x400>;
        clocks = <&ext_26m>, <&pll 0>, <&pmu_gate 0>;
        #clock-cells = <1>;
      };
    };
...
