/*
 * sama5d3xmb.dts - Device Tree file for SAMA5D3x mother board
 *
 *  Copyright (C) 2013 Atmel,
 *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
 *
 * Licensed under GPLv2 or later.
 */
#include "sama5d3xcm.dtsi"

/ {
	compatible = "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";

	chosen {
		u-boot,dm-pre-reloc;
		stdout-path = &dbgu;
	};

	ahb {
		apb {
			mmc0: mmc@f0000000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
				status = "okay";
				u-boot,dm-pre-reloc;
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioD 17 GPIO_ACTIVE_HIGH>;
				};
			};

			spi0: spi@f0004000 {
				dmas = <0>, <0>;	/*  Do not use DMA for spi0 */
				u-boot,dm-pre-reloc;

				spi_flash@0 {
					compatible = "spi-flash";
					spi-max-frequency = <50000000>;
					reg = <0>;
					u-boot,dm-pre-reloc;
				};
			};

			ssc0: ssc@f0008000 {
				atmel,clk-from-rk-pin;
			};

			/*
			 * i2c0 conflicts with ISI:
			 * disable it to allow the use of ISI
			 * can not enable audio when i2c0 disabled
			 */
			i2c0: i2c@f0014000 {
				wm8904: wm8904@1a {
					compatible = "wlf,wm8904";
					reg = <0x1a>;
					clocks = <&pck0>;
					clock-names = "mclk";
				};
			};

			i2c1: i2c@f0018000 {
				ov2640: camera@0x30 {
					compatible = "ovti,ov2640";
					reg = <0x30>;
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_pck1_as_isi_mck &pinctrl_sensor_power &pinctrl_sensor_reset>;
					resetb-gpios = <&pioE 24 GPIO_ACTIVE_LOW>;
					pwdn-gpios = <&pioE 29 GPIO_ACTIVE_HIGH>;
					/* use pck1 for the master clock of ov2640 */
					clocks = <&pck1>;
					clock-names = "xvclk";
					assigned-clocks = <&pck1>;
					assigned-clock-rates = <25000000>;

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

			usart1: serial@f0020000 {
				dmas = <0>, <0>;	/*  Do not use DMA for usart1 */
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
				status = "okay";
			};

			isi: isi@f0034000 {
				port {
					isi_0: endpoint {
						remote-endpoint = <&ov2640_0>;
						bus-width = <8>;
						vsync-active = <1>;
						hsync-active = <1>;
					};
				};
			};

			mmc1: mmc@f8000000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
				status = "okay";
				u-boot,dm-pre-reloc;
				slot@0 {
					reg = <0>;
					bus-width = <4>;
					cd-gpios = <&pioD 18 GPIO_ACTIVE_HIGH>;
				};
			};

			adc0: adc@f8018000 {
				pinctrl-names = "default";
				pinctrl-0 = <
					&pinctrl_adc0_adtrg
					&pinctrl_adc0_ad0
					&pinctrl_adc0_ad1
					&pinctrl_adc0_ad2
					&pinctrl_adc0_ad3
					&pinctrl_adc0_ad4
					>;
				status = "okay";
			};

			macb1: ethernet@f802c000 {
				phy-mode = "rmii";

				#address-cells = <1>;
				#size-cells = <0>;
				phy0: ethernet-phy@1 {
					/*interrupt-parent = <&pioE>;*/
					/*interrupts = <30 IRQ_TYPE_EDGE_FALLING>;*/
					reg = <1>;
				};
			};

			pinctrl@fffff200 {
				board {
					u-boot,dm-pre-reloc;
					pinctrl_mmc0_cd: mmc0_cd {
						u-boot,dm-pre-reloc;
						atmel,pins =
							<AT91_PIOD 17 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; /* PD17 GPIO with pullup deglitch */
					};

					pinctrl_mmc1_cd: mmc1_cd {
						u-boot,dm-pre-reloc;
						atmel,pins =
							<AT91_PIOD 18 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; /* PD18 GPIO with pullup deglitch */
					};

					pinctrl_pck0_as_audio_mck: pck0_as_audio_mck {
						atmel,pins =
							<AT91_PIOD 30 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PD30 periph B */
					};

					pinctrl_pck1_as_isi_mck: pck1_as_isi_mck-0 {
						atmel,pins =
							<AT91_PIOD 31 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PD31 periph B ISI_MCK */
					};

					pinctrl_sensor_reset: sensor_reset-0 {
						atmel,pins =
							<AT91_PIOE 24 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;   /* PE24 gpio */
					};

					pinctrl_sensor_power: sensor_power-0 {
						atmel,pins =
							<AT91_PIOE 29 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; /* PE29 gpio */
					};

					pinctrl_usba_vbus: usba_vbus {
						atmel,pins =
							<AT91_PIOD 29 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PD29 GPIO with deglitch */
					};
				};
			};

			dbgu: serial@ffffee00 {
				dmas = <0>, <0>;	/*  Do not use DMA for dbgu */
				status = "okay";
				u-boot,dm-pre-reloc;
			};

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

		usb0: gadget@00500000 {
			atmel,vbus-gpio = <&pioD 29 GPIO_ACTIVE_HIGH>;
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_usba_vbus>;
			status = "okay";
		};

		usb1: ohci@00600000 {
			num-ports = <3>;
			atmel,vbus-gpio = <&pioD 25 GPIO_ACTIVE_HIGH
					   &pioD 26 GPIO_ACTIVE_LOW
					   &pioD 27 GPIO_ACTIVE_LOW
					  >;
			status = "okay";
		};

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

	sound {
		compatible = "atmel,asoc-wm8904";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_pck0_as_audio_mck>;

		atmel,model = "wm8904 @ SAMA5D3EK";
		atmel,audio-routing =
			"Headphone Jack", "HPOUTL",
			"Headphone Jack", "HPOUTR",
			"IN2L", "Line In Jack",
			"IN2R", "Line In Jack",
			"Mic", "MICBIAS",
			"IN1L", "Mic";

		atmel,ssc-controller = <&ssc0>;
		atmel,audio-codec = <&wm8904>;

		status = "disabled";
	};
};
