// 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 */
