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