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