// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd.
 * Copyright (c) 2018 Akash Gajjar <Akash_Gajjar@mentor.com>
 * Copyright (c) 2020 Tobias Schramm <t.schramm@manjaro.org>
 */

/dts-v1/;
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/linux-event-codes.h>
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/usb/pd.h>
#include <dt-bindings/leds/common.h>
#include "rk3399.dtsi"
#include "rk3399-opp.dtsi"

/ {
	model = "Pine64 Pinebook Pro";
	compatible = "pine64,pinebook-pro", "rockchip,rk3399";
	chassis-type = "laptop";

	aliases {
		mmc0 = &sdio0;
		mmc1 = &sdmmc;
		mmc2 = &sdhci;
	};

	chosen {
		stdout-path = "serial2:1500000n8";
	};

	backlight: edp-backlight {
		compatible = "pwm-backlight";
		power-supply = <&vcc_12v>;
		pwms = <&pwm0 0 740740 0>;
	};

	bat: battery {
		compatible = "simple-battery";
		charge-full-design-microamp-hours = <9800000>;
		voltage-max-design-microvolt = <4350000>;
		voltage-min-design-microvolt = <3000000>;
	};

	edp_panel: edp-panel {
		compatible = "boe,nv140fhmn49";
		backlight = <&backlight>;
		enable-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&panel_en_pin>;
		power-supply = <&vcc3v3_panel>;

		port {
			panel_in_edp: endpoint {
				remote-endpoint = <&edp_out_panel>;
			};
		};
	};

	/*
	 * Use separate nodes for gpio-keys to allow for selective deactivation
	 * of wakeup sources via sysfs without disabling the whole key
	 */
	gpio-key-lid {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&lidbtn_pin>;

		switch-lid {
			debounce-interval = <20>;
			gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
			label = "Lid";
			linux,code = <SW_LID>;
			linux,input-type = <EV_SW>;
			wakeup-event-action = <EV_ACT_DEASSERTED>;
			wakeup-source;
		};
	};

	gpio-key-power {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pwrbtn_pin>;

		key-power {
			debounce-interval = <20>;
			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
			label = "Power";
			linux,code = <KEY_POWER>;
			wakeup-source;
		};
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pwr_led_pin &slp_led_pin>;

		green_led: led-0 {
			color = <LED_COLOR_ID_GREEN>;
			default-state = "on";
			function = LED_FUNCTION_POWER;
			gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
			label = "green:power";
		};

		red_led: led-1 {
			color = <LED_COLOR_ID_RED>;
			default-state = "off";
			function = LED_FUNCTION_STANDBY;
			gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
			label = "red:standby";
			panic-indicator;
			retain-state-suspended;
		};
	};

	/* Power sequence for SDIO WiFi module */
	sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		clocks = <&rk808 1>;
		clock-names = "ext_clock";
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_enable_h_pin>;
		post-power-on-delay-ms = <100>;
		power-off-delay-us = <500000>;

		/* WL_REG_ON on module */
		reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
	};

	/* Audio components */
	es8316-sound {
		compatible = "simple-audio-card";
		pinctrl-names = "default";
		pinctrl-0 = <&hp_det_pin>;
		simple-audio-card,name = "rockchip,es8316-codec";
		simple-audio-card,format = "i2s";
		simple-audio-card,mclk-fs = <256>;

		simple-audio-card,widgets =
			"Microphone", "Mic Jack",
			"Headphone", "Headphones",
			"Speaker", "Speaker";
		simple-audio-card,routing =
			"MIC1", "Mic Jack",
			"Headphones", "HPOL",
			"Headphones", "HPOR",
			"Speaker Amplifier INL", "HPOL",
			"Speaker Amplifier INR", "HPOR",
			"Speaker", "Speaker Amplifier OUTL",
			"Speaker", "Speaker Amplifier OUTR";

		simple-audio-card,hp-det-gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
		simple-audio-card,aux-devs = <&speaker_amp>;
		simple-audio-card,pin-switches = "Speaker";

		simple-audio-card,cpu {
			sound-dai = <&i2s1>;
		};

		simple-audio-card,codec {
			sound-dai = <&es8316>;
		};
	};

	speaker_amp: speaker-amplifier {
		compatible = "simple-audio-amplifier";
		enable-gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>;
		sound-name-prefix = "Speaker Amplifier";
		VCC-supply = <&pa_5v>;
	};

	/* Power tree */
	/* Root power source */
	vcc_sysin: vcc-sysin {
		compatible = "regulator-fixed";
		regulator-name = "vcc_sysin";
		regulator-always-on;
		regulator-boot-on;
	};

	/* Regulators supplied by vcc_sysin */
	/* LCD backlight supply */
	vcc_12v: vcc-12v {
		compatible = "regulator-fixed";
		regulator-name = "vcc_12v";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
		vin-supply = <&vcc_sysin>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* Main 3.3 V supply */
	vcc3v3_sys: wifi_bat: vcc3v3-sys {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_sys";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc_sysin>;

		regulator-state-mem {
			regulator-on-in-suspend;
		};
	};

	/* 5 V USB power supply */
	vcc5v0_usb: pa_5v: vcc5v0-usb-regulator {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pwr_5v_pin>;
		regulator-name = "vcc5v0_usb";
		regulator-always-on;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&vcc_sysin>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* RK3399 logic supply */
	vdd_log: vdd-log {
		compatible = "pwm-regulator";
		pwms = <&pwm2 0 25000 1>;
		pwm-supply = <&vcc_sysin>;
		regulator-name = "vdd_log";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <800000>;
		regulator-max-microvolt = <1400000>;

		regulator-state-mem {
			regulator-on-in-suspend;
		};
	};

	/* Regulators supplied by vcc3v3_sys */
	/* 0.9 V supply, always on */
	vcc_0v9: vcc-0v9 {
		compatible = "regulator-fixed";
		regulator-name = "vcc_0v9";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <900000>;
		regulator-max-microvolt = <900000>;
		vin-supply = <&vcc3v3_sys>;
	};

	/* S3 1.8 V supply, switched by vcc1v8_s3 */
	vcca1v8_s3: vcc1v8-s3 {
		compatible = "regulator-fixed";
		regulator-name = "vcca1v8_s3";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&vcc3v3_sys>;
	};

	/* micro SD card power */
	vcc3v0_sd: vcc3v0-sd {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&sdmmc0_pwr_h_pin>;
		regulator-name = "vcc3v0_sd";
		regulator-always-on;
		regulator-min-microvolt = <3000000>;
		regulator-max-microvolt = <3000000>;
		vin-supply = <&vcc3v3_sys>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* LCD panel power, called VCC3V3_S0 in schematic */
	vcc3v3_panel: vcc3v3-panel {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&lcdvcc_en_pin>;
		regulator-name = "vcc3v3_panel";
		regulator-always-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-enable-ramp-delay = <100000>;
		vin-supply = <&vcc3v3_sys>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* M.2 adapter power, switched by vcc1v8_s3 */
	vcc3v3_ssd: vcc3v3-ssd {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_ssd";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc3v3_sys>;
	};

	/* Regulators supplied by vcc5v0_usb */
	/* USB 3 port power supply regulator  */
	vcc5v0_otg: vcc5v0-otg {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&vcc5v0_host_en_pin>;
		regulator-name = "vcc5v0_otg";
		regulator-always-on;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&vcc5v0_usb>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* Regulators supplied by vcc5v0_usb */
	/* Type C port power supply regulator */
	vbus_5vout: vbus_typec: vbus-5vout {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&vcc5v0_typec0_en_pin>;
		regulator-name = "vbus_5vout";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&vcc5v0_usb>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	/* Regulators supplied by vcc_1v8 */
	/* Primary 0.9 V LDO */
	vcca0v9_s3: vcca0v9-s3 {
		compatible = "regulator-fixed";
		regulator-name = "vcc0v9_s3";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&vcc_1v8>;

		regulator-state-mem {
			regulator-on-in-suspend;
		};
	};

	mains_charger: dc-charger {
		compatible = "gpio-charger";
		charger-type = "mains";
		gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_LOW>;

		/* Also triggered by USB charger */
		pinctrl-names = "default";
		pinctrl-0 = <&dc_det_pin>;
	};
};

&cpu_b0 {
	cpu-supply = <&vdd_cpu_b>;
};

&cpu_b1 {
	cpu-supply = <&vdd_cpu_b>;
};

&cpu_l0 {
	cpu-supply = <&vdd_cpu_l>;
};

&cpu_l1 {
	cpu-supply = <&vdd_cpu_l>;
};

&cpu_l2 {
	cpu-supply = <&vdd_cpu_l>;
};

&cpu_l3 {
	cpu-supply = <&vdd_cpu_l>;
};

&edp {
	force-hpd;
	pinctrl-names = "default";
	pinctrl-0 = <&edp_hpd>;
	status = "okay";

	ports {
		edp_out: port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			edp_out_panel: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&panel_in_edp>;
			};
		};
	};
};

&emmc_phy {
	status = "okay";
};

&gpu {
	mali-supply = <&vdd_gpu>;
	status = "okay";
};

&hdmi_sound {
	status = "okay";
};

&i2c0 {
	clock-frequency = <400000>;
	i2c-scl-falling-time-ns = <4>;
	i2c-scl-rising-time-ns = <168>;
	status = "okay";

	rk808: pmic@1b {
		compatible = "rockchip,rk808";
		reg = <0x1b>;
		#clock-cells = <1>;
		clock-output-names = "xin32k", "rk808-clkout2";
		interrupt-parent = <&gpio3>;
		interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&pmic_int_l_pin>;
		rockchip,system-power-controller;
		wakeup-source;

		vcc1-supply = <&vcc_sysin>;
		vcc2-supply = <&vcc_sysin>;
		vcc3-supply = <&vcc_sysin>;
		vcc4-supply = <&vcc_sysin>;
		vcc6-supply = <&vcc_sysin>;
		vcc7-supply = <&vcc_sysin>;
		vcc8-supply = <&vcc3v3_sys>;
		vcc9-supply = <&vcc_sysin>;
		vcc10-supply = <&vcc_sysin>;
		vcc11-supply = <&vcc_sysin>;
		vcc12-supply = <&vcc3v3_sys>;

		regulators {
			/* rk3399 center logic supply */
			vdd_center: DCDC_REG1 {
				regulator-name = "vdd_center";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <1350000>;
				regulator-ramp-delay = <6001>;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vdd_cpu_l: DCDC_REG2 {
				regulator-name = "vdd_cpu_l";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <1350000>;
				regulator-ramp-delay = <6001>;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vcc_ddr: DCDC_REG3 {
				regulator-name = "vcc_ddr";
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-on-in-suspend;
				};
			};

			vcc_1v8: vcc_wl: DCDC_REG4 {
				regulator-name = "vcc_1v8";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			/* not used */
			LDO_REG1 {
			};

			/* not used */
			LDO_REG2 {
			};

			vcc1v8_pmupll: LDO_REG3 {
				regulator-name = "vcc1v8_pmupll";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			vcc_sdio: LDO_REG4 {
				regulator-name = "vcc_sdio";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3000000>;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <3000000>;
				};
			};

			vcca3v0_codec: LDO_REG5 {
				regulator-name = "vcca3v0_codec";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt = <3000000>;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vcc_1v5: LDO_REG6 {
				regulator-name = "vcc_1v5";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1500000>;
				regulator-max-microvolt = <1500000>;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1500000>;
				};
			};

			vcca1v8_codec: LDO_REG7 {
				regulator-name = "vcca1v8_codec";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vcc_3v0: LDO_REG8 {
				regulator-name = "vcc_3v0";
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt = <3000000>;

				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <3000000>;
				};
			};

			vcc3v3_s3: SWITCH_REG1 {
				regulator-name = "vcc3v3_s3";
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vcc3v3_s0: SWITCH_REG2 {
				regulator-name = "vcc3v3_s0";
				regulator-always-on;
				regulator-boot-on;

				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};
		};
	};

	vdd_cpu_b: regulator@40 {
		compatible = "silergy,syr827";
		reg = <0x40>;
		fcs,suspend-voltage-selector = <1>;
		pinctrl-names = "default";
		pinctrl-0 = <&vsel1_pin>;
		regulator-name = "vdd_cpu_b";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <712500>;
		regulator-max-microvolt = <1500000>;
		regulator-ramp-delay = <1000>;
		vin-supply = <&vcc_1v8>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	vdd_gpu: regulator@41 {
		compatible = "silergy,syr828";
		reg = <0x41>;
		fcs,suspend-voltage-selector = <1>;
		pinctrl-names = "default";
		pinctrl-0 = <&vsel2_pin>;
		regulator-name = "vdd_gpu";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <712500>;
		regulator-max-microvolt = <1500000>;
		regulator-ramp-delay = <1000>;
		vin-supply = <&vcc_1v8>;

		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};
};

&i2c1 {
	clock-frequency = <100000>;
	i2c-scl-falling-time-ns = <4>;
	i2c-scl-rising-time-ns = <168>;
	status = "okay";

	es8316: audio-codec@11 {
		compatible = "everest,es8316";
		reg = <0x11>;
		clocks = <&cru SCLK_I2S_8CH_OUT>;
		clock-names = "mclk";
		#sound-dai-cells = <0>;
	};
};

&i2c3 {
	i2c-scl-falling-time-ns = <15>;
	i2c-scl-rising-time-ns = <450>;
	status = "okay";
};

&i2c4 {
	i2c-scl-falling-time-ns = <20>;
	i2c-scl-rising-time-ns = <600>;
	status = "okay";

	fusb0: fusb30x@22 {
		compatible = "fcs,fusb302";
		reg = <0x22>;
		interrupt-parent = <&gpio1>;
		interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&fusb0_int_pin>;
		vbus-supply = <&vbus_typec>;

		connector {
			compatible = "usb-c-connector";
			data-role = "dual";
			label = "USB-C";
			op-sink-microwatt = <1000000>;
			power-role = "dual";
			sink-pdos =
				<PDO_FIXED(5000, 2500, PDO_FIXED_USB_COMM)>;
			source-pdos =
				<PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM)>;
			try-power-role = "sink";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;

					usbc_hs: endpoint {
						remote-endpoint =
							<&u2phy0_typec_hs>;
					};
				};

				port@1 {
					reg = <1>;

					usbc_ss: endpoint {
						remote-endpoint =
							<&tcphy0_typec_ss>;
					};
				};

				port@2 {
					reg = <2>;

					usbc_dp: endpoint {
						remote-endpoint =
							<&tcphy0_typec_dp>;
					};
				};
			};
		};
	};

	cw2015@62 {
		compatible = "cellwise,cw2015";
		reg = <0x62>;
		cellwise,battery-profile = /bits/ 8 <
			0x17 0x67 0x80 0x73 0x6E 0x6C 0x6B 0x63
			0x77 0x51 0x5C 0x58 0x50 0x4C 0x48 0x36
			0x15 0x0C 0x0C 0x19 0x5B 0x7D 0x6F 0x69
			0x69 0x5B 0x0C 0x29 0x20 0x40 0x52 0x59
			0x57 0x56 0x54 0x4F 0x3B 0x1F 0x7F 0x17
			0x06 0x1A 0x30 0x5A 0x85 0x93 0x96 0x2D
			0x48 0x77 0x9C 0xB3 0x80 0x52 0x94 0xCB
			0x2F 0x00 0x64 0xA5 0xB5 0x11 0xF0 0x11
		>;
		cellwise,monitor-interval-ms = <5000>;
		monitored-battery = <&bat>;
		power-supplies = <&mains_charger>, <&fusb0>;
	};
};

&i2s1 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2s_8ch_mclk_pin>, <&i2s1_2ch_bus>;
	rockchip,capture-channels = <8>;
	rockchip,playback-channels = <8>;
	status = "okay";
};

&io_domains {
	audio-supply = <&vcc_3v0>;
	gpio1830-supply = <&vcc_3v0>;
	sdmmc-supply = <&vcc_sdio>;
	status = "okay";
};

&pcie_phy {
	status = "okay";
};

&pcie0 {
	bus-scan-delay-ms = <1000>;
	ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
	num-lanes = <4>;
	pinctrl-names = "default";
	pinctrl-0 = <&pcie_clkreqn_cpm>;
	vpcie0v9-supply = <&vcca0v9_s3>;
	vpcie1v8-supply = <&vcca1v8_s3>;
	vpcie3v3-supply = <&vcc3v3_ssd>;
	status = "okay";
};

&pinctrl {
	buttons {
		pwrbtn_pin: pwrbtn-pin {
			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
		};

		lidbtn_pin: lidbtn-pin {
			rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	dc-charger {
		dc_det_pin: dc-det-pin {
			rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	es8316 {
		hp_det_pin: hp-det-pin {
			rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	fusb302x {
		fusb0_int_pin: fusb0-int-pin {
			rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	i2s1 {
		i2s_8ch_mclk_pin: i2s-8ch-mclk-pin {
			rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>;
		};
	};

	lcd-panel {
		lcdvcc_en_pin: lcdvcc-en-pin {
			rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		panel_en_pin: panel-en-pin {
			rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		lcd_panel_reset_pin: lcd-panel-reset-pin {
			rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	leds {
		pwr_led_pin: pwr-led-pin {
			rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		slp_led_pin: slp-led-pin {
			rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	pmic {
		pmic_int_l_pin: pmic-int-l-pin {
			rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
		};

		vsel1_pin: vsel1-pin {
			rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
		};

		vsel2_pin: vsel2-pin {
			rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
		};
	};

	sdcard {
		sdmmc0_pwr_h_pin: sdmmc0-pwr-h-pin {
			rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
		};

	};

	sdio-pwrseq {
		wifi_enable_h_pin: wifi-enable-h-pin {
			rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb-typec {
		vcc5v0_typec0_en_pin: vcc5v0-typec0-en-pin {
			rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	usb2 {
		pwr_5v_pin: pwr-5v-pin {
			rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		vcc5v0_host_en_pin: vcc5v0-host-en-pin {
			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	wireless-bluetooth {
		bt_wake_pin: bt-wake-pin {
			rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		bt_host_wake_pin: bt-host-wake-pin {
			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		bt_reset_pin: bt-reset-pin {
			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

&pmu_io_domains {
	pmu1830-supply = <&vcc_3v0>;
	status = "okay";
};

&pwm0 {
	status = "okay";
};

&pwm2 {
	status = "okay";
};

&saradc {
	vref-supply = <&vcca1v8_s3>;
	status = "okay";
};

&sdmmc {
	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
	disable-wp;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
	sd-uhs-sdr50;
	vmmc-supply = <&vcc3v0_sd>;
	vqmmc-supply = <&vcc_sdio>;
	status = "okay";
};

&sdio0 {
	bus-width = <4>;
	cap-sd-highspeed;
	cap-sdio-irq;
	keep-power-in-suspend;
	mmc-pwrseq = <&sdio_pwrseq>;
	non-removable;
	pinctrl-names = "default";
	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
	sd-uhs-sdr104;
	status = "okay";
};

&sdhci {
	bus-width = <8>;
	mmc-hs200-1_8v;
	non-removable;
	status = "okay";
};

&spi1 {
	max-freq = <10000000>;
	status = "okay";

	spiflash: flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		m25p,fast-read;
		spi-max-frequency = <10000000>;
	};
};

&tcphy0 {
	status = "okay";
};

&tcphy0_dp {
	port {
		tcphy0_typec_dp: endpoint {
			remote-endpoint = <&usbc_dp>;
		};
	};
};

&tcphy0_usb3 {
	port {
		tcphy0_typec_ss: endpoint {
			remote-endpoint = <&usbc_ss>;
		};
	};
};

&tcphy1 {
	status = "okay";
};

&tsadc {
	/* tshut mode 0:CRU 1:GPIO */
	rockchip,hw-tshut-mode = <1>;
	/* tshut polarity 0:LOW 1:HIGH */
	rockchip,hw-tshut-polarity = <1>;
	status = "okay";
};

&u2phy0 {
	status = "okay";

	u2phy0_otg: otg-port {
		status = "okay";
	};

	u2phy0_host: host-port {
		phy-supply = <&vcc5v0_otg>;
		status = "okay";
	};

	port {
		u2phy0_typec_hs: endpoint {
			remote-endpoint = <&usbc_hs>;
		};
	};
};

&u2phy1 {
	status = "okay";

	u2phy1_otg: otg-port {
		status = "okay";
	};

	u2phy1_host: host-port {
		phy-supply = <&vcc5v0_otg>;
		status = "okay";
	};
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
	uart-has-rtscts;
	status = "okay";

	bluetooth {
		compatible = "brcm,bcm4345c5";
		clocks = <&rk808 1>;
		clock-names = "lpo";
		device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
		host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
		max-speed = <1500000>;
		pinctrl-names = "default";
		pinctrl-0 = <&bt_host_wake_pin &bt_wake_pin &bt_reset_pin>;
		shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
		vbat-supply = <&wifi_bat>;
		vddio-supply = <&vcc_wl>;
	};
};

&uart2 {
	status = "okay";
};

&usb_host0_ehci {
	status = "okay";
};

&usb_host0_ohci {
	status = "okay";
};

&usb_host1_ehci {
	status = "okay";
};

&usb_host1_ohci {
	status = "okay";
};

&usbdrd3_0 {
	status = "okay";
};

&usbdrd_dwc3_0 {
	dr_mode = "host";
	status = "okay";
};

&usbdrd3_1 {
	status = "okay";
};

&usbdrd_dwc3_1 {
	dr_mode = "host";
	status = "okay";
};

&vopb {
	status = "okay";
};

&vopb_mmu {
	status = "okay";
};

&vopl {
	status = "okay";
};

&vopl_mmu {
	status = "okay";
};