1*4882a593Smuzhiyun// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun */
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun#include <dt-bindings/display/media-bus-format.h>
8*4882a593Smuzhiyun#include "rk3562-evb1-lp4x-v10.dtsi"
9*4882a593Smuzhiyun#include "rk3562-android.dtsi"
10*4882a593Smuzhiyun#include "rk3562-rk817.dtsi"
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun/ {
13*4882a593Smuzhiyun	model = "Rockchip RK3562 EVB1 LP4X V10 Board + RK EVB SPI+RGB PANLE DISPLAY Ext Board";
14*4882a593Smuzhiyun	compatible = "rockchip,rk3562-evb1-lp4x-v10-rgb-k350c4516t", "rockchip,rk3562";
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun	spi_gpio: spi-gpio {
17*4882a593Smuzhiyun		compatible = "spi-gpio";
18*4882a593Smuzhiyun		#address-cells = <0x1>;
19*4882a593Smuzhiyun		#size-cells = <0x0>;
20*4882a593Smuzhiyun		pinctrl-names = "default";
21*4882a593Smuzhiyun		pinctrl-0 = <&spi_gpio_pins>;
22*4882a593Smuzhiyun		spi-delay-us = <10>;
23*4882a593Smuzhiyun		status = "okay";
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun		sck-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
26*4882a593Smuzhiyun		miso-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
27*4882a593Smuzhiyun		mosi-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
28*4882a593Smuzhiyun		cs-gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_HIGH>;
29*4882a593Smuzhiyun		num-chipselects = <1>;
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun		/*
32*4882a593Smuzhiyun		 * 320x480 RGB/MCU screen K350C4516T
33*4882a593Smuzhiyun		 */
34*4882a593Smuzhiyun		panel: panel {
35*4882a593Smuzhiyun			compatible = "simple-panel-spi";
36*4882a593Smuzhiyun			reg = <0>;
37*4882a593Smuzhiyun			bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
38*4882a593Smuzhiyun			backlight = <&backlight>;
39*4882a593Smuzhiyun			enable-gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>;
40*4882a593Smuzhiyun			enable-delay-ms = <20>;
41*4882a593Smuzhiyun			reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
42*4882a593Smuzhiyun			reset-delay-ms = <10>;
43*4882a593Smuzhiyun			prepare-delay-ms = <20>;
44*4882a593Smuzhiyun			unprepare-delay-ms = <20>;
45*4882a593Smuzhiyun			disable-delay-ms = <20>;
46*4882a593Smuzhiyun			width-mm = <217>;
47*4882a593Smuzhiyun			height-mm = <136>;
48*4882a593Smuzhiyun			rockchip,cmd-type = "spi";
49*4882a593Smuzhiyun			status = "okay";
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun			// type:0 is cmd, 1 is data
52*4882a593Smuzhiyun			panel-init-sequence = [
53*4882a593Smuzhiyun				/* type delay num val1 val2 val3 */
54*4882a593Smuzhiyun				00   00  01  e0
55*4882a593Smuzhiyun				01   00  01  00
56*4882a593Smuzhiyun				01   00  01  07
57*4882a593Smuzhiyun				01   00  01  0f
58*4882a593Smuzhiyun				01   00  01  0d
59*4882a593Smuzhiyun				01   00  01  1b
60*4882a593Smuzhiyun				01   00  01  0a
61*4882a593Smuzhiyun				01   00  01  3c
62*4882a593Smuzhiyun				01   00  01  78
63*4882a593Smuzhiyun				01   00  01  4a
64*4882a593Smuzhiyun				01   00  01  07
65*4882a593Smuzhiyun				01   00  01  0e
66*4882a593Smuzhiyun				01   00  01  09
67*4882a593Smuzhiyun				01   00  01  1b
68*4882a593Smuzhiyun				01   00  01  1e
69*4882a593Smuzhiyun				01   00  01  0f
70*4882a593Smuzhiyun				00   00  01  e1
71*4882a593Smuzhiyun				01   00  01  00
72*4882a593Smuzhiyun				01   00  01  22
73*4882a593Smuzhiyun				01   00  01  24
74*4882a593Smuzhiyun				01   00  01  06
75*4882a593Smuzhiyun				01   00  01  12
76*4882a593Smuzhiyun				01   00  01  07
77*4882a593Smuzhiyun				01   00  01  36
78*4882a593Smuzhiyun				01   00  01  47
79*4882a593Smuzhiyun				01   00  01  47
80*4882a593Smuzhiyun				01   00  01  06
81*4882a593Smuzhiyun				01   00  01  0a
82*4882a593Smuzhiyun				01   00  01  07
83*4882a593Smuzhiyun				01   00  01  30
84*4882a593Smuzhiyun				01   00  01  37
85*4882a593Smuzhiyun				01   00  01  0f
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun				00   00  01  c0
88*4882a593Smuzhiyun				01   00  01  10
89*4882a593Smuzhiyun				01   00  01  10
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun				00   00  01  c1
92*4882a593Smuzhiyun				01   00  01  41
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun				00   00  01  c5
95*4882a593Smuzhiyun				01   00  01  00
96*4882a593Smuzhiyun				01   00  01  22
97*4882a593Smuzhiyun				01   00  01  80
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun				00   00  01  36
100*4882a593Smuzhiyun				01   00  01  48
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun				00   00  01  3a  //interface pixel format
103*4882a593Smuzhiyun				01   00  01  66  // bpp    cfg
104*4882a593Smuzhiyun						 //  3      11
105*4882a593Smuzhiyun						 //  16     55
106*4882a593Smuzhiyun						 //  18     66
107*4882a593Smuzhiyun						 //  24     77
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun				00   00  01  b0  /* interface mode control */
110*4882a593Smuzhiyun				01   00  01  00
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun				00   00  01  b1  /* frame rate 60hz */
113*4882a593Smuzhiyun				01   00  01  a0
114*4882a593Smuzhiyun				01   00  01  11
115*4882a593Smuzhiyun				00   00  01  b4
116*4882a593Smuzhiyun				01   00  01  02
117*4882a593Smuzhiyun				00   00  01  B6
118*4882a593Smuzhiyun				01   00  01  32
119*4882a593Smuzhiyun				01   00  01  02
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun				00   00  01  b7
122*4882a593Smuzhiyun				01   00  01  c6
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun				00   00  01  be
125*4882a593Smuzhiyun				01   00  01  00
126*4882a593Smuzhiyun				01   00  01  04
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun				00   00  01  e9
129*4882a593Smuzhiyun				01   00  01  00
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun				00   00  01  f7
132*4882a593Smuzhiyun				01   00  01  a9
133*4882a593Smuzhiyun				01   00  01  51
134*4882a593Smuzhiyun				01   00  01  2c
135*4882a593Smuzhiyun				01   00  01  82
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun				00   78  01  11
138*4882a593Smuzhiyun				00   00  01  29
139*4882a593Smuzhiyun			];
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun			panel-exit-sequence = [
142*4882a593Smuzhiyun				//type delay num val1 val2 val3
143*4882a593Smuzhiyun				00   0a  01  28
144*4882a593Smuzhiyun				00   78  01  10
145*4882a593Smuzhiyun			];
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun			display-timings {
148*4882a593Smuzhiyun				native-mode = <&kd050fwfba002_timing>;
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun				kd050fwfba002_timing: timing0 {
151*4882a593Smuzhiyun					clock-frequency = <10453500>;
152*4882a593Smuzhiyun					hactive = <320>;
153*4882a593Smuzhiyun					vactive = <480>;
154*4882a593Smuzhiyun					hback-porch = <10>;
155*4882a593Smuzhiyun					hfront-porch = <5>;
156*4882a593Smuzhiyun					vback-porch = <10>;
157*4882a593Smuzhiyun					vfront-porch = <5>;
158*4882a593Smuzhiyun					hsync-len = <10>;
159*4882a593Smuzhiyun					vsync-len = <10>;
160*4882a593Smuzhiyun					hsync-active = <0>;
161*4882a593Smuzhiyun					vsync-active = <0>;
162*4882a593Smuzhiyun					de-active = <0>;
163*4882a593Smuzhiyun					pixelclk-active = <1>;
164*4882a593Smuzhiyun				};
165*4882a593Smuzhiyun			};
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun			port {
168*4882a593Smuzhiyun				panel_in_rgb: endpoint {
169*4882a593Smuzhiyun					remote-endpoint = <&rgb_out_panel>;
170*4882a593Smuzhiyun				};
171*4882a593Smuzhiyun			};
172*4882a593Smuzhiyun		};
173*4882a593Smuzhiyun	};
174*4882a593Smuzhiyun};
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun&backlight {
177*4882a593Smuzhiyun	status = "okay";
178*4882a593Smuzhiyun	pwms = <&pwm9 0 25000 0>;
179*4882a593Smuzhiyun};
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun&dsi {
182*4882a593Smuzhiyun	status = "disabled";
183*4882a593Smuzhiyun};
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun&dsi_in_vp0 {
186*4882a593Smuzhiyun	status = "disabled";
187*4882a593Smuzhiyun};
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun/*
190*4882a593Smuzhiyun * The pins of gmac0/pcie2x1 and rgb are multiplexed
191*4882a593Smuzhiyun */
192*4882a593Smuzhiyun&gmac0 {
193*4882a593Smuzhiyun	status = "disabled";
194*4882a593Smuzhiyun};
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun&pcie2x1 {
197*4882a593Smuzhiyun	status = "disabled";
198*4882a593Smuzhiyun};
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun&pinctrl {
201*4882a593Smuzhiyun	spi_gpio {
202*4882a593Smuzhiyun		spi_gpio_pins: spi-gpio-pins {
203*4882a593Smuzhiyun			rockchip,pins =
204*4882a593Smuzhiyun				/* spi sdo */
205*4882a593Smuzhiyun				<4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>,
206*4882a593Smuzhiyun				/* spi sdi */
207*4882a593Smuzhiyun				<4 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>,
208*4882a593Smuzhiyun				/* spi scl */
209*4882a593Smuzhiyun				<4 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>,
210*4882a593Smuzhiyun				/* spi cs */
211*4882a593Smuzhiyun				<4 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
212*4882a593Smuzhiyun		};
213*4882a593Smuzhiyun	};
214*4882a593Smuzhiyun};
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun&pwm9 {
217*4882a593Smuzhiyun	status = "okay";
218*4882a593Smuzhiyun};
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun&rgb {
221*4882a593Smuzhiyun	status = "okay";
222*4882a593Smuzhiyun	pinctrl-names = "default";
223*4882a593Smuzhiyun	pinctrl-0 = <&rgb666_pins>;
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun	ports {
226*4882a593Smuzhiyun		rgb_out: port@1 {
227*4882a593Smuzhiyun			reg = <1>;
228*4882a593Smuzhiyun			#address-cells = <1>;
229*4882a593Smuzhiyun			#size-cells = <0>;
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun			rgb_out_panel: endpoint@0 {
232*4882a593Smuzhiyun				reg = <0>;
233*4882a593Smuzhiyun				remote-endpoint = <&panel_in_rgb>;
234*4882a593Smuzhiyun			};
235*4882a593Smuzhiyun		};
236*4882a593Smuzhiyun	};
237*4882a593Smuzhiyun};
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun&rgb_in_vp0 {
240*4882a593Smuzhiyun	status = "okay";
241*4882a593Smuzhiyun};
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun&route_rgb {
244*4882a593Smuzhiyun	status = "okay";
245*4882a593Smuzhiyun	connect = <&vp0_out_rgb>;
246*4882a593Smuzhiyun};
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun/*
249*4882a593Smuzhiyun * The pins of sai0/vcc_mipicsi0 and rgb are multiplexed
250*4882a593Smuzhiyun */
251*4882a593Smuzhiyun&sai0 {
252*4882a593Smuzhiyun	status = "disabled";
253*4882a593Smuzhiyun};
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun&vcc_mipicsi0 {
256*4882a593Smuzhiyun	status = "disabled";
257*4882a593Smuzhiyun};
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun&video_phy {
260*4882a593Smuzhiyun	status = "disabled";
261*4882a593Smuzhiyun};
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun&vop {
264*4882a593Smuzhiyun	status = "okay";
265*4882a593Smuzhiyun};
266