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

title: Starfive SoC CAMSS ISP

maintainers:
  - Jack Zhu <jack.zhu@starfivetech.com>
  - Changhuang Liang <changhuang.liang@starfivetech.com>

description:
  The Starfive CAMSS ISP is a Camera interface for Starfive JH7110 SoC. It
  consists of a VIN controller (Video In Controller, a top-level control unit)
  and an ISP.

properties:
  compatible:
    const: starfive,jh7110-camss

  reg:
    maxItems: 2

  reg-names:
    items:
      - const: syscon
      - const: isp

  clocks:
    maxItems: 7

  clock-names:
    items:
      - const: apb_func
      - const: wrapper_clk_c
      - const: dvp_inv
      - const: axiwr
      - const: mipi_rx0_pxl
      - const: ispcore_2x
      - const: isp_axi

  resets:
    maxItems: 6

  reset-names:
    items:
      - const: wrapper_p
      - const: wrapper_c
      - const: axird
      - const: axiwr
      - const: isp_top_n
      - const: isp_top_axi

  power-domains:
    items:
      - description: JH7110 ISP Power Domain Switch Controller.

  interrupts:
    maxItems: 4

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

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description: Input port for receiving DVP data.

        properties:
          endpoint:
            $ref: video-interfaces.yaml#
            unevaluatedProperties: false

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

              bus-width:
                enum: [8, 10, 12]

              data-shift:
                enum: [0, 2]
                default: 0

              hsync-active:
                enum: [0, 1]
                default: 1

              vsync-active:
                enum: [0, 1]
                default: 1

            required:
              - bus-type
              - bus-width

      port@1:
        $ref: /schemas/graph.yaml#/properties/port
        description: Input port for receiving CSI data.

    required:
      - port@0
      - port@1

required:
  - compatible
  - reg
  - reg-names
  - clocks
  - clock-names
  - resets
  - reset-names
  - power-domains
  - interrupts
  - ports

additionalProperties: false

examples:
  - |
    isp@19840000 {
        compatible = "starfive,jh7110-camss";
        reg = <0x19840000 0x10000>,
              <0x19870000 0x30000>;
        reg-names = "syscon", "isp";
        clocks = <&ispcrg 0>,
                 <&ispcrg 13>,
                 <&ispcrg 2>,
                 <&ispcrg 12>,
                 <&ispcrg 1>,
                 <&syscrg 51>,
                 <&syscrg 52>;
        clock-names = "apb_func",
                      "wrapper_clk_c",
                      "dvp_inv",
                      "axiwr",
                      "mipi_rx0_pxl",
                      "ispcore_2x",
                      "isp_axi";
        resets = <&ispcrg 0>,
                 <&ispcrg 1>,
                 <&ispcrg 10>,
                 <&ispcrg 11>,
                 <&syscrg 41>,
                 <&syscrg 42>;
        reset-names = "wrapper_p",
                      "wrapper_c",
                      "axird",
                      "axiwr",
                      "isp_top_n",
                      "isp_top_axi";
        power-domains = <&pwrc 5>;
        interrupts = <92>, <87>, <88>, <90>;

        ports {
            #address-cells = <1>;
            #size-cells = <0>;
            port@0 {
                reg = <0>;
                vin_from_sc2235: endpoint {
                    remote-endpoint = <&sc2235_to_vin>;
                    bus-type = <5>;
                    bus-width = <8>;
                    data-shift = <2>;
                    hsync-active = <1>;
                    vsync-active = <0>;
                    pclk-sample = <1>;
                };
            };

            port@1 {
                reg = <1>;
                vin_from_csi2rx: endpoint {
                    remote-endpoint = <&csi2rx_to_vin>;
                };
            };
        };
    };
