// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2017 T-Chip Intelligent Technology Co., Ltd
 */

/dts-v1/;
#include "rk3399-roc-pc.dtsi"

/*
 * Notice:
 * 1. rk3399-roc-pc-plus is powered by dc_12v directly.
 * 2. rk3399-roc-pc-plus has only vcc_bus_typec0 in schematic, which is coresponding
 *    to vcc_vbus_typec1 in rk3399-roc-pc.
 *    For simplicity, reserve the node name of vcc_vbus_typec1.
 * 3. vcc5v0_host is actually 2 regulators (host0, 1) controlled by the same gpio.
 */

/delete-node/ &fusb1;
/delete-node/ &hub_rst;
/delete-node/ &mp8859;
/delete-node/ &vcc_sys_en;
/delete-node/ &vcc_vbus_typec0;
/delete-node/ &yellow_led;

/ {
	model = "Firefly ROC-RK3399-PC-PLUS Board";
	compatible = "firefly,roc-rk3399-pc-plus", "rockchip,rk3399";

	dc_12v: dc-12v {
		compatible = "regulator-fixed";
		regulator-name = "dc_12v";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
	};

	es8388-sound {
		compatible = "simple-audio-card";
		pinctrl-names = "default";
		pinctrl-0 = <&hp_det_pin>;
		simple-audio-card,name = "rockchip,es8388-codec";
		simple-audio-card,format = "i2s";
		simple-audio-card,mclk-fs = <256>;
		simple-audio-card,widgets =
			"Microphone", "Mic Jack",
			"Headphone", "Headphones";
		simple-audio-card,routing =
			"LINPUT1", "Mic Jack",
			"Headphone Amp INL", "LOUT2",
			"Headphone Amp INR", "ROUT2",
			"Headphones", "Headphone Amp OUTL",
			"Headphones", "Headphone Amp OUTR";
		simple-audio-card,hp-det-gpio = <&gpio2 RK_PA6 GPIO_ACTIVE_HIGH>;
		simple-audio-card,aux-devs = <&headphones_amp>;
		simple-audio-card,pin-switches = "Headphones";

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

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

	gpio-fan {
		#cooling-cells = <2>;
		compatible = "gpio-fan";
		gpio-fan,speed-map = <0 0 3000 1>;
		gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
	};

	/delete-node/ gpio-keys;

	/* not amplifier, used as switcher only */
	headphones_amp: headphones-amp {
		compatible = "simple-audio-amplifier";
		pinctrl-names = "default";
		pinctrl-0 = <&ear_ctl_pin>;
		enable-gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
		sound-name-prefix = "Headphone Amp";
		VCC-supply = <&vcca3v0_codec>;
	};

	ir-receiver {
		linux,rc-map-name = "rc-khadas";
	};

	leds {
		pinctrl-names = "default";
		pinctrl-0 = <&work_led_pin>, <&diy_led_pin>;
	};
};

&fusb0 {
	vbus-supply = <&vcc_vbus_typec1>;
};

&i2c0 {
	hym8563: hym8563@51 {
		compatible = "haoyu,hym8563";
		reg = <0x51>;
		interrupt-parent = <&gpio0>;
		interrupts = <RK_PA5 IRQ_TYPE_EDGE_FALLING>;
		#clock-cells = <0>;
		clock-frequency = <32768>;
		clock-output-names = "xin32k";
		pinctrl-names = "default";
		pinctrl-0 = <&hym8563_int>;
	};
};

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

/* <4 RK_PA0 1 &pcfg_pull_none> is used as i2s_8ch_mclk_pin */
&i2s0_8ch_bus {
	rockchip,pins =
		<3 RK_PD0 1 &pcfg_pull_none>,
		<3 RK_PD1 1 &pcfg_pull_none>,
		<3 RK_PD2 1 &pcfg_pull_none>,
		<3 RK_PD3 1 &pcfg_pull_none>,
		<3 RK_PD4 1 &pcfg_pull_none>,
		<3 RK_PD5 1 &pcfg_pull_none>,
		<3 RK_PD6 1 &pcfg_pull_none>,
		<3 RK_PD7 1 &pcfg_pull_none>;
};

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

&pinctrl {
	es8388 {
		ear_ctl_pin: ear-ctl-pin {
			rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_output_high>;
		};

		hp_det_pin: hp-det-pin {
			rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>;
		};
	};

	hym8563 {
		hym8563_int: hym8563-int {
			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

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

&u2phy0 {
	status = "okay";

	u2phy0_otg: otg-port {
		phy-supply = <&vcc_vbus_typec1>;
		status = "okay";
	};

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

&u2phy1 {
	status = "okay";

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

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

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

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

&vcc_sys {
	/* vcc_sys is fixed, not controlled by any gpio */
	/delete-property/ gpio;
	/delete-property/ pinctrl-names;
	/delete-property/ pinctrl-0;
};

&vcc5v0_host {
	pinctrl-names = "default";
	pinctrl-0 = <&vcc5v0_host_en>;
};
