379 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			379 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# 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
 | 
						|
 | 
						|
  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
 | 
						|
        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
 | 
						|
 | 
						|
# If 'maxim,gpio-poc' is present, then 'poc-supply' and 'gpio-controller'
 | 
						|
# are not allowed.
 | 
						|
if:
 | 
						|
  required:
 | 
						|
    - maxim,gpio-poc
 | 
						|
then:
 | 
						|
  properties:
 | 
						|
    poc-supply: false
 | 
						|
    gpio-controller: 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,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>;
 | 
						|
            };
 | 
						|
        };
 | 
						|
    };
 |