/*
 * Copyright (c) 2023 Antmicro <www.antmicro.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <dt-bindings/pinctrl/gecko-pinctrl-s1.h>

&pinctrl {
	/* configuration for usart0 device, default state - operating as UART */
	usart0_default: usart0_default {
		group1 {
			psels = <GECKO_PSEL(UART_TX, A, 0)>,
				<GECKO_PSEL(UART_RX, A, 1)>,
				<GECKO_LOC(UART_TX, 0)>,
				<GECKO_LOC(UART_RX, 0)>;
		};
	};

	usart4_default: usart4_default {
		group1 {
			psels = <GECKO_PSEL(UART_TX, H, 4)>,
				<GECKO_PSEL(UART_RX, H, 5)>,
				<GECKO_LOC(UART_TX, 4)>,
				<GECKO_LOC(UART_RX, 4)>;
		};
	};

	i2c0_default: i2c0_default {
		group1 {
			psels = <GECKO_PSEL(I2C_SDA, C, 0)>,
				<GECKO_PSEL(I2C_SCL, C, 1)>,
				<GECKO_LOC(I2C_SDA, 4)>,
				<GECKO_LOC(I2C_SCL, 4)>;
		};
	};

	i2c1_default: i2c1_default {
		group1 {
			psels = <GECKO_PSEL(I2C_SDA, C, 4)>,
				<GECKO_PSEL(I2C_SCL, C, 5)>,
				<GECKO_LOC(I2C_SDA, 0)>,
				<GECKO_LOC(I2C_SCL, 0)>;
		};
	};
};
