# 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
        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
        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>;
               };
        };
    };

...
