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

#include <dt-bindings/input/input.h>
#include "rk3308.dtsi"

/ {
	model = "Rockchip RK3308 EVB V11";
	compatible = "rockchip,rk3308-evb-v11", "rockchip,rk3308";

	chosen {
		bootargs = "earlycon=uart8250,mmio32,0xff0c0000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=squashfs rootwait snd_aloop.index=7 snd_aloop.use_raw_jiffies=1";
	};

	adc-keys {
		compatible = "adc-keys";
		io-channels = <&saradc 1>;
		io-channel-names = "buttons";
		poll-interval = <100>;
		keyup-threshold-microvolt = <1800000>;

		esc-key {
			linux,code = <KEY_MICMUTE>;
			label = "micmute";
			press-threshold-microvolt = <1130000>;
		};

		home-key {
			linux,code = <KEY_MODE>;
			label = "mode";
			press-threshold-microvolt = <901000>;
		};

		menu-key {
			linux,code = <KEY_PLAY>;
			label = "play";
			press-threshold-microvolt = <624000>;
		};

		vol-down-key {
			linux,code = <KEY_VOLUMEDOWN>;
			label = "volume down";
			press-threshold-microvolt = <300000>;
		};

		vol-up-key {
			linux,code = <KEY_VOLUMEUP>;
			label = "volume up";
			press-threshold-microvolt = <18000>;
		};
	};

	dummy_codec: dummy-codec {
		compatible = "rockchip,dummy-codec";
		#sound-dai-cells = <0>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		autorepeat;

		pinctrl-names = "default";
		pinctrl-0 = <&pwr_key>;

		power {
			gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			label = "GPIO Key Power";
			wakeup-source;
			debounce-interval = <100>;
		};
	};

	sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		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 RK_PA2 GPIO_ACTIVE_LOW>;
	};

	acodec_sound: acodec-sound {
		compatible = "rockchip,multicodecs-card";
		rockchip,card-name = "rockchip,rk3308-acodec";
		rockchip,codec-hp-det;
		rockchip,mclk-fs = <256>;
		rockchip,cpu = <&i2s_8ch_2>;
		rockchip,codec = <&acodec>;
	};

	bluetooth_sound: bluetooth-sound {
		status = "disabled";
		compatible = "rockchip,multicodecs-card";
		rockchip,card-name = "rockchip,rk3308-pcm";
		rockchip,mclk-fs = <128>;
		rockchip,cpu = <&i2s_2ch_0>;
		rockchip,codec = <&dummy_codec>;
		rockchip,format = "dsp_b";
		rockchip,bitclock-inversion = <0>;
		rockchip,wait-card-locked = <0>;
	};

	spdif_rx_sound: spdif-rx-sound {
		status = "disabled";
		compatible = "simple-audio-card";
		simple-audio-card,name = "rockchip,spdif-rx-sound";
		simple-audio-card,mclk-fs = <128>;
		simple-audio-card,cpu {
			sound-dai = <&spdif_rx>;
		};
		simple-audio-card,codec {
			sound-dai = <&dummy_codec>;
		};
	};

	spdif_tx_sound: spdif-tx-sound {
		status = "disabled";
		compatible = "simple-audio-card";
		simple-audio-card,name = "rockchip,spdif-tx-sound";
		simple-audio-card,cpu {
			sound-dai = <&spdif_tx>;
		};
		simple-audio-card,codec {
			sound-dai = <&dummy_codec>;
		};
	};

	tas5731_sound: tas5731-sound {
		status = "disabled";
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		simple-audio-card,name = "rockchip,tas5731";
		simple-audio-card,mclk-fs = <256>;
		simple-audio-card,cpu {
			sound-dai = <&i2s_8ch_1>;
		};
		simple-audio-card,codec {
			sound-dai = <&tas5731>;
		};
	};

	vdd_core: vdd-core {
		compatible = "pwm-regulator";
		pwms = <&pwm0 0 5000 1>;
		regulator-name = "vdd_core";
		regulator-min-microvolt = <827000>;
		regulator-max-microvolt = <1340000>;
		regulator-init-microvolt = <1015000>;
		regulator-always-on;
		regulator-boot-on;
		regulator-settling-time-up-us = <250>;
		status = "okay";
	};

	vdd_log: vdd-log {
		compatible = "regulator-fixed";
		regulator-name = "vdd_log";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1050000>;
		regulator-max-microvolt = <1050000>;
	};

	vdd_1v0: vdd-1v0 {
		compatible = "regulator-fixed";
		regulator-name = "vdd_1v0";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1000000>;
		regulator-max-microvolt = <1000000>;
	};

	vccio_sdio: vcc_1v8: vcc-1v8 {
		compatible = "regulator-fixed";
		regulator-name = "vcc_1v8";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&vcc_io>;
	};

	vccio_sd: vccio-sd {
		compatible = "regulator-gpio";
		regulator-name = "vccio_sd";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;
		gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
		states = <1800000 0x0
			  3300000 0x1>;
	};

	vcc_sd: vcc-sd {
		compatible = "regulator-fixed";
		gpio = <&gpio4 RK_PD6 GPIO_ACTIVE_LOW>;
		regulator-name = "vcc_sd";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	vcc_1v8_codec: vcc-1v8-codec {
		compatible = "regulator-fixed";
		regulator-name = "vcc_1v8_codec";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&vcc_io>;
	};

	vcc_ddr: vcc-ddr {
		compatible = "regulator-fixed";
		regulator-name = "vcc_ddr";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1500000>;
		regulator-max-microvolt = <1500000>;
	};

	vcc_3v3_codec: vcc_io: vcc-io {
		compatible = "regulator-fixed";
		regulator-name = "vcc_io";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	vccio_flash: vccio-flash {
		compatible = "regulator-fixed";
		regulator-name = "vccio_flash";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
	};

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

	vbus_host: vbus-host-regulator {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&usb_drv>;
		regulator-name = "vbus_host";
	};

	wireless-bluetooth {
		compatible = "bluetooth-platdata";
		uart_rts_gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default", "rts_gpio";
		pinctrl-0 = <&uart4_rts>;
		pinctrl-1 = <&uart4_rts_pin>;
		BT,power_gpio    = <&gpio4 RK_PB3 GPIO_ACTIVE_HIGH>;
		BT,wake_host_irq = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	wireless-wlan {
		compatible = "wlan-platdata";
		rockchip,grf = <&grf>;
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_wake_host>, <&rtc_32k>;
		wifi_chip_type = "ap6255";
		WIFI,host_wake_irq = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
		status = "okay";
	};
};

&acodec {
	status = "okay";

	rockchip,no-deep-low-power;
	rockchip,loopback-grp = <0>;
	hp-ctl-gpios = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
	spk-ctl-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
};

&cpu0 {
	cpu-supply = <&vdd_core>;
};

&cpu0_opp_table {
	opp-1200000000 {
		status = "okay";
	};
	opp-1296000000 {
		status = "okay";
	};
};

&rk3308bs_cpu0_opp_table {
	opp-1008000000 {
		status = "okay";
	};
	opp-1104000000 {
		status = "okay";
	};
};

&dmc {
	center-supply = <&vdd_log>;
	status = "okay";
};

&emmc {
	bus-width = <8>;
	cap-mmc-highspeed;
	mmc-hs200-1_8v;
	no-sdio;
	no-sd;
	disable-wp;
	non-removable;
	num-slots = <1>;
	status = "disabled";
};

&fiq_debugger {
	status = "okay";
};

&mac {
	phy-supply = <&vcc_phy>;
	assigned-clocks = <&cru SCLK_MAC>;
	assigned-clock-parents = <&mac_clkin>;
	clock_in_out = "input";
	pinctrl-names = "default";
	pinctrl-0 = <&rmii_pins &mac_refclk>;
	snps,reset-gpio = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
	snps,reset-active-low;
	snps,reset-delays-us = <0 50000 50000>;
	status = "disable";
};

&io_domains {
	status = "okay";

	vccio0-supply = <&vcc_io>;
	vccio1-supply = <&vcc_io>;
	vccio2-supply = <&vcc_1v8>;
	vccio3-supply = <&vccio_flash>;
	vccio4-supply = <&vccio_sdio>;
	vccio5-supply = <&vccio_sd>;
};

&i2c1 {
	clock-frequency = <400000>;
	status = "okay";

	tas5731: tas5731@1a {
		#sound-dai-cells = <0>;
		compatible = "ti,tas5731";
		reg = <0x1a>;
		clocks = <&cru SCLK_I2S1_8CH_TX_OUT>;
		clock-names = "mclk";
		pinctrl-names = "default";
		pinctrl-0 = <&i2s_8ch_1_m0_mclk>;
		pdn-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
		reset-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
	};

	is31fl3236: led-controller@3f {
		compatible = "issi,is31fl3236";
		reg = <0x3f>;
		#address-cells = <1>;
		#size-cells = <0>;
		reset-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
		status = "okay";

		led1: led@1 {
			label = "led1";
			reg = <1>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <0>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led2: led@2 {
			label = "led2";
			reg = <2>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <0>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led3: led@3 {
			label = "led3";
			reg = <3>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led4: led@4 {
			label = "led4";
			reg = <4>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <100>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led5: led@5 {
			label = "led5";
			reg = <5>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <100>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led6: led@6 {
			label = "led6";
			reg = <6>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led7: led@7 {
			label = "led7";
			reg = <7>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <200>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led8: led@8 {
			label = "led8";
			reg = <8>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <200>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led9: led@9 {
			label = "led9";
			reg = <9>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led10: led@10 {
			label = "led10";
			reg = <10>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <300>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led11: led@11 {
			label = "led11";
			reg = <11>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <300>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led12: led@12 {
			label = "led12";
			reg = <12>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led13: led@13 {
			label = "led13";
			reg = <13>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <400>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led14: led@14 {
			label = "led14";
			reg = <14>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <400>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led15: led@15 {
			label = "led15";
			reg = <15>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led16: led@16 {
			label = "led16";
			reg = <16>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <500>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led17: led@17 {
			label = "led17";
			reg = <17>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <500>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led18: led@18 {
			label = "led18";
			reg = <18>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led19: led@19 {
			label = "led19";
			reg = <19>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <600>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led20: led@20 {
			label = "led20";
			reg = <20>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <600>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led21: led@21 {
			label = "led21";
			reg = <21>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led22: led@22 {
			label = "led22";
			reg = <22>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <700>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led23: led@23 {
			label = "led23";
			reg = <23>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <700>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led124: led@24 {
			label = "led24";
			reg = <24>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led25: led@25 {
			label = "led25";
			reg = <25>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <800>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led26: led@26 {
			label = "led26";
			reg = <26>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <800>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led27: led@27 {
			label = "led27";
			reg = <27>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led28: led@28 {
			label = "led28";
			reg = <28>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <900>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led29: led@29 {
			label = "led29";
			reg = <29>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <900>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led30: led@30 {
			label = "led30";
			reg = <30>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led31: led@31 {
			label = "led31";
			reg = <31>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <1000>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led32: led@32 {
			label = "led32";
			reg = <32>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <1000>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led33: led@33 {
			label = "led33";
			reg = <33>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};

		led34: led@34 {
			label = "led34";
			reg = <34>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <1100>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led35: led@35 {
			label = "led35";
			reg = <35>;
			led-max-microamp = <10000>;
			linux,default-trigger = "timer";
			linux,default-trigger-delay-ms = <1100>;
			linux,blink-delay-on-ms = <100>;
			linux,blink-delay-off-ms = <1200>;
		};

		led36: led@36 {
			label = "led36";
			reg = <36>;
			led-max-microamp = <10000>;
			linux,default-trigger = "default-on";
		};
	};
};

&i2s_8ch_1 {
	status = "disabled";
	#sound-dai-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&i2s_8ch_1_m0_sclktx
		     &i2s_8ch_1_m0_lrcktx
		     &i2s_8ch_1_m0_sdo0
		     &i2s_8ch_1_m0_mclk>;
};

&i2s_8ch_2 {
	status = "okay";
};

&nandc {
	status = "okay";
};

&rockchip_suspend {
	rockchip,pwm-regulator-config = <
		(0
		| RKPM_PWM_REGULATOR
		)
	>;

	status = "okay";
};

&rng {
	status = "okay";
};

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

&sdio {
	bus-width = <4>;
	cap-sd-highspeed;
	no-sd;
	no-mmc;
	ignore-pm-notify;
	keep-power-in-suspend;
	non-removable;
	mmc-pwrseq = <&sdio_pwrseq>;
	sd-uhs-sdr104;
	status = "okay";
};

&sdmmc {
	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
	no-sdio;
	no-mmc;
	card-detect-delay = <300>;
	sd-uhs-sdr25;
	sd-uhs-sdr50;
	sd-uhs-sdr104;
	vmmc-supply = <&vcc_sd>;
	vqmmc-supply = <&vccio_sd>;
	status = "disabled";
};

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

&pinctrl {
	buttons {
		pwr_key: pwr-key {
			rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	usb {
		usb_drv: usb-drv {
			rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

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

	wireless-bluetooth {
		uart4_gpios: uart4-gpios {
			rockchip,pins = <4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	wireless-wlan {
		wifi_wake_host: wifi-wake-host {
			rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};
};

&pwm0 {
	status = "okay";
	pinctrl-names = "active";
	pinctrl-0 = <&pwm0_pin_pull_down>;
};

&u2phy {
	status = "okay";

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

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

&uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart4_xfer &uart4_cts>;
	status = "okay";
};

&usb20_otg {
	status = "okay";
};

&usb_host0_ehci {
	status = "okay";
};

&usb_host0_ohci{
	status = "okay";
};
