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 hpvcc-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", "AIF1 Slot 0 Left", 425 "Right DAC", "AIF1 Slot 0 Right", 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 "AIF1 Slot 0 Left ADC", "Left ADC", 432 "AIF1 Slot 0 Right ADC", "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