linux/arch/mips/boot/dts/ingenic/gcw0.dts
<<
>>
Prefs
   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
 349                        reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
 350
 351                        backlight = <&backlight>;
 352                        power-supply = <&ldo6>;
 353
 354                        port {
 355                                panel_input: endpoint {
 356                                        remote-endpoint = <&panel_output>;
 357                                };
 358                        };
 359                };
 360        };
 361
 362        connector {
 363                compatible = "gpio-usb-b-connector", "usb-b-connector";
 364                label = "mini-USB";
 365                type = "mini";
 366
 367                /*
 368                 * USB OTG is not yet working reliably, the ID detection
 369                 * mechanism tends to fry easily for unknown reasons.
 370                 * Until this is fixed, disable OTG by not providing the
 371                 * ID GPIO to the driver.
 372                 */
 373                //id-gpios = <&gpf 18 GPIO_ACTIVE_LOW>;
 374
 375                vbus-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
 376                vbus-supply = <&otg_vbus>;
 377
 378                pinctrl-names = "default";
 379                pinctrl-0 = <&pins_otg>;
 380
 381                port {
 382                        usb_ep: endpoint {
 383                                remote-endpoint = <&usb_otg_ep>;
 384                        };
 385                };
 386        };
 387};
 388
 389&ext {
 390        clock-frequency = <12000000>;
 391};
 392
 393&pinctrl {
 394        pins_lcd: lcd {
 395                function = "lcd";
 396                groups = "lcd-24bit";
 397        };
 398
 399        pins_uart2: uart2 {
 400                function = "uart2";
 401                groups = "uart2-data";
 402        };
 403
 404        pins_mmc0: mmc0 {
 405                function = "mmc0";
 406                groups = "mmc0-1bit-a", "mmc0-4bit-a";
 407        };
 408
 409        pins_mmc1: mmc1 {
 410                function = "mmc1";
 411                groups = "mmc1-1bit-d", "mmc1-4bit-d";
 412        };
 413
 414        pins_otg: otg {
 415                otg-vbus-pin {
 416                        function = "otg";
 417                        groups = "otg-vbus";
 418                };
 419
 420                vbus-pin {
 421                        pins = "PB5";
 422                        bias-disable;
 423                };
 424        };
 425
 426        pins_pwm1: pwm1 {
 427                function = "pwm1";
 428                groups = "pwm1";
 429        };
 430
 431        pins_pwm4: pwm4 {
 432                function = "pwm4";
 433                groups = "pwm4";
 434        };
 435};
 436
 437&uart2 {
 438        pinctrl-names = "default";
 439        pinctrl-0 = <&pins_uart2>;
 440
 441        status = "okay";
 442};
 443
 444&cgu {
 445        /*
 446         * Put high-speed peripherals under PLL1, such that we can change the
 447         * PLL0 frequency on demand without having to suspend peripherals.
 448         * We use a rate of 432 MHz, which is the least common multiple of
 449         * 27 MHz (required by TV encoder) and 48 MHz (required by USB host).
 450         * Put the GPU under PLL0 since we want a higher frequency.
 451         * Use the 32 kHz oscillator as the parent of the RTC for a higher
 452         * precision.
 453         */
 454        assigned-clocks =
 455                <&cgu JZ4770_CLK_PLL1>,
 456                <&cgu JZ4770_CLK_GPU>,
 457                <&cgu JZ4770_CLK_RTC>,
 458                <&cgu JZ4770_CLK_UHC>,
 459                <&cgu JZ4770_CLK_LPCLK_MUX>,
 460                <&cgu JZ4770_CLK_MMC0_MUX>,
 461                <&cgu JZ4770_CLK_MMC1_MUX>;
 462        assigned-clock-parents =
 463                <0>,
 464                <&cgu JZ4770_CLK_PLL0>,
 465                <&cgu JZ4770_CLK_OSC32K>,
 466                <&cgu JZ4770_CLK_PLL1>,
 467                <&cgu JZ4770_CLK_PLL1>,
 468                <&cgu JZ4770_CLK_PLL1>,
 469                <&cgu JZ4770_CLK_PLL1>;
 470        assigned-clock-rates =
 471                <432000000>,
 472                <600000000>;
 473};
 474
 475&uhc {
 476        /* The WiFi module is connected to the UHC. */
 477        status = "okay";
 478};
 479
 480&tcu {
 481        /*
 482         * 750 kHz for the system timer and clocksource, 12 MHz for the OST,
 483         * and use RTC as the parent for the watchdog clock
 484         */
 485        assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER2>,
 486                          <&tcu TCU_CLK_OST>, <&tcu TCU_CLK_WDT>;
 487        assigned-clock-parents = <0>, <0>, <0>, <&cgu JZ4770_CLK_RTC>;
 488        assigned-clock-rates = <750000>, <750000>, <12000000>;
 489
 490        /* PWM1 is in use, so use channel #2 for the clocksource */
 491        ingenic,pwm-channels-mask = <0xfa>;
 492};
 493
 494&usb_otg {
 495        port {
 496                usb_otg_ep: endpoint {
 497                        remote-endpoint = <&usb_ep>;
 498                };
 499        };
 500};
 501
 502&otg_phy {
 503        vcc-supply = <&ldo5>;
 504};
 505
 506&rtc {
 507        clocks = <&cgu JZ4770_CLK_RTC>;
 508        clock-names = "rtc";
 509
 510        system-power-controller;
 511};
 512
 513&mmc0 {
 514        status = "okay";
 515
 516        bus-width = <4>;
 517        max-frequency = <48000000>;
 518        vmmc-supply = <&vcc>;
 519        non-removable;
 520
 521        pinctrl-names = "default";
 522        pinctrl-0 = <&pins_mmc0>;
 523};
 524
 525&mmc1 {
 526        status = "okay";
 527
 528        bus-width = <4>;
 529        max-frequency = <48000000>;
 530        cd-gpios = <&gpb 2 GPIO_ACTIVE_LOW>;
 531        vmmc-supply = <&mmc1_power>;
 532
 533        pinctrl-names = "default";
 534        pinctrl-0 = <&pins_mmc1>;
 535};
 536
 537&lcd {
 538        pinctrl-names = "default";
 539        pinctrl-0 = <&pins_lcd>;
 540
 541        port {
 542                panel_output: endpoint {
 543                        remote-endpoint = <&panel_input>;
 544                };
 545        };
 546};
 547