// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * at91-sama5d27_wlsom1.dtsi - Device Tree file for SAMA5D27 WLSOM1
 *
 * Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries
 *
 * Author: Nicolas Ferre <nicolas.ferre@microcihp.com>
 * Author: Eugen Hristev <eugen.hristev@microcihp.com>
 */
#include "sama5d2.dtsi"
#include "sama5d2-pinfunc.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/mfd/atmel-flexcom.h>
#include <dt-bindings/pinctrl/at91.h>

/ {
	model = "Microchip SAMA5D27 WLSOM1";
	compatible = "microchip,sama5d27-wlsom1", "atmel,sama5d27", "atmel,sama5d2", "atmel,sama5";

	aliases {
		i2c0 = &i2c0;
	};

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

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

&flx1 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;

	uart6: serial@200 {
		pinctrl-0 = <&pinctrl_flx1_default>;
		pinctrl-names = "default";
	};
};

&i2c0 {
	pinctrl-0 = <&pinctrl_i2c0_default>;
	pinctrl-1 = <&pinctrl_i2c0_gpio>;
	pinctrl-names = "default", "gpio";
	sda-gpios = <&pioA PIN_PD21 GPIO_ACTIVE_HIGH>;
	scl-gpios = <&pioA PIN_PD22 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	status = "okay";
};

&i2c1 {
	dmas = <0>, <0>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c1_default>;
	pinctrl-1 = <&pinctrl_i2c1_gpio>;
	sda-gpios = <&pioA PIN_PD19 GPIO_ACTIVE_HIGH>;
	scl-gpios = <&pioA PIN_PD20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	status = "okay";

	mcp16502@5b {
		compatible = "microchip,mcp16502";
		reg = <0x5b>;
		status = "okay";
		lpm-gpios = <&pioBU 0 GPIO_ACTIVE_LOW>;

		regulators {
			vdd_3v3: VDD_IO {
				regulator-name = "VDD_IO";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-initial-mode = <2>;
				regulator-allowed-modes = <2>, <4>;
				regulator-always-on;

				regulator-state-standby {
					regulator-on-in-suspend;
					regulator-mode = <4>;
				};

				regulator-state-mem {
					regulator-off-in-suspend;
					regulator-mode = <4>;
				};
			};

			vddio_ddr: VDD_DDR {
				regulator-name = "VDD_DDR";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1200000>;
				regulator-initial-mode = <2>;
				regulator-allowed-modes = <2>, <4>;
				regulator-always-on;

				regulator-state-standby {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1200000>;
					regulator-changeable-in-suspend;
					regulator-mode = <4>;
				};

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1200000>;
					regulator-changeable-in-suspend;
					regulator-mode = <4>;
				};
			};

			vdd_core: VDD_CORE {
				regulator-name = "VDD_CORE";
				regulator-min-microvolt = <1250000>;
				regulator-max-microvolt = <1250000>;
				regulator-initial-mode = <2>;
				regulator-allowed-modes = <2>, <4>;
				regulator-always-on;

				regulator-state-standby {
					regulator-on-in-suspend;
					regulator-mode = <4>;
				};

				regulator-state-mem {
					regulator-off-in-suspend;
					regulator-mode = <4>;
				};
			};

			vdd_ddr: VDD_OTHER {
				regulator-name = "VDD_OTHER";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-initial-mode = <2>;
				regulator-allowed-modes = <2>, <4>;
				regulator-always-on;

				regulator-state-standby {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
					regulator-changeable-in-suspend;
					regulator-mode = <4>;
				};

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
					regulator-changeable-in-suspend;
					regulator-mode = <4>;
				};
			};

			LDO1 {
				regulator-name = "LDO1";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;

				regulator-state-standby {
					regulator-on-in-suspend;
				};

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			LDO2 {
				regulator-name = "LDO2";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;

				regulator-state-standby {
					regulator-on-in-suspend;
				};

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};
		};
	};
};

&macb0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_macb0_default>;
	phy-mode = "rmii";

	ethernet-phy@0 {
		reg = <0x0>;
		interrupt-parent = <&pioA>;
		interrupts = <PIN_PB24 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_macb0_phy_irq>;
	};
};

&pmc {
	atmel,osc-bypass;
};

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

	qspi1_flash: spi_flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <80000000>;
		spi-rx-bus-width = <4>;
		spi-tx-bus-width = <4>;
		m25p,fast-read;
		status = "disabled";

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

		bootloader@40000 {
			label = "bootloader";
			reg = <0x40000 0xc0000>;
		};

		bootloaderenvred@100000 {
			label = "bootloader env redundant";
			reg = <0x100000 0x40000>;
		};

		bootloaderenv@140000 {
			label = "bootloader env";
			reg = <0x140000 0x40000>;
		};

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

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

&pioA {
	pinctrl_flx1_default: flx1_usart_default {
		pinmux = <PIN_PA24__FLEXCOM1_IO0>,
			 <PIN_PA23__FLEXCOM1_IO1>,
			 <PIN_PA25__FLEXCOM1_IO3>,
			 <PIN_PA26__FLEXCOM1_IO4>;
		bias-disable;
	};

	pinctrl_i2c0_default: i2c0_default {
		pinmux = <PIN_PD21__TWD0>,
			 <PIN_PD22__TWCK0>;
		bias-disable;
	};

	pinctrl_i2c0_gpio: i2c0_gpio {
		pinmux = <PIN_PD21__GPIO>,
			 <PIN_PD22__GPIO>;
		bias-disable;
	};

	pinctrl_i2c1_default: i2c1_default {
		pinmux = <PIN_PD19__TWD1>,
			 <PIN_PD20__TWCK1>;
		bias-disable;
	};

	pinctrl_i2c1_gpio: i2c1_gpio {
		pinmux = <PIN_PD19__GPIO>,
			 <PIN_PD20__GPIO>;
		bias-disable;
	};

	pinctrl_macb0_default: macb0_default {
		pinmux = <PIN_PB14__GTXCK>,
			 <PIN_PB15__GTXEN>,
			 <PIN_PB16__GRXDV>,
			 <PIN_PB17__GRXER>,
			 <PIN_PB18__GRX0>,
			 <PIN_PB19__GRX1>,
			 <PIN_PB20__GTX0>,
			 <PIN_PB21__GTX1>,
			 <PIN_PB22__GMDC>,
			 <PIN_PB23__GMDIO>;
		bias-disable;
	};

	pinctrl_macb0_phy_irq: macb0_phy_irq {
		pinmux = <PIN_PB24__GPIO>;
		bias-disable;
	};

	pinctrl_qspi1_default: qspi1_default {
		pinmux = <PIN_PB5__QSPI1_SCK>,
			 <PIN_PB6__QSPI1_CS>,
			 <PIN_PB7__QSPI1_IO0>,
			 <PIN_PB8__QSPI1_IO1>,
			 <PIN_PB9__QSPI1_IO2>,
			 <PIN_PB10__QSPI1_IO3>;
		bias-pull-up;
	};
};

