/*
 * PHYTEC phyCORE-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 = "PHYTEC phyCORE-LPC3250 board based on NXP LPC3250";
	compatible = "phytec,phy3250", "nxp,lpc3250";
	#address-cells = <1>;
	#size-cells = <1>;

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

	ahb {
		mac: ethernet@31060000 {
			phy-mode = "rmii";
			use-iram;
		};

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

/*
		usbd@31020000 {
			transceiver = <&isp1301>;
			status = "okay";
		};
*/

		clcd@31040000 {
			status = "okay";
		};

		/* 64MB Flash via SLC NAND controller */
		slc: flash@20020000 {
			status = "okay";
			#address-cells = <1>;
			#size-cells = <1>;

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

			mtd0@00000000 {
				label = "phy3250-boot";
				reg = <0x00000000 0x00064000>;
				read-only;
			};

			mtd1@00064000 {
				label = "phy3250-uboot";
				reg = <0x00064000 0x00190000>;
				read-only;
			};

			mtd2@001f4000 {
				label = "phy3250-ubt-prms";
				reg = <0x001f4000 0x00010000>;
			};

			mtd3@00204000 {
				label = "phy3250-kernel";
				reg = <0x00204000 0x00400000>;
			};

			mtd4@00604000 {
				label = "phy3250-rootfs";
				reg = <0x00604000 0x039fc000>;
			};
		};

		apb {
			uart5: serial@40090000 {
				status = "okay";
			};

			uart3: serial@40080000 {
				status = "okay";
			};

			i2c1: i2c@400A0000 {
				clock-frequency = <100000>;

				pcf8563: rtc@51 {
					compatible = "nxp,pcf8563";
					reg = <0x51>;
				};

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

			i2c2: i2c@400A8000 {
				clock-frequency = <100000>;
			};

			i2cusb: i2c@31020300 {
				clock-frequency = <100000>;

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

			ssp0: ssp@20084000 {
				#address-cells = <1>;
				#size-cells = <0>;
				num-cs = <1>;
				cs-gpios = <&gpio 3 5 0>;

				eeprom: at25@0 {
					pl022,interface = <0>;
					pl022,com-mode = <0>;
					pl022,rx-level-trig = <1>;
					pl022,tx-level-trig = <1>;
					pl022,ctrl-len = <11>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;

					at25,byte-len = <0x8000>;
					at25,addr-mode = <2>;
					at25,page-size = <64>;

					compatible = "atmel,at25";
					reg = <0>;
					spi-max-frequency = <5000000>;
				};
			};

			sd@20098000 {
				wp-gpios = <&gpio 3 0 0>;
				cd-gpios = <&gpio 3 1 0>;
				cd-inverted;
				bus-width = <4>;
				status = "okay";
			};
		};

		fab {
			uart2: serial@40018000 {
				status = "okay";
			};

			tsc@40048000 {
				status = "okay";
			};

			key@40050000 {
				status = "okay";
				keypad,num-rows = <1>;
				keypad,num-columns = <1>;
				nxp,debounce-delay-ms = <3>;
				nxp,scan-delay-ms = <34>;
				linux,keymap = <0x00000002>;
			};
		};
	};

	leds {
		compatible = "gpio-leds";

		led0 { /* red */
			gpios = <&gpio 5 1 0>; /* GPO_P3 1, GPIO 80, active high */
			default-state = "off";
		};

		led1 { /* green */
			gpios = <&gpio 5 14 0>; /* GPO_P3 14, GPIO 93, active high */
			linux,default-trigger = "heartbeat";
		};
	};
};
