/*
 * Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/pinctrl/arm-mps3-pinctrl.h>

&pinctrl {
	/omit-if-no-ref/  uart3_default: uart3_default {
		group1 {
			pinmux = <UART3_TXD_EXP>;
		};

		group2 {
			pinmux = <UART3_RXD_EXP>;
			input-enable;
		};
	};

	/omit-if-no-ref/ uart4_default: uart4_default {
		group1 {
			pinmux = <UART4_TXD_EXP>;
		};

		group2 {
			pinmux = <UART4_RXD_EXP>;
			input-enable;
		};
	};

	/omit-if-no-ref/ spi3_default: spi3_default {
		group1 {
			pinmux = <SPI3_SS_EXP>, <SPI3_MOSI_EXP>,
				 <SPI3_SCK_EXP>;
		};

		group2 {
			pinmux = <SPI3_MISO_EXP>;
			input-enable;
		};
	};

	/omit-if-no-ref/ spi4_default: spi4_default {
		group1 {
			pinmux = <SPI4_SS_EXP>, <SPI4_MOSI_EXP>, <SPI4_SCK_EXP>;
		};

		group2 {
			pinmux = <SPI4_MISO_EXP>;
			input-enable;
		};
	};

	/omit-if-no-ref/ sbcon2_default: sbcon2_default {
		group1 {
			pinmux = <SBCON2_SDA_EXP>, <SBCON2_SCL_EXP>;
			input-enable;
		};
	};

	/omit-if-no-ref/ sbcon3_default: sbcon3_default {
		group1 {
			pinmux = <SBCON3_SDA_EXP>, <SBCON3_SCL_EXP>;
			input-enable;
		};
	};
};
