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