1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2/* 3 * Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz> 4 * 5 */ 6 7/dts-v1/; 8 9#include "sun50i-a64.dtsi" 10#include "sun50i-a64-cpu-opp.dtsi" 11 12#include <dt-bindings/gpio/gpio.h> 13#include <dt-bindings/input/input.h> 14#include <dt-bindings/pwm/pwm.h> 15 16/ { 17 model = "PineTab"; 18 compatible = "pine64,pinetab", "allwinner,sun50i-a64"; 19 20 aliases { 21 serial0 = &uart0; 22 ethernet0 = &rtl8723cs; 23 }; 24 25 backlight: backlight { 26 compatible = "pwm-backlight"; 27 pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>; 28 brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>; 29 default-brightness-level = <15>; 30 enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */ 31 power-supply = <&vdd_bl>; 32 }; 33 34 chosen { 35 stdout-path = "serial0:115200n8"; 36 }; 37 38 i2c-csi { 39 compatible = "i2c-gpio"; 40 sda-gpios = <&pio 4 13 GPIO_ACTIVE_HIGH>; /* PE13 */ 41 scl-gpios = <&pio 4 12 GPIO_ACTIVE_HIGH>; /* PE12 */ 42 i2c-gpio,delay-us = <5>; 43 #address-cells = <1>; 44 #size-cells = <0>; 45 46 /* Rear camera */ 47 ov5640: camera@3c { 48 compatible = "ovti,ov5640"; 49 reg = <0x3c>; 50 pinctrl-names = "default"; 51 pinctrl-0 = <&csi_mclk_pin>; 52 clocks = <&ccu CLK_CSI_MCLK>; 53 clock-names = "xclk"; 54 55 AVDD-supply = <®_dldo3>; 56 DOVDD-supply = <®_aldo1>; 57 DVDD-supply = <®_eldo3>; 58 reset-gpios = <&pio 4 14 GPIO_ACTIVE_LOW>; /* PE14 */ 59 powerdown-gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* PE15 */ 60 61 port { 62 ov5640_ep: endpoint { 63 remote-endpoint = <&csi_ep>; 64 bus-width = <8>; 65 hsync-active = <1>; /* Active high */ 66 vsync-active = <0>; /* Active low */ 67 data-active = <1>; /* Active high */ 68 pclk-sample = <1>; /* Rising */ 69 }; 70 }; 71 }; 72 }; 73 74 speaker_amp: audio-amplifier { 75 compatible = "simple-audio-amplifier"; 76 enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */ 77 sound-name-prefix = "Speaker Amp"; 78 }; 79 80 vdd_bl: regulator@0 { 81 compatible = "regulator-fixed"; 82 regulator-name = "bl-3v3"; 83 regulator-min-microvolt = <3300000>; 84 regulator-max-microvolt = <3300000>; 85 gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */ 86 enable-active-high; 87 }; 88 89 wifi_pwrseq: wifi_pwrseq { 90 compatible = "mmc-pwrseq-simple"; 91 reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ 92 post-power-on-delay-ms = <200>; 93 }; 94}; 95 96&codec { 97 status = "okay"; 98}; 99 100&codec_analog { 101 cpvdd-supply = <®_eldo1>; 102 status = "okay"; 103}; 104 105&cpu0 { 106 cpu-supply = <®_dcdc2>; 107}; 108 109&cpu1 { 110 cpu-supply = <®_dcdc2>; 111}; 112 113&cpu2 { 114 cpu-supply = <®_dcdc2>; 115}; 116 117&cpu3 { 118 cpu-supply = <®_dcdc2>; 119}; 120 121&csi { 122 status = "okay"; 123 124 port { 125 #address-cells = <1>; 126 #size-cells = <0>; 127 128 csi_ep: endpoint { 129 remote-endpoint = <&ov5640_ep>; 130 bus-width = <8>; 131 hsync-active = <1>; /* Active high */ 132 vsync-active = <0>; /* Active low */ 133 data-active = <1>; /* Active high */ 134 pclk-sample = <1>; /* Rising */ 135 }; 136 }; 137}; 138 139&dai { 140 status = "okay"; 141}; 142 143&de { 144 status = "okay"; 145}; 146 147&dphy { 148 status = "okay"; 149}; 150 151&dsi { 152 vcc-dsi-supply = <®_dldo1>; 153 status = "okay"; 154 155 panel@0 { 156 compatible = "feixin,k101-im2ba02"; 157 reg = <0>; 158 avdd-supply = <®_dc1sw>; 159 dvdd-supply = <®_dc1sw>; 160 cvdd-supply = <®_ldo_io1>; 161 reset-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */ 162 backlight = <&backlight>; 163 }; 164}; 165 166&ehci0 { 167 status = "okay"; 168}; 169 170&ehci1 { 171 status = "okay"; 172}; 173 174&i2c0 { 175 status = "okay"; 176 177 touchscreen@5d { 178 compatible = "goodix,gt9271"; 179 reg = <0x5d>; 180 interrupt-parent = <&pio>; 181 interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */ 182 irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */ 183 reset-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */ 184 AVDD28-supply = <®_ldo_io1>; 185 }; 186}; 187 188&i2c0_pins { 189 bias-pull-up; 190}; 191 192&i2c1 { 193 status = "okay"; 194 195 /* TODO: add Bochs BMA223 accelerometer here */ 196}; 197 198&lradc { 199 vref-supply = <®_aldo3>; 200 status = "okay"; 201 202 button-200 { 203 label = "Volume Up"; 204 linux,code = <KEY_VOLUMEUP>; 205 channel = <0>; 206 voltage = <200000>; 207 }; 208 209 button-400 { 210 label = "Volume Down"; 211 linux,code = <KEY_VOLUMEDOWN>; 212 channel = <0>; 213 voltage = <400000>; 214 }; 215}; 216 217&mixer1 { 218 status = "okay"; 219}; 220 221&mmc0 { 222 pinctrl-names = "default"; 223 pinctrl-0 = <&mmc0_pins>; 224 vmmc-supply = <®_dcdc1>; 225 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; 226 disable-wp; 227 bus-width = <4>; 228 status = "okay"; 229}; 230 231&mmc1 { 232 pinctrl-names = "default"; 233 pinctrl-0 = <&mmc1_pins>; 234 vmmc-supply = <®_dldo4>; 235 vqmmc-supply = <®_eldo1>; 236 mmc-pwrseq = <&wifi_pwrseq>; 237 bus-width = <4>; 238 non-removable; 239 status = "okay"; 240 241 rtl8723cs: wifi@1 { 242 reg = <1>; 243 }; 244}; 245 246&mmc2 { 247 pinctrl-names = "default"; 248 pinctrl-0 = <&mmc2_pins>; 249 vmmc-supply = <®_dcdc1>; 250 vqmmc-supply = <®_dcdc1>; 251 bus-width = <8>; 252 non-removable; 253 cap-mmc-hw-reset; 254 status = "okay"; 255}; 256 257&ohci0 { 258 status = "okay"; 259}; 260 261&pwm { 262 status = "okay"; 263}; 264 265&r_rsb { 266 status = "okay"; 267 268 axp803: pmic@3a3 { 269 compatible = "x-powers,axp803"; 270 reg = <0x3a3>; 271 interrupt-parent = <&r_intc>; 272 interrupts = <0 IRQ_TYPE_LEVEL_LOW>; 273 x-powers,drive-vbus-en; 274 }; 275}; 276 277#include "axp803.dtsi" 278 279&ac_power_supply { 280 status = "okay"; 281}; 282 283&battery_power_supply { 284 status = "okay"; 285}; 286 287®_aldo1 { 288 regulator-min-microvolt = <2800000>; 289 regulator-max-microvolt = <2800000>; 290 regulator-name = "dovdd-csi"; 291}; 292 293®_aldo2 { 294 regulator-always-on; 295 regulator-min-microvolt = <1800000>; 296 regulator-max-microvolt = <3300000>; 297 regulator-name = "vcc-pl"; 298}; 299 300®_aldo3 { 301 regulator-always-on; 302 regulator-min-microvolt = <2700000>; 303 regulator-max-microvolt = <3300000>; 304 regulator-name = "vcc-pll-avcc"; 305}; 306 307®_dc1sw { 308 regulator-name = "vcc-lcd"; 309}; 310 311®_dcdc1 { 312 regulator-always-on; 313 regulator-min-microvolt = <3300000>; 314 regulator-max-microvolt = <3300000>; 315 regulator-name = "vcc-3v3"; 316}; 317 318®_dcdc2 { 319 regulator-always-on; 320 regulator-min-microvolt = <1000000>; 321 regulator-max-microvolt = <1300000>; 322 regulator-name = "vdd-cpux"; 323}; 324 325/* DCDC3 is polyphased with DCDC2 */ 326 327®_dcdc5 { 328 regulator-always-on; 329 regulator-min-microvolt = <1200000>; 330 regulator-max-microvolt = <1200000>; 331 regulator-name = "vcc-dram"; 332}; 333 334®_dcdc6 { 335 regulator-always-on; 336 regulator-min-microvolt = <1100000>; 337 regulator-max-microvolt = <1100000>; 338 regulator-name = "vdd-sys"; 339}; 340 341®_dldo1 { 342 regulator-always-on; 343 regulator-min-microvolt = <3300000>; 344 regulator-max-microvolt = <3300000>; 345 regulator-name = "vcc-hdmi-dsi-sensor"; 346}; 347 348®_dldo3 { 349 regulator-min-microvolt = <2800000>; 350 regulator-max-microvolt = <2800000>; 351 regulator-name = "avdd-csi"; 352}; 353 354®_dldo4 { 355 regulator-min-microvolt = <3300000>; 356 regulator-max-microvolt = <3300000>; 357 regulator-name = "vcc-wifi"; 358}; 359 360®_drivevbus { 361 regulator-name = "usb0-vbus"; 362 status = "okay"; 363}; 364 365®_eldo1 { 366 regulator-always-on; 367 regulator-min-microvolt = <1800000>; 368 regulator-max-microvolt = <1800000>; 369 regulator-name = "cpvdd"; 370}; 371 372®_eldo2 { 373 regulator-min-microvolt = <1800000>; 374 regulator-max-microvolt = <1800000>; 375 regulator-name = "vcca-1v8"; 376}; 377 378®_eldo3 { 379 regulator-min-microvolt = <1800000>; 380 regulator-max-microvolt = <1800000>; 381 regulator-name = "dvdd-1v8-csi"; 382}; 383 384®_fldo1 { 385 regulator-min-microvolt = <1200000>; 386 regulator-max-microvolt = <1200000>; 387 regulator-name = "vcc-1v2-hsic"; 388}; 389 390®_fldo2 { 391 regulator-always-on; 392 regulator-min-microvolt = <1100000>; 393 regulator-max-microvolt = <1100000>; 394 regulator-name = "vdd-cpus"; 395}; 396 397®_ldo_io0 { 398 regulator-min-microvolt = <3300000>; 399 regulator-max-microvolt = <3300000>; 400 regulator-name = "vcc-usb"; 401 status = "okay"; 402}; 403 404®_ldo_io1 { 405 regulator-min-microvolt = <3300000>; 406 regulator-max-microvolt = <3300000>; 407 regulator-enable-ramp-delay = <3500000>; 408 regulator-name = "vcc-touchscreen"; 409 status = "okay"; 410}; 411 412®_rtc_ldo { 413 regulator-name = "vcc-rtc"; 414}; 415 416&sound { 417 status = "okay"; 418 simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>; 419 simple-audio-card,widgets = "Microphone", "Internal Microphone Left", 420 "Microphone", "Internal Microphone Right", 421 "Headphone", "Headphone Jack", 422 "Speaker", "Internal Speaker"; 423 simple-audio-card,routing = 424 "Left DAC", "DACL", 425 "Right DAC", "DACR", 426 "Speaker Amp INL", "LINEOUT", 427 "Speaker Amp INR", "LINEOUT", 428 "Internal Speaker", "Speaker Amp OUTL", 429 "Internal Speaker", "Speaker Amp OUTR", 430 "Headphone Jack", "HP", 431 "ADCL", "Left ADC", 432 "ADCR", "Right ADC", 433 "Internal Microphone Left", "MBIAS", 434 "MIC1", "Internal Microphone Left", 435 "Internal Microphone Right", "HBIAS", 436 "MIC2", "Internal Microphone Right"; 437}; 438 439&uart0 { 440 pinctrl-names = "default"; 441 pinctrl-0 = <&uart0_pb_pins>; 442 status = "okay"; 443}; 444 445&usb_otg { 446 dr_mode = "otg"; 447 status = "okay"; 448}; 449 450&usb_power_supply { 451 status = "okay"; 452}; 453 454&usbphy { 455 usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ 456 usb0_vbus_power-supply = <&usb_power_supply>; 457 usb0_vbus-supply = <®_drivevbus>; 458 usb1_vbus-supply = <®_ldo_io0>; 459 status = "okay"; 460}; 461