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

	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";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart0_default>;
};

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

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