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

/* Add hardware flow control to UART1 on Feather-based mesh boards
 *
 * NOTE: This file is replicated in particle_{argon,boron,xenon}.
 * Changes should be made in all instances. */
&pinctrl {
	uart0_default_alt: uart0_default_alt {
		group1 {
			psels = <NRF_PSEL(UART_TX, 0, 6)>,
				<NRF_PSEL(UART_RX, 0, 8)>,
				<NRF_PSEL(UART_RTS, 1, 1)>,
				<NRF_PSEL(UART_CTS, 1, 2)>;
		};
	};
	uart0_sleep_alt: uart0_sleep_alt {
		group1 {
			psels = <NRF_PSEL(UART_TX, 0, 6)>,
				<NRF_PSEL(UART_RX, 0, 8)>,
				<NRF_PSEL(UART_RTS, 1, 1)>,
				<NRF_PSEL(UART_CTS, 1, 2)>;
			low-power-enable;
		};
	};
};

&uart0 {
	pinctrl-0 = <&uart0_default_alt>;
	pinctrl-1 = <&uart0_sleep_alt>;
	pinctrl-names = "default", "sleep";
};
