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


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

&pinctrl {
	pinmux_flexcomm0_usart: pinmux_flexcomm0_usart {
		group0 {
			pinmux = <FC0_TXD_SCL_MISO_WS_PIO0_30>,
				<FC0_RXD_SDA_MOSI_DATA_PIO0_29>;
			slew-rate = "standard";
		};
	};

	/* conflicts with hs_lspi pins */
	pinmux_flexcomm2_usart: pinmux_flexcomm2_usart {
		group0 {
			pinmux = <FC2_RXD_SDA_MOSI_DATA_PIO1_24>,
				<FC2_TXD_SCL_MISO_WS_PIO0_27>;
			slew-rate = "standard";
		};
	};

	pinmux_flexcomm4_i2c: pinmux_flexcomm4_i2c {
		group0 {
			pinmux = <FC4_TXD_SCL_MISO_WS_PIO1_20>,
				<FC4_RXD_SDA_MOSI_DATA_PIO1_21>;
			slew-rate = "standard";
		};
	};

	pinmux_flexcomm6_i2s: pinmux_flexcomm6_i2s {
		group0 {
			pinmux = <FC6_RXD_SDA_MOSI_DATA_PIO1_13>;
			bias-pull-up;
			slew-rate = "standard";
		};
	};

	pinmux_flexcomm7_i2s: pinmux_flexcomm7_i2s {
		group0 {
			pinmux = <FC7_TXD_SCL_MISO_WS_PIO0_19>,
				<FC7_RXD_SDA_MOSI_DATA_PIO0_20>,
				<FC7_SCK_PIO0_21>;
			bias-pull-up;
			slew-rate = "standard";
		};
	};

	pinmux_hs_lspi_default: pinmux_hs_lspi_default {
		group0 {
			pinmux = <HS_SPI_SSEL1_PIO1_1>,
				<HS_SPI_SCK_PIO1_2>,
				<HS_SPI_MISO_PIO1_3>,
				<HS_SPI_MOSI_PIO0_26>;
			bias-pull-up;
			slew-rate = "standard";
		};
	};

	pinmux_lpadc0: pinmux_lpadc0 {
		group0 {
			pinmux = <ADC0_CH0_PIO0_23>,
				<ADC0_CH8_PIO0_16>,
				<ADC0_CH4_PIO1_8>,
				<ADC0_CH12_PIO1_9>;
			slew-rate = "standard";
			nxp,analog-mode;
		};
	};

	pinmux_sctimer_default: pinmux_sctimer_default {
		group0 {
			pinmux = <SCT0_OUT2_PIO0_15>,
				<SCT0_OUT0_PIO1_4>;
			slew-rate = "standard";
		};
	};

	/* conflicts with sctimer pins */
	pinmux_sdif_default: pinmux_sdif_default {
		group0 {
			pinmux = <SDIF_SD0_D0_PIO0_24>,
				<SDIF_SD0_D1_PIO0_25>,
				<SDIF_SD0_D2_PIO0_31>,
				<SD0_CLK_PIO0_7>,
				<SD0_CMD_PIO0_8>,
				<SD0_POW_EN_PIO0_9>,
				<SDIF_SD0_D3_PIO1_0>;
			slew-rate = "fast";
		};
		group1 {
			pinmux = <SD0_WR_PRT_PIO0_15>,
				<SD0_CARD_DET_N_PIO0_17>;
			slew-rate = "standard";
		};
	};

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