// SPDX-License-Identifier: GPL-2.0
/*
 * Samsung's Exynos4210 based Origen board device tree source
 *
 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 * Copyright (c) 2010-2011 Linaro Ltd.
 *		www.linaro.org
 *
 * Device tree source file for Insignal's Origen board which is based on
 * Samsung's Exynos4210 SoC.
 */

/dts-v1/;
#include "exynos4210.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "exynos-mfc-reserved-memory.dtsi"

/ {
	model = "Insignal Origen evaluation board based on Exynos4210";
	compatible = "insignal,origen", "samsung,exynos4210", "samsung,exynos4";

	memory@40000000 {
		device_type = "memory";
		reg = <0x40000000 0x10000000
		       0x50000000 0x10000000
		       0x60000000 0x10000000
		       0x70000000 0x10000000>;
	};

	chosen {
		bootargs = "root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M init=/linuxrc";
		stdout-path = "serial2:115200n8";
	};

	mmc_reg: voltage-regulator {
		compatible = "regulator-fixed";
		regulator-name = "VMEM_VDD_2.8V";
		regulator-min-microvolt = <2800000>;
		regulator-max-microvolt = <2800000>;
		gpio = <&gpx1 1 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	gpio_keys {
		compatible = "gpio-keys";

		up {
			label = "Up";
			gpios = <&gpx2 0 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_UP>;
			wakeup-source;
		};

		down {
			label = "Down";
			gpios = <&gpx2 1 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_DOWN>;
			wakeup-source;
		};

		back {
			label = "Back";
			gpios = <&gpx1 7 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_BACK>;
			wakeup-source;
		};

		home {
			label = "Home";
			gpios = <&gpx1 6 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_HOME>;
			wakeup-source;
		};

		menu {
			label = "Menu";
			gpios = <&gpx1 5 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_MENU>;
			wakeup-source;
		};
	};

	leds {
		compatible = "gpio-leds";
		status {
			gpios = <&gpx1 3 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
		};
	};

	fixed-rate-clocks {
		xxti {
			compatible = "samsung,clock-xxti";
			clock-frequency = <0>;
		};

		xusbxti {
			compatible = "samsung,clock-xusbxti";
			clock-frequency = <24000000>;
		};

		pmic_ap_clk: pmic-ap-clk {
			/* Workaround for missing clock on max8997 PMIC */
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <32768>;
		};
	};

	display-timings {
		native-mode = <&timing0>;
		timing0: timing {
			clock-frequency = <47500000>;
			hactive = <1024>;
			vactive = <600>;
			hfront-porch = <64>;
			hback-porch = <16>;
			hsync-len = <48>;
			vback-porch = <64>;
			vfront-porch = <16>;
			vsync-len = <3>;
		};
	};
};

&cpu0 {
	cpu0-supply = <&buck1_reg>;
};

&cpu_thermal {
	cooling-maps {
		map0 {
			/* Corresponds to 800MHz */
			cooling-device = <&cpu0 2 2>;
		};
		map1 {
			/* Corresponds to 200MHz */
			cooling-device = <&cpu0 4 4>;
		};
	};
};

&exynos_usbphy {
	status = "okay";
};

&fimd {
	pinctrl-0 = <&lcd_en &lcd_clk &lcd_data24 &pwm0_out>;
	pinctrl-names = "default";
	status = "okay";
};

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

&hsotg {
	vusb_d-supply = <&ldo3_reg>;
	vusb_a-supply = <&ldo8_reg>;
	dr_mode = "peripheral";
	status = "okay";
};

&i2c_0 {
	status = "okay";
	samsung,i2c-sda-delay = <100>;
	samsung,i2c-max-bus-freq = <20000>;
	pinctrl-0 = <&i2c0_bus>;
	pinctrl-names = "default";

	max8997_pmic@66 {
		compatible = "maxim,max8997-pmic";
		reg = <0x66>;
		interrupt-parent = <&gpx0>;
		interrupts = <4 IRQ_TYPE_NONE>, <3 IRQ_TYPE_NONE>;
		pinctrl-names = "default";
		pinctrl-0 = <&max8997_irq>;

		max8997,pmic-buck1-dvs-voltage = <1350000>;
		max8997,pmic-buck2-dvs-voltage = <1100000>;
		max8997,pmic-buck5-dvs-voltage = <1200000>;

		regulators {
			ldo1_reg: LDO1 {
				regulator-name = "VDD_ABB_3.3V";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
			};

			ldo2_reg: LDO2 {
				regulator-name = "VDD_ALIVE_1.1V";
				regulator-min-microvolt = <1100000>;
				regulator-max-microvolt = <1100000>;
				regulator-always-on;
			};

			ldo3_reg: LDO3 {
				regulator-name = "VMIPI_1.1V";
				regulator-min-microvolt = <1100000>;
				regulator-max-microvolt = <1100000>;
			};

			ldo4_reg: LDO4 {
				regulator-name = "VDD_RTC_1.8V";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt	= <1800000>;
				regulator-always-on;
			};

			ldo6_reg: LDO6 {
				regulator-name = "VMIPI_1.8V";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt	= <1800000>;
				regulator-always-on;
			};

			ldo7_reg: LDO7 {
				regulator-name = "VDD_AUD_1.8V";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt	= <1800000>;
			};

			ldo8_reg: LDO8 {
				regulator-name = "VADC_3.3V";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt	= <3300000>;
			};

			ldo9_reg: LDO9 {
				regulator-name = "DVDD_SWB_2.8V";
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt	= <2800000>;
				regulator-always-on;
			};

			ldo10_reg: LDO10 {
				regulator-name = "VDD_PLL_1.1V";
				regulator-min-microvolt = <1100000>;
				regulator-max-microvolt	= <1100000>;
				regulator-always-on;
			};

			ldo11_reg: LDO11 {
				regulator-name = "VDD_AUD_3V";
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt	= <3000000>;
			};

			ldo14_reg: LDO14 {
				regulator-name = "AVDD18_SWB_1.8V";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt	= <1800000>;
				regulator-always-on;
			};

			ldo17_reg: LDO17 {
				regulator-name = "VDD_SWB_3.3V";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt	= <3300000>;
				regulator-always-on;
			};

			ldo21_reg: LDO21 {
				regulator-name = "VDD_MIF_1.2V";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt	= <1200000>;
				regulator-always-on;
			};

			buck1_reg: BUCK1 {
				regulator-name = "VDD_ARM_1.2V";
				regulator-min-microvolt = <950000>;
				regulator-max-microvolt	= <1350000>;
				regulator-always-on;
				regulator-boot-on;
			};

			buck2_reg: BUCK2 {
				regulator-name = "VDD_INT_1.1V";
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt	= <1100000>;
				regulator-always-on;
				regulator-boot-on;
			};

			buck3_reg: BUCK3 {
				regulator-name = "VDD_G3D_1.1V";
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <1100000>;
			};

			buck5_reg: BUCK5 {
				regulator-name = "VDDQ_M1M2_1.2V";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1200000>;
				regulator-always-on;
			};

			buck7_reg: BUCK7 {
				regulator-name = "VDD_LCD_3.3V";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-boot-on;
				regulator-always-on;
			};

			EN32KHZ_AP {
				regulator-name = "EN32KHZ_AP";
				regulator-always-on;
			};
		};
	};
};

&pinctrl_1 {
	max8997_irq: max8997-irq {
		samsung,pins = "gpx0-3", "gpx0-4";
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
	};
};

&sdhci_0 {
	bus-width = <4>;
	pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_cd>;
	pinctrl-names = "default";
	vmmc-supply = <&mmc_reg>;
	status = "okay";
};

&sdhci_2 {
	bus-width = <4>;
	pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
	pinctrl-names = "default";
	vmmc-supply = <&mmc_reg>;
	status = "okay";
};

&serial_0 {
	status = "okay";
};

&serial_1 {
	status = "okay";
};

&serial_2 {
	status = "okay";
};

&serial_3 {
	status = "okay";
};

&rtc {
	status = "okay";
	clocks = <&clock CLK_RTC>, <&pmic_ap_clk>;
	clock-names = "rtc", "rtc_src";
};

&tmu {
	status = "okay";
};
