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