/*
 * Copyright (c) 2024 DPTechnics bv
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/pinctrl/esp-pinctrl-common.h>
#include <dt-bindings/pinctrl/esp32s3-pinctrl.h>
#include <zephyr/dt-bindings/pinctrl/esp32s3-gpio-sigmap.h>

&pinctrl {
	uart0_default: uart0_default {
		group1 {
			pinmux = <UART0_TX_GPIO43>;
			output-high;
		};
		group2 {
			pinmux = <UART0_RX_GPIO44>;
			bias-pull-up;
		};
	};

	uart1_default: uart1_default {
		group1 {
			pinmux = <UART1_TX_GPIO48>;
			output-high;
		};
		group2 {
			pinmux = <UART1_RX_GPIO14>;
			bias-pull-up;
		};
		group3 {
			pinmux = <UART1_RTS_GPIO21>;
			output-high;
		};
		group4 {
			pinmux = <UART1_CTS_GPIO47>;
		};
	};

	i2c0_default: i2c0_default {
		group1 {
			pinmux = <I2C0_SDA_GPIO1>,
				 <I2C0_SCL_GPIO2>;
			bias-pull-up;
			drive-open-drain;
			output-high;
		};
	};

	i2c1_default: i2c1_default {
		group1 {
			pinmux = <I2C1_SDA_GPIO4>,
				 <I2C1_SCL_GPIO5>;
			bias-pull-up;
			drive-open-drain;
			output-high;
		};
	};

	spim2_default: spim2_default {
		group1 {
			pinmux = <SPIM2_MISO_GPIO13>,
				 <SPIM2_SCLK_GPIO12>,
				 <SPIM2_CSEL_GPIO10>;
		};
		group2 {
			pinmux = <SPIM2_MOSI_GPIO11>;
			output-low;
		};
	};

	spim3_default: spim3_default {
		group1 {
			pinmux = <SPIM3_MISO_GPIO37>,
				 <SPIM3_SCLK_GPIO36>,
				 <SPIM3_CSEL_GPIO38>;
		};
		group2 {
			pinmux = <SPIM3_MOSI_GPIO39>;
			output-low;
		};
	};

	twai_default: twai_default {
		group1 {
			pinmux = <TWAI_TX_GPIO5>,
				 <TWAI_RX_GPIO6>;
		};
	};
};
