191f480d4SOndrej Jirman// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
291f480d4SOndrej Jirman// Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz>
391f480d4SOndrej Jirman// Copyright (C) 2020 Martijn Braam <martijn@brixit.nl>
491f480d4SOndrej Jirman// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
591f480d4SOndrej Jirman
691f480d4SOndrej Jirman#include "sun50i-a64.dtsi"
791f480d4SOndrej Jirman#include "sun50i-a64-cpu-opp.dtsi"
891f480d4SOndrej Jirman
991f480d4SOndrej Jirman#include <dt-bindings/gpio/gpio.h>
1091f480d4SOndrej Jirman#include <dt-bindings/input/input.h>
1191f480d4SOndrej Jirman#include <dt-bindings/leds/common.h>
1291f480d4SOndrej Jirman#include <dt-bindings/pwm/pwm.h>
1391f480d4SOndrej Jirman
1491f480d4SOndrej Jirman/ {
1591f480d4SOndrej Jirman	aliases {
1691f480d4SOndrej Jirman		serial0 = &uart0;
1791f480d4SOndrej Jirman	};
1891f480d4SOndrej Jirman
1991f480d4SOndrej Jirman	chosen {
2091f480d4SOndrej Jirman		stdout-path = "serial0:115200n8";
2191f480d4SOndrej Jirman	};
2291f480d4SOndrej Jirman
2391f480d4SOndrej Jirman	leds {
2491f480d4SOndrej Jirman		compatible = "gpio-leds";
2591f480d4SOndrej Jirman
2691f480d4SOndrej Jirman		blue {
2791f480d4SOndrej Jirman			function = LED_FUNCTION_INDICATOR;
2891f480d4SOndrej Jirman			color = <LED_COLOR_ID_BLUE>;
2991f480d4SOndrej Jirman			gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
3091f480d4SOndrej Jirman		};
3191f480d4SOndrej Jirman
3291f480d4SOndrej Jirman		green {
3391f480d4SOndrej Jirman			function = LED_FUNCTION_INDICATOR;
3491f480d4SOndrej Jirman			color = <LED_COLOR_ID_GREEN>;
3591f480d4SOndrej Jirman			gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
3691f480d4SOndrej Jirman		};
3791f480d4SOndrej Jirman
3891f480d4SOndrej Jirman		red {
3991f480d4SOndrej Jirman			function = LED_FUNCTION_INDICATOR;
4091f480d4SOndrej Jirman			color = <LED_COLOR_ID_RED>;
4191f480d4SOndrej Jirman			gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
4291f480d4SOndrej Jirman		};
4391f480d4SOndrej Jirman	};
4491f480d4SOndrej Jirman
4591f480d4SOndrej Jirman	speaker_amp: audio-amplifier {
4691f480d4SOndrej Jirman		compatible = "simple-audio-amplifier";
4791f480d4SOndrej Jirman		enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
4891f480d4SOndrej Jirman		sound-name-prefix = "Speaker Amp";
4991f480d4SOndrej Jirman	};
5091f480d4SOndrej Jirman
5191f480d4SOndrej Jirman	vibrator {
5291f480d4SOndrej Jirman		compatible = "gpio-vibrator";
5391f480d4SOndrej Jirman		enable-gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */
5491f480d4SOndrej Jirman		vcc-supply = <&reg_dcdc1>;
5591f480d4SOndrej Jirman	};
5691f480d4SOndrej Jirman};
5791f480d4SOndrej Jirman
5891f480d4SOndrej Jirman&codec {
5991f480d4SOndrej Jirman	status = "okay";
6091f480d4SOndrej Jirman};
6191f480d4SOndrej Jirman
6291f480d4SOndrej Jirman&codec_analog {
6391f480d4SOndrej Jirman	cpvdd-supply = <&reg_eldo1>;
6491f480d4SOndrej Jirman	status = "okay";
6591f480d4SOndrej Jirman};
6691f480d4SOndrej Jirman
6791f480d4SOndrej Jirman&cpu0 {
6891f480d4SOndrej Jirman	cpu-supply = <&reg_dcdc2>;
6991f480d4SOndrej Jirman};
7091f480d4SOndrej Jirman
7191f480d4SOndrej Jirman&cpu1 {
7291f480d4SOndrej Jirman	cpu-supply = <&reg_dcdc2>;
7391f480d4SOndrej Jirman};
7491f480d4SOndrej Jirman
7591f480d4SOndrej Jirman&cpu2 {
7691f480d4SOndrej Jirman	cpu-supply = <&reg_dcdc2>;
7791f480d4SOndrej Jirman};
7891f480d4SOndrej Jirman
7991f480d4SOndrej Jirman&cpu3 {
8091f480d4SOndrej Jirman	cpu-supply = <&reg_dcdc2>;
8191f480d4SOndrej Jirman};
8291f480d4SOndrej Jirman
8391f480d4SOndrej Jirman&dai {
8491f480d4SOndrej Jirman	status = "okay";
8591f480d4SOndrej Jirman};
8691f480d4SOndrej Jirman
8791f480d4SOndrej Jirman&ehci0 {
8891f480d4SOndrej Jirman	status = "okay";
8991f480d4SOndrej Jirman};
9091f480d4SOndrej Jirman
9191f480d4SOndrej Jirman&ehci1 {
9291f480d4SOndrej Jirman	status = "okay";
9391f480d4SOndrej Jirman};
9491f480d4SOndrej Jirman
9591f480d4SOndrej Jirman&i2c1 {
9691f480d4SOndrej Jirman	status = "okay";
9791f480d4SOndrej Jirman
9891f480d4SOndrej Jirman	/* Magnetometer */
9991f480d4SOndrej Jirman	lis3mdl@1e {
10091f480d4SOndrej Jirman		compatible = "st,lis3mdl-magn";
10191f480d4SOndrej Jirman		reg = <0x1e>;
10291f480d4SOndrej Jirman		vdd-supply = <&reg_dldo1>;
10391f480d4SOndrej Jirman		vddio-supply = <&reg_dldo1>;
10491f480d4SOndrej Jirman	};
10591f480d4SOndrej Jirman
10691f480d4SOndrej Jirman	/* Accelerometer/gyroscope */
10791f480d4SOndrej Jirman	mpu6050@68 {
10891f480d4SOndrej Jirman		compatible = "invensense,mpu6050";
10991f480d4SOndrej Jirman		reg = <0x68>;
11091f480d4SOndrej Jirman		interrupt-parent = <&pio>;
11191f480d4SOndrej Jirman		interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */
11291f480d4SOndrej Jirman		vdd-supply = <&reg_dldo1>;
11391f480d4SOndrej Jirman		vddio-supply = <&reg_dldo1>;
11491f480d4SOndrej Jirman	};
11591f480d4SOndrej Jirman};
11691f480d4SOndrej Jirman
11791f480d4SOndrej Jirman/* Connected to pogo pins (external spring based pinheader for user addons) */
11891f480d4SOndrej Jirman&i2c2 {
11991f480d4SOndrej Jirman	status = "okay";
12091f480d4SOndrej Jirman};
12191f480d4SOndrej Jirman
12291f480d4SOndrej Jirman&lradc {
12391f480d4SOndrej Jirman	vref-supply = <&reg_aldo3>;
12491f480d4SOndrej Jirman	status = "okay";
12591f480d4SOndrej Jirman
12691f480d4SOndrej Jirman	button-200 {
12791f480d4SOndrej Jirman		label = "Volume Up";
12891f480d4SOndrej Jirman		linux,code = <KEY_VOLUMEUP>;
12991f480d4SOndrej Jirman		channel = <0>;
13091f480d4SOndrej Jirman		voltage = <200000>;
13191f480d4SOndrej Jirman	};
13291f480d4SOndrej Jirman
13391f480d4SOndrej Jirman	button-400 {
13491f480d4SOndrej Jirman		label = "Volume Down";
13591f480d4SOndrej Jirman		linux,code = <KEY_VOLUMEDOWN>;
13691f480d4SOndrej Jirman		channel = <0>;
13791f480d4SOndrej Jirman		voltage = <400000>;
13891f480d4SOndrej Jirman	};
13991f480d4SOndrej Jirman};
14091f480d4SOndrej Jirman
14191f480d4SOndrej Jirman&mmc0 {
14291f480d4SOndrej Jirman	pinctrl-names = "default";
14391f480d4SOndrej Jirman	pinctrl-0 = <&mmc0_pins>;
14491f480d4SOndrej Jirman	vmmc-supply = <&reg_dcdc1>;
14591f480d4SOndrej Jirman	vqmmc-supply = <&reg_dcdc1>;
14691f480d4SOndrej Jirman	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
14791f480d4SOndrej Jirman	disable-wp;
14891f480d4SOndrej Jirman	bus-width = <4>;
14991f480d4SOndrej Jirman	status = "okay";
15091f480d4SOndrej Jirman};
15191f480d4SOndrej Jirman
15291f480d4SOndrej Jirman&mmc2 {
15391f480d4SOndrej Jirman	pinctrl-names = "default";
15491f480d4SOndrej Jirman	pinctrl-0 = <&mmc2_pins>;
15591f480d4SOndrej Jirman	vmmc-supply = <&reg_dcdc1>;
15691f480d4SOndrej Jirman	vqmmc-supply = <&reg_dcdc1>;
15791f480d4SOndrej Jirman	bus-width = <8>;
15891f480d4SOndrej Jirman	non-removable;
15991f480d4SOndrej Jirman	cap-mmc-hw-reset;
16091f480d4SOndrej Jirman	status = "okay";
16191f480d4SOndrej Jirman};
16291f480d4SOndrej Jirman
16391f480d4SOndrej Jirman&ohci0 {
16491f480d4SOndrej Jirman	status = "okay";
16591f480d4SOndrej Jirman};
16691f480d4SOndrej Jirman
16791f480d4SOndrej Jirman&ohci1 {
16891f480d4SOndrej Jirman	status = "okay";
16991f480d4SOndrej Jirman};
17091f480d4SOndrej Jirman
17191f480d4SOndrej Jirman&pio {
17291f480d4SOndrej Jirman	vcc-pb-supply = <&reg_dcdc1>;
17391f480d4SOndrej Jirman	vcc-pc-supply = <&reg_dcdc1>;
17491f480d4SOndrej Jirman	vcc-pd-supply = <&reg_dcdc1>;
17591f480d4SOndrej Jirman	vcc-pe-supply = <&reg_aldo1>;
17691f480d4SOndrej Jirman	vcc-pf-supply = <&reg_dcdc1>;
17791f480d4SOndrej Jirman	vcc-pg-supply = <&reg_dldo4>;
17891f480d4SOndrej Jirman	vcc-ph-supply = <&reg_dcdc1>;
17991f480d4SOndrej Jirman};
18091f480d4SOndrej Jirman
18191f480d4SOndrej Jirman&r_pio {
18291f480d4SOndrej Jirman	/*
18391f480d4SOndrej Jirman	 * FIXME: We can't add that supply for now since it would
18491f480d4SOndrej Jirman	 * create a circular dependency between pinctrl, the regulator
18591f480d4SOndrej Jirman	 * and the RSB Bus.
18691f480d4SOndrej Jirman	 *
18791f480d4SOndrej Jirman	 * vcc-pl-supply = <&reg_aldo2>;
18891f480d4SOndrej Jirman	 */
18991f480d4SOndrej Jirman};
19091f480d4SOndrej Jirman
19191f480d4SOndrej Jirman&r_rsb {
19291f480d4SOndrej Jirman	status = "okay";
19391f480d4SOndrej Jirman
19491f480d4SOndrej Jirman	axp803: pmic@3a3 {
19591f480d4SOndrej Jirman		compatible = "x-powers,axp803";
19691f480d4SOndrej Jirman		reg = <0x3a3>;
19791f480d4SOndrej Jirman		interrupt-parent = <&r_intc>;
19891f480d4SOndrej Jirman		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
19991f480d4SOndrej Jirman	};
20091f480d4SOndrej Jirman};
20191f480d4SOndrej Jirman
20291f480d4SOndrej Jirman#include "axp803.dtsi"
20391f480d4SOndrej Jirman
20491f480d4SOndrej Jirman&ac_power_supply {
20591f480d4SOndrej Jirman	status = "okay";
20691f480d4SOndrej Jirman};
20791f480d4SOndrej Jirman
20891f480d4SOndrej Jirman&battery_power_supply {
20991f480d4SOndrej Jirman	status = "okay";
21091f480d4SOndrej Jirman};
21191f480d4SOndrej Jirman
21291f480d4SOndrej Jirman&reg_aldo1 {
21391f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
21491f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
21591f480d4SOndrej Jirman	regulator-name = "dovdd-csi";
21691f480d4SOndrej Jirman};
21791f480d4SOndrej Jirman
21891f480d4SOndrej Jirman&reg_aldo2 {
21991f480d4SOndrej Jirman	regulator-always-on;
22091f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
22191f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
22291f480d4SOndrej Jirman	regulator-name = "vcc-pl";
22391f480d4SOndrej Jirman};
22491f480d4SOndrej Jirman
22591f480d4SOndrej Jirman&reg_aldo3 {
22691f480d4SOndrej Jirman	regulator-always-on;
22791f480d4SOndrej Jirman	regulator-min-microvolt = <2700000>;
22891f480d4SOndrej Jirman	regulator-max-microvolt = <3300000>;
22991f480d4SOndrej Jirman	regulator-name = "vcc-pll-avcc";
23091f480d4SOndrej Jirman};
23191f480d4SOndrej Jirman
23291f480d4SOndrej Jirman&reg_dcdc1 {
23391f480d4SOndrej Jirman	regulator-always-on;
23491f480d4SOndrej Jirman	regulator-min-microvolt = <3300000>;
23591f480d4SOndrej Jirman	regulator-max-microvolt = <3300000>;
23691f480d4SOndrej Jirman	regulator-name = "vcc-3v3";
23791f480d4SOndrej Jirman};
23891f480d4SOndrej Jirman
23991f480d4SOndrej Jirman&reg_dcdc2 {
24091f480d4SOndrej Jirman	regulator-always-on;
24191f480d4SOndrej Jirman	regulator-min-microvolt = <1000000>;
24291f480d4SOndrej Jirman	regulator-max-microvolt = <1300000>;
24391f480d4SOndrej Jirman	regulator-name = "vdd-cpux";
24491f480d4SOndrej Jirman};
24591f480d4SOndrej Jirman
24691f480d4SOndrej Jirman/* DCDC3 is polyphased with DCDC2 */
24791f480d4SOndrej Jirman
24891f480d4SOndrej Jirman&reg_dcdc5 {
24991f480d4SOndrej Jirman	regulator-always-on;
25091f480d4SOndrej Jirman	regulator-min-microvolt = <1200000>;
25191f480d4SOndrej Jirman	regulator-max-microvolt = <1200000>;
25291f480d4SOndrej Jirman	regulator-name = "vcc-dram";
25391f480d4SOndrej Jirman};
25491f480d4SOndrej Jirman
25591f480d4SOndrej Jirman&reg_dcdc6 {
25691f480d4SOndrej Jirman	regulator-always-on;
25791f480d4SOndrej Jirman	regulator-min-microvolt = <1100000>;
25891f480d4SOndrej Jirman	regulator-max-microvolt = <1100000>;
25991f480d4SOndrej Jirman	regulator-name = "vdd-sys";
26091f480d4SOndrej Jirman};
26191f480d4SOndrej Jirman
26291f480d4SOndrej Jirman&reg_dldo1 {
26391f480d4SOndrej Jirman	regulator-min-microvolt = <3300000>;
26491f480d4SOndrej Jirman	regulator-max-microvolt = <3300000>;
26591f480d4SOndrej Jirman	regulator-name = "vcc-dsi-sensor";
26691f480d4SOndrej Jirman};
26791f480d4SOndrej Jirman
26891f480d4SOndrej Jirman&reg_dldo2 {
26991f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
27091f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
27191f480d4SOndrej Jirman	regulator-name = "vcc-mipi-io";
27291f480d4SOndrej Jirman};
27391f480d4SOndrej Jirman
27491f480d4SOndrej Jirman&reg_dldo3 {
27591f480d4SOndrej Jirman	regulator-min-microvolt = <2800000>;
27691f480d4SOndrej Jirman	regulator-max-microvolt = <2800000>;
27791f480d4SOndrej Jirman	regulator-name = "avdd-csi";
27891f480d4SOndrej Jirman};
27991f480d4SOndrej Jirman
28091f480d4SOndrej Jirman&reg_dldo4 {
28191f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
28291f480d4SOndrej Jirman	regulator-max-microvolt = <3300000>;
28391f480d4SOndrej Jirman	regulator-name = "vcc-wifi-io";
28491f480d4SOndrej Jirman};
28591f480d4SOndrej Jirman
28691f480d4SOndrej Jirman&reg_eldo1 {
28791f480d4SOndrej Jirman	regulator-always-on;
28891f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
28991f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
29091f480d4SOndrej Jirman	regulator-name = "vcc-lpddr";
29191f480d4SOndrej Jirman};
29291f480d4SOndrej Jirman
29391f480d4SOndrej Jirman&reg_eldo3 {
29491f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
29591f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
29691f480d4SOndrej Jirman	regulator-name = "dvdd-1v8-csi";
29791f480d4SOndrej Jirman};
29891f480d4SOndrej Jirman
29991f480d4SOndrej Jirman&reg_fldo1 {
30091f480d4SOndrej Jirman	regulator-min-microvolt = <1200000>;
30191f480d4SOndrej Jirman	regulator-max-microvolt = <1200000>;
30291f480d4SOndrej Jirman	regulator-name = "vcc-1v2-hsic";
30391f480d4SOndrej Jirman};
30491f480d4SOndrej Jirman
30591f480d4SOndrej Jirman&reg_fldo2 {
30691f480d4SOndrej Jirman	regulator-always-on;
30791f480d4SOndrej Jirman	regulator-min-microvolt = <1100000>;
30891f480d4SOndrej Jirman	regulator-max-microvolt = <1100000>;
30991f480d4SOndrej Jirman	regulator-name = "vdd-cpus";
31091f480d4SOndrej Jirman};
31191f480d4SOndrej Jirman
31291f480d4SOndrej Jirman&reg_ldo_io0 {
31391f480d4SOndrej Jirman	regulator-min-microvolt = <3300000>;
31491f480d4SOndrej Jirman	regulator-max-microvolt = <3300000>;
31591f480d4SOndrej Jirman	regulator-name = "vcc-lcd-ctp-stk";
31691f480d4SOndrej Jirman	status = "okay";
31791f480d4SOndrej Jirman};
31891f480d4SOndrej Jirman
31991f480d4SOndrej Jirman&reg_ldo_io1 {
32091f480d4SOndrej Jirman	regulator-min-microvolt = <1800000>;
32191f480d4SOndrej Jirman	regulator-max-microvolt = <1800000>;
32291f480d4SOndrej Jirman	regulator-name = "vcc-1v8-typec";
32391f480d4SOndrej Jirman	status = "okay";
32491f480d4SOndrej Jirman};
32591f480d4SOndrej Jirman
32691f480d4SOndrej Jirman&reg_rtc_ldo {
32791f480d4SOndrej Jirman	regulator-name = "vcc-rtc";
32891f480d4SOndrej Jirman};
32991f480d4SOndrej Jirman
33091f480d4SOndrej Jirman&sound {
33191f480d4SOndrej Jirman	status = "okay";
33291f480d4SOndrej Jirman	simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
33391f480d4SOndrej Jirman	simple-audio-card,widgets = "Microphone", "Headset Microphone",
33491f480d4SOndrej Jirman				    "Microphone", "Internal Microphone",
33591f480d4SOndrej Jirman				    "Headphone", "Headphone Jack",
33691f480d4SOndrej Jirman				    "Speaker", "Internal Earpiece",
33791f480d4SOndrej Jirman				    "Speaker", "Internal Speaker";
33891f480d4SOndrej Jirman	simple-audio-card,routing =
33991f480d4SOndrej Jirman			"Headphone Jack", "HP",
34091f480d4SOndrej Jirman			"Internal Earpiece", "EARPIECE",
34191f480d4SOndrej Jirman			"Internal Speaker", "Speaker Amp OUTL",
34291f480d4SOndrej Jirman			"Internal Speaker", "Speaker Amp OUTR",
34391f480d4SOndrej Jirman			"Speaker Amp INL", "LINEOUT",
34491f480d4SOndrej Jirman			"Speaker Amp INR", "LINEOUT",
34591f480d4SOndrej Jirman			"Left DAC", "AIF1 Slot 0 Left",
34691f480d4SOndrej Jirman			"Right DAC", "AIF1 Slot 0 Right",
34791f480d4SOndrej Jirman			"AIF1 Slot 0 Left ADC", "Left ADC",
34891f480d4SOndrej Jirman			"AIF1 Slot 0 Right ADC", "Right ADC",
34991f480d4SOndrej Jirman			"Internal Microphone", "MBIAS",
35091f480d4SOndrej Jirman			"MIC1", "Internal Microphone",
35191f480d4SOndrej Jirman			"Headset Microphone", "HBIAS",
35291f480d4SOndrej Jirman			"MIC2", "Headset Microphone";
35391f480d4SOndrej Jirman};
35491f480d4SOndrej Jirman
35591f480d4SOndrej Jirman&uart0 {
35691f480d4SOndrej Jirman	pinctrl-names = "default";
35791f480d4SOndrej Jirman	pinctrl-0 = <&uart0_pb_pins>;
35891f480d4SOndrej Jirman	status = "okay";
35991f480d4SOndrej Jirman};
36091f480d4SOndrej Jirman
36191f480d4SOndrej Jirman/* Connected to the modem (hardware flow control can't be used) */
36291f480d4SOndrej Jirman&uart3 {
36391f480d4SOndrej Jirman	pinctrl-names = "default";
36491f480d4SOndrej Jirman	pinctrl-0 = <&uart3_pins>;
36591f480d4SOndrej Jirman	status = "okay";
36691f480d4SOndrej Jirman};
36791f480d4SOndrej Jirman
36891f480d4SOndrej Jirman&usb_otg {
36991f480d4SOndrej Jirman	dr_mode = "peripheral";
37091f480d4SOndrej Jirman	status = "okay";
37191f480d4SOndrej Jirman};
37291f480d4SOndrej Jirman
37391f480d4SOndrej Jirman&usb_power_supply {
37491f480d4SOndrej Jirman	status = "okay";
37591f480d4SOndrej Jirman};
37691f480d4SOndrej Jirman
37791f480d4SOndrej Jirman&usbphy {
37891f480d4SOndrej Jirman	status = "okay";
37991f480d4SOndrej Jirman};
380