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

		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";

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

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