// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for the Wheat board
 *
 * Copyright (C) 2016 Renesas Electronics Corporation
 * Copyright (C) 2016 Cogent  Embedded, Inc.
 */

/dts-v1/;
#include "r8a7792.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
	model = "Wheat";
	compatible = "renesas,wheat", "renesas,r8a7792";

	aliases {
		serial0 = &scif0;
	};

	chosen {
		bootargs = "ignore_loglevel rw root=/dev/nfs ip=on";
		stdout-path = "serial0:115200n8";
	};

	memory@40000000 {
		device_type = "memory";
		reg = <0 0x40000000 0 0x40000000>;
	};

	d1_8v: regulator-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "D1.8V";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-boot-on;
		regulator-always-on;
	};

	d3_3v: regulator-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "D3.3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
	};

	keyboard {
		compatible = "gpio-keys";

		key-a {
			linux,code = <KEY_A>;
			label = "SW2";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 20 GPIO_ACTIVE_LOW>;
		};
		key-b {
			linux,code = <KEY_B>;
			label = "SW3";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio11 2 GPIO_ACTIVE_LOW>;
		};
	};

	vcc_sdhi0: regulator-vcc-sdhi0 {
		compatible = "regulator-fixed";

		regulator-name = "SDHI0 Vcc";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&gpio11 12 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	hdmi-out0 {
		compatible = "hdmi-connector";
		type = "a";

		port {
			hdmi_con0: endpoint {
				remote-endpoint = <&adv7513_0_out>;
			};
		};
	};

	hdmi-out1 {
		compatible = "hdmi-connector";
		type = "a";

		port {
			hdmi_con1: endpoint {
				remote-endpoint = <&adv7513_1_out>;
			};
		};
	};

	osc2_clk: osc2 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <74250000>;
	};
};

&extal_clk {
	clock-frequency = <20000000>;
};

&lbsc {
	ethernet@18000000 {
		compatible = "smsc,lan89218", "smsc,lan9115";
		reg = <0x18000000 0x100>;
		phy-mode = "mii";
		interrupts-extended = <&irqc 0 IRQ_TYPE_EDGE_FALLING>;
		smsc,irq-push-pull;
		smsc,save-mac-address;
		reg-io-width = <4>;
		vddvario-supply = <&d3_3v>;
		vdd33a-supply = <&d3_3v>;

		pinctrl-0 = <&lan89218_pins>;
		pinctrl-names = "default";
	};
};

&pfc {
	scif0_pins: scif0 {
		groups = "scif0_data";
		function = "scif0";
	};

	lan89218_pins: lan89218 {
		intc {
			groups = "intc_irq0";
			function = "intc";
		};
		lbsc {
			groups = "lbsc_ex_cs0";
			function = "lbsc";
		};
	};

	can0_pins: can0 {
		groups = "can0_data";
		function = "can0";
	};

	can1_pins: can1 {
		groups = "can1_data";
		function = "can1";
	};

	sdhi0_pins: sdhi0 {
		groups = "sdhi0_data4", "sdhi0_ctrl";
		function = "sdhi0";
	};

	qspi_pins: qspi {
		groups = "qspi_ctrl", "qspi_data4";
		function = "qspi";
	};

	du0_pins: du0 {
		groups = "du0_rgb888", "du0_sync", "du0_disp";
		function = "du0";
	};

	du1_pins: du1 {
		groups = "du1_rgb666", "du1_sync", "du1_disp";
		function = "du1";
	};
};

&rwdt {
	timeout-sec = <60>;
	status = "okay";
};

&scif0 {
	pinctrl-0 = <&scif0_pins>;
	pinctrl-names = "default";
	bootph-all;

	status = "okay";
};

&can0 {
	pinctrl-0 = <&can0_pins>;
	pinctrl-names = "default";

	status = "okay";
};

&can1 {
	pinctrl-0 = <&can1_pins>;
	pinctrl-names = "default";

	status = "okay";
};

&sdhi0 {
	pinctrl-0 = <&sdhi0_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&vcc_sdhi0>;
	cd-gpios = <&gpio11 11 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&qspi {
	pinctrl-0 = <&qspi_pins>;
	pinctrl-names = "default";
	status = "okay";

	flash@0 {
		compatible = "spansion,s25fl512s", "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <30000000>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		spi-cpol;
		spi-cpha;
		m25p,fast-read;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "loader";
				reg = <0x00000000 0x00040000>;
				read-only;
			};
			partition@40000 {
				label = "user";
				reg = <0x00040000 0x00400000>;
				read-only;
			};
			partition@440000 {
				label = "flash";
				reg = <0x00440000 0x03bc0000>;
			};
		};
	};
};

&i2c4 {
	status = "okay";
	clock-frequency = <400000>;

	/*
	 * The adv75xx resets its addresses to defaults during low power mode.
	 * Because we have two ADV7513 devices on the same bus, we must change
	 * both of them away from the defaults so that they do not conflict.
	 */
	hdmi@3d {
		compatible = "adi,adv7513";
		reg = <0x3d>, <0x4d>, <0x2d>, <0x5d>;
		reg-names = "main", "edid", "cec", "packet";

		avdd-supply = <&d1_8v>;
		dvdd-supply = <&d1_8v>;
		pvdd-supply = <&d1_8v>;
		dvdd-3v-supply = <&d3_3v>;
		bgvdd-supply = <&d1_8v>;

		adi,input-depth = <8>;
		adi,input-colorspace = "rgb";
		adi,input-clock = "1x";

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

			port@0 {
				reg = <0>;
				adv7513_0_in: endpoint {
					remote-endpoint = <&du_out_rgb0>;
				};
			};

			port@1 {
				reg = <1>;
				adv7513_0_out: endpoint {
					remote-endpoint = <&hdmi_con0>;
				};
			};
		};
	};

	hdmi@39 {
		compatible = "adi,adv7513";
		reg = <0x39>, <0x49>, <0x29>, <0x59>;
		reg-names = "main", "edid", "cec", "packet";

		avdd-supply = <&d1_8v>;
		dvdd-supply = <&d1_8v>;
		pvdd-supply = <&d1_8v>;
		dvdd-3v-supply = <&d3_3v>;
		bgvdd-supply = <&d1_8v>;

		adi,input-depth = <8>;
		adi,input-colorspace = "rgb";
		adi,input-clock = "1x";

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

			port@0 {
				reg = <0>;
				adv7513_1_in: endpoint {
					remote-endpoint = <&du_out_rgb1>;
				};
			};

			port@1 {
				reg = <1>;
				adv7513_1_out: endpoint {
					remote-endpoint = <&hdmi_con1>;
				};
			};
		};
	};
};

&du {
	pinctrl-0 = <&du0_pins>, <&du1_pins>;
	pinctrl-names = "default";

	clocks = <&cpg CPG_MOD 724>, <&cpg CPG_MOD 723>, <&osc2_clk>;
	clock-names = "du.0", "du.1", "dclkin.0";
	status = "okay";

	ports {
		port@0 {
			endpoint {
				remote-endpoint = <&adv7513_0_in>;
			};
		};
		port@1 {
			endpoint {
				remote-endpoint = <&adv7513_1_in>;
			};
		};
	};
};
