/*
 * Copyright (c) 2023 Benjamin Cabé <benjamin@zephyrproject.org>
 *
 * 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;
		 };
	 };

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

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

	spim2_default: spim2_default {
		group1 {
			pinmux = <SPIM2_SCLK_GPIO17>,
				 <SPIM2_CSEL_GPIO15>;
		};
		group2 {
			pinmux = <SPIM2_MOSI_GPIO21>;
			output-low;
		};

	};
};
