# 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 - Kieran Bingham - Laurent Pinchart - Niklas Söderlund 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 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>; }; }; }; }; }; }; };