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  maxim,reverse-channel-microvolt:
54    minimum: 30000
55    maximum: 200000
56    default: 170000
57    description: |
58      Initial amplitude of the reverse control channel, in micro volts.
59
60      The initial amplitude shall be adjusted to a value compatible with the
61      configuration of the connected remote serializer.
62
63      Some camera modules (for example RDACM20) include an on-board MCU that
64      pre-programs the embedded serializer with power supply noise immunity
65      (high-threshold) enabled. A typical value of the deserializer's reverse
66      channel amplitude to communicate with pre-programmed serializers is
67      170000 micro volts.
68
69      A typical value for the reverse channel amplitude to communicate with
70      a remote serializer whose high-threshold noise immunity is not enabled
71      is 100000 micro volts
72
73  ports:
74    $ref: /schemas/graph.yaml#/properties/ports
75
76    properties:
77      port@0:
78        $ref: /schemas/graph.yaml#/properties/port
79        description: GMSL Input 0
80
81      port@1:
82        $ref: /schemas/graph.yaml#/properties/port
83        description: GMSL Input 1
84
85      port@2:
86        $ref: /schemas/graph.yaml#/properties/port
87        description: GMSL Input 2
88
89      port@3:
90        $ref: /schemas/graph.yaml#/properties/port
91        description: GMSL Input 3
92
93      port@4:
94        $ref: /schemas/graph.yaml#/$defs/port-base
95        unevaluatedProperties: false
96        description: CSI-2 Output
97
98        properties:
99          endpoint:
100            $ref: /schemas/media/video-interfaces.yaml#
101            unevaluatedProperties: false
102
103            properties:
104              data-lanes: true
105
106            required:
107              - data-lanes
108
109    required:
110      - port@4
111
112  i2c-mux:
113    type: object
114    $ref: /schemas/i2c/i2c-mux.yaml#
115    unevaluatedProperties: false
116    description: |
117      Each GMSL link is modelled as a child bus of an i2c bus multiplexer/switch.
118
119    patternProperties:
120      "^i2c@[0-3]$":
121        type: object
122        description: |
123          Child node of the i2c bus multiplexer which represents a GMSL link.
124          Each serializer device on the GMSL link remote end is represented with
125          an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL
126          channels.
127
128        properties:
129          reg:
130            description: The index of the GMSL channel.
131            maxItems: 1
132
133        patternProperties:
134          "^camera@[a-f0-9]+$":
135            type: object
136            description: |
137              The remote camera device, composed by a GMSL serializer and a
138              connected video source.
139
140            properties:
141              compatible:
142                description: The remote device compatible string.
143
144              reg:
145                minItems: 2
146                maxItems: 3
147                description: |
148                  The I2C addresses to be assigned to the remote devices through
149                  address reprogramming. The number of entries depends on the
150                  requirements of the currently connected remote device.
151
152              port:
153                $ref: /schemas/graph.yaml#/properties/port
154                description: Connection to the MAX9286 sink.
155
156            required:
157              - compatible
158              - reg
159              - port
160
161            additionalProperties: false
162
163required:
164  - compatible
165  - reg
166  - ports
167  - i2c-mux
168  - gpio-controller
169
170additionalProperties: false
171
172examples:
173  - |
174    #include <dt-bindings/gpio/gpio.h>
175
176    i2c@e66d8000 {
177        #address-cells = <1>;
178        #size-cells = <0>;
179
180        reg = <0 0xe66d8000>;
181
182        gmsl-deserializer@2c {
183            compatible = "maxim,max9286";
184            reg = <0x2c>;
185            poc-supply = <&camera_poc_12v>;
186            enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
187
188            gpio-controller;
189            #gpio-cells = <2>;
190
191            maxim,reverse-channel-microvolt = <170000>;
192
193            ports {
194                #address-cells = <1>;
195                #size-cells = <0>;
196
197                port@0 {
198                    reg = <0>;
199
200                    max9286_in0: endpoint {
201                        remote-endpoint = <&rdacm20_out0>;
202                    };
203                };
204
205                port@1 {
206                    reg = <1>;
207
208                    max9286_in1: endpoint {
209                        remote-endpoint = <&rdacm20_out1>;
210                    };
211                };
212
213                port@2 {
214                    reg = <2>;
215
216                    max9286_in2: endpoint {
217                        remote-endpoint = <&rdacm20_out2>;
218                    };
219                };
220
221                port@3 {
222                    reg = <3>;
223
224                    max9286_in3: endpoint {
225                        remote-endpoint = <&rdacm20_out3>;
226                    };
227                };
228
229                port@4 {
230                    reg = <4>;
231
232                    max9286_out: endpoint {
233                        data-lanes = <1 2 3 4>;
234                        remote-endpoint = <&csi40_in>;
235                    };
236                };
237            };
238
239            i2c-mux {
240                #address-cells = <1>;
241                #size-cells = <0>;
242
243                i2c@0 {
244                    #address-cells = <1>;
245                    #size-cells = <0>;
246                    reg = <0>;
247
248                    camera@51 {
249                        compatible = "imi,rdacm20";
250                        reg = <0x51>, <0x61>;
251
252                        port {
253                            rdacm20_out0: endpoint {
254                                remote-endpoint = <&max9286_in0>;
255                            };
256                        };
257
258                    };
259                };
260
261                i2c@1 {
262                    #address-cells = <1>;
263                    #size-cells = <0>;
264                    reg = <1>;
265
266                    camera@52 {
267                        compatible = "imi,rdacm20";
268                        reg = <0x52>, <0x62>;
269
270                        port {
271                            rdacm20_out1: endpoint {
272                                remote-endpoint = <&max9286_in1>;
273                            };
274                        };
275                    };
276                };
277
278                i2c@2 {
279                    #address-cells = <1>;
280                    #size-cells = <0>;
281                    reg = <2>;
282
283                    camera@53 {
284                        compatible = "imi,rdacm20";
285                        reg = <0x53>, <0x63>;
286
287                        port {
288                            rdacm20_out2: endpoint {
289                                remote-endpoint = <&max9286_in2>;
290                            };
291                        };
292                    };
293                };
294
295                i2c@3 {
296                    #address-cells = <1>;
297                    #size-cells = <0>;
298                    reg = <3>;
299
300                    camera@54 {
301                        compatible = "imi,rdacm20";
302                        reg = <0x54>, <0x64>;
303
304                        port {
305                            rdacm20_out3: endpoint {
306                                remote-endpoint = <&max9286_in3>;
307                            };
308                        };
309                    };
310                };
311            };
312        };
313    };
314