// SPDX-License-Identifier: (GPL-2.0+ OR MIT) // Copyright (C) 2018 Amarula Solutions B.V. // Author: Jagan Teki <jagan@amarulasolutions.com> /dts-v1/; #include "sun50i-a64.dtsi" #include "sun50i-a64-cpu-opp.dtsi" #include <dt-bindings/gpio/gpio.h> / { model = "Amarula A64-Relic"; compatible = "amarula,a64-relic", "allwinner,sun50i-a64"; aliases { serial0 = &uart0; }; chosen { stdout-path = "serial0:115200n8"; }; i2c { compatible = "i2c-gpio"; sda-gpios = <&pio 4 13 GPIO_ACTIVE_HIGH>; scl-gpios = <&pio 4 12 GPIO_ACTIVE_HIGH>; i2c-gpio,delay-us = <5>; #address-cells = <1>; #size-cells = <0>; ov5640: camera@3c { compatible = "ovti,ov5640"; reg = <0x3c>; pinctrl-names = "default"; pinctrl-0 = <&csi_mclk_pin>; clocks = <&ccu CLK_CSI_MCLK>; clock-names = "xclk"; AVDD-supply = <®_aldo1>; DOVDD-supply = <®_dldo3>; DVDD-supply = <®_eldo3>; reset-gpios = <&pio 4 14 GPIO_ACTIVE_LOW>; /* CSI-RST-R: PE14 */ powerdown-gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* CSI-STBY-R: PE15 */ port { ov5640_ep: endpoint { remote-endpoint = <&csi_ep>; bus-width = <8>; hsync-active = <1>; /* Active high */ vsync-active = <0>; /* Active low */ data-active = <1>; /* Active high */ pclk-sample = <1>; /* Rising */ }; }; }; }; wifi_pwrseq: wifi-pwrseq { compatible = "mmc-pwrseq-simple"; clocks = <&rtc CLK_OSC32K_FANOUT>; clock-names = "ext_clock"; reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* WL-PMU-EN: PL2 */ }; }; &cpu0 { cpu-supply = <®_dcdc2>; }; &cpu1 { cpu-supply = <®_dcdc2>; }; &cpu2 { cpu-supply = <®_dcdc2>; }; &cpu3 { cpu-supply = <®_dcdc2>; }; &csi { status = "okay"; port { csi_ep: endpoint { remote-endpoint = <&ov5640_ep>; bus-width = <8>; hsync-active = <1>; /* Active high */ vsync-active = <0>; /* Active low */ data-active = <1>; /* Active high */ pclk-sample = <1>; /* Rising */ }; }; }; &ehci0 { status = "okay"; }; &i2c0 { status = "okay"; sensor@48 { compatible = "st,stlm75"; reg = <0x48>; }; }; &i2c0_pins { bias-pull-up; }; &i2c1 { status = "okay"; touchscreen@5d { compatible = "goodix,gt5663"; reg = <0x5d>; AVDD28-supply = <®_ldo_io0>; /* VCC-CTP: GPIO0-LDO */ interrupt-parent = <&pio>; interrupts = <7 4 IRQ_TYPE_EDGE_FALLING>; irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* CTP-INT: PH4 */ reset-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* CTP-RST: PH8 */ touchscreen-inverted-x; touchscreen-inverted-y; }; }; &mmc1 { pinctrl-names = "default"; pinctrl-0 = <&mmc1_pins>; vmmc-supply = <®_dcdc1>; /* * Schematic shows both dldo4 and eldo1 connected for vcc-io-wifi, but * dldo4 connection shows DNP(Do Not Populate) and eldo1 connected with * 0Ohm register to vcc-io-wifi so eldo1 is used. */ vqmmc-supply = <®_eldo1>; mmc-pwrseq = <&wifi_pwrseq>; bus-width = <4>; non-removable; status = "okay"; brcmf: wifi@1 { reg = <1>; compatible = "brcm,bcm4329-fmac"; interrupt-parent = <&r_pio>; interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* WL-WAKE-AP: PL3 */ interrupt-names = "host-wake"; }; }; &mmc2 { pinctrl-names = "default"; pinctrl-0 = <&mmc2_pins>; vmmc-supply = <®_dcdc1>; bus-width = <8>; non-removable; cap-mmc-hw-reset; status = "okay"; }; &ohci0 { status = "okay"; }; &r_rsb { status = "okay"; axp803: pmic@3a3 { compatible = "x-powers,axp803"; reg = <0x3a3>; interrupt-parent = <&r_intc>; interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>; x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */ }; }; #include "axp803.dtsi" ®_aldo1 { regulator-always-on; regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; regulator-name = "avdd-csi"; }; ®_aldo2 { regulator-always-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-pl"; }; ®_aldo3 { regulator-always-on; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; regulator-name = "vcc-pll-avcc"; }; ®_dcdc1 { regulator-always-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-3v3"; }; ®_dcdc2 { regulator-always-on; regulator-min-microvolt = <1040000>; regulator-max-microvolt = <1300000>; regulator-name = "vdd-cpux"; }; /* DCDC3 is polyphased with DCDC2 */ ®_dcdc5 { regulator-always-on; regulator-min-microvolt = <1500000>; regulator-max-microvolt = <1500000>; regulator-name = "vcc-dram"; }; ®_dcdc6 { regulator-always-on; regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1100000>; regulator-name = "vdd-sys"; }; ®_dldo1 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-hdmi-dsi-sensor"; }; ®_dldo2 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-mipi"; }; ®_dldo3 { regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; regulator-name = "dovdd-csi"; }; ®_dldo4 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc-wifi-io"; }; ®_drivevbus { regulator-name = "usb0-vbus"; status = "okay"; }; ®_eldo1 { regulator-always-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "cpvdd"; }; ®_eldo3 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "dvdd-csi"; }; ®_fldo1 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-name = "vcc-1v2-hsic"; }; /* * The A64 chip cannot work without this regulator off, although * it seems to be only driving the AR100 core. * Maybe we don't still know well about CPUs domain. */ ®_fldo2 { regulator-always-on; regulator-min-microvolt = <1100000>; regulator-max-microvolt = <1100000>; regulator-name = "vdd-cpus"; }; ®_ldo_io0 { regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; regulator-name = "vcc-ctp"; status = "okay"; }; ®_rtc_ldo { regulator-name = "vcc-rtc"; }; &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pb_pins>; status = "okay"; }; &usb_otg { dr_mode = "otg"; status = "okay"; }; &usbphy { usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ usb0_vbus-supply = <®_drivevbus>; status = "okay"; };