// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2017 Ideas on Board <kieran.bingham@ideasonboard.com> * Copyright (C) 2021 Jacopo Mondi <jacopo+renesas@jmondi.org> * * Device Tree Source (overlay) that describes GMSL camera connected to * Fakra connectors for the Eagle V3M and Condor V3H (and compatible) boards. * * The following cameras are currently supported: RDACM20 and RDACM21. * * The board .dts file that include this has to select which cameras are in use * by specifying the camera model with: * * #define GMSL_CAMERA_RDACM20 * or * #define GMSL_CAMERA_RDACM21 * * And which cameras are connected to the board by defining: * for GMSL channel 0: * #define GMSL_CAMERA_0 * #define GMSL_CAMERA_1 * #define GMSL_CAMERA_2 * #define GMSL_CAMERA_3 * * for GMSL channel 1: * #define GMSL_CAMERA_4 * #define GMSL_CAMERA_5 * #define GMSL_CAMERA_6 * #define GMSL_CAMERA_7 */ #include <dt-bindings/gpio/gpio.h> /* Validate the board file settings. */ #if !defined(GMSL_CAMERA_RDACM20) && !defined(GMSL_CAMERA_RDACM21) #error "Camera model should be defined by the board file" #endif #if defined(GMSL_CAMERA_RDACM20) && defined(GMSL_CAMERA_RDACM21) #error "A single camera model should be selected" #endif #if !defined(GMSL_CAMERA_0) && !defined(GMSL_CAMERA_1) && \ !defined(GMSL_CAMERA_2) && !defined(GMSL_CAMERA_3) && \ !defined(GMSL_CAMERA_4) && !defined(GMSL_CAMERA_5) && \ !defined(GMSL_CAMERA_6) && !defined(GMSL_CAMERA_7) #error "At least one camera should be selected" #endif /* Deduce from the enabled cameras which GMSL channels are active. */ #if defined(GMSL_CAMERA_0) || defined(GMSL_CAMERA_1) || \ defined(GMSL_CAMERA_2) || defined(GMSL_CAMERA_3) #define GMSL_0 #endif #if defined(GMSL_CAMERA_4) || defined(GMSL_CAMERA_5) || \ defined(GMSL_CAMERA_6) || defined(GMSL_CAMERA_7) #define GMSL_1 #endif /* Deduce the camera model compatible string. */ #if defined(GMSL_CAMERA_RDACM20) #define GMSL_CAMERA_MODEL "imi,rdacm20" #elif defined(GMSL_CAMERA_RDACM21) #define GMSL_CAMERA_MODEL "imi,rdacm21" #endif #ifdef GMSL_0 &vin0 { status = "okay"; }; &vin1 { status = "okay"; }; &vin2 { status = "okay"; }; &vin3 { status = "okay"; }; &gmsl0 { status = "okay"; #if defined(GMSL_CAMERA_RDACM21) maxim,reverse-channel-microvolt = <100000>; #endif ports { #ifdef GMSL_CAMERA_0 port@0 { max9286_in0: endpoint { remote-endpoint = <&fakra_con0>; }; }; #endif #ifdef GMSL_CAMERA_1 port@1 { max9286_in1: endpoint { remote-endpoint = <&fakra_con1>; }; }; #endif #ifdef GMSL_CAMERA_2 port@2 { max9286_in2: endpoint { remote-endpoint = <&fakra_con2>; }; }; #endif #ifdef GMSL_CAMERA_3 port@3 { max9286_in3: endpoint { remote-endpoint = <&fakra_con3>; }; }; #endif }; i2c-mux { #ifdef GMSL_CAMERA_0 i2c@0 { status = "okay"; camera@51 { compatible = GMSL_CAMERA_MODEL; reg = <0x51>, <0x61>; port { fakra_con0: endpoint { remote-endpoint = <&max9286_in0>; }; }; }; }; #endif #ifdef GMSL_CAMERA_1 i2c@1 { status = "okay"; camera@52 { compatible = GMSL_CAMERA_MODEL; reg = <0x52>, <0x62>; port { fakra_con1: endpoint { remote-endpoint = <&max9286_in1>; }; }; }; }; #endif #ifdef GMSL_CAMERA_2 i2c@2 { status = "okay"; camera@53 { compatible = GMSL_CAMERA_MODEL; reg = <0x53>, <0x63>; port { fakra_con2: endpoint { remote-endpoint = <&max9286_in2>; }; }; }; }; #endif #ifdef GMSL_CAMERA_3 i2c@3 { status = "okay"; camera@54 { compatible = GMSL_CAMERA_MODEL; reg = <0x54>, <0x64>; port { fakra_con3: endpoint { remote-endpoint = <&max9286_in3>; }; }; }; }; #endif }; }; #endif /* ifdef GMSL_0 */ #ifdef GMSL_1 &vin4 { status = "okay"; }; &vin5 { status = "okay"; }; &vin6 { status = "okay"; }; &vin7 { status = "okay"; }; &gmsl1 { status = "okay"; #if defined(GMSL_CAMERA_RDACM21) maxim,reverse-channel-microvolt = <100000>; #endif ports { #ifdef GMSL_CAMERA_4 port@0 { max9286_in4: endpoint { remote-endpoint = <&fakra_con4>; }; }; #endif #ifdef GMSL_CAMERA_5 port@1 { max9286_in5: endpoint { remote-endpoint = <&fakra_con5>; }; }; #endif #ifdef GMSL_CAMERA_6 port@2 { max9286_in6: endpoint { remote-endpoint = <&fakra_con6>; }; }; #endif #ifdef GMSL_CAMERA_7 port@3 { max9286_in7: endpoint { remote-endpoint = <&fakra_con7>; }; }; #endif }; i2c-mux { #ifdef GMSL_CAMERA_4 i2c@0 { status = "okay"; camera@55 { compatible = GMSL_CAMERA_MODEL; reg = <0x55>, <0x65>; port { fakra_con4: endpoint { remote-endpoint = <&max9286_in4>; }; }; }; }; #endif #ifdef GMSL_CAMERA_5 i2c@1 { status = "okay"; camera@56 { compatible = GMSL_CAMERA_MODEL; reg = <0x56>, <0x66>; port { fakra_con5: endpoint { remote-endpoint = <&max9286_in5>; }; }; }; }; #endif #ifdef GMSL_CAMERA_6 i2c@2 { status = "okay"; camera@57 { compatible = GMSL_CAMERA_MODEL; reg = <0x57>, <0x67>; port { fakra_con6: endpoint { remote-endpoint = <&max9286_in6>; }; }; }; }; #endif #ifdef GMSL_CAMERA_7 i2c@3 { status = "okay"; camera@58 { compatible = GMSL_CAMERA_MODEL; reg = <0x58>, <0x68>; port { fakra_con7: endpoint { remote-endpoint = <&max9286_in7>; }; }; }; }; #endif }; }; #endif /* ifdef GMSL_1 */