// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2019-20 Sean Anderson <seanga2@gmail.com>
 * Copyright (C) 2020 Western Digital Corporation or its affiliates.
 */

/dts-v1/;

#include "k210.dtsi"

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

/ {
	model = "SiPeed MAIX Dock";
	compatible = "sipeed,maix-dock-m1", "sipeed,maix-dock-m1w",
		     "canaan,kendryte-k210";

	chosen {
		bootargs = "earlycon console=ttySIF0";
		stdout-path = "serial0:115200n8";
	};

	gpio-leds {
		compatible = "gpio-leds";

		/*
		 * Note: the board wiring drawing documents green on
		 * gpio #4, red on gpio #5 and blue on gpio #6. However,
		 * the board is actually wired differently as defined here.
		 */
		led0 {
			color = <LED_COLOR_ID_BLUE>;
			label = "blue";
			gpios = <&gpio1_0 4 GPIO_ACTIVE_LOW>;
		};

		led1 {
			color = <LED_COLOR_ID_GREEN>;
			label = "green";
			gpios = <&gpio1_0 5 GPIO_ACTIVE_LOW>;
		};

		led2 {
			color = <LED_COLOR_ID_RED>;
			label = "red";
			gpios = <&gpio1_0 6 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		key-boot {
			label = "BOOT";
			linux,code = <BTN_0>;
			gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
		};
	};
};

&fpioa {
	pinctrl-0 = <&jtag_pinctrl>;
	pinctrl-names = "default";
	status = "okay";

	jtag_pinctrl: jtag-pinmux {
		pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
			 <K210_FPIOA(1, K210_PCF_JTAG_TDI)>,
			 <K210_FPIOA(2, K210_PCF_JTAG_TMS)>,
			 <K210_FPIOA(3, K210_PCF_JTAG_TDO)>;
	};

	uarths_pinctrl: uarths-pinmux {
		pinmux = <K210_FPIOA(4, K210_PCF_UARTHS_RX)>,
			 <K210_FPIOA(5, K210_PCF_UARTHS_TX)>;
	};

	gpio_pinctrl: gpio-pinmux {
		pinmux = <K210_FPIOA(8, K210_PCF_GPIO0)>,
			 <K210_FPIOA(11, K210_PCF_GPIO3)>,
			 <K210_FPIOA(12, K210_PCF_GPIO4)>,
			 <K210_FPIOA(13, K210_PCF_GPIO5)>,
			 <K210_FPIOA(14, K210_PCF_GPIO6)>,
			 <K210_FPIOA(15, K210_PCF_GPIO7)>;
	};

	gpiohs_pinctrl: gpiohs-pinmux {
		pinmux = <K210_FPIOA(16, K210_PCF_GPIOHS0)>,
			 <K210_FPIOA(17, K210_PCF_GPIOHS1)>,
			 <K210_FPIOA(21, K210_PCF_GPIOHS5)>,
			 <K210_FPIOA(22, K210_PCF_GPIOHS6)>,
			 <K210_FPIOA(23, K210_PCF_GPIOHS7)>,
			 <K210_FPIOA(24, K210_PCF_GPIOHS8)>,
			 <K210_FPIOA(25, K210_PCF_GPIOHS9)>,
			 <K210_FPIOA(32, K210_PCF_GPIOHS16)>,
			 <K210_FPIOA(33, K210_PCF_GPIOHS17)>,
			 <K210_FPIOA(34, K210_PCF_GPIOHS18)>,
			 <K210_FPIOA(35, K210_PCF_GPIOHS19)>;
	};

	i2s0_pinctrl: i2s0-pinmux {
		pinmux = <K210_FPIOA(18, K210_PCF_I2S0_SCLK)>,
			 <K210_FPIOA(19, K210_PCF_I2S0_WS)>,
			 <K210_FPIOA(20, K210_PCF_I2S0_IN_D0)>;
	};

	dvp_pinctrl: dvp-pinmux {
		pinmux = <K210_FPIOA(40, K210_PCF_SCCB_SDA)>,
			 <K210_FPIOA(41, K210_PCF_SCCB_SCLK)>,
			 <K210_FPIOA(42, K210_PCF_DVP_RST)>,
			 <K210_FPIOA(43, K210_PCF_DVP_VSYNC)>,
			 <K210_FPIOA(44, K210_PCF_DVP_PWDN)>,
			 <K210_FPIOA(45, K210_PCF_DVP_HSYNC)>,
			 <K210_FPIOA(46, K210_PCF_DVP_XCLK)>,
			 <K210_FPIOA(47, K210_PCF_DVP_PCLK)>;
	};

	spi0_pinctrl: spi0-pinmux {
		pinmux = <K210_FPIOA(36, K210_PCF_GPIOHS20)>,  /* cs */
			 <K210_FPIOA(37, K210_PCF_GPIOHS21)>,  /* rst */
			 <K210_FPIOA(38, K210_PCF_GPIOHS22)>,  /* dc */
			 <K210_FPIOA(39, K210_PCF_SPI0_SCLK)>; /* wr */
	};

	spi1_pinctrl: spi1-pinmux {
		pinmux = <K210_FPIOA(26, K210_PCF_SPI1_D1)>,
			 <K210_FPIOA(27, K210_PCF_SPI1_SCLK)>,
			 <K210_FPIOA(28, K210_PCF_SPI1_D0)>,
			 <K210_FPIOA(29, K210_PCF_GPIOHS13)>; /* cs */
	};

	i2c1_pinctrl: i2c1-pinmux {
		pinmux = <K210_FPIOA(9, K210_PCF_I2C1_SCLK)>,
			 <K210_FPIOA(10, K210_PCF_I2C1_SDA)>;
	};
};

&uarths0 {
	pinctrl-0 = <&uarths_pinctrl>;
	pinctrl-names = "default";
	status = "okay";
};

&gpio0 {
	pinctrl-0 = <&gpiohs_pinctrl>;
	pinctrl-names = "default";
	status = "okay";
};

&gpio1 {
	pinctrl-0 = <&gpio_pinctrl>;
	pinctrl-names = "default";
	status = "okay";
};

&i2s0 {
	#sound-dai-cells = <1>;
	pinctrl-0 = <&i2s0_pinctrl>;
	pinctrl-names = "default";
};

&i2c1 {
	pinctrl-0 = <&i2c1_pinctrl>;
	pinctrl-names = "default";
	clock-frequency = <400000>;
	status = "okay";
};

&spi0 {
	pinctrl-0 = <&spi0_pinctrl>;
	pinctrl-names = "default";
	num-cs = <1>;
	cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;

	panel@0 {
		compatible = "sitronix,st7789v";
		reg = <0>;
		reset-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
		dc-gpios = <&gpio0 22 0>;
		spi-max-frequency = <15000000>;
		status = "disabled";
	};
};

&spi1 {
	pinctrl-0 = <&spi1_pinctrl>;
	pinctrl-names = "default";
	num-cs = <1>;
	cs-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
	status = "okay";

	mmc@0 {
		compatible = "mmc-spi-slot";
		reg = <0>;
		voltage-ranges = <3300 3300>;
		spi-max-frequency = <25000000>;
		broken-cd;
	};
};

&spi3 {
	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <50000000>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		m25p,fast-read;
		broken-flash-reset;
	};
};
