1 // 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 */
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.