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

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

&pinctrl {
	/* conflicts with fxos8700 sensor */
	pinmux_csi: pinmux_csi {
		group0 {
			pinmux = <&iomuxc_gpio_disp_b2_14_gpio11_io15>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_26_gpio9_io25>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
		group2 {
			pinmux = <&iomuxc_lpsr_gpio_lpsr_07_lpi2c6_scl>,
				<&iomuxc_lpsr_gpio_lpsr_06_lpi2c6_sda>;
			drive-strength = "high";
			slew-rate = "fast";
			input-enable;
		};
	};

	pinmux_enet: pinmux_enet {
		group0 {
			pinmux = <&iomuxc_gpio_ad_12_gpio9_io11>,
				<&iomuxc_gpio_disp_b2_08_enet_rx_en>,
				<&iomuxc_gpio_disp_b2_09_enet_rx_er>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <&iomuxc_gpio_disp_b2_06_enet_rdata00>,
				<&iomuxc_gpio_disp_b2_07_enet_rdata01>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
			input-enable;
		};
		group2 {
			pinmux = <&iomuxc_lpsr_gpio_lpsr_12_gpio12_io12>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
		group3 {
			pinmux = <&iomuxc_gpio_ad_32_enet_mdc>,
				<&iomuxc_gpio_ad_33_enet_mdio>,
				<&iomuxc_gpio_disp_b2_02_enet_tdata00>,
				<&iomuxc_gpio_disp_b2_03_enet_tdata01>,
				<&iomuxc_gpio_disp_b2_04_enet_tx_en>;
			drive-strength = "high";
			slew-rate = "fast";
		};
		group4 {
			pinmux = <&iomuxc_gpio_disp_b2_05_enet_ref_clk>;
			drive-strength = "high";
			slew-rate = "slow";
			input-enable;
		};
	};

	pinmux_flexcan3: pinmux_flexcan3 {
		group0 {
			pinmux = <&iomuxc_lpsr_gpio_lpsr_01_can3_rx>,
				<&iomuxc_lpsr_gpio_lpsr_00_can3_tx>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	pinmux_flexpwm1: pinmux_flexpwm1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_04_flexpwm1_pwm2_a>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
	};

	pinmux_flexspi1: pinmux_flexspi1 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b2_05_flexspi1_a_dqs>,
				<&iomuxc_gpio_sd_b2_06_flexspi1_a_ss0_b>,
				<&iomuxc_gpio_sd_b2_07_flexspi1_a_sclk>,
				<&iomuxc_gpio_sd_b2_08_flexspi1_a_data00>,
				<&iomuxc_gpio_sd_b2_09_flexspi1_a_data01>,
				<&iomuxc_gpio_sd_b2_10_flexspi1_a_data02>,
				<&iomuxc_gpio_sd_b2_11_flexspi1_a_data03>;
			bias-pull-down;
			input-enable;
		};
	};

	/* interrupt gpios for fxos8700 */
	pinmux_fxos8700_int: pinmux_fxos8700_int {
		group0 {
			pinmux = <&iomuxc_gpio_disp_b2_14_gpio11_io15>,
				<&iomuxc_gpio_disp_b2_13_gpio11_io14>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	/* conflicts with lpspi1 */
	pinmux_lcdif: pinmux_lcdif {
		group0 {
			pinmux = <&iomuxc_gpio_ad_30_gpio9_io29>,
				<&iomuxc_gpio_ad_02_gpio9_io01>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <&iomuxc_gpio_disp_b2_15_gpio11_io16>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
	};

	pinmux_lpadc0: pinmux_lpadc0 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_06_adc1_ch0a>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
	};

	pinmux_lpi2c1: pinmux_lpi2c1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_08_lpi2c1_scl>,
				<&iomuxc_gpio_ad_09_lpi2c1_sda>;
			drive-strength = "normal";
			drive-open-drain;
			slew-rate = "fast";
			input-enable;
		};
	};

	/* Connected to FXOS8700 */
	pinmux_lpi2c5: pinmux_lpi2c5 {
		group0 {
			pinmux = <&iomuxc_lpsr_gpio_lpsr_05_lpi2c5_scl>,
				<&iomuxc_lpsr_gpio_lpsr_04_lpi2c5_sda>;
			drive-strength = "normal";
			drive-open-drain;
			slew-rate = "fast";
		};
	};

	pinmux_lpspi1: pinmux_lpspi1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_29_lpspi1_pcs0>,
				<&iomuxc_gpio_ad_28_lpspi1_sck>,
				<&iomuxc_gpio_ad_31_lpspi1_sdi>,
				<&iomuxc_gpio_ad_30_lpspi1_sdo>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	pinmux_lpuart1: pinmux_lpuart1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_25_lpuart1_rx>,
				<&iomuxc_gpio_ad_24_lpuart1_tx>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	pinmux_lpuart1_sleep: pinmux_lpuart1_sleep {
		group0 {
			pinmux = <&iomuxc_gpio_ad_25_gpio_mux3_io24>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_24_lpuart1_tx>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	pinmux_lpuart2: pinmux_lpuart2 {
		group0 {
			pinmux = <&iomuxc_gpio_disp_b2_11_lpuart2_rx>,
				<&iomuxc_gpio_disp_b2_10_lpuart2_tx>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

	pinmux_lpuart2_sleep: pinmux_lpuart2_sleep {
		group0 {
			pinmux = <&iomuxc_gpio_disp_b2_11_gpio_mux5_io12>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <&iomuxc_gpio_disp_b2_10_lpuart2_tx>;
			drive-strength = "high";
			slew-rate = "fast";
		};
	};

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

	pinmux_sai1: pinmux_sai1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_17_sai1_mclk>,
				<&iomuxc_gpio_ad_20_sai1_rx_data00>,
				<&iomuxc_gpio_ad_21_sai1_tx_data00>,
				<&iomuxc_gpio_ad_22_sai1_tx_bclk>,
				<&iomuxc_gpio_ad_23_sai1_tx_sync>;
			drive-strength = "high";
			slew-rate = "fast";
			input-enable;
		};
	};

	/* conflicts with enet pins */
	pinmux_usdhc1: pinmux_usdhc1 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b1_00_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b1_01_usdhc1_clk>,
				<&iomuxc_gpio_sd_b1_02_usdhc1_data0>,
				<&iomuxc_gpio_sd_b1_03_usdhc1_data1>,
				<&iomuxc_gpio_sd_b1_04_usdhc1_data2>,
				<&iomuxc_gpio_sd_b1_05_usdhc1_data3>;
			bias-pull-up;
			input-enable;
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_34_usdhc1_vselect>,
				<&iomuxc_gpio_ad_32_gpio_mux3_io31_cm7>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
		group2 {
			pinmux = <&iomuxc_gpio_ad_35_gpio10_io02>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
	};

	/* removes pull on dat3 for card detect */
	pinmux_usdhc1_dat3_nopull: pinmux_usdhc1_dat3_nopull {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b1_05_usdhc1_data3>;
			bias-disable;
			input-enable;
		};
		group1 {
			pinmux = <&iomuxc_gpio_sd_b1_00_usdhc1_cmd>,
				<&iomuxc_gpio_sd_b1_01_usdhc1_clk>,
				<&iomuxc_gpio_sd_b1_02_usdhc1_data0>,
				<&iomuxc_gpio_sd_b1_03_usdhc1_data1>,
				<&iomuxc_gpio_sd_b1_04_usdhc1_data2>;
			bias-pull-up;
			input-enable;
		};
		group2 {
			pinmux = <&iomuxc_gpio_ad_34_usdhc1_vselect>,
				<&iomuxc_gpio_ad_32_gpio_mux3_io31_cm7>;
			drive-strength = "high";
			bias-pull-down;
			slew-rate = "fast";
		};
		group3 {
			pinmux = <&iomuxc_gpio_ad_35_gpio10_io02>;
			drive-strength = "high";
			bias-pull-up;
			slew-rate = "fast";
		};
	};

};

