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

	ahb {
		apb {
			mmc0: mmc@f0000000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
				status = "okay";
				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 */

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

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

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

					pinctrl_mmc1_cd: mmc1_cd {
						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";
			};

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