1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (C) 2023 Marek Vasut <marex@denx.de>
4 *
5 * DHCOM iMX8MP variant:
6 * DHCM-iMX8ML8-C160-R409-F1638-SPI16-GE-CAN2-SD-RTC-WBTA-ADC-T-RGB-CSI2-HS-I-01D2
7 * DHCOM PCB number: 660-100 or newer
8 * PDK3 PCB number: 669-100 or newer
9 */
10
11/dts-v1/;
12
13#include <dt-bindings/leds/common.h>
14#include <dt-bindings/phy/phy-imx8-pcie.h>
15#include "imx8mp-dhcom-som.dtsi"
16
17/ {
18	model = "DH electronics i.MX8M Plus DHCOM Premium Developer Kit (3)";
19	compatible = "dh,imx8mp-dhcom-pdk3", "dh,imx8mp-dhcom-som",
20		     "fsl,imx8mp";
21
22	chosen {
23		stdout-path = &uart1;
24	};
25
26	clk_ext_audio_codec: clock-codec {
27		#clock-cells = <0>;
28		clock-frequency = <24000000>;
29		compatible = "fixed-clock";
30	};
31
32	clk_xtal25: clk-xtal25 {
33		compatible = "fixed-clock";
34		#clock-cells = <0>;
35		clock-frequency = <25000000>;
36	};
37
38	connector {
39		compatible = "usb-c-connector";
40		label = "USB-C";
41		data-role = "dual";
42
43		ports {
44			#address-cells = <1>;
45			#size-cells = <0>;
46
47			port@0 {
48				reg = <0>;
49
50				usb_c_0_hs_ep: endpoint {
51					remote-endpoint = <&dwc3_0_hs_ep>;
52				};
53			};
54
55			port@1 {
56				reg = <1>;
57
58				usb_c_0_ss_ep: endpoint {
59					remote-endpoint = <&ptn5150_in_ep>;
60				};
61			};
62		};
63	};
64
65	gpio-keys {
66		compatible = "gpio-keys";
67
68		button-0 {
69			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; /* GPIO A */
70			label = "TA1-GPIO-A";
71			linux,code = <KEY_A>;
72			pinctrl-0 = <&pinctrl_dhcom_a>;
73			pinctrl-names = "default";
74			wakeup-source;
75		};
76
77		button-1 {
78			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; /* GPIO B */
79			label = "TA2-GPIO-B";
80			linux,code = <KEY_B>;
81			pinctrl-0 = <&pinctrl_dhcom_b>;
82			pinctrl-names = "default";
83			wakeup-source;
84		};
85
86		button-2 {
87			gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; /* GPIO C */
88			label = "TA3-GPIO-C";
89			linux,code = <KEY_C>;
90			pinctrl-0 = <&pinctrl_dhcom_c>;
91			pinctrl-names = "default";
92			wakeup-source;
93		};
94
95		button-3 {
96			gpios = <&gpio5 22 GPIO_ACTIVE_LOW>; /* GPIO E */
97			label = "TA4-GPIO-E";
98			linux,code = <KEY_E>;
99			pinctrl-0 = <&pinctrl_dhcom_e>;
100			pinctrl-names = "default";
101			wakeup-source;
102		};
103	};
104
105	led {
106		compatible = "gpio-leds";
107
108		led-0 {
109			color = <LED_COLOR_ID_GREEN>;
110			default-state = "off";
111			function = LED_FUNCTION_INDICATOR;
112			function-enumerator = <0>;
113			gpios = <&gpio4 27 GPIO_ACTIVE_HIGH>; /* GPIO D */
114			pinctrl-0 = <&pinctrl_dhcom_d>;
115			pinctrl-names = "default";
116		};
117
118		led-1 {
119			color = <LED_COLOR_ID_GREEN>;
120			default-state = "off";
121			function = LED_FUNCTION_INDICATOR;
122			function-enumerator = <1>;
123			gpios = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* GPIO F */
124			pinctrl-0 = <&pinctrl_dhcom_f>;
125			pinctrl-names = "default";
126		};
127
128		led-2 {
129			color = <LED_COLOR_ID_GREEN>;
130			default-state = "off";
131			function = LED_FUNCTION_INDICATOR;
132			function-enumerator = <2>;
133			gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; /* GPIO G */
134			pinctrl-0 = <&pinctrl_dhcom_g>;
135			pinctrl-names = "default";
136		};
137
138		led-3 {
139			color = <LED_COLOR_ID_GREEN>;
140			default-state = "off";
141			function = LED_FUNCTION_INDICATOR;
142			function-enumerator = <3>;
143			gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */
144			pinctrl-0 = <&pinctrl_dhcom_i>;
145			pinctrl-names = "default";
146		};
147	};
148
149	reg_avdd: regulator-avdd {	/* AUDIO_VDD */
150		compatible = "regulator-fixed";
151		regulator-always-on;
152		regulator-min-microvolt = <3300000>;
153		regulator-max-microvolt = <3300000>;
154		regulator-name = "AUDIO_VDD";
155	};
156};
157
158&i2c5 {
159	i2cmux@70 {
160		compatible = "nxp,pca9540";
161		reg = <0x70>;
162		#address-cells = <1>;
163		#size-cells = <0>;
164
165		i2cmuxed0: i2c@0 {
166			#address-cells = <1>;
167			#size-cells = <0>;
168			reg = <0>;
169
170			typec@3d {
171				compatible = "nxp,ptn5150";
172				reg = <0x3d>;
173				interrupt-parent = <&gpio4>;
174				interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
175				pinctrl-names = "default";
176				pinctrl-0 = <&pinctrl_ptn5150>;
177				status = "okay";
178
179				ports {
180					#address-cells = <1>;
181					#size-cells = <0>;
182
183					port@0 {
184						reg = <0>;
185
186						ptn5150_in_ep: endpoint {
187							remote-endpoint = <&usb_c_0_ss_ep>;
188						};
189					};
190
191					port@1 {
192						reg = <1>;
193
194						ptn5150_out_ep: endpoint {
195							remote-endpoint = <&dwc3_0_ss_ep>;
196						};
197					};
198				};
199			};
200
201			power-sensor@40 {
202			    compatible = "ti,ina238";
203			    reg = <0x40>;
204			    shunt-resistor = <20000>;	/* 0.02 R */
205			    ti,shunt-gain = <1>;	/* Drop cca. 40mV */
206			};
207
208			eeprom_board: eeprom@54 {
209				compatible = "atmel,24c04";
210				pagesize = <16>;
211				reg = <0x54>;
212			};
213
214			pcieclk: clk@6b {
215				compatible = "skyworks,si52144";
216				reg = <0x6b>;
217				clocks = <&clk_xtal25>;
218				#clock-cells = <1>;
219			};
220		};
221
222		i2cmuxed1: i2c@1 {	/* HDMI DDC I2C */
223			#address-cells = <1>;
224			#size-cells = <0>;
225			reg = <1>;
226		};
227	};
228};
229
230&ethphy0g {
231	reg = <7>;
232};
233
234&fec {	/* Second ethernet */
235	pinctrl-0 = <&pinctrl_fec_rgmii>;
236	phy-handle = <&ethphypdk>;
237	phy-mode = "rgmii-id";
238
239	mdio {
240		ethphypdk: ethernet-phy@7 { /* Micrel KSZ9131RNXI */
241			compatible = "ethernet-phy-id0022.1642",
242				     "ethernet-phy-ieee802.3-c22";
243			interrupt-parent = <&gpio4>;
244			interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
245			pinctrl-0 = <&pinctrl_ethphy1>;
246			pinctrl-names = "default";
247			reg = <7>;
248			reset-assert-us = <1000>;
249			/* RESET_N signal rise time ~100ms */
250			reset-deassert-us = <120000>;
251			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
252			status = "okay";
253		};
254	};
255};
256
257&flexcan1 {
258	status = "okay";
259};
260
261&pcie_phy {
262	clocks = <&pcieclk 1>;
263	clock-names = "ref";
264	fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_INPUT>;
265	status = "okay";
266};
267
268&pcie {
269	fsl,max-link-speed = <3>;
270	reset-gpio = <&gpio1 6 GPIO_ACTIVE_LOW>;
271	status = "okay";
272};
273
274&usb_dwc3_0 {
275	usb-role-switch;
276
277	port {
278		#address-cells = <1>;
279		#size-cells = <0>;
280
281		dwc3_0_hs_ep: endpoint@0 {
282			reg = <0>;
283			remote-endpoint = <&usb_c_0_hs_ep>;
284		};
285
286		dwc3_0_ss_ep: endpoint@1 {
287			reg = <1>;
288			remote-endpoint = <&ptn5150_out_ep>;
289		};
290	};
291};
292
293&usb3_1 {
294	fsl,disable-port-power-control;
295	fsl,permanently-attached;
296};
297
298&usb_dwc3_1 {
299	/* This port has USB5734 Hub connected to it, PWR/OC pins are unused */
300	/delete-property/ pinctrl-names;
301	/delete-property/ pinctrl-0;
302};
303
304&iomuxc {
305	/*
306	 * GPIO_A,B,C,E are connected to buttons.
307	 * GPIO_D,F,G,I are connected to LEDs.
308	 * GPIO_H is connected to USB Hub RESET_N.
309	 * GPIO_M is connected to CLKOUT2.
310	 */
311	pinctrl-0 = <&pinctrl_hog_base
312		     &pinctrl_dhcom_h &pinctrl_dhcom_j &pinctrl_dhcom_k
313		     &pinctrl_dhcom_l
314		     &pinctrl_dhcom_int>;
315
316	pinctrl_ptn5150: ptn5150grp {
317		fsl,pins = <
318			MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25		0x40000000
319		>;
320	};
321};
322