/*
 * at91sam9263ek.dts - Device Tree file for Atmel at91sam9263 reference board
 *
 *  Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
 *
 * Licensed under GPLv2 only
 */
/dts-v1/;
#include "at91sam9263.dtsi"

/ {
	model = "Atmel at91sam9263ek";
	compatible = "atmel,at91sam9263ek", "atmel,at91sam9263", "atmel,at91sam9";

	chosen {
		bootargs = "mem=64M root=/dev/mtdblock5 rw rootfstype=ubifs";
		stdout-path = "serial0:115200n8";
		bootph-all;
	};

	memory {
		reg = <0x20000000 0x4000000>;
	};

	clocks {
		slow_xtal {
			clock-frequency = <32768>;
		};

		main_xtal {
			clock-frequency = <16367660>;
		};
	};

	ahb {
		apb {
			dbgu: serial@ffffee00 {
				bootph-all;
				status = "okay";
			};

			usart0: serial@fff8c000 {
				pinctrl-0 = <
					&pinctrl_usart0
					&pinctrl_usart0_rts
					&pinctrl_usart0_cts>;
				status = "okay";
			};

			macb0: ethernet@fffbc000 {
				phy-mode = "rmii";
				status = "okay";
			};

			usb1: gadget@fff78000 {
				atmel,vbus-gpio = <&pioA 25 GPIO_ACTIVE_HIGH>;
				status = "okay";
			};

			mmc0: mmc@fff80000 {
				pinctrl-0 = <
					&pinctrl_board_mmc0
					&pinctrl_mmc0_clk
					&pinctrl_mmc0_slot0_cmd_dat0
					&pinctrl_mmc0_slot0_dat1_3>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
					wp-gpios = <&pioE 19 GPIO_ACTIVE_HIGH>;
				};
			};

			pinctrl@fffff200 {
				mmc0 {
					pinctrl_board_mmc0: mmc0-board {
						atmel,pins =
							<AT91_PIOE 18 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH 	/* PE18 gpio CD pin pull up and deglitch */
							 AT91_PIOE 19 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;	/* PE19 gpio WP pin pull up */
					};
				};
			};

			spi0: spi@fffa4000 {
				status = "okay";
				cs-gpios = <&pioA 5 0>, <0>, <0>, <0>;
				mtd_dataflash@0 {
					compatible = "atmel,at45", "atmel,dataflash";
					spi-max-frequency = <15000000>;
					reg = <0>;
				};
			};

			watchdog@fffffd40 {
				status = "okay";
			};
		};

		fb0: fb@0x00700000 {
			display = <&display0>;
			status = "okay";

			display0: display {
				bits-per-pixel = <16>;
				atmel,lcdcon-backlight;
				atmel,dmacon = <0x1>;
				atmel,lcdcon2 = <0x80008002>;
				atmel,guard-time = <1>;

				display-timings {
					native-mode = <&timing0>;
					timing0: timing0 {
						clock-frequency = <4965000>;
						hactive = <240>;
						vactive = <320>;
						hback-porch = <1>;
						hfront-porch = <33>;
						vback-porch = <1>;
						vfront-porch = <0>;
						hsync-len = <5>;
						vsync-len = <1>;
						hsync-active = <1>;
						vsync-active = <1>;
					};
				};
			};
		};

		nand0: nand@40000000 {
			nand-bus-width = <8>;
			nand-ecc-mode = "soft";
			nand-on-flash-bbt = <1>;
			status = "okay";

			at91bootstrap@0 {
				label = "at91bootstrap";
				reg = <0x0 0x20000>;
			};

			barebox@20000 {
				label = "barebox";
				reg = <0x20000 0x40000>;
			};

			bareboxenv@60000 {
				label = "bareboxenv";
				reg = <0x60000 0x20000>;
			};

			bareboxenv2@80000 {
				label = "bareboxenv2";
				reg = <0x80000 0x20000>;
			};

			oftree@80000 {
				label = "oftree";
				reg = <0xa0000 0x20000>;
			};

			kernel@a0000 {
				label = "kernel";
				reg = <0xc0000 0x400000>;
			};

			rootfs@4a0000 {
				label = "rootfs";
				reg = <0x4c0000 0x7800000>;
			};

			data@7ca0000 {
				label = "data";
				reg = <0x7cc0000 0x8340000>;
			};
		};

		usb0: ohci@00a00000 {
			num-ports = <2>;
			status = "okay";
			atmel,vbus-gpio = <&pioA 24 GPIO_ACTIVE_HIGH
					   &pioA 21 GPIO_ACTIVE_HIGH
					  >;
		};
	};

	leds {
		compatible = "gpio-leds";

		d3 {
			label = "d3";
			gpios = <&pioB 7 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};

		d2 {
			label = "d2";
			gpios = <&pioC 29 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "nand-disk";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";

		left_click {
			label = "left_click";
			gpios = <&pioC 5 GPIO_ACTIVE_LOW>;
			linux,code = <272>;
			wakeup-source;
		};

		right_click {
			label = "right_click";
			gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
			linux,code = <273>;
			wakeup-source;
		};
	};

	i2c-gpio-0 {
		status = "okay";

		24c512@50 {
			compatible = "24c512";
			reg = <0x50>;
			pagesize = <128>;
		};
	};
};
