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

&ccm {
	arm-podf {
		clock-div = <2>;
	};

	ipg-podf {
		clock-div = <4>;
	};
};

/ {
	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>;
};
