// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
 * Copyright 2021-2022 Marek Vasut <marex@denx.de>
 */

/dts-v1/;

#include "imx8mm-verdin.dtsi"

/ {
	model = "MENLO MX8MM EMBEDDED DEVICE";
	compatible = "menlo,mx8menlo",
		     "toradex,verdin-imx8mm-nonwifi",
		     "toradex,verdin-imx8mm",
		     "fsl,imx8mm";

	/delete-node/ gpio-keys;

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

		led-1 {
			label = "TestLed601";
			gpios = <&gpio4 18 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "mmc0";
		};

		led-2 {
			label = "TestLed602";
			gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	beeper {
		compatible = "gpio-beeper";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_beeper>;
		gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;
	};

	/* Fixed clock dedicated to SPI CAN on carrier board */
	clk_xtal20: clk-xtal20 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <20000000>;
	};
};

&ecspi1 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi1>;
	cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
	status = "okay";

	/* CAN controller on the baseboard */
	canfd: can@0 {
		compatible = "microchip,mcp2518fd";
		clocks = <&clk_xtal20>;
		interrupt-parent = <&gpio1>;
		interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
		reg = <0>;
		spi-max-frequency = <2000000>;
	};

};

&ecspi2 {
	pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_gpio1>;
	cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>, <&gpio3 4 GPIO_ACTIVE_LOW>;
	status = "okay";

	spidev@0 {
		compatible = "menlo,m53cpld";
		reg = <0>;
		spi-max-frequency = <25000000>;
	};

	spidev@1 {
		compatible = "menlo,m53cpld";
		reg = <1>;
		spi-max-frequency = <25000000>;
	};

};

&ethphy0 {
	max-speed = <100>;
};

&fec1 {
	status = "okay";
};

&flexspi {
	status = "okay";

	flash@0 {
		reg = <0>;
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "jedec,spi-nor";
		spi-max-frequency = <66000000>;
		spi-rx-bus-width = <4>;
		spi-tx-bus-width = <4>;
	};
};

&gpio1 {
	gpio-line-names =
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio2 {
	gpio-line-names =
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio3 {
	gpio-line-names =
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "DISP_reset", "KBD_intI",
		"", "", "", "",
		"", "", "", "";
};

&gpio4 {
	/*
	 * CPLD_D[n] is ARM_CPLD[n] in schematic
	 * CPLD_int is SA_INTERRUPT in schematic
	 * CPLD_reset is RESET_SOFT in schematic
	 */
	gpio-line-names =
		"CPLD_D[6]", "CPLD_int", "CPLD_reset", "",
		"", "CPLD_D[7]", "", "",
		"", "", "", "CPLD_D[5]",
		"CPLD_D[4]", "CPLD_D[3]", "CPLD_D[2]", "CPLD_D[1]",
		"CPLD_D[0]", "", "", "",
		"", "", "", "",
		"", "", "", "KBD_intK",
		"", "", "", "";
};

&gpio5 {
	gpio-line-names =
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio_expander_21 {
	status = "okay";
};

&hwmon {
	status = "okay";
};

&i2c3 {
	status = "okay";
};

&i2c4 {
	/* None of this is present on the SoM. */
	/delete-node/ bridge@2c;
	/delete-node/ hdmi@48;
	/delete-node/ touch@4a;
	/delete-node/ sensor@4f;
	/delete-node/ eeprom@50;
	/delete-node/ eeprom@57;
};

&iomuxc {
	pinctrl-0 = <&pinctrl_gpio7>, <&pinctrl_gpio_hog1>,
		    <&pinctrl_gpio_hog2>, <&pinctrl_gpio_hog3>;

	pinctrl_beeper: beepergrp {
		fsl,pins = <
			MX8MM_IOMUXC_SPDIF_TX_GPIO5_IO3			0x1c4
		>;
	};

	pinctrl_ecspi1: ecspi1grp {
		fsl,pins = <
			MX8MM_IOMUXC_ECSPI1_SCLK_ECSPI1_SCLK		0x4
			MX8MM_IOMUXC_ECSPI1_MOSI_ECSPI1_MOSI		0x4
			MX8MM_IOMUXC_ECSPI1_MISO_ECSPI1_MISO		0x1c4
			MX8MM_IOMUXC_ECSPI1_SS0_GPIO5_IO9		0x1c4
		>;
	};

	pinctrl_led: ledgrp {
		fsl,pins = <
			MX8MM_IOMUXC_SAI1_TXD6_GPIO4_IO18		0x1c4
			MX8MM_IOMUXC_SAI1_TXFS_GPIO4_IO10		0x1c4
		>;
	};

	pinctrl_uart4_rts: uart4rtsgrp {
		fsl,pins = <
			/* SODIMM 222 */
			MX8MM_IOMUXC_GPIO1_IO09_GPIO1_IO9		0x184
		>;
	};
};

&pinctrl_gpio1 {
	fsl,pins = <
		/* SODIMM 206 */
		MX8MM_IOMUXC_NAND_CE3_B_GPIO3_IO4			0x1c4
	>;
};

&pinctrl_gpio_hog1 {
	fsl,pins = <
		/* SODIMM 88 */
		MX8MM_IOMUXC_SAI1_MCLK_GPIO4_IO20			0x1c4
		/* CPLD_int */
		MX8MM_IOMUXC_SAI1_RXC_GPIO4_IO1				0x1c4
		/* CPLD_reset */
		MX8MM_IOMUXC_SAI1_RXD0_GPIO4_IO2			0x1c4
		/* SODIMM 94 */
		MX8MM_IOMUXC_SAI1_RXD1_GPIO4_IO3			0x1c4
		/* SODIMM 96 */
		MX8MM_IOMUXC_SAI1_RXD2_GPIO4_IO4			0x1c4
		/* CPLD_D[7] */
		MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5			0x184
		/* CPLD_D[6] */
		MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0			0x184
		/* CPLD_D[5] */
		MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11			0x184
		/* CPLD_D[4] */
		MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12			0x184
		/* CPLD_D[3] */
		MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13			0x184
		/* CPLD_D[2] */
		MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14			0x184
		/* CPLD_D[1] */
		MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15			0x184
		/* CPLD_D[0] */
		MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16			0x184
		/* KBD_intK */
		MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27			0x1c4
		/* DISP_reset */
		MX8MM_IOMUXC_SAI5_RXD1_GPIO3_IO22			0x1c4
		/* KBD_intI */
		MX8MM_IOMUXC_SAI5_RXD2_GPIO3_IO23			0x1c4
		/* SODIMM 46 */
		MX8MM_IOMUXC_SAI5_RXD3_GPIO3_IO24			0x1c4
	>;
};

&pinctrl_uart1 {
	fsl,pins = <
		/* SODIMM 149 */
		MX8MM_IOMUXC_SAI2_RXFS_UART1_DCE_TX			0x1c4
		/* SODIMM 147 */
		MX8MM_IOMUXC_SAI2_RXC_UART1_DCE_RX			0x1c4
		/* SODIMM 210 */
		MX8MM_IOMUXC_UART3_RXD_UART1_DTE_RTS_B			0x1c4
		/* SODIMM 212 */
		MX8MM_IOMUXC_UART3_TXD_UART1_DTE_CTS_B			0x1c4
	>;
};

&reg_usb_otg1_vbus {
	/delete-property/ enable-active-high;
	gpio = <&gpio1 12 GPIO_ACTIVE_LOW>;
};

&reg_usb_otg2_vbus {
	/delete-property/ enable-active-high;
	gpio = <&gpio1 14 GPIO_ACTIVE_LOW>;
};

&sai2 {
	status = "disabled";
};

&uart1 {
	uart-has-rtscts;
	status = "okay";
};

&uart2 {
	status = "okay";
};

&uart4 {
	pinctrl-0 = <&pinctrl_uart4 &pinctrl_uart4_rts>;
	linux,rs485-enabled-at-boot-time;
	rts-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&usbotg1 {
	dr_mode = "peripheral";
	status = "okay";
};

&usbotg2 {
	dr_mode = "host";
	status = "okay";
};

&usdhc2 {
	status = "okay";
};