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

title: Microchip CSI2 Demux Controller (CSI2DC)

maintainers:
  - Eugen Hristev <eugen.hristev@microchip.com>

description:
  CSI2DC - Camera Serial Interface 2 Demux Controller

  CSI2DC is a hardware block that receives incoming data from either from an
  IDI interface or from a parallel bus interface.
  It filters IDI packets based on their data type and virtual channel
  identifier, then converts the byte stream to a pixel stream into a cross
  clock domain towards a parallel interface that can be read by a sensor
  controller.
  IDI interface is Synopsys proprietary.
  CSI2DC can act a simple bypass bridge if the incoming data is coming from
  a parallel interface.

  CSI2DC provides two pipes, one video pipe and one data pipe. Video pipe
  is connected at the output to a sensor controller and the data pipe is
  accessible as a DMA slave port to a DMA controller.

  CSI2DC supports a single 'port' node as a sink port with either Synopsys
  32-bit IDI interface or a parallel interface.

  CSI2DC supports one 'port' node as source port with parallel interface.
  This is called video pipe.
  This port has an 'endpoint' that can be connected to a sink port of another
  controller (next in pipeline).

  CSI2DC also supports direct access to the data through AHB, via DMA channel,
  called data pipe.
  For data pipe to be available, a dma controller and a dma channel must be
  referenced.

properties:
  compatible:
    const: microchip,sama7g5-csi2dc

  reg:
    maxItems: 1

  clocks:
    minItems: 2
    maxItems: 2

  clock-names:
    description:
      CSI2DC must have two clocks to function correctly. One clock is the
      peripheral clock for the inside functionality of the hardware block.
      This is named 'pclk'. The second clock must be the cross domain clock,
      in which CSI2DC will perform clock crossing. This clock must be fed
      by the next controller in pipeline, which usually is a sensor controller.
      Normally this clock should be given by this sensor controller who
      is also a clock source. This clock is named 'scck', sensor controller clock.
    items:
      - const: pclk
      - const: scck

  dmas:
    maxItems: 1

  dma-names:
    const: rx

  ports:
    $ref: /schemas/graph.yaml#/properties/ports

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description:
          Input port node, single endpoint describing the input port.

        properties:
          endpoint:
            $ref: video-interfaces.yaml#
            unevaluatedProperties: false
            description: Endpoint connected to input device

            properties:
              bus-type:
                enum: [4, 5, 6]
                default: 4

              bus-width:
                enum: [8, 9, 10, 11, 12, 13, 14]
                default: 14

              clock-noncontinuous:
                type: boolean
                description:
                  Presence of this boolean property decides whether clock is
                  continuous or noncontinuous.

              remote-endpoint: true

      port@1:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description:
          Output port node, single endpoint describing the output port.

        properties:
          endpoint:
            unevaluatedProperties: false
            $ref: video-interfaces.yaml#
            description: Endpoint connected to output device

            properties:
              bus-type:
                enum: [5, 6]
                default: 5

              bus-width:
                enum: [8, 9, 10, 11, 12, 13, 14]
                default: 14

              remote-endpoint: true

    required:
      - port@0
      - port@1

additionalProperties: false

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - ports

examples:
  # Example for connecting to a parallel sensor controller block (video pipe)
  # and the input is received from Synopsys IDI interface
  - |
    csi2dc@e1404000 {
        compatible = "microchip,sama7g5-csi2dc";
        reg = <0xe1404000 0x500>;
        clocks = <&pclk>, <&scck>;
        clock-names = "pclk", "scck";

        ports {
               #address-cells = <1>;
               #size-cells = <0>;
               port@0 {
                       reg = <0>; /* must be 0, first child port */
                       csi2dc_in: endpoint { /* input from IDI interface */
                               bus-type = <4>; /* MIPI CSI2 D-PHY */
                               remote-endpoint = <&csi2host_out>;
                       };
               };

               port@1 {
                       reg = <1>; /* must be 1, second child port */
                       csi2dc_out: endpoint {
                               remote-endpoint = <&xisc_in>; /* output to sensor controller */
                       };
               };
        };
    };

  # Example for connecting to a DMA master as an AHB slave
  # and the input is received from Synopsys IDI interface
  - |
    #include <dt-bindings/dma/at91.h>
    csi2dc@e1404000 {
        compatible = "microchip,sama7g5-csi2dc";
        reg = <0xe1404000 0x500>;
        clocks = <&pclk>, <&scck>;
        clock-names = "pclk", "scck";
        dmas = <&dma0 AT91_XDMAC_DT_PERID(34)>;
        dma-names = "rx";

        ports {
               #address-cells = <1>;
               #size-cells = <0>;
               port@0 {
                       reg = <0>; /* must be 0, first child port */
                       csi2dc_input: endpoint { /* input from IDI interface */
                               remote-endpoint = <&csi2host_out>;
                       };
               };

               port@1 {
                       reg = <1>;
               };
        };
    };

...
