1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2# Copyright (C) 2019 Renesas Electronics Corp.
3%YAML 1.2
4---
5$id: http://devicetree.org/schemas/media/i2c/maxim,max9286.yaml#
6$schema: http://devicetree.org/meta-schemas/core.yaml#
7
8title: Maxim Integrated Quad GMSL Deserializer
9
10maintainers:
11  - Jacopo Mondi <jacopo+renesas@jmondi.org>
12  - Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
13  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
14  - Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
15
16description: |
17  The MAX9286 deserializer receives video data on up to 4 Gigabit Multimedia
18  Serial Links (GMSL) and outputs them on a CSI-2 D-PHY port using up to 4 data
19  lanes.
20
21  In addition to video data, the GMSL links carry a bidirectional control
22  channel that encapsulates I2C messages. The MAX9286 forwards all I2C traffic
23  not addressed to itself to the other side of the links, where a GMSL
24  serializer will output it on a local I2C bus. In the other direction all I2C
25  traffic received over GMSL by the MAX9286 is output on the local I2C bus.
26
27properties:
28  '#address-cells':
29    const: 1
30
31  '#size-cells':
32    const: 0
33
34  compatible:
35    const: maxim,max9286
36
37  reg:
38    description: I2C device address
39    maxItems: 1
40
41  poc-supply:
42    description: Regulator providing Power over Coax to the cameras
43
44  enable-gpios:
45    description: GPIO connected to the \#PWDN pin with inverted polarity
46    maxItems: 1
47
48  gpio-controller: true
49
50  '#gpio-cells':
51    const: 2
52
53  ports:
54    $ref: /schemas/graph.yaml#/properties/ports
55
56    properties:
57      port@0:
58        $ref: /schemas/graph.yaml#/properties/port
59        description: GMSL Input 0
60
61      port@1:
62        $ref: /schemas/graph.yaml#/properties/port
63        description: GMSL Input 1
64
65      port@2:
66        $ref: /schemas/graph.yaml#/properties/port
67        description: GMSL Input 2
68
69      port@3:
70        $ref: /schemas/graph.yaml#/properties/port
71        description: GMSL Input 3
72
73      port@4:
74        $ref: /schemas/graph.yaml#/$defs/port-base
75        unevaluatedProperties: false
76        description: CSI-2 Output
77
78        properties:
79          endpoint:
80            $ref: /schemas/media/video-interfaces.yaml#
81            unevaluatedProperties: false
82
83            properties:
84              data-lanes: true
85
86            required:
87              - data-lanes
88
89    required:
90      - port@4
91
92  i2c-mux:
93    type: object
94    description: |
95      Each GMSL link is modelled as a child bus of an i2c bus
96      multiplexer/switch, in accordance with bindings described in
97      Documentation/devicetree/bindings/i2c/i2c-mux.txt.
98
99    properties:
100      '#address-cells':
101        const: 1
102
103      '#size-cells':
104        const: 0
105
106    patternProperties:
107      "^i2c@[0-3]$":
108        type: object
109        description: |
110          Child node of the i2c bus multiplexer which represents a GMSL link.
111          Each serializer device on the GMSL link remote end is represented with
112          an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL
113          channels.
114
115        properties:
116          '#address-cells':
117            const: 1
118
119          '#size-cells':
120            const: 0
121
122          reg:
123            description: The index of the GMSL channel.
124            maxItems: 1
125
126        patternProperties:
127          "^camera@[a-f0-9]+$":
128            type: object
129            description: |
130              The remote camera device, composed by a GMSL serializer and a
131              connected video source.
132
133            properties:
134              compatible:
135                description: The remote device compatible string.
136
137              reg:
138                minItems: 2
139                maxItems: 3
140                description: |
141                  The I2C addresses to be assigned to the remote devices through
142                  address reprogramming. The number of entries depends on the
143                  requirements of the currently connected remote device.
144
145              port:
146                $ref: /schemas/graph.yaml#/properties/port
147                description: Connection to the MAX9286 sink.
148
149            required:
150              - compatible
151              - reg
152              - port
153
154            additionalProperties: false
155
156        additionalProperties: false
157
158    additionalProperties: false
159
160required:
161  - compatible
162  - reg
163  - ports
164  - i2c-mux
165  - gpio-controller
166
167additionalProperties: false
168
169examples:
170  - |
171    #include <dt-bindings/gpio/gpio.h>
172
173    i2c@e66d8000 {
174      #address-cells = <1>;
175      #size-cells = <0>;
176
177      reg = <0 0xe66d8000>;
178
179      gmsl-deserializer@2c {
180        compatible = "maxim,max9286";
181        reg = <0x2c>;
182        poc-supply = <&camera_poc_12v>;
183        enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
184
185        gpio-controller;
186        #gpio-cells = <2>;
187
188        ports {
189          #address-cells = <1>;
190          #size-cells = <0>;
191
192          port@0 {
193            reg = <0>;
194
195            max9286_in0: endpoint {
196              remote-endpoint = <&rdacm20_out0>;
197            };
198          };
199
200          port@1 {
201            reg = <1>;
202
203            max9286_in1: endpoint {
204              remote-endpoint = <&rdacm20_out1>;
205            };
206          };
207
208          port@2 {
209            reg = <2>;
210
211            max9286_in2: endpoint {
212              remote-endpoint = <&rdacm20_out2>;
213            };
214          };
215
216          port@3 {
217            reg = <3>;
218
219            max9286_in3: endpoint {
220              remote-endpoint = <&rdacm20_out3>;
221            };
222          };
223
224          port@4 {
225            reg = <4>;
226
227            max9286_out: endpoint {
228              data-lanes = <1 2 3 4>;
229              remote-endpoint = <&csi40_in>;
230            };
231          };
232        };
233
234        i2c-mux {
235          #address-cells = <1>;
236          #size-cells = <0>;
237
238          i2c@0 {
239            #address-cells = <1>;
240            #size-cells = <0>;
241            reg = <0>;
242
243            camera@51 {
244              compatible = "imi,rdacm20";
245              reg = <0x51>, <0x61>;
246
247              port {
248                rdacm20_out0: endpoint {
249                  remote-endpoint = <&max9286_in0>;
250                };
251              };
252
253            };
254          };
255
256          i2c@1 {
257            #address-cells = <1>;
258            #size-cells = <0>;
259            reg = <1>;
260
261            camera@52 {
262              compatible = "imi,rdacm20";
263              reg = <0x52>, <0x62>;
264
265              port {
266                rdacm20_out1: endpoint {
267                  remote-endpoint = <&max9286_in1>;
268                };
269              };
270            };
271          };
272
273          i2c@2 {
274            #address-cells = <1>;
275            #size-cells = <0>;
276            reg = <2>;
277
278            camera@53 {
279              compatible = "imi,rdacm20";
280              reg = <0x53>, <0x63>;
281
282              port {
283                rdacm20_out2: endpoint {
284                  remote-endpoint = <&max9286_in2>;
285                };
286              };
287            };
288          };
289
290          i2c@3 {
291            #address-cells = <1>;
292            #size-cells = <0>;
293            reg = <3>;
294
295            camera@54 {
296              compatible = "imi,rdacm20";
297              reg = <0x54>, <0x64>;
298
299              port {
300                rdacm20_out3: endpoint {
301                  remote-endpoint = <&max9286_in3>;
302                };
303              };
304            };
305          };
306        };
307      };
308    };
309