From a019e92d235e0038639a6d896bc02ca59989ee3e Mon Sep 17 00:00:00 2001 From: Loic Poulain Date: Mon, 1 Jul 2019 14:47:14 +0200 Subject: [PATCH] soc: nxp: rt: Add CSI video support Add CSI node to generic nxp rt dtsi. Add corresponding dts binding. Add CSI capability for rt MCUs. Signed-off-by: Loic Poulain --- dts/arm/nxp/nxp_rt.dtsi | 8 +++++++ dts/bindings/video/nxp,imx-csi.yaml | 26 +++++++++++++++++++++ modules/Kconfig.mcux | 5 ++++ soc/arm/nxp_imx/rt/Kconfig.defconfig.series | 7 ++++++ soc/arm/nxp_imx/rt/Kconfig.soc | 5 ++++ soc/arm/nxp_imx/rt/dts_fixup.h | 6 +++++ soc/arm/nxp_imx/rt/soc.c | 5 ++++ 7 files changed, 62 insertions(+) create mode 100644 dts/bindings/video/nxp,imx-csi.yaml diff --git a/dts/arm/nxp/nxp_rt.dtsi b/dts/arm/nxp/nxp_rt.dtsi index b5379ea45de..a80327e6bd2 100644 --- a/dts/arm/nxp/nxp_rt.dtsi +++ b/dts/arm/nxp/nxp_rt.dtsi @@ -547,6 +547,14 @@ clocks = <&ccm IMX_CCM_USDHC2_CLK 0 0>; label = "USDHC_2"; }; + + csi: csi@402bc000 { + compatible = "nxp,imx-csi"; + reg = <0x402BC000 0x4000>; + interrupts = <43 1>; + status = "disabled"; + label = "CSI"; + }; }; }; diff --git a/dts/bindings/video/nxp,imx-csi.yaml b/dts/bindings/video/nxp,imx-csi.yaml new file mode 100644 index 00000000000..a0dd816c10a --- /dev/null +++ b/dts/bindings/video/nxp,imx-csi.yaml @@ -0,0 +1,26 @@ +# +# Copyright (c) 2019, Linaro Limited +# +# SPDX-License-Identifier: Apache-2.0 +# + +title: NXP MCUX CSI module + +description: > + This binding gives a base representation of NXP MCUX CMOS Sensor Interface + +compatible: "nxp,imx-csi" + +include: base.yaml + +properties: + interrupts: + required: true + + label: + required: true + + sensor-label: + required: true + type: string + description: label of connected sensor device diff --git a/modules/Kconfig.mcux b/modules/Kconfig.mcux index dbb654dbfe1..3e30899e018 100644 --- a/modules/Kconfig.mcux +++ b/modules/Kconfig.mcux @@ -152,4 +152,9 @@ config HAS_MCUX_SMC help Set if the SMC module is present in the SoC. +config HAS_MCUX_CSI + bool + help + Set if the CMOS Sensor Interface module is present in the SoC. + endif # HAS_MCUX diff --git a/soc/arm/nxp_imx/rt/Kconfig.defconfig.series b/soc/arm/nxp_imx/rt/Kconfig.defconfig.series index 62a84eccd87..3e37dd7e6c5 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.defconfig.series +++ b/soc/arm/nxp_imx/rt/Kconfig.defconfig.series @@ -165,6 +165,13 @@ config USB_DC_NXP_EHCI endif # USB +if VIDEO + +config VIDEO_MCUX_CSI + default y if HAS_MCUX_CSI + +endif + source "soc/arm/nxp_imx/rt/Kconfig.defconfig.mimxrt*" endif # SOC_SERIES_IMX_RT diff --git a/soc/arm/nxp_imx/rt/Kconfig.soc b/soc/arm/nxp_imx/rt/Kconfig.soc index 588547292f8..54a7aab2abc 100644 --- a/soc/arm/nxp_imx/rt/Kconfig.soc +++ b/soc/arm/nxp_imx/rt/Kconfig.soc @@ -70,6 +70,7 @@ config SOC_MIMXRT1051 select HAS_MCUX_USB_EHCI select HAS_MCUX_USDHC1 select HAS_MCUX_USDHC2 + select HAS_MCUX_CSI config SOC_MIMXRT1052 bool "SOC_MIMXRT1052" @@ -93,6 +94,7 @@ config SOC_MIMXRT1052 select HAS_MCUX_USB_EHCI select HAS_MCUX_USDHC1 select HAS_MCUX_USDHC2 + select HAS_MCUX_CSI config SOC_MIMXRT1061 bool "SOC_MIMXRT1061" @@ -113,6 +115,7 @@ config SOC_MIMXRT1061 select HAS_MCUX_USB_EHCI select HAS_MCUX_USDHC1 select HAS_MCUX_USDHC2 + select HAS_MCUX_CSI config SOC_MIMXRT1062 bool "SOC_MIMXRT1062" @@ -136,6 +139,7 @@ config SOC_MIMXRT1062 select HAS_MCUX_USB_EHCI select HAS_MCUX_USDHC1 select HAS_MCUX_USDHC2 + select HAS_MCUX_CSI config SOC_MIMXRT1064 bool "SOC_MIMXRT1064" @@ -159,6 +163,7 @@ config SOC_MIMXRT1064 select HAS_MCUX_USB_EHCI select HAS_MCUX_USDHC1 select HAS_MCUX_USDHC2 + select HAS_MCUX_CSI endchoice diff --git a/soc/arm/nxp_imx/rt/dts_fixup.h b/soc/arm/nxp_imx/rt/dts_fixup.h index fef7cc7a066..c72d19680f0 100644 --- a/soc/arm/nxp_imx/rt/dts_fixup.h +++ b/soc/arm/nxp_imx/rt/dts_fixup.h @@ -233,4 +233,10 @@ #define DT_PWM_MCUX_15_NAME DT_NXP_IMX_PWM_403E8000_PWM3_LABEL #define DT_PWM_MCUX_15_INDEX DT_NXP_IMX_PWM_403E8000_PWM3_INDEX +#define DT_VIDEO_MCUX_CSI_BASE_ADDRESS DT_NXP_IMX_CSI_402BC000_BASE_ADDRESS +#define DT_VIDEO_MCUX_CSI_IRQ DT_NXP_IMX_CSI_402BC000_IRQ_0 +#define DT_VIDEO_MCUX_CSI_IRQ_PRI DT_NXP_IMX_CSI_402BC000_IRQ_0_PRIORITY +#define DT_VIDEO_MCUX_CSI_NAME DT_NXP_IMX_CSI_402BC000_LABEL +#define DT_VIDEO_MCUX_CSI_SENSOR_NAME DT_NXP_IMX_CSI_402BC000_SENSOR_LABEL + /* End of SoC Level DTS fixup file */ diff --git a/soc/arm/nxp_imx/rt/soc.c b/soc/arm/nxp_imx/rt/soc.c index 010ded48e01..e5e16ad92d2 100644 --- a/soc/arm/nxp_imx/rt/soc.c +++ b/soc/arm/nxp_imx/rt/soc.c @@ -199,6 +199,11 @@ static ALWAYS_INLINE void clock_init(void) CLOCK_SetMux(kCLOCK_Usdhc2Mux, 1U); CLOCK_EnableClock(kCLOCK_Usdhc2); #endif +#endif +#ifdef CONFIG_VIDEO_MCUX_CSI + CLOCK_EnableClock(kCLOCK_Csi); /* Disable CSI clock gate */ + CLOCK_SetDiv(kCLOCK_CsiDiv, 0); /* Set CSI divider to 1 */ + CLOCK_SetMux(kCLOCK_CsiMux, 0); /* Set CSI source to OSC 24M */ #endif /* Keep the system clock running so SYSTICK can wake up the system from