1// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
2/*
3 * Copyright 2024
4 * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
5 */
6/dts-v1/;
7#include "imx28-lwe.dtsi"
8
9/ {
10	model = "BTT3";
11
12	compatible = "lwn,imx28-btt3", "fsl,imx28";
13
14	chosen {
15	       bootargs = "root=/dev/mmcblk0p2 rootfstype=ext4 ro rootwait console=ttyAMA0,115200 panic=1 quiet";
16	};
17
18	memory@40000000 {
19		reg = <0x40000000 0x10000000>;
20		device_type = "memory";
21	};
22
23	panel {
24		compatible = "powertip,hx8238a", "panel-dpi";
25		power-supply = <&reg_3v3>;
26		width-mm = <70>;
27		height-mm = <52>;
28
29		panel-timing {
30			clock-frequency = <6500000>;
31			hactive = <320>;
32			vactive = <240>;
33			hfront-porch = <20>;
34			hback-porch = <38>;
35			hsync-len = <30>;
36			vfront-porch = <4>;
37			vback-porch = <14>;
38			vsync-len = <4>;
39			hsync-active = <0>;
40			vsync-active = <0>;
41			de-active = <0>;
42			pixelclk-active = <1>;
43		};
44
45		port {
46			panel_in: endpoint {
47				remote-endpoint = <&display_out>;
48			};
49		};
50	};
51
52	poweroff {
53		compatible = "gpio-poweroff";
54		gpios = <&gpio0 24 GPIO_ACTIVE_HIGH>;
55	};
56
57	sound {
58		compatible = "simple-audio-card";
59		simple-audio-card,name = "BTTC Audio";
60		simple-audio-card,widgets = "Speaker", "BTTC Speaker";
61		simple-audio-card,routing = "BTTC Speaker", "SPKOUTN", "BTTC Speaker", "SPKOUTP";
62
63		simple-audio-card,dai-link@0 {
64			format = "left_j";
65			bitclock-master = <&dai0_master>;
66			frame-master = <&dai0_master>;
67			mclk-fs = <256>;
68
69			dai0_master: cpu {
70				sound-dai = <&saif0>;
71			};
72
73			codec {
74				sound-dai = <&wm89xx>;
75				clocks = <&saif0>;
76			};
77		};
78	};
79
80	wifi_pwrseq: sdio-pwrseq {
81		compatible = "mmc-pwrseq-simple";
82		pinctrl-names = "default";
83		pinctrl-0 = <&wifi_en_pin_bttc>;
84		reset-gpios = <&gpio0 27 GPIO_ACTIVE_LOW>;
85		/* W1-163 needs 60us for WL_EN to be low and */
86		/* 150ms after high before downloading FW is possible */
87		post-power-on-delay-ms = <200>;
88		power-off-delay-us = <100>;
89	};
90};
91
92&auart0 {
93	pinctrl-names = "default";
94	pinctrl-0 = <&auart0_2pins_a>;
95	status = "okay";
96};
97
98&auart3 {
99	pinctrl-names = "default";
100	pinctrl-0 = <&auart3_pins_a>;
101	uart-has-rtscts;
102	status = "okay";
103};
104
105&i2c0 {
106	wm89xx: audio-codec@1a {
107		compatible = "wlf,wm8940";
108		reg = <0x1a>;
109		#sound-dai-cells = <0>;
110	};
111};
112
113&lcdif {
114	pinctrl-names = "default";
115	pinctrl-0 = <&lcdif_24bit_pins_a>, <&lcdif_sync_pins_bttc>,
116		    <&lcdif_reset_pins_bttc>;
117	status = "okay";
118
119	port {
120		display_out: endpoint {
121			remote-endpoint = <&panel_in>;
122		};
123	};
124};
125
126&mac0 {
127	clocks = <&clks 57>, <&clks 57>, <&clks 64>;
128	clock-names = "ipg", "ahb", "enet_out";
129	phy-handle = <&mac0_phy>;
130	phy-mode = "rmii";
131	phy-supply = <&reg_3v3>;
132	/*
133	 * This MAC address is adjusted during production.
134	 * Value specified below is used as a fallback during recovery.
135	 */
136	local-mac-address = [ 00 11 B8 00 BF 8A ];
137	status = "okay";
138
139	mdio {
140		#address-cells = <1>;
141		#size-cells = <0>;
142
143		mac0_phy: ethernet-phy@0 {
144			/* LAN8720Ai - PHY ID */
145			compatible = "ethernet-phy-id0007.c0f0","ethernet-phy-ieee802.3-c22";
146			reg = <0>;
147			smsc,disable-energy-detect;
148			max-speed = <100>;
149			reset-gpios = <&gpio4 12 GPIO_ACTIVE_LOW>;
150			reset-assert-us = <1000>;
151			reset-deassert-us = <1000>;
152		};
153	};
154};
155
156&pinctrl {
157	pinctrl-names = "default";
158	pinctrl-0 = <&hog_pins_a>, <&hog_pins_rev>;
159
160	hog_pins_a: hog@0 {
161		reg = <0>;
162		fsl,pinmux-ids = <
163			MX28_PAD_GPMI_RDY2__GPIO_0_22
164			MX28_PAD_GPMI_RDY3__GPIO_0_23
165			MX28_PAD_GPMI_RDN__GPIO_0_24
166			MX28_PAD_LCD_VSYNC__GPIO_1_28
167			MX28_PAD_SSP2_SS1__GPIO_2_20
168			MX28_PAD_SSP2_SS2__GPIO_2_21
169			MX28_PAD_AUART2_CTS__GPIO_3_10
170			MX28_PAD_AUART2_RTS__GPIO_3_11
171			MX28_PAD_GPMI_WRN__GPIO_0_25
172			MX28_PAD_ENET0_RXD2__GPIO_4_9
173			MX28_PAD_ENET0_TXD2__GPIO_4_11
174		>;
175		fsl,drive-strength = <MXS_DRIVE_4mA>;
176		fsl,voltage = <MXS_VOLTAGE_HIGH>;
177		fsl,pull-up = <MXS_PULL_DISABLE>;
178	};
179
180	hog_pins_rev: hog@1 {
181		reg = <1>;
182		fsl,pinmux-ids = <
183			MX28_PAD_ENET0_RXD3__GPIO_4_10
184			MX28_PAD_ENET0_TX_CLK__GPIO_4_5
185			MX28_PAD_ENET0_COL__GPIO_4_14
186			MX28_PAD_ENET0_CRS__GPIO_4_15
187		>;
188		fsl,drive-strength = <MXS_DRIVE_4mA>;
189		fsl,voltage = <MXS_VOLTAGE_HIGH>;
190		fsl,pull-up = <MXS_PULL_DISABLE>;
191	};
192
193	keypad_pins_bttc: keypad-bttc@0 {
194		reg = <0>;
195		fsl,pinmux-ids = <
196			MX28_PAD_GPMI_D00__GPIO_0_0
197			MX28_PAD_AUART0_CTS__GPIO_3_2
198			MX28_PAD_AUART0_RTS__GPIO_3_3
199			MX28_PAD_GPMI_D03__GPIO_0_3
200			MX28_PAD_GPMI_D04__GPIO_0_4
201			MX28_PAD_GPMI_D05__GPIO_0_5
202			MX28_PAD_GPMI_D06__GPIO_0_6
203			MX28_PAD_GPMI_D07__GPIO_0_7
204			MX28_PAD_GPMI_CE1N__GPIO_0_17
205			MX28_PAD_GPMI_CE2N__GPIO_0_18
206			MX28_PAD_GPMI_CE3N__GPIO_0_19
207			MX28_PAD_GPMI_RDY0__GPIO_0_20
208		>;
209		fsl,drive-strength = <MXS_DRIVE_4mA>;
210		fsl,voltage = <MXS_VOLTAGE_HIGH>;
211		fsl,pull-up = <MXS_PULL_DISABLE>;
212	};
213
214	lcdif_sync_pins_bttc: lcdif-bttc@0 {
215		reg = <0>;
216		fsl,pinmux-ids = <
217			MX28_PAD_LCD_DOTCLK__LCD_DOTCLK
218			MX28_PAD_LCD_ENABLE__LCD_ENABLE
219			MX28_PAD_LCD_HSYNC__LCD_HSYNC
220			MX28_PAD_LCD_RD_E__LCD_VSYNC
221		>;
222		fsl,drive-strength = <MXS_DRIVE_4mA>;
223		fsl,voltage = <MXS_VOLTAGE_HIGH>;
224		fsl,pull-up = <MXS_PULL_DISABLE>;
225	};
226
227	lcdif_reset_pins_bttc: lcdif-bttc@1 {
228		reg = <1>;
229		fsl,pinmux-ids = <
230			MX28_PAD_LCD_RESET__GPIO_3_30
231		>;
232		fsl,drive-strength = <MXS_DRIVE_4mA>;
233		fsl,voltage = <MXS_VOLTAGE_HIGH>;
234		fsl,pull-up = <MXS_PULL_ENABLE>;
235	};
236
237	ssp1_sdio_pins_a: ssp1-sdio@0 {
238		reg = <0>;
239		fsl,pinmux-ids = <
240			MX28_PAD_SSP1_DATA0__SSP1_D0
241			MX28_PAD_GPMI_D01__SSP1_D1
242			MX28_PAD_GPMI_D02__SSP1_D2
243			MX28_PAD_SSP1_DATA3__SSP1_D3
244			MX28_PAD_SSP1_CMD__SSP1_CMD
245			MX28_PAD_SSP1_SCK__SSP1_SCK
246		>;
247		fsl,drive-strength = <MXS_DRIVE_8mA>;
248		fsl,voltage = <MXS_VOLTAGE_HIGH>;
249		fsl,pull-up = <MXS_PULL_ENABLE>;
250	};
251
252	wifi_en_pin_bttc: wifi-en-pin@0 {
253		reg = <0>;
254		fsl,pinmux-ids = <
255			MX28_PAD_GPMI_CLE__GPIO_0_27
256		>;
257		fsl,drive-strength = <MXS_DRIVE_8mA>;
258		fsl,voltage = <MXS_VOLTAGE_HIGH>;
259		fsl,pull-up = <MXS_PULL_ENABLE>;
260	};
261};
262
263&pwm {
264	pinctrl-names = "default";
265	pinctrl-0 = <&pwm3_pins_a>;
266	status = "okay";
267};
268
269&reg_usb_5v {
270	gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
271};
272
273&saif0 {
274	pinctrl-names = "default";
275	pinctrl-0 = <&saif0_pins_a>;
276	#sound-dai-cells = <0>;
277	assigned-clocks = <&clks 53>;
278	assigned-clock-rates = <12000000>;
279	status = "okay";
280};
281
282&saif1 {
283	pinctrl-names = "default";
284	pinctrl-0 = <&saif1_pins_a>;
285	#sound-dai-cells = <0>;
286	fsl,saif-master = <&saif0>;
287	status = "okay";
288};
289
290&ssp1 {
291	compatible = "fsl,imx28-mmc";
292	pinctrl-names = "default";
293	pinctrl-0 = <&ssp1_sdio_pins_a>;
294	bus-width = <4>;
295	no-1-8-v;       /* force 3.3V VIO */
296	non-removable;
297	vmmc-supply = <&reg_3v3>;
298	mmc-pwrseq = <&wifi_pwrseq>;
299	keep-power-in-suspend;
300	status = "okay";
301
302	wlan@1 {
303		reg = <1>;
304		compatible = "brcm,bcm4329-fmac";
305	};
306};
307
308&ssp2 {
309	compatible = "fsl,imx28-spi";
310	pinctrl-names = "default";
311	pinctrl-0 = <&spi2_pins_a>;
312	status = "okay";
313};
314