/*
 * 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. */

/ {
	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 = <0x000000000 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>;
	sda-pin = <26>;
	scl-pin = <27>;
};

feather_i2c: &i2c0 { };

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

&spi2 { /* dedicated MX25L */
	compatible = "nordic,nrf-spi";
	status = "okay";
	sck-pin = <19>;
	mosi-pin = <20>;
	miso-pin = <21>;
	cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
	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-be32k;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <100000>;
		jedec-id = [c2 20 16];
	};
};

/* see mesh_feather_spi1_spi3.dtsi */

feather_serial: &uart0 { /* feather UART1 */
	compatible = "nordic,nrf-uarte";
	current-speed = <115200>;
	status = "okay";
	tx-pin = <6>;
	rx-pin = <8>;
	/* optional mesh_feather_uart1_rtscts.dtsi */
};

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