// 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>;
		};
	};
};

&ethphy0g {
	reg = <7>;
};

&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
		>;
	};
};
