/*
 * Copyright (c) 2022, NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * Note: File generated by rt_cfg_utils.py
 * from mimxrt1024_evk.mex
 */

#include <nxp/nxp_imx/rt/mimxrt1024dag5a-pinctrl.dtsi>

&pinctrl {
	/* ADC1 inputs 10 and 11 */
	pinmux_adc1: pinmux_adc1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b1_10_adc1_in10>,
				<&iomuxc_gpio_ad_b1_11_adc1_in11>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* Note: USER_LED conflicts with ENET_RST */
	pinmux_enet: pinmux_enet {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_08_enet_ref_clk>;
			bias-disable;
			drive-strength = "r0-6";
			slew-rate = "fast";
			nxp,speed = "50-mhz";
			input-enable;
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_b0_04_gpio1_io04>;
			drive-strength = "r0-5";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
		group2 {
			pinmux = <&iomuxc_gpio_ad_b0_09_enet_rx_data1>,
				<&iomuxc_gpio_ad_b0_11_enet_rx_en>,
				<&iomuxc_gpio_ad_b0_14_enet_tx_data0>,
				<&iomuxc_gpio_ad_b0_15_enet_tx_data1>,
				<&iomuxc_gpio_ad_b0_13_enet_tx_en>,
				<&iomuxc_gpio_ad_b0_12_enet_rx_er>,
				<&iomuxc_gpio_emc_40_enet_mdio>,
				<&iomuxc_gpio_emc_41_enet_mdc>;
			drive-strength = "r0-5";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "fast";
			nxp,speed = "200-mhz";
		};
		group3 {
			pinmux = <&iomuxc_gpio_ad_b1_06_gpio1_io22>;
			drive-strength = "r0-5";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
		group4 {
			pinmux = <&iomuxc_gpio_ad_b0_10_enet_rx_data0>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	pinmux_flexcan1: pinmux_flexcan1 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b1_00_flexcan1_tx>,
				<&iomuxc_gpio_sd_b1_01_flexcan1_rx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
			input-enable;
		};
	};

	pinmux_lpi2c1: pinmux_lpi2c1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b1_14_lpi2c1_scl>,
				<&iomuxc_gpio_ad_b1_15_lpi2c1_sda>;
			drive-strength = "r0-6";
			drive-open-drain;
			slew-rate = "slow";
			nxp,speed = "100-mhz";
			input-enable;
		};
	};

	pinmux_lpi2c4: pinmux_lpi2c4 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b1_03_lpi2c4_sda>,
				<&iomuxc_gpio_sd_b1_02_lpi2c4_scl>;
			drive-strength = "r0-6";
			drive-open-drain;
			slew-rate = "slow";
			nxp,speed = "100-mhz";
			input-enable;
		};
	};

	/* conflicts with enet pinmux */
	pinmux_lpspi1: pinmux_lpspi1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_10_lpspi1_sck>,
				<&iomuxc_gpio_ad_b0_11_lpspi1_pcs0>,
				<&iomuxc_gpio_ad_b0_12_lpspi1_sdo>,
				<&iomuxc_gpio_ad_b0_13_lpspi1_sdi>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	pinmux_lpuart1: pinmux_lpuart1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_07_lpuart1_rx>,
				<&iomuxc_gpio_ad_b0_06_lpuart1_tx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	pinmux_lpuart1_sleep: pinmux_lpuart1_sleep {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_07_gpio1_io07>;
			drive-strength = "r0-6";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_b0_06_lpuart1_tx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* conflicts with user led */
	pinmux_lpuart2: pinmux_lpuart2 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b1_09_lpuart2_rx>,
				<&iomuxc_gpio_ad_b1_08_lpuart2_tx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* conflicts with user led */
	pinmux_lpuart2_sleep: pinmux_lpuart2_sleep {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b1_09_gpio1_io25>;
			drive-strength = "r0-6";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_b1_08_lpuart2_tx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* intentionally left empty */
	pinmux_ptp: pinmux_ptp {
	};

	pinmux_sai3: pinmux_sai3 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b1_06_sai3_tx_bclk>,
				<&iomuxc_gpio_sd_b1_07_sai3_tx_sync>,
				<&iomuxc_gpio_sd_b1_08_sai3_tx_data>,
				<&iomuxc_gpio_sd_b1_11_sai3_rx_data>,
				<&iomuxc_gpio_emc_28_sai3_mclk>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	pinmux_usdhc1: pinmux_usdhc1 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_03_usdhc1_clk>;
			bias-disable;
			drive-strength = "r0";
			input-schmitt-enable;
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_sd_b0_02_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b0_04_usdhc1_data0>,
				<&iomuxc_gpio_sd_b0_05_usdhc1_data1>,
				<&iomuxc_gpio_sd_b0_00_usdhc1_data2>,
				<&iomuxc_gpio_sd_b0_01_usdhc1_data3>,
				<&iomuxc_gpio_sd_b0_06_gpio3_io19>;
			drive-strength = "r0";
			input-schmitt-enable;
			bias-pull-up;
			bias-pull-up-value = "47k";
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
		group2 {
			pinmux = <&iomuxc_gpio_ad_b1_07_usdhc1_vselect>;
			drive-strength = "r0-4";
			input-schmitt-enable;
			bias-pull-up;
			bias-pull-up-value = "47k";
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
		group3 {
			pinmux = <&iomuxc_gpio_sd_b1_10_gpio3_io30>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* fast pinmux settings for USDHC (over 100 Mhz) */
	pinmux_usdhc1_fast: pinmux_usdhc1_fast {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_03_usdhc1_clk>;
			bias-disable;
			drive-strength = "r0-7";
			input-schmitt-enable;
			slew-rate = "fast";
			nxp,speed = "200-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_sd_b0_02_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b0_04_usdhc1_data0>,
				<&iomuxc_gpio_sd_b0_05_usdhc1_data1>,
				<&iomuxc_gpio_sd_b0_00_usdhc1_data2>,
				<&iomuxc_gpio_sd_b0_01_usdhc1_data3>;
			drive-strength = "r0-7";
			input-schmitt-enable;
			bias-pull-up;
			bias-pull-up-value = "47k";
			slew-rate = "fast";
			nxp,speed = "200-mhz";
		};
	};

	/* medium pinmux settings for USDHC (under 100 Mhz) */
	pinmux_usdhc1_med: pinmux_usdhc1_med {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_03_usdhc1_clk>;
			bias-disable;
			drive-strength = "r0-7";
			input-schmitt-enable;
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_sd_b0_02_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b0_04_usdhc1_data0>,
				<&iomuxc_gpio_sd_b0_05_usdhc1_data1>,
				<&iomuxc_gpio_sd_b0_00_usdhc1_data2>,
				<&iomuxc_gpio_sd_b0_01_usdhc1_data3>;
			drive-strength = "r0-7";
			input-schmitt-enable;
			bias-pull-up;
			bias-pull-up-value = "47k";
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
	};

	/* slow pinmux settings for USDHC (under 50 Mhz) */
	pinmux_usdhc1_slow: pinmux_usdhc1_slow {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_03_usdhc1_clk>;
			bias-disable;
			drive-strength = "r0-7";
			input-schmitt-enable;
			slew-rate = "fast";
			nxp,speed = "50-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_sd_b0_02_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b0_04_usdhc1_data0>,
				<&iomuxc_gpio_sd_b0_05_usdhc1_data1>,
				<&iomuxc_gpio_sd_b0_00_usdhc1_data2>,
				<&iomuxc_gpio_sd_b0_01_usdhc1_data3>;
			drive-strength = "r0-7";
			input-schmitt-enable;
			bias-pull-up;
			bias-pull-up-value = "47k";
			slew-rate = "fast";
			nxp,speed = "50-mhz";
		};
	};

};

