/*
 * 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_spi_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-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";
	tx-pin = <6>;
	rx-pin = <8>;
	/* optional mesh_feather_uart1_rtscts.dtsi */
};

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