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

title: Imagination Technologies Pistachio SoC clock controllers

maintainers:
  - Andrew Bresticker <abrestic@chromium.org>

description: |
  Pistachio has four clock controllers (core clock, peripheral clock, peripheral
  general control, and top general control) which are instantiated individually
  from the device-tree.

  Core clock controller:

  The core clock controller generates clocks for the CPU, RPU (WiFi + BT
  co-processor), audio, and several peripherals.

  Peripheral clock controller:

  The peripheral clock controller generates clocks for the DDR, ROM, and other
  peripherals. The peripheral system clock ("periph_sys") generated by the core
  clock controller is the input clock to the peripheral clock controller.

  Peripheral general control:

  The peripheral general control block generates system interface clocks and
  resets for various peripherals. It also contains miscellaneous peripheral
  control registers.

  Top-level general control:

  The top-level general control block contains miscellaneous control registers
  and gates for the external clocks "audio_clk_in" and "enet_clk_in".

properties:
  compatible:
    items:
      - enum:
          - img,pistachio-clk
          - img,pistachio-clk-periph
          - img,pistachio-cr-periph
          - img,pistachio-cr-top

  reg:
    maxItems: 1

  '#clock-cells':
    const: 1

  clocks:
    minItems: 1
    maxItems: 3

  clock-names:
    minItems: 1
    maxItems: 3

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

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: img,pistachio-clk
    then:
      properties:
        clocks:
          items:
            - description: External 52Mhz oscillator
            - description: Alternate audio reference clock
            - description: Alternate ethernet PHY clock

        clock-names:
          items:
            - const: xtal
            - const: audio_refclk_ext_gate
            - const: ext_enet_in_gate

  - if:
      properties:
        compatible:
          contains:
            const: img,pistachio-clk-periph
    then:
      properties:
        clocks:
          items:
            - description: Peripheral system clock

        clock-names:
          items:
            - const: periph_sys_core

  - if:
      properties:
        compatible:
          contains:
            const: img,pistachio-cr-periph
    then:
      properties:
        clocks:
          items:
            - description: System interface clock

        clock-names:
          items:
            - const: sys

  - if:
      properties:
        compatible:
          contains:
            const: img,pistachio-cr-top
    then:
      properties:
        clocks:
          items:
            - description: External audio reference clock
            - description: External ethernet PHY clock

        clock-names:
          items:
            - const: audio_clk_in
            - const: enet_clk_in

additionalProperties: false
