/*
 * Embedded Artists LPC3250 board
 *
 * Copyright 2012 Roland Stigge <stigge@antcom.de>
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/dts-v1/;
#include "lpc32xx.dtsi"

/ {
	model = "Embedded Artists LPC3250 board based on NXP LPC3250";
	compatible = "ea,ea3250", "nxp,lpc3250";
	#address-cells = <1>;
	#size-cells = <1>;

	memory {
		device_type = "memory";
		reg = <0x80000000 0x4000000>;
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		autorepeat;
		button@21 {
			label = "Interrupt Key";
			linux,code = <103>;
			gpios = <&gpio 4 1 0>; /* GPI_P3 1 */
		};
		key1 {
			label = "KEY1";
			linux,code = <1>;
			gpios = <&pca9532 0 0>;
		};
		key2 {
			label = "KEY2";
			linux,code = <2>;
			gpios = <&pca9532 1 0>;
		};
		key3 {
			label = "KEY3";
			linux,code = <3>;
			gpios = <&pca9532 2 0>;
		};
		key4 {
			label = "KEY4";
			linux,code = <4>;
			gpios = <&pca9532 3 0>;
		};
		joy0 {
			label = "Joystick Key 0";
			linux,code = <10>;
			gpios = <&gpio 2 0 0>; /* P2.0 */
		};
		joy1 {
			label = "Joystick Key 1";
			linux,code = <11>;
			gpios = <&gpio 2 1 0>; /* P2.1 */
		};
		joy2 {
			label = "Joystick Key 2";
			linux,code = <12>;
			gpios = <&gpio 2 2 0>; /* P2.2 */
		};
		joy3 {
			label = "Joystick Key 3";
			linux,code = <13>;
			gpios = <&gpio 2 3 0>; /* P2.3 */
		};
		joy4 {
			label = "Joystick Key 4";
			linux,code = <14>;
			gpios = <&gpio 2 4 0>; /* P2.4 */
		};
	};

	leds {
		compatible = "gpio-leds";

		/* LEDs on OEM Board */

		led1 {
			gpios = <&gpio 5 14 1>; /* GPO_P3 14, GPIO 93, active low */
			linux,default-trigger = "timer";
			default-state = "off";
		};

		led2 {
			gpios = <&gpio 2 10 1>; /* P2.10, active low */
			default-state = "off";
		};

		led3 {
			gpios = <&gpio 2 11 1>; /* P2.11, active low */
			default-state = "off";
		};

		led4 {
			gpios = <&gpio 2 12 1>; /* P2.12, active low */
			default-state = "off";
		};

		/* LEDs on Base Board */

		lede1 {
			gpios = <&pca9532 8 0>;
			default-state = "off";
		};
		lede2 {
			gpios = <&pca9532 9 0>;
			default-state = "off";
		};
		lede3 {
			gpios = <&pca9532 10 0>;
			default-state = "off";
		};
		lede4 {
			gpios = <&pca9532 11 0>;
			default-state = "off";
		};
		lede5 {
			gpios = <&pca9532 12 0>;
			default-state = "off";
		};
		lede6 {
			gpios = <&pca9532 13 0>;
			default-state = "off";
		};
		lede7 {
			gpios = <&pca9532 14 0>;
			default-state = "off";
		};
		lede8 {
			gpios = <&pca9532 15 0>;
			default-state = "off";
		};
	};
};

/* 3-axis accelerometer X,Y,Z (or AD-IN instead of Z) */
&adc {
	status = "okay";
};

&i2c1 {
	clock-frequency = <100000>;

	uda1380: uda1380@18 {
		compatible = "nxp,uda1380";
		reg = <0x18>;
		power-gpio = <&gpio 0x59 0>;
		reset-gpio = <&gpio 0x51 0>;
		dac-clk = "wspll";
	};

	eeprom@50 {
		compatible = "atmel,24c256";
		reg = <0x50>;
	};

	eeprom@57 {
		compatible = "atmel,24c64";
		reg = <0x57>;
	};

	pca9532: pca9532@60 {
		compatible = "nxp,pca9532";
		gpio-controller;
		#gpio-cells = <2>;
		reg = <0x60>;
	};
};

&i2c2 {
	clock-frequency = <100000>;
};

&i2cusb {
	clock-frequency = <100000>;

	isp1301: usb-transceiver@2d {
		compatible = "nxp,isp1301";
		reg = <0x2d>;
	};
};

&mac {
	phy-mode = "rmii";
	use-iram;
};

/* Here, choose exactly one from: ohci, usbd */
&ohci /* &usbd */ {
	transceiver = <&isp1301>;
	status = "okay";
};

&sd {
	wp-gpios = <&pca9532 5 0>;
	cd-gpios = <&pca9532 4 0>;
	cd-inverted;
	bus-width = <4>;
	status = "okay";
};

/* 128MB Flash via SLC NAND controller */
&slc {
	status = "okay";

	nxp,wdr-clks = <14>;
	nxp,wwidth = <260000000>;
	nxp,whold = <104000000>;
	nxp,wsetup = <200000000>;
	nxp,rdr-clks = <14>;
	nxp,rwidth = <34666666>;
	nxp,rhold = <104000000>;
	nxp,rsetup = <200000000>;
	nand-on-flash-bbt;
	gpios = <&gpio 5 19 1>; /* GPO_P3 19, active low */

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

		mtd0@0 {
			label = "ea3250-boot";
			reg = <0x00000000 0x00080000>;
			read-only;
		};

		mtd1@80000 {
			label = "ea3250-uboot";
			reg = <0x00080000 0x000c0000>;
			read-only;
		};

		mtd2@140000 {
			label = "ea3250-kernel";
			reg = <0x00140000 0x00400000>;
		};

		mtd3@540000 {
			label = "ea3250-rootfs";
			reg = <0x00540000 0x07ac0000>;
		};
	};
};

&uart1 {
	status = "okay";
};

&uart3 {
	status = "okay";
};

&uart5 {
	status = "okay";
};

&uart6 {
	status = "okay";
};
