/*
 * 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;
		zephyr,ieee802154 = &ieee802154;
	};

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

&ieee802154 {
	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";
		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";
};
