/*
 * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

&pinctrl {

	uart0_default: uart0_default {
		group1 {
			pinmux = <UART0_TX_GPIO1>;
			output-high;
		};
		group2 {
			pinmux = <UART0_RX_GPIO3>;
			bias-pull-up;
		};
	};

	uart1_default: uart1_default {
		group1 {
			pinmux = <UART1_TX_GPIO10>;
		};
		group2 {
			pinmux = <UART1_RX_GPIO9>;
			bias-pull-up;
		};
	};

	uart2_default: uart2_default {
		group1 {
			pinmux = <UART2_TX_GPIO17>;
		};
		group2 {
			pinmux = <UART2_RX_GPIO16>;
			bias-pull-up;
		};
	};

	spim2_default: spim2_default {
		group1 {
			pinmux = <SPIM2_MISO_GPIO12>,
				 <SPIM2_SCLK_GPIO14>,
				 <SPIM2_CSEL_GPIO15>;
		};
		group2 {
			pinmux = <SPIM2_MOSI_GPIO13>;
			output-low;
		};
	};

	spim3_default: spim3_default {
		group1 {
			pinmux = <SPIM3_MISO_GPIO19>,
				 <SPIM3_SCLK_GPIO18>,
				 <SPIM3_CSEL_GPIO5>;
		};
		group2 {
			pinmux = <SPIM3_MOSI_GPIO23>;
			output-low;
		};
	};

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

