/*
 * NOTE: File generated by gen_board_pinctrl.py
 * from MIMXRT595-EVK.mex
 *
 * Copyright 2022, NXP
 * SPDX-License-Identifier: Apache-2.0
 */


#include <nxp/nxp_imx/rt/MIMXRT595SFFOC-pinctrl.h>

&pinctrl {
	pinmux_flexcomm0_usart: pinmux_flexcomm0_usart {
		group0 {
			pinmux = <FC0_RXD_SDA_MOSI_DATA_PIO0_2>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
		};
		group1 {
			pinmux = <FC0_TXD_SCL_MISO_WS_PIO0_1>;
			slew-rate = "normal";
			drive-strength = "normal";
		};
	};

	/* RX */
	pinmux_flexcomm1_i2s: pinmux_flexcomm1_i2s {
		group0 {
			pinmux = <FC1_RXD_SDA_MOSI_DATA_PIO0_9>,
				<FC1_TXD_SCL_MISO_WS_PIO0_8>,
				<FC1_SCK_PIO0_7>;
			slew-rate = "normal";
			input-enable;
			drive-strength = "high";
		};
	};

	/* TX */
	pinmux_flexcomm3_i2s: pinmux_flexcomm3_i2s {
		group0 {
			pinmux = <FC3_RXD_SDA_MOSI_DATA_PIO0_23>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "high";
		};
	};

	pinmux_dmic0: pinmux_dmic0 {
		group0 {
			pinmux = <DMIC0_DATA23_PIO3_1>, <DMIC0_DATA01_PIO5_8>,
			       <DMIC0_CLK01_PIO5_4>;
			slew-rate = "normal";
			drive-strength = "normal";
			input-enable;
		};
	};

	pinmux_flexcomm4_i2c: pinmux_flexcomm4_i2c {
		group0 {
			pinmux = <FC4_TXD_SCL_MISO_WS_PIO0_29>,
			       <FC4_RXD_SDA_MOSI_DATA_PIO0_30>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "high";
			drive-open-drain;
		};
	};

	pinmux_flexcomm12_usart: pinmux_flexcomm12_usart {
		group0 {
			pinmux = <FC12_RXD_SDA_MOSI_PIO4_31>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
		};
		group1 {
			pinmux = <FC12_TXD_SCL_MISO_PIO4_30>;
			slew-rate = "normal";
			drive-strength = "normal";
		};
	};

	pinmux_flexcomm16_spi: pinmux_flexcomm16_spi {
		group0 {
			pinmux = <HS_SPI1_SCK_PIO1_3>,
					<HS_SPI1_MISO_PIO1_4>,
					<HS_SPI1_MOSI_PIO1_5>,
					<HS_SPI1_SSELN0_PIO1_6>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
		};
	};

	pinmux_pmic_i2c: pinmux_pmic_i2c {
		group0 {
			pinmux = <PMIC_I2C_SCL>,
				<PMIC_I2C_SDA>;
			bias-pull-up;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
			drive-open-drain;
		};
	};

	pinmux_flexspi2: pinmux_flexspi2 {
		group0 {
			pinmux =
				<FLEXSPI1_SCLK_PIO4_11>,
				<FLEXSPI1_DATA0_PIO4_12>,
				<FLEXSPI1_DATA1_PIO4_13>,
				<FLEXSPI1_DATA2_PIO4_14>,
				<FLEXSPI1_DATA3_PIO4_15>,
				<FLEXSPI1_DATA4_PIO5_15>,
				<FLEXSPI1_DATA5_PIO5_16>,
				<FLEXSPI1_DATA6_PIO5_17>,
				<FLEXSPI1_DATA7_PIO5_18>,
				<FLEXSPI1_SS0_N_PIO4_18>;
			slew-rate = "normal";
			input-enable;
			drive-strength = "high";
		};
		group1 {
			pinmux = <FLEXSPI1_DQS_PIO4_16>;
			slew-rate = "normal";
			input-enable;
			drive-strength = "high";
			bias-pull-down;
		};
	};

	pinmux_flexspi: pinmux_flexspi {
		group0 {
			pinmux = <FLEXSPI0_SCLK_PIO1_18>,
					<FLEXSPI0_SS0_N_PIO1_19>,
					<FLEXSPI0_DATA0_PIO1_20>,
					<FLEXSPI0_DATA1_PIO1_21>,
					<FLEXSPI0_DATA2_PIO1_22>,
					<FLEXSPI0_DATA3_PIO1_23>,
					<FLEXSPI0_DATA4_PIO1_24>,
					<FLEXSPI0_DATA5_PIO1_25>,
					<FLEXSPI0_DATA6_PIO1_26>,
					<FLEXSPI0_DATA7_PIO1_27>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "high";
		};
	};

	pinmux_flexspi_sleep: pinmux_flexspi_sleep {
		group0 {
			pinmux = <FLEXSPI0_SCLK_PIO1_18>,
					<FLEXSPI0_SS0_N_PIO1_19>;
			slew-rate = "normal";
			drive-strength = "high";
		};
		group1 {
			pinmux = <FLEXSPI0_DATA0_PIO1_20>,
					<FLEXSPI0_DATA1_PIO1_21>,
					<FLEXSPI0_DATA2_PIO1_22>,
					<FLEXSPI0_DATA3_PIO1_23>,
					<FLEXSPI0_DATA4_PIO1_24>,
					<FLEXSPI0_DATA5_PIO1_25>,
					<FLEXSPI0_DATA6_PIO1_26>,
					<FLEXSPI0_DATA7_PIO1_27>;
			input-enable;
			slew-rate = "normal";
			drive-strength = "high";
			bias-pull-up;
		};
	};

	pinmux_lpadc0: pinmux_lpadc0 {
		group0 {
			pinmux = <ADC0_CH0_PIO0_5>,
				<ADC0_CH8_PIO0_6>,
				<ADC0_CH2_PIO0_19>;
			slew-rate = "normal";
			drive-strength = "normal";
			nxp,analog-mode;
		};
	};

	pinmux_usdhc: pinmux_usdhc {
		group0 {
			pinmux = <SD0_CMD_PIO1_31>,
				 <USDHC0_USDHC_DATA0_PIO2_0>,
				 <USDHC0_USDHC_DATA1_PIO2_1>,
				 <USDHC0_USDHC_DATA2_PIO2_2>,
				 <USDHC0_USDHC_DATA3_PIO2_3>,
				 <USDHC0_USDHC_DATA4_PIO2_5>,
				 <USDHC0_USDHC_DATA5_PIO2_6>,
				 <USDHC0_USDHC_DATA6_PIO2_7>,
				 <USDHC0_USDHC_DATA7_PIO2_8>,
				 <SD0_CARD_DET_N_PIO2_9>;
			bias-pull-up;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
		};
		group1 {
			pinmux = <SD0_CLK_PIO1_30>;
			bias-pull-down;
			input-enable;
			slew-rate = "normal";
			drive-strength = "normal";
		};
		group2 {
			pinmux = <GPIO_PIO210_PIO2_10>;
			bias-pull-down;
			slew-rate = "normal";
			drive-strength = "normal";
		};
		group3 {
			pinmux = <SD0_DS_PIO2_4>;
			bias-pull-down;
			input-enable;
			slew-rate = "slow";
			drive-strength = "normal";
		};
	};

	pinmux_sctimer_default: pinmux_sctimer_default {
		group0 {
			pinmux = <SCT0_OUT0_PIO0_5>,
			       <SCT0_OUT1_PIO0_6>;
			slew-rate = "normal";
			drive-strength = "normal";
		};
	};

	pinmux_i3c: pinmux_i3c {
		group0 {
			pinmux = <I3C0_SCL_PIO2_29>,
				<I3C0_SDA_PIO2_30>;
			input-enable;
			slew-rate = "slow";
			drive-strength = "high";
		};

		group1 {
			pinmux = <I3C0_PUR_PIO2_31>;
			slew-rate = "normal";
			drive-strength = "normal";
		};
	};

};
