# 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 all the ports

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

  gpio-controller: true

  '#gpio-cells':
    const: 2

  maxim,bus-width:
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [ 24, 27, 32 ]
    description: |
      The GMSL serial data bus width. This setting is normally controlled by
      the BWS pin, but may be overridden with this property. The value must
      match the configuration of the remote serializers.

  maxim,i2c-remote-bus-hz:
    enum: [ 8470, 28300, 84700, 105000, 173000, 339000, 533000, 837000 ]
    default: 105000
    description: |
      The I2C clock frequency for the remote I2C buses. The value must match
      the configuration of the remote serializers.

  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

  maxim,gpio-poc:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 2
    maxItems: 2
    description: |
      Index of the MAX9286 gpio output line (0 or 1) that controls Power over
      Coax to the cameras and its associated polarity flag.

      The property accepts an array of two unsigned integers, the first being
      the gpio line index (0 or 1) and the second being the gpio line polarity
      flag (GPIO_ACTIVE_HIGH or GPIO_ACTIVE_LOW) as defined in
      <include/dt-bindings/gpio/gpio.h>.

      When the remote cameras power is controlled by one of the MAX9286 gpio
      lines, this property has to be used to specify which line among the two
      available ones controls the remote camera power enablement.

      When this property is used it is not possible to register a gpio
      controller as the gpio lines are controlled directly by the MAX9286 and
      not available for consumers, nor the 'poc-supply' property should be
      specified.

  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
        additionalProperties: false
        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

          '#address-cells':
            const: 1

          '#size-cells':
            const: 0

        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

patternProperties:
  "^port[0-3]-poc-supply$":
    description: Regulator providing Power over Coax for a particular port

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

allOf:
  # Only one way of specifying power supplies is allowed: 'maxim,gpio-poc',
  # 'poc-supply' or per-port poc-supply. Additionally, if 'maxim,gpio-poc' is
  # present, then 'gpio-controller' isn't allowed.
  - if:
      required:
        - maxim,gpio-poc
    then:
      properties:
        poc-supply: false
        gpio-controller: false
      patternProperties:
        "^port[0-3]-poc-supply$": false

  - if:
      required:
        - poc-supply
    then:
      patternProperties:
        "^port[0-3]-poc-supply$": false

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,i2c-remote-bus-hz = <339000>;
            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>;
                            };
                        };
                    };
                };
            };
        };

        /*
        * Example of a deserializer that controls the camera Power over Coax
        * through one of its gpio lines.
        */
        gmsl-deserializer@6c {
            compatible = "maxim,max9286";
            reg = <0x6c>;
            enable-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;

            /*
            * The remote camera power is controlled by MAX9286 GPIO line #0.
            * No 'poc-supply' nor 'gpio-controller' are specified.
            */
            maxim,gpio-poc = <0 GPIO_ACTIVE_LOW>;

            /*
            * Do not describe connections as they're the same as in the previous
            * example.
            */
            ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@4 {
                    reg = <4>;
                };
            };

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