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