// SPDX-License-Identifier: GPL-2.0
/*
 * at91-som60.dtsi - Device Tree file for the SOM60 module
 *
 *  Copyright (C) 2018 Laird,
 *		  2018 Ben Whitten <ben.whitten@lairdtech.com>
 *
 */
#include "sama5d36.dtsi"

/ {
	model = "Laird SOM60";
	compatible = "laird,som60", "atmel,sama5d36", "atmel,sama5d3", "atmel,sama5";

	chosen {
		stdout-path = &dbgu;
	};

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

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

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

&pinctrl {
	board {
		pinctrl_mmc0_cd: mmc0_cd {
			atmel,pins =
				<AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
		};

		pinctrl_mmc0_en: mmc0_en {
			atmel,pins =
				<AT91_PIOE 30 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
		};

		pinctrl_nand0_wp: nand0_wp {
			atmel,pins =
				<AT91_PIOE 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
		};

		pinctrl_usb_vbus: usb_vbus {
			atmel,pins =
				<AT91_PIOE 20 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
				/* Conflicts with USART2_SCK */
		};

		pinctrl_usart2_sck: usart2_sck {
			atmel,pins =
				<AT91_PIOE 20 AT91_PERIPH_B AT91_PINCTRL_NONE>;
				/* Conflicts with USB_VBUS */
		};

		pinctrl_usb_oc: usb_oc {
			atmel,pins =
				<AT91_PIOE 15 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
				/* Conflicts with USART3_SCK */
		};

		pinctrl_usart3_sck: usart3_sck {
			atmel,pins =
				<AT91_PIOE 15 AT91_PERIPH_B AT91_PINCTRL_NONE>;
				/* Conflicts with USB_OC */
		};

		pinctrl_usba_vbus: usba_vbus {
		   atmel,pins =
				<AT91_PIOC 14 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
		};

		pinctrl_geth_int: geth_int {
			atmel,pins =
				<AT91_PIOB 25 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
				/* Conflicts with USART1_SCK */
		};

		pinctrl_usart1_sck: usart1_sck {
			atmel,pins =
				<AT91_PIOB 25 AT91_PERIPH_A AT91_PINCTRL_NONE>;
				/* Conflicts with GETH_INT */
		};

		pinctrl_eth_int: eth_int {
			atmel,pins =
				<AT91_PIOC 10 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
		};

		pinctrl_pck2_as_audio_mck: pck2_as_audio_mck {
			atmel,pins =
				<AT91_PIOC 15 AT91_PERIPH_B AT91_PINCTRL_NONE>;
		};
	};
};

&mmc0 {
	slot@0 {
		reg = <0>;
		bus-width = <8>;
	};
};

&mmc1 {
	status = "okay";
	slot@0 {
		reg = <0>;
		bus-width = <4>;
	};
};

&spi0 {
	cs-gpios = <&pioD 13 0>, <0>, <0>, <0>;
};

&usart0 {
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "okay";
	pinctrl-0 = <&pinctrl_usart0 &pinctrl_usart0_rts_cts>;
};

&usart1 {
	pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
};

&usart2 {
	pinctrl-0 = <&pinctrl_usart2 &pinctrl_usart2_rts_cts>;
};

&usart3 {
	pinctrl-0 = <&pinctrl_usart3 &pinctrl_usart3_rts_cts>;
};

&adc0 {
	pinctrl-0 = <
		&pinctrl_adc0_adtrg
		&pinctrl_adc0_ad0
		&pinctrl_adc0_ad1
		&pinctrl_adc0_ad2
		&pinctrl_adc0_ad3
		&pinctrl_adc0_ad4
		&pinctrl_adc0_ad5
		>;
};

&macb0 {
	phy-mode = "rgmii";
};

&macb1 {
	phy-mode = "rmii";
};

&ebi {
	pinctrl-0 = <&pinctrl_ebi_nand_addr>;
	pinctrl-names = "default";
	status = "okay";
};

&nand_controller {
	status = "okay";

	nand: nand@3 {
		reg = <0x3 0x0 0x2>;
		atmel,rb = <0>;
		nand-bus-width = <8>;
		nand-ecc-mode = "hw";
		nand-ecc-strength = <8>;
		nand-ecc-step-size = <512>;
		nand-on-flash-bbt;
		label = "atmel_nand";

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			ubootspl@0 {
				label = "u-boot-spl";
				reg = <0x0 0x20000>;
			};

			uboot@20000 {
				label = "u-boot";
				reg = <0x20000 0x80000>;
			};

			ubootenv@a0000 {
				label = "u-boot-env";
				reg = <0xa0000 0x20000>;
			};

			ubootenv@c0000 {
				label = "u-boot-env";
				reg = <0xc0000 0x20000>;
			};

			ubi@e0000 {
				label = "ubi";
				reg = <0xe0000 0xfe00000>;
			};
		};
	};
};

&usb0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usba_vbus>;
	atmel,vbus-gpio = <&pioC 14 GPIO_ACTIVE_HIGH>;
};

&usb1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb_vbus &pinctrl_usb_oc>;
	num-ports = <3>;
	atmel,vbus-gpio = <0
		&pioE 20 GPIO_ACTIVE_HIGH
		0>;
	atmel,oc-gpio = <0
		&pioE 15 GPIO_ACTIVE_LOW
		0>;
};
