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