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