/*
 * Device Tree Source for the armadillo 800 eva board
 *
 * Copyright (C) 2012 Renesas Solutions Corp.
 *
 * 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 "r8a7740.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pwm/pwm.h>

/ {
	model = "armadillo 800 eva";
	compatible = "renesas,armadillo800eva", "renesas,r8a7740";

	aliases {
		serial1 = &scifa1;
	};

	chosen {
		bootargs = "console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp rw";
		stdout-path = &scifa1;
	};

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

	reg_3p3v: regulator@0 {
		compatible = "regulator-fixed";
		regulator-name = "fixed-3.3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		regulator-boot-on;
	};

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

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

		gpio = <&pfc 75 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

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

		regulator-name = "SDHI0 VccQ";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc_sdhi0>;

		enable-gpio = <&pfc 74 GPIO_ACTIVE_HIGH>;
		gpios = <&pfc 17 GPIO_ACTIVE_HIGH>;
		states = <3300000 0
			  1800000 1>;

		enable-active-high;
	};

	reg_5p0v: regulator@3 {
		compatible = "regulator-fixed";
		regulator-name = "fixed-5.0V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		regulator-boot-on;
	};

	keyboard {
		compatible = "gpio-keys";

		power-key {
			gpios = <&pfc 99 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			label = "SW3";
			wakeup-source;
		};

		back-key {
			gpios = <&pfc 100 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_BACK>;
			label = "SW4";
		};

		menu-key {
			gpios = <&pfc 97 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_MENU>;
			label = "SW5";
		};

		home-key {
			gpios = <&pfc 98 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_HOME>;
			label = "SW6";
		};
	};

	leds {
		compatible = "gpio-leds";
		led3 {
			gpios = <&pfc 102 GPIO_ACTIVE_HIGH>;
			label = "LED3";
		};
		led4 {
			gpios = <&pfc 111 GPIO_ACTIVE_HIGH>;
			label = "LED4";
		};
		led5 {
			gpios = <&pfc 110 GPIO_ACTIVE_HIGH>;
			label = "LED5";
		};
		led6 {
			gpios = <&pfc 177 GPIO_ACTIVE_HIGH>;
			label = "LED6";
		};
	};

	i2c2: i2c@2 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "i2c-gpio";
		gpios = <&pfc 208 GPIO_ACTIVE_HIGH /* sda */
			 &pfc 91 GPIO_ACTIVE_HIGH /* scl */
			>;
		i2c-gpio,delay-us = <5>;
	};

	backlight {
		compatible = "pwm-backlight";
		pwms = <&tpu 2 33333 PWM_POLARITY_INVERTED>;
		brightness-levels = <0 1 2 4 8 16 32 64 128 255>;
		default-brightness-level = <9>;
		pinctrl-0 = <&backlight_pins>;
		pinctrl-names = "default";
		power-supply = <&reg_5p0v>;
		enable-gpios = <&pfc 61 GPIO_ACTIVE_HIGH>;
	};

	sound {
		compatible = "simple-audio-card";

		simple-audio-card,format = "i2s";

		simple-audio-card,cpu {
			sound-dai = <&sh_fsi2 0>;
			bitclock-inversion;
		};

		simple-audio-card,codec {
			sound-dai = <&wm8978>;
			bitclock-master;
			frame-master;
			system-clock-frequency = <12288000>;
		};
	};
};

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

	phy-handle = <&phy0>;
	status = "okay";

	phy0: ethernet-phy@0 {
		reg = <0>;
	};
};

&extal1_clk {
	clock-frequency = <24000000>;
};
&extal2_clk {
	clock-frequency = <48000000>;
};
&fsibck_clk {
	clock-frequency = <12288000>;
};
&cpg_clocks {
	renesas,mode = <0x05>; /* MD_CK0 | MD_CK2 */
};

&cmt1 {
	status = "okay";
};

&i2c0 {
	status = "okay";
	touchscreen@55 {
		compatible = "sitronix,st1232";
		reg = <0x55>;
		interrupt-parent = <&irqpin1>;
		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-0 = <&st1232_pins>;
		pinctrl-names = "default";
		gpios = <&pfc 166 GPIO_ACTIVE_LOW>;
	};

	wm8978: codec@1a {
		#sound-dai-cells = <0>;
		compatible = "wlf,wm8978";
		reg = <0x1a>;
	};
};

&i2c2 {
	status = "okay";
	rtc@30 {
		compatible = "sii,s35390a";
		reg = <0x30>;
	};
};

&pfc {
	pinctrl-0 = <&lcd0_pins>;
	pinctrl-names = "default";

	ether_pins: ether {
		groups = "gether_mii", "gether_int";
		function = "gether";
	};

	scifa1_pins: serial1 {
		groups = "scifa1_data";
		function = "scifa1";
	};

	st1232_pins: touchscreen {
		groups = "intc_irq10";
		function = "intc";
	};

	backlight_pins: backlight {
		groups = "tpu0_to2_1";
		function = "tpu0";
	};

	mmc0_pins: mmc0 {
		groups = "mmc0_data8_1", "mmc0_ctrl_1";
		function = "mmc0";
	};

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

	fsia_pins: sounda {
		groups = "fsia_sclk_in", "fsia_mclk_out",
			 "fsia_data_in_1", "fsia_data_out_0";
		function = "fsia";
	};

	lcd0_pins: lcd0 {
		groups = "lcd0_data24_0", "lcd0_lclk_1", "lcd0_sync";
		function = "lcd0";

		/* DBGMD/LCDC0/FSIA MUX */
		gpio-hog;
		gpios = <176 0>;
		output-high;
	};
};

&tpu {
	status = "okay";
};

&mmcif0 {
	pinctrl-0 = <&mmc0_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&reg_3p3v>;
	bus-width = <8>;
	non-removable;
	status = "okay";
};

&scifa1 {
	pinctrl-0 = <&scifa1_pins>;
	pinctrl-names = "default";

	status = "okay";
};

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

	vmmc-supply = <&vcc_sdhi0>;
	vqmmc-supply = <&vccq_sdhi0>;
	bus-width = <4>;
	cd-gpios = <&pfc 167 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&sh_fsi2 {
	pinctrl-0 = <&fsia_pins>;
	pinctrl-names = "default";

	status = "okay";
};

&tmu0 {
	status = "okay";
};
