linux/arch/arm64/boot/dts/renesas/r8a77970-eagle-function-expansion.dtso

// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for the Eagle V3M Function expansion board.
 *
 * Copyright (C) 2024 Niklas Söderlund <[email protected]>
 */

/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
	/* CN4 */
	/* Eagle: SW18 set to OFF */
	cvbs-in-cn4 {
		compatible = "composite-video-connector";
		label = "CVBS IN CN4";

		port {
			cvbs_con: endpoint {
				remote-endpoint = <&adv7482_ain7>;
			};
		};
	};

	/* CN2 */
	/* Eagle: SW35 set 5, 6 and 8 to OFF */
	hdmi-in-cn2 {
		compatible = "hdmi-connector";
		label = "HDMI IN CN2";
		type = "a";

		port {
			hdmi_in_con2: endpoint {
				remote-endpoint = <&adv7612_in>;
			};
		};
	};

	/* CN3 */
	/* Eagle: SW18 set to OFF */
	hdmi-in-cn3 {
		compatible = "hdmi-connector";
		label = "HDMI IN CN3";
		type = "a";

		port {
			hdmi_in_con: endpoint {
				remote-endpoint = <&adv7482_hdmi>;
			};
		};
	};
};

/* Disconnect MAX9286 GMSL I2C. */
&i2c3 {
	status = "disabled";
};

/* Connect expansion board I2C. */
&i2c0 {
	#address-cells = <1>;
	#size-cells = <0>;

	gpio@27 {
		compatible = "onnn,pca9654";
		reg = <0x27>;
		gpio-controller;
		#gpio-cells = <2>;

		vin0_adv7612_en {
			gpio-hog;
			gpios = <3 GPIO_ACTIVE_LOW>;
			output-high;
			line-name = "VIN0_ADV7612_ENn";
		};
	};

	hdmi-decoder@4c {
		compatible = "adi,adv7612";
		reg = <0x4c>, <0x50>, <0x52>, <0x54>, <0x56>, <0x58>;
		reg-names = "main", "afe", "rep", "edid", "hdmi", "cp";
		interrupt-parent = <&gpio3>;
		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
		default-input = <0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;

				adv7612_in: endpoint {
					remote-endpoint = <&hdmi_in_con2>;
				};
			};

			port@2 {
				reg = <2>;

				adv7612_out: endpoint {
					remote-endpoint = <&vin0_in>;
				};
			};
		};
	};

	video-receiver@70 {
		compatible = "adi,adv7482";
		reg = <0x70 0x71 0x72 0x73 0x74 0x75
		       0x60 0x61 0x62 0x63 0x64 0x65>;
		reg-names = "main", "dpll", "cp", "hdmi", "edid", "repeater",
			    "infoframe", "cbus", "cec", "sdp", "txa", "txb" ;
		interrupt-parent = <&gpio3>;
		interrupts = <03 IRQ_TYPE_LEVEL_LOW>, <04 IRQ_TYPE_LEVEL_LOW>;
		interrupt-names = "intrq1", "intrq2";

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@7 {
				reg = <7>;

				adv7482_ain7: endpoint {
					remote-endpoint = <&cvbs_con>;
				};
			};

			port@8 {
				reg = <8>;

				adv7482_hdmi: endpoint {
					remote-endpoint = <&hdmi_in_con>;
				};
			};

			port@a {
				reg = <10>;

				adv7482_txa: endpoint {
					clock-lanes = <0>;
					data-lanes = <1 2 3 4>;
					remote-endpoint = <&csi40_in>;
				};
			};
		};
	};

};

&csi40 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;

			csi40_in: endpoint {
				clock-lanes = <0>;
				data-lanes = <1 2 3 4>;
				remote-endpoint = <&adv7482_txa>;
			};
		};
	};
};

&pfc {
	vin0_pins_parallel: vin0 {
		groups = "vin0_data12", "vin0_sync", "vin0_clk", "vin0_clkenb";
		function = "vin0";
	};
};

&vin0 {
	status = "okay";

	pinctrl-0 = <&vin0_pins_parallel>;
	pinctrl-names = "default";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;

			vin0_in: endpoint {
				pclk-sample = <0>;
				hsync-active = <0>;
				vsync-active = <0>;
				remote-endpoint = <&adv7612_out>;
			};
		};
	};
};

&vin1 {
	status = "okay";
};

&vin2 {
	status = "okay";
};

&vin3 {
	status = "okay";
};