// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2019-20 Sean Anderson <seanga2@gmail.com>
 */

/dts-v1/;

#include "k210.dtsi"

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

/ {
	model = "Sipeed Maix Bit 2.0";
	compatible = "sipeed,maix-bitm", "sipeed,maix-bit",
		     "canaan,kendryte-k210";

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

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

		green {
			gpios = <&gpio1_0 4 GPIO_ACTIVE_LOW>;
		};

		red {
			gpios = <&gpio1_0 5 GPIO_ACTIVE_LOW>;
		};

		blue {
			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>;
		};
	};

	sound {
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		status = "disabled";

		simple-audio-card,cpu {
			sound-dai = <&i2s0 0>;
		};

		simple-audio-card,codec {
			sound-dai = <&mic>;
		};
	};

	mic: mic {
		#sound-dai-cells = <0>;
		compatible = "memsensing,msm61s4030h0";
		status = "disabled";
	};
};

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

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

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

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

&fpioa {
	status = "okay";

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

	fpioa_gpio: gpio {
		pinmux = <K210_FPIOA(8, K210_PCF_GPIO0)>,
			 <K210_FPIOA(9, K210_PCF_GPIO1)>,
			 <K210_FPIOA(10, K210_PCF_GPIO2)>,
			 <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)>;
	};

	fpioa_gpiohs: gpiohs {
		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(30, K210_PCF_GPIOHS14)>,
			 <K210_FPIOA(31, K210_PCF_GPIOHS15)>,
			 <K210_FPIOA(32, K210_PCF_GPIOHS16)>,
			 <K210_FPIOA(33, K210_PCF_GPIOHS17)>,
			 <K210_FPIOA(34, K210_PCF_GPIOHS18)>,
			 <K210_FPIOA(35, K210_PCF_GPIOHS19)>;
	};

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

	fpioa_dvp: dvp {
		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)>;
	};

	fpioa_spi0: spi0 {
		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 */
	};

	fpioa_spi1: spi1 {
		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 */
	};
};

&dvp0 {
	pinctrl-0 = <&fpioa_dvp>;
	pinctrl-names = "default";
};

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

	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 = <&fpioa_spi1>;
	pinctrl-names = "default";
	num-cs = <1>;
	cs-gpios = <&gpio0 13 0>;
	status = "okay";

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

&spi3 {
	status = "okay";

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