/*
 * NOTE: File generated by lpc_cfg_utils.py
 * from LPC55S36.mex
 *
 * Copyright 2022-2023 NXP
 * SPDX-License-Identifier: Apache-2.0
 */


#include <nxp/lpc/LPC55S36JBD100-pinctrl.h>

&pinctrl {
	/* Configures pin routing and optionally pin electrical features. */
	pinmux_flexcomm0_usart: pinmux_flexcomm0_usart {
		group0 {
			pinmux = <FC0_RXD_SDA_MOSI_DATA_PIO0_29>,
				<FC0_TXD_SCL_MISO_WS_PIO0_30>;
			slew-rate = "standard";
		};
	};

	/* Configures pin routing and optionally pin electrical features. */
	pinmux_flexcomm2_i2c: pinmux_flexcomm2_i2c {
		group0 {
			pinmux = <FC2_CTS_SDA_SSEL0_PIO1_26>,
				<FC2_TXD_SCL_MISO_WS_PIO1_25>;
			slew-rate = "standard";
		};
	};

	/* Configures pin routing and optionally pin electrical features. */
	pinmux_hs_lspi_default: pinmux_hs_lspi_default {
		group0 {
			pinmux = <HS_SPI_MISO_PIO1_3>,
				<HS_SPI_MOSI_PIO0_26>,
				<HS_SPI_SCK_PIO1_2>,
				<HS_SPI_SSEL0_PIO0_20>;
			slew-rate = "standard";
		};
	};

	pinmux_lpadc0: pinmux_lpadc0 {
		group0 {
			pinmux = <ADC0_CH0A_PIO1_9>;
			slew-rate = "standard";
			nxp,analog-mode;
		};
	};

	/* Configures pin routing and optionally pin electrical features. */
	pinmux_sctimer_default: pinmux_sctimer_default {
		group0 {
			pinmux = <SCT0_OUT0_PIO1_4>,
				<SCT0_OUT2_PIO0_15>;
			slew-rate = "standard";
		};
	};

	/* Configures pins for CAN0 */
	pinmux_mcan_can0: pinmux_mcan_can0 {
		group0 {
			pinmux = <CAN0_RD_PIO1_3>,
				 <CAN0_TD_PIO1_2>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm0_pwm0: pinmux_flexpwm0_pwm0 {
		group0 {
			pinmux = <PWM0_A0_PIO1_20>,
				<PWM0_B0_PIO1_17>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm0_pwm1: pinmux_flexpwm0_pwm1 {
		group0 {
			pinmux = <PWM0_A1_PIO1_6>,
				<PWM0_B1_PIO1_22>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm0_pwm2: pinmux_flexpwm0_pwm2 {
		group0 {
			pinmux = <PWM0_A2_PIO1_8>,
				<PWM0_B2_PIO1_4>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm1_pwm0: pinmux_flexpwm1_pwm0 {
		group0 {
			pinmux = <PWM1_A0_PIO1_21>,
				<PWM1_B0_PIO0_3>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm1_pwm1: pinmux_flexpwm1_pwm1 {
		group0 {
			pinmux = <PWM1_A1_PIO1_23>,
				<PWM1_B1_PIO0_21>;
			slew-rate = "standard";
		};
	};

	pinmux_flexpwm1_pwm2: pinmux_flexpwm1_pwm2 {
		group0 {
			pinmux = <PWM1_A2_PIO1_25>,
				<PWM1_B2_PIO1_31>;
			slew-rate = "standard";
		};
	};

	pinmux_usbfs: pinmux_usbfs {
		group0 {
			pinmux = <USB0_VBUS_PIO1_31>;
			slew-rate = "standard";
		};
	};

	pinmux_dac0: pinmux_dac0 {
		group0 {
			pinmux = <DAC0_OUT_PIO1_22>;
			slew-rate = "standard";
			nxp,analog-mode;
		};
	};
};
