# 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,max96714.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Maxim MAX96714 GMSL2 to CSI-2 Deserializer

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

description:
  The MAX96714 deserializer converts GMSL2 serial inputs into MIPI
  CSI-2 D-PHY formatted output. The device allows the GMSL2 link to
  simultaneously transmit bidirectional control-channel data while forward
  video transmissions are in progress. The MAX96714 can connect to one
  remotely located serializer using industry-standard coax or STP
  interconnects. The device cans operate in pixel or tunnel mode. In pixel mode
  the MAX96714 can select individual video stream, while the tunnel mode forward all
  the MIPI data received by the serializer.

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

properties:
  compatible:
    oneOf:
      - const: maxim,max96714f
      - items:
          - enum:
              - maxim,max96714
          - const: maxim,max96714f

  reg:
    maxItems: 1

  powerdown-gpios:
    maxItems: 1
    description:
      Specifier for the GPIO connected to the PWDNB pin.

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

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/properties/port
        unevaluatedProperties: false
        description: GMSL Input
        properties:
          endpoint:
            $ref: /schemas/media/video-interfaces.yaml#
            unevaluatedProperties: false
            description:
              Endpoint for GMSL2-Link port.

      port@1:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description: CSI-2 Output port

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

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

              lane-polarities:
                minItems: 1
                maxItems: 5

              link-frequencies:
                maxItems: 1

            required:
              - data-lanes

    required:
      - port@1

  i2c-gate:
    $ref: /schemas/i2c/i2c-gate.yaml
    unevaluatedProperties: false
    description:
      The MAX96714 will pass through and forward the I2C requests from the
      incoming I2C bus over the GMSL2 link. Therefore it supports an i2c-gate
      subnode to configure a serializer.

  port0-poc-supply:
    description: Regulator providing Power over Coax for the GMSL port

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

        deserializer@28 {
            compatible = "maxim,max96714f";
            reg = <0x28>;
            powerdown-gpios = <&main_gpio0 37 GPIO_ACTIVE_LOW>;

            ports {
                #address-cells = <1>;
                #size-cells = <0>;
                port@0 {
                    reg = <0>;
                    max96714_gmsl_in: endpoint {
                        remote-endpoint = <&max96917f_gmsl_out>;
                    };
                };

                port@1 {
                    reg = <1>;
                    max96714_csi_out: endpoint {
                        data-lanes = <1 2 3 4>;
                        link-frequencies = /bits/ 64 <400000000>;
                        remote-endpoint = <&csi_in>;
                    };
                };
            };

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

                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>;
                                lane-polarities = <1 0 1>;
                                remote-endpoint = <&sensor_out>;
                            };
                        };

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