/*
 * Copyright (c) 2023, NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * Note: File generated by gen_board_pinctrl.py
 * from mimxrt1040_evk.mex
 */

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

&pinctrl {
	/* Route ADC1 IN3 and IN4 to J33 pins 1 and 2 */
	pinmux_adc1: pinmux_adc1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_14_adc1_in3>,
				<&iomuxc_gpio_ad_b0_15_adc1_in4>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	/* Route PWM1 A3 to J16, pin 6 on arduino header */
	pinmux_flexpwm1_pwm3: pinmux_flexpwm1_pwm3 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_10_flexpwm1_pwma3>;
			drive-strength = "r0-6";
			slew-rate = "fast";
			nxp,speed = "100-mhz";
		};
	};

	/* LPI2C1 SDA: J17 pin 9, LPI2C1 SCL: J17 pin 10 */
	pinmux_lpi2c1: pinmux_lpi2c1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b1_00_lpi2c1_scl>,
				<&iomuxc_gpio_ad_b1_01_lpi2c1_sda>;
			drive-strength = "r0-6";
			drive-open-drain;
			slew-rate = "slow";
			nxp,speed = "100-mhz";
			input-enable;
		};
	};

	/* Conflicts with lpspi1 pin routing. SDA: J17 pin 3, SCL: J17 pin 6 */
	pinmux_lpi2c3: pinmux_lpi2c3 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_00_lpi2c3_scl>,
				<&iomuxc_gpio_sd_b0_01_lpi2c3_sda>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
			input-enable;
		};
	};

	/* Note that R350, R346, and R360 must be populated to use SPI */
	pinmux_lpspi1: pinmux_lpspi1 {
		group0 {
			pinmux = <&iomuxc_gpio_sd_b0_02_lpspi1_sdo>,
				<&iomuxc_gpio_sd_b0_03_lpspi1_sdi>,
				<&iomuxc_gpio_sd_b0_00_lpspi1_sck>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

	pinmux_lpuart1: pinmux_lpuart1 {
		group0 {
			pinmux = <&iomuxc_gpio_ad_b0_13_lpuart1_rx>,
				<&iomuxc_gpio_ad_b0_12_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_13_gpio1_io13>;
			drive-strength = "r0";
			bias-pull-up;
			bias-pull-up-value = "100k";
			slew-rate = "slow";
			nxp,speed = "50-mhz";
		};
		group1 {
			pinmux = <&iomuxc_gpio_ad_b0_12_lpuart1_tx>;
			drive-strength = "r0-6";
			slew-rate = "slow";
			nxp,speed = "100-mhz";
		};
	};

};

