/*
 * Copyright (c) 2022, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <nxp/nxp_rt10xx.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>;
};
