/*
 * Copyright (c) 2024 Nikola Trifunovic <nikola@trifunovic.at>
 * Copyright (c) 2023 Benjamin Cabé <benjamin@zephyrproject.org>
 * Copyright (c) 2023 Martin Kiepfer <mrmarteng@teleschirm.org>
 *
 * 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;
		 };
	 };

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

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

	spim2_default: spim2_default {
		group1 {
			pinmux = <SPIM2_MISO_GPIO33>,
				 <SPIM2_SCLK_GPIO23>,
				 <SPIM2_CSEL_GPIO22>;
		};
		group2 {
			pinmux = <SPIM2_MOSI_GPIO19>;
			output-low;
		};

	};

	/* used for SK6812 */
	spim3_ws2812_led: spim3_ws2812_led {
		group1 {
			pinmux = <SPIM3_MOSI_GPIO27>;
			output-low;
		};
	};
};
