/*
 * Copyright (c) 2020 Stephane Dorre <stephane.dorre@gmail.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * DTS for Pine64 PineTime DevKit-0 board
 * Further info: https://wiki.pine64.org/index.php/PineTime
 *
 */

/dts-v1/;
#include <nordic/nrf52832_qfaa.dtsi>
#include "pinetime_devkit0-pinctrl.dtsi"

/ {
	model = "Pine64 PineTime DevKit0";
	compatible = "pine64,pinetime-devkit0";

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,bt-mon-uart = &uart0;
		zephyr,bt-c2h-uart = &uart0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,display = &st7789v;
		zephyr,keyboard-scan = &cst816s;
	};

	aliases {
		led0 = &blled0;	/* backlight low */
		led1 = &blled1;	/* backlight mid */
		led2 = &blled2;	/* backlight high */
		led3 = &statusled;	/* status led, may be not populated */
		sw0 = &key_in;  /* key in */
		kscan0 = &cst816s;
		watchdog0 = &wdt0;
	};

	leds {
		compatible = "gpio-leds";
		blled0: bl_led_0 {
			gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
			label = "Backlight Low";
		};
		blled1: bl_led_1 {
			gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
			label = "Backlight Medium";
		};
		blled2: bl_led_2 {
			gpios = <&gpio0 23 GPIO_ACTIVE_LOW>;
			label = "Backlight High";
		};
		statusled: led_3 {
			gpios = <&gpio0 27 GPIO_ACTIVE_LOW>;
			label = "Status Led";
		};
	};

	buttons {
		compatible = "gpio-keys";
		key_in: button_0 {
			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
			label = "Key in";
		};
	};
	key_out {
		compatible = "pine64,pinetime-key-out";
		gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
	};

	vbatt {
		compatible = "voltage-divider";
		io-channels = <&adc 7>;
		output-ohms = <1000000>;
		full-ohms = <(1000000 + 1000000)>;
	};
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&uart0 {
	compatible = "nordic,nrf-uart";
	current-speed = <115200>;
	status = "okay";
	pinctrl-0 = <&uart0_default>;
	pinctrl-1 = <&uart0_sleep>;
	pinctrl-names = "default", "sleep";
};

&i2c0 {
	compatible = "nordic,nrf-twim";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>; /* 400KHz */

	/* BOSCH BMA421 Triaxial Acceleration Sensor (1000KHz) */
	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_sleep>;
	pinctrl-names = "default", "sleep";
	bma421: bma421@18 {
		compatible = "bosch,bma4xx";
		reg = <0x18>;
		int1-gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
	};

	/* TianYiHeXin HRS3300 PPG Hear Rate Sensor (800KHz) */
	hrs3300: hrs3300@44 {
		compatible = "tian-yi-he-xin-hrs3300";
		reg = <0x44>;
	};

	/* Hynitron CST816S Capacitive Touch Controller (400KHz) */
	cst816s: cst816s@15 {
		compatible = "hynitron,cst816s";
		reg = <0x15>;
		irq-gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
		rst-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
	};
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";

	cs-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>, <&gpio0 25 GPIO_ACTIVE_LOW>;

	pinctrl-0 = <&spi1_default>;
	pinctrl-1 = <&spi1_sleep>;
	pinctrl-names = "default", "sleep";
	xt25fb32: xt25fb32@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <8000000>; /* 8MHz */
		jedec-id = [0b 40 16];
		size = <DT_SIZE_M(32)>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			/* next firmware update */
			slot1_partition: partition@0 {
				label = "image-1";
				reg = <0x00000000 0x74000>;
			};

			/* to be used in firmware */
			storage_partition: partition@300000 {
				label = "storage";
				reg = <0x00300000 0x00100000>;
			};
		};
	};

	/* Sitronix ST7789V LCD */
	st7789v: st7789v@1 {
		compatible = "sitronix,st7789v";
		reg = <1>;
		spi-max-frequency = <8000000>; /* 8MHz */
		cmd-data-gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;	/* DET */
		reset-gpios = <&gpio0 26 GPIO_ACTIVE_LOW>;	/* RESX reset */
		width = <240>;
		height = <240>;
		x-offset = <0>;
		y-offset = <0>;
		vcom = <0x19>;
		gctrl = <0x35>;
		vrhs = <0x12>;
		vdvs = <0x20>;
		mdac = <0x00>;
		gamma = <0x01>;
		colmod = <0x05>;
		lcm = <0x2c>;
		porch-param = [0c 0c 00 33 33];
		cmd2en-param = [5a 69 02 01];
		pwctrl1-param = [a4 a1];
		pvgam-param = [D0 04 0D 11 13 2B 3F 54 4C 18 0D 0B 1F 23];
		nvgam-param = [D0 04 0C 11 13 2C 3F 44 51 2F 1F 1F 20 23];
		ram-param = [00 F0];
		rgb-param = [CD 08 14];
	};
};

&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/* MCUboot bootloader */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0xc000>;
		};

		/* main firmware partition */
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x74000>;
		};
	};
};
