// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for Kamstrup OMNIA Flex Concentrator.
 *
 * Copyright (C) 2020 Kamstrup A/S
 * Author: Bruno Thomsen <bruno.thomsen@gmail.com>
 */

/dts-v1/;

#include "imx7d-tqma7.dtsi"

/* One I2C device on TQMa7 SoM is not mounted */
/delete-node/ &ds1339;

/ {
	model = "Kamstrup OMNIA Flex Concentrator";
	compatible = "kam,imx7d-flex-concentrator", "fsl,imx7d";

	memory@80000000 {
		device_type = "memory";
		/* 1024 MB - TQMa7D board configuration */
		reg = <0x80000000 0x40000000>;
	};

	reg_usb_otg2_vbus: regulator-usb-otg2-vbus {
		compatible = "regulator-fixed";
		regulator-name = "VBUS_USBOTG2";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	reg_vref_1v8: regulator-vref-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "VCC1V8_REF";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-always-on;
		vin-supply = <&sw2_reg>;
	};

	/*
	 * Human Machine Interface consists of 4 dual red/green LEDs.
	 * hmi-a:green is controlled directly by the switch-mode power supply.
	 * hmi-a:red is not used.
	 */
	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_leds>;

		led-0 {
			label = "hmi-b:red:heartbeat-degraded";
			gpios = <&gpio3 6 GPIO_ACTIVE_HIGH>;
		};

		led-1 {
			label = "hmi-b:green:heartbeat-running";
			gpios = <&gpio2 28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};

		led-2 {
			label = "hmi-c:red:mesh-error";
			gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>;
		};

		led-3 {
			label = "hmi-c:green:mesh-activity";
			gpios = <&gpio2 30 GPIO_ACTIVE_HIGH>;
		};

		led-4 {
			label = "hmi-d:red:omnia-error";
			gpios = <&gpio2 31 GPIO_ACTIVE_HIGH>;
		};

		led-5 {
			label = "hmi-d:green:omnia-activity";
			gpios = <&gpio4 3 GPIO_ACTIVE_HIGH>;
		};
	};

	/*
	 * Errata e10574 board restart workaround.
	 */
	gpio-restart {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_restart>;
		compatible = "gpio-restart";
		gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;
		priority = <200>;
	};
};

/*
 * Analog signals
 * ADC1_IN0: SMPS - 5V output monitor (voltage divider: 1/0.2806)
 */
&adc1 {
	vref-supply = <&reg_vref_1v8>;
	status = "okay";
};

&ecspi2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi2>;
	num-chipselects = <1>;
	cs-gpios = <&gpio4 23 GPIO_ACTIVE_LOW>;
	status = "okay";

	pcf2127: rtc@0 {
		compatible = "nxp,pcf2127";
		reg = <0>;
		spi-max-frequency = <2000000>;
		reset-source;
	};
};

&ecspi4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi4>;
	num-chipselects = <1>;
	cs-gpios = <&gpio3 3 GPIO_ACTIVE_LOW>;
	status = "okay";

	/*
	 * ST chip maximum SPI clock frequency is 33 MHz.
	 *
	 * TCG specification - Section 6.4.1 Clocking:
	 * TPM shall support a SPI clock frequency range of 10-24 MHz.
	 */
	st33htph: tpm-tis@0 {
		compatible = "st,st33htpm-spi", "tcg,tpm_tis-spi";
		reg = <0>;
		spi-max-frequency = <24000000>;
	};
};

&fec1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet1>;
	phy-mode = "rmii";
	phy-handle = <&ethphy>;
	status = "okay";

	/*
	 * MDIO bus reset is used to generate PHY device reset before
	 * Ethernet PHY type ID auto-detection. Otherwise this communication
	 * fails as device does not answer when recommended reset circuit
	 * is used.
	 */
	mdio {
		#address-cells = <1>;
		#size-cells = <0>;

		reset-delay-us = <100000>;
		reset-post-delay-us = <500000>;
		reset-gpios = <&gpio7 15 GPIO_ACTIVE_LOW>;

		/* Microchip/Micrel KSZ8081RNB */
		ethphy: ethernet-phy@1 {
			compatible = "ethernet-phy-ieee802.3-c22";
			interrupt-parent = <&gpio1>;
			interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
			reg = <1>;
		};
	};
};

/*
 * Detection signals for internal USB modules.
 * Used for robust USB plug and play handling such as USB downstream port
 * power-cycle and USB hub reset in case of misbehaving or crashed modules.
 *
 * SMPS - AC input monitor based on zero crossing.
 * Used for last gasp notification.
 */
&gpio3 {
	gpio-line-names = "", "", "", "", "", "", "", "",
	"", "", "", "", "smps-ac-monitor", "", "usb-hub-reset", "",
	"", "", "", "", "", "", "", "",
	"", "module-b-detection", "", "module-a-detection", "", "", "", "";
};

/*
 * Tamper IRQ trigger timestamp reading.
 * Used for sealed cover opened/closed notification.
 */
&gpio5 {
	gpio-line-names = "", "", "", "", "", "", "", "",
	"", "", "", "", "rtc-tamper-irq", "", "", "",
	"", "", "", "", "", "", "", "",
	"", "", "", "", "", "", "", "";
};

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

	pinctrl_ecspi2: ecspi2grp {
		fsl,pins = <
			MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO		0x7c /* X2-15 */
			MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI		0x74 /* X2-18 */
			MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK		0x74 /* X2-13 */
			MX7D_PAD_ECSPI2_SS0__GPIO4_IO23			0x74 /* X2-20 */
			/* RTC - Tamper IRQ */
			MX7D_PAD_SD2_CLK__GPIO5_IO12			0x3c /* X1-92 */
		>;
	};

	pinctrl_ecspi4: ecspi4grp {
		fsl,pins = <
			MX7D_PAD_LCD_CLK__ECSPI4_MISO			0x7c /* X2-72 */
			MX7D_PAD_LCD_ENABLE__ECSPI4_MOSI		0x74 /* X2-68 */
			MX7D_PAD_LCD_HSYNC__ECSPI4_SCLK			0x74 /* X2-76 */
			MX7D_PAD_LCD_VSYNC__GPIO3_IO3			0x74 /* X2-78 */
		>;
	};

	pinctrl_enet1: enet1grp {
		fsl,pins = <
			MX7D_PAD_GPIO1_IO10__ENET1_MDIO			0x03 /* X2-48 */
			MX7D_PAD_GPIO1_IO11__ENET1_MDC			0x03 /* X2-46 */
			MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0	0x71 /* X2-53 */
			MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1	0x71 /* X2-55 */
			MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL	0x71 /* X2-61 */
			MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0	0x79 /* X2-56 */
			MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1	0x79 /* X2-58 */
			MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL	0x79 /* X2-64 */
			MX7D_PAD_ENET1_RGMII_RXC__ENET1_RX_ER		0x73 /* X2-52 */
			/* PHY reset: SRE_FAST, DSE_X1 */
			MX7D_PAD_ENET1_COL__GPIO7_IO15			0x00 /* X1-96 */
			/* Clock from PHY to MAC: 100kPU */
			MX7D_PAD_GPIO1_IO12__CCM_ENET_REF_CLK1		0x70 /* X3-4 */
			/* PHY interrupt: 100kPU, HYS */
			MX7D_PAD_GPIO1_IO09__GPIO1_IO9			0x78 /* X1-80 */
		>;
	};

	pinctrl_leds: ledsgrp {
		fsl,pins = <
			MX7D_PAD_LCD_DATA01__GPIO3_IO6			0x14 /* X2-82 */
			MX7D_PAD_EPDC_BDR0__GPIO2_IO28			0x14 /* X1-82 */
			MX7D_PAD_EPDC_BDR1__GPIO2_IO29			0x14 /* X1-84 */
			MX7D_PAD_EPDC_PWR_COM__GPIO2_IO30		0x14 /* X1-86 */
			MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31		0x14 /* X1-88 */
			MX7D_PAD_UART2_TX_DATA__GPIO4_IO3		0x14 /* X1-90 */
		>;
	};

	pinctrl_misc: miscgrp {
		fsl,pins = <
			/* Module A detection (low = present) */
			MX7D_PAD_LCD_DATA22__GPIO3_IO27			0x7c /* X2-105 */
			/* Module B detection (low = present) */
			MX7D_PAD_LCD_DATA20__GPIO3_IO25			0x7c /* X2-103 */
			/* SMPS - AC input monitor (high = failure) */
			MX7D_PAD_LCD_DATA07__GPIO3_IO12			0x7c /* X2-88 */
			/* USB - Hub reset */
			MX7D_PAD_LCD_DATA09__GPIO3_IO14			0x74 /* X2-92 */
		>;
	};

	pinctrl_restart: restartgrp {
		fsl,pins = <
			MX7D_PAD_ENET1_TX_CLK__GPIO7_IO12	0x74 /* X1-94 */
		>;
	};

	pinctrl_uart4: uart4grp {
		fsl,pins = <
			MX7D_PAD_SAI2_TX_SYNC__UART4_DCE_RX	0x7e /* X3-14 */
			MX7D_PAD_SAI2_TX_BCLK__UART4_DCE_TX	0x76 /* X3-16 */
		>;
	};
};

&iomuxc_lpsr {
	pinctrl_usbotg2: usbotg2grp {
		fsl,pins = <
			MX7D_PAD_LPSR_GPIO1_IO06__USB_OTG2_OC	0x5c /* X3-11 */
			MX7D_PAD_LPSR_GPIO1_IO07__GPIO1_IO7	0x59 /* X3-9 */
		>;
	};

};

&uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart4>;
	assigned-clocks = <&clks IMX7D_UART4_ROOT_SRC>;
	assigned-clock-parents = <&clks IMX7D_OSC_24M_CLK>;
};

&usbotg2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usbotg2>;
	vbus-supply = <&reg_usb_otg2_vbus>;
	srp-disable;
	hnp-disable;
	adp-disable;
	over-current-active-low;
	dr_mode = "host";
	status = "okay";
};

/*
 * External watchdog feature provided by pcf2127.
 */
&wdog1 {
	status = "disabled";
};
