// 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 = <1200000>;
				regulator-max-microvolt = <3700000>;
				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 = <600000>;
				regulator-max-microvolt = <1850000>;
				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 = <600000>;
				regulator-max-microvolt = <1850000>;
				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 = <1200000>;
				regulator-max-microvolt = <3700000>;
				regulator-always-on;

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

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

			LDO2 {
				regulator-name = "LDO2";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <3700000>;
				regulator-always-on;

				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;
	};
};

