/*
 * Manroland mucmc52 board Device Tree Source
 *
 * Copyright (C) 2009 DENX Software Engineering GmbH
 * Heiko Schocher <hs@denx.de>
 * Copyright 2006-2007 Secret Lab Technologies Ltd.
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */

/include/ "mpc5200b.dtsi"

/* Timer pins that need to be in GPIO mode */
&gpt0 { gpio-controller; };
&gpt1 { gpio-controller; };
&gpt2 { gpio-controller; };
&gpt3 { gpio-controller; };

/* Disabled timers */
&gpt4 { status = "disabled"; };
&gpt5 { status = "disabled"; };
&gpt6 { status = "disabled"; };
&gpt7 { status = "disabled"; };

/ {
	model = "manroland,mucmc52";
	compatible = "manroland,mucmc52";

	soc5200@f0000000 {
		rtc@800 {
			status = "disabled";
		};

		can@900 {
			status = "disabled";
		};

		can@980 {
			status = "disabled";
		};

		spi@f00 {
			status = "disabled";
		};

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

		psc@2000 {		// PSC1
			compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
		};

		psc@2200 {		// PSC2
			compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
		};

		psc@2400 {		// PSC3
			status = "disabled";
		};

		psc@2600 {		// PSC4
			status = "disabled";
		};

		psc@2800 {		// PSC5
			status = "disabled";
		};

		psc@2c00 {		// PSC6
			compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
		};

		ethernet@3000 {
			phy-handle = <&phy0>;
		};

		mdio@3000 {
			phy0: ethernet-phy@0 {
				compatible = "intel,lxt971";
				reg = <0>;
			};
		};

		i2c@3d00 {
			status = "disabled";
		};

		i2c@3d40 {
			hwmon@2c {
				compatible = "ad,adm9240";
				reg = <0x2c>;
			};
			rtc@51 {
				compatible = "nxp,pcf8563";
				reg = <0x51>;
			};
		};
	};

	pci@f0000d00 {
		interrupt-map-mask = <0xf800 0 0 7>;
		interrupt-map = <
				/* IDSEL 0x10 */
				0x8000 0 0 1 &mpc5200_pic 0 3 3
				0x8000 0 0 2 &mpc5200_pic 0 3 3
				0x8000 0 0 3 &mpc5200_pic 0 2 3
				0x8000 0 0 4 &mpc5200_pic 0 1 3
				>;
		ranges = <0x42000000 0 0x60000000 0x60000000 0 0x10000000
			  0x02000000 0 0x90000000 0x90000000 0 0x10000000
			  0x01000000 0 0x00000000 0xa0000000 0 0x01000000>;
	};

	localbus {
		ranges = <0 0 0xff800000 0x00800000
			  1 0 0x80000000 0x00800000
			  3 0 0x80000000 0x00800000>;

		flash@0,0 {
			compatible = "cfi-flash";
			reg = <0 0 0x00800000>;
			bank-width = <4>;
			device-width = <2>;
			#size-cells = <1>;
			#address-cells = <1>;
			partition@0 {
				label = "DTS";
				reg = <0x0 0x00100000>;
			};
			partition@100000 {
				label = "Kernel";
				reg = <0x100000 0x00200000>;
			};
			partition@300000 {
				label = "RootFS";
				reg = <0x00300000 0x00200000>;
			};
			partition@500000 {
				label = "user";
				reg = <0x00500000 0x00200000>;
			};
			partition@700000 {
				label = "U-Boot";
				reg = <0x00700000 0x00040000>;
			};
			partition@740000 {
				label = "Env";
				reg = <0x00740000 0x00020000>;
			};
			partition@760000 {
				label = "red. Env";
				reg = <0x00760000 0x00020000>;
			};
			partition@780000 {
				label = "reserve";
				reg = <0x00780000 0x00080000>;
			};
		};

		simple100: gpio-controller-100@3,600100 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600100 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple104: gpio-controller-104@3,600104 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600104 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple200: gpio-controller-200@3,600200 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600200 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple201: gpio-controller-201@3,600201 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600201 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple202: gpio-controller-202@3,600202 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600202 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple203: gpio-controller-203@3,600203 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600203 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple204: gpio-controller-204@3,600204 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600204 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple206: gpio-controller-206@3,600206 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600206 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple207: gpio-controller-207@3,600207 {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x00600207 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};
		simple20f: gpio-controller-20f@3,60020f {
			compatible = "manroland,mucmc52-aux-gpio";
			reg = <3 0x0060020f 0x1>;
			gpio-controller;
			#gpio-cells = <2>;
		};

	};
};
