/*
 * acme-acqua.dts - Device Tree file for Acqua A5 Board
 *
 *  Copyright (C) 2014 Atmel,
 *		  2014 Nicolas Ferre <nicolas.ferre@atmel.com>
 * 
 *	2022 Sergio Tanzilli <tanzilli@acmesystems.it>
 *
 * Licensed under GPLv2 or later.
 */
/dts-v1/;
#include "microchip/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 net.ifnames=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";

				sda-gpios = <&pioE 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
				scl-gpios = <&pioE 2 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 
				
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_i2c3_gpio>;
				
				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 {

				atmel,mux-mask = <
					/*   A          B          C  */
					0xffffffff 0xc0fc0000 0xc0ff0000	/* pioA */
					0xffffffff 0x0ff8ffff 0x00000000	/* pioB */
					0xffffffff 0xbc00f1ff 0x7c00fc00	/* pioC */
					0xffffffff 0xc001c0e0 0x0001c1e0	/* pioD */
					0xfffffff9 0xbf9f8000 0x18000000 	/* pioE */
				/*	0xffffffff 0xb8000000 0x18000000 */	/* pioE */
					>;

				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_i2c3_gpio: i2c3-gpio {
						atmel,pins =
							<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
							 AT91_PIOE 2 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
					};


					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 */
					};
					
					pinctrl_gpio_leds: gpio_leds_default {
						atmel,pins =
							<AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
							 AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
							 AT91_PIOE 5 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
							 AT91_PIOE 6 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
					};
				};
			};
		};

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

        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";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_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";
		};
	};		
};
