/*
 * Copyright (c) 2022 Renesas Electronics Corporation and/or its affiliates
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/pinctrl/smartbond-pinctrl.h>

&pinctrl {
	uart_default: uart_default {
		group1 {
			pinmux = <SMARTBOND_PINMUX(UART_TX, 0, 9)>;
		};
		group2 {
			pinmux = <SMARTBOND_PINMUX(UART_RX, 0, 8)>;
			bias-pull-up;
		};
	};

	i2c_default: i2c_default {
		group1 {
			pinmux = <SMARTBOND_PINMUX(I2C_SDA, 0, 31)>,
				<SMARTBOND_PINMUX(I2C_SCL, 0, 30)>;
			bias-pull-up;
		};
	};

	i2c2_default: i2c2_default {
		group1 {
			pinmux = <SMARTBOND_PINMUX(I2C2_SDA, 0, 28)>,
				<SMARTBOND_PINMUX(I2C2_SCL, 0, 29)>;
			bias-pull-up;
		};
	};

	display_controller_default: display_controller_default {
		group1 {
			pinmux = <SMARTBOND_PINMUX(LCD, 1, 2)>,
				<SMARTBOND_PINMUX(LCD, 1, 3)>,
				<SMARTBOND_PINMUX(LCD, 1, 4)>,
				<SMARTBOND_PINMUX(LCD, 1, 5)>,
				<SMARTBOND_PINMUX(LCD, 1, 7)>,
				<SMARTBOND_PINMUX(LCD, 1, 8)>,
				<SMARTBOND_PINMUX(LCD, 0, 27)>,
				<SMARTBOND_PINMUX(LCD, 0, 28)>,
				<SMARTBOND_PINMUX(LCD, 0, 29)>,
				<SMARTBOND_PINMUX(LCD, 0, 30)>;
		};
	};

	spi_controller: spi_controller {
		group1 {
			pinmux = <SMARTBOND_PINMUX(SPI_CLK, 0, 22)>,
				<SMARTBOND_PINMUX(SPI_DO, 0, 23)>;
			output-enable;
		};
		group2 {
			pinmux = <SMARTBOND_PINMUX(SPI_DI, 0, 25)>;
			input-enable;
		};
	};

	spi2_controller: spi2_controller {
		group1 {
			pinmux = < SMARTBOND_PINMUX(SPI2_CLK, 1, 3) >,
				<SMARTBOND_PINMUX(SPI2_DO, 1, 5)>;
			output-enable;
		};
		group2 {
			pinmux = <SMARTBOND_PINMUX(SPI2_DI, 1, 4)>;
			input-enable;
		};
	};

	/omit-if-no-ref/ mipi_dbi_default: mipi_dbi_default {
		group1 {
			pinmux = <SMARTBOND_PINMUX(LCD_SPI_DC, 0, 20)>,
				<SMARTBOND_PINMUX(LCD_SPI_EN, 0, 21)>,
				<SMARTBOND_PINMUX(LCD_SPI_DO, 0, 24)>,
				<SMARTBOND_PINMUX(LCD_SPI_CLK, 0, 27)>;
		};
		group2 {
			/* TE signal - mapped on fixed positions */
			pinmux = <SMARTBOND_PINMUX(LCD, 1, 22)>;
		};
	};

	/omit-if-no-ref/ mipi_dbi_sleep: mipi_dbi_sleep {
		group1 {
			pinmux = <SMARTBOND_PINMUX(GPIO, 0, 20)>,
				<SMARTBOND_PINMUX(GPIO, 0, 21)>,
				<SMARTBOND_PINMUX(GPIO, 0, 24)>,
				<SMARTBOND_PINMUX(GPIO, 0, 27)>;
				output-enable;
		};
		group2 {
			pinmux = <SMARTBOND_PINMUX(GPIO, 1, 22)>;
			input-enable;
		};
	};

	/* Same signal can be multiplexed to multiple I/O pins */
	/omit-if-no-ref/ mipi_dbi_read: mipi_dbi_read {
		group1 {
			pinmux = <SMARTBOND_PINMUX(SPI2_CLK, 0, 27)>;
			output-enable;
		};
		group2 {
			pinmux = <SMARTBOND_PINMUX(SPI2_DI, 0, 26)>;
			input-enable;
		};
	};
};
