/*
 * Copyright (c) 2022, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <nxp/nxp_rt.dtsi>

/ {
	soc {
		/* GPIOS 6-9 are not preset on RT1050 */
		/delete-node/ gpio@42000000;
		/delete-node/ gpio@42004000;
		/delete-node/ gpio@42008000;
		/delete-node/ gpio@4200c000;
	};
};

/*
 * GPIO pinmux options. These options define the pinmux settings
 * for GPIO ports on the package, so that the GPIO driver can
 * select GPIO mux options during GPIO configuration.
 */

&gpio1{
	pinmux = <&iomuxc_gpio_ad_b0_00_gpio1_io00>,
		<&iomuxc_gpio_ad_b0_01_gpio1_io01>,
		<&iomuxc_gpio_ad_b0_02_gpio1_io02>,
		<&iomuxc_gpio_ad_b0_03_gpio1_io03>,
		<&iomuxc_gpio_ad_b0_04_gpio1_io04>,
		<&iomuxc_gpio_ad_b0_05_gpio1_io05>,
		<&iomuxc_gpio_ad_b0_06_gpio1_io06>,
		<&iomuxc_gpio_ad_b0_07_gpio1_io07>,
		<&iomuxc_gpio_ad_b0_08_gpio1_io08>,
		<&iomuxc_gpio_ad_b0_09_gpio1_io09>,
		<&iomuxc_gpio_ad_b0_10_gpio1_io10>,
		<&iomuxc_gpio_ad_b0_11_gpio1_io11>,
		<&iomuxc_gpio_ad_b0_12_gpio1_io12>,
		<&iomuxc_gpio_ad_b0_13_gpio1_io13>,
		<&iomuxc_gpio_ad_b0_14_gpio1_io14>,
		<&iomuxc_gpio_ad_b0_15_gpio1_io15>,
		<&iomuxc_gpio_ad_b1_00_gpio1_io16>,
		<&iomuxc_gpio_ad_b1_01_gpio1_io17>,
		<&iomuxc_gpio_ad_b1_02_gpio1_io18>,
		<&iomuxc_gpio_ad_b1_03_gpio1_io19>,
		<&iomuxc_gpio_ad_b1_04_gpio1_io20>,
		<&iomuxc_gpio_ad_b1_05_gpio1_io21>,
		<&iomuxc_gpio_ad_b1_06_gpio1_io22>,
		<&iomuxc_gpio_ad_b1_07_gpio1_io23>,
		<&iomuxc_gpio_ad_b1_08_gpio1_io24>,
		<&iomuxc_gpio_ad_b1_09_gpio1_io25>,
		<&iomuxc_gpio_ad_b1_10_gpio1_io26>,
		<&iomuxc_gpio_ad_b1_11_gpio1_io27>,
		<&iomuxc_gpio_ad_b1_12_gpio1_io28>,
		<&iomuxc_gpio_ad_b1_13_gpio1_io29>,
		<&iomuxc_gpio_ad_b1_14_gpio1_io30>,
		<&iomuxc_gpio_ad_b1_15_gpio1_io31>;
};

&gpio2{
	pinmux = <&iomuxc_gpio_b0_00_gpio2_io00>,
		<&iomuxc_gpio_b0_01_gpio2_io01>,
		<&iomuxc_gpio_b0_02_gpio2_io02>,
		<&iomuxc_gpio_b0_03_gpio2_io03>,
		<&iomuxc_gpio_b0_04_gpio2_io04>,
		<&iomuxc_gpio_b0_05_gpio2_io05>,
		<&iomuxc_gpio_b0_06_gpio2_io06>,
		<&iomuxc_gpio_b0_07_gpio2_io07>,
		<&iomuxc_gpio_b0_08_gpio2_io08>,
		<&iomuxc_gpio_b0_09_gpio2_io09>,
		<&iomuxc_gpio_b0_10_gpio2_io10>,
		<&iomuxc_gpio_b0_11_gpio2_io11>,
		<&iomuxc_gpio_b0_12_gpio2_io12>,
		<&iomuxc_gpio_b0_13_gpio2_io13>,
		<&iomuxc_gpio_b0_14_gpio2_io14>,
		<&iomuxc_gpio_b0_15_gpio2_io15>,
		<&iomuxc_gpio_b1_00_gpio2_io16>,
		<&iomuxc_gpio_b1_01_gpio2_io17>,
		<&iomuxc_gpio_b1_02_gpio2_io18>,
		<&iomuxc_gpio_b1_03_gpio2_io19>,
		<&iomuxc_gpio_b1_04_gpio2_io20>,
		<&iomuxc_gpio_b1_05_gpio2_io21>,
		<&iomuxc_gpio_b1_06_gpio2_io22>,
		<&iomuxc_gpio_b1_07_gpio2_io23>,
		<&iomuxc_gpio_b1_08_gpio2_io24>,
		<&iomuxc_gpio_b1_09_gpio2_io25>,
		<&iomuxc_gpio_b1_10_gpio2_io26>,
		<&iomuxc_gpio_b1_11_gpio2_io27>,
		<&iomuxc_gpio_b1_12_gpio2_io28>,
		<&iomuxc_gpio_b1_13_gpio2_io29>,
		<&iomuxc_gpio_b1_14_gpio2_io30>,
		<&iomuxc_gpio_b1_15_gpio2_io31>;
};

&gpio3{
	pinmux = <&iomuxc_gpio_sd_b1_00_gpio3_io00>,
		<&iomuxc_gpio_sd_b1_01_gpio3_io01>,
		<&iomuxc_gpio_sd_b1_02_gpio3_io02>,
		<&iomuxc_gpio_sd_b1_03_gpio3_io03>,
		<&iomuxc_gpio_sd_b1_04_gpio3_io04>,
		<&iomuxc_gpio_sd_b1_05_gpio3_io05>,
		<&iomuxc_gpio_sd_b1_06_gpio3_io06>,
		<&iomuxc_gpio_sd_b1_07_gpio3_io07>,
		<&iomuxc_gpio_sd_b1_08_gpio3_io08>,
		<&iomuxc_gpio_sd_b1_09_gpio3_io09>,
		<&iomuxc_gpio_sd_b1_10_gpio3_io10>,
		<&iomuxc_gpio_sd_b1_11_gpio3_io11>,
		<&iomuxc_gpio_sd_b0_00_gpio3_io12>,
		<&iomuxc_gpio_sd_b0_01_gpio3_io13>,
		<&iomuxc_gpio_sd_b0_02_gpio3_io14>,
		<&iomuxc_gpio_sd_b0_03_gpio3_io15>,
		<&iomuxc_gpio_sd_b0_04_gpio3_io16>,
		<&iomuxc_gpio_sd_b0_05_gpio3_io17>,
		<&iomuxc_gpio_emc_32_gpio3_io18>,
		<&iomuxc_gpio_emc_33_gpio3_io19>,
		<&iomuxc_gpio_emc_34_gpio3_io20>,
		<&iomuxc_gpio_emc_35_gpio3_io21>,
		<&iomuxc_gpio_emc_36_gpio3_io22>,
		<&iomuxc_gpio_emc_37_gpio3_io23>,
		<&iomuxc_gpio_emc_38_gpio3_io24>,
		<&iomuxc_gpio_emc_39_gpio3_io25>,
		<&iomuxc_gpio_emc_40_gpio3_io26>,
		<&iomuxc_gpio_emc_41_gpio3_io27>;
};

&gpio4{
	pinmux = <&iomuxc_gpio_emc_00_gpio4_io00>,
		<&iomuxc_gpio_emc_01_gpio4_io01>,
		<&iomuxc_gpio_emc_02_gpio4_io02>,
		<&iomuxc_gpio_emc_03_gpio4_io03>,
		<&iomuxc_gpio_emc_04_gpio4_io04>,
		<&iomuxc_gpio_emc_05_gpio4_io05>,
		<&iomuxc_gpio_emc_06_gpio4_io06>,
		<&iomuxc_gpio_emc_07_gpio4_io07>,
		<&iomuxc_gpio_emc_08_gpio4_io08>,
		<&iomuxc_gpio_emc_09_gpio4_io09>,
		<&iomuxc_gpio_emc_10_gpio4_io10>,
		<&iomuxc_gpio_emc_11_gpio4_io11>,
		<&iomuxc_gpio_emc_12_gpio4_io12>,
		<&iomuxc_gpio_emc_13_gpio4_io13>,
		<&iomuxc_gpio_emc_14_gpio4_io14>,
		<&iomuxc_gpio_emc_15_gpio4_io15>,
		<&iomuxc_gpio_emc_16_gpio4_io16>,
		<&iomuxc_gpio_emc_17_gpio4_io17>,
		<&iomuxc_gpio_emc_18_gpio4_io18>,
		<&iomuxc_gpio_emc_19_gpio4_io19>,
		<&iomuxc_gpio_emc_20_gpio4_io20>,
		<&iomuxc_gpio_emc_21_gpio4_io21>,
		<&iomuxc_gpio_emc_22_gpio4_io22>,
		<&iomuxc_gpio_emc_23_gpio4_io23>,
		<&iomuxc_gpio_emc_24_gpio4_io24>,
		<&iomuxc_gpio_emc_25_gpio4_io25>,
		<&iomuxc_gpio_emc_26_gpio4_io26>,
		<&iomuxc_gpio_emc_27_gpio4_io27>,
		<&iomuxc_gpio_emc_28_gpio4_io28>,
		<&iomuxc_gpio_emc_29_gpio4_io29>,
		<&iomuxc_gpio_emc_30_gpio4_io30>,
		<&iomuxc_gpio_emc_31_gpio4_io31>;
};

&gpio5{
	pinmux = <&iomuxc_snvs_wakeup_gpio5_io00>,
		<&iomuxc_snvs_pmic_on_req_gpio5_io01>,
		<&iomuxc_snvs_pmic_stby_req_gpio5_io02>;
};
