/*
 * PAN1781 EVB configuration
 *
 * Copyright (c) 2022 Panasonic Industrial Devices Europe GmbH
 * SPDX-License-Identifier: Apache-2.0
 */
&pinctrl {
	/* flow control cannot be used together with i2c0,
	 * so not added to uart0_default by default
	 */
	uart0_default: uart0_default {
		group1 {
			psels = <NRF_PSEL(UART_TX, 0, 6)>;
		};
		group2 {
			psels = <NRF_PSEL(UART_RX, 0, 8)>;
			bias-pull-up;
		};
	};

	/* flow control cannot be used together with i2c0,
	 * so not added to uart0_sleep by default
	 */
	uart0_sleep: uart0_sleep {
		group1 {
			psels = <NRF_PSEL(UART_TX, 0, 6)>,
				<NRF_PSEL(UART_RX, 0, 8)>;
			low-power-enable;
		};
	};

	i2c0_default: i2c0_default {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 0, 7)>,
				<NRF_PSEL(TWIM_SCL, 0, 30)>;
		};
	};

	i2c0_sleep: i2c0_sleep {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 0, 7)>,
				<NRF_PSEL(TWIM_SCL, 0, 30)>;
			low-power-enable;
		};
	};

	spi1_default: spi1_default {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 0, 28)>,
				<NRF_PSEL(SPIM_MISO, 0, 29)>,
				<NRF_PSEL(SPIM_MOSI, 0, 20)>;
		};
	};

	spi1_sleep: spi1_sleep {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 0, 28)>,
				<NRF_PSEL(SPIM_MISO, 0, 29)>,
				<NRF_PSEL(SPIM_MOSI, 0, 20)>;
			low-power-enable;
		};
	};

};
