/*
 * 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;
		};
	};

	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;
		};
	};
};
