xref: /linux/arch/arm64/boot/dts/freescale/imx95-aquila-dev.dts (revision b2128290c29902315e632ea59e0504d6bc9e9b42)
1// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
2/*
3 * Copyright (c) Toradex
4 *
5 * https://www.toradex.com/computer-on-modules/aquila-arm-family/nxp-imx95
6 * https://www.toradex.com/products/carrier-board/aquila-development-board-kit
7 */
8
9/dts-v1/;
10
11#include <dt-bindings/pwm/pwm.h>
12#include <dt-bindings/usb/pd.h>
13#include "imx95-aquila.dtsi"
14
15/ {
16	model = "Aquila iMX95 on Aquila Development Board";
17	compatible = "toradex,aquila-imx95-dev",
18		     "toradex,aquila-imx95",
19		     "fsl,imx95";
20
21	aliases {
22		eeprom1 = &carrier_eeprom;
23	};
24
25	dp_1_connector: dp0-connector {
26		compatible = "dp-connector";
27		dp-pwr-supply = <&reg_dp_3p3v>;
28		type = "full-size";
29
30		port {
31			dp_1_connector_in: endpoint {
32				remote-endpoint = <&dsi2dp_out>;
33			};
34		};
35	};
36
37	reg_carrier_1p8v: regulator-carrier-1p8v {
38		compatible = "regulator-fixed";
39		regulator-max-microvolt = <1800000>;
40		regulator-min-microvolt = <1800000>;
41		regulator-name = "On-carrier 1V8";
42	};
43
44	reg_dp_3p3v: regulator-dp-3p3v {
45		compatible = "regulator-fixed";
46		pinctrl-names = "default";
47		pinctrl-0 = <&pinctrl_gpio_21_dp>;
48		/* Aquila GPIO_21_DP */
49		gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
50		enable-active-high;
51		regulator-max-microvolt = <3300000>;
52		regulator-min-microvolt = <3300000>;
53		regulator-name = "DP_3V3";
54		startup-delay-us = <10000>;
55	};
56
57	sound {
58		compatible = "simple-audio-card";
59		simple-audio-card,bitclock-master = <&codec_dai>;
60		simple-audio-card,format = "i2s";
61		simple-audio-card,frame-master = <&codec_dai>;
62		simple-audio-card,mclk-fs = <256>;
63		simple-audio-card,name = "aquila-wm8904";
64		simple-audio-card,routing =
65			"Headphone Jack", "HPOUTL",
66			"Headphone Jack", "HPOUTR",
67			"IN2L", "Line In Jack",
68			"IN2R", "Line In Jack",
69			"Microphone Jack", "MICBIAS",
70			"IN1L", "Microphone Jack",
71			"IN1R", "Digital Mic";
72		simple-audio-card,widgets =
73			"Microphone", "Microphone Jack",
74			"Microphone", "Digital Mic",
75			"Headphone", "Headphone Jack",
76			"Line", "Line In Jack";
77
78		codec_dai: simple-audio-card,codec {
79			sound-dai = <&wm8904_1a>;
80		};
81
82		simple-audio-card,cpu {
83			sound-dai = <&sai2>;
84		};
85	};
86};
87
88/* Aquila ADC_[1-4] */
89&adc1 {
90	status = "okay";
91};
92
93/* Aquila CTRL_WAKE1_MICO# */
94&aquila_key_wake {
95	status = "okay";
96};
97
98&dsi2dp_out {
99	remote-endpoint = <&dp_1_connector_in>;
100};
101
102/* Aquila ETH_1 */
103&enetc_port0 {
104	status = "okay";
105};
106
107/* Aquila CAN_1 */
108&flexcan1 {
109	status = "okay";
110};
111
112/* Aquila CAN_2 */
113&flexcan2 {
114	status = "okay";
115};
116
117/* Aquila CAN_3 */
118&flexcan3 {
119	status = "okay";
120};
121
122/* Aquila CAN_4 */
123&flexcan4 {
124	status = "okay";
125};
126
127/* Aquila QSPI_1 */
128&flexspi1 {
129	pinctrl-0 = <&pinctrl_flexspi1_4bit>,
130		    <&pinctrl_qspi_cs1>;
131
132	status = "okay";
133
134	flash@0 {
135		compatible = "jedec,spi-nor";
136		reg = <0x0>;
137		spi-max-frequency = <66000000>;
138		spi-rx-bus-width = <4>;
139		spi-tx-bus-width = <4>;
140	};
141};
142
143&gpio1 {
144	pinctrl-names = "default";
145	pinctrl-0 = <&pinctrl_gpio_8>;
146};
147
148&gpio4 {
149	pinctrl-names = "default";
150	pinctrl-0 = <&pinctrl_gpio_1>,
151		    <&pinctrl_gpio_2>,
152		    <&pinctrl_gpio_3>,
153		    <&pinctrl_gpio_4>,
154		    <&pinctrl_gpio_5>,
155		    <&pinctrl_gpio_6>,
156		    <&pinctrl_gpio_7>;
157};
158
159/* Aquila I2C_1 */
160&lpi2c2 {
161	status = "okay";
162
163	fan_controller: fan@18 {
164		compatible = "ti,amc6821";
165		reg = <0x18>;
166		#pwm-cells = <2>;
167
168		fan {
169			cooling-levels = <255>;
170			pwms = <&fan_controller 40000 PWM_POLARITY_INVERTED>;
171		};
172	};
173
174	wm8904_1a: audio-codec@1a {
175		compatible = "wlf,wm8904";
176		reg = <0x1a>;
177		pinctrl-names = "default";
178		pinctrl-0 = <&pinctrl_sai2_mclk>;
179		clocks = <&scmi_clk IMX95_CLK_SAI2>;
180		clock-names = "mclk";
181		#sound-dai-cells = <0>;
182		AVDD-supply = <&reg_carrier_1p8v>;
183		CPVDD-supply = <&reg_carrier_1p8v>;
184		DBVDD-supply = <&reg_carrier_1p8v>;
185		DCVDD-supply = <&reg_carrier_1p8v>;
186		MICVDD-supply = <&reg_carrier_1p8v>;
187		wlf,drc-cfg-names = "default", "peaklimiter";
188		/*
189		 * Config registers per name, respectively:
190		 * KNEE_IP = 0,   KNEE_OP = 0,     HI_COMP = 1,   LO_COMP = 1
191		 * KNEE_IP = -24, KNEE_OP = -6,    HI_COMP = 1/4, LO_COMP = 1
192		 */
193		wlf,drc-cfg-regs = /bits/ 16 <0x01af 0x3248 0x0000 0x0000>,
194				   /bits/ 16 <0x04af 0x324b 0x0010 0x0408>;
195		/* GPIO1 = DMIC_CLK, don't touch others */
196		wlf,gpio-cfg = <0x0018>, <0xffff>, <0xffff>, <0xffff>;
197		wlf,in1r-as-dmicdat2;
198	};
199
200	/* Current measurement into module VCC */
201	hwmon@41 {
202		compatible = "ti,ina226";
203		reg = <0x41>;
204		shunt-resistor = <5000>;
205	};
206
207	temperature-sensor@4f {
208		compatible = "ti,tmp1075";
209		reg = <0x4f>;
210	};
211
212	/* USB-C OTG (TCPC USB PD PHY) */
213	tcpc@52 {
214		compatible = "nxp,ptn5110", "tcpci";
215		reg = <0x52>;
216		interrupt-parent = <&som_gpio_expander_1>;
217		interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
218
219		connector {
220			compatible = "usb-c-connector";
221			data-role = "dual";
222			op-sink-microwatt = <0>;
223			power-role = "dual";
224			self-powered;
225			sink-pdos = <PDO_FIXED(5000, 0, PDO_FIXED_USB_COMM)>;
226			source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
227			try-power-role = "sink";
228
229			ports {
230				#address-cells = <1>;
231				#size-cells = <0>;
232
233				port@0 {
234					reg = <0>;
235
236					typec_con_hs: endpoint {
237						remote-endpoint = <&usb1_con_hs>;
238					};
239				};
240
241				port@1 {
242					reg = <1>;
243
244					typec_con_ss: endpoint {
245						remote-endpoint = <&usb1_con_ss>;
246					};
247				};
248			};
249		};
250	};
251
252	carrier_eeprom: eeprom@57 {
253		compatible = "st,24c02", "atmel,24c02";
254		reg = <0x57>;
255		pagesize = <16>;
256	};
257};
258
259/* Aquila I2C_2 */
260&i3c2 {
261	status = "okay";
262};
263
264/* Aquila I2C_4_CSI1 */
265&lpi2c4 {
266	status = "okay";
267};
268
269/* Aquila I2C_6 */
270&lpi2c5 {
271	status = "okay";
272};
273
274/* Aquila I2C_3_DSI1/I2C_5_CSI2 */
275&lpi2c8 {
276	status = "okay";
277
278	i2c-mux@70 {
279		compatible = "nxp,pca9543";
280		reg = <0x70>;
281		#address-cells = <1>;
282		#size-cells = <0>;
283
284		/* I2C on DSI Connector Pin #4 and #6 */
285		i2c_dsi_0: i2c@0 {
286			reg = <0>;
287			#address-cells = <1>;
288			#size-cells = <0>;
289		};
290
291		/* I2C on DSI Connector Pin #52 and #54 */
292		i2c_dsi_1: i2c@1 {
293			reg = <1>;
294			#address-cells = <1>;
295			#size-cells = <0>;
296		};
297	};
298};
299
300/* Aquila SPI_1 */
301&lpspi6 {
302	status = "okay";
303};
304
305/* Aquila UART_3, used as the Linux Console */
306&lpuart1 {
307	status = "okay";
308};
309
310/* Aquila UART_4 */
311&lpuart2 {
312	status = "okay";
313};
314
315/* Aquila UART_1 */
316&lpuart3 {
317	status = "okay";
318};
319
320/* Aquila UART_2 as RS485 */
321&lpuart7 {
322	linux,rs485-enabled-at-boot-time;
323	rs485-rts-active-low;
324	rs485-rx-during-tx;
325
326	status = "okay";
327};
328
329/* Aquila PCIE_1 */
330&pcie0 {
331	status = "okay";
332};
333
334/* Aquila I2S_1 */
335&sai2 {
336	status = "okay";
337};
338
339/* Aquila PWM_1 */
340&tpm3 {
341	status = "okay";
342};
343
344/* Aquila PWM_2 */
345&tpm6 {
346	status = "okay";
347};
348
349/* Aquila PWM_3_DSI and PWM_4_DP */
350&tpm5 {
351	status = "okay";
352};
353
354/* Aquila USB_2, optional Bluetooth USB */
355&usb2 {
356	status = "okay";
357};
358
359/* Aquila USB_1 */
360&usb3 {
361	status = "okay";
362};
363
364&usb3_dwc3 {
365	status = "okay";
366
367	port {
368		usb1_con_hs: endpoint {
369			remote-endpoint = <&typec_con_hs>;
370		};
371	};
372};
373
374&usb3_phy {
375	orientation-switch;
376
377	status = "okay";
378
379	port {
380		usb1_con_ss: endpoint {
381			remote-endpoint = <&typec_con_ss>;
382		};
383	};
384};
385
386/* Aquila SD_1 */
387&usdhc2 {
388	status = "okay";
389};
390