// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * at91-sama7g54_curiosity.dts - Device Tree file for SAMA7G54 CURIOSITY board
 *
 * Copyright (C) 2024 Microchip Technology Inc. and its subsidiaries
 *
 * Author: Mihai Sain <mihai.sain@microchip.com>
 *
 */
/dts-v1/;
#include "sama7g5-pinfunc.h"
#include "sama7g5.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/mfd/atmel-flexcom.h>
#include <dt-bindings/pinctrl/at91.h>

/ {
	model = "Microchip SAMA7G54 Curiosity";
	compatible = "microchip,sama7g54-curiosity", "microchip,sama7g5", "microchip,sama7";

	aliases {
		serial0 = &uart3;
		i2c0 = &i2c10;
	};

	chosen {
		bootargs = "console=ttyS0,115200 root=/dev/mmcblk1p2 rw rootwait";
		stdout-path = "serial0:115200n8";
	};

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

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

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

		led-red {
			label = "red";
			gpios = <&pioA PIN_PD13 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		led-green {
			label = "green";
			gpios = <&pioA PIN_PD14 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		led-blue {
			label = "blue";
			gpios = <&pioA PIN_PB15 GPIO_ACTIVE_HIGH>;
			default-state = "on";
		};
	};

	memory {
		device_type = "memory";
		reg = <0x60000000 0x10000000>; // 256 MiB DDR3L-1066 16-bit
	};
};

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

	nand_controller: nand-controller {
		status = "okay";

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

&flx3 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
	status = "okay";

	uart3: serial@200 {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx3_default>;
		status = "okay";
	};
};

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

	i2c10: i2c@600 {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx10_default>;
		i2c-analog-filter;
		i2c-digital-filter;
		i2c-digital-filter-width-ns = <35>;
		status = "okay";

		adc@1f {
			compatible = "microchip,pac1934";
			reg = <0x1f>;
		};

		eeprom@51 {
			compatible = "atmel,24c02";
			reg = <0x51>;
			pagesize = <16>;
			size = <256>;
		};

		pmic@5b {
			compatible = "microchip,mcp16502";
			reg = <0x5b>;
		};
	};
};

&pioA {
	pinctrl_flx3_default: flx3-default {
		pinmux = <PIN_PD16__FLEXCOM3_IO0>,
			 <PIN_PD17__FLEXCOM3_IO1>;
		bias-pull-up;
	};

	pinctrl_flx10_default: flx10-default {
		pinmux = <PIN_PC30__FLEXCOM10_IO0>,
			 <PIN_PC31__FLEXCOM10_IO1>;
		bias-pull-up;
	};

	pinctrl_led_gpio_default: led-gpio-default {
		pinmux = <PIN_PD13__GPIO>,
			 <PIN_PD14__GPIO>,
			 <PIN_PB15__GPIO>;
		bias-pull-up;
	};

	pinctrl_nand_default: nand-default {
		pinmux = <PIN_PD9__D0>,
			 <PIN_PD10__D1>,
			 <PIN_PD11__D2>,
			 <PIN_PC21__D3>,
			 <PIN_PC22__D4>,
			 <PIN_PC23__D5>,
			 <PIN_PC24__D6>,
			 <PIN_PD2__D7>,
			 <PIN_PD3__NANDRDY>,
			 <PIN_PD4__NCS3_NANDCS>,
			 <PIN_PD5__NWE_NWR0_NANDWE>,
			 <PIN_PD6__NRD_NANDOE>,
			 <PIN_PD7__A21_NANDALE>,
			 <PIN_PD8__A22_NANDCLE>;
		bias-disable;
		slew-rate = <0>;
	};

	pinctrl_qspi1_default: qspi1-default {
		pinmux = <PIN_PB22__QSPI1_IO3>,
			 <PIN_PB23__QSPI1_IO2>,
			 <PIN_PB24__QSPI1_IO1>,
			 <PIN_PB25__QSPI1_IO0>,
			 <PIN_PB26__QSPI1_CS>,
			 <PIN_PB27__QSPI1_SCK>;
		bias-pull-up;
		slew-rate = <0>;
	};

	pinctrl_sdmmc0_default: sdmmc0-default {
		pinmux = <PIN_PA0__SDMMC0_CK>,
			 <PIN_PA1__SDMMC0_CMD>,
			 <PIN_PA2__SDMMC0_RSTN>,
			 <PIN_PA3__SDMMC0_DAT0>,
			 <PIN_PA4__SDMMC0_DAT1>,
			 <PIN_PA5__SDMMC0_DAT2>,
			 <PIN_PA6__SDMMC0_DAT3>;
		bias-pull-up;
		slew-rate = <0>;
	};

	pinctrl_sdmmc1_default: sdmmc1-default {
		pinmux = <PIN_PB29__SDMMC1_CMD>,
			 <PIN_PB30__SDMMC1_CK>,
			 <PIN_PB31__SDMMC1_DAT0>,
			 <PIN_PC0__SDMMC1_DAT1>,
			 <PIN_PC1__SDMMC1_DAT2>,
			 <PIN_PC2__SDMMC1_DAT3>,
			 <PIN_PC4__SDMMC1_CD>;
		bias-pull-up;
		slew-rate = <0>;
	};
};

&qspi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_qspi1_default>;
	status = "okay";

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0x0>;
		spi-max-frequency = <100000000>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		m25p,fast-read;
	};
};

// M.2 slot for wireless card
&sdmmc0 {
	bus-width = <4>;
	cd-gpios = <&pioA 31 GPIO_ACTIVE_LOW>;
	disable-wp;
	max-frequency = <50000000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sdmmc0_default>;
	status = "okay";
};

// micro SD socket
&sdmmc1 {
	bus-width = <4>;
	disable-wp;
	max-frequency = <50000000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sdmmc1_default>;
	status = "okay";
};
