1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2// Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz> 3// Copyright (C) 2020 Martijn Braam <martijn@brixit.nl> 4// Copyright (C) 2020 Ondrej Jirman <megous@megous.com> 5 6#include "sun50i-a64.dtsi" 7#include "sun50i-a64-cpu-opp.dtsi" 8 9#include <dt-bindings/gpio/gpio.h> 10#include <dt-bindings/input/input.h> 11#include <dt-bindings/leds/common.h> 12#include <dt-bindings/pwm/pwm.h> 13 14/ { 15 chassis-type = "handset"; 16 17 aliases { 18 ethernet0 = &rtl8723cs; 19 serial0 = &uart0; 20 }; 21 22 backlight: backlight { 23 compatible = "pwm-backlight"; 24 pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; 25 enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ 26 power-supply = <®_ps>; 27 /* Backlight configuration differs per PinePhone revision. */ 28 }; 29 30 bt_sco_codec: bt-sco-codec { 31 #sound-dai-cells = <1>; 32 compatible = "linux,bt-sco"; 33 }; 34 35 chosen { 36 stdout-path = "serial0:115200n8"; 37 }; 38 39 leds { 40 compatible = "gpio-leds"; 41 42 led-0 { 43 function = LED_FUNCTION_INDICATOR; 44 color = <LED_COLOR_ID_BLUE>; 45 gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */ 46 }; 47 48 led-1 { 49 function = LED_FUNCTION_INDICATOR; 50 color = <LED_COLOR_ID_GREEN>; 51 gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */ 52 }; 53 54 led-2 { 55 function = LED_FUNCTION_INDICATOR; 56 color = <LED_COLOR_ID_RED>; 57 gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */ 58 }; 59 }; 60 61 reg_ps: ps-regulator { 62 compatible = "regulator-fixed"; 63 regulator-name = "ps"; 64 regulator-min-microvolt = <5000000>; 65 regulator-max-microvolt = <5000000>; 66 regulator-boot-on; 67 }; 68 69 reg_vbat_wifi: vbat-wifi { 70 compatible = "regulator-fixed"; 71 regulator-min-microvolt = <3300000>; 72 regulator-max-microvolt = <3300000>; 73 regulator-name = "vbat-wifi"; 74 }; 75 76 sgm3140: led-controller { 77 compatible = "sgmicro,sgm3140"; 78 vin-supply = <®_dcdc1>; 79 80 sgm3140_flash: led { 81 function = LED_FUNCTION_FLASH; 82 color = <LED_COLOR_ID_WHITE>; 83 flash-max-timeout-us = <250000>; 84 }; 85 }; 86 87 speaker_amp: audio-amplifier { 88 compatible = "simple-audio-amplifier"; 89 enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */ 90 sound-name-prefix = "Speaker Amp"; 91 }; 92 93 vibrator { 94 compatible = "gpio-vibrator"; 95 enable-gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */ 96 vcc-supply = <®_dcdc1>; 97 }; 98}; 99 100&codec { 101 pinctrl-names = "default"; 102 pinctrl-0 = <&aif3_pins>; 103 status = "okay"; 104}; 105 106&codec_analog { 107 cpvdd-supply = <®_eldo1>; 108 status = "okay"; 109}; 110 111&cpu0 { 112 cpu-supply = <®_dcdc2>; 113}; 114 115&cpu1 { 116 cpu-supply = <®_dcdc2>; 117}; 118 119&cpu2 { 120 cpu-supply = <®_dcdc2>; 121}; 122 123&cpu3 { 124 cpu-supply = <®_dcdc2>; 125}; 126 127&dai { 128 status = "okay"; 129}; 130 131&de { 132 status = "okay"; 133}; 134 135&dphy { 136 status = "okay"; 137}; 138 139&dsi { 140 vcc-dsi-supply = <®_dldo1>; 141 status = "okay"; 142 143 panel@0 { 144 compatible = "xingbangda,xbd599"; 145 reg = <0>; 146 reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ 147 iovcc-supply = <®_dldo2>; 148 vcc-supply = <®_ldo_io0>; 149 backlight = <&backlight>; 150 }; 151}; 152 153&ehci0 { 154 status = "okay"; 155}; 156 157&ehci1 { 158 status = "okay"; 159}; 160 161&i2c0 { 162 status = "okay"; 163 164 touchscreen@5d { 165 compatible = "goodix,gt917s"; 166 reg = <0x5d>; 167 interrupt-parent = <&pio>; 168 interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */ 169 irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */ 170 reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */ 171 AVDD28-supply = <®_ldo_io0>; 172 VDDIO-supply = <®_ldo_io0>; 173 touchscreen-size-x = <720>; 174 touchscreen-size-y = <1440>; 175 }; 176}; 177 178&i2c1 { 179 status = "okay"; 180 181 /* Magnetometer */ 182 lis3mdl: magnetometer@1e { 183 compatible = "st,lis3mdl-magn"; 184 reg = <0x1e>; 185 vdd-supply = <®_dldo1>; 186 vddio-supply = <®_dldo1>; 187 }; 188 189 /* Light/proximity sensor */ 190 light-sensor@48 { 191 compatible = "sensortek,stk3311"; 192 reg = <0x48>; 193 interrupt-parent = <&pio>; 194 interrupts = <1 0 IRQ_TYPE_EDGE_FALLING>; /* PB0 */ 195 }; 196 197 /* Accelerometer/gyroscope */ 198 accelerometer@68 { 199 compatible = "invensense,mpu6050"; 200 reg = <0x68>; 201 interrupt-parent = <&pio>; 202 interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */ 203 vdd-supply = <®_dldo1>; 204 vddio-supply = <®_dldo1>; 205 }; 206}; 207 208/* Connected to pogo pins (external spring based pinheader for user addons) */ 209&i2c2 { 210 status = "okay"; 211}; 212 213&lradc { 214 vref-supply = <®_aldo3>; 215 wakeup-source; 216 status = "okay"; 217 218 button-200 { 219 label = "Volume Up"; 220 linux,code = <KEY_VOLUMEUP>; 221 channel = <0>; 222 voltage = <200000>; 223 }; 224 225 button-400 { 226 label = "Volume Down"; 227 linux,code = <KEY_VOLUMEDOWN>; 228 channel = <0>; 229 voltage = <400000>; 230 }; 231}; 232 233&mmc0 { 234 pinctrl-names = "default"; 235 pinctrl-0 = <&mmc0_pins>; 236 vmmc-supply = <®_dcdc1>; 237 vqmmc-supply = <®_dcdc1>; 238 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ 239 disable-wp; 240 bus-width = <4>; 241 status = "okay"; 242}; 243 244&mmc1 { 245 pinctrl-names = "default"; 246 pinctrl-0 = <&mmc1_pins>; 247 vmmc-supply = <®_vbat_wifi>; 248 vqmmc-supply = <®_dldo4>; 249 bus-width = <4>; 250 non-removable; 251 status = "okay"; 252 253 rtl8723cs: wifi@1 { 254 reg = <1>; 255 }; 256}; 257 258&mmc2 { 259 pinctrl-names = "default"; 260 pinctrl-0 = <&mmc2_pins>; 261 vmmc-supply = <®_dcdc1>; 262 vqmmc-supply = <®_dcdc1>; 263 bus-width = <8>; 264 non-removable; 265 cap-mmc-hw-reset; 266 status = "okay"; 267}; 268 269&ohci0 { 270 status = "okay"; 271}; 272 273&ohci1 { 274 status = "okay"; 275}; 276 277&pio { 278 vcc-pb-supply = <®_dcdc1>; 279 vcc-pc-supply = <®_dcdc1>; 280 vcc-pd-supply = <®_dcdc1>; 281 vcc-pe-supply = <®_aldo1>; 282 vcc-pf-supply = <®_dcdc1>; 283 vcc-pg-supply = <®_dldo4>; 284 vcc-ph-supply = <®_dcdc1>; 285}; 286 287&r_pio { 288 /* 289 * FIXME: We can't add that supply for now since it would 290 * create a circular dependency between pinctrl, the regulator 291 * and the RSB Bus. 292 * 293 * vcc-pl-supply = <®_aldo2>; 294 */ 295}; 296 297&r_pwm { 298 status = "okay"; 299}; 300 301&r_rsb { 302 status = "okay"; 303 304 axp803: pmic@3a3 { 305 compatible = "x-powers,axp803"; 306 reg = <0x3a3>; 307 interrupt-parent = <&r_intc>; 308 interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>; 309 }; 310}; 311 312#include "axp803.dtsi" 313 314&battery_power_supply { 315 status = "okay"; 316}; 317 318®_aldo1 { 319 regulator-min-microvolt = <1800000>; 320 regulator-max-microvolt = <1800000>; 321 regulator-name = "dovdd-csi"; 322}; 323 324®_aldo2 { 325 regulator-always-on; 326 regulator-min-microvolt = <1800000>; 327 regulator-max-microvolt = <1800000>; 328 regulator-name = "vcc-pl"; 329}; 330 331®_aldo3 { 332 regulator-always-on; 333 regulator-min-microvolt = <3000000>; 334 regulator-max-microvolt = <3000000>; 335 regulator-name = "vcc-pll-avcc"; 336}; 337 338®_dcdc1 { 339 regulator-always-on; 340 regulator-min-microvolt = <3300000>; 341 regulator-max-microvolt = <3300000>; 342 regulator-name = "vcc-3v3"; 343}; 344 345®_dcdc2 { 346 regulator-always-on; 347 regulator-min-microvolt = <1000000>; 348 regulator-max-microvolt = <1300000>; 349 regulator-name = "vdd-cpux"; 350}; 351 352/* DCDC3 is polyphased with DCDC2 */ 353 354®_dcdc5 { 355 regulator-always-on; 356 regulator-min-microvolt = <1200000>; 357 regulator-max-microvolt = <1200000>; 358 regulator-name = "vcc-dram"; 359}; 360 361®_dcdc6 { 362 regulator-always-on; 363 regulator-min-microvolt = <1100000>; 364 regulator-max-microvolt = <1100000>; 365 regulator-name = "vdd-sys"; 366}; 367 368®_dldo1 { 369 regulator-min-microvolt = <3300000>; 370 regulator-max-microvolt = <3300000>; 371 regulator-name = "vcc-dsi-sensor"; 372}; 373 374®_dldo2 { 375 regulator-min-microvolt = <1800000>; 376 regulator-max-microvolt = <1800000>; 377 regulator-name = "vcc-mipi-io"; 378}; 379 380®_dldo3 { 381 regulator-min-microvolt = <2800000>; 382 regulator-max-microvolt = <2800000>; 383 regulator-name = "avdd-csi"; 384}; 385 386®_dldo4 { 387 regulator-min-microvolt = <1800000>; 388 regulator-max-microvolt = <1800000>; 389 regulator-name = "vcc-wifi-io"; 390}; 391 392®_eldo1 { 393 regulator-always-on; 394 regulator-min-microvolt = <1800000>; 395 regulator-max-microvolt = <1800000>; 396 regulator-name = "vcc-lpddr"; 397}; 398 399®_eldo3 { 400 regulator-min-microvolt = <1800000>; 401 regulator-max-microvolt = <1800000>; 402 regulator-name = "dvdd-1v8-csi"; 403}; 404 405®_fldo1 { 406 regulator-min-microvolt = <1200000>; 407 regulator-max-microvolt = <1200000>; 408 regulator-name = "vcc-1v2-hsic"; 409}; 410 411®_fldo2 { 412 regulator-always-on; 413 regulator-min-microvolt = <1100000>; 414 regulator-max-microvolt = <1100000>; 415 regulator-name = "vdd-cpus"; 416}; 417 418®_ldo_io0 { 419 regulator-min-microvolt = <3300000>; 420 regulator-max-microvolt = <3300000>; 421 regulator-name = "vcc-lcd-ctp-stk"; 422 status = "okay"; 423}; 424 425®_ldo_io1 { 426 regulator-min-microvolt = <1800000>; 427 regulator-max-microvolt = <1800000>; 428 regulator-name = "vcc-1v8-typec"; 429 status = "okay"; 430}; 431 432®_rtc_ldo { 433 regulator-name = "vcc-rtc"; 434}; 435 436&sound { 437 status = "okay"; 438 simple-audio-card,name = "PinePhone"; 439 simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>; 440 simple-audio-card,widgets = "Microphone", "Headset Microphone", 441 "Microphone", "Internal Microphone", 442 "Headphone", "Headphone Jack", 443 "Speaker", "Internal Earpiece", 444 "Speaker", "Internal Speaker"; 445 simple-audio-card,routing = 446 "Headphone Jack", "HP", 447 "Internal Earpiece", "EARPIECE", 448 "Internal Speaker", "Speaker Amp OUTL", 449 "Internal Speaker", "Speaker Amp OUTR", 450 "Speaker Amp INL", "LINEOUT", 451 "Speaker Amp INR", "LINEOUT", 452 "Left DAC", "DACL", 453 "Right DAC", "DACR", 454 "ADCL", "Left ADC", 455 "ADCR", "Right ADC", 456 "Internal Microphone", "MBIAS", 457 "MIC1", "Internal Microphone", 458 "Headset Microphone", "HBIAS", 459 "MIC2", "Headset Microphone"; 460 461 simple-audio-card,dai-link@2 { 462 format = "dsp_a"; 463 frame-master = <&link2_codec>; 464 bitclock-master = <&link2_codec>; 465 bitclock-inversion; 466 467 link2_cpu: cpu { 468 sound-dai = <&bt_sco_codec 0>; 469 }; 470 471 link2_codec: codec { 472 sound-dai = <&codec 2>; 473 dai-tdm-slot-num = <1>; 474 dai-tdm-slot-width = <32>; 475 }; 476 }; 477}; 478 479&uart0 { 480 pinctrl-names = "default"; 481 pinctrl-0 = <&uart0_pb_pins>; 482 status = "okay"; 483}; 484 485&uart1 { 486 pinctrl-names = "default"; 487 pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; 488 status = "okay"; 489 490 bluetooth { 491 compatible = "realtek,rtl8723cs-bt"; 492 device-wake-gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /* PH6 */ 493 enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */ 494 host-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */ 495 }; 496}; 497 498/* Connected to the modem (hardware flow control can't be used) */ 499&uart3 { 500 pinctrl-names = "default"; 501 pinctrl-0 = <&uart3_pins>; 502 status = "okay"; 503}; 504 505&usb_otg { 506 dr_mode = "peripheral"; 507 status = "okay"; 508}; 509 510&usb_power_supply { 511 status = "okay"; 512}; 513 514&usbphy { 515 status = "okay"; 516}; 517