// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for the Blanche board
 *
 * Copyright (C) 2014 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 = "Blanche";
	compatible = "renesas,blanche", "renesas,r8a7792";

	aliases {
		serial0 = &scif0;
		serial1 = &scif3;
	};

	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;
	};

	vga-encoder {
		compatible = "adi,adv7123";

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

			port@0 {
				reg = <0>;
				adv7123_in: endpoint {
					remote-endpoint = <&du_out_rgb1>;
				};
			};
			port@1 {
				reg = <1>;
				adv7123_out: endpoint {
					remote-endpoint = <&vga_in>;
				};
			};
		};
	};

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

		port {
			hdmi_con: endpoint {
				remote-endpoint = <&adv7511_out>;
			};
		};
	};

	vga {
		compatible = "vga-connector";

		port {
			vga_in: endpoint {
				remote-endpoint = <&adv7123_out>;
			};
		};
	};

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

	x2_clk: x2 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <65000000>;
	};

	keyboard {
		compatible = "gpio-keys";

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

		key-1 {
			linux,code = <KEY_1>;
			label = "SW2-1";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 10 GPIO_ACTIVE_LOW>;
		};
		key-2 {
			linux,code = <KEY_2>;
			label = "SW2-2";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 11 GPIO_ACTIVE_LOW>;
		};
		key-3 {
			linux,code = <KEY_3>;
			label = "SW2-3";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
		};
		key-4 {
			linux,code = <KEY_4>;
			label = "SW2-4";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
		};
		key-a {
			linux,code = <KEY_A>;
			label = "SW24";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio3 20 GPIO_ACTIVE_LOW>;
		};
		key-b {
			linux,code = <KEY_B>;
			label = "SW25";
			wakeup-source;
			debounce-interval = <20>;
			gpios = <&gpio11 2 GPIO_ACTIVE_LOW>;
		};
	};

	leds {
		compatible = "gpio-leds";

		led17 {
			gpios = <&gpio10 10 GPIO_ACTIVE_HIGH>;
		};
		led18 {
			gpios = <&gpio10 11 GPIO_ACTIVE_HIGH>;
		};
		led19 {
			gpios = <&gpio10 12 GPIO_ACTIVE_HIGH>;
		};
		led20 {
			gpios = <&gpio10 23 GPIO_ACTIVE_HIGH>;
		};
	};

	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;
	};
};

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

&can_clk {
	clock-frequency = <48000000>;
};

&lbsc {
	flash@0 {
		compatible = "cfi-flash";
		reg = <0x00000000 0x04000000>;
		pinctrl-0 = <&flash_pins>;
		pinctrl-names = "default";
		bank-width = <2>;

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

			partition@0 {
				label = "uboot";
				reg = <0x00000000 0x00040000>;
				read-only;
			};
			partition@40000 {
				label = "uboot-env";
				reg = <0x00040000 0x00040000>;
				read-only;
			};
			partition@80000 {
				label = "flash";
				reg = <0x00080000 0x03f80000>;
			};
		};
	};

	ethernet@18000000 {
		compatible = "smsc,lan89218", "smsc,lan9115";
		reg = <0x18000000 0x100>;
		phy-mode = "mii";
		interrupt-parent = <&irqc>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
		smsc,irq-push-pull;
		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";
	};

	scif3_pins: scif3 {
		groups = "scif3_data";
		function = "scif3";
	};

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

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

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

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

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

	flash_pins: flash {
		groups = "lbsc_cs0";
		function = "lbsc";
	};

	keyboard_pins: keyboard {
		pins = "GP_3_10", "GP_3_11", "GP_3_12", "GP_3_15", "GP_11_2";
		bias-pull-up;
	};

	pmic_irq_pins: pmicirq {
		groups = "intc_irq2";
		function = "intc";
	};
};

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

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

	status = "okay";
};

&scif3 {
	pinctrl-0 = <&scif3_pins>;
	pinctrl-names = "default";

	status = "okay";
};

&can0 {
	pinctrl-0 = <&can0_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";
};

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

	hdmi@39 {
		compatible = "adi,adv7511w";
		reg = <0x39>;
		interrupt-parent = <&irqc>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;

		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>;
				adv7511_in: endpoint {
					remote-endpoint = <&du_out_rgb0>;
				};
			};

			port@1 {
				reg = <1>;
				adv7511_out: endpoint {
					remote-endpoint = <&hdmi_con>;
				};
			};
		};
	};
};

&iic3 {
	status = "okay";

	pmic@58 {
		compatible = "dlg,da9063";
		reg = <0x58>;
		pinctrl-names = "default";
		pinctrl-0 = <&pmic_irq_pins>;
		interrupt-parent = <&irqc>;
		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
		interrupt-controller;
		#interrupt-cells = <2>;

		rtc {
			compatible = "dlg,da9063-rtc";
		};

		watchdog {
			compatible = "dlg,da9063-watchdog";
		};
	};
};

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

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

	ports {
		port@0 {
			endpoint {
				remote-endpoint = <&adv7511_in>;
			};
		};
		port@1 {
			endpoint {
				remote-endpoint = <&adv7123_in>;
			};
		};
	};
};
