# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) 2024 Collabora Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/maxim,max96717.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MAX96717 CSI-2 to GMSL2 Serializer

maintainers:
  - Julien Massot <julien.massot@collabora.com>

description:
  The MAX96717 serializer converts MIPI CSI-2 D-PHY formatted input
  into GMSL2 serial outputs. The device allows the GMSL2 link to
  simultaneously transmit bidirectional control-channel data while forward
  video transmissions are in progress. The MAX96717 can connect to one
  remotely located deserializer using industry-standard coax or STP
  interconnects. The device cans operate in pixel or tunnel mode. In pixel mode
  the MAX96717 can select the MIPI datatype, while the tunnel mode forward all the MIPI
  data received by the serializer.
  The MAX96717 supports Reference Over Reverse (channel),
  to generate a clock output for the sensor from the GMSL reverse channel.

  The GMSL2 serial link operates at a fixed rate of 3Gbps or 6Gbps in the
  forward direction and 187.5Mbps in the reverse direction.
  MAX96717F only supports a fixed rate of 3Gbps in the forward direction.

properties:
  compatible:
    oneOf:
      - const: maxim,max96717f
      - items:
          - enum:
              - maxim,max96717
          - const: maxim,max96717f

  '#gpio-cells':
    const: 2
    description:
      First cell is the GPIO pin number, second cell is the flags. The GPIO pin
      number must be in range of [0, 10].

  gpio-controller: true

  '#clock-cells':
    const: 0

  reg:
    maxItems: 1

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

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description: CSI-2 Input port

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

            properties:
              data-lanes:
                minItems: 1
                maxItems: 4

              lane-polarities:
                minItems: 1
                maxItems: 5

            required:
              - data-lanes

      port@1:
        $ref: /schemas/graph.yaml#/properties/port
        unevaluatedProperties: false
        description: GMSL Output port

    required:
      - port@1

  i2c-gate:
    $ref: /schemas/i2c/i2c-gate.yaml
    unevaluatedProperties: false
    description:
      The MAX96717 will forward the I2C requests from the
      incoming GMSL2 link. Therefore, it supports an i2c-gate
      subnode to configure a sensor.

required:
  - compatible
  - reg
  - ports

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/media/video-interfaces.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        serializer: serializer@40 {
            compatible = "maxim,max96717f";
            reg = <0x40>;
            gpio-controller;
            #gpio-cells = <2>;
            #clock-cells = <0>;

            ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@0 {
                    reg = <0>;
                    max96717f_csi_in: endpoint {
                        data-lanes = <1 2 3 4>;
                        remote-endpoint = <&sensor_out>;
                    };
                };

                port@1 {
                    reg = <1>;
                    max96917f_gmsl_out: endpoint {
                        remote-endpoint = <&deser_gmsl_in>;
                    };
                };
            };

            i2c-gate {
                #address-cells = <1>;
                #size-cells = <0>;
                sensor@10 {
                    compatible = "st,st-vgxy61";
                    reg = <0x10>;
                    reset-gpios = <&serializer 0 GPIO_ACTIVE_LOW>;
                    clocks = <&serializer>;
                    VCORE-supply = <&v1v2>;
                    VDDIO-supply = <&v1v8>;
                    VANA-supply = <&v2v8>;
                    port {
                        sensor_out: endpoint {
                            data-lanes = <1 2 3 4>;
                            remote-endpoint = <&max96717f_csi_in>;
                        };
                    };
                };
            };
        };
    };
...
