// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
 */

/dts-v1/;

#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/input/input.h>
#include "rk3399.dtsi"
#include "rk3399-linux.dtsi"
#include "rk3399-opp.dtsi"

/ {

	model = "ROCK960 - 96boards based on Rockchip RK3399";
	compatible = "rockchip,rock960","rockchip,rk3399";

	fiq_debugger: fiq-debugger {
		compatible = "rockchip,fiq-debugger";
		rockchip,serial-id = <2>;
		rockchip,signal-irq = <182>;
		rockchip,wake-irq = <0>;
		rockchip,irq-mode-enable = <1>;
		rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
		pinctrl-names = "default";
		pinctrl-0 = <&uart2c_xfer>;
	};

	vcc1v8_s0: vcc1v8-s0 {
		compatible = "regulator-fixed";
		regulator-name = "vcc1v8_s0";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-always-on;
	};

	vcc_sys: vcc-sys {
		compatible = "regulator-fixed";
		regulator-name = "vcc_sys";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
	};

	vcc_phy: vcc-phy-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vcc_phy";
		regulator-always-on;
		regulator-boot-on;
	};

	vcc3v3_sys: vcc3v3-sys {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_sys";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		vin-supply = <&vcc_sys>;
	};

	vcc3v3_pcie: vcc3v3-pcie-regulator {
		compatible = "regulator-fixed";
		gpio = <&gpio3 11 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&pcie_drv>;
		regulator-boot-on;
		regulator-always-on;
		regulator-name = "vcc3v3_pcie";
		vin-supply = <&vcc3v3_sys>;
	};

	vcc5v0_host: vcc5v0-host-regulator {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio4 25 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&host_vbus_drv>;
		regulator-name = "vcc5v0_host";
		regulator-always-on;
	};

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

		/* for rockchip boot on */
		rockchip,pwm_id= <2>;
		rockchip,pwm_voltage = <900000>;

		vin-supply = <&vcc_sys>;
	};

	clkin_gmac: external-gmac-clock {
		compatible = "fixed-clock";
		clock-frequency = <125000000>;
		clock-output-names = "clkin_gmac";
		#clock-cells = <0>;
	};

	hdmi_codec: hdmi-codec {
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		simple-audio-card,mclk-fs = <256>;
		simple-audio-card,name = "HDMI-CODEC";

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

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

	spdif-sound {
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "ROCKCHIP,SPDIF";
		simple-audio-card,mclk-fs = <128>;
		simple-audio-card,cpu {
			sound-dai = <&spdif>;
		};
		simple-audio-card,codec {
			sound-dai = <&spdif_out>;
		};
	};

	spdif_out: spdif-out {
		status = "okay";
		compatible = "linux,spdif-dit";
		#sound-dai-cells = <0>;
	};

	sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		clocks = <&rk808 1>;
		clock-names = "ext_clock";
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_enable_h>;

		/*
		 * On the module itself this is one of these (depending
		 * on the actual card populated):
		 * - SDIO_RESET_L_WL_REG_ON
		 * - PDN (power down when low)
		 */
		reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
	};

	wireless-wlan {
		compatible = "wlan-platdata";
		rockchip,grf = <&grf>;
		wifi_chip_type = "ap6354";
		sdio_vref = <1800>;
		WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	wireless-bluetooth {
		compatible = "bluetooth-platdata";
		clocks = <&rk808 1>;
		clock-names = "ext_clock";
		/* wifi-bt-power-toggle; */
		uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default", "rts_gpio";
		pinctrl-0 = <&uart0_rts>;
		pinctrl-1 = <&uart0_gpios>;
		/* BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; */
		BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>;
		BT,wake_gpio     = <&gpio2 27 GPIO_ACTIVE_HIGH>;
		BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	test-power {
		status = "okay";
	};
};

&hdmi {
	#address-cells = <1>;
	#size-cells = <0>;
	#sound-dai-cells = <0>;
	status = "okay";
};

&sdmmc {
	clock-frequency = <100000000>;
	clock-freq-min-max = <100000 100000000>;
	no-sdio;
	no-mmc;
	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
	disable-wp;
	num-slots = <1>;
	//sd-uhs-sdr104;
	vqmmc-supply = <&vcc_sd>;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
	card-detect-delay = <800>;
	status = "okay";
};

&sdio0 {
	clock-frequency = <100000000>;
	clock-freq-min-max = <200000 100000000>;
	no-sd;
	no-mmc;
	bus-width = <4>;
	disable-wp;
	cap-sd-highspeed;
	cap-sdio-irq;
	keep-power-in-suspend;
	mmc-pwrseq = <&sdio_pwrseq>;
	non-removable;
	num-slots = <1>;
	pinctrl-names = "default";
	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
	sd-uhs-sdr104;
	status = "okay";
};

&emmc_phy {
	status = "okay";
};

&sdhci {
	bus-width = <8>;
	mmc-hs400-1_8v;
	no-sdio;
	no-sd;
	non-removable;
	mmc-hs400-enhanced-strobe;
	status = "okay";
};

&i2s0 {
	status = "okay";
	rockchip,i2s-broken-burst-len;
	rockchip,playback-channels = <8>;
	rockchip,capture-channels = <8>;
	#sound-dai-cells = <0>;
};

&i2s2 {
	status = "okay";
	#sound-dai-cells = <0>;
};

&spdif {
	pinctrl-0 = <&spdif_bus_1>;
	status = "okay";
	#sound-dai-cells = <0>;
};

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

	vdd_cpu_b: syr827@40 {
		compatible = "silergy,syr827";
		reg = <0x40>;
		regulator-compatible = "fan53555-reg";
		pinctrl-0 = <&vsel1_gpio>;
		vsel-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
		regulator-name = "vdd_cpu_b";
		regulator-min-microvolt = <712500>;
		regulator-max-microvolt = <1500000>;
		regulator-ramp-delay = <1000>;
		fcs,suspend-voltage-selector = <1>;
		regulator-always-on;
		regulator-boot-on;
		vin-supply = <&vcc_sys>;
		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

	vdd_gpu: syr828@41 {
		compatible = "silergy,syr828";
		reg = <0x41>;
		regulator-compatible = "fan53555-reg";
		pinctrl-0 = <&vsel2_gpio>;
		vsel-gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>;
		regulator-name = "vdd_gpu";
		regulator-min-microvolt = <712500>;
		regulator-max-microvolt = <1500000>;
		regulator-ramp-delay = <1000>;
		fcs,suspend-voltage-selector = <1>;
		regulator-always-on;
		regulator-boot-on;
		vin-supply = <&vcc_sys>;
		regulator-initial-mode = <1>; /* 1:force PWM 2:auto */
		regulator-state-mem {
			regulator-off-in-suspend;
		};
	};

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

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

		regulators {
			vdd_center: DCDC_REG1 {
				regulator-name = "vdd_center";
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <1350000>;
				regulator-ramp-delay = <6001>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-off-in-suspend;
				};
			};

			vdd_cpu_l: DCDC_REG2 {
				regulator-name = "vdd_cpu_l";
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <1350000>;
				regulator-ramp-delay = <6001>;
				regulator-always-on;
				regulator-boot-on;
				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: DCDC_REG4 {
				regulator-name = "vcc_1v8";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			vcc1v8_dvp: LDO_REG1 {
				regulator-name = "vcc1v8_dvp";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			vcca1v8_hdmi: LDO_REG2 {
				regulator-name = "vcca1v8_hdmi";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			vcca_1v8: LDO_REG3 {
				regulator-name = "vcca_1v8";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1800000>;
				};
			};

			vcc_sd: LDO_REG4 {
				regulator-name = "vcc_sd";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3000000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <3000000>;
				};
			};

			vcc3v0_sd: LDO_REG5 {
				regulator-name = "vcc3v0_sd";
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt = <3000000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <3000000>;
				};
			};

			vcc_1v5: LDO_REG6 {
				regulator-name = "vcc_1v5";
				regulator-min-microvolt = <1500000>;
				regulator-max-microvolt = <1500000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <1500000>;
				};
			};

			vcca0v9_hdmi: LDO_REG7 {
				regulator-name = "vcca0v9_hdmi";
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <900000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <900000>;
				};
			};

			vcc_3v0: LDO_REG8 {
				regulator-name = "vcc_3v0";
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt = <3000000>;
				regulator-always-on;
				regulator-boot-on;
				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-on-in-suspend;
				};
			};

			vcc3v3_s0: SWITCH_REG2 {
				regulator-name = "vcc3v3_s0";
				regulator-always-on;
				regulator-boot-on;
				regulator-state-mem {
					regulator-on-in-suspend;
				};
			};
		};
	};
};

&i2c1 {
	status = "okay";
};

&i2c6 {
	status = "okay";
};

&i2c4 {
	status = "okay";
	fusb0: fusb30x@22 {
		compatible = "fairchild,fusb302";
		reg = <0x22>;
		pinctrl-names = "default";
		pinctrl-0 = <&fusb0_int>;
		vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
		int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};
};

&i2c2 {
	status = "okay";
	camera0: camera-module@10 {
		status = "disabled";
		compatible = "omnivision,ov13850-v4l2-i2c-subdev";
		reg = < 0x10 >;
		device_type = "v4l2-i2c-subdev";
		clocks = <&cru SCLK_CIF_OUT>;
		clock-names = "clk_cif_out";
		pinctrl-names = "rockchip,camera_default",
				"rockchip,camera_sleep";
		pinctrl-0 = <&cam0_default_pins>;
		pinctrl-1 = <&cam0_sleep_pins>;
		//rockchip,pd-gpio = <&gpio4 4 GPIO_ACTIVE_LOW>;
		rockchip,pwr-gpio = <&gpio4 4 GPIO_ACTIVE_HIGH>;
		rockchip,rst-gpio = <&gpio3 29 GPIO_ACTIVE_LOW>;
		rockchip,camera-module-mclk-name = "clk_cif_out";
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "cmk-cb0695-fv1";
		rockchip,camera-module-len-name = "lg9569a2";
		rockchip,camera-module-fov-h = "66.0";
		rockchip,camera-module-fov-v = "50.1";
		rockchip,camera-module-orientation = <0>;
		rockchip,camera-module-iq-flip = <0>;
		rockchip,camera-module-iq-mirror = <0>;
		rockchip,camera-module-flip = <1>;
		rockchip,camera-module-mirror = <0>;

		rockchip,camera-module-defrect0 = <2112 1568 0 0 2112 1568>;
		rockchip,camera-module-defrect1 = <4224 3136 0 0 4224 3136>;
		rockchip,camera-module-defrect3 = <3264 2448 0 0 3264 2448>;
		rockchip,camera-module-flash-support = <1>;
		rockchip,camera-module-mipi-dphy-index = <0>;
	};

	camera1: camera-module@36 {
		status = "disabled";
		compatible = "omnivision,ov4690-v4l2-i2c-subdev";
		reg = <0x36>;
		device_type = "v4l2-i2c-subdev";
		clocks = <&cru SCLK_CIF_OUT>;
		clock-names = "clk_cif_out";
		pinctrl-names = "rockchip,camera_default",
				"rockchip,camera_sleep";
		pinctrl-0 = <&cam0_default_pins>;
		pinctrl-1 = <&cam0_sleep_pins>;
		rockchip,pd-gpio = <&gpio3 4 GPIO_ACTIVE_LOW>;
		//rockchip,pwr-gpio = <&gpio3 13 0>;
		rockchip,rst-gpio = <&gpio2 10 GPIO_ACTIVE_LOW>;
		rockchip,camera-module-mclk-name = "clk_cif_out";
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "LA6111PA";
		rockchip,camera-module-len-name = "YM6011P";
		rockchip,camera-module-fov-h = "116";
		rockchip,camera-module-fov-v = "61";
		rockchip,camera-module-orientation = <0>;
		rockchip,camera-module-iq-flip = <0>;
		rockchip,camera-module-iq-mirror = <0>;
		rockchip,camera-module-flip = <0>;
		rockchip,camera-module-mirror = <1>;

		rockchip,camera-module-defrect0 = <2688 1520 0 0 2688 1520>;
		rockchip,camera-module-flash-support = <0>;
		rockchip,camera-module-mipi-dphy-index = <0>;
	};

};

&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>;
};

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

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

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

&threshold {
	temperature = <85000>;
};

&target {
	temperature = <100000>;
};

&soc_crit {
	temperature = <105000>;
};

&tcphy0 {
	extcon = <&fusb0>;
	status = "okay";
};

&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>;
	rockchip,hw-tshut-temp = <110000>;
	status = "okay";
};

&u2phy0 {
	status = "okay";
	extcon = <&fusb0>;

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

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

&u2phy1 {
	status = "okay";

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

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

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_xfer &uart0_cts>;
	dmas = <&dmac_peri 0>, <&dmac_peri 1>;
	dma-names = "tx", "rx";
	status = "okay";
};

&uart3 {
	compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
	reg = <0x0 0xff1b0000 0x0 0x100>;
	clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;
	clock-names = "baudclk", "apb_pclk";
	interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH 0>;
	dmas = <&dmac_peri 6>, <&dmac_peri 7>;
	dma-names = "tx", "rx";
	reg-shift = <2>;
	reg-io-width = <4>;
	pinctrl-names = "default";
	pinctrl-0 = <&uart3_xfer &uart3_cts &uart3_rts>;
	status = "okay";
};

&uart4 {
	status = "okay";
	dmas = <&dmac_peri 8>, <&dmac_peri 9>;
	dma-names = "tx", "rx";
};

&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 = "otg";
	status = "okay";
	extcon = <&fusb0>;
};

&usbdrd3_1 {
	status = "okay";
};

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

&pwm2 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm2_pin_pull_down>;
};

&pwm3 {
	status = "okay";

	interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
	compatible = "rockchip,remotectl-pwm";
	remote_pwm_id = <3>;
	handle_cpu_id = <1>;
	remote_support_psci = <1>;

	ir_key1 {
		rockchip,usercode = <0x4040>;
		rockchip,key_table =
			<0xf2	KEY_REPLY>,
			<0xba	KEY_BACK>,
			<0xf4	KEY_UP>,
			<0xf1	KEY_DOWN>,
			<0xef	KEY_LEFT>,
			<0xee	KEY_RIGHT>,
			<0xbd	KEY_HOME>,
			<0xea	KEY_VOLUMEUP>,
			<0xe3	KEY_VOLUMEDOWN>,
			<0xe2	KEY_SEARCH>,
			<0xb2	KEY_POWER>,
			<0xbc	KEY_MUTE>,
			<0xec	KEY_MENU>,
			<0xbf	0x190>,
			<0xe0	0x191>,
			<0xe1	0x192>,
			<0xe9	183>,
			<0xe6	248>,
			<0xe8	185>,
			<0xe7	186>,
			<0xf0	388>,
			<0xbe	0x175>;
	};

	ir_key2 {
		rockchip,usercode = <0xff00>;
		rockchip,key_table =
			<0xf9	KEY_HOME>,
			<0xbf	KEY_BACK>,
			<0xfb	KEY_MENU>,
			<0xaa	KEY_REPLY>,
			<0xb9	KEY_UP>,
			<0xe9	KEY_DOWN>,
			<0xb8	KEY_LEFT>,
			<0xea	KEY_RIGHT>,
			<0xeb	KEY_VOLUMEDOWN>,
			<0xef	KEY_VOLUMEUP>,
			<0xf7	KEY_MUTE>,
			<0xe7	KEY_POWER>,
			<0xfc	KEY_POWER>,
			<0xa9	KEY_VOLUMEDOWN>,
			<0xa8	KEY_VOLUMEDOWN>,
			<0xe0	KEY_VOLUMEDOWN>,
			<0xa5	KEY_VOLUMEDOWN>,
			<0xab	183>,
			<0xb7	388>,
			<0xe8	388>,
			<0xf8	184>,
			<0xaf	185>,
			<0xed	KEY_VOLUMEDOWN>,
			<0xee	186>,
			<0xb3	KEY_VOLUMEDOWN>,
			<0xf1	KEY_VOLUMEDOWN>,
			<0xf2	KEY_VOLUMEDOWN>,
			<0xf3	KEY_SEARCH>,
			<0xb4	KEY_VOLUMEDOWN>,
			<0xbe	KEY_SEARCH>;
	};

	ir_key3 {
		rockchip,usercode = <0x1dcc>;
		rockchip,key_table =
			<0xee	KEY_REPLY>,
			<0xf0	KEY_BACK>,
			<0xf8	KEY_UP>,
			<0xbb	KEY_DOWN>,
			<0xef	KEY_LEFT>,
			<0xed	KEY_RIGHT>,
			<0xfc	KEY_HOME>,
			<0xf1	KEY_VOLUMEUP>,
			<0xfd	KEY_VOLUMEDOWN>,
			<0xb7	KEY_SEARCH>,
			<0xff	KEY_POWER>,
			<0xf3	KEY_MUTE>,
			<0xbf	KEY_MENU>,
			<0xf9	0x191>,
			<0xf5	0x192>,
			<0xb3	388>,
			<0xbe	KEY_1>,
			<0xba	KEY_2>,
			<0xb2	KEY_3>,
			<0xbd	KEY_4>,
			<0xf9	KEY_5>,
			<0xb1	KEY_6>,
			<0xfc	KEY_7>,
			<0xf8	KEY_8>,
			<0xb0	KEY_9>,
			<0xb6	KEY_0>,
			<0xb5	KEY_BACKSPACE>;
	};
};

&gmac {
	phy-supply = <&vcc_phy>;
	phy-mode = "rgmii";
	clock_in_out = "input";
	snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
	snps,reset-active-low;
	snps,reset-delays-us = <0 10000 50000>;
	assigned-clocks = <&cru SCLK_RMII_SRC>;
	assigned-clock-parents = <&clkin_gmac>;
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&rgmii_pins>;
	pinctrl-1 = <&rgmii_sleep_pins>;
	tx_delay = <0x28>;
	rx_delay = <0x11>;
	status = "disabled";
};

&saradc {
	status = "okay";
};

&io_domains {
	status = "okay";

	bt656-supply = <&vcc1v8_s0>; /* bt656_gpio2ab_ms */
	audio-supply = <&vcc1v8_s0>; /* audio_gpio3d4a_ms */
	sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
	gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
};

&pcie_phy {
	status = "okay";
};

&pcie0 {
	ep-gpios = <&gpio3 9 GPIO_ACTIVE_HIGH>;
	num-lanes = <4>;
	pinctrl-names = "default";
	pinctrl-0 = <&pcie_clkreqn_cpm>;
	status = "okay";
};

&pinctrl {

	sdio0 {
		sdio0_bus1: sdio0-bus1 {
			rockchip,pins =
				<2 RK_PC4 1 &pcfg_pull_up_20ma>;
		};

		sdio0_bus4: sdio0-bus4 {
			rockchip,pins =
				<2 RK_PC4 1 &pcfg_pull_up_20ma>,
				<2 RK_PC5 1 &pcfg_pull_up_20ma>,
				<2 RK_PC6 1 &pcfg_pull_up_20ma>,
				<2 RK_PC7 1 &pcfg_pull_up_20ma>;
		};

		sdio0_cmd: sdio0-cmd {
			rockchip,pins =
				<2 RK_PD0 1 &pcfg_pull_up_20ma>;
		};

		sdio0_clk: sdio0-clk {
			rockchip,pins =
				<2 RK_PD1 1 &pcfg_pull_none_20ma>;
		};
	};

	sdmmc {
		sdmmc_bus1: sdmmc-bus1 {
			rockchip,pins =
				<4 RK_PB0 1 &pcfg_pull_up_8ma>;
		};

		sdmmc_bus4: sdmmc-bus4 {
			rockchip,pins =
				<4 RK_PB0 1 &pcfg_pull_up_8ma>,
				<4 RK_PB1 1 &pcfg_pull_up_8ma>,
				<4 RK_PB2 1 &pcfg_pull_up_8ma>,
				<4 RK_PB3 1 &pcfg_pull_up_8ma>;
		};

		sdmmc_clk: sdmmc-clk {
			rockchip,pins =
				<4 RK_PB4 1 &pcfg_pull_none_18ma>;
		};

		sdmmc_cmd: sdmmc-cmd {
			rockchip,pins =
				<4 RK_PB5 1 &pcfg_pull_up_8ma>;
		};
	};

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

	wireless-bluetooth {
		uart0_gpios: uart0-gpios {
			rockchip,pins =
				<2 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb2 {
		host_vbus_drv: host-vbus-drv {
			rockchip,pins =
				<4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	pcie {
		pcie_drv: pcie-drv {
			rockchip,pins =
				<3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
			};
	};

	pmic {
		pmic_int_l: pmic-int-l {
			rockchip,pins =
				<1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
		};

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

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

	gmac {
		rgmii_sleep_pins: rgmii-sleep-pins {
			rockchip,pins =
				<3 RK_PB7 RK_FUNC_GPIO &pcfg_output_low>;
		};
	};

	fusb30x {
		fusb0_int: fusb0-int {
			rockchip,pins =
				<1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};
};

&pvtm {
	status = "okay";
};

&pmu_pvtm {
	status = "okay";
};

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

&rockchip_suspend {
	status = "okay";
	rockchip,sleep-debug-en = <0>;
	rockchip,sleep-mode-config = <
		(0
		| RKPM_SLP_ARMPD
		| RKPM_SLP_PERILPPD
		| RKPM_SLP_DDR_RET
		| RKPM_SLP_PLLPD
		| RKPM_SLP_CENTER_PD
		| RKPM_SLP_AP_PWROFF
		)
	>;
	rockchip,wakeup-config = <
		(0
		| RKPM_GPIO_WKUP_EN
		| RKPM_PWM_WKUP_EN
		)
	>;
	rockchip,pwm-regulator-config = <
		(0
		| PWM2_REGULATOR_EN
		)
	>;
	rockchip,power-ctrl =
		<&gpio1 17 GPIO_ACTIVE_HIGH>,
		<&gpio1 14 GPIO_ACTIVE_HIGH>;
};

&vopb {
	status = "okay";
};

&vopb_mmu {
	status = "okay";
};

&vopl {
	status = "okay";
};

&vopl_mmu {
	status = "okay";
};

&cif_isp0 {
	rockchip,camera-modules-attached = <&camera0>;
	status = "okay";
};

&isp0_mmu {
	status = "okay";
};

&cif_isp1 {
	rockchip,camera-modules-attached = <&camera1>;
	status = "disabled";
};

&isp1_mmu {
	status = "okay";
};

&vpu {
	status = "okay";
	/* 0 means ion, 1 means drm */
	//allocator = <0>;
};

&rkvdec {
	status = "okay";
	/* 0 means ion, 1 means drm */
	//allocator = <0>;
};

&display_subsystem {
	status = "okay";
};
