/*
 * 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 {
		#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";
				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";
			};

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

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