diff --git a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 index 221265241eb..e5875ccf1cc 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 +++ b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1021 @@ -37,6 +37,13 @@ config GPIO_MCUX_IGPIO endif # GPIO +if I2C + +config I2C_MCUX_LPI2C + default y + +endif # I2C + if SERIAL config UART_MCUX_LPUART diff --git a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1052 b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1052 index 154ecdb1d0c..6a0ea727da2 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1052 +++ b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1052 @@ -37,6 +37,13 @@ config GPIO_MCUX_IGPIO endif # GPIO +if I2C + +config I2C_MCUX_LPI2C + default y + +endif # I2C + if SERIAL config UART_MCUX_LPUART diff --git a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1062 b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1062 index 6b95827b517..8b6d09b24e9 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1062 +++ b/soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt1062 @@ -37,6 +37,13 @@ config GPIO_MCUX_IGPIO endif # GPIO +if I2C + +config I2C_MCUX_LPI2C + default y + +endif # I2C + if SERIAL config UART_MCUX_LPUART diff --git a/soc/arm/nxp_imx/rt/Kconfig.soc b/soc/arm/nxp_imx/rt/Kconfig.soc index 4ad8ff3b70d..b77b774bf2c 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.soc +++ b/soc/arm/nxp_imx/rt/Kconfig.soc @@ -14,6 +14,7 @@ config SOC_MIMXRT1021 select HAS_MCUX select HAS_MCUX_CCM select HAS_MCUX_IGPIO + select HAS_MCUX_LPI2C select HAS_MCUX_LPSPI select HAS_MCUX_LPUART select HAS_MCUX_TRNG @@ -28,6 +29,7 @@ config SOC_MIMXRT1051 select HAS_MCUX select HAS_MCUX_CCM select HAS_MCUX_IGPIO + select HAS_MCUX_LPI2C select HAS_MCUX_LPSPI select HAS_MCUX_LPUART select HAS_MCUX_TRNG @@ -42,6 +44,7 @@ config SOC_MIMXRT1052 select HAS_MCUX select HAS_MCUX_CCM select HAS_MCUX_IGPIO + select HAS_MCUX_LPI2C select HAS_MCUX_LPSPI select HAS_MCUX_LPUART select HAS_MCUX_TRNG @@ -56,6 +59,7 @@ config SOC_MIMXRT1061 select HAS_MCUX select HAS_MCUX_CCM select HAS_MCUX_IGPIO + select HAS_MCUX_LPI2C select HAS_MCUX_LPUART select HAS_MCUX_TRNG select CPU_HAS_FPU @@ -69,6 +73,7 @@ config SOC_MIMXRT1062 select HAS_MCUX select HAS_MCUX_CCM select HAS_MCUX_IGPIO + select HAS_MCUX_LPI2C select HAS_MCUX_LPUART select HAS_MCUX_TRNG select CPU_HAS_FPU diff --git a/soc/arm/nxp_imx/rt/dts_fixup.h b/soc/arm/nxp_imx/rt/dts_fixup.h index 273a4aaef8d..0c1aeb6543a 100644 --- a/soc/arm/nxp_imx/rt/dts_fixup.h +++ b/soc/arm/nxp_imx/rt/dts_fixup.h @@ -25,6 +25,38 @@ #define DT_MCUX_IGPIO_5_IRQ_1 DT_NXP_IMX_GPIO_400C0000_IRQ_1 #define DT_MCUX_IGPIO_5_IRQ_1_PRI DT_NXP_IMX_GPIO_400C0000_IRQ_1_PRIORITY +#define CONFIG_I2C_1_NAME DT_NXP_IMX_LPI2C_403F0000_LABEL +#define DT_I2C_MCUX_LPI2C_1_BASE_ADDRESS DT_NXP_IMX_LPI2C_403F0000_BASE_ADDRESS +#define DT_I2C_MCUX_LPI2C_1_IRQ DT_NXP_IMX_LPI2C_403F0000_IRQ_0 +#define DT_I2C_MCUX_LPI2C_1_IRQ_PRI DT_NXP_IMX_LPI2C_403F0000_IRQ_0_PRIORITY +#define DT_I2C_MCUX_LPI2C_1_BITRATE DT_NXP_IMX_LPI2C_403F0000_CLOCK_FREQUENCY +#define DT_I2C_MCUX_LPI2C_1_CLOCK_NAME DT_NXP_IMX_LPI2C_403F0000_CLOCK_CONTROLLER +#define DT_I2C_MCUX_LPI2C_1_CLOCK_SUBSYS DT_NXP_IMX_LPI2C_403F0000_CLOCK_NAME + +#define CONFIG_I2C_2_NAME DT_NXP_IMX_LPI2C_403F4000_LABEL +#define DT_I2C_MCUX_LPI2C_2_BASE_ADDRESS DT_NXP_IMX_LPI2C_403F4000_BASE_ADDRESS +#define DT_I2C_MCUX_LPI2C_2_IRQ DT_NXP_IMX_LPI2C_403F4000_IRQ_0 +#define DT_I2C_MCUX_LPI2C_2_IRQ_PRI DT_NXP_IMX_LPI2C_403F4000_IRQ_0_PRIORITY +#define DT_I2C_MCUX_LPI2C_2_BITRATE DT_NXP_IMX_LPI2C_403F4000_CLOCK_FREQUENCY +#define DT_I2C_MCUX_LPI2C_2_CLOCK_NAME DT_NXP_IMX_LPI2C_403F4000_CLOCK_CONTROLLER +#define DT_I2C_MCUX_LPI2C_2_CLOCK_SUBSYS DT_NXP_IMX_LPI2C_403F4000_CLOCK_NAME + +#define CONFIG_I2C_3_NAME DT_NXP_IMX_LPI2C_403F8000_LABEL +#define DT_I2C_MCUX_LPI2C_3_BASE_ADDRESS DT_NXP_IMX_LPI2C_403F8000_BASE_ADDRESS +#define DT_I2C_MCUX_LPI2C_3_IRQ DT_NXP_IMX_LPI2C_403F8000_IRQ_0 +#define DT_I2C_MCUX_LPI2C_3_IRQ_PRI DT_NXP_IMX_LPI2C_403F8000_IRQ_0_PRIORITY +#define DT_I2C_MCUX_LPI2C_3_BITRATE DT_NXP_IMX_LPI2C_403F8000_CLOCK_FREQUENCY +#define DT_I2C_MCUX_LPI2C_3_CLOCK_NAME DT_NXP_IMX_LPI2C_403F8000_CLOCK_CONTROLLER +#define DT_I2C_MCUX_LPI2C_3_CLOCK_SUBSYS DT_NXP_IMX_LPI2C_403F8000_CLOCK_NAME + +#define CONFIG_I2C_4_NAME DT_NXP_IMX_LPI2C_403FC000_LABEL +#define DT_I2C_MCUX_LPI2C_4_BASE_ADDRESS DT_NXP_IMX_LPI2C_403FC000_BASE_ADDRESS +#define DT_I2C_MCUX_LPI2C_4_IRQ DT_NXP_IMX_LPI2C_403FC000_IRQ_0 +#define DT_I2C_MCUX_LPI2C_4_IRQ_PRI DT_NXP_IMX_LPI2C_403FC000_IRQ_0_PRIORITY +#define DT_I2C_MCUX_LPI2C_4_BITRATE DT_NXP_IMX_LPI2C_403FC000_CLOCK_FREQUENCY +#define DT_I2C_MCUX_LPI2C_4_CLOCK_NAME DT_NXP_IMX_LPI2C_403FC000_CLOCK_CONTROLLER +#define DT_I2C_MCUX_LPI2C_4_CLOCK_SUBSYS DT_NXP_IMX_LPI2C_403FC000_CLOCK_NAME + #define DT_UART_MCUX_LPUART_1_BASE_ADDRESS DT_NXP_KINETIS_LPUART_40184000_BASE_ADDRESS #define DT_UART_MCUX_LPUART_1_NAME DT_NXP_KINETIS_LPUART_40184000_LABEL #define DT_UART_MCUX_LPUART_1_IRQ DT_NXP_KINETIS_LPUART_40184000_IRQ_0 diff --git a/soc/arm/nxp_imx/rt/soc.c b/soc/arm/nxp_imx/rt/soc.c index e6b378598a0..5f29b7e918c 100644 --- a/soc/arm/nxp_imx/rt/soc.c +++ b/soc/arm/nxp_imx/rt/soc.c @@ -131,6 +131,11 @@ static ALWAYS_INLINE void clkInit(void) CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */ #endif +#ifdef CONFIG_I2C_MCUX_LPI2C + CLOCK_SetMux(kCLOCK_Lpi2cMux, 0); /* Set I2C source as USB1 PLL 480M */ + CLOCK_SetDiv(kCLOCK_Lpi2cDiv, 5); /* Set I2C divider to 6 */ +#endif + #ifdef CONFIG_SPI_MCUX_LPSPI CLOCK_SetMux(kCLOCK_LpspiMux, 1); /* Set SPI source to USB1 PFD0 720M */ CLOCK_SetDiv(kCLOCK_LpspiDiv, 7); /* Set SPI divider to 8 */