// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
 */

/dts-v1/;
#include "rk3399-puma.dtsi"

/ {
	model = "Theobroma Systems RK3399-Q7 SoM";
	compatible = "tsd,rk3399-puma-haikou", "rockchip,rk3399";

	chosen {
		stdout-path = "serial0:115200n8";
	};

	leds {
		pinctrl-0 = <&module_led_pin>, <&sd_card_led_pin>;

		sd_card_led: led-1 {
			label = "sd_card_led";
			gpios = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "mmc0";
		};
	};

	i2s0-sound {
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		simple-audio-card,name = "Haikou,I2S-codec";
		simple-audio-card,mclk-fs = <512>;

		simple-audio-card,codec {
			clocks = <&sgtl5000_clk>;
			sound-dai = <&sgtl5000>;
		};

		simple-audio-card,cpu {
			bitclock-master;
			frame-master;
			sound-dai = <&i2s0>;
		};
	};

	sgtl5000_clk: sgtl5000-oscillator  {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency  = <24576000>;
	};

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

	vcc3v3_baseboard: vcc3v3-baseboard {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_baseboard";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&dc_12v>;
	};

	vcc5v0_baseboard: vcc5v0-baseboard {
		compatible = "regulator-fixed";
		regulator-name = "vcc5v0_baseboard";
		regulator-always-on;
		regulator-boot-on;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&dc_12v>;
	};

	vcc5v0_otg: vcc5v0-otg-regulator {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&otg_vbus_drv>;
		regulator-name = "vcc5v0_otg";
		regulator-always-on;
	};

	vdda_codec: vdda-codec {
		compatible = "regulator-fixed";
		regulator-name = "vdda_codec";
		regulator-boot-on;
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc5v0_baseboard>;
	};

	vddd_codec: vddd-codec {
		compatible = "regulator-fixed";
		regulator-name = "vddd_codec";
		regulator-boot-on;
		regulator-min-microvolt = <1600000>;
		regulator-max-microvolt = <1600000>;
		vin-supply = <&vcc5v0_baseboard>;
	};
};

&hdmi {
	ddc-i2c-bus = <&i2c3>;
	status = "okay";
};

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

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

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

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

	sgtl5000: codec@a {
		compatible = "fsl,sgtl5000";
		reg = <0x0a>;
		clocks = <&sgtl5000_clk>;
		#sound-dai-cells = <0>;
		VDDA-supply = <&vdda_codec>;
		VDDIO-supply = <&vdda_codec>;
		VDDD-supply = <&vddd_codec>;
		status = "okay";
	};
};

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

&pcie_phy {
	status = "okay";
};

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

&pinctrl {
	pinctrl-names = "default";
	pinctrl-0 = <&haikou_pin_hog>;

	hog {
		haikou_pin_hog: haikou-pin-hog {
			rockchip,pins =
			  /* LID_BTN */
			  <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>,
			  /* BATLOW# */
			  <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>,
			  /* SLP_BTN# */
			  <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>,
			  /* BIOS_DISABLE# */
			  <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	leds {
		sd_card_led_pin: sd-card-led-pin {
			rockchip,pins =
			  <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb2 {
		otg_vbus_drv: otg-vbus-drv {
			rockchip,pins =
			  <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

&pwm0 {
	status = "okay";
};

&sdmmc {
	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
	disable-wp;
	max-frequency = <40000000>;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
	vmmc-supply = <&vcc3v3_baseboard>;
	status = "okay";
};

&spi5 {
	status = "okay";
};

&tcphy0 {
	status = "okay";
};

&u2phy0 {
	status = "okay";
};

&usbdrd3_0 {
	status = "okay";
};

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

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

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

&uart2 {
	status = "okay";
};

&usb_host0_ehci {
	status = "okay";
};

&usb_host0_ohci {
	status = "okay";
};

&vopb {
	status = "okay";
};

&vopb_mmu {
	status = "okay";
};

&vopl {
	status = "okay";
};

&vopl_mmu {
	status = "okay";
};
