// SPDX-License-Identifier: GPL-2.0
/*
 * WinLink E850-96 board device tree source
 *
 * Copyright (C) 2018 Samsung Electronics Co., Ltd.
 * Copyright (C) 2021 Linaro Ltd.
 *
 * Device tree source file for WinLink's E850-96 board which is based on
 * Samsung Exynos850 SoC.
 */

/dts-v1/;

#include "exynos850.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>

/ {
	model = "WinLink E850-96 board";
	compatible = "winlink,e850-96", "samsung,exynos850";

	aliases {
		mmc0 = &mmc_0;
		serial0 = &serial_0;
	};

	chosen {
		stdout-path = &serial_0;
	};

	connector {
		compatible = "gpio-usb-b-connector", "usb-b-connector";
		label = "micro-USB";
		type = "micro";
		vbus-supply = <&reg_usb_host_vbus>;
		id-gpios = <&gpa0 0 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&micro_usb_det_pins>;

		port {
			usb_dr_connector: endpoint {
				remote-endpoint = <&usb1_drd_sw>;
			};
		};
	};

	/*
	 * RAM: 4 GiB (eMCP):
	 *   - 2 GiB at 0x80000000
	 *   - 2 GiB at 0x880000000
	 *
	 * 0xbab00000..0xbfffffff: secure memory (85 MiB).
	 */
	memory@80000000 {
		device_type = "memory";
		reg = <0x0 0x80000000 0x3ab00000>,
		      <0x0 0xc0000000 0x40000000>,
		      <0x8 0x80000000 0x80000000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&key_voldown_pins &key_volup_pins>;

		volume-down-key {
			label = "Volume Down";
			linux,code = <KEY_VOLUMEDOWN>;
			gpios = <&gpa1 0 GPIO_ACTIVE_LOW>;
		};

		volume-up-key {
			label = "Volume Up";
			linux,code = <KEY_VOLUMEUP>;
			gpios = <&gpa0 7 GPIO_ACTIVE_LOW>;
		};
	};

	leds {
		compatible = "gpio-leds";

		/* HEART_BEAT_LED */
		user_led1: led-1 {
			label = "yellow:user1";
			gpios = <&gpg2 2 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_YELLOW>;
			function = LED_FUNCTION_HEARTBEAT;
			linux,default-trigger = "heartbeat";
		};

		/* eMMC_LED */
		user_led2: led-2 {
			label = "yellow:user2";
			gpios = <&gpg2 3 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_YELLOW>;
			linux,default-trigger = "mmc0";
		};

		/* SD_LED */
		user_led3: led-3 {
			label = "white:user3";
			gpios = <&gpg2 4 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_WHITE>;
			function = LED_FUNCTION_SD;
			linux,default-trigger = "mmc2";
		};

		/* WIFI_LED */
		wlan_active_led: led-4 {
			label = "yellow:wlan";
			gpios = <&gpg2 6 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_YELLOW>;
			function = LED_FUNCTION_WLAN;
			linux,default-trigger = "phy0tx";
			default-state = "off";
		};

		/* BLUETOOTH_LED */
		bt_active_led: led-5 {
			label = "blue:bt";
			gpios = <&gpg2 7 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_BLUE>;
			function = LED_FUNCTION_BLUETOOTH;
			linux,default-trigger = "hci0-power";
			default-state = "off";
		};
	};

	/* TODO: Remove this once PMIC is implemented  */
	reg_dummy: regulator-0 {
		compatible = "regulator-fixed";
		regulator-name = "dummy_reg";
	};

	reg_usb_host_vbus: regulator-1 {
		compatible = "regulator-fixed";
		regulator-name = "usb_host_vbus";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&gpa3 5 GPIO_ACTIVE_LOW>;
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <1>;
		ranges;

		ramoops@f0000000 {
			compatible = "ramoops";
			reg = <0x0 0xf0000000 0x200000>;
			record-size = <0x20000>;
			console-size = <0x20000>;
			ftrace-size = <0x100000>;
			pmsg-size = <0x20000>;
		};
	};

	/*
	 * RTC clock (XrtcXTI); external, must be 32.768 kHz.
	 *
	 * TODO: Remove this once RTC clock is implemented properly as part of
	 *       PMIC driver.
	 */
	rtcclk: clock-rtcclk {
		compatible = "fixed-clock";
		clock-output-names = "rtcclk";
		#clock-cells = <0>;
		clock-frequency = <32768>;
	};
};

&cmu_hsi {
	clocks = <&oscclk>, <&rtcclk>,
		 <&cmu_top CLK_DOUT_HSI_BUS>,
		 <&cmu_top CLK_DOUT_HSI_MMC_CARD>,
		 <&cmu_top CLK_DOUT_HSI_USB20DRD>;
	clock-names = "oscclk", "rtcclk", "dout_hsi_bus",
		      "dout_hsi_mmc_card", "dout_hsi_usb20drd";
};

&mmc_0 {
	status = "okay";
	mmc-hs200-1_8v;
	mmc-hs400-1_8v;
	cap-mmc-highspeed;
	non-removable;
	mmc-hs400-enhanced-strobe;
	card-detect-delay = <200>;
	clock-frequency = <800000000>;
	bus-width = <8>;
	samsung,dw-mshc-ciu-div = <3>;
	samsung,dw-mshc-sdr-timing = <0 4>;
	samsung,dw-mshc-ddr-timing = <2 4>;
	samsung,dw-mshc-hs400-timing = <0 2>;

	pinctrl-names = "default";
	pinctrl-0 = <&sd0_clk_pins &sd0_cmd_pins &sd0_rdqs_pins &sd0_nreset_pins
		     &sd0_bus1_pins &sd0_bus4_pins &sd0_bus8_pins>;
};

&oscclk {
	clock-frequency = <26000000>;
};

&pinctrl_alive {
	key_voldown_pins: key-voldown-pins {
		samsung,pins = "gpa1-0";
		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
		samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
	};

	key_volup_pins: key-volup-pins {
		samsung,pins = "gpa0-7";
		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
		samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
	};

	micro_usb_det_pins: micro-usb-det-pins {
		samsung,pins = "gpa0-0";
		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
	};
};

&rtc {
	status = "okay";
	clocks = <&cmu_apm CLK_GOUT_RTC_PCLK>, <&rtcclk>;
	clock-names = "rtc", "rtc_src";
};

&serial_0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&uart1_pins>;
};

&usbdrd {
	status = "okay";
	vdd10-supply = <&reg_dummy>;
	vdd33-supply = <&reg_dummy>;
};

&usbdrd_dwc3 {
	dr_mode = "otg";
	usb-role-switch;
	role-switch-default-mode = "host";

	port {
		usb1_drd_sw: endpoint {
			remote-endpoint = <&usb_dr_connector>;
		};
	};
};

&usbdrd_phy {
	status = "okay";
};

&usi_uart {
	samsung,clkreq-on; /* needed for UART mode */
	status = "okay";
};

&watchdog_cl0 {
	status = "okay";
};

&watchdog_cl1 {
	status = "okay";
};
