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

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