// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (C) 2023 Marek Vasut <marex@denx.de>
 *
 * DHCOM iMX8MP variant:
 * DHCM-iMX8ML8-C160-R409-F1638-SPI16-GE-CAN2-SD-RTC-WBTA-ADC-T-RGB-CSI2-HS-I-01D2
 * DHCOM PCB number: 660-100 or newer
 * PDK3 PCB number: 669-100 or newer
 */

/dts-v1/;

#include <dt-bindings/leds/common.h>
#include <dt-bindings/phy/phy-imx8-pcie.h>
#include "imx8mp-dhcom-som.dtsi"

/ {
	model = "DH electronics i.MX8M Plus DHCOM Premium Developer Kit (3)";
	compatible = "dh,imx8mp-dhcom-pdk3", "dh,imx8mp-dhcom-som",
		     "fsl,imx8mp";

	chosen {
		stdout-path = &uart1;
	};

	clk_ext_audio_codec: clock-codec {
		#clock-cells = <0>;
		clock-frequency = <24000000>;
		compatible = "fixed-clock";
	};

	clk_xtal25: clk-xtal25 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <25000000>;
	};

	connector {
		compatible = "usb-c-connector";
		label = "USB-C";
		data-role = "dual";

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;

				usb_c_0_hs_ep: endpoint {
					remote-endpoint = <&dwc3_0_hs_ep>;
				};
			};

			port@1 {
				reg = <1>;

				usb_c_0_ss_ep: endpoint {
					remote-endpoint = <&ptn5150_in_ep>;
				};
			};
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		button-0 {
			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; /* GPIO A */
			label = "TA1-GPIO-A";
			linux,code = <KEY_A>;
			pinctrl-0 = <&pinctrl_dhcom_a>;
			pinctrl-names = "default";
			wakeup-source;
		};

		button-1 {
			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; /* GPIO B */
			label = "TA2-GPIO-B";
			linux,code = <KEY_B>;
			pinctrl-0 = <&pinctrl_dhcom_b>;
			pinctrl-names = "default";
			wakeup-source;
		};

		button-2 {
			gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; /* GPIO C */
			label = "TA3-GPIO-C";
			linux,code = <KEY_C>;
			pinctrl-0 = <&pinctrl_dhcom_c>;
			pinctrl-names = "default";
			wakeup-source;
		};

		button-3 {
			gpios = <&gpio5 22 GPIO_ACTIVE_LOW>; /* GPIO E */
			label = "TA4-GPIO-E";
			linux,code = <KEY_E>;
			pinctrl-0 = <&pinctrl_dhcom_e>;
			pinctrl-names = "default";
			wakeup-source;
		};
	};

	led {
		compatible = "gpio-leds";

		led-0 {
			color = <LED_COLOR_ID_GREEN>;
			default-state = "off";
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <0>;
			gpios = <&gpio4 27 GPIO_ACTIVE_HIGH>; /* GPIO D */
			pinctrl-0 = <&pinctrl_dhcom_d>;
			pinctrl-names = "default";
		};

		led-1 {
			color = <LED_COLOR_ID_GREEN>;
			default-state = "off";
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <1>;
			gpios = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* GPIO F */
			pinctrl-0 = <&pinctrl_dhcom_f>;
			pinctrl-names = "default";
		};

		led-2 {
			color = <LED_COLOR_ID_GREEN>;
			default-state = "off";
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <2>;
			gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; /* GPIO G */
			pinctrl-0 = <&pinctrl_dhcom_g>;
			pinctrl-names = "default";
		};

		led-3 {
			color = <LED_COLOR_ID_GREEN>;
			default-state = "off";
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <3>;
			gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */
			pinctrl-0 = <&pinctrl_dhcom_i>;
			pinctrl-names = "default";
		};
	};

	reg_avdd: regulator-avdd {	/* AUDIO_VDD */
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-name = "AUDIO_VDD";
	};
};

&i2c5 {
	i2cmux@70 {
		compatible = "nxp,pca9540";
		reg = <0x70>;
		#address-cells = <1>;
		#size-cells = <0>;

		i2cmuxed0: i2c@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0>;

			typec@3d {
				compatible = "nxp,ptn5150";
				reg = <0x3d>;
				interrupt-parent = <&gpio4>;
				interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_ptn5150>;
				status = "okay";

				ports {
					#address-cells = <1>;
					#size-cells = <0>;

					port@0 {
						reg = <0>;

						ptn5150_in_ep: endpoint {
							remote-endpoint = <&usb_c_0_ss_ep>;
						};
					};

					port@1 {
						reg = <1>;

						ptn5150_out_ep: endpoint {
							remote-endpoint = <&dwc3_0_ss_ep>;
						};
					};
				};
			};

			power-sensor@40 {
			    compatible = "ti,ina238";
			    reg = <0x40>;
			    shunt-resistor = <20000>;	/* 0.02 R */
			    ti,shunt-gain = <1>;	/* Drop cca. 40mV */
			};

			eeprom_board: eeprom@54 {
				compatible = "atmel,24c04";
				pagesize = <16>;
				reg = <0x54>;
			};

			pcieclk: clk@6b {
				compatible = "skyworks,si52144";
				reg = <0x6b>;
				clocks = <&clk_xtal25>;
				#clock-cells = <1>;
			};
		};

		i2cmuxed1: i2c@1 {	/* HDMI DDC I2C */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <1>;
		};
	};
};

&fec {	/* Second ethernet */
	pinctrl-0 = <&pinctrl_fec_rgmii>;
	phy-handle = <&ethphypdk>;
	phy-mode = "rgmii-id";

	mdio {
		ethphypdk: ethernet-phy@7 { /* Micrel KSZ9131RNXI */
			compatible = "ethernet-phy-id0022.1642",
				     "ethernet-phy-ieee802.3-c22";
			interrupt-parent = <&gpio4>;
			interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
			pinctrl-0 = <&pinctrl_ethphy1>;
			pinctrl-names = "default";
			reg = <7>;
			reset-assert-us = <1000>;
			/* RESET_N signal rise time ~100ms */
			reset-deassert-us = <120000>;
			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
			status = "okay";
		};
	};
};

&flexcan1 {
	status = "okay";
};

&pcie_phy {
	clocks = <&pcieclk 1>;
	clock-names = "ref";
	fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_INPUT>;
	status = "okay";
};

&pcie {
	fsl,max-link-speed = <3>;
	reset-gpio = <&gpio1 6 GPIO_ACTIVE_LOW>;
	status = "okay";
};

&usb_dwc3_0 {
	usb-role-switch;

	port {
		#address-cells = <1>;
		#size-cells = <0>;

		dwc3_0_hs_ep: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&usb_c_0_hs_ep>;
		};

		dwc3_0_ss_ep: endpoint@1 {
			reg = <1>;
			remote-endpoint = <&ptn5150_out_ep>;
		};
	};
};

&usb3_1 {
	fsl,disable-port-power-control;
	fsl,permanently-attached;
};

&usb_dwc3_1 {
	/* This port has USB5734 Hub connected to it, PWR/OC pins are unused */
	/delete-property/ pinctrl-names;
	/delete-property/ pinctrl-0;
};

&iomuxc {
	/*
	 * GPIO_A,B,C,E are connected to buttons.
	 * GPIO_D,F,G,I are connected to LEDs.
	 * GPIO_H is connected to USB Hub RESET_N.
	 * GPIO_M is connected to CLKOUT2.
	 */
	pinctrl-0 = <&pinctrl_hog_base
		     &pinctrl_dhcom_h &pinctrl_dhcom_j &pinctrl_dhcom_k
		     &pinctrl_dhcom_l
		     &pinctrl_dhcom_int>;

	pinctrl_ptn5150: ptn5150grp {
		fsl,pins = <
			MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25		0x40000000
		>;
	};
};
