/*
 * at91sam9m10g45ek.dts - Device Tree file for AT91SAM9M10G45-EK board
 *
 *  Copyright (C) 2011 Atmel,
 *                2011 Nicolas Ferre <nicolas.ferre@atmel.com>
 *
 * Licensed under GPLv2 or later.
 */
/dts-v1/;
#include "at91sam9g45.dtsi"
#include <dt-bindings/pwm/pwm.h>

/ {
	model = "Atmel AT91SAM9M10G45-EK";
	compatible = "atmel,at91sam9m10g45ek", "atmel,at91sam9g45", "atmel,at91sam9";

	chosen {
		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
	};

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

	clocks {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		main_clock: clock@0 {
			compatible = "atmel,osc", "fixed-clock";
			clock-frequency = <12000000>;
		};

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

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

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

			usart1: serial@fff90000 {
				pinctrl-0 =
					<&pinctrl_usart1
					 &pinctrl_usart1_rts
					 &pinctrl_usart1_cts>;
				status = "okay";
			};

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

			i2c0: i2c@fff84000 {
				status = "okay";
			};

			i2c1: i2c@fff88000 {
				status = "okay";
			};

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

			mmc0: mmc@fff80000 {
				pinctrl-0 = <
					&pinctrl_board_mmc0
					&pinctrl_mmc0_slot0_clk_cmd_dat0
					&pinctrl_mmc0_slot0_dat1_3>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioD 10 GPIO_ACTIVE_HIGH>;
				};
			};

			mmc1: mmc@fffd0000 {
				pinctrl-0 = <
					&pinctrl_board_mmc1
					&pinctrl_mmc1_slot0_clk_cmd_dat0
					&pinctrl_mmc1_slot0_dat1_3>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioD 11 GPIO_ACTIVE_HIGH>;
					wp-gpios = <&pioD 29 GPIO_ACTIVE_HIGH>;
				};
			};

			pinctrl@fffff200 {
				mmc0 {
					pinctrl_board_mmc0: mmc0-board {
						atmel,pins =
							<AT91_PIOD 10 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;	/* PD10 gpio CD pin pull up and deglitch */
					};
				};

				mmc1 {
					pinctrl_board_mmc1: mmc1-board {
						atmel,pins =
							<AT91_PIOD 11 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH	/* PD11 gpio CD pin pull up and deglitch */
							 AT91_PIOD 29 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;	/* PD29 gpio WP pin pull up */
					};
				};

				pwm0 {
					pinctrl_pwm_leds: pwm-led {
						atmel,pins =
							<AT91_PIOD 0  AT91_PERIPH_B AT91_PINCTRL_PULL_UP	/* PD0 periph B */
							 AT91_PIOD 31 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>;	/* PD31 periph B */
					};
				};
			};

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

			usb2: gadget@fff78000 {
				atmel,vbus-gpio = <&pioB 19 GPIO_ACTIVE_HIGH>;
				status = "okay";
			};

			adc0: adc@fffb0000 {
				pinctrl-names = "default";
				pinctrl-0 = <
					&pinctrl_adc0_ad0
					&pinctrl_adc0_ad1
					&pinctrl_adc0_ad2
					&pinctrl_adc0_ad3
					&pinctrl_adc0_ad4
					&pinctrl_adc0_ad5
					&pinctrl_adc0_ad6
					&pinctrl_adc0_ad7>;
				atmel,adc-ts-wires = <4>;
				status = "okay";
			};

			pwm0: pwm@fffb8000 {
				status = "okay";

				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_pwm_leds>;
			};

			rtc@fffffd20 {
				atmel,rtt-rtc-time-reg = <&gpbr 0x0>;
				status = "okay";
			};

			gpbr: syscon@fffffd60 {
				status = "okay";
			};

			rtc@fffffdb0 {
				status = "okay";
			};
		};

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

			display0: display {
				bits-per-pixel = <32>;
				atmel,lcdcon-backlight;
				atmel,dmacon = <0x1>;
				atmel,lcdcon2 = <0x80008002>;
				atmel,guard-time = <9>;
				atmel,lcd-wiring-mode = "RGB";

				display-timings {
					native-mode = <&timing0>;
					timing0: timing0 {
						clock-frequency = <9000000>;
						hactive = <480>;
						vactive = <272>;
						hback-porch = <1>;
						hfront-porch = <1>;
						vback-porch = <40>;
						vfront-porch = <1>;
						hsync-len = <45>;
						vsync-len = <1>;
					};
				};
			};
		};

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

			boot@0 {
				label = "bootstrap/uboot/kernel";
				reg = <0x0 0x400000>;
			};

			rootfs@400000 {
				label = "rootfs";
				reg = <0x400000 0x3C00000>;
			};

			data@4000000 {
				label = "data";
				reg = <0x4000000 0xC000000>;
			};
		};

		usb0: ohci@00700000 {
			status = "okay";
			num-ports = <2>;
			atmel,vbus-gpio = <&pioD 1 GPIO_ACTIVE_LOW
					   &pioD 3 GPIO_ACTIVE_LOW>;
		};

		usb1: ehci@00800000 {
			status = "okay";
		};
	};

	leds {
		compatible = "gpio-leds";

		d8 {
			label = "d8";
			gpios = <&pioD 30 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		d6 {
			label = "d6";
			pwms = <&pwm0 3 5000 PWM_POLARITY_INVERTED>;
			max-brightness = <255>;
			linux,default-trigger = "nand-disk";
		};

		d7 {
			label = "d7";
			pwms = <&pwm0 1 5000 PWM_POLARITY_INVERTED>;
			max-brightness = <255>;
			linux,default-trigger = "mmc0";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";

		left_click {
			label = "left_click";
			gpios = <&pioB 6 GPIO_ACTIVE_LOW>;
			linux,code = <272>;
			gpio-key,wakeup;
		};

		right_click {
			label = "right_click";
			gpios = <&pioB 7 GPIO_ACTIVE_LOW>;
			linux,code = <273>;
			gpio-key,wakeup;
		};

		left {
			label = "Joystick Left";
			gpios = <&pioB 14 GPIO_ACTIVE_LOW>;
			linux,code = <105>;
		};

		right {
			label = "Joystick Right";
			gpios = <&pioB 15 GPIO_ACTIVE_LOW>;
			linux,code = <106>;
		};

		up {
			label = "Joystick Up";
			gpios = <&pioB 16 GPIO_ACTIVE_LOW>;
			linux,code = <103>;
		};

		down {
			label = "Joystick Down";
			gpios = <&pioB 17 GPIO_ACTIVE_LOW>;
			linux,code = <108>;
		};

		enter {
			label = "Joystick Press";
			gpios = <&pioB 18 GPIO_ACTIVE_LOW>;
			linux,code = <28>;
		};
	};
};
