blob: ffecd00fc0a69074fa39bc2bbeffb6eab06639cd [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0 OR MIT
/*
* Copyright 2019 Ondrej Jirman <megous@megous.com>
*/
/dts-v1/;
#include "sun5i-a13.dtsi"
#include "sunxi-common-regulators.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pwm/pwm.h>
/ {
model = "PocketBook Touch Lux 3";
compatible = "pocketbook,touch-lux-3", "allwinner,sun5i-a13";
aliases {
serial0 = &uart1;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c2 = &i2c2;
};
backlight {
compatible = "pwm-backlight";
pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>;
enable-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
default-brightness-level = <8>;
};
chosen {
stdout-path = "serial0:115200n8";
};
leds {
compatible = "gpio-leds";
power {
gpios = <&pio 4 8 GPIO_ACTIVE_LOW>; /* PE8 */
default-state = "on";
};
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
label = "GPIO Keys";
key-right {
label = "Right";
linux,code = <KEY_RIGHT>;
gpios = <&pio 6 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PG9 */
};
key-left {
label = "Left";
linux,code = <KEY_LEFT>;
gpios = <&pio 6 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PG10 */
};
};
regulator-eink {
compatible = "custom,reg-userspace-consumer";
controlled-supply = <&tp65185x>;
};
reg_1v8: regulator-1v8 {
compatible = "regulator-fixed";
regulator-name = "vdd-1v8-nor-ctp";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
gpio = <&pio 2 15 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
reg_1v8_nor: regulator-nor {
compatible = "regulator-fixed";
regulator-name = "vdd-nor";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
gpio = <&pio 2 14 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&reg_1v8>;
};
reg_1v8_ctp: regulator-ctp {
compatible = "regulator-fixed";
regulator-name = "vdd-ctp";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
gpio = <&pio 2 13 GPIO_ACTIVE_HIGH>;
enable-active-high;
vin-supply = <&reg_1v8>;
};
reg_3v3_mmc0: regulator-mmc0 {
compatible = "regulator-fixed";
regulator-name = "vdd-mmc0";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&pio 4 4 GPIO_ACTIVE_LOW>; /* PE4 */
vin-supply = <&reg_vcc3v3>;
};
};
&cpu0 {
cpu-supply = <&reg_dcdc2>;
};
&ehci0 {
status = "okay";
};
&i2c0 {
status = "okay";
//XXX: bsp has pullup on PB0/PB1 pins enabled, but it works without it
axp209: pmic@34 {
reg = <0x34>;
interrupts = <0>;
};
};
#include "axp209.dtsi"
&i2c1 {
status = "okay";
pcf8563: rtc@51 {
compatible = "nxp,pcf8563";
reg = <0x51>;
#clock-cells = <0>;
};
// hacky PMIC driver for eInk display
tp65185x: regulator@68 {
compatible = "tp,tp65185x";
reg = <0x68>;
regulator-min-microvolt = <3120000>;
regulator-max-microvolt = <3120000>;
regulator-name = "eink-vcom";
//XXX: we don't use interrupts in the driver right now
//interrupt-parent = <&pio>;
//interrupts = <1 10 IRQ_TYPE_LEVEL_LOW>; /* PB10 */
wakeup-gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
powerup-gpios = <&pio 4 7 GPIO_ACTIVE_HIGH>; /* PE7 */
vcom-gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
//XXX: not a pullup on BSP (might have an external resistor)
powergood-gpios = <&pio 4 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PE6 */
};
};
&i2c2 {
status = "okay";
touchpanel@24 {
compatible = "cypress,cyttsp4_i2c_adapter";
reg = <0x24>;
interrupt-parent = <&pio>;
interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>; /* PG11 */
vdd-supply = <&reg_1v8_ctp>;
power-gpios = <&pio 4 5 GPIO_ACTIVE_LOW>; /* PE5 */
reset-gpios = <&pio 1 3 GPIO_ACTIVE_LOW>; /* PB3 */
};
};
&lradc {
vref-supply = <&reg_ldo2>;
status = "okay";
button-200 {
label = "Home";
linux,code = <KEY_HOME>;
channel = <0>;
voltage = <200000>;
};
button-400 {
label = "Menu";
linux,code = <KEY_MENU>;
channel = <0>;
voltage = <400000>;
};
};
&mmc0 {
vmmc-supply = <&reg_3v3_mmc0>;
bus-width = <4>;
cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
status = "okay";
};
&mmc2 {
pinctrl-names = "default";
pinctrl-0 = <&mmc2_4bit_pc_pins>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
non-removable;
status = "okay";
};
&ohci0 {
status = "okay";
};
&otg_sram {
status = "okay";
};
&pio {
eink_pins_active: eink-pins-lcd {
pins = "PD3", "PD4", "PD5", "PD6", "PD7", "PD10", "PD11", "PD12",
"PD13", "PD15", "PD20", "PD21", "PD22", "PD23", "PD24";
function = "lcd0";
};
eink_pins_idle: eink-pins-gpio {
pins = "PD3", "PD4", "PD5", "PD6", "PD7", "PD10", "PD11", "PD12",
"PD13", "PD15", "PD20", "PD21", "PD22", "PD23", "PD24";
function = "gpio_out";
};
};
&pwm {
pinctrl-names = "default";
pinctrl-0 = <&pwm0_pin>;
status = "okay";
};
&reg_dcdc2 {
regulator-always-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1400000>;
regulator-name = "vdd-cpu";
};
&reg_dcdc3 {
regulator-always-on;
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-name = "vdd-int-pll";
};
&reg_ldo1 {
regulator-name = "vdd-rtc";
};
&reg_ldo2 {
regulator-always-on;
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-name = "avcc";
};
&reg_ldo3 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-wifi";
/* We need this otherwise the LDO3 would overload */
regulator-soft-start;
regulator-ramp-delay = <1600>;
};
&soc {
display-controller@1c0c000 {
pinctrl-names = "idle", "active";
pinctrl-0 = <&eink_pins_idle>;
pinctrl-1 = <&eink_pins_active>;
all-gpios = <&pio 3 3 GPIO_ACTIVE_HIGH>,
<&pio 3 4 GPIO_ACTIVE_HIGH>,
<&pio 3 5 GPIO_ACTIVE_HIGH>,
<&pio 3 6 GPIO_ACTIVE_HIGH>,
<&pio 3 7 GPIO_ACTIVE_HIGH>,
<&pio 3 10 GPIO_ACTIVE_HIGH>,
<&pio 3 11 GPIO_ACTIVE_HIGH>,
<&pio 3 12 GPIO_ACTIVE_HIGH>,
<&pio 3 13 GPIO_ACTIVE_HIGH>,
<&pio 3 15 GPIO_ACTIVE_HIGH>,
<&pio 3 20 GPIO_ACTIVE_HIGH>,
<&pio 3 21 GPIO_ACTIVE_HIGH>,
<&pio 3 22 GPIO_ACTIVE_HIGH>,
<&pio 3 23 GPIO_ACTIVE_HIGH>,
<&pio 3 24 GPIO_ACTIVE_HIGH>;
compatible = "custom,pocketbook-touch-lux-3-tcon0-ed060xd4-display";
reg = <0x01c0c000 0x1000>, // TCON0 regs
<0x01e60000 0x10000>; // DEBE regs
interrupts = <44>; // TCON interrupt
resets = <&ccu RST_LCD>, <&ccu RST_DE_BE>;
reset-names = "tcon", "be";
clocks = <&ccu CLK_AHB_LCD>, <&ccu CLK_TCON_CH0>,
<&ccu CLK_AHB_DE_BE>, <&ccu CLK_DE_BE>,
<&ccu CLK_DRAM_DE_BE>;
clock-names = "tcon_bus", "tcon_mod",
"be_bus", "be_mod",
"be_ram";
assigned-clocks = <&ccu CLK_DE_BE>;
assigned-clock-rates = <300000000>;
interconnects = <&mbus 18>;
interconnect-names = "dma-mem";
panel-supply = <&tp65185x>;
control-device-name = "eink-panel";
};
};
&spi2 {
pinctrl-names = "default";
pinctrl-0 = <&spi2_pe_pins>, <&spi2_cs0_pe_pin>;
status = "okay";
epd_flash: flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "macronix,mx25u4033", "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <4000000>;
vdd-supply = <&reg_1v8_nor>;
};
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pg_pins>;
status = "okay";
};
&usb_otg {
dr_mode = "peripheral";
status = "okay";
};
&battery_power_supply {
status = "okay";
};
&usb_power_supply {
status = "okay";
};
&usbphy {
//XXX: might not work, need to test
usb0_vbus_det-gpios = <&pio 6 1 GPIO_ACTIVE_HIGH>; /* PG1 */
usb1_vbus-supply = <&reg_ldo3>;
status = "okay";
};