/*
 * Device Tree Source for the MPC5121e based ac14xx board
 *
 * Copyright 2012 Anatolij Gustschin <agust@denx.de>
 *
 * 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 <mpc5121.dtsi>

/ {
	model = "ac14xx";
	compatible = "ifm,ac14xx", "fsl,mpc5121";
	#address-cells = <1>;
	#size-cells = <1>;

	aliases {
		serial0 = &serial0;
		serial1 = &serial7;
		spi4 = &spi4;
		spi5 = &spi5;
	};

	cpus {
		PowerPC,5121@0 {
			timebase-frequency = <40000000>;	/*  40 MHz (csb/4) */
			bus-frequency = <160000000>;		/* 160 MHz csb bus */
			clock-frequency = <400000000>;		/* 400 MHz ppc core */
		};
	};

	memory {
		reg = <0x00000000 0x10000000>;			/* 256MB at 0 */
	};

	nfc@40000000 {
		status = "disabled";
	};

	localbus@80000020 {
		ranges = <0x0 0x0 0xfc000000 0x04000000	/* CS0: NOR flash */
			  0x1 0x0 0xe0000000 0x00010000 /* CS1: FRAM */
			  0x2 0x0 0xe0100000 0x00080000 /* CS2: asi1 */
			  0x3 0x0 0xe0300000 0x00020000 /* CS3: comm */
			  0x5 0x0 0xe0400000 0x00010000 /* CS5: safety */
			  0x6 0x0 0xe0200000 0x00080000>; /* CS6: asi2 */

		flash@0,0 {
			compatible = "cfi-flash";
			reg = <0 0x00000000 0x04000000>;
			#address-cells = <1>;
			#size-cells = <1>;
			bank-width = <2>;
			device-width = <2>;

			partition@0 {
				label = "dtb-kernel-production";
				reg = <0x00000000 0x00400000>;
			};
			partition@1 {
				label = "filesystem-production";
				reg = <0x00400000 0x03400000>;
			};

			partition@2 {
				label = "recovery";
				reg = <0x03800000 0x00700000>;
			};

			partition@3 {
				label = "uboot-code";
				reg = <0x03f00000 0x00040000>;
			};
			partition@4 {
				label = "uboot-env1";
				reg = <0x03f40000 0x00020000>;
			};
			partition@5 {
				label = "uboot-env2";
				reg = <0x03f60000 0x00020000>;
			};
		};

		fram@1,0 {
			compatible = "ifm,ac14xx-fram", "linux,uio-pdrv-genirq";
			reg = <1 0x00000000 0x00010000>;
		};

		asi@2,0 {
			/* masters mapping: CS, CS offset, size */
			reg = <2 0x00000000 0x00080000
			       6 0x00000000 0x00080000>;
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "ifm,ac14xx-asi-fpga";
			gpios = <
				&gpio_pic 26 0	/* prog */
				&gpio_pic 27 0	/* done */
				&gpio_pic 10 0	/* reset */
				>;

			master@1 {
				interrupts = <20 0x2>;
				interrupt-parent = <&gpio_pic>;
				chipselect = <2 0x00009000 0x00009100>;
				label = "AS-i master 1";
			};

			master@2 {
				interrupts = <21 0x2>;
				interrupt-parent = <&gpio_pic>;
				chipselect = <6 0x00009000 0x00009100>;
				label = "AS-i master 2";
			};
		};

		netx@3,0 {
			compatible = "ifm,netx";
			reg = <0x3 0x00000000 0x00020000>;
			chipselect = <3 0x00101140 0x00203100>;
			interrupts = <17 0x8>;
			gpios = <&gpio_pic 15 0>;
		};

		safety@5,0 {
			compatible = "ifm,safety";
			reg = <0x5 0x00000000 0x00010000>;
			chipselect = <5 0x00009000 0x00009100>;
			interrupts = <22 0x2>;
			interrupt-parent = <&gpio_pic>;
			gpios = <
				&gpio_pic 12 0	/* prog */
				&gpio_pic 11 0	/* done */
				>;
		};
	};

	clocks {
		osc {
			clock-frequency = <25000000>;
		};
	};

	soc@80000000 {
		bus-frequency = <80000000>;	/* 80 MHz ips bus */

		clock@f00 {
			compatible = "fsl,mpc5121rev2-clock", "fsl,mpc5121-clock";
		};

		/*
		 * GPIO PIC:
		 * interrupts cell = <pin nr, sense>
		 * sense == 8: Level, low assertion
		 * sense == 2: Edge, high-to-low change
		 */
		gpio_pic: gpio@1100 {
			gpio-controller;
			#gpio-cells = <2>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};

		sdhc@1500 {
			cd-gpios = <&gpio_pic 23 0>;	/* card detect */
			wp-gpios = <&gpio_pic 24 0>;	/* write protect */
			wp-inverted;			/* WP active high */
		};

		i2c@1700 {
			/* use Fast-mode */
			clock-frequency = <400000>;

			at24@30 {
				compatible = "at24,24c01";
				reg = <0x30>;
			};

			at24@31 {
				compatible = "at24,24c01";
				reg = <0x31>;
			};

			temp@48 {
				compatible = "ad,ad7414";
				reg = <0x48>;
			};

			at24@50 {
				compatible = "at24,24c01";
				reg = <0x50>;
			};

			at24@51 {
				compatible = "at24,24c01";
				reg = <0x51>;
			};

			at24@52 {
				compatible = "at24,24c01";
				reg = <0x52>;
			};

			at24@53 {
				compatible = "at24,24c01";
				reg = <0x53>;
			};

			at24@54 {
				compatible = "at24,24c01";
				reg = <0x54>;
			};

			at24@55 {
				compatible = "at24,24c01";
				reg = <0x55>;
			};

			at24@56 {
				compatible = "at24,24c01";
				reg = <0x56>;
			};

			at24@57 {
				compatible = "at24,24c01";
				reg = <0x57>;
			};

			rtc@68 {
				compatible = "stm,m41t00";
				reg = <0x68>;
			};
		};

		axe_pic: axe-base@2000 {
			compatible = "fsl,mpc5121-axe-base";
			reg = <0x2000 0x100>;
			interrupts = <42 0x8>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};

		axe-app {
			compatible = "fsl,mpc5121-axe-app";
			interrupt-parent = <&axe_pic>;
			interrupts = <
					/* soft interrupts */
					0 0x0	1 0x0	2 0x0	3 0x0
					4 0x0	5 0x0	6 0x0	7 0x0
					/* fifo interrupts */
					8 0x0	9 0x0	10 0x0	11 0x0
				>;
		};

		display@2100 {
			edid = [00 FF FF FF FF FF FF 00 14 94 00 00 00 00 00 00
				0A 12 01 03 80 1C 23 78 CA 88 FF 94 52 54 8E 27
				1E 4C 50 00 00 00 01 01 01 01 01 01 01 01 01 01
				01 01 01 01 01 01 FB 00 B0 14 00 DC 05 00 08 04
				21 00 1C 23 00 00 00 18 00 00 00 FD 00 38 3C 1F
				3C 01 0A 20 20 20 20 20 20 20 00 00 00 FC 00 45
				54 30 31 38 30 30 33 44 4D 55 0A 0A 00 00 00 10
				00 41 30 30 30 30 30 30 30 30 30 30 30 31 00 D5];
		};

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

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

		viu@2400 {
			status = "disabled";
		};

		mdio@2800 {
			phy0: ethernet-phy@1f {
				compatible = "smsc,lan8700";
				reg = <0x1f>;
			};
		};

		enet: ethernet@2800 {
			phy-handle = <&phy0>;
		};

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

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

		/* PSC3 serial port A, aka ttyPSC0 */
		serial0: psc@11300 {
			compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
			fsl,rx-fifo-size = <512>;
			fsl,tx-fifo-size = <512>;
		};

		/* PSC4 in SPI mode */
		spi4: psc@11400 {
			compatible = "fsl,mpc5121-psc-spi", "fsl,mpc5121-psc";
			fsl,rx-fifo-size = <768>;
			fsl,tx-fifo-size = <768>;
			#address-cells = <1>;
			#size-cells = <0>;
			num-cs = <1>;
			cs-gpios = <&gpio_pic 25 0>;

			flash: m25p128@0 {
				compatible = "st,m25p128";
				spi-max-frequency = <20000000>;
				reg = <0>;
				#address-cells = <1>;
				#size-cells = <1>;

				partition@0 {
					label = "spi-flash0";
					reg = <0x00000000 0x01000000>;
				};
			};
		};

		/* PSC5 in SPI mode */
		spi5: psc@11500 {
			compatible = "fsl,mpc5121-psc-spi", "fsl,mpc5121-psc";
			fsl,mode = "spi-master";
			fsl,rx-fifo-size = <128>;
			fsl,tx-fifo-size = <128>;
			#address-cells = <1>;
			#size-cells = <0>;

			lcd@0 {
				compatible = "ilitek,ili922x";
				reg = <0>;
				spi-max-frequency = <100000>;
				spi-cpol;
				spi-cpha;
			};
		};

		/* PSC7 serial port C, aka ttyPSC2 */
		serial7: psc@11700 {
			compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
			fsl,rx-fifo-size = <512>;
			fsl,tx-fifo-size = <512>;
		};

		matrix_keypad@0 {
			compatible = "gpio-matrix-keypad";
			debounce-delay-ms = <5>;
			col-scan-delay-us = <1>;
			gpio-activelow;
			col-gpios-binary;
			col-switch-delay-ms = <200>;

			col-gpios = <&gpio_pic 1 0>;	/* pin1 */

			row-gpios = <&gpio_pic 2 0	/* pin2 */
				     &gpio_pic 3 0	/* pin3 */
				     &gpio_pic 4 0>;	/* pin4 */

			linux,keymap = <0x0000006e	/* FN LEFT */
					0x01000067	/* UP */
					0x02000066	/* FN RIGHT */
					0x00010069	/* LEFT */
					0x0101006a	/* DOWN */
					0x0201006c>;	/* RIGHT */
		};
	};

	leds {
		compatible = "gpio-leds";

		backlight {
			label = "backlight";
			gpios = <&gpio_pic 0 0>;
			default-state = "keep";
		};
		green {
			label = "green";
			gpios = <&gpio_pic 18 0>;
			default-state = "keep";
		};
		red {
			label = "red";
			gpios = <&gpio_pic 19 0>;
			default-state = "keep";
		};
	};
};