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

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

	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>;
		label = "Key out";
	};

	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>;
		label = "BMA421";
		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>;
		label = "HRS3300";
	};

	/* Hynitron CST816S Capacitive Touch Controller (400KHz) */
	cst816s: cst816s@15 {
		compatible = "hynitron,cst816s";
		reg = <0x15>;
		label = "CST816S";
		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 */
		label = "XT25FB32";
		jedec-id = [0b 40 16];
		size = <DT_SIZE_M(32)>;
	};

	/* Sitronix ST7789V LCD */
	st7789v: st7789v@1 {
		compatible = "sitronix,st7789v";
		reg = <1>;
		spi-max-frequency = <8000000>; /* 8MHz */
		label = "ST7789V";
		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 0x32000>;
		};

		/* next firmware update */
		slot1_partition: partition@3e000 {
			label = "image-1";
			reg = <0x0003E000 0x32000>;
		};

		/* needed to slot0-slot1 swapping */
		scratch_partition: partition@70000 {
			label = "image-scratch";
			reg = <0x00070000 0xa000>;
		};

		/* to be used in firmware */
		storage_partition: partition@7a000 {
			label = "storage";
			reg = <0x0007a000 0x00006000>;
		};
	};
};
