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}; 546