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    type: object
55    description: |
56      The connections to the MAX9286 GMSL and its endpoint nodes are modelled
57      using the OF graph bindings in accordance with the video interface
58      bindings defined in
59      Documentation/devicetree/bindings/media/video-interfaces.txt.
60
61      The following table lists the port number corresponding to each device
62      port.
63
64        Port            Description
65        ----------------------------------------
66        Port 0          GMSL Input 0
67        Port 1          GMSL Input 1
68        Port 2          GMSL Input 2
69        Port 3          GMSL Input 3
70        Port 4          CSI-2 Output
71
72    properties:
73      '#address-cells':
74        const: 1
75
76      '#size-cells':
77        const: 0
78
79      port@[0-3]:
80        type: object
81        properties:
82          reg:
83            enum: [ 0, 1, 2, 3 ]
84
85          endpoint:
86            type: object
87
88            properties:
89              remote-endpoint:
90                description: |
91                 phandle to the remote GMSL source endpoint subnode in the
92                 remote node port.
93
94            required:
95              - remote-endpoint
96
97        required:
98          - reg
99          - endpoint
100
101        additionalProperties: false
102
103      port@4:
104        type: object
105        properties:
106          reg:
107            const: 4
108
109          endpoint:
110            type: object
111
112            properties:
113              remote-endpoint:
114                description: phandle to the remote CSI-2 sink endpoint.
115
116              data-lanes:
117                description: array of physical CSI-2 data lane indexes.
118
119            required:
120              - remote-endpoint
121              - data-lanes
122
123        required:
124          - reg
125          - endpoint
126
127        additionalProperties: false
128
129    required:
130      - port@4
131
132  i2c-mux:
133    type: object
134    description: |
135      Each GMSL link is modelled as a child bus of an i2c bus
136      multiplexer/switch, in accordance with bindings described in
137      Documentation/devicetree/bindings/i2c/i2c-mux.txt.
138
139    properties:
140      '#address-cells':
141        const: 1
142
143      '#size-cells':
144        const: 0
145
146    patternProperties:
147      "^i2c@[0-3]$":
148        type: object
149        description: |
150          Child node of the i2c bus multiplexer which represents a GMSL link.
151          Each serializer device on the GMSL link remote end is represented with
152          an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL
153          channels.
154
155        properties:
156          '#address-cells':
157            const: 1
158
159          '#size-cells':
160            const: 0
161
162          reg:
163            description: The index of the GMSL channel.
164            maxItems: 1
165
166        patternProperties:
167          "^camera@[a-f0-9]+$":
168            type: object
169            description: |
170              The remote camera device, composed by a GMSL serializer and a
171              connected video source.
172
173            properties:
174              compatible:
175                description: The remote device compatible string.
176
177              reg:
178                minItems: 2
179                maxItems: 3
180                description: |
181                  The I2C addresses to be assigned to the remote devices through
182                  address reprogramming. The number of entries depends on the
183                  requirements of the currently connected remote device.
184
185              port:
186                type: object
187
188                properties:
189                  endpoint:
190                    type: object
191
192                    properties:
193                      remote-endpoint:
194                        description: phandle to the MAX9286 sink endpoint.
195
196                    required:
197                      - remote-endpoint
198
199                    additionalProperties: false
200
201                required:
202                  - endpoint
203
204                additionalProperties: false
205
206            required:
207              - compatible
208              - reg
209              - port
210
211            additionalProperties: false
212
213        additionalProperties: false
214
215    additionalProperties: false
216
217required:
218  - compatible
219  - reg
220  - ports
221  - i2c-mux
222  - gpio-controller
223
224additionalProperties: false
225
226examples:
227  - |
228    #include <dt-bindings/gpio/gpio.h>
229
230    i2c@e66d8000 {
231      #address-cells = <1>;
232      #size-cells = <0>;
233
234      reg = <0 0xe66d8000>;
235
236      gmsl-deserializer@2c {
237        compatible = "maxim,max9286";
238        reg = <0x2c>;
239        poc-supply = <&camera_poc_12v>;
240        enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
241
242        gpio-controller;
243        #gpio-cells = <2>;
244
245        ports {
246          #address-cells = <1>;
247          #size-cells = <0>;
248
249          port@0 {
250            reg = <0>;
251
252            max9286_in0: endpoint {
253              remote-endpoint = <&rdacm20_out0>;
254            };
255          };
256
257          port@1 {
258            reg = <1>;
259
260            max9286_in1: endpoint {
261              remote-endpoint = <&rdacm20_out1>;
262            };
263          };
264
265          port@2 {
266            reg = <2>;
267
268            max9286_in2: endpoint {
269              remote-endpoint = <&rdacm20_out2>;
270            };
271          };
272
273          port@3 {
274            reg = <3>;
275
276            max9286_in3: endpoint {
277              remote-endpoint = <&rdacm20_out3>;
278            };
279          };
280
281          port@4 {
282            reg = <4>;
283
284            max9286_out: endpoint {
285              data-lanes = <1 2 3 4>;
286              remote-endpoint = <&csi40_in>;
287            };
288          };
289        };
290
291        i2c-mux {
292          #address-cells = <1>;
293          #size-cells = <0>;
294
295          i2c@0 {
296            #address-cells = <1>;
297            #size-cells = <0>;
298            reg = <0>;
299
300            camera@51 {
301              compatible = "imi,rdacm20";
302              reg = <0x51>, <0x61>;
303
304              port {
305                rdacm20_out0: endpoint {
306                  remote-endpoint = <&max9286_in0>;
307                };
308              };
309
310            };
311          };
312
313          i2c@1 {
314            #address-cells = <1>;
315            #size-cells = <0>;
316            reg = <1>;
317
318            camera@52 {
319              compatible = "imi,rdacm20";
320              reg = <0x52>, <0x62>;
321
322              port {
323                rdacm20_out1: endpoint {
324                  remote-endpoint = <&max9286_in1>;
325                };
326              };
327            };
328          };
329
330          i2c@2 {
331            #address-cells = <1>;
332            #size-cells = <0>;
333            reg = <2>;
334
335            camera@53 {
336              compatible = "imi,rdacm20";
337              reg = <0x53>, <0x63>;
338
339              port {
340                rdacm20_out2: endpoint {
341                  remote-endpoint = <&max9286_in2>;
342                };
343              };
344            };
345          };
346
347          i2c@3 {
348            #address-cells = <1>;
349            #size-cells = <0>;
350            reg = <3>;
351
352            camera@54 {
353              compatible = "imi,rdacm20";
354              reg = <0x54>, <0x64>;
355
356              port {
357                rdacm20_out3: endpoint {
358                  remote-endpoint = <&max9286_in3>;
359                };
360              };
361            };
362          };
363        };
364      };
365    };
366