Commit 44eeddd6 authored by Marek Vasut's avatar Marek Vasut Committed by Shawn Guo
Browse files

arm64: dts: imx8mp: Add support for DH electronics i.MX8M Plus DHCOM and PDK3



Add support for DH electronics i.MX8M Plus DHCOM SoM on PDK3 carrier board.
Currently supported are serial console, EQoS and FEC ethernets, eMMC, SD,
SPI NOR, CAN, M.2 E-Key or M.2 M-Key PCIe, USB .

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Reviewed-by: default avatarFabio Estevam <festevam@gmail.com>
Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
parent 1fe5ea7c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mn-venice-gw7902.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-beacon-kit.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-debix-model-a.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk3.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-evk.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-icore-mx8mp-edimm2.2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mp-msc-sm2s-ep1.dtb
+306 −0
Original line number Diff line number Diff line
// 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_pcie: clock-pcie {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <100000000>;
	};

	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 {
	i2c-mux@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>;

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

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

&flexcan1 {
	status = "okay";
};

&pcie_phy {
	clocks = <&clk_pcie>;
	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
		>;
	};
};