/*
 * 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 root=/dev/mtdblock1 rw rootfstype=jffs2";
		stdout-path = "serial0:115200n8";
	};

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

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

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

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

			tcb0: timer@fff7c000 {
				timer@0 {
					compatible = "atmel,tcb-timer";
					reg = <0>, <1>;
				};

				timer@2 {
					compatible = "atmel,tcb-timer";
					reg = <2>;
				};
			};

			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";
				ov2640: camera@30 {
					compatible = "ovti,ov2640";
					reg = <0x30>;
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_pck1_as_isi_mck &pinctrl_sensor_power &pinctrl_sensor_reset>;
					resetb-gpios = <&pioD 12 GPIO_ACTIVE_LOW>;
					pwdn-gpios = <&pioD 13 GPIO_ACTIVE_HIGH>;
					clocks = <&pck1>;
					clock-names = "xvclk";
					assigned-clocks = <&pck1>;
					assigned-clock-rates = <25000000>;

					port {
						ov2640_0: endpoint {
							remote-endpoint = <&isi_0>;
							bus-width = <8>;
						};
					};
				};
			};

			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 {
				camera_sensor {
					pinctrl_pck1_as_isi_mck: pck1_as_isi_mck-0 {
						atmel,pins =
							<AT91_PIOB 31 AT91_PERIPH_B AT91_PINCTRL_NONE>;
					};

					pinctrl_sensor_reset: sensor_reset-0 {
						atmel,pins =
							<AT91_PIOD 12 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
					};

					pinctrl_sensor_power: sensor_power-0 {
						atmel,pins =
							<AT91_PIOD 13 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
					};
				};
				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";
			};

			ac97: sound@fffac000 {
				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";
			};

			isi@fffb4000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_isi_data_0_7>;
				status = "okay";
				port {
					isi_0: endpoint {
						remote-endpoint = <&ov2640_0>;
						bus-width = <8>;
						vsync-active = <1>;
						hsync-active = <1>;
					};
				};
			};

			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@500000 {
			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>;
					};
				};
			};
		};

		ebi: ebi@10000000 {
			status = "okay";

			nand_controller: nand-controller {
				status = "okay";
				pinctrl-0 = <&pinctrl_nand_cs &pinctrl_nand_rb>;
				pinctrl-names = "default";

				nand@3 {
					reg = <0x3 0x0 0x800000>;
					rb-gpios = <&pioC 8 GPIO_ACTIVE_HIGH>;
					cs-gpios = <&pioC 14 GPIO_ACTIVE_HIGH>;
					nand-bus-width = <8>;
					nand-ecc-mode = "soft";
					nand-on-flash-bbt;
					label = "atmel_nand";

					partitions {
						compatible = "fixed-partitions";
						#address-cells = <1>;
						#size-cells = <1>;

						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@700000 {
			status = "okay";
			num-ports = <2>;
			atmel,vbus-gpio = <&pioD 1 GPIO_ACTIVE_LOW
					   &pioD 3 GPIO_ACTIVE_LOW>;
		};

		usb1: ehci@800000 {
			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>;
			wakeup-source;
		};

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

		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>;
		};
	};
};
