// SPDX-License-Identifier: GPL-2.0

#include "pxa3xx.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
	/* Will be overridden by bootloader */
	hw-revision = <0>;

	chosen {
		bootargs = "root=ubi0:RootFS rootfstype=ubifs rw ubi.mtd=3";
		stdout-path = &ffuart;
	};

	memory {
		device_type = "memory";
		reg = <0xa0000000 0x8000000>;	/* 128 MB */
	};

	reg_3v3: regulator-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "3v3-fixed-supply";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	reg_1v8: regulator-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "1v8-fixed-supply";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-always-on;
	};

	reg_va_5v0: regulator-va-5v0 {
		compatible = "regulator-fixed";
		regulator-name = "va-5v0-fixed-supply";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&gpio 124 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	ssp_dai0: ssp-dai0 {
		compatible = "mrvl,pxa-ssp-dai";
		pinctrl-names = "default";
		pinctrl-0 = <&ssp0_dai_pins>;
		port = <&ssp1>;
		#sound-dai-cells = <0>;
		dmas = <&pdma 13 3
			&pdma 14 3>;
		dma-names = "rx", "tx";
		clock-names = "extclk";
	};

	ssp_dai1: ssp-dai1 {
		compatible = "mrvl,pxa-ssp-dai";
		pinctrl-names = "default";
		pinctrl-0 = <&ssp1_dai_pins>;
		port = <&ssp2>;
		#sound-dai-cells = <0>;
		dmas = <&pdma 15 3
			&pdma 16 3>;
		dma-names = "rx", "tx";
		clock-names = "extclk";
	};

	spi: spi {
		compatible = "spi-gpio";
		#address-cells = <0x1>;
		#size-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&spi_pins>;
		gpio-sck = <&gpio 95 GPIO_ACTIVE_HIGH>;
		gpio-miso = <&gpio 98 GPIO_ACTIVE_HIGH>;
		gpio-mosi = <&gpio 97 GPIO_ACTIVE_HIGH>;
		cs-gpios = <
			&gpio 34 GPIO_ACTIVE_HIGH
			&gpio 125 GPIO_ACTIVE_HIGH
			&gpio 96 GPIO_ACTIVE_HIGH
		>;
		num-chipselects = <3>;

		dac: dac@2 {
			compatible = "ti,dac7512";
			reg = <2>;
			spi-max-frequency = <1000000>;
			vcc-supply = <&reg_3v3>;
		};
	};

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

		on-off {
			label = "on_off button";
			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_F6>;
		};

		rescue-boot {
			label = "rescue boot button";
			gpios = <&gpio 115 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_F4>;
		};

		setup {
			label = "setup";
			gpios = <&gpio 119 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_F3>;
		};
	};

	rotary: rotary-encoder {
		compatible = "rotary-encoder";
		gpios = <
			&gpio 19 GPIO_ACTIVE_LOW
			&gpio 20 GPIO_ACTIVE_HIGH
		>;
		linux,axis = <REL_X>;
		rotary-encoder,relative-axis;
	};

	leds: leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&led_pins_a &led_pins_b>;

		left {
			label = "raumfeld:1";
			gpios = <&gpio 36 GPIO_ACTIVE_LOW>;
		};

		right {
			label = "raumfeld:2";
			gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
		};
	};

	poweroff {
		compatible = "gpio-poweroff";
		pinctrl-names = "default";
		pinctrl-0 = <&poweroff_pins>;
		gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
	};

	mmc0_pwrseq: mmc-pwrseq {
		compatible = "mmc-pwrseq-simple";
		pinctrl-names = "default";
		pinctrl-0 = <&mmc0_pwrseq_pins>;
		reset-gpios = <
			&gpio 113 GPIO_ACTIVE_LOW	/* W2W_RESET	*/
			&gpio 114 GPIO_ACTIVE_LOW	/* W2W_PDN	*/
		>;
	};

	ethernet: ethernet@10000000 {
		compatible = "smsc,lan9115";
		pinctrl-names = "default";
		pinctrl-0 = <&smsc_pins &smsc_bus_pins>;
		reg = <0x10000000 0x100000>;
		phy-mode = "mii";
		interrupt-parent = <&gpio>;
		interrupts = <40 IRQ_TYPE_EDGE_FALLING>;
		vdd33a-supply = <&reg_3v3>;
		vddvario-supply = <&reg_1v8>;
		reset-gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
		reg-io-width = <4>;
		smsc,save-mac-address;
		smsc,irq-push-pull;
	};
};

&ffuart {
	status = "okay";
};

&pwri2c {
	status = "okay";

	max8660: regulator@34 {
		compatible = "maxim,max8660";
		reg = <0x34>;

		regulators {
			regulator-v3 {
				regulator-compatible = "V3(DCDC)";
				regulator-min-microvolt = <725000>;
				regulator-max-microvolt = <1800000>;
			};

			regulator-v4 {
				regulator-compatible = "V4(DCDC)";
				regulator-min-microvolt = <725000>;
				regulator-max-microvolt = <1800000>;
			};

			regulator-v5 {
				regulator-compatible = "V5(LDO)";
				regulator-min-microvolt = <1700000>;
				regulator-max-microvolt = <2000000>;
			};

			reg_vcc_sdio: regulator-v6 {
				regulator-compatible = "V6(LDO)";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
			};

			regulator-v7 {
				regulator-compatible = "V7(LDO)";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
			};
		};
	};
};

&pxai2c1 {
	status = "okay";
	mrvl,i2c-fast-mode;
	pinctrl-names = "default";
	pinctrl-0 = <&pxai2c1_pins>;
};

&ssp1 {
	status = "okay";
};

&ssp2 {
	status = "okay";
};

&nand_controller {
	status = "okay";

	nand@0 {
		reg = <0>;
		nand-rb = <0>;
		nand-ecc-mode = "hw";
		marvell,nand-keep-config;

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

			partition@0 {
				label = "Bootloader";
				reg = <0x0000000 0xa0000>;
				read-only;
			};

			partition@a0000 {
				label = "BootloaderEnvironment";
				reg = <0x0a0000 0x20000>;
			};

			partition@c0000 {
				label = "BootloaderSplashScreen";
				reg = <0x0c0000 0x60000>;
			};

			partition@120000 {
				label = "UBI";
				reg = <0x120000 0x7ee0000>;
			};
		};
	};
};

&usb0 {
	status = "okay";
	marvell,enable-port1;
	marvell,port-mode = <2>; /* PMM_GLOBAL_MODE */
	pinctrl-names = "default";
	pinctrl-0 = <&pxa3xx_ohci_pins>;
};

&mmc0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&mmc0_pins>;
	pxa-mmc,detect-delay-ms = <200>;
	vmmc-supply = <&reg_vcc_sdio>;
	mmc-pwrseq = <&mmc0_pwrseq>;
	non-removable;
	bus-width = <4>;
};

&pinctrl {
	poweroff_pins: poweroff-pins {
		pinctrl-single,pins = <MFP_PIN_PXA300(16) MFP_AF0>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
	};

	led_pins_a: led-pins-a {
		pinctrl-single,pins = <MFP_PIN_PXA300(35) MFP_AF0>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};

	led_pins_b: led-pins-b {
		pinctrl-single,pins = <MFP_PIN_PXA300(36) MFP_AF0>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH);
	};

	pxai2c1_pins: pxai2c1-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(21) MFP_AF1	/* I2C_SCL	*/
			MFP_PIN_PXA300(22) MFP_AF1	/* I2C_SDA	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_HIGH);
	};

	gpio_keys_pins: gpio-keys-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(14) MFP_AF0	/* on-off	*/
			MFP_PIN_PXA300(115) MFP_AF0	/* rescue boot	*/
			MFP_PIN_PXA300(119) MFP_AF0	/* setup	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
	};

	spi_pins: spi-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(95) MFP_AF0	/* SCK		*/
			MFP_PIN_PXA300(97) MFP_AF0	/* MOSI		*/
			MFP_PIN_PXA300(98) MFP_AF0	/* MISO		*/
			MFP_PIN_PXA300(34) MFP_AF0	/* CS#0		*/
			MFP_PIN_PXA300(125) MFP_AF0	/* CS#1		*/
			MFP_PIN_PXA300(96) MFP_AF0	/* CS#2		*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};

	pxa3xx_ohci_pins: pxa3xx-ohci-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300_2(0) MFP_AF1	/* USBHPEN	*/
			MFP_PIN_PXA300_2(1) MFP_AF1	/* USBHPWR	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};

	smsc_pins: smsc-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(39) MFP_AF0	/* RESET	*/
			MFP_PIN_PXA300(40) MFP_AF0	/* IRQ		*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};

	smsc_bus_pins: smsc-bus-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(1) MFP_AF1	/* nCS2		*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
	};

	mmc0_pins: mmc0-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(3) MFP_AF4	/* MMC1_DAT0	*/
			MFP_PIN_PXA300(4) MFP_AF4	/* MMC1_DAT1	*/
			MFP_PIN_PXA300(5) MFP_AF4	/* MMC1_DAT2	*/
			MFP_PIN_PXA300(6) MFP_AF4	/* MMC1_DAT3	*/
			MFP_PIN_PXA300(7) MFP_AF4	/* MMC1_CLK	*/
			MFP_PIN_PXA300(8) MFP_AF4	/* MMC1_CMD	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH);
	};

	mmc0_pwrseq_pins: mmc0-pwrseq-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(113) MFP_AF0	/* W2W_RESET	*/
			MFP_PIN_PXA300(114) MFP_AF0	/* W2W_PDN	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
	};

	ssp0_dai_pins: ssp0-dai-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(85) MFP_AF1	/* SSP1_SCLK	*/
			MFP_PIN_PXA300(86) MFP_AF1	/* SSP1_FRM	*/
			MFP_PIN_PXA300(87) MFP_AF1	/* SSP1_TXD	*/
			MFP_PIN_PXA300(88) MFP_AF1	/* SSP1_RXD	*/
			MFP_PIN_PXA300(89) MFP_AF1	/* SSP1_EXTCLK	*/
			MFP_PIN_PXA300(90) MFP_AF1	/* SSP1_SYSCLK	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};

	ssp1_dai_pins: ssp1-dai-pins {
		pinctrl-single,pins = <
			MFP_PIN_PXA300(25) MFP_AF2	/* SSP2_SCLK	*/
			MFP_PIN_PXA300(26) MFP_AF2	/* SSP2_FRM	*/
			MFP_PIN_PXA300(27) MFP_AF2	/* SSP2_TXD	*/
			MFP_PIN_PXA300(29) MFP_AF2	/* SSP2_EXTCLK	*/
		>;
		pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
	};
};