/*
 * Copyright (c) 2022 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

&pinctrl {
	i2s0_default: i2s0_default {
		group1 {
			psels = <NRF_PSEL(I2S_MCK, 0, 12)>;
			nordic,drive-mode = <NRF_DRIVE_H0H1>;
		};
		group2 {
			psels = <NRF_PSEL(I2S_SCK_M, 0, 14)>,
				<NRF_PSEL(I2S_LRCK_M, 0, 16)>,
				<NRF_PSEL(I2S_SDOUT, 0, 13)>,
				<NRF_PSEL(I2S_SDIN, 0, 15)>;
		};
	};

	i2s0_sleep: i2s0_sleep {
		group1 {
			psels = <NRF_PSEL(I2S_MCK, 0, 12)>,
				<NRF_PSEL(I2S_SCK_M, 0, 14)>,
				<NRF_PSEL(I2S_LRCK_M, 0, 16)>,
				<NRF_PSEL(I2S_SDOUT, 0, 13)>,
				<NRF_PSEL(I2S_SDIN, 0, 15)>;
			low-power-enable;
		};
	};

	uart0_default: uart0_default {
		group1 {
			psels = <NRF_PSEL(UART_TX, 1, 5)>,
				<NRF_PSEL(UART_RTS, 1, 7)>;
		};
		group2 {
			psels = <NRF_PSEL(UART_RX, 1, 4)>,
				<NRF_PSEL(UART_CTS, 1, 6)>;
			bias-pull-up;
		};
	};

	uart0_sleep: uart0_sleep {
		group1 {
			psels = <NRF_PSEL(UART_TX, 1, 5)>,
				<NRF_PSEL(UART_RX, 1, 4)>,
				<NRF_PSEL(UART_RTS, 1, 7)>,
				<NRF_PSEL(UART_CTS, 1, 6)>;
			low-power-enable;
		};
	};

	uart1_default: uart1_default {
		group1 {
			psels = <NRF_PSEL(UART_TX, 1, 9)>,
				<NRF_PSEL(UART_RTS, 1, 11)>;
		};
		group2 {
			psels = <NRF_PSEL(UART_RX, 1, 8)>,
				<NRF_PSEL(UART_CTS, 1, 10)>;
			bias-pull-up;
		};
	};

	uart1_sleep: uart1_sleep {
		group1 {
			psels = <NRF_PSEL(UART_TX, 1, 9)>,
				<NRF_PSEL(UART_RX, 1, 11)>,
				<NRF_PSEL(UART_RTS, 1, 8)>,
				<NRF_PSEL(UART_CTS, 1, 10)>;
			low-power-enable;
		};
	};

	i2c1_default: i2c1_default {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 1, 2)>,
				<NRF_PSEL(TWIM_SCL, 1, 3)>;
		};
	};

	i2c1_sleep: i2c1_sleep {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 1, 2)>,
				<NRF_PSEL(TWIM_SCL, 1, 3)>;
			low-power-enable;
		};
	};

	pwm0_default: pwm0_default {
		group1 {
			psels = <NRF_PSEL(PWM_OUT0, 0, 7)>,
				<NRF_PSEL(PWM_OUT1, 0, 25)>,
				<NRF_PSEL(PWM_OUT2, 0, 26)>;
		};
	};

	pwm0_sleep: pwm0_sleep {
		group1 {
			psels = <NRF_PSEL(PWM_OUT0, 0, 7)>,
				<NRF_PSEL(PWM_OUT1, 0, 25)>,
				<NRF_PSEL(PWM_OUT2, 0, 26)>;
			low-power-enable;
		};
	};

	spi4_default: spi4_default {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 0, 8)>,
				<NRF_PSEL(SPIM_MOSI, 0, 9)>;
			/* Workaround for issue with PCA10121 v0.7.0
			 * related to SD-card
			 */
			nordic,drive-mode = <NRF_DRIVE_H0H1>;
		};
		group2 {
			psels = <NRF_PSEL(SPIM_MISO, 0, 10)>;
		};
	};

	spi4_sleep: spi4_sleep {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 0, 8)>,
				<NRF_PSEL(SPIM_MISO, 0, 10)>,
				<NRF_PSEL(SPIM_MOSI, 0, 9)>;
			low-power-enable;
		};
	};
};
