/*
 * P1022 DS Device Tree Source stub (no addresses or top-level ranges)
 *
 * Copyright 2012 Freescale Semiconductor Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of Freescale Semiconductor nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 *
 * ALTERNATIVELY, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") as published by the Free Software
 * Foundation, either version 2 of that License or (at your option) any
 * later version.
 *
 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

&board_lbc {
	nor@0,0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "cfi-flash";
		reg = <0x0 0x0 0x8000000>;
		bank-width = <2>;
		device-width = <1>;

		partition@0 {
			reg = <0x0 0x03000000>;
			label = "ramdisk-nor";
			read-only;
		};

		partition@3000000 {
			reg = <0x03000000 0x00e00000>;
			label = "diagnostic-nor";
			read-only;
		};

		partition@3e00000 {
			reg = <0x03e00000 0x00200000>;
			label = "dink-nor";
			read-only;
		};

		partition@4000000 {
			reg = <0x04000000 0x00400000>;
			label = "kernel-nor";
			read-only;
		};

		partition@4400000 {
			reg = <0x04400000 0x03b00000>;
			label = "jffs2-nor";
		};

		partition@7f00000 {
			reg = <0x07f00000 0x00080000>;
			label = "dtb-nor";
			read-only;
		};

		partition@7f80000 {
			reg = <0x07f80000 0x00080000>;
			label = "u-boot-nor";
			read-only;
		};
	};

	nand@2,0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "fsl,elbc-fcm-nand";
		reg = <0x2 0x0 0x40000>;

		partition@0 {
			reg = <0x0 0x02000000>;
			label = "u-boot-nand";
			read-only;
		};

		partition@2000000 {
			reg = <0x02000000 0x10000000>;
			label = "jffs2-nand";
		};

		partition@12000000 {
			reg = <0x12000000 0x10000000>;
			label = "ramdisk-nand";
			read-only;
		};

		partition@22000000 {
			reg = <0x22000000 0x04000000>;
			label = "kernel-nand";
		};

		partition@26000000 {
			reg = <0x26000000 0x01000000>;
			label = "dtb-nand";
			read-only;
		};

		partition@27000000 {
			reg = <0x27000000 0x19000000>;
			label = "reserved-nand";
		};
	};

	board-control@3,0 {
		compatible = "fsl,p1022ds-fpga", "fsl,fpga-ngpixis";
		reg = <3 0 0x30>;
		interrupt-parent = <&mpic>;
		/*
		 * IRQ8 is generated if the "EVENT" switch is pressed
		 * and PX_CTL[EVESEL] is set to 00.
		 */
		interrupts = <8 0 0 0>;
	};
};

&board_soc {
	i2c@3100 {
		wm8776:codec@1a {
			compatible = "wlf,wm8776";
			reg = <0x1a>;
			/*
			 * clock-frequency will be set by U-Boot if
			 * the clock is enabled.
			 */
		};
		rtc@68 {
			compatible = "dallas,ds3232";
			reg = <0x68>;
			interrupts = <0x1 0x1 0 0>;
		};
		adt7461@4c {
			compatible = "adi,adt7461";
			reg = <0x4c>;
		};
	};

	spi@7000 {
		flash@0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "spansion,s25sl12801", "jedec,spi-nor";
			reg = <0>;
			spi-max-frequency = <40000000>; /* input clock */

			partition@0 {
				label = "u-boot-spi";
				reg = <0x00000000 0x00100000>;
				read-only;
			};
			partition@100000 {
				label = "kernel-spi";
				reg = <0x00100000 0x00500000>;
				read-only;
			};
			partition@600000 {
				label = "dtb-spi";
				reg = <0x00600000 0x00100000>;
				read-only;
			};
			partition@700000 {
				label = "file system-spi";
				reg = <0x00700000 0x00900000>;
			};
		};
	};

	ssi@15000 {
		fsl,mode = "i2s-slave";
		codec-handle = <&wm8776>;
		fsl,ssi-asynchronous;
	};

	usb@22000 {
		phy_type = "ulpi";
	};

	usb@23000 {
		status = "disabled";
	};

	mdio@24000 {
		phy0: ethernet-phy@0 {
			interrupts = <3 1 0 0>;
			reg = <0x1>;
		};
		phy1: ethernet-phy@1 {
			interrupts = <9 1 0 0>;
			reg = <0x2>;
		};
		tbi-phy@2 {
			device_type = "tbi-phy";
			reg = <0x2>;
		};
	};

	ptp_clock@b0e00 {
		compatible = "fsl,etsec-ptp";
		reg = <0xb0e00 0xb0>;
		interrupts = <68 2 0 0 69 2 0 0>;
		fsl,tclk-period	= <5>;
		fsl,tmr-prsc	= <2>;
		fsl,tmr-add	= <0xc01ebd3d>;
		fsl,tmr-fiper1	= <999999995>;
		fsl,tmr-fiper2	= <99990>;
		fsl,max-adj	= <266499999>;
	};

	ethernet@b0000 {
		phy-handle = <&phy0>;
		phy-connection-type = "rgmii-id";
	};

	ethernet@b1000 {
		phy-handle = <&phy1>;
		phy-connection-type = "rgmii-id";
	};
};
