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

title: Amlogic AXG Audio Clock Controller

maintainers:
  - Neil Armstrong <neil.armstrong@linaro.org>
  - Jerome Brunet <jbrunet@baylibre.com>

description:
  The Amlogic AXG audio clock controller generates and supplies clock to the
  other elements of the audio subsystem, such as fifos, i2s, spdif and pdm
  devices.

properties:
  compatible:
    enum:
      - amlogic,axg-audio-clkc
      - amlogic,g12a-audio-clkc
      - amlogic,sm1-audio-clkc

  '#clock-cells':
    const: 1

  '#reset-cells':
    const: 1

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    items:
      - description: main peripheral bus clock
      - description: input plls to generate clock signals N0
      - description: input plls to generate clock signals N1
      - description: input plls to generate clock signals N2
      - description: input plls to generate clock signals N3
      - description: input plls to generate clock signals N4
      - description: input plls to generate clock signals N5
      - description: input plls to generate clock signals N6
      - description: input plls to generate clock signals N7
      - description: slave bit clock N0 provided by external components
      - description: slave bit clock N1 provided by external components
      - description: slave bit clock N2 provided by external components
      - description: slave bit clock N3 provided by external components
      - description: slave bit clock N4 provided by external components
      - description: slave bit clock N5 provided by external components
      - description: slave bit clock N6 provided by external components
      - description: slave bit clock N7 provided by external components
      - description: slave bit clock N8 provided by external components
      - description: slave bit clock N9 provided by external components
      - description: slave sample clock N0 provided by external components
      - description: slave sample clock N1 provided by external components
      - description: slave sample clock N2 provided by external components
      - description: slave sample clock N3 provided by external components
      - description: slave sample clock N4 provided by external components
      - description: slave sample clock N5 provided by external components
      - description: slave sample clock N6 provided by external components
      - description: slave sample clock N7 provided by external components
      - description: slave sample clock N8 provided by external components
      - description: slave sample clock N9 provided by external components

  clock-names:
    minItems: 1
    items:
      - const: pclk
      - const: mst_in0
      - const: mst_in1
      - const: mst_in2
      - const: mst_in3
      - const: mst_in4
      - const: mst_in5
      - const: mst_in6
      - const: mst_in7
      - const: slv_sclk0
      - const: slv_sclk1
      - const: slv_sclk2
      - const: slv_sclk3
      - const: slv_sclk4
      - const: slv_sclk5
      - const: slv_sclk6
      - const: slv_sclk7
      - const: slv_sclk8
      - const: slv_sclk9
      - const: slv_lrclk0
      - const: slv_lrclk1
      - const: slv_lrclk2
      - const: slv_lrclk3
      - const: slv_lrclk4
      - const: slv_lrclk5
      - const: slv_lrclk6
      - const: slv_lrclk7
      - const: slv_lrclk8
      - const: slv_lrclk9

  resets:
    description: internal reset line

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

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - amlogic,g12a-audio-clkc
              - amlogic,sm1-audio-clkc
    then:
      required:
        - '#reset-cells'
    else:
      properties:
        '#reset-cells': false

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/axg-clkc.h>
    #include <dt-bindings/reset/amlogic,meson-axg-reset.h>
    apb {
        #address-cells = <2>;
        #size-cells = <2>;

        clkc_audio: clock-controller@0 {
            compatible = "amlogic,axg-audio-clkc";
            reg = <0x0 0x0 0x0 0xb4>;
            #clock-cells = <1>;

            clocks = <&clkc CLKID_AUDIO>,
                     <&clkc CLKID_MPLL0>,
                     <&clkc CLKID_MPLL1>,
                     <&clkc CLKID_MPLL2>,
                     <&clkc CLKID_MPLL3>,
                     <&clkc CLKID_HIFI_PLL>,
                     <&clkc CLKID_FCLK_DIV3>,
                     <&clkc CLKID_FCLK_DIV4>,
                     <&clkc CLKID_GP0_PLL>,
                     <&slv_sclk0>,
                     <&slv_sclk1>,
                     <&slv_sclk2>,
                     <&slv_sclk3>,
                     <&slv_sclk4>,
                     <&slv_sclk5>,
                     <&slv_sclk6>,
                     <&slv_sclk7>,
                     <&slv_sclk8>,
                     <&slv_sclk9>,
                     <&slv_lrclk0>,
                     <&slv_lrclk1>,
                     <&slv_lrclk2>,
                     <&slv_lrclk3>,
                     <&slv_lrclk4>,
                     <&slv_lrclk5>,
                     <&slv_lrclk6>,
                     <&slv_lrclk7>,
                     <&slv_lrclk8>,
                     <&slv_lrclk9>;
            clock-names = "pclk",
                          "mst_in0",
                          "mst_in1",
                          "mst_in2",
                          "mst_in3",
                          "mst_in4",
                          "mst_in5",
                          "mst_in6",
                          "mst_in7",
                          "slv_sclk0",
                          "slv_sclk1",
                          "slv_sclk2",
                          "slv_sclk3",
                          "slv_sclk4",
                          "slv_sclk5",
                          "slv_sclk6",
                          "slv_sclk7",
                          "slv_sclk8",
                          "slv_sclk9",
                          "slv_lrclk0",
                          "slv_lrclk1",
                          "slv_lrclk2",
                          "slv_lrclk3",
                          "slv_lrclk4",
                          "slv_lrclk5",
                          "slv_lrclk6",
                          "slv_lrclk7",
                          "slv_lrclk8",
                          "slv_lrclk9";
            resets = <&reset RESET_AUDIO>;
        };
    };
