xref: /OK3568_Linux_fs/kernel/arch/mips/boot/dts/ingenic/gcw0.dts (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun/dts-v1/;
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun#include "jz4770.dtsi"
5*4882a593Smuzhiyun#include <dt-bindings/clock/ingenic,tcu.h>
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h>
8*4882a593Smuzhiyun#include <dt-bindings/iio/adc/ingenic,adc.h>
9*4882a593Smuzhiyun#include <dt-bindings/input/input.h>
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun/ {
12*4882a593Smuzhiyun	compatible = "gcw,zero", "ingenic,jz4770";
13*4882a593Smuzhiyun	model = "GCW Zero";
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun	aliases {
16*4882a593Smuzhiyun		serial0 = &uart0;
17*4882a593Smuzhiyun		serial1 = &uart1;
18*4882a593Smuzhiyun		serial2 = &uart2;
19*4882a593Smuzhiyun		serial3 = &uart3;
20*4882a593Smuzhiyun	};
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun	memory: memory {
23*4882a593Smuzhiyun		device_type = "memory";
24*4882a593Smuzhiyun		reg = <0x0 0x10000000>,
25*4882a593Smuzhiyun		      <0x30000000 0x10000000>;
26*4882a593Smuzhiyun	};
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun	chosen {
29*4882a593Smuzhiyun		stdout-path = "serial2:57600n8";
30*4882a593Smuzhiyun	};
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun	vcc: regulator@0 {
33*4882a593Smuzhiyun		compatible = "regulator-fixed";
34*4882a593Smuzhiyun		regulator-name = "vcc";
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
37*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
38*4882a593Smuzhiyun		regulator-always-on;
39*4882a593Smuzhiyun	};
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun	mmc1_power: regulator@1 {
42*4882a593Smuzhiyun		compatible = "regulator-fixed";
43*4882a593Smuzhiyun		regulator-name = "mmc1_vcc";
44*4882a593Smuzhiyun		gpio = <&gpe 9 0>;
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
47*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
48*4882a593Smuzhiyun		vin-supply = <&vcc>;
49*4882a593Smuzhiyun	};
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun	headphones_amp: analog-amplifier@0 {
52*4882a593Smuzhiyun		compatible = "simple-audio-amplifier";
53*4882a593Smuzhiyun		enable-gpios = <&gpf 3 GPIO_ACTIVE_LOW>;
54*4882a593Smuzhiyun		enable-delay-ms = <50>;
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun		VCC-supply = <&ldo5>;
57*4882a593Smuzhiyun		sound-name-prefix = "Headphones Amp";
58*4882a593Smuzhiyun	};
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun	speaker_amp: analog-amplifier@1 {
61*4882a593Smuzhiyun		compatible = "simple-audio-amplifier";
62*4882a593Smuzhiyun		enable-gpios = <&gpf 20 GPIO_ACTIVE_HIGH>;
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun		VCC-supply = <&ldo5>;
65*4882a593Smuzhiyun		sound-name-prefix = "Speaker Amp";
66*4882a593Smuzhiyun	};
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	sound {
69*4882a593Smuzhiyun		compatible = "simple-audio-card";
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun		simple-audio-card,name = "gcw0-audio";
72*4882a593Smuzhiyun		simple-audio-card,format = "i2s";
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun		simple-audio-card,widgets =
75*4882a593Smuzhiyun			"Speaker", "Speaker",
76*4882a593Smuzhiyun			"Headphone", "Headphones",
77*4882a593Smuzhiyun			"Line", "FM Radio",
78*4882a593Smuzhiyun			"Microphone", "Built-in Mic";
79*4882a593Smuzhiyun		simple-audio-card,routing =
80*4882a593Smuzhiyun			"Headphones Amp INL", "LHPOUT",
81*4882a593Smuzhiyun			"Headphones Amp INR", "RHPOUT",
82*4882a593Smuzhiyun			"Headphones", "Headphones Amp OUTL",
83*4882a593Smuzhiyun			"Headphones", "Headphones Amp OUTR",
84*4882a593Smuzhiyun			"Speaker Amp INL", "LOUT",
85*4882a593Smuzhiyun			"Speaker Amp INR", "ROUT",
86*4882a593Smuzhiyun			"Speaker", "Speaker Amp OUTL",
87*4882a593Smuzhiyun			"Speaker", "Speaker Amp OUTR",
88*4882a593Smuzhiyun			"LLINEIN", "FM Radio",
89*4882a593Smuzhiyun			"RLINEIN", "FM Radio",
90*4882a593Smuzhiyun			"Built-in Mic", "MICBIAS",
91*4882a593Smuzhiyun			"MIC1P", "Built-in Mic",
92*4882a593Smuzhiyun			"MIC1N", "Built-in Mic";
93*4882a593Smuzhiyun		simple-audio-card,pin-switches = "Speaker", "Headphones";
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun		simple-audio-card,hp-det-gpio = <&gpf 21 GPIO_ACTIVE_LOW>;
96*4882a593Smuzhiyun		simple-audio-card,aux-devs = <&speaker_amp>, <&headphones_amp>;
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun		simple-audio-card,bitclock-master = <&dai_codec>;
99*4882a593Smuzhiyun		simple-audio-card,frame-master = <&dai_codec>;
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun		dai_cpu: simple-audio-card,cpu {
102*4882a593Smuzhiyun			sound-dai = <&aic>;
103*4882a593Smuzhiyun		};
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun		dai_codec: simple-audio-card,codec {
106*4882a593Smuzhiyun			sound-dai = <&codec>;
107*4882a593Smuzhiyun		};
108*4882a593Smuzhiyun	};
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun	rumble {
111*4882a593Smuzhiyun		compatible = "pwm-vibrator";
112*4882a593Smuzhiyun		pwms = <&pwm 4 2000000 0>;
113*4882a593Smuzhiyun		pwm-names = "enable";
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun		pinctrl-names = "default";
116*4882a593Smuzhiyun		pinctrl-0 = <&pins_pwm4>;
117*4882a593Smuzhiyun	};
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun	backlight: backlight {
120*4882a593Smuzhiyun		compatible = "pwm-backlight";
121*4882a593Smuzhiyun		pwms = <&pwm 1 40000 0>;
122*4882a593Smuzhiyun		power-supply = <&vcc>;
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun		brightness-levels = <0 16 32 48 64 80 96 112 128
125*4882a593Smuzhiyun				     144 160 176 192 208 224 240 255>;
126*4882a593Smuzhiyun		default-brightness-level = <12>;
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun		pinctrl-names = "default";
129*4882a593Smuzhiyun		pinctrl-0 = <&pins_pwm1>;
130*4882a593Smuzhiyun	};
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun	gpio-keys {
133*4882a593Smuzhiyun		compatible = "gpio-keys";
134*4882a593Smuzhiyun		#address-cells = <1>;
135*4882a593Smuzhiyun		#size-cells = <0>;
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun		autorepeat;
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun		button@0 {
140*4882a593Smuzhiyun			label = "D-pad up";
141*4882a593Smuzhiyun			linux,code = <KEY_UP>;
142*4882a593Smuzhiyun			linux,can-disable;
143*4882a593Smuzhiyun			gpios = <&gpe 21 GPIO_ACTIVE_LOW>;
144*4882a593Smuzhiyun		};
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun		button@1 {
147*4882a593Smuzhiyun			label = "D-pad down";
148*4882a593Smuzhiyun			linux,code = <KEY_DOWN>;
149*4882a593Smuzhiyun			linux,can-disable;
150*4882a593Smuzhiyun			gpios = <&gpe 25 GPIO_ACTIVE_LOW>;
151*4882a593Smuzhiyun		};
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun		button@2 {
154*4882a593Smuzhiyun			label = "D-pad left";
155*4882a593Smuzhiyun			linux,code = <KEY_LEFT>;
156*4882a593Smuzhiyun			linux,can-disable;
157*4882a593Smuzhiyun			gpios = <&gpe 23 GPIO_ACTIVE_LOW>;
158*4882a593Smuzhiyun		};
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun		button@3 {
161*4882a593Smuzhiyun			label = "D-pad right";
162*4882a593Smuzhiyun			linux,code = <KEY_RIGHT>;
163*4882a593Smuzhiyun			linux,can-disable;
164*4882a593Smuzhiyun			gpios = <&gpe 24 GPIO_ACTIVE_LOW>;
165*4882a593Smuzhiyun		};
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun		button@4 {
168*4882a593Smuzhiyun			label = "Button A";
169*4882a593Smuzhiyun			linux,code = <KEY_LEFTCTRL>;
170*4882a593Smuzhiyun			linux,can-disable;
171*4882a593Smuzhiyun			gpios = <&gpe 29 GPIO_ACTIVE_LOW>;
172*4882a593Smuzhiyun		};
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun		button@5 {
175*4882a593Smuzhiyun			label = "Button B";
176*4882a593Smuzhiyun			linux,code = <KEY_LEFTALT>;
177*4882a593Smuzhiyun			linux,can-disable;
178*4882a593Smuzhiyun			gpios = <&gpe 20 GPIO_ACTIVE_LOW>;
179*4882a593Smuzhiyun		};
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun		button@6 {
182*4882a593Smuzhiyun			label = "Button Y";
183*4882a593Smuzhiyun			linux,code = <KEY_SPACE>;
184*4882a593Smuzhiyun			linux,can-disable;
185*4882a593Smuzhiyun			gpios = <&gpe 27 GPIO_ACTIVE_LOW>;
186*4882a593Smuzhiyun		};
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun		button@7 {
189*4882a593Smuzhiyun			label = "Button X";
190*4882a593Smuzhiyun			linux,code = <KEY_LEFTSHIFT>;
191*4882a593Smuzhiyun			linux,can-disable;
192*4882a593Smuzhiyun			gpios = <&gpe 28 GPIO_ACTIVE_LOW>;
193*4882a593Smuzhiyun		};
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun		button@8 {
196*4882a593Smuzhiyun			label = "Left shoulder button";
197*4882a593Smuzhiyun			linux,code = <KEY_TAB>;
198*4882a593Smuzhiyun			linux,can-disable;
199*4882a593Smuzhiyun			gpios = <&gpb 20 GPIO_ACTIVE_LOW>;
200*4882a593Smuzhiyun		};
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun		button@9 {
203*4882a593Smuzhiyun			label = "Right shoulder button";
204*4882a593Smuzhiyun			linux,code = <KEY_BACKSPACE>;
205*4882a593Smuzhiyun			linux,can-disable;
206*4882a593Smuzhiyun			gpios = <&gpe 26 GPIO_ACTIVE_LOW>;
207*4882a593Smuzhiyun		};
208*4882a593Smuzhiyun
209*4882a593Smuzhiyun		button@10 {
210*4882a593Smuzhiyun			label = "Start button";
211*4882a593Smuzhiyun			linux,code = <KEY_ENTER>;
212*4882a593Smuzhiyun			linux,can-disable;
213*4882a593Smuzhiyun			gpios = <&gpb 21 GPIO_ACTIVE_LOW>;
214*4882a593Smuzhiyun		};
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun		button@11 {
217*4882a593Smuzhiyun			label = "Select button";
218*4882a593Smuzhiyun			linux,code = <KEY_ESC>;
219*4882a593Smuzhiyun			linux,can-disable;
220*4882a593Smuzhiyun			/*
221*4882a593Smuzhiyun			 * This is the only button that is active high,
222*4882a593Smuzhiyun			 * since it doubles as BOOT_SEL1.
223*4882a593Smuzhiyun			 */
224*4882a593Smuzhiyun			gpios = <&gpd 18 GPIO_ACTIVE_HIGH>;
225*4882a593Smuzhiyun		};
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun		button@12 {
228*4882a593Smuzhiyun			label = "Power slider";
229*4882a593Smuzhiyun			linux,code = <KEY_POWER>;
230*4882a593Smuzhiyun			linux,can-disable;
231*4882a593Smuzhiyun			gpios = <&gpa 30 GPIO_ACTIVE_LOW>;
232*4882a593Smuzhiyun			wakeup-source;
233*4882a593Smuzhiyun		};
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun		button@13 {
236*4882a593Smuzhiyun			label = "Power hold";
237*4882a593Smuzhiyun			linux,code = <KEY_PAUSE>;
238*4882a593Smuzhiyun			linux,can-disable;
239*4882a593Smuzhiyun			gpios = <&gpf 11 GPIO_ACTIVE_LOW>;
240*4882a593Smuzhiyun		};
241*4882a593Smuzhiyun	};
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun	i2c3: i2c-controller@3 {
244*4882a593Smuzhiyun		compatible = "i2c-gpio";
245*4882a593Smuzhiyun		#address-cells = <1>;
246*4882a593Smuzhiyun		#size-cells = <0>;
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun		sda-gpios = <&gpd 5 GPIO_ACTIVE_HIGH>;
249*4882a593Smuzhiyun		scl-gpios = <&gpd 4 GPIO_ACTIVE_HIGH>;
250*4882a593Smuzhiyun		i2c-gpio,delay-us = <2>; /* 250 kHz */
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun		act8600: pmic@5a {
253*4882a593Smuzhiyun			compatible = "active-semi,act8600";
254*4882a593Smuzhiyun			reg = <0x5a>;
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun			regulators {
257*4882a593Smuzhiyun				/* USB OTG */
258*4882a593Smuzhiyun				otg_vbus: SUDCDC_REG4 {
259*4882a593Smuzhiyun					/*
260*4882a593Smuzhiyun					 * 5.3V instead of 5.0V to compensate
261*4882a593Smuzhiyun					 * for the voltage drop of a diode
262*4882a593Smuzhiyun					 * between the regulator and the
263*4882a593Smuzhiyun					 * connector.
264*4882a593Smuzhiyun					 */
265*4882a593Smuzhiyun					regulator-min-microvolt = <5300000>;
266*4882a593Smuzhiyun					regulator-max-microvolt = <5300000>;
267*4882a593Smuzhiyun					inl-supply = <&vcc>;
268*4882a593Smuzhiyun				};
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun				/*
271*4882a593Smuzhiyun				 * When this is off, there is no sound, but also
272*4882a593Smuzhiyun				 * no USB networking.
273*4882a593Smuzhiyun				 */
274*4882a593Smuzhiyun				ldo5: LDO5 {
275*4882a593Smuzhiyun					regulator-min-microvolt = <2500000>;
276*4882a593Smuzhiyun					regulator-max-microvolt = <2500000>;
277*4882a593Smuzhiyun					inl-supply = <&vcc>;
278*4882a593Smuzhiyun				};
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun				/* LCD panel and FM radio */
281*4882a593Smuzhiyun				ldo6: LDO6 {
282*4882a593Smuzhiyun					regulator-min-microvolt = <3300000>;
283*4882a593Smuzhiyun					regulator-max-microvolt = <3300000>;
284*4882a593Smuzhiyun					inl-supply = <&vcc>;
285*4882a593Smuzhiyun				};
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun				/* ??? */
288*4882a593Smuzhiyun				LDO7 {
289*4882a593Smuzhiyun					regulator-min-microvolt = <3300000>;
290*4882a593Smuzhiyun					regulator-max-microvolt = <3300000>;
291*4882a593Smuzhiyun					/*regulator-always-on;*/
292*4882a593Smuzhiyun					inl-supply = <&vcc>;
293*4882a593Smuzhiyun				};
294*4882a593Smuzhiyun
295*4882a593Smuzhiyun				/*
296*4882a593Smuzhiyun				 * The colors on the LCD are wrong when this is
297*4882a593Smuzhiyun				 * off. Which is strange, since the LCD panel
298*4882a593Smuzhiyun				 * data sheet only mentions a 3.3V input.
299*4882a593Smuzhiyun				 */
300*4882a593Smuzhiyun				LDO8 {
301*4882a593Smuzhiyun					regulator-min-microvolt = <1800000>;
302*4882a593Smuzhiyun					regulator-max-microvolt = <1800000>;
303*4882a593Smuzhiyun					regulator-always-on;
304*4882a593Smuzhiyun					inl-supply = <&vcc>;
305*4882a593Smuzhiyun				};
306*4882a593Smuzhiyun
307*4882a593Smuzhiyun				/* RTC fixed 3.3V */
308*4882a593Smuzhiyun				LDO_REG9 {
309*4882a593Smuzhiyun					regulator-min-microvolt = <3300000>;
310*4882a593Smuzhiyun					regulator-max-microvolt = <3300000>;
311*4882a593Smuzhiyun					regulator-always-on;
312*4882a593Smuzhiyun					inl-supply = <&vcc>;
313*4882a593Smuzhiyun				};
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun				/* Unused fixed 1.2V */
316*4882a593Smuzhiyun				LDO_REG10 {
317*4882a593Smuzhiyun					inl-supply = <&vcc>;
318*4882a593Smuzhiyun				};
319*4882a593Smuzhiyun			};
320*4882a593Smuzhiyun		};
321*4882a593Smuzhiyun	};
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun	leds {
324*4882a593Smuzhiyun		compatible = "gpio-leds";
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun		led {
327*4882a593Smuzhiyun			gpios = <&gpb 30 GPIO_ACTIVE_LOW>;
328*4882a593Smuzhiyun			default-state = "on";
329*4882a593Smuzhiyun		};
330*4882a593Smuzhiyun	};
331*4882a593Smuzhiyun
332*4882a593Smuzhiyun	spi {
333*4882a593Smuzhiyun		compatible = "spi-gpio";
334*4882a593Smuzhiyun		#address-cells = <1>;
335*4882a593Smuzhiyun		#size-cells = <0>;
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun		sck-gpios = <&gpe 15 GPIO_ACTIVE_HIGH>;
338*4882a593Smuzhiyun		mosi-gpios = <&gpe 17 GPIO_ACTIVE_HIGH>;
339*4882a593Smuzhiyun		cs-gpios = <&gpe 16 GPIO_ACTIVE_HIGH>;
340*4882a593Smuzhiyun		num-chipselects = <1>;
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun		nt39016@0 {
343*4882a593Smuzhiyun			compatible = "kingdisplay,kd035g6-54nt";
344*4882a593Smuzhiyun			reg = <0>;
345*4882a593Smuzhiyun
346*4882a593Smuzhiyun			spi-max-frequency = <3125000>;
347*4882a593Smuzhiyun			spi-3wire;
348*4882a593Smuzhiyun			spi-cs-high;
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun			reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun			backlight = <&backlight>;
353*4882a593Smuzhiyun			power-supply = <&ldo6>;
354*4882a593Smuzhiyun
355*4882a593Smuzhiyun			port {
356*4882a593Smuzhiyun				panel_input: endpoint {
357*4882a593Smuzhiyun					remote-endpoint = <&panel_output>;
358*4882a593Smuzhiyun				};
359*4882a593Smuzhiyun			};
360*4882a593Smuzhiyun		};
361*4882a593Smuzhiyun	};
362*4882a593Smuzhiyun
363*4882a593Smuzhiyun	connector {
364*4882a593Smuzhiyun		compatible = "gpio-usb-b-connector", "usb-b-connector";
365*4882a593Smuzhiyun		label = "mini-USB";
366*4882a593Smuzhiyun		type = "mini";
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun		/*
369*4882a593Smuzhiyun		 * USB OTG is not yet working reliably, the ID detection
370*4882a593Smuzhiyun		 * mechanism tends to fry easily for unknown reasons.
371*4882a593Smuzhiyun		 * Until this is fixed, disable OTG by not providing the
372*4882a593Smuzhiyun		 * ID GPIO to the driver.
373*4882a593Smuzhiyun		 */
374*4882a593Smuzhiyun		//id-gpios = <&gpf 18 GPIO_ACTIVE_LOW>;
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun		vbus-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
377*4882a593Smuzhiyun		vbus-supply = <&otg_vbus>;
378*4882a593Smuzhiyun
379*4882a593Smuzhiyun		pinctrl-names = "default";
380*4882a593Smuzhiyun		pinctrl-0 = <&pins_otg>;
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun		port {
383*4882a593Smuzhiyun			usb_ep: endpoint {
384*4882a593Smuzhiyun				remote-endpoint = <&usb_otg_ep>;
385*4882a593Smuzhiyun			};
386*4882a593Smuzhiyun		};
387*4882a593Smuzhiyun	};
388*4882a593Smuzhiyun};
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun&ext {
391*4882a593Smuzhiyun	clock-frequency = <12000000>;
392*4882a593Smuzhiyun};
393*4882a593Smuzhiyun
394*4882a593Smuzhiyun&pinctrl {
395*4882a593Smuzhiyun	pins_lcd: lcd {
396*4882a593Smuzhiyun		function = "lcd";
397*4882a593Smuzhiyun		groups = "lcd-24bit";
398*4882a593Smuzhiyun	};
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun	pins_uart2: uart2 {
401*4882a593Smuzhiyun		function = "uart2";
402*4882a593Smuzhiyun		groups = "uart2-data";
403*4882a593Smuzhiyun	};
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun	pins_mmc0: mmc0 {
406*4882a593Smuzhiyun		function = "mmc0";
407*4882a593Smuzhiyun		groups = "mmc0-1bit-a", "mmc0-4bit-a";
408*4882a593Smuzhiyun	};
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun	pins_mmc1: mmc1 {
411*4882a593Smuzhiyun		function = "mmc1";
412*4882a593Smuzhiyun		groups = "mmc1-1bit-d", "mmc1-4bit-d";
413*4882a593Smuzhiyun	};
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun	pins_otg: otg {
416*4882a593Smuzhiyun		otg-vbus-pin {
417*4882a593Smuzhiyun			function = "otg";
418*4882a593Smuzhiyun			groups = "otg-vbus";
419*4882a593Smuzhiyun		};
420*4882a593Smuzhiyun
421*4882a593Smuzhiyun		vbus-pin {
422*4882a593Smuzhiyun			pins = "PB5";
423*4882a593Smuzhiyun			bias-disable;
424*4882a593Smuzhiyun		};
425*4882a593Smuzhiyun	};
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun	pins_pwm1: pwm1 {
428*4882a593Smuzhiyun		function = "pwm1";
429*4882a593Smuzhiyun		groups = "pwm1";
430*4882a593Smuzhiyun	};
431*4882a593Smuzhiyun
432*4882a593Smuzhiyun	pins_pwm4: pwm4 {
433*4882a593Smuzhiyun		function = "pwm4";
434*4882a593Smuzhiyun		groups = "pwm4";
435*4882a593Smuzhiyun	};
436*4882a593Smuzhiyun};
437*4882a593Smuzhiyun
438*4882a593Smuzhiyun&uart2 {
439*4882a593Smuzhiyun	pinctrl-names = "default";
440*4882a593Smuzhiyun	pinctrl-0 = <&pins_uart2>;
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun	status = "okay";
443*4882a593Smuzhiyun};
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun&cgu {
446*4882a593Smuzhiyun	/*
447*4882a593Smuzhiyun	 * Put high-speed peripherals under PLL1, such that we can change the
448*4882a593Smuzhiyun	 * PLL0 frequency on demand without having to suspend peripherals.
449*4882a593Smuzhiyun	 * We use a rate of 432 MHz, which is the least common multiple of
450*4882a593Smuzhiyun	 * 27 MHz (required by TV encoder) and 48 MHz (required by USB host).
451*4882a593Smuzhiyun	 * Put the GPU under PLL0 since we want a higher frequency.
452*4882a593Smuzhiyun	 * Use the 32 kHz oscillator as the parent of the RTC for a higher
453*4882a593Smuzhiyun	 * precision.
454*4882a593Smuzhiyun	 */
455*4882a593Smuzhiyun	assigned-clocks =
456*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL1>,
457*4882a593Smuzhiyun		<&cgu JZ4770_CLK_GPU>,
458*4882a593Smuzhiyun		<&cgu JZ4770_CLK_RTC>,
459*4882a593Smuzhiyun		<&cgu JZ4770_CLK_UHC>,
460*4882a593Smuzhiyun		<&cgu JZ4770_CLK_LPCLK_MUX>,
461*4882a593Smuzhiyun		<&cgu JZ4770_CLK_MMC0_MUX>,
462*4882a593Smuzhiyun		<&cgu JZ4770_CLK_MMC1_MUX>;
463*4882a593Smuzhiyun	assigned-clock-parents =
464*4882a593Smuzhiyun		<0>,
465*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL0>,
466*4882a593Smuzhiyun		<&cgu JZ4770_CLK_OSC32K>,
467*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL1>,
468*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL1>,
469*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL1>,
470*4882a593Smuzhiyun		<&cgu JZ4770_CLK_PLL1>;
471*4882a593Smuzhiyun	assigned-clock-rates =
472*4882a593Smuzhiyun		<432000000>,
473*4882a593Smuzhiyun		<600000000>;
474*4882a593Smuzhiyun};
475*4882a593Smuzhiyun
476*4882a593Smuzhiyun&uhc {
477*4882a593Smuzhiyun	/* The WiFi module is connected to the UHC. */
478*4882a593Smuzhiyun	status = "okay";
479*4882a593Smuzhiyun};
480*4882a593Smuzhiyun
481*4882a593Smuzhiyun&tcu {
482*4882a593Smuzhiyun	/*
483*4882a593Smuzhiyun	 * 750 kHz for the system timer and clocksource, 12 MHz for the OST,
484*4882a593Smuzhiyun	 * and use RTC as the parent for the watchdog clock
485*4882a593Smuzhiyun	 */
486*4882a593Smuzhiyun	assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER2>,
487*4882a593Smuzhiyun			  <&tcu TCU_CLK_OST>, <&tcu TCU_CLK_WDT>;
488*4882a593Smuzhiyun	assigned-clock-parents = <0>, <0>, <0>, <&cgu JZ4770_CLK_RTC>;
489*4882a593Smuzhiyun	assigned-clock-rates = <750000>, <750000>, <12000000>;
490*4882a593Smuzhiyun
491*4882a593Smuzhiyun	/* PWM1 is in use, so use channel #2 for the clocksource */
492*4882a593Smuzhiyun	ingenic,pwm-channels-mask = <0xfa>;
493*4882a593Smuzhiyun};
494*4882a593Smuzhiyun
495*4882a593Smuzhiyun&usb_otg {
496*4882a593Smuzhiyun	port {
497*4882a593Smuzhiyun		usb_otg_ep: endpoint {
498*4882a593Smuzhiyun			remote-endpoint = <&usb_ep>;
499*4882a593Smuzhiyun		};
500*4882a593Smuzhiyun	};
501*4882a593Smuzhiyun};
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun&otg_phy {
504*4882a593Smuzhiyun	vcc-supply = <&ldo5>;
505*4882a593Smuzhiyun};
506*4882a593Smuzhiyun
507*4882a593Smuzhiyun&rtc {
508*4882a593Smuzhiyun	clocks = <&cgu JZ4770_CLK_RTC>;
509*4882a593Smuzhiyun	clock-names = "rtc";
510*4882a593Smuzhiyun
511*4882a593Smuzhiyun	system-power-controller;
512*4882a593Smuzhiyun};
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun&mmc0 {
515*4882a593Smuzhiyun	status = "okay";
516*4882a593Smuzhiyun
517*4882a593Smuzhiyun	bus-width = <4>;
518*4882a593Smuzhiyun	max-frequency = <48000000>;
519*4882a593Smuzhiyun	vmmc-supply = <&vcc>;
520*4882a593Smuzhiyun	non-removable;
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun	pinctrl-names = "default";
523*4882a593Smuzhiyun	pinctrl-0 = <&pins_mmc0>;
524*4882a593Smuzhiyun};
525*4882a593Smuzhiyun
526*4882a593Smuzhiyun&mmc1 {
527*4882a593Smuzhiyun	status = "okay";
528*4882a593Smuzhiyun
529*4882a593Smuzhiyun	bus-width = <4>;
530*4882a593Smuzhiyun	max-frequency = <48000000>;
531*4882a593Smuzhiyun	cd-gpios = <&gpb 2 GPIO_ACTIVE_LOW>;
532*4882a593Smuzhiyun	vmmc-supply = <&mmc1_power>;
533*4882a593Smuzhiyun
534*4882a593Smuzhiyun	pinctrl-names = "default";
535*4882a593Smuzhiyun	pinctrl-0 = <&pins_mmc1>;
536*4882a593Smuzhiyun};
537*4882a593Smuzhiyun
538*4882a593Smuzhiyun&lcd {
539*4882a593Smuzhiyun	pinctrl-names = "default";
540*4882a593Smuzhiyun	pinctrl-0 = <&pins_lcd>;
541*4882a593Smuzhiyun
542*4882a593Smuzhiyun	port {
543*4882a593Smuzhiyun		panel_output: endpoint {
544*4882a593Smuzhiyun			remote-endpoint = <&panel_input>;
545*4882a593Smuzhiyun		};
546*4882a593Smuzhiyun	};
547*4882a593Smuzhiyun};
548