// SPDX-License-Identifier: GPL-2.0
/*
 * dts file for Hisilicon HiKey Development Board
 *
 * Copyright (C) 2015, HiSilicon Ltd.
 *
 */

/dts-v1/;
#include "hi6220.dtsi"
#include "hikey-pinctrl.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	model = "HiKey Development Board";
	compatible = "hisilicon,hi6220-hikey", "hisilicon,hi6220";

	aliases {
		serial0 = &uart0; /* On board UART0 */
		serial1 = &uart1; /* BT UART */
		serial2 = &uart2; /* LS Expansion UART0 */
		serial3 = &uart3; /* LS Expansion UART1 */
	};

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

	/*
	 * Reserve below regions from memory node:
	 *
	 *  0x05e0,0000 - 0x05ef,ffff: MCU firmware runtime using
	 *  0x05f0,1000 - 0x05f0,1fff: Reboot reason
	 *  0x06df,f000 - 0x06df,ffff: Mailbox message data
	 *  0x0740,f000 - 0x0740,ffff: MCU firmware section
	 *  0x21f0,0000 - 0x21ff,ffff: pstore/ramoops buffer
	 *  0x3e00,0000 - 0x3fff,ffff: OP-TEE
	 */
	memory@0 {
		device_type = "memory";
		reg = <0x00000000 0x00000000 0x00000000 0x05e00000>,
		      <0x00000000 0x05f00000 0x00000000 0x00001000>,
		      <0x00000000 0x05f02000 0x00000000 0x00efd000>,
		      <0x00000000 0x06e00000 0x00000000 0x0060f000>,
		      <0x00000000 0x07410000 0x00000000 0x1aaf0000>,
		      <0x00000000 0x22000000 0x00000000 0x1c000000>;
	};

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

		ramoops@21f00000 {
			compatible = "ramoops";
			reg = <0x0 0x21f00000 0x0 0x00100000>;
			record-size	= <0x00020000>;
			console-size	= <0x00020000>;
			ftrace-size	= <0x00020000>;
		};

		/* global autoconfigured region for contiguous allocations */
		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			size = <0x00000000 0x08000000>;
			linux,cma-default;
		};
	};

	reboot-mode-syscon@5f01000 {
		compatible = "syscon", "simple-mfd";
		reg = <0x0 0x05f01000 0x0 0x00001000>;

		reboot-mode {
			compatible = "syscon-reboot-mode";
			offset = <0x0>;

			mode-normal	= <0x77665501>;
			mode-bootloader	= <0x77665500>;
			mode-recovery	= <0x77665502>;
		};
	};

	reg_sys_5v: regulator@0 {
		compatible = "regulator-fixed";
		regulator-name = "SYS_5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-boot-on;
		regulator-always-on;
	};

	reg_vdd_3v3: regulator@1 {
		compatible = "regulator-fixed";
		regulator-name = "VDD_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
		vin-supply = <&reg_sys_5v>;
	};

	reg_5v_hub: regulator@2 {
		compatible = "regulator-fixed";
		regulator-name = "5V_HUB";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-boot-on;
		gpio = <&gpio0 7 0>;
		regulator-always-on;
		vin-supply = <&reg_sys_5v>;
	};

	wl1835_pwrseq: wl1835-pwrseq {
		compatible = "mmc-pwrseq-simple";
		/* WLAN_EN GPIO */
		reset-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
		clocks = <&pmic>;
		clock-names = "ext_clock";
		post-power-on-delay-ms = <10>;
		power-off-delay-us = <10>;
	};

	leds {
		compatible = "gpio-leds";

		user_led1 {
			label = "green:user1";
			gpios = <&gpio4 0 0>; /* <&gpio_user_led_1>; */
			linux,default-trigger = "heartbeat";
		};

		user_led2 {
			label = "green:user2";
			gpios = <&gpio4 1 0>; /* <&gpio_user_led_2>; */
			linux,default-trigger = "mmc0";
		};

		user_led3 {
			label = "green:user3";
			gpios = <&gpio4 2 0>; /* <&gpio_user_led_3>; */
			linux,default-trigger = "mmc1";
		};

		user_led4 {
			label = "green:user4";
			gpios = <&gpio4 3 0>; /* <&gpio_user_led_4>; */
			panic-indicator;
			linux,default-trigger = "none";
		};

		wlan_active_led {
			label = "yellow:wlan";
			gpios = <&gpio3 5 0>; /* <&gpio_wlan_active_led>; */
			linux,default-trigger = "phy0tx";
			default-state = "off";
		};

		bt_active_led {
			label = "blue:bt";
			gpios = <&gpio4 7 0>; /* <&gpio_bt_active_led>; */
			linux,default-trigger = "hci0-power";
			default-state = "off";
		};
	};

	pmic: pmic@f8000000 {
		compatible = "hisilicon,hi655x-pmic";
		reg = <0x0 0xf8000000 0x0 0x1000>;
		#clock-cells = <0>;
		interrupt-controller;
		#interrupt-cells = <2>;
		pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;

		regulators {
			ldo2: LDO2 {
				regulator-name = "LDO2_2V8";
				regulator-min-microvolt = <2500000>;
				regulator-max-microvolt = <3200000>;
				regulator-enable-ramp-delay = <120>;
			};

			ldo7: LDO7 {
				regulator-name = "LDO7_SDIO";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-enable-ramp-delay = <120>;
			};

			ldo10: LDO10 {
				regulator-name = "LDO10_2V85";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3000000>;
				regulator-enable-ramp-delay = <360>;
			};

			ldo13: LDO13 {
				regulator-name = "LDO13_1V8";
				regulator-min-microvolt = <1600000>;
				regulator-max-microvolt = <1950000>;
				regulator-enable-ramp-delay = <120>;
			};

			ldo14: LDO14 {
				regulator-name = "LDO14_2V8";
				regulator-min-microvolt = <2500000>;
				regulator-max-microvolt = <3200000>;
				regulator-enable-ramp-delay = <120>;
			};

			ldo15: LDO15 {
				regulator-name = "LDO15_1V8";
				regulator-min-microvolt = <1600000>;
				regulator-max-microvolt = <1950000>;
				regulator-boot-on;
				regulator-always-on;
				regulator-enable-ramp-delay = <120>;
			};

			ldo17: LDO17 {
				regulator-name = "LDO17_2V5";
				regulator-min-microvolt = <2500000>;
				regulator-max-microvolt = <3200000>;
				regulator-enable-ramp-delay = <120>;
			};

			ldo19: LDO19 {
				regulator-name = "LDO19_3V0";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3000000>;
				regulator-enable-ramp-delay = <360>;
			};

			ldo21: LDO21 {
				regulator-name = "LDO21_1V8";
				regulator-min-microvolt = <1650000>;
				regulator-max-microvolt = <2000000>;
				regulator-always-on;
				regulator-enable-ramp-delay = <120>;
			};

			ldo22: LDO22 {
				regulator-name = "LDO22_1V2";
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <1200000>;
				regulator-boot-on;
				regulator-always-on;
				regulator-enable-ramp-delay = <120>;
			};
		};
	};

	firmware {
		optee {
			compatible = "linaro,optee-tz";
			method = "smc";
		};
	};

	sound_card {
		compatible = "audio-graph-card";
		dais = <&i2s0_port0>;
	};
};

&uart1 {
	assigned-clocks = <&sys_ctrl HI6220_UART1_SRC>;
	assigned-clock-rates = <150000000>;
	status = "okay";

	bluetooth {
		compatible = "ti,wl1835-st";
		enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
		clocks = <&pmic>;
		clock-names = "ext_clock";
	};
};

&uart2 {
	status = "okay";
	label = "LS-UART0";
};

&uart3 {
	status = "okay";
	label = "LS-UART1";
};

&ade {
	status = "okay";
};

&dsi {
	status = "okay";

	ports {
		/* 1 for output port */
		port@1 {
			reg = <1>;

			dsi_out0: endpoint@0 {
				remote-endpoint = <&adv7533_in>;
			};
		};
	};
};

&dwmmc_0 {
	cap-mmc-highspeed;
	non-removable;
	bus-width = <0x8>;
	vmmc-supply = <&ldo19>;
};

&dwmmc_1 {
	card-detect-delay = <200>;
	cap-sd-highspeed;
	sd-uhs-sdr12;
	sd-uhs-sdr25;
	sd-uhs-sdr50;
	vqmmc-supply = <&ldo7>;
	vmmc-supply = <&ldo10>;
	bus-width = <0x4>;
	disable-wp;
	cd-gpios = <&gpio1 0 1>;
};

&dwmmc_2 {
	bus-width = <0x4>;
	non-removable;
	cap-power-off-card;
	vmmc-supply = <&reg_vdd_3v3>;
	mmc-pwrseq = <&wl1835_pwrseq>;

	#address-cells = <0x1>;
	#size-cells = <0x0>;
	wlcore: wlcore@2 {
		compatible = "ti,wl1835";
		reg = <2>;	/* sdio func num */
		/* WL_IRQ, WL_HOST_WAKE_GPIO1_3 */
		interrupt-parent = <&gpio1>;
		interrupts = <3 IRQ_TYPE_EDGE_RISING>;
	};
};

/*
 * Legend: proper name = the GPIO line is used as GPIO
 *         NC = not connected (not routed from the SoC)
 *         "[PER]" = pin is muxed for peripheral (not GPIO)
 *         "" = no idea, schematic doesn't say, could be
 *              unrouted (not connected to any external pin)
 *         LSEC = Low Speed External Connector
 *         HSEC = High Speed External Connector
 *
 * Pin assignments taken from LeMaker and CircuitCo Schematics
 * Rev A1.
 *
 * For the lines routed to the external connectors the
 * lines are named after the 96Boards CE Specification 1.0,
 * Appendix "Expansion Connector Signal Description".
 *
 * When the 96Board naming of a line and the schematic name of
 * the same line are in conflict, the 96Board specification
 * takes precedence, which means that the external UART on the
 * LSEC is named UART0 while the schematic and SoC names this
 * UART2. This is only for the informational lines i.e. "[FOO]",
 * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
 * ones actually used for GPIO.
 */
&gpio0 {
	gpio-line-names = "PWR_HOLD", "DSI_SEL",
	"USB_HUB_RESET_N", "USB_SEL", "HDMI_PD", "WL_REG_ON",
	"PWRON_DET", "5V_HUB_EN";
};

&gpio1 {
	gpio-line-names = "SD_DET", "HDMI_INT", "PMU_IRQ_N",
	"WL_HOST_WAKE", "NC", "NC", "NC", "BT_REG_ON";
};

&gpio2 {
	gpio-line-names =
		"GPIO-A", /* LSEC Pin 23: GPIO2_0 */
		"GPIO-B", /* LSEC Pin 24: GPIO2_1 */
		"GPIO-C", /* LSEC Pin 25: GPIO2_2 */
		"GPIO-D", /* LSEC Pin 26: GPIO2_3 */
		"GPIO-E", /* LSEC Pin 27: GPIO2_4 */
		"USB_ID_DET", "USB_VBUS_DET",
		"GPIO-H"; /* LSEC Pin 30: GPIO2_7 */
};

&gpio3 {
	gpio-line-names = "GPIO3_0", "NC", "NC", "", "NC", "",
	"WLAN_ACTIVE", "NC", "NC";
};

&gpio4 {
	gpio-line-names = "USER_LED1", "USER_LED2", "USER_LED3",
	"USER_LED4", "SD_SEL", "NC", "NC", "BT_ACTIVE";
};

&gpio5 {
	gpio-line-names = "NC", "NC",
	"[UART1_RxD]", /* LSEC Pin 11: UART3_RX */
	"[UART1_TxD]", /* LSEC Pin 13: UART3_TX */
	"[AUX_SSI1]", "NC",
	"[PCM_CLK]", /* LSEC Pin 18: MODEM_PCM_XCLK */
	"[PCM_FS]"; /* LSEC Pin 16: MODEM_PCM_XFS */
};

&gpio6 {
	gpio-line-names =
	"[SPI0_DIN]", /* Pin 10: SPI0_DI */
	"[SPI0_DOUT]", /* Pin 14: SPI0_DO */
	"[SPI0_CS]", /* Pin 12: SPI0_CS_N */
	"[SPI0_SCLK]", /* Pin 8: SPI0_SCLK */
	"NC", "NC", "NC",
	"GPIO-G"; /* Pin 29: GPIO6_7_DSI_TE0 */
};

&gpio7 {
	gpio-line-names = "NC", "NC", "NC", "NC",
	"[PCM_DI]", /* Pin 22: MODEM_PCM_DI */
	"[PCM_DO]", /* Pin 20: MODEM_PCM_DO */
	"NC", "NC";
};

&gpio8 {
	gpio-line-names = "NC", "[CEC_CLK_19_2MHZ]", "NC",
	"", "", "", "", "", "";
};

&gpio9 {
	gpio-line-names = "",
	"GPIO-J", /* LSEC Pin 32: ISP_PWDN0_GPIO9_1 */
	"GPIO-L", /* LSEC Pin 34: ISP_PWDN1_GPIO9_2 */
	"NC", "NC", "NC", "NC", "[ISP_CCLK0]";
};

&gpio10 {
	gpio-line-names = "BOOT_SEL",
	"[ISP_CCLK1]",
	"GPIO-I", /* LSEC Pin 31: ISP_RSTB0_GPIO10_2 */
	"GPIO-K", /* LSEC Pin 33: ISP_RSTB1_GPIO10_3 */
	"NC", "NC",
	"[I2C2_SDA]", /* HSEC Pin 34: ISP0_SDA */
	"[I2C2_SCL]"; /* HSEC Pin 32: ISP0_SCL */
};

&gpio11 {
	gpio-line-names =
	"[I2C3_SDA]", /* HSEC Pin 38: ISP1_SDA */
	"[I2C3_SCL]", /* HSEC Pin 36: ISP1_SCL */
	"", "NC", "NC", "NC", "", "";
};

&gpio12 {
	gpio-line-names = "[BT_PCM_XFS]", "[BT_PCM_DI]",
	"[BT_PCM_DO]",
	"NC", "NC", "NC", "NC",
	"GPIO-F"; /* LSEC Pin 28: BL_PWM_GPIO12_7 */
};

&gpio13 {
	gpio-line-names = "[UART0_RX]", "[UART0_TX]",
	"[BT_UART1_CTS]", "[BT_UART1_RTS]",
	"[BT_UART1_RX]", "[BT_UART1_TX]",
	"[UART0_CTS]", /* LSEC Pin 3: UART2_CTS_N */
	"[UART0_RTS]"; /* LSEC Pin 9: UART2_RTS_N */
};

&gpio14 {
	gpio-line-names =
	"[UART0_RxD]", /* LSEC Pin 7: UART2_RX */
	"[UART0_TxD]", /* LSEC Pin 5: UART2_TX */
	"[I2C0_SCL]", /* LSEC Pin 15: I2C0_SCL */
	"[I2C0_SDA]", /* LSEC Pin 17: I2C0_SDA */
	"[I2C1_SCL]", /* LSEC Pin 19: I2C1_SCL */
	"[I2C1_SDA]", /* LSEC Pin 21: I2C1_SDA */
	"[I2C2_SCL]", "[I2C2_SDA]";
};

&gpio15 {
	gpio-line-names = "", "", "", "", "", "", "NC", "";
};

/* GPIO blocks 16 thru 19 do not appear to be routed to pins */


&i2c0 {
	status = "okay";
};

&i2c1 {
	status = "okay";
};

&i2c2 {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	adv7533: adv7533@39 {
		compatible = "adi,adv7533";
		reg = <0x39>;
		interrupt-parent = <&gpio1>;
		interrupts = <1 2>;
		pd-gpios = <&gpio0 4 0>;
		adi,dsi-lanes = <4>;
		#sound-dai-cells = <0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				adv7533_in: endpoint {
					remote-endpoint = <&dsi_out0>;
				};
			};
			port@2 {
				reg = <2>;
				codec_endpoint: endpoint {
					remote-endpoint = <&i2s0_cpu_endpoint>;
				};
			};
		};
	};
};

&i2s0 {

	ports {
		i2s0_port0: port@0 {
			i2s0_cpu_endpoint: endpoint {
				remote-endpoint = <&codec_endpoint>;
				dai-format = "i2s";
			};
		};
	};
};

&spi0 {
	status = "okay";
};
