/*
 * at91-sama5d3_xplained.dts - Device Tree file for the SAMA5D3 Xplained board
 *
 *  Copyright (C) 2014 Atmel,
 *		  2014 Nicolas Ferre <nicolas.ferre@atmel.com>
 *
 * Licensed under GPLv2 or later.
 */
/dts-v1/;
#include "sama5d36.dtsi"

/ {
	model = "SAMA5D3 Xplained";
	compatible = "atmel,sama5d3-xplained", "atmel,sama5d3", "atmel,sama5";

	chosen {
		stdout-path = "serial0:115200n8";
	};

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

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

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

	ahb {
		apb {
			mmc0: mmc@f0000000 {
				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7 &pinctrl_mmc0_cd>;
				vmmc-supply = <&vcc_mmc0_reg>;
				vqmmc-supply = <&vcc_3v3_reg>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <8>;
					cd-gpios = <&pioE 0 GPIO_ACTIVE_LOW>;
				};
			};

			mmc1: mmc@f8000000 {
				vmmc-supply = <&vcc_3v3_reg>;
				vqmmc-supply = <&vcc_3v3_reg>;
				status = "disabled";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioE 1 GPIO_ACTIVE_LOW>;
				};
			};

			spi0: spi@f0004000 {
				cs-gpios = <&pioD 13 0>, <0>, <0>, <&pioD 16 0>;
				status = "okay";
			};

			can0: can@f000c000 {
				status = "okay";
			};

			i2c0: i2c@f0014000 {
				pinctrl-0 = <&pinctrl_i2c0_pu>;
				status = "okay";
			};

			i2c1: i2c@f0018000 {
				status = "okay";

				pmic: act8865@5b {
					compatible = "active-semi,act8865";
					reg = <0x5b>;
					status = "disabled";

					regulators {
						vcc_1v8_reg: DCDC_REG1 {
							regulator-name = "VCC_1V8";
							regulator-min-microvolt = <1800000>;
							regulator-max-microvolt = <1800000>;
							regulator-always-on;
						};

						vcc_1v2_reg: DCDC_REG2 {
							regulator-name = "VCC_1V2";
							regulator-min-microvolt = <1200000>;
							regulator-max-microvolt = <1200000>;
							regulator-always-on;
						};

						vcc_3v3_reg: DCDC_REG3 {
							regulator-name = "VCC_3V3";
							regulator-min-microvolt = <3300000>;
							regulator-max-microvolt = <3300000>;
							regulator-always-on;
						};

						vddfuse_reg: LDO_REG1 {
							regulator-name = "FUSE_2V5";
							regulator-min-microvolt = <2500000>;
							regulator-max-microvolt = <2500000>;
						};

						vddana_reg: LDO_REG2 {
							regulator-name = "VDDANA";
							regulator-min-microvolt = <3300000>;
							regulator-max-microvolt = <3300000>;
							regulator-always-on;
						};
					};
				};
			};

			macb0: ethernet@f0028000 {
				phy-mode = "rgmii";
				#address-cells = <1>;
				#size-cells = <0>;
				status = "okay";

				ethernet-phy@7 {
					reg = <0x7>;
				};
			};

			pwm0: pwm@f002c000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_pwm0_pwmh0_0 &pinctrl_pwm0_pwmh1_0>;
				status = "okay";
			};

			usart0: serial@f001c000 {
				status = "okay";
			};

			usart1: serial@f0020000 {
				pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
				status = "okay";
			};

			uart0: serial@f0024000 {
				status = "okay";
			};

			mmc1: mmc@f8000000 {
				pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioE 1 GPIO_ACTIVE_HIGH>;
				};
			};

			spi1: spi@f8008000 {
				cs-gpios = <&pioC 25 0>;
				status = "okay";
			};

			adc0: adc@f8018000 {
				atmel,adc-vref = <3300>;
				atmel,adc-channels-used = <0xfe>;
				pinctrl-0 = <
					&pinctrl_adc0_adtrg
					&pinctrl_adc0_ad1
					&pinctrl_adc0_ad2
					&pinctrl_adc0_ad3
					&pinctrl_adc0_ad4
					&pinctrl_adc0_ad5
					&pinctrl_adc0_ad6
					&pinctrl_adc0_ad7
					>;
				status = "okay";
			};

			i2c2: i2c@f801c000 {
				dmas = <0>, <0>;	/* Do not use DMA for i2c2 */
				pinctrl-0 = <&pinctrl_i2c2_pu>;
				status = "okay";
			};

			macb1: ethernet@f802c000 {
				phy-mode = "rmii";
				#address-cells = <1>;
				#size-cells = <0>;
				status = "okay";

				ethernet-phy@1 {
					reg = <0x1>;
				};
			};

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

			pinctrl@fffff200 {
				board {
					pinctrl_i2c0_pu: i2c0_pu {
						atmel,pins =
							<AT91_PIOA 30 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>,
							<AT91_PIOA 31 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>;
					};

					pinctrl_i2c2_pu: i2c2_pu {
						atmel,pins =
							<AT91_PIOA 18 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>,
							<AT91_PIOA 19 AT91_PERIPH_B AT91_PINCTRL_PULL_UP>;
					};

					pinctrl_key_gpio: key_gpio_0 {
						atmel,pins =
							<AT91_PIOE 29 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
					};

					pinctrl_mmc0_cd: mmc0_cd {
						atmel,pins =
							<AT91_PIOE 0 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
					};

					pinctrl_mmc1_cd: mmc1_cd {
						atmel,pins =
							<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
					};

					pinctrl_usba_vbus: usba_vbus {
						atmel,pins =
							<AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;	/* PE9, conflicts with A9 */
					};
				};
			};
		};

		nand0: nand@60000000 {
			nand-bus-width = <8>;
			nand-ecc-mode = "hw";
			atmel,has-pmecc;
			atmel,pmecc-cap = <4>;
			atmel,pmecc-sector-size = <512>;
			nand-on-flash-bbt;
			status = "okay";

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

			bootloader@40000 {
				label = "bootloader";
				reg = <0x40000 0x80000>;
			};

			bootloaderenv@c0000 {
				label = "bootloader env";
				reg = <0xc0000 0xc0000>;
			};

			dtb@180000 {
				label = "device tree";
				reg = <0x180000 0x80000>;
			};

			kernel@200000 {
				label = "kernel";
				reg = <0x200000 0x600000>;
			};

			rootfs@800000 {
				label = "rootfs";
				reg = <0x800000 0x0f800000>;
			};
		};

		usb0: gadget@00500000 {
			atmel,vbus-gpio = <&pioE 9 GPIO_ACTIVE_HIGH>;	/* PE9, conflicts with A9 */
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_usba_vbus>;
			status = "okay";
		};

		usb1: ohci@00600000 {
			num-ports = <3>;
			atmel,vbus-gpio = <0
					   &pioE 3 GPIO_ACTIVE_LOW
					   &pioE 4 GPIO_ACTIVE_LOW
					  >;
			status = "okay";
		};

		usb2: ehci@00700000 {
			status = "okay";
		};
	};

	vcc_mmc0_reg: fixedregulator_mmc0 {
		compatible = "regulator-fixed";
		gpio = <&pioE 2 GPIO_ACTIVE_LOW>;
		regulator-name = "mmc0-card-supply";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	gpio_keys {
		compatible = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_key_gpio>;

		bp3 {
			label = "PB_USER";
			gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
			linux,code = <0x104>;
			wakeup-source;
		};
	};

	leds {
		compatible = "gpio-leds";

		d2 {
			label = "d2";
			gpios = <&pioE 23 GPIO_ACTIVE_LOW>;	/* PE23, conflicts with A23, CTS2 */
			linux,default-trigger = "heartbeat";
		};

		d3 {
			label = "d3";
			gpios = <&pioE 24 GPIO_ACTIVE_HIGH>;
		};
	};
};
