Merge tag 'fsnotify_for_v5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / arch / mips / boot / dts / ingenic / gcw0.dts
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 };