/*
 * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd.
 * Copyright (c) 2023 The Zephyr Project Contributors
 *
 * 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_GPIO17>;
			output-high;
		};
		group2 {
			pinmux = <UART1_RX_GPIO18>;
			bias-pull-up;
		};
	};

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

	spim2_default: spim2_default {
		group1 {
			pinmux = <SPIM2_MISO_GPIO11>,
				<SPIM2_SCLK_GPIO9>,
				<SPIM2_CSEL_GPIO8>;
		};
		group2 {
			pinmux = <SPIM2_MOSI_GPIO10>;
			output-low;
		};
	};

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

	ledc0_default: ledc0_default {
		group1 {
			pinmux = <LEDC_CH0_GPIO35>;
			output-enable;
		};
	};
};
