// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright (C) 2023 DH electronics GmbH
 * Copyright (C) 2023 Marantec electronics GmbH
 *
 * DHCOM iMX6ULL variant:
 * DHCR-iMX6ULL-C080-R051-SPI-WBT-I-01LG
 * DHCOR PCB number: 578-200 or newer
 * maveo box PCB number: 525-200 or newer
 */

/dts-v1/;

#include "imx6ull-dhcor-som.dtsi"

/ {
	model = "DH electronics i.MX6ULL DHCOR on maveo box";
	compatible = "marantec,imx6ull-dhcor-maveo-box", "dh,imx6ull-dhcor-som",
		     "fsl,imx6ull";

	aliases {
		mmc2 = &usdhc2;
		spi0 = &ecspi4;
		spi3 = &ecspi1;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	reg_usb_otg1_vbus: regulator-usb-otg1-vbus {
		compatible = "regulator-fixed";
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "usb-otg1-vbus";
	};

	reg_usb_otg2_vbus: regulator-usb-otg2-vbus {
		compatible = "regulator-fixed";
		regulator-max-microvolt = <5000000>;
		regulator-min-microvolt = <5000000>;
		regulator-name = "usb-otg2-vbus";
	};

	/* WiFi pin WL_REG_ON is connected to GPIO 5.9 */
	usdhc1_pwrseq: usdhc1-pwrseq {
		compatible = "mmc-pwrseq-simple";
		reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
	};
};

/* BT pin BT_REG_ON is connected to GPIO 1.18 */
&bluetooth {
	shutdown-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
};

/* X10 connector */
&ecspi4 {
	cs-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&pinctrl_ecspi4>;
	pinctrl-names = "default";
	status = "okay";

	spidev@0 {
		compatible = "dh,dhcom-board";
		reg = <0>;
		spi-cpha;
		spi-cpol;
		spi-max-frequency = <54000000>;
	};
};

&gpio1 {
	gpio-line-names =
		"", "", "", "",
		"", "BUTTON-USER", "", "",
		"BUTTON-RESET", "", "", "",
		"", "", "", "",
		"", "", "BT-REG-ON", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio2 {
	gpio-line-names =
		"PSOC-GPIO-1", "", "", "X10-12",
		"X10-10", "PSOC-GPIO-2", "PSOC-GPIO-3", "",
		"X10-11", "X10-9", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio3 {
	gpio-line-names =
		"DHCOR-HW0", "DHCOR-HW1", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&gpio4 {
	gpio-line-names =
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "MAVEO-BOX-HW0", "LED-G", "MAVEO-BOX-VAR1",
		"MAVEO-BOX-VAR0", "MAVEO-BOX-HW1", "MAVEO-BOX-HW2", "LED-B",
		"LED-R", "", "", "",
		"", "", "", "";
};

&gpio5 {
	gpio-line-names =
		"PSOC-SWD-IO", "PSOC-SWD-CLK", "PSOC-RESET", "ZIGBEE-PROG",
		"ZIGBEE-RESET", "", "PSOC-PWR-FAIL-OUT", "NFC-ENABLE",
		"NFC-IRQ", "WL-REG-ON", "DHCOR-BOOT-M0", "DHCOR-BOOT-M1",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "",
		"", "", "", "";
};

&i2c2 {
	clock-frequency = <100000>;
	pinctrl-0 = <&pinctrl_i2c2>;
	pinctrl-1 = <&pinctrl_i2c2_gpio>;
	pinctrl-names = "default", "gpio";
	scl-gpios = <&gpio1 30 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	sda-gpios = <&gpio1 31 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	status = "okay";
};

/* Console UART */
&uart1 {
	pinctrl-0 = <&pinctrl_uart1>;
	pinctrl-names = "default";
	status = "okay";
};

/* BT on LGA */
&uart2 {
	pinctrl-0 = <&pinctrl_uart2 &pinctrl_bt_gpio>;
};

/* Zigbee UART */
&uart3 {
	pinctrl-0 = <&pinctrl_uart3 &pinctrl_snvs_zigbee_gpio>;
	pinctrl-names = "default";
	status = "okay";
};

&usbotg1 {
	adp-disable;
	disable-over-current; /* Overcurrent pin isn't connected */
	dr_mode = "otg";
	hnp-disable;
	pinctrl-0 = <&pinctrl_usbotg1>;
	pinctrl-names = "default";
	srp-disable;
	vbus-supply = <&reg_usb_otg1_vbus>;
	status = "okay";
};

&usbotg2 {
	disable-over-current; /* Overcurrent pin isn't connected */
	dr_mode = "host";
	pinctrl-0 = <&pinctrl_usbotg2>;
	pinctrl-names = "default";
	tpl-support;
	vbus-supply = <&reg_usb_otg2_vbus>;
	status = "okay";
};

&usbphy1 {
	fsl,tx-d-cal = <106>;
};

&usbphy2 {
	fsl,tx-d-cal = <106>;
};

/* WiFi on LGA */
&usdhc1 {
	mmc-pwrseq = <&usdhc1_pwrseq>;
	pinctrl-0 = <&pinctrl_usdhc1_wifi &pinctrl_snvs_wifi_gpio>;
};

/* eMMC */
&usdhc2 {
	bus-width = <8>;
	no-1-8-v;
	non-removable;
	pinctrl-0 = <&pinctrl_usdhc2>;
	pinctrl-names = "default";
	vmmc-supply = <&vcc_3v3>;
	vqmmc-supply = <&vcc_3v3>;
	status = "okay";
};

&iomuxc {
	pinctrl-0 = <&pinctrl_hog_maveo_box>;
	pinctrl-names = "default";

	pinctrl_hog_maveo_box: hog-maveo-box-grp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO05__GPIO1_IO05	0x120b0    /* BUTTON_USER */
			MX6UL_PAD_GPIO1_IO08__GPIO1_IO08	0x120b0    /* BUTTON_RESET */
			MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18	0x400120b0 /* LED_G */
			MX6UL_PAD_CSI_DATA02__GPIO4_IO23	0x400120b0 /* LED_B */
			MX6UL_PAD_CSI_DATA03__GPIO4_IO24	0x400120b0 /* LED_R */
			MX6UL_PAD_ENET2_RX_DATA1__GPIO2_IO09	0x400120b0 /* X10_9 */
			MX6UL_PAD_ENET1_TX_DATA1__GPIO2_IO04	0x400120b0 /* X10_10 */
			MX6UL_PAD_ENET2_RX_DATA0__GPIO2_IO08	0x400120b0 /* X10_11 */
			MX6UL_PAD_ENET1_TX_DATA0__GPIO2_IO03	0x400120b0 /* X10_12 */
			MX6UL_PAD_ENET1_RX_DATA0__GPIO2_IO00	0x400120b0 /* PSOC_GPIO_1 */
			MX6UL_PAD_ENET1_TX_EN__GPIO2_IO05	0x400120b0 /* PSOC_GPIO_2 */
			MX6UL_PAD_ENET1_TX_CLK__GPIO2_IO06	0x400120b0 /* PSOC_GPIO_3 */
			MX6UL_PAD_CSI_MCLK__GPIO4_IO17		0x120b0    /* MAVEO_BOX_HW0 */
			MX6UL_PAD_CSI_DATA00__GPIO4_IO21	0x120b0    /* MAVEO_BOX_HW1 */
			MX6UL_PAD_CSI_DATA01__GPIO4_IO22	0x120b0    /* MAVEO_BOX_HW2 */
			MX6UL_PAD_CSI_HSYNC__GPIO4_IO20		0x120b0    /* MAVEO_BOX_VAR0 */
			MX6UL_PAD_CSI_VSYNC__GPIO4_IO19		0x120b0    /* MAVEO_BOX_VAR1 */
			MX6UL_PAD_LCD_CLK__GPIO3_IO00		0x120b0    /* DHCOR_HW0 */
			MX6UL_PAD_LCD_ENABLE__GPIO3_IO01	0x120b0    /* DHCOR_HW1 */
			MX6UL_PAD_LCD_DATA00__GPIO3_IO05	0x120b0
			MX6UL_PAD_LCD_DATA01__GPIO3_IO06	0x120b0
			MX6UL_PAD_LCD_DATA02__GPIO3_IO07	0x120b0
			MX6UL_PAD_LCD_DATA03__GPIO3_IO08	0x120b0
			MX6UL_PAD_LCD_DATA04__GPIO3_IO09	0x120b0
			MX6UL_PAD_LCD_DATA05__GPIO3_IO10	0x120b0
			MX6UL_PAD_LCD_DATA06__GPIO3_IO11	0x120b0
			MX6UL_PAD_LCD_DATA07__GPIO3_IO12	0x120b0
			MX6UL_PAD_LCD_DATA08__GPIO3_IO13	0x120b0
			MX6UL_PAD_LCD_DATA09__GPIO3_IO14	0x120b0
			MX6UL_PAD_LCD_DATA10__GPIO3_IO15	0x120b0
			MX6UL_PAD_LCD_DATA11__GPIO3_IO16	0x120b0
			MX6UL_PAD_LCD_DATA12__GPIO3_IO17	0x120b0
			MX6UL_PAD_LCD_DATA13__GPIO3_IO18	0x120b0
			MX6UL_PAD_LCD_DATA14__GPIO3_IO19	0x120b0
			MX6UL_PAD_LCD_DATA15__GPIO3_IO20	0x120b0
			MX6UL_PAD_LCD_DATA16__GPIO3_IO21	0x120b0
			MX6UL_PAD_LCD_DATA17__GPIO3_IO22	0x120b0
			MX6UL_PAD_LCD_DATA18__GPIO3_IO23	0x120b0
		>;
	};

	pinctrl_bt_gpio: bt-gpio-grp {
		fsl,pins = <
			MX6UL_PAD_UART1_CTS_B__GPIO1_IO18	0x400120b0 /* BT_REG_ON */
		>;
	};

	pinctrl_ecspi4: ecspi4-grp {
		fsl,pins = <
			MX6UL_PAD_ENET2_TX_CLK__ECSPI4_MISO	0x100b1
			MX6UL_PAD_ENET2_TX_EN__ECSPI4_MOSI	0x100b1
			MX6UL_PAD_ENET2_TX_DATA1__ECSPI4_SCLK	0x100b1
			MX6UL_PAD_ENET2_RX_ER__GPIO2_IO15	0x1b0b0 /* SS0 */
		>;
	};

	pinctrl_i2c2: i2c2-grp {
		fsl,pins = <
			MX6UL_PAD_UART5_TX_DATA__I2C2_SCL	0x4001b8b0
			MX6UL_PAD_UART5_RX_DATA__I2C2_SDA	0x4001b8b0
		>;
	};

	pinctrl_i2c2_gpio: i2c2-gpio-grp {
		fsl,pins = <
			MX6UL_PAD_UART5_TX_DATA__GPIO1_IO30	0x4001b8b0
			MX6UL_PAD_UART5_RX_DATA__GPIO1_IO31	0x4001b8b0
		>;
	};

	pinctrl_uart1: uart1-grp {
		fsl,pins = <
			MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX	0x1b0b1
			MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX	0x1b0b1
		>;
	};

	pinctrl_uart3: uart3-grp {
		fsl,pins = <
			MX6UL_PAD_NAND_READY_B__UART3_DCE_TX	0x1b0b1
			MX6UL_PAD_NAND_CE0_B__UART3_DCE_RX	0x1b0b1
		>;
	};

	pinctrl_usbotg1: usbotg1-grp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID	0x17059
			MX6UL_PAD_GPIO1_IO04__GPIO1_IO04	0x120b0 /* USB_OTG1_PWR */
		>;
	};

	pinctrl_usbotg2: usbotg2-grp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO02__GPIO1_IO02	0x120b0 /* USB_OTG2_PWR */
		>;
	};

	pinctrl_usdhc2: usdhc2-grp {
		fsl,pins = <
			MX6UL_PAD_NAND_RE_B__USDHC2_CLK		0x10069
			MX6UL_PAD_NAND_WE_B__USDHC2_CMD		0x17059
			MX6UL_PAD_NAND_DATA00__USDHC2_DATA0	0x17059
			MX6UL_PAD_NAND_DATA01__USDHC2_DATA1	0x17059
			MX6UL_PAD_NAND_DATA02__USDHC2_DATA2	0x17059
			MX6UL_PAD_NAND_DATA03__USDHC2_DATA3	0x17059
			MX6UL_PAD_NAND_DATA04__USDHC2_DATA4	0x17059
			MX6UL_PAD_NAND_DATA05__USDHC2_DATA5	0x17059
			MX6UL_PAD_NAND_DATA06__USDHC2_DATA6	0x17059
			MX6UL_PAD_NAND_DATA07__USDHC2_DATA7	0x17059
			MX6UL_PAD_NAND_ALE__USDHC2_RESET_B	0x17059 /* SD2 Reset */
		>;
	};
};

&iomuxc_snvs {
	pinctrl-0 = <&pinctrl_snvs_hog_maveo_box>;
	pinctrl-names = "default";

	pinctrl_snvs_hog_maveo_box: snvs-hog-maveo-box-grp {
		fsl,pins = <
			MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00	0x400120b0 /* PSOC_SWD_IO */
			MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01	0x400120b0 /* PSOC_SWD_CLK */
			MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02	0x400120b0 /* PSOC_RESET */
			MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06	0x400120b0 /* PSOC_PWR_FAIL_OUT */
			MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07	0x400120b0 /* NFC_ENABLE */
			MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x400120b0 /* NFC_IRQ */
			MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10	0x120b0    /* DHCOR_BOOT_M0 */
			MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11	0x120b0    /* DHCOR_BOOT_M1 */
		>;
	};

	pinctrl_snvs_wifi_gpio: snvs-wifi-gpio-grp {
		fsl,pins = <
			MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09	0x400120b0 /* WL_REG_ON */
		>;
	};

	pinctrl_snvs_zigbee_gpio: snvs-zigbee-gpio-grp {
		fsl,pins = <
			MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03	0x400120b0 /* ZIGBEE_PROG */
			MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04	0x400120b0 /* ZIGBEE_RESET */
		>;
	};
};