/*
 * Reference 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/pwm/pwm.h>

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

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

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

	leds {
		compatible = "gpio-leds";
		led1 {
			gpios = <&pfc 102 GPIO_ACTIVE_HIGH>;
		};
		led2 {
			gpios = <&pfc 111 GPIO_ACTIVE_HIGH>;
		};
		led3 {
			gpios = <&pfc 110 GPIO_ACTIVE_HIGH>;
		};
		led4 {
			gpios = <&pfc 177 GPIO_ACTIVE_HIGH>;
		};
	};

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

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

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

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

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

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

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

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

&tpu {
	status = "okay";
};

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

	vmmc-supply = <&reg_3p3v>;
	bus-width = <8>;
	non-removable;
	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";
};
