/*
 * acme-acqua.dts - Device Tree file for Acqua A5 Board
 *
 *  Copyright (C) 2014 Atmel,
 *		  2014 Nicolas Ferre <nicolas.ferre@atmel.com>
 * 
 *	2020 Sergio Tanzilli <tanzilli@acmesystems.it>
 *
 * Licensed under GPLv2 or later.
 */
/dts-v1/;
#include "sama5d31.dtsi"

/ {
	model = "Acme Systems Acqua SOM";
	compatible = "acme,acqua", "atmel,sama5d3", "atmel,sama5";

	chosen {
		stdout-path = "serial0:115200n8";
		bootargs = "mem=256M console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait consoleblank=0";
	};

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

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

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

	ahb {
		apb {
			hlcdc: hlcdc@f0030000 {
				status = "disabled";
				hlcdc-display-controller {
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_lcd_base &pinctrl_lcd_rgb888_alt>;
					port@0 {
						hlcdc_panel_output: endpoint@0 {
							remote-endpoint = <&panel_input>;
						};
					};
				};
			};
		
			/* MicroSD mounted on the SOM */
		
			mmc0: mmc@f0000000 {
				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
				status = "okay";
				slot@0 {
					reg = <0>;
					bus-width = <4>;
				};
			};
  
  			/* Optional MicroSD to mount on the carrier board */
  
			mmc1: mmc@f8000000 {
				pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
				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 = "disabled";
			};

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

			tcb0: timer@f0010000 {
				timer0: timer@0 {
					compatible = "atmel,tcb-timer";
					reg = <0>;
				};

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

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

			i2c1: i2c@f0018000 {
				status = "disabled";
			};

			macb1: ethernet@f802c000 {
				compatible = "atmel,sama5d3-macb", "cdns,at91sam9260-macb", "cdns,macb";
				
				status = "okay";
				phy-mode = "rmii";
				#address-cells = <1>;
				#size-cells = <0>;

				nvmem-cells = <&eth0_addr>;
				nvmem-cell-names = "mac-address";

                phy0: ethernet-phy@1 {
                    interrupt-parent = <&pioE>;
                    interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
                    reg = <1>;
                };

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

			/* Bit banging internal I2C to manage the AT24MAC402 chip */

			i2c3@ {
				compatible = "i2c-gpio";
				gpios = <&pioE 1 0 /* SDA */
						 &pioE 2 0 /* SCK */
						>;
				i2c-gpio,delay-us = <4>;    /* ~178 kHz */
				#address-cells = <1>;
				#size-cells = <0>;
			
				/* EEPROM contains the eth0 MAC address */
				 
				eeprom@58 {
					compatible = "atmel,24mac402";
					pagesize = <256>;
					read-only;
					reg = <0x58>;
					#address-cells = <1>;
					#size-cells = <1>;

					eth0_addr: eth-mac-addr@9A {
						reg = <0x0 0x06>;
					};
				};
			};

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

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

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

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


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

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

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


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

        usb0: gadget@500000 {
            status = "okay";
        };

        usb1: ohci@600000 {
            status = "okay";
        };

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


	panel: panel {
		/* compatible = "acme,43inch", "simple-panel"; */
		compatible = "acme,50inch", "simple-panel";
		/* compatible = "acme,70inch", "simple-panel"; */
		
		status = "disable";

		port@0 {
			panel_input: endpoint@0 {
				remote-endpoint = <&hlcdc_panel_output>;
			};
		};
	};

 
	leds {
		compatible = "gpio-leds";

		led0 {
			label = "led0";
			gpios = <&pioE 3 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		led1 {
			label = "led1";
			gpios = <&pioE 4 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		led2 {
			label = "led2";
			gpios = <&pioE 5 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
		};

		led3 {
			label = "led3";
			gpios = <&pioE 6 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "mmc0";
			default-state = "off";
		};
	};		
};
