/*
 * Copyright (c) 2018 Endre Karlson
 * Copyright (c) 2018 Peter Bigot Consulting, LLC
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/* Assignments common to all Feather-based Particle mesh boards.
 *
 * NOTE: This file is replicated in particle_{argon,boron,xenon}.
 * Changes should be made in all instances. */
#include "mesh_feather-pinctrl.dtsi"

/ {
	aliases {
		led0 = &user_led;
		led1 = &status_red;
		led2 = &status_green;
		led3 = &status_blue;
		sw0 = &mode_button;
		sw1 = &reset_button;
	};

	chosen {
		zephyr,console = &uart0;
		zephyr,uart-mcumgr = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};

	leds {
		compatible = "gpio-leds";
		user_led: led_0 {
			gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
			label = "User LED";
		};
		status_red: led_1 {
			gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
			label = "Red LED";
		};
		status_green: led_2 {
			gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
			label = "Green LED";
		};
		status_blue: led_3 {
			gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
			label = "Blue LED";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		mode_button: button_0 {
			gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Mode Button";
		};

		reset_button: button_1 {
			gpios = <&gpio0 18 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Reset Button";
		};
	};

	mesh_header: connector {
		compatible = "particle-gen3-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <0 0 &gpio0 26 0>,   /* SDA */
			   <1 0 &gpio0 27 0>,   /* SCL */
			   <2 0 &gpio1 1 0>,    /* PWM3 */
			   <3 0 &gpio1 2 0>,    /* PWM3 */
			   <4 0 &gpio1 8 0>,    /* PWM1 */
			   <5 0 &gpio1 10 0>,   /* PWM1 */
			   <6 0 &gpio1 11 0>,   /* PWM1 */
			   <7 0 &gpio1 12 0>,   /* PWM0 */
			   <8 0 &gpio1 3 0>,    /* PWM1 */
			   <9 0 &gpio0 6 0>,    /* TX */
			   <10 0 &gpio0 8 0>,   /* RX */
			   <11 0 &gpio1 14 0>,  /* MISO */
			   <12 0 &gpio1 13 0>,  /* MOSI */
			   <13 0 &gpio1 15 0>,  /* SCK */
			   <14 0 &gpio0 31 0>,  /* SS */
			   <15 0 &gpio0 30 0>,  /* ADC4 = AIN6 */
			   <16 0 &gpio0 29 0>,  /* ADC3 = AIN5 */
			   <17 0 &gpio0 28 0>,  /* ADC2 = AIN4 */
			   <18 0 &gpio0 4 0>,   /* ADC1 = AIN2 */
			   <19 0 &gpio0 3 0>,   /* ADC0 = AIN1 */
			   <20 0 &gpio0 11 0>,  /* MODEn */
			   <21 0 &gpio0 18 0>;  /* RESETn */
	};

	feather_header: feather_connector {
		compatible = "adafruit-feather-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <12 0 &gpio0 26 0>,  /* SDA */
			   <13 0 &gpio0 27 0>,  /* SCL */
			   <14 0 &gpio1 1 0>,   /* PWM3 */
			   <15 0 &gpio1 2 0>,   /* PWM3 */
			   <16 0 &gpio1 8 0>,   /* PWM1 */
			   <17 0 &gpio1 10 0>,  /* PWM1 */
			   <18 0 &gpio1 11 0>,  /* PWM1 */
			   <19 0 &gpio1 12 0>,  /* PWM0 */
			   <20 0 &gpio1 3 0>,   /* PWM1 */
			   /* 11 not connected */
			   <10 0 &gpio0 6 0>,   /* TX */
			   <9 0 &gpio0 8 0>,    /* RX */
			   <8 0 &gpio1 14 0>,   /* MISO */
			   <7 0 &gpio1 13 0>,   /* MOSI */
			   <6 0 &gpio1 15 0>,   /* SCK */
			   <5 0 &gpio0 31 0>,   /* SS */
			   <4 0 &gpio0 30 0>,   /* ADC4 = AIN6 */
			   <3 0 &gpio0 29 0>,   /* ADC3 = AIN5 */
			   <2 0 &gpio0 28 0>,   /* ADC2 = AIN4 */
			   <1 0 &gpio0 4 0>,    /* ADC1 = AIN2 */
			   <0 0 &gpio0 3 0>;    /* ADC0 = AIN1 */
	};
};

feather_adc: &adc { /* feather ADC */
	status = "okay";
};

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x0000C000>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x00067000>;
		};
		slot1_partition: partition@73000 {
			label = "image-1";
			reg = <0x00073000 0x00067000>;
		};
		scratch_partition: partition@da000 {
			label = "image-scratch";
			reg = <0x000da000 0x0001e000>;
		};

		/*
		 * The flash starting at 0x000f8000 and ending at
		 * 0x000fffff is reserved for use by the application.
		 */

		/*
		 * Storage partition will be used by FCB/LittleFS/NVS
		 * if enabled.
		 */
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&gpiote {
	status = "okay";
};

arduino_i2c: &i2c0 { /* feather I2C */
	compatible = "nordic,nrf-twi";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_sleep>;
	pinctrl-names = "default", "sleep";
};

feather_i2c: &i2c0 { };

/* TWI1 used on Boron; also see mesh_feather_spi_spi1.dtsi */

&spi2 { /* dedicated MX25L */
	compatible = "nordic,nrf-spi";
	status = "okay";
	cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";
	mx25l32: mx25l3233f@0 {
		compatible = "jedec,spi-nor";
		label = "MX25L3233F";
		reg = <0>;
		spi-max-frequency = <80000000>;
		wp-gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
		hold-gpios = <&gpio0 23 GPIO_ACTIVE_LOW>;
		size = <0x2000000>;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <100000>;
		jedec-id = [c2 20 16];
		sfdp-bfp = [
			e5 20 f1 ff  ff ff ff 01  44 eb 08 6b  08 3b 04 bb
			ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
			10 d8 00 ff
		];
	};
};

/* see mesh_feather_spi1_spi3.dtsi */

feather_serial: &uart0 { /* feather UART1 */
	compatible = "nordic,nrf-uarte";
	current-speed = <115200>;
	status = "okay";
	/* optional mesh_feather_uart1_rtscts.dtsi */
	pinctrl-0 = <&uart0_default>;
	pinctrl-1 = <&uart0_sleep>;
	pinctrl-names = "default", "sleep";
};

zephyr_udc0: &usbd {
	compatible = "nordic,nrf-usbd";
	status = "okay";
};
