// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * at91-sam9x60_curiosity.dts - Device Tree file for SAM9X60 CURIOSITY board
 *
 * Copyright (C) 2022 Microchip Technology Inc. and its subsidiaries
 *
 * Author: Durai Manickam KR <durai.manickamkr@microchip.com>
 */
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/mfd/atmel-flexcom.h>
#include "sam9x60.dtsi"

/ {
	model = "Microchip SAM9X60 Curiosity";
	compatible = "microchip,sam9x60-curiosity", "microchip,sam9x60", "atmel,at91sam9";

	chosen {
		stdout-path = &dbgu;
		i2c0 = &flx0;
	};

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

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

		main_xtal: main_xtal {
			clock-frequency = <24000000>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_key_gpio_default>;

		button-user {
			label = "PB_USER";
			gpios = <&pioA 29 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_PROG1>;
			wakeup-source;
		};
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpio_leds>;

		led-red {
			label = "red";
			gpios = <&pioD 17 GPIO_ACTIVE_HIGH>;
		};

		led-green {
			label = "green";
			gpios = <&pioD 19 GPIO_ACTIVE_HIGH>;
		};

		led-blue {
			label = "blue";
			gpios = <&pioD 21 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	onewire_tm: onewire {
		gpios = <&pioD 14 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_onewire_tm_default>;
		status = "okay";

		w1_eeprom: w1_eeprom@0 {
			compatible = "maxim,ds24b33";
			status = "okay";
		};
	};
};

&ebi {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ebi_addr_nand &pinctrl_ebi_data_0_7>;
	status = "okay";

	nand_controller: nand-controller {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_nand_oe_we &pinctrl_nand_cs &pinctrl_nand_rb>;
		status = "okay";

		nand@3 {
			reg = <0x3 0x0 0x800000>;
			rb-gpios = <&pioD 5 GPIO_ACTIVE_HIGH>;
			cs-gpios = <&pioD 4 GPIO_ACTIVE_HIGH>;
			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>;

				at91bootstrap@0 {
					label = "at91bootstrap";
					reg = <0x0 0x40000>;
				};

				uboot@40000 {
					label = "u-boot";
					reg = <0x40000 0xc0000>;
				};

				ubootenvred@100000 {
					label = "U-Boot Env Redundant";
					reg = <0x100000 0x40000>;
				};

				ubootenv@140000 {
					label = "U-Boot Env";
					reg = <0x140000 0x40000>;
				};

				dtb@180000 {
					label = "device tree";
					reg = <0x180000 0x80000>;
				};

				kernel@200000 {
					label = "kernel";
					reg = <0x200000 0x600000>;
				};

				rootfs@800000 {
					label = "rootfs";
					reg = <0x800000 0x1f800000>;
				};
			};
		};
	};
};

&flx0 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
	status = "okay";

	i2c@600 {
		compatible = "microchip,sam9x60-i2c";
		reg = <0x600 0x200>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx0>;
		#address-cells = <1>;
		#size-cells = <0>;
		clocks = <&pmc PMC_TYPE_PERIPHERAL 5>;
		status = "okay";

		eeprom@53 {
			compatible = "atmel,24c02";
			reg = <0x53>;
			pagesize = <16>;
		};
	};
};

&macb0 {
	phy-mode = "rmii";
	status = "okay";
};

&pinctrl {
	ebi {
		pinctrl_ebi_data_0_7: ebi-data-lsb-0 {
			atmel,pins =
				<AT91_PIOD 6 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 7 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 8 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 9 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 10 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 11 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 12 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 13 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)>;
		};

		pinctrl_ebi_addr_nand: ebi-addr-0 {
			atmel,pins =
				<AT91_PIOD 2 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 3 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)>;
		};
	};

	flexcom {
		pinctrl_flx0: flx0_default {
			atmel,pins =
				<AT91_PIOA 0 AT91_PERIPH_A AT91_PINCTRL_NONE
				 AT91_PIOA 1 AT91_PERIPH_A AT91_PINCTRL_NONE>;
		};
	};

	gpio-keys {
		pinctrl_key_gpio_default: pinctrl-key-gpio {
			atmel,pins = <AT91_PIOA 29 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
		};
	};

	leds {
		pinctrl_gpio_leds: gpio-leds {
			atmel,pins = <AT91_PIOD 17 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
				      AT91_PIOD 19 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
				      AT91_PIOD 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
		};
	};

	nand {
		pinctrl_nand_oe_we: nand-oe-we-0 {
			atmel,pins =
				<AT91_PIOD 0 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)
				 AT91_PIOD 1 AT91_PERIPH_A (AT91_PINCTRL_NONE | AT91_PINCTRL_SLEWRATE_DIS)>;
		};

		pinctrl_nand_rb: nand-rb-0 {
			atmel,pins =
				<AT91_PIOD 5 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
		};

		pinctrl_nand_cs: nand-cs-0 {
			atmel,pins =
				<AT91_PIOD 4 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
		};
	};

	pinctrl_onewire_tm_default: onewire_tm_default {
		atmel,pins =
			<AT91_PIOD 14 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
	};

	usb1 {
		pinctrl_usb_default: usb_default {
			atmel,pins = <AT91_PIOD 15 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
				      AT91_PIOD 18 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
		};
	};
};

&usb1 {
	num-ports = <3>;
	atmel,vbus-gpio = <0
			   &pioD 15 GPIO_ACTIVE_HIGH
			   &pioD 18 GPIO_ACTIVE_HIGH>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb_default>;
	status = "okay";
};

&usb2 {
	status = "okay";
};
