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

title: Maxim Integrated Quad GMSL Deserializer

maintainers:
  - Jacopo Mondi <jacopo+renesas@jmondi.org>
  - Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
  - Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

description: |
  The MAX9286 deserializer receives video data on up to 4 Gigabit Multimedia
  Serial Links (GMSL) and outputs them on a CSI-2 D-PHY port using up to 4 data
  lanes.

  In addition to video data, the GMSL links carry a bidirectional control
  channel that encapsulates I2C messages. The MAX9286 forwards all I2C traffic
  not addressed to itself to the other side of the links, where a GMSL
  serializer will output it on a local I2C bus. In the other direction all I2C
  traffic received over GMSL by the MAX9286 is output on the local I2C bus.

properties:
  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

  compatible:
    const: maxim,max9286

  reg:
    description: I2C device address
    maxItems: 1

  poc-supply:
    description: Regulator providing Power over Coax to the cameras

  enable-gpios:
    description: GPIO connected to the \#PWDN pin with inverted polarity
    maxItems: 1

  gpio-controller: true

  '#gpio-cells':
    const: 2

  maxim,reverse-channel-microvolt:
    minimum: 30000
    maximum: 200000
    default: 170000
    description: |
      Initial amplitude of the reverse control channel, in micro volts.

      The initial amplitude shall be adjusted to a value compatible with the
      configuration of the connected remote serializer.

      Some camera modules (for example RDACM20) include an on-board MCU that
      pre-programs the embedded serializer with power supply noise immunity
      (high-threshold) enabled. A typical value of the deserializer's reverse
      channel amplitude to communicate with pre-programmed serializers is
      170000 micro volts.

      A typical value for the reverse channel amplitude to communicate with
      a remote serializer whose high-threshold noise immunity is not enabled
      is 100000 micro volts

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

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/properties/port
        description: GMSL Input 0

      port@1:
        $ref: /schemas/graph.yaml#/properties/port
        description: GMSL Input 1

      port@2:
        $ref: /schemas/graph.yaml#/properties/port
        description: GMSL Input 2

      port@3:
        $ref: /schemas/graph.yaml#/properties/port
        description: GMSL Input 3

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

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

            properties:
              data-lanes: true

            required:
              - data-lanes

    required:
      - port@4

  i2c-mux:
    type: object
    $ref: /schemas/i2c/i2c-mux.yaml#
    unevaluatedProperties: false
    description: |
      Each GMSL link is modelled as a child bus of an i2c bus multiplexer/switch.

    patternProperties:
      "^i2c@[0-3]$":
        type: object
        description: |
          Child node of the i2c bus multiplexer which represents a GMSL link.
          Each serializer device on the GMSL link remote end is represented with
          an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL
          channels.

        properties:
          reg:
            description: The index of the GMSL channel.
            maxItems: 1

        patternProperties:
          "^camera@[a-f0-9]+$":
            type: object
            description: |
              The remote camera device, composed by a GMSL serializer and a
              connected video source.

            properties:
              compatible:
                description: The remote device compatible string.

              reg:
                minItems: 2
                maxItems: 3
                description: |
                  The I2C addresses to be assigned to the remote devices through
                  address reprogramming. The number of entries depends on the
                  requirements of the currently connected remote device.

              port:
                $ref: /schemas/graph.yaml#/properties/port
                description: Connection to the MAX9286 sink.

            required:
              - compatible
              - reg
              - port

            additionalProperties: false

required:
  - compatible
  - reg
  - ports
  - i2c-mux
  - gpio-controller

additionalProperties: false

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

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

      reg = <0 0xe66d8000>;

      gmsl-deserializer@2c {
        compatible = "maxim,max9286";
        reg = <0x2c>;
        poc-supply = <&camera_poc_12v>;
        enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;

        gpio-controller;
        #gpio-cells = <2>;

        maxim,reverse-channel-microvolt = <170000>;

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

          port@0 {
            reg = <0>;

            max9286_in0: endpoint {
              remote-endpoint = <&rdacm20_out0>;
            };
          };

          port@1 {
            reg = <1>;

            max9286_in1: endpoint {
              remote-endpoint = <&rdacm20_out1>;
            };
          };

          port@2 {
            reg = <2>;

            max9286_in2: endpoint {
              remote-endpoint = <&rdacm20_out2>;
            };
          };

          port@3 {
            reg = <3>;

            max9286_in3: endpoint {
              remote-endpoint = <&rdacm20_out3>;
            };
          };

          port@4 {
            reg = <4>;

            max9286_out: endpoint {
              data-lanes = <1 2 3 4>;
              remote-endpoint = <&csi40_in>;
            };
          };
        };

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

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

            camera@51 {
              compatible = "imi,rdacm20";
              reg = <0x51>, <0x61>;

              port {
                rdacm20_out0: endpoint {
                  remote-endpoint = <&max9286_in0>;
                };
              };

            };
          };

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

            camera@52 {
              compatible = "imi,rdacm20";
              reg = <0x52>, <0x62>;

              port {
                rdacm20_out1: endpoint {
                  remote-endpoint = <&max9286_in1>;
                };
              };
            };
          };

          i2c@2 {
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <2>;

            camera@53 {
              compatible = "imi,rdacm20";
              reg = <0x53>, <0x63>;

              port {
                rdacm20_out2: endpoint {
                  remote-endpoint = <&max9286_in2>;
                };
              };
            };
          };

          i2c@3 {
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <3>;

            camera@54 {
              compatible = "imi,rdacm20";
              reg = <0x54>, <0x64>;

              port {
                rdacm20_out3: endpoint {
                  remote-endpoint = <&max9286_in3>;
                };
              };
            };
          };
        };
      };
    };
