/*
 * Device Tree Source for the Koelsch board
 *
 * Copyright (C) 2013 Renesas Electronics Corporation
 * Copyright (C) 2013-2014 Renesas Solutions Corp.
 * Copyright (C) 2014 Cogent Embedded, Inc.
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

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

/ {
	model = "Koelsch";
	compatible = "renesas,koelsch", "renesas,r8a7791";

	chosen {
		bootargs = "console=ttySC6,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp";
	};

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

	memory@200000000 {
		device_type = "memory";
		reg = <2 0x00000000 0 0x40000000>;
	};

	lbsc {
		#address-cells = <1>;
		#size-cells = <1>;
	};

	gpio-keys {
		compatible = "gpio-keys";

		key-a {
			gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
			linux,code = <30>;
			label = "SW30";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-b {
			gpios = <&gpio7 1 GPIO_ACTIVE_LOW>;
			linux,code = <48>;
			label = "SW31";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-c {
			gpios = <&gpio7 2 GPIO_ACTIVE_LOW>;
			linux,code = <46>;
			label = "SW32";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-d {
			gpios = <&gpio7 3 GPIO_ACTIVE_LOW>;
			linux,code = <32>;
			label = "SW33";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-e {
			gpios = <&gpio7 4 GPIO_ACTIVE_LOW>;
			linux,code = <18>;
			label = "SW34";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-f {
			gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
			linux,code = <33>;
			label = "SW35";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
		key-g {
			gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
			linux,code = <34>;
			label = "SW36";
			gpio-key,wakeup;
			debounce-interval = <20>;
		};
	};

	leds {
		compatible = "gpio-leds";
		led6 {
			gpios = <&gpio2 19 GPIO_ACTIVE_HIGH>;
		};
		led7 {
			gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>;
		};
		led8 {
			gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>;
		};
	};

	vcc_sdhi0: regulator@0 {
		compatible = "regulator-fixed";

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

		gpio = <&gpio7 17 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	vccq_sdhi0: regulator@1 {
		compatible = "regulator-gpio";

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

		gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
		gpios-states = <1>;
		states = <3300000 1
			  1800000 0>;
	};

	vcc_sdhi1: regulator@2 {
		compatible = "regulator-fixed";

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

		gpio = <&gpio7 18 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	vccq_sdhi1: regulator@3 {
		compatible = "regulator-gpio";

		regulator-name = "SDHI1 VccQ";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;

		gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
		gpios-states = <1>;
		states = <3300000 1
			  1800000 0>;
	};

	vcc_sdhi2: regulator@4 {
		compatible = "regulator-fixed";

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

		gpio = <&gpio7 19 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	vccq_sdhi2: regulator@5 {
		compatible = "regulator-gpio";

		regulator-name = "SDHI2 VccQ";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;

		gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
		gpios-states = <1>;
		states = <3300000 1
			  1800000 0>;
	};
};

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

&i2c2 {
	pinctrl-0 = <&i2c2_pins>;
	pinctrl-names = "default";

	status = "okay";
	clock-frequency = <400000>;

	eeprom@50 {
		compatible = "renesas,24c02";
		reg = <0x50>;
		pagesize = <16>;
	};
};

&pfc {
	pinctrl-0 = <&du_pins &scif0_pins &scif1_pins>;
	pinctrl-names = "default";

	i2c2_pins: i2c {
		renesas,groups = "i2c2";
		renesas,function = "i2c2";
	};

	du_pins: du {
		renesas,groups = "du_rgb666", "du_sync", "du_clk_out_0";
		renesas,function = "du";
	};

	scif0_pins: serial0 {
		renesas,groups = "scif0_data_d";
		renesas,function = "scif0";
	};

	scif1_pins: serial1 {
		renesas,groups = "scif1_data_d";
		renesas,function = "scif1";
	};

	ether_pins: ether {
		renesas,groups = "eth_link", "eth_mdio", "eth_rmii";
		renesas,function = "eth";
	};

	phy1_pins: phy1 {
		renesas,groups = "intc_irq0";
		renesas,function = "intc";
	};

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

	sdhi1_pins: sd1 {
		renesas,groups = "sdhi1_data4", "sdhi1_ctrl";
		renesas,function = "sdhi1";
	};

	sdhi2_pins: sd2 {
		renesas,groups = "sdhi2_data4", "sdhi2_ctrl";
		renesas,function = "sdhi2";
	};

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

&ether {
	pinctrl-0 = <&ether_pins &phy1_pins>;
	pinctrl-names = "default";

	phy-handle = <&phy1>;
	renesas,ether-link-active-low;
	status = "ok";

	phy1: ethernet-phy@1 {
		reg = <1>;
		interrupt-parent = <&irqc0>;
		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
	};
};

&sata0 {
	status = "okay";
};

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

	vmmc-supply = <&vcc_sdhi0>;
	vqmmc-supply = <&vccq_sdhi0>;
	cd-gpios = <&gpio6 6 GPIO_ACTIVE_LOW>;
	wp-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&sdhi1 {
	pinctrl-0 = <&sdhi1_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&vcc_sdhi1>;
	vqmmc-supply = <&vccq_sdhi1>;
	cd-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>;
	wp-gpios = <&gpio6 15 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&sdhi2 {
	pinctrl-0 = <&sdhi2_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&vcc_sdhi2>;
	vqmmc-supply = <&vccq_sdhi2>;
	cd-gpios = <&gpio6 22 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&spi {
	pinctrl-0 = <&qspi_pins>;
	pinctrl-names = "default";

	status = "okay";

	flash: flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "spansion,s25fl512s";
		reg = <0>;
		spi-max-frequency = <30000000>;
		m25p,fast-read;

		partition@0 {
			label = "loader";
			reg = <0x00000000 0x00080000>;
			read-only;
		};
		partition@80000 {
			label = "bootenv";
			reg = <0x00080000 0x00080000>;
			read-only;
		};
		partition@100000 {
			label = "data";
			reg = <0x00100000 0x03f00000>;
		};
	};
};
