# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright 2019 BayLibre, SAS
%YAML 1.2
---
$id: "http://devicetree.org/schemas/media/amlogic,gx-vdec.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"

title: Amlogic Video Decoder

maintainers:
  - Neil Armstrong <narmstrong@baylibre.com>
  - Maxime Jourdan <mjourdan@baylibre.com>

description: |
  The video decoding IP lies within the DOS memory region,
  except for the hardware bitstream parser that makes use of an undocumented
  region.

  It makes use of the following blocks:
  - ESPARSER is a bitstream parser that outputs to a VIFIFO. Further VDEC blocks
    then feed from this VIFIFO.
  - VDEC_1 can decode MPEG-1, MPEG-2, MPEG-4 part 2, MJPEG, H.263, H.264, VC-1.
  - VDEC_HEVC can decode HEVC and VP9.

  Both VDEC_1 and VDEC_HEVC share the "vdec" IRQ and as such cannot run
  concurrently.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - amlogic,gxbb-vdec # GXBB (S905)
              - amlogic,gxl-vdec # GXL (S905X, S905D)
              - amlogic,gxm-vdec # GXM (S912)
          - const: amlogic,gx-vdec
      - enum:
          - amlogic,g12a-vdec # G12A (S905X2, S905D2)
          - amlogic,sm1-vdec # SM1 (S905X3, S905D3)

  interrupts:
    minItems: 2

  interrupt-names:
    items:
      - const: vdec
      - const: esparser

  reg:
    minItems: 2

  reg-names:
    items:
      - const: dos
      - const: esparser

  resets:
    maxItems: 1

  reset-names:
    items:
      - const: esparser

  clocks:
    minItems: 4
    maxItems: 5

  clock-names:
    minItems: 4
    maxItems: 5
    items:
      - const: dos_parser
      - const: dos
      - const: vdec_1
      - const: vdec_hevc
      - const: vdec_hevcf

  amlogic,ao-sysctrl:
    description: should point to the AOBUS sysctrl node
    $ref: /schemas/types.yaml#/definitions/phandle

  amlogic,canvas:
    description: should point to a canvas provider node
    $ref: /schemas/types.yaml#/definitions/phandle

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - amlogic,gx-vdec

    then:
      properties:
        clock-names:
          maxItems: 4

  - if:
      properties:
        compatible:
          contains:
            enum:
              - amlogic,g12a-vdec
              - amlogic,sm1-vdec

    then:
      properties:
        clock-names:
          minItems: 5

required:
  - compatible
  - reg
  - reg-names
  - interrupts
  - interrupt-names
  - clocks
  - clock-names
  - resets
  - reset-names
  - amlogic,ao-sysctrl
  - amlogic,canvas

additionalProperties: false

examples:
  - |
    vdec: video-decoder@c8820000 {
          compatible = "amlogic,gxl-vdec", "amlogic,gx-vdec";
          reg = <0xc8820000 0x10000>, <0xc110a580 0xe4>;
          reg-names = "dos", "esparser";
          interrupts = <44>, <32>;
          interrupt-names = "vdec", "esparser";
          clocks = <&clk_dos_parser> ,<&clk_dos>, <&clk_vdec_1>, <&clk_vdec_hevc>;
          clock-names = "dos_parser", "dos", "vdec_1", "vdec_hevc";
          resets = <&reset_parser>;
          reset-names = "esparser";
          amlogic,ao-sysctrl = <&sysctrl_AO>;
          amlogic,canvas = <&canvas>;
    };
