/*
 * Copyright (C) 2015 Marek Vasut <marex@denx.de>
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

#include "sama5d4.dtsi"

/ {
	model = "Aries/DENX MA5D4";
	compatible = "aries,ma5d4", "denx,ma5d4", "atmel,sama5d4", "atmel,sama5";

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

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

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

		clk20m: clk20m {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <20000000>;
			clock-output-names = "clk20m";
		};
	};

	ahb {
		apb {
			mmc0: mmc@f8000000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7>;
				vmmc-supply = <&vcc_mmc0_reg>;
				vqmmc-supply = <&vcc_3v3_reg>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <8>;
					broken-cd;
				};
			};

			spi0: spi@f8010000 {
				cs-gpios = <&pioC 3 0>, <0>, <0>, <0>;
				status = "okay";

				m25p80@0 {
					compatible = "atmel,at25df321a";
					spi-max-frequency = <50000000>;
					reg = <0>;
				};
			};

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

			spi1: spi@fc018000 {
				cs-gpios = <&pioB 22 0>, <&pioB 23 0>, <0>, <0>;
				status = "okay";

				can0: can@0 {
					compatible = "microchip,mcp2515";
					reg = <0>;
					clocks = <&clk20m>;
					interrupt-parent = <&pioE>;
					interrupts = <6 IRQ_TYPE_EDGE_RISING>;
					spi-max-frequency = <10000000>;
				};

				can1: can@1 {
					compatible = "microchip,mcp2515";
					reg = <1>;
					clocks = <&clk20m>;
					interrupt-parent = <&pioE>;
					interrupts = <7 IRQ_TYPE_EDGE_RISING>;
					spi-max-frequency = <10000000>;
				};
			};

			tcb2: timer@fc024000 {
				timer@0 {
					compatible = "atmel,tcb-timer";
					reg = <0>;
				};

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

			adc0: adc@fc034000 {
				pinctrl-names = "default";
				pinctrl-0 = <
					/* external trigger conflicts with USBA_VBUS */
					&pinctrl_adc0_ad0
					&pinctrl_adc0_ad1
					&pinctrl_adc0_ad2
					&pinctrl_adc0_ad3
					&pinctrl_adc0_ad4
					>;
				atmel,adc-vref = <3300>;
				status = "okay";
			};

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

	vcc_3v3_reg: fixedregulator_3v3 {
		compatible = "regulator-fixed";
		regulator-name = "VCC 3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
	};

	vcc_mmc0_reg: fixedregulator_mmc0 {
		compatible = "regulator-fixed";
		gpio = <&pioE 15 GPIO_ACTIVE_HIGH>;
		regulator-name = "RST_n MCI0";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc_3v3_reg>;
		regulator-boot-on;
	};
};
