1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2/*
3 * Copyright (C) STMicroelectronics 2017 - All Rights Reserved
4 * Author: Ludovic Barre <ludovic.barre@st.com> for STMicroelectronics.
5 */
6/dts-v1/;
7
8#include "stm32mp157c-ed1.dts"
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/input/input.h>
11
12/ {
13	model = "STMicroelectronics STM32MP157C eval daughter on eval mother";
14	compatible = "st,stm32mp157c-ev1", "st,stm32mp157c-ed1", "st,stm32mp157";
15
16	chosen {
17		stdout-path = "serial0:115200n8";
18	};
19
20	aliases {
21		serial0 = &uart4;
22		serial1 = &usart3;
23		ethernet0 = &ethernet0;
24	};
25
26	clocks {
27		clk_ext_camera: clk-ext-camera {
28			#clock-cells = <0>;
29			compatible = "fixed-clock";
30			clock-frequency = <24000000>;
31		};
32	};
33
34	joystick {
35		compatible = "gpio-keys";
36		pinctrl-0 = <&joystick_pins>;
37		pinctrl-names = "default";
38		button-0 {
39			label = "JoySel";
40			linux,code = <KEY_ENTER>;
41			interrupt-parent = <&stmfx_pinctrl>;
42			interrupts = <0 IRQ_TYPE_EDGE_RISING>;
43		};
44		button-1 {
45			label = "JoyDown";
46			linux,code = <KEY_DOWN>;
47			interrupt-parent = <&stmfx_pinctrl>;
48			interrupts = <1 IRQ_TYPE_EDGE_RISING>;
49		};
50		button-2 {
51			label = "JoyLeft";
52			linux,code = <KEY_LEFT>;
53			interrupt-parent = <&stmfx_pinctrl>;
54			interrupts = <2 IRQ_TYPE_EDGE_RISING>;
55		};
56		button-3 {
57			label = "JoyRight";
58			linux,code = <KEY_RIGHT>;
59			interrupt-parent = <&stmfx_pinctrl>;
60			interrupts = <3 IRQ_TYPE_EDGE_RISING>;
61		};
62		button-4 {
63			label = "JoyUp";
64			linux,code = <KEY_UP>;
65			interrupt-parent = <&stmfx_pinctrl>;
66			interrupts = <4 IRQ_TYPE_EDGE_RISING>;
67		};
68	};
69
70	panel_backlight: panel-backlight {
71		compatible = "gpio-backlight";
72		gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
73		default-on;
74		status = "okay";
75	};
76};
77
78&cec {
79	pinctrl-names = "default";
80	pinctrl-0 = <&cec_pins_a>;
81	status = "okay";
82};
83
84&dcmi {
85	status = "okay";
86	pinctrl-names = "default", "sleep";
87	pinctrl-0 = <&dcmi_pins_a>;
88	pinctrl-1 = <&dcmi_sleep_pins_a>;
89
90	port {
91		dcmi_0: endpoint {
92			remote-endpoint = <&ov5640_0>;
93			bus-width = <8>;
94			hsync-active = <0>;
95			vsync-active = <0>;
96			pclk-sample = <1>;
97		};
98	};
99};
100
101&dsi {
102	phy-dsi-supply = <&reg18>;
103	status = "okay";
104
105	ports {
106		port@0 {
107			reg = <0>;
108			dsi_in: endpoint {
109				remote-endpoint = <&ltdc_ep0_out>;
110			};
111		};
112
113		port@1 {
114			reg = <1>;
115			dsi_out: endpoint {
116				remote-endpoint = <&dsi_panel_in>;
117			};
118		};
119	};
120
121	panel-dsi@0 {
122		compatible = "raydium,rm68200";
123		reg = <0>;
124		reset-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
125		backlight = <&panel_backlight>;
126		power-supply = <&v3v3>;
127		status = "okay";
128
129		port {
130			dsi_panel_in: endpoint {
131				remote-endpoint = <&dsi_out>;
132			};
133		};
134	};
135};
136
137&ethernet0 {
138	status = "okay";
139	pinctrl-0 = <&ethernet0_rgmii_pins_a>;
140	pinctrl-1 = <&ethernet0_rgmii_sleep_pins_a>;
141	pinctrl-names = "default", "sleep";
142	phy-mode = "rgmii-id";
143	max-speed = <1000>;
144	phy-handle = <&phy0>;
145
146	mdio0 {
147		#address-cells = <1>;
148		#size-cells = <0>;
149		compatible = "snps,dwmac-mdio";
150		phy0: ethernet-phy@0 {
151			reg = <0>;
152		};
153	};
154};
155
156&fmc {
157	pinctrl-names = "default", "sleep";
158	pinctrl-0 = <&fmc_pins_a>;
159	pinctrl-1 = <&fmc_sleep_pins_a>;
160	status = "okay";
161
162	nand-controller@4,0 {
163		status = "okay";
164
165		nand@0 {
166			reg = <0>;
167			nand-on-flash-bbt;
168			#address-cells = <1>;
169			#size-cells = <1>;
170		};
171	};
172};
173
174&i2c2 {
175	pinctrl-names = "default", "sleep";
176	pinctrl-0 = <&i2c2_pins_a>;
177	pinctrl-1 = <&i2c2_sleep_pins_a>;
178	i2c-scl-rising-time-ns = <185>;
179	i2c-scl-falling-time-ns = <20>;
180	status = "okay";
181
182	ov5640: camera@3c {
183		compatible = "ovti,ov5640";
184		reg = <0x3c>;
185		clocks = <&clk_ext_camera>;
186		clock-names = "xclk";
187		DOVDD-supply = <&v2v8>;
188		powerdown-gpios = <&stmfx_pinctrl 18 (GPIO_ACTIVE_HIGH | GPIO_PUSH_PULL)>;
189		reset-gpios = <&stmfx_pinctrl 19 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
190		rotation = <180>;
191		status = "okay";
192
193		port {
194			ov5640_0: endpoint {
195				remote-endpoint = <&dcmi_0>;
196				bus-width = <8>;
197				data-shift = <2>; /* lines 9:2 are used */
198				hsync-active = <0>;
199				vsync-active = <0>;
200				pclk-sample = <1>;
201			};
202		};
203	};
204
205	stmfx: stmfx@42 {
206		compatible = "st,stmfx-0300";
207		reg = <0x42>;
208		interrupts = <8 IRQ_TYPE_EDGE_RISING>;
209		interrupt-parent = <&gpioi>;
210		vdd-supply = <&v3v3>;
211
212		stmfx_pinctrl: pinctrl {
213			compatible = "st,stmfx-0300-pinctrl";
214			gpio-controller;
215			#gpio-cells = <2>;
216			interrupt-controller;
217			#interrupt-cells = <2>;
218			gpio-ranges = <&stmfx_pinctrl 0 0 24>;
219
220			joystick_pins: joystick-pins {
221				pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
222				bias-pull-down;
223			};
224		};
225	};
226};
227
228&i2c5 {
229	pinctrl-names = "default", "sleep";
230	pinctrl-0 = <&i2c5_pins_a>;
231	pinctrl-1 = <&i2c5_sleep_pins_a>;
232	i2c-scl-rising-time-ns = <185>;
233	i2c-scl-falling-time-ns = <20>;
234	status = "okay";
235};
236
237&ltdc {
238	status = "okay";
239
240	port {
241		ltdc_ep0_out: endpoint@0 {
242			reg = <0>;
243			remote-endpoint = <&dsi_in>;
244		};
245	};
246};
247
248&m_can1 {
249	pinctrl-names = "default", "sleep";
250	pinctrl-0 = <&m_can1_pins_a>;
251	pinctrl-1 = <&m_can1_sleep_pins_a>;
252	status = "okay";
253};
254
255&qspi {
256	pinctrl-names = "default", "sleep";
257	pinctrl-0 = <&qspi_clk_pins_a &qspi_bk1_pins_a &qspi_bk2_pins_a>;
258	pinctrl-1 = <&qspi_clk_sleep_pins_a &qspi_bk1_sleep_pins_a &qspi_bk2_sleep_pins_a>;
259	reg = <0x58003000 0x1000>, <0x70000000 0x4000000>;
260	#address-cells = <1>;
261	#size-cells = <0>;
262	status = "okay";
263
264	flash0: mx66l51235l@0 {
265		compatible = "jedec,spi-nor";
266		reg = <0>;
267		spi-rx-bus-width = <4>;
268		spi-max-frequency = <108000000>;
269		#address-cells = <1>;
270		#size-cells = <1>;
271	};
272
273	flash1: mx66l51235l@1 {
274		compatible = "jedec,spi-nor";
275		reg = <1>;
276		spi-rx-bus-width = <4>;
277		spi-max-frequency = <108000000>;
278		#address-cells = <1>;
279		#size-cells = <1>;
280	};
281};
282
283&sdmmc3 {
284	pinctrl-names = "default", "opendrain", "sleep";
285	pinctrl-0 = <&sdmmc3_b4_pins_a>;
286	pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
287	pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
288	broken-cd;
289	st,neg-edge;
290	bus-width = <4>;
291	vmmc-supply = <&v3v3>;
292	status = "disabled";
293};
294
295&spi1 {
296	pinctrl-names = "default";
297	pinctrl-0 = <&spi1_pins_a>;
298	status = "disabled";
299};
300
301&timers2 {
302	/* spare dmas for other usage (un-delete to enable pwm capture) */
303	/delete-property/dmas;
304	/delete-property/dma-names;
305	status = "disabled";
306	pwm {
307		pinctrl-0 = <&pwm2_pins_a>;
308		pinctrl-1 = <&pwm2_sleep_pins_a>;
309		pinctrl-names = "default", "sleep";
310		status = "okay";
311	};
312	timer@1 {
313		status = "okay";
314	};
315};
316
317&timers8 {
318	/delete-property/dmas;
319	/delete-property/dma-names;
320	status = "disabled";
321	pwm {
322		pinctrl-0 = <&pwm8_pins_a>;
323		pinctrl-1 = <&pwm8_sleep_pins_a>;
324		pinctrl-names = "default", "sleep";
325		status = "okay";
326	};
327	timer@7 {
328		status = "okay";
329	};
330};
331
332&timers12 {
333	/delete-property/dmas;
334	/delete-property/dma-names;
335	status = "disabled";
336	pwm {
337		pinctrl-0 = <&pwm12_pins_a>;
338		pinctrl-1 = <&pwm12_sleep_pins_a>;
339		pinctrl-names = "default", "sleep";
340		status = "okay";
341	};
342	timer@11 {
343		status = "okay";
344	};
345};
346
347&usart3 {
348	pinctrl-names = "default", "sleep", "idle";
349	pinctrl-0 = <&usart3_pins_b>;
350	pinctrl-1 = <&usart3_sleep_pins_b>;
351	pinctrl-2 = <&usart3_idle_pins_b>;
352	/*
353	 * HW flow control USART3_RTS is optional, and isn't default wired to
354	 * the connector. SB23 needs to be soldered in order to use it, and R77
355	 * (ETH_CLK) should be removed.
356	 */
357	uart-has-rtscts;
358	status = "disabled";
359};
360
361&usbh_ehci {
362	phys = <&usbphyc_port0>;
363	status = "okay";
364};
365
366&usbotg_hs {
367	pinctrl-0 = <&usbotg_hs_pins_a>;
368	pinctrl-names = "default";
369	phys = <&usbphyc_port1 0>;
370	phy-names = "usb2-phy";
371	status = "okay";
372};
373
374&usbphyc {
375	status = "okay";
376};
377