/*
 * Copyright (c) 2022-2023, Gerson Fernando Budke <nandojve@gmail.com>
 * SPDX-License-Identifier: Apache-2.0
 */

#include <dt-bindings/pinctrl/sam4eXe-pinctrl.h>

&pinctrl {
	afec0_default: afec0_default {
		group1 {
			pinmux = <PA17X_AFEC0_AD0>,
				 <PC13X_AFEC0_AD6>;
		};
	};
	afec1_default: afec1_default {
		group1 {
			pinmux = <PB2X_AFEC1_AD0>,
				 <PB3X_AFEC1_AD1>;
		};
	};

	gmac_mii: gmac_mii {
		group1 {
			pinmux = <PD0A_GMAC_GTXCK>,
				 <PD1A_GMAC_GTXEN>,
				 <PD2A_GMAC_GTX0>,
				 <PD3A_GMAC_GTX1>,
				 <PD15A_GMAC_GTX2>,
				 <PD16A_GMAC_GTX3>,
				 <PD4A_GMAC_GRXDV>,
				 <PD5A_GMAC_GRX0>,
				 <PD6A_GMAC_GRX1>,
				 <PD11A_GMAC_GRX2>,
				 <PD12A_GMAC_GRX3>,
				 <PD7A_GMAC_GRXER>,
				 <PD14A_GMAC_GRXCK>,
				 <PD13A_GMAC_GCOL>,
				 <PD10A_GMAC_GCRS>;
		};
	};

	mdio_default: mdio_default {
		group1 {
			pinmux = <PD8A_GMAC_GMDC>,
				 <PD9A_GMAC_GMDIO>;
		};
	};

	spi0_default: spi0_default {
		group1 {
			pinmux = <PA12A_SPI_MISO>,
				 <PA13A_SPI_MOSI>,
				 <PA14A_SPI_SPCK>,
				 <PB14A_SPI_NPCS1>,
				 <PD23_GPIO>,
				 <PD30_GPIO>;
		};
	};

	twi0_default: twi0_default {
		group1 {
			pinmux = <PA4A_TWI0_TWCK>,
				 <PA3A_TWI0_TWD>;
		};
	};

	uart0_default: uart0_default {
		group1 {
			pinmux = <PA9A_UART0_RXD>,
				 <PA10A_UART0_TXD>;
		};
	};
	uart1_default: uart1_default {
		group1 {
			pinmux = <PA5C_UART1_RXD>,
				 <PA6C_UART1_TXD>;
		};
	};
	usart1_default: usart1_default {
		group1 {
			pinmux = <PA21A_USART1_RXD>,
				 <PA24A_USART1_RTS>;
			bias-pull-up;
		};
		group2 {
			pinmux = <PA22A_USART1_TXD>,
				 <PA25A_USART1_CTS>;
		};
	};

	pwm0_default: pwm0_default {
		group1 {
			pinmux = <PD20A_PWM_PWMH0>,
				 <PD24A_PWM_PWML0>;
		};
	};

	hsmci_default: hsmci_default {
		group1 {
			pinmux = <PA28C_HSMCI_MCCDA>,
				 <PA29C_HSMCI_MCCK>,
				 <PA30C_HSMCI_MCDA0>,
				 <PA31C_HSMCI_MCDA1>,
				 <PA26C_HSMCI_MCDA2>,
				 <PA27C_HSMCI_MCDA3>;
		};
	};

};
