// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2019 Linaro Ltd.
 * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 */

/dts-v1/;

#include "bm1880.dtsi"

/*
 * GPIO name legend: proper name = the GPIO line is used as GPIO
 *         NC = not connected (pin out but not routed from the chip to
 *              anything the board)
 *         "[PER]" = pin is muxed for [peripheral] (not GPIO)
 *         LSEC = Low Speed External Connector
 *         HSEC = High Speed External Connector
 *
 * Line names are taken from the schematic "sophon-edge-schematics"
 * version, 1.0210.
 *
 * 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. 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.
 */

/ {
	compatible = "bitmain,sophon-edge", "bitmain,bm1880";
	model = "Sophon Edge";

	aliases {
		serial0 = &uart0;
		serial1 = &uart2;
		serial2 = &uart1;
	};

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

	memory@0 {
		device_type = "memory";
		reg = <0x1 0x00000000 0x0 0x40000000>; // 1GB
	};

	uart_clk: uart-clk {
		compatible = "fixed-clock";
		clock-frequency = <500000000>;
		#clock-cells = <0>;
	};

	soc {
		gpio0: gpio@50027000 {
			porta: gpio-controller@0 {
				gpio-line-names =
					"GPIO-A", /* GPIO0, LSEC pin 23 */
					"GPIO-C", /* GPIO1, LSEC pin 25 */
					"[GPIO2_PHY0_RST]", /* GPIO2 */
					"GPIO-E", /* GPIO3, LSEC pin 27 */
					"[USB_DET]", /* GPIO4 */
					"[EN_P5V]", /* GPIO5 */
					"[VDDIO_MS1_SEL]", /* GPIO6 */
					"GPIO-G", /* GPIO7, LSEC pin 29 */
					"[BM_TUSB_RST_L]", /* GPIO8 */
					"[EN_P5V_USBHUB]", /* GPIO9 */
					"NC",
					"LED_WIFI", /* GPIO11 */
					"LED_BT", /* GPIO12 */
					"[BM_BLM8221_EN_L]", /* GPIO13 */
					"NC", /* GPIO14 */
					"NC", /* GPIO15 */
					"NC", /* GPIO16 */
					"NC", /* GPIO17 */
					"NC", /* GPIO18 */
					"NC", /* GPIO19 */
					"NC", /* GPIO20 */
					"NC", /* GPIO21 */
					"NC", /* GPIO22 */
					"NC", /* GPIO23 */
					"NC", /* GPIO24 */
					"NC", /* GPIO25 */
					"NC", /* GPIO26 */
					"NC", /* GPIO27 */
					"NC", /* GPIO28 */
					"NC", /* GPIO29 */
					"NC", /* GPIO30 */
					"NC"; /* GPIO31 */
			};
		};

		gpio1: gpio@50027400 {
			portb: gpio-controller@0 {
				gpio-line-names =
					"NC", /* GPIO32 */
					"NC", /* GPIO33 */
					"[I2C0_SDA]", /* GPIO34, LSEC pin 17 */
					"[I2C0_SCL]", /* GPIO35, LSEC pin 15 */
					"[JTAG0_TDO]", /* GPIO36 */
					"[JTAG0_TCK]", /* GPIO37 */
					"[JTAG0_TDI]", /* GPIO38 */
					"[JTAG0_TMS]", /* GPIO39 */
					"[JTAG0_TRST_X]", /* GPIO40 */
					"[JTAG1_TDO]", /* GPIO41 */
					"[JTAG1_TCK]", /* GPIO42 */
					"[JTAG1_TDI]", /* GPIO43 */
					"[CPU_TX]", /* GPIO44 */
					"[CPU_RX]", /* GPIO45 */
					"[UART1_TXD]", /* GPIO46 */
					"[UART1_RXD]", /* GPIO47 */
					"[UART0_TXD]", /* GPIO48 */
					"[UART0_RXD]", /* GPIO49 */
					"GPIO-I", /* GPIO50, LSEC pin 31 */
					"GPIO-K", /* GPIO51, LSEC pin 33 */
					"USER_LED2", /* GPIO52 */
					"USER_LED1", /* GPIO53 */
					"[UART0_RTS]", /* GPIO54 */
					"[UART0_CTS]", /* GPIO55 */
					"USER_LED4", /* GPIO56, JTAG1_TRST_X */
					"USER_LED3", /* GPIO57, JTAG1_TMS */
					"[I2S0_SCLK]", /* GPIO58 */
					"[I2S0_FS]", /* GPIO59 */
					"[I2S0_SDI]", /* GPIO60 */
					"[I2S0_SDO]", /* GPIO61 */
					"GPIO-B", /* GPIO62, LSEC pin 24 */
					"GPIO-F"; /* GPIO63, I2S1_SCLK, LSEC pin 28 */
			};
		};

		gpio2: gpio@50027800 {
			portc: gpio-controller@0 {
				gpio-line-names =
					"GPIO-D", /* GPIO64, I2S1_FS, LSEC pin 26 */
					"GPIO-J", /* GPIO65, I2S1_SDI, LSEC pin 32 */
					"GPIO-H", /* GPIO66, I2S1_SDO, LSEC pin 30 */
					"GPIO-L", /* GPIO67, LSEC pin 34 */
					"[SPI0_CS]", /* GPIO68, SPI1_CS, LSEC pin 12 */
					"[SPI0_DIN]", /* GPIO69, SPI1_SDI, LSEC pin 10 */
					"[SPI0_DOUT]", /* GPIO70, SPI1_SDO, LSEC pin 14 */
					"[SPI0_SCLK]"; /* GPIO71, SPI1_SCK, LSEC pin 8 */
			};
		};
	};
};

&pinctrl {
	pinctrl_uart0_default: pinctrl-uart0-default {
		pinmux {
			groups = "uart0_grp";
			function = "uart0";
		};
	};

	pinctrl_uart1_default: pinctrl-uart1-default {
		pinmux {
			groups = "uart1_grp";
			function = "uart1";
		};
	};

	pinctrl_uart2_default: pinctrl-uart2-default {
		pinmux {
			groups = "uart2_grp";
			function = "uart2";
		};
	};
};

&uart0 {
	status = "okay";
	clocks = <&uart_clk>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart0_default>;
};

&uart1 {
	status = "okay";
	clocks = <&uart_clk>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1_default>;
};

&uart2 {
	status = "okay";
	clocks = <&uart_clk>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2_default>;
};
