blob: e0930d1ba3aa005b227eba2794b7603812590254 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2017 Ideas on Board <kieran.bingham@ideasonboard.com>
4 * Copyright (C) 2021 Jacopo Mondi <jacopo+renesas@jmondi.org>
5 *
6 * Device Tree Source (overlay) that describes GMSL camera connected to
7 * Fakra connectors for the Eagle V3M and Condor V3H (and compatible) boards.
8 *
9 * The following cameras are currently supported: RDACM20 and RDACM21.
10 *
11 * The board .dts file that include this has to select which cameras are in use
12 * by specifying the camera model with:
13 *
14 * #define GMSL_CAMERA_RDACM20
15 * or
16 * #define GMSL_CAMERA_RDACM21
17 *
18 * And which cameras are connected to the board by defining:
19 * for GMSL channel 0:
20 * #define GMSL_CAMERA_0
21 * #define GMSL_CAMERA_1
22 * #define GMSL_CAMERA_2
23 * #define GMSL_CAMERA_3
24 *
25 * for GMSL channel 1:
26 * #define GMSL_CAMERA_4
27 * #define GMSL_CAMERA_5
28 * #define GMSL_CAMERA_6
29 * #define GMSL_CAMERA_7
30 */
31
32#include <dt-bindings/gpio/gpio.h>
33
34/* Validate the board file settings. */
35#if !defined(GMSL_CAMERA_RDACM20) && !defined(GMSL_CAMERA_RDACM21)
36#error "Camera model should be defined by the board file"
37#endif
38
39#if defined(GMSL_CAMERA_RDACM20) && defined(GMSL_CAMERA_RDACM21)
40#error "A single camera model should be selected"
41#endif
42
43#if !defined(GMSL_CAMERA_0) && !defined(GMSL_CAMERA_1) && \
44 !defined(GMSL_CAMERA_2) && !defined(GMSL_CAMERA_3) && \
45 !defined(GMSL_CAMERA_4) && !defined(GMSL_CAMERA_5) && \
46 !defined(GMSL_CAMERA_6) && !defined(GMSL_CAMERA_7)
47#error "At least one camera should be selected"
48#endif
49
50/* Deduce from the enabled cameras which GMSL channels are active. */
51#if defined(GMSL_CAMERA_0) || defined(GMSL_CAMERA_1) || \
52 defined(GMSL_CAMERA_2) || defined(GMSL_CAMERA_3)
53#define GMSL_0
54#endif
55
56#if defined(GMSL_CAMERA_4) || defined(GMSL_CAMERA_5) || \
57 defined(GMSL_CAMERA_6) || defined(GMSL_CAMERA_7)
58#define GMSL_1
59#endif
60
61/* Deduce the camera model compatible string. */
62#if defined(GMSL_CAMERA_RDACM20)
63#define GMSL_CAMERA_MODEL "imi,rdacm20"
64#elif defined(GMSL_CAMERA_RDACM21)
65#define GMSL_CAMERA_MODEL "imi,rdacm21"
66#endif
67
68#ifdef GMSL_0
69&vin0 {
70 status = "okay";
71};
72
73&vin1 {
74 status = "okay";
75};
76
77&vin2 {
78 status = "okay";
79};
80
81&vin3 {
82 status = "okay";
83};
84
85&gmsl0 {
86 status = "okay";
87
88#if defined(GMSL_CAMERA_RDACM21)
89 maxim,reverse-channel-microvolt = <100000>;
90#endif
91
92 ports {
93#ifdef GMSL_CAMERA_0
94 port@0 {
95 max9286_in0: endpoint {
96 remote-endpoint = <&fakra_con0>;
97 };
98 };
99#endif
100
101#ifdef GMSL_CAMERA_1
102 port@1 {
103 max9286_in1: endpoint {
104 remote-endpoint = <&fakra_con1>;
105 };
106
107 };
108#endif
109
110#ifdef GMSL_CAMERA_2
111 port@2 {
112 max9286_in2: endpoint {
113 remote-endpoint = <&fakra_con2>;
114 };
115
116 };
117#endif
118
119#ifdef GMSL_CAMERA_3
120 port@3 {
121 max9286_in3: endpoint {
122 remote-endpoint = <&fakra_con3>;
123 };
124
125 };
126#endif
127 };
128
129 i2c-mux {
130#ifdef GMSL_CAMERA_0
131 i2c@0 {
132 status = "okay";
133
134 camera@51 {
135 compatible = GMSL_CAMERA_MODEL;
136 reg = <0x51>, <0x61>;
137
138 port {
139 fakra_con0: endpoint {
140 remote-endpoint = <&max9286_in0>;
141 };
142 };
143 };
144 };
145#endif
146
147#ifdef GMSL_CAMERA_1
148 i2c@1 {
149 status = "okay";
150
151 camera@52 {
152 compatible = GMSL_CAMERA_MODEL;
153 reg = <0x52>, <0x62>;
154
155 port {
156 fakra_con1: endpoint {
157 remote-endpoint = <&max9286_in1>;
158 };
159 };
160 };
161 };
162#endif
163
164#ifdef GMSL_CAMERA_2
165 i2c@2 {
166 status = "okay";
167
168 camera@53 {
169 compatible = GMSL_CAMERA_MODEL;
170 reg = <0x53>, <0x63>;
171
172 port {
173 fakra_con2: endpoint {
174 remote-endpoint = <&max9286_in2>;
175 };
176 };
177 };
178 };
179#endif
180
181#ifdef GMSL_CAMERA_3
182 i2c@3 {
183 status = "okay";
184
185 camera@54 {
186 compatible = GMSL_CAMERA_MODEL;
187 reg = <0x54>, <0x64>;
188
189 port {
190 fakra_con3: endpoint {
191 remote-endpoint = <&max9286_in3>;
192 };
193 };
194 };
195 };
196#endif
197 };
198};
199#endif /* ifdef GMSL_0 */
200
201#ifdef GMSL_1
202&vin4 {
203 status = "okay";
204};
205
206&vin5 {
207 status = "okay";
208};
209
210&vin6 {
211 status = "okay";
212};
213
214&vin7 {
215 status = "okay";
216};
217
218&gmsl1 {
219 status = "okay";
220
221#if defined(GMSL_CAMERA_RDACM21)
222 maxim,reverse-channel-microvolt = <100000>;
223#endif
224
225 ports {
226#ifdef GMSL_CAMERA_4
227 port@0 {
228 max9286_in4: endpoint {
229 remote-endpoint = <&fakra_con4>;
230 };
231 };
232#endif
233
234#ifdef GMSL_CAMERA_5
235 port@1 {
236 max9286_in5: endpoint {
237 remote-endpoint = <&fakra_con5>;
238 };
239
240 };
241#endif
242
243#ifdef GMSL_CAMERA_6
244 port@2 {
245 max9286_in6: endpoint {
246 remote-endpoint = <&fakra_con6>;
247 };
248
249 };
250#endif
251
252#ifdef GMSL_CAMERA_7
253 port@3 {
254 max9286_in7: endpoint {
255 remote-endpoint = <&fakra_con7>;
256 };
257
258 };
259#endif
260 };
261
262 i2c-mux {
263#ifdef GMSL_CAMERA_4
264 i2c@0 {
265 status = "okay";
266
267 camera@55 {
268 compatible = GMSL_CAMERA_MODEL;
269 reg = <0x55>, <0x65>;
270
271 port {
272 fakra_con4: endpoint {
273 remote-endpoint = <&max9286_in4>;
274 };
275 };
276 };
277 };
278#endif
279
280#ifdef GMSL_CAMERA_5
281 i2c@1 {
282 status = "okay";
283
284 camera@56 {
285 compatible = GMSL_CAMERA_MODEL;
286 reg = <0x56>, <0x66>;
287
288 port {
289 fakra_con5: endpoint {
290 remote-endpoint = <&max9286_in5>;
291 };
292 };
293 };
294 };
295#endif
296
297#ifdef GMSL_CAMERA_6
298 i2c@2 {
299 status = "okay";
300
301 camera@57 {
302 compatible = GMSL_CAMERA_MODEL;
303 reg = <0x57>, <0x67>;
304
305 port {
306 fakra_con6: endpoint {
307 remote-endpoint = <&max9286_in6>;
308 };
309 };
310 };
311 };
312#endif
313
314#ifdef GMSL_CAMERA_7
315 i2c@3 {
316 status = "okay";
317
318 camera@58 {
319 compatible = GMSL_CAMERA_MODEL;
320 reg = <0x58>, <0x68>;
321
322 port {
323 fakra_con7: endpoint {
324 remote-endpoint = <&max9286_in7>;
325 };
326 };
327 };
328 };
329#endif
330 };
331};
332#endif /* ifdef GMSL_1 */