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

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

	ethernet@18000000 {
		compatible = "smsc,lan89218", "smsc,lan9115";
		reg = <0 0x18000000 0 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";
	};

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

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

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

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

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

		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;

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

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