1/* 2 * Copyright (C) 2017 Touchless Biometric Systems AG 3 * Tomas Novotny <tomas@novotny.cz> 4 * 5 * This file is dual-licensed: you can use it either under the terms 6 * of the GPL or the X11 license, at your option. Note that this dual 7 * licensing only applies to this file, and not this project as a 8 * whole. 9 * 10 * a) This file is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License as 12 * published by the Free Software Foundation; either version 2 of the 13 * License, or (at your option) any later version. 14 * 15 * This file is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * Or, alternatively, 21 * 22 * b) Permission is hereby granted, free of charge, to any person 23 * obtaining a copy of this software and associated documentation 24 * files (the "Software"), to deal in the Software without 25 * restriction, including without limitation the rights to use, 26 * copy, modify, merge, publish, distribute, sublicense, and/or 27 * sell copies of the Software, and to permit persons to whom the 28 * Software is furnished to do so, subject to the following 29 * conditions: 30 * 31 * The above copyright notice and this permission notice shall be 32 * included in all copies or substantial portions of the Software. 33 * 34 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 36 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 37 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 38 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 39 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 40 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 41 * OTHER DEALINGS IN THE SOFTWARE. 42 */ 43 44/dts-v1/; 45#include "sun8i-a83t.dtsi" 46 47#include <dt-bindings/gpio/gpio.h> 48#include <dt-bindings/pwm/pwm.h> 49#include <dt-bindings/input/input.h> 50 51/ { 52 model = "TBS A711 Tablet"; 53 compatible = "tbs-biometrics,a711", "allwinner,sun8i-a83t"; 54 55 aliases { 56 serial0 = &uart0; 57 serial1 = &uart1; 58 }; 59 60 chosen { 61 stdout-path = "serial0:115200n8"; 62 }; 63 64 backlight: backlight { 65 compatible = "pwm-backlight"; 66 pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>; 67 enable-gpios = <&pio 3 29 GPIO_ACTIVE_HIGH>; 68 power-supply = <®_sw>; 69 brightness-levels = <0 1 2 4 8 16 32 64 128 255>; 70 default-brightness-level = <9>; 71 }; 72 73 panel { 74 compatible = "tbs,a711-panel", "panel-lvds"; 75 backlight = <&backlight>; 76 power-supply = <®_sw>; 77 78 width-mm = <153>; 79 height-mm = <90>; 80 data-mapping = "vesa-24"; 81 82 panel-timing { 83 /* 1024x600 @60Hz */ 84 clock-frequency = <52000000>; 85 hactive = <1024>; 86 vactive = <600>; 87 hsync-len = <20>; 88 hfront-porch = <180>; 89 hback-porch = <160>; 90 vfront-porch = <12>; 91 vback-porch = <23>; 92 vsync-len = <5>; 93 }; 94 95 port { 96 panel_input: endpoint { 97 remote-endpoint = <&tcon0_out_lcd>; 98 }; 99 }; 100 }; 101 102 reg_gps: reg-gps { 103 compatible = "regulator-fixed"; 104 regulator-name = "gps"; 105 regulator-min-microvolt = <3000000>; 106 regulator-max-microvolt = <3000000>; 107 }; 108 109 reg_vbat: reg-vbat { 110 compatible = "regulator-fixed"; 111 regulator-name = "vbat"; 112 regulator-min-microvolt = <3700000>; 113 regulator-max-microvolt = <3700000>; 114 }; 115 116 reg_vmain: reg-vmain { 117 compatible = "regulator-fixed"; 118 regulator-name = "vmain"; 119 regulator-min-microvolt = <5000000>; 120 regulator-max-microvolt = <5000000>; 121 gpio = <&r_pio 0 9 GPIO_ACTIVE_HIGH>; 122 enable-active-high; 123 vin-supply = <®_vbat>; 124 }; 125 126 wifi_pwrseq: wifi_pwrseq { 127 compatible = "mmc-pwrseq-simple"; 128 reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 WL-PMU-EN */ 129 130 /* 131 * This is actually Bluetooth's clock, but we have to 132 * hook it up somewheere 133 */ 134 clocks = <&ac100_rtc 1>; 135 clock-names = "ext_clock"; 136 }; 137}; 138 139&cpu0 { 140 cpu-supply = <®_dcdc2>; 141}; 142 143&cpu100 { 144 cpu-supply = <®_dcdc3>; 145}; 146 147&de { 148 status = "okay"; 149}; 150 151/* 152 * An USB-2 hub is connected here, which also means we don't need to 153 * enable the OHCI controller. 154 */ 155&ehci0 { 156 status = "okay"; 157}; 158 159/* 160 * There's a modem connected here that needs to be initialised before 161 * being able to be enumerated. 162 */ 163&ehci1 { 164 status = "okay"; 165}; 166 167&i2c0 { 168 clock-frequency = <400000>; 169 status = "okay"; 170 171 touchscreen@38 { 172 compatible = "edt,edt-ft5x06"; 173 reg = <0x38>; 174 interrupt-parent = <&r_pio>; 175 interrupts = <0 7 IRQ_TYPE_EDGE_FALLING>; /* PL7 */ 176 reset-gpios = <&pio 3 5 GPIO_ACTIVE_LOW>; /* PD5 */ 177 vcc-supply = <®_ldo_io0>; 178 touchscreen-size-x = <1024>; 179 touchscreen-size-y = <600>; 180 }; 181}; 182 183&i2c1 { 184 clock-frequency = <400000>; 185 status = "okay"; 186 187 accelerometer@18 { 188 compatible = "bosch,bma250"; 189 reg = <0x18>; 190 interrupt-parent = <&pio>; 191 interrupts = <7 10 IRQ_TYPE_EDGE_RISING>; /* PH10 / EINT10 */ 192 }; 193}; 194 195&mmc0 { 196 vmmc-supply = <®_dcdc1>; 197 pinctrl-names = "default"; 198 pinctrl-0 = <&mmc0_pins>; 199 bus-width = <4>; 200 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; 201 status = "okay"; 202}; 203 204&mmc1 { 205 mmc-pwrseq = <&wifi_pwrseq>; 206 bus-width = <4>; 207 vmmc-supply = <®_dldo1>; 208 vqmmc-supply = <®_dldo1>; 209 non-removable; 210 wakeup-source; 211 keep-power-in-suspend; 212 status = "okay"; 213 214 brcmf: wifi@1 { 215 reg = <1>; 216 compatible = "brcm,bcm4329-fmac"; 217 interrupt-parent = <&r_pio>; 218 interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 WL_WAKE_UP */ 219 interrupt-names = "host-wake"; 220 }; 221}; 222 223&mmc2 { 224 pinctrl-0 = <&mmc2_8bit_emmc_pins>; 225 pinctrl-names = "default"; 226 vmmc-supply = <®_dcdc1>; 227 vqmmc-supply = <®_dcdc1>; 228 bus-width = <8>; 229 non-removable; 230 cap-mmc-hw-reset; 231 status = "okay"; 232}; 233 234&pwm { 235 pinctrl-names = "default"; 236 pinctrl-0 = <&pwm_pin>; 237 status = "okay"; 238}; 239 240&r_lradc { 241 vref-supply = <®_aldo2>; 242 status = "okay"; 243 244 button-210 { 245 label = "Volume Up"; 246 linux,code = <KEY_VOLUMEUP>; 247 channel = <0>; 248 voltage = <210000>; 249 }; 250 251 button-410 { 252 label = "Volume Down"; 253 linux,code = <KEY_VOLUMEDOWN>; 254 channel = <0>; 255 voltage = <410000>; 256 }; 257}; 258 259&r_rsb { 260 status = "okay"; 261 262 axp81x: pmic@3a3 { 263 compatible = "x-powers,axp813"; 264 reg = <0x3a3>; 265 interrupt-parent = <&r_intc>; 266 interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>; 267 swin-supply = <®_dcdc1>; 268 x-powers,drive-vbus-en; 269 }; 270 271 ac100: codec@e89 { 272 compatible = "x-powers,ac100"; 273 reg = <0xe89>; 274 275 ac100_codec: codec { 276 compatible = "x-powers,ac100-codec"; 277 interrupt-parent = <&r_pio>; 278 interrupts = <0 12 IRQ_TYPE_LEVEL_LOW>; /* PL12 */ 279 #clock-cells = <0>; 280 clock-output-names = "4M_adda"; 281 }; 282 283 ac100_rtc: rtc { 284 compatible = "x-powers,ac100-rtc"; 285 interrupt-parent = <&r_intc>; 286 interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>; 287 clocks = <&ac100_codec>; 288 #clock-cells = <1>; 289 clock-output-names = "cko1_rtc", 290 "cko2_rtc", 291 "cko3_rtc"; 292 }; 293 }; 294 295}; 296 297#include "axp81x.dtsi" 298 299&battery_power_supply { 300 status = "okay"; 301}; 302 303®_aldo1 { 304 regulator-min-microvolt = <1800000>; 305 regulator-max-microvolt = <1800000>; 306 regulator-name = "vcc-1.8"; 307}; 308 309®_aldo2 { 310 regulator-min-microvolt = <1800000>; 311 regulator-max-microvolt = <1800000>; 312 regulator-always-on; 313 regulator-name = "vdd-drampll"; 314}; 315 316®_aldo3 { 317 regulator-min-microvolt = <3000000>; 318 regulator-max-microvolt = <3000000>; 319 regulator-always-on; 320 regulator-name = "avcc"; 321}; 322 323®_dcdc1 { 324 regulator-min-microvolt = <3100000>; 325 regulator-max-microvolt = <3100000>; 326 regulator-always-on; 327 regulator-name = "vcc-io"; 328}; 329 330®_dcdc2 { 331 regulator-min-microvolt = <700000>; 332 regulator-max-microvolt = <1100000>; 333 regulator-always-on; 334 regulator-name = "vdd-cpu-A"; 335}; 336 337®_dcdc3 { 338 regulator-min-microvolt = <700000>; 339 regulator-max-microvolt = <1100000>; 340 regulator-always-on; 341 regulator-name = "vdd-cpu-B"; 342}; 343 344®_dcdc4 { 345 regulator-min-microvolt = <700000>; 346 regulator-max-microvolt = <1100000>; 347 regulator-name = "vdd-gpu"; 348}; 349 350®_dcdc5 { 351 regulator-min-microvolt = <1200000>; 352 regulator-max-microvolt = <1500000>; 353 regulator-always-on; 354 regulator-name = "vcc-dram"; 355}; 356 357®_dcdc6 { 358 regulator-min-microvolt = <900000>; 359 regulator-max-microvolt = <900000>; 360 regulator-always-on; 361 regulator-name = "vdd-sys"; 362}; 363 364®_dldo1 { 365 regulator-min-microvolt = <3100000>; 366 regulator-max-microvolt = <3100000>; 367 regulator-name = "vcc-wifi-io"; 368}; 369 370®_dldo2 { 371 regulator-min-microvolt = <2800000>; 372 regulator-max-microvolt = <4200000>; 373 regulator-name = "vcc-mipi"; 374}; 375 376®_dldo3 { 377 regulator-min-microvolt = <1800000>; 378 regulator-max-microvolt = <1800000>; 379 regulator-name = "vdd-csi"; 380}; 381 382®_dldo4 { 383 regulator-min-microvolt = <2800000>; 384 regulator-max-microvolt = <2800000>; 385 regulator-name = "avdd-csi"; 386}; 387 388®_drivevbus { 389 regulator-name = "usb0-vbus"; 390 status = "okay"; 391}; 392 393®_eldo1 { 394 regulator-min-microvolt = <1200000>; 395 regulator-max-microvolt = <1800000>; 396 regulator-name = "dvdd-csi-r"; 397}; 398 399®_eldo2 { 400 regulator-min-microvolt = <1800000>; 401 regulator-max-microvolt = <1800000>; 402 regulator-name = "vcc-dsi"; 403}; 404 405®_eldo3 { 406 regulator-min-microvolt = <1200000>; 407 regulator-max-microvolt = <1800000>; 408 regulator-name = "dvdd-csi-f"; 409}; 410 411®_fldo1 { 412 regulator-min-microvolt = <1200000>; 413 regulator-max-microvolt = <1200000>; 414 regulator-name = "vcc-hsic"; 415}; 416 417®_fldo2 { 418 regulator-min-microvolt = <700000>; 419 regulator-max-microvolt = <1100000>; 420 regulator-always-on; 421 regulator-name = "vdd-cpus"; 422}; 423 424®_ldo_io0 { 425 regulator-min-microvolt = <3100000>; 426 regulator-max-microvolt = <3100000>; 427 regulator-name = "vcc-ctp"; 428 status = "okay"; 429}; 430 431®_ldo_io1 { 432 regulator-min-microvolt = <3100000>; 433 regulator-max-microvolt = <3100000>; 434 regulator-name = "vcc-vb"; 435 status = "okay"; 436}; 437 438®_sw { 439 regulator-min-microvolt = <3100000>; 440 regulator-max-microvolt = <3100000>; 441 regulator-name = "vcc-lcd"; 442}; 443 444&tcon0 { 445 pinctrl-names = "default"; 446 pinctrl-0 = <&lcd_lvds_pins>; 447}; 448 449&tcon0_out { 450 tcon0_out_lcd: endpoint { 451 remote-endpoint = <&panel_input>; 452 }; 453}; 454 455&uart0 { 456 pinctrl-names = "default"; 457 pinctrl-0 = <&uart0_pb_pins>; 458 status = "okay"; 459}; 460 461/* There's the BT part of the AP6210 connected to that UART */ 462&uart1 { 463 pinctrl-names = "default"; 464 pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; 465 uart-has-rtscts; 466 status = "okay"; 467 468 bluetooth { 469 compatible = "brcm,bcm20702a1"; 470 clocks = <&ac100_rtc 1>; 471 clock-names = "lpo"; 472 vbat-supply = <®_vbat>; 473 vddio-supply = <®_dldo1>; 474 device-wakeup-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ 475 host-wakeup-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */ 476 shutdown-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */ 477 max-speed = <1500000>; 478 }; 479}; 480 481&uart2 { 482 pinctrl-names = "default"; 483 pinctrl-0 = <&uart2_pb_pins>; 484 status = "okay"; 485 486 gnss { 487 compatible = "u-blox,neo-6m"; 488 489 v-bckp-supply = <®_rtc_ldo>; 490 vcc-supply = <®_gps>; 491 current-speed = <9600>; 492 }; 493}; 494 495&usb_otg { 496 status = "okay"; 497}; 498 499&usbphy { 500 usb0_id_det-gpios = <&pio 7 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH11 */ 501 usb0_vbus_power-supply = <&usb_power_supply>; 502 usb0_vbus-supply = <®_drivevbus>; 503 usb1_vbus-supply = <®_vmain>; 504 usb2_vbus-supply = <®_vmain>; 505 status = "okay"; 506}; 507