/*
 * 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;
		};
	};

	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_GPIO25>,
				 <SPIM3_SCLK_GPIO19>,
				 <SPIM3_CSEL_GPIO22>;
		};
		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;
		};
	};

	ledc0_default: ledc0_default {
		group1 {
			pinmux = <LEDC_CH0_GPIO0>,
				 <LEDC_CH1_GPIO2>,
				 <LEDC_CH2_GPIO4>;
			output-enable;
		};
	};

};
